增加问题

pull/6/head
yuanguangxin 4 years ago
parent d2a6e4cabc
commit 1a18e5063d

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ChangeListManager">
<list default="true" id="af7ffdf2-4ddc-4ed6-8222-60ed5acbc2ed" name="Default Changelist" comment="新增JVM性能监控/调优相关">
<list default="true" id="af7ffdf2-4ddc-4ed6-8222-60ed5acbc2ed" name="Default Changelist" comment="">
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Rocket.md" beforeDir="false" afterPath="$PROJECT_DIR$/Rocket.md" afterDir="false" />
</list>
@ -265,8 +265,10 @@
<workItem from="1585041029099" duration="2193000" />
<workItem from="1585219892120" duration="917000" />
<workItem from="1585223904505" duration="7719000" />
<workItem from="1585376676883" duration="530000" />
<workItem from="1585657110826" duration="888000" />
<workItem from="1585376676883" duration="673000" />
<workItem from="1585460780308" duration="4000" />
<workItem from="1586005610200" duration="115000" />
<workItem from="1586346473200" duration="439000" />
</task>
<task id="LOCAL-00012" summary="add q94/98/144/145">
<created>1581102125245</created>
@ -604,12 +606,12 @@
<option name="project" value="LOCAL" />
<updated>1585234195148</updated>
</task>
<task id="LOCAL-00060" summary="新增JVM性能监控/调优相关">
<created>1585657673868</created>
<task id="LOCAL-00060" summary="add q62">
<created>1585377224497</created>
<option name="number" value="00060" />
<option name="presentableId" value="LOCAL-00060" />
<option name="project" value="LOCAL" />
<updated>1585657673869</updated>
<updated>1585377224497</updated>
</task>
<option name="localTasksCounter" value="61" />
<servers />
@ -688,8 +690,8 @@
<MESSAGE value="add q64" />
<MESSAGE value="add q155" />
<MESSAGE value="add q61" />
<MESSAGE value="新增JVM性能监控/调优相关" />
<option name="LAST_COMMIT_MESSAGE" value="新增JVM性能监控/调优相关" />
<MESSAGE value="add q62" />
<option name="LAST_COMMIT_MESSAGE" value="add q62" />
</component>
<component name="WindowStateProjectService">
<state x="320" y="115" key="#Inspections" timestamp="1581061018990">
@ -704,14 +706,14 @@
<screen x="0" y="0" width="1440" height="900" />
</state>
<state x="533" y="166" key="#com.intellij.ide.util.MemberChooser/0.0.1440.900@0.0.1440.900" timestamp="1578548165321" />
<state x="303" y="50" key="CommitChangelistDialog2" timestamp="1585658308652">
<state x="303" y="50" key="CommitChangelistDialog2" timestamp="1585377224334">
<screen x="0" y="0" width="1440" height="900" />
</state>
<state x="303" y="50" key="CommitChangelistDialog2/0.0.1440.900@0.0.1440.900" timestamp="1585658308652" />
<state x="143" y="78" width="1152" height="720" key="DiffContextDialog" timestamp="1585657797990">
<screen x="0" y="0" width="1440" height="900" />
<state x="303" y="50" key="CommitChangelistDialog2/0.0.1440.900@0.0.1440.900" timestamp="1585377224334" />
<state x="143" y="78" width="1152" height="720" key="DiffContextDialog" timestamp="1585232660808">
<screen x="0" y="23" width="1440" height="797" />
</state>
<state x="143" y="78" width="1152" height="720" key="DiffContextDialog/0.0.1440.900@0.0.1440.900" timestamp="1585657797990" />
<state x="143" y="78" width="1152" height="720" key="DiffContextDialog/0.0.1440.900@0.0.1440.900" timestamp="1585232656095" />
<state x="144" y="78" width="1152" height="720" key="DiffContextDialog/0.23.1440.793@0.23.1440.793" timestamp="1582714686712" />
<state x="143" y="78" width="1152" height="720" key="DiffContextDialog/0.23.1440.797@0.23.1440.797" timestamp="1585232660808" />
<state width="1398" height="303" key="GridCell.Tab.0.bottom" timestamp="1585235047508">
@ -754,38 +756,34 @@
</state>
<state width="1398" height="303" key="GridCell.Tab.1.right/0.0.1440.900@0.0.1440.900" timestamp="1585235047510" />
<state width="1398" height="304" key="GridCell.Tab.1.right/0.23.1440.797@0.23.1440.797" timestamp="1580408030266" />
<state x="431" y="173" key="MultipleFileMergeDialog" timestamp="1582971939233">
<state x="431" y="173" key="MultipleFileMergeDialog" timestamp="1586346484190">
<screen x="0" y="0" width="1440" height="900" />
</state>
<state x="431" y="173" key="MultipleFileMergeDialog/0.0.1440.900@0.0.1440.900" timestamp="1582971939233" />
<state x="431" y="173" key="MultipleFileMergeDialog/0.0.1440.900@0.0.1440.900" timestamp="1586346484190" />
<state x="221" y="63" key="SettingsEditor" timestamp="1585223890241">
<screen x="0" y="0" width="1440" height="900" />
</state>
<state x="221" y="63" key="SettingsEditor/0.0.1440.900@0.0.1440.900" timestamp="1585223890241" />
<state x="474" y="173" key="VCS.ChangeListViewerDialog" timestamp="1585577172815">
<screen x="0" y="0" width="1440" height="900" />
</state>
<state x="474" y="173" key="VCS.ChangeListViewerDialog/0.0.1440.900@0.0.1440.900" timestamp="1585577172815" />
<state x="320" y="190" key="Vcs.Push.Dialog.v2" timestamp="1585658310380">
<state x="320" y="190" key="Vcs.Push.Dialog.v2" timestamp="1585377225629">
<screen x="0" y="0" width="1440" height="900" />
</state>
<state x="320" y="190" key="Vcs.Push.Dialog.v2/0.0.1440.900@0.0.1440.900" timestamp="1585658310380" />
<state x="320" y="190" key="Vcs.Push.Dialog.v2/0.0.1440.900@0.0.1440.900" timestamp="1585377225629" />
<state x="100" y="100" width="1240" height="700" key="com.intellij.history.integration.ui.views.DirectoryHistoryDialog" timestamp="1581744794182">
<screen x="0" y="23" width="1440" height="797" />
</state>
<state x="100" y="100" width="1240" height="700" key="com.intellij.history.integration.ui.views.DirectoryHistoryDialog/0.23.1440.797@0.23.1440.797" timestamp="1581744794182" />
<state x="503" y="374" key="com.intellij.openapi.vcs.update.UpdateOrStatusOptionsDialogupdate-v2" timestamp="1585657710391">
<state x="503" y="374" key="com.intellij.openapi.vcs.update.UpdateOrStatusOptionsDialogupdate-v2" timestamp="1586346477174">
<screen x="0" y="0" width="1440" height="900" />
</state>
<state x="503" y="374" key="com.intellij.openapi.vcs.update.UpdateOrStatusOptionsDialogupdate-v2/0.0.1440.900@0.0.1440.900" timestamp="1585657710391" />
<state x="503" y="374" key="com.intellij.openapi.vcs.update.UpdateOrStatusOptionsDialogupdate-v2/0.0.1440.900@0.0.1440.900" timestamp="1586346477174" />
<state x="100" y="100" width="1240" height="700" key="dock-window-1" timestamp="1585037767258">
<screen x="0" y="23" width="1440" height="797" />
</state>
<state x="100" y="100" width="1240" height="700" key="dock-window-1/0.23.1440.797@0.23.1440.797" timestamp="1585037767258" />
<state x="378" y="207" width="683" height="486" key="find.popup" timestamp="1582564254151">
<state x="378" y="207" width="683" height="486" key="find.popup" timestamp="1586005661030">
<screen x="0" y="0" width="1440" height="900" />
</state>
<state x="378" y="207" width="683" height="486" key="find.popup/0.0.1440.900@0.0.1440.900" timestamp="1582564254151" />
<state x="378" y="207" width="683" height="486" key="find.popup/0.0.1440.900@0.0.1440.900" timestamp="1586005661030" />
<state x="398" y="248" key="git4idea.merge.GitPullDialog" timestamp="1582971880352">
<screen x="0" y="0" width="1440" height="900" />
</state>

@ -409,12 +409,20 @@ AQS内部有3个对象一个是state用于计数器类似gc的回收计
2. 一般来说如果是IO密集型应用则线程池大小设置为2N+1。
3. 在IO优化中线程等待时间所占比例越高需要越多线程线程CPU时间所占比例越高需要越少线程。这样的估算公式可能更适合最佳线程数目 = ((线程等待时间+线程CPU时间/线程CPU时间 * CPU数目
### 如何实现一个带优先级的线程池
利用priority参数继承 ThreadPoolExecutor 使用 PriorityBlockingQueue 优先级队列。
### ThreadLocal的原理和实现
ThreadLoal 变量,线程局部变量,同一个 ThreadLocal 所包含的对象,在不同的 Thread 中有不同的副本。ThreadLocal 变量通常被private static修饰。当一个线程结束时它所使用的所有 ThreadLocal 相对的实例副本都可被回收。
一个线程内可以存在多个 ThreadLocal 对象,所以其实是 ThreadLocal 内部维护了一个 Map ,这个 Map 不是直接使用的 HashMap ,而是 ThreadLocal 实现的一个叫做 ThreadLocalMap 的静态内部类。而我们使用的 get()、set() 方法其实都是调用了这个ThreadLocalMap类对应的 get()、set() 方法。
### ThreadLocal中的内存泄漏
在ThreadLocal中内存泄漏是指ThreadLocalMap中的Entry中的key为null而value不为null。因为key为null导致value一直访问不到而根据可达性分析导致在垃圾回收的时候进行可达性分析的时候,value可达从而不会被回收掉但是该value永远不能被访问到这样就存在了内存泄漏。如果 key 是强引用,那么发生 GC 时 ThreadLocalMap 还持有 ThreadLocal 的强引用,会导致 ThreadLocal 不会被回收,从而导致内存泄漏。弱引用 ThreadLocal 不会内存泄漏,对应的 value 在下一次 ThreadLocalMap 调用 set、get、remove 方法时被清除,这算是最优的解决方案。
### ThreadLocal为什么要使用弱引用和内存泄露问题
Map中的key为一个threadlocal实例. 这个Map的确使用了弱引用,不过弱引用只是针对key.每个key都弱引用指向threadlocal.假如每个key都强引用指向threadlocal也就是上图虚线那里是个强引用那么这个threadlocal就会因为和entry存在强引用无法被回收造成内存泄漏 除非线程结束线程被回收了map也跟着回收。
@ -431,6 +439,11 @@ HashSet的value存的是一个static finial PRESENT = newObject()。而HashSet
未精确定义字节。Java语言表达式所操作的boolean值在编译之后都使用Java虚拟机中的int数据类型来代替而boolean数组将会被编码成Java虚拟机的byte数组每个元素boolean元素占8位。
### 阻塞非阻塞与同步异步的区别
1. 同步和异步关注的是消息通信机制,所谓同步,就是在发出一个调用时,在没有得到结果之前,该调用就不返回。但是一旦调用返回,就得到返回值了。而异步则是相反,调用在发出之后,这个调用就直接返回了,所以没有返回结果。换句话说,当一个异步过程调用发出后,调用者不会立刻得到结果。而是在调用发出后,被调用者通过状态、通知来通知调用者,或通过回调函数处理这个调用。
2. 阻塞和非阻塞关注的是程序在等待调用结果(消息,返回值)时的状态。阻塞调用是指调用结果返回之前,当前线程会被挂起。调用线程只有在得到结果之后才会返回。非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程。
## Spring
### 什么是三级缓存
@ -691,7 +704,7 @@ void quick_sort(int a[], int low, int high){
### 秒杀并发情况下库存为负数问题
1. for update显示加锁
2. 把udpate语句写在前边先把数量-1之后select出库存如果>-1就commit,否则rollback。
2. 把update语句写在前边先把数量-1之后select出库存如果>-1就commit,否则rollback。
```
update products set quantity = quantity-1 WHERE id=3;
select quantity from products WHERE id=3 for update;

Loading…
Cancel
Save