那些年面试时被问倒的题

LZ属于面霸系列了,有空整理一下被面时问到的题,整理-演绎-总结-归纳-反思-沉淀

Spring 类的

1 请描述spring中 Http请求从发起到响应返回的整个流程?

2 Spring事务管理?

线程类的

1 最多能同时运行5个线程,第6个线程只能等待前边的线程执行后才能运行;且后面的线程按优先顺序排队运行。

请写出设计思路及代码


2 sleep 与 wait 之区别?

sleep()方法是使线程停止一段时间的方法。在sleep   时间间隔期满后,线程不一定立即恢复执行。这是因为在那个时刻,其它线程可能正在运行而且没有被调度为放弃执行,除非(a)“醒来”的线程具有更高的优先级   
(b)正在运行的线程因为其它原因而阻塞。   
wait()是线程交互时,如果线程对一个同步对象x   发出一个wait()调用,该线程会暂停执行,被调对象进入等待状态,直到被唤醒或等待时间到。


最大本质的区别是:sleep()不释放同步锁,wait()释放同步缩. 


yield:

yield()使线程放弃执行的权利,进入可执行状态,也就意味着线程在yield()方法后,有可能又执行。使用yield()方法,线程并不释放自己锁持有的“锁”。

主要的用途是线程的切换,当前线程不执行,切换其他线程执行。

3 如何防止死锁?

解决方式: 
1)尽量使用tryLock(long timeout, TimeUnit unit)的方法(ReentrantLock、ReentrantReadWriteLock),设置超时时间,超时可以退出防止死锁。 
2)尽量使用java.util.concurrent(jdk 1.5以上)包的并发类代替手写控制并发,比较常用的是ConcurrentHashMap、ConcurrentLinkedQueue、AtomicBoolean等等,实际应用中java.util.concurrent.atomic十分有用,简单方便且效率比使用Lock更高 
3)尽量降低锁的使用粒度,尽量不要几个功能用同一把锁 
4)尽量减少同步的代码块


其他类的

1 谈谈Cache 缓存原理 及Java实现?

(这个有点难)

你可能感兴趣的:(java,spring,面试,cache)