其他
记一次Java面试中遇到的三个问题及感悟!
# http get问题影射思维问题
感悟1
在信息不足以判断时,应先尽量通过合理有效的沟通获取更全面的信息,而不是在信息不足的情况下贸然尝试
# 半小时只能发3次消息的问题
感悟2
经典算法,活学活用,大多数业务问题均可解决。
# 线程池运行原理
AbortPolicy默认策略 抛出未检查的异常RejectedException
DiscardPolicy 新任务无法保存到队列,抛弃该任务
DiscardOldestPolicy 新任务无法保存到队列,抛弃下一个执行的,再提交最新的
CallerRunsPolicy调用者执行 不抛弃任务,不抛弃异常,而将某些任务退回到 调用者。如果队列满了,下个任务会在调用execute的主线程中执行。有界队列和调用者执行策略,实现高负载下平缓的性能降低 ”
public class IndexBinarySearch<T> {
public static void main(String[] args) {
ThreadPoolExecutor poolExecutor=new ThreadPoolExecutor(5, 10,
1,
TimeUnit.MINUTES,
new LinkedBlockingDeque<Runnable>(2)
);
List<Runnable> rlist=new ArrayList<>();
for(int i=0;i<20;i++){
rlist.add(new RunnableTest(poolExecutor));
}
for(int i=0;i<20;i++){
poolExecutor.execute(rlist.get(1));
}
}
}
class RunnableTest implements Runnable{
ThreadPoolExecutor poolExecutor;
public RunnableTest( ThreadPoolExecutor poolExecutor){
this.poolExecutor=poolExecutor;
}
@Override
public void run() {
int threadSize=this.poolExecutor.getActiveCount();
int queueCurrentSize=this.poolExecutor.getQueue().size();
System.out.println(Thread.currentThread().getName()+":执行开始:"+"当前线程数:"+threadSize+"当前队列大小:"+queueCurrentSize);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
从代码的运行结果上看,前5个立即执行,后2个入队列,之后线程池开新线程处理后边的任务,如上图紫色框部分线程6-10,直到到达最大线程数为止
总结下其大致流程图如下:
感悟3
只有了解原理,才能把一项技术应用在不同的场景下。
# 总结
在信息不足以判断时,应先尽量通过合理有效的沟通获取更全面的信息,而不是在信息不足的情况下贸然尝试
经典算法,活学活用,大多数业务问题均可解决。
只有了解原理,才能把一项技术应用在不同的场景下。
点个在看你最好看