面试题回顾

昨天去一家 互联网金融公司面试,回来记录下 过程,面试官很直接,也没怎么看我简历,上来就照着他自己的套路问了一堆问题,大概还记得一些:

1. Java的异常体系

父类Throwable, 子类 Error 及 Exception, 还有 下面的runtimeException.

2. 常见的Exception.

.....

3. JVM 垃圾回收算法:

新生代, 老年代,永久代用不同的清理算法,我说的比较简单,他也没有深入问。

大概就是新生代用 Eden区, 2个survior区,对象在里面搬来搬去,次数多了就升级到老年代。

老年代,永久代用mark-clean-compact。

4. Spring 的事物传播机制:

REQUIRED,required_new,supports,not_supported,nevermandatory  

5. 悲观锁,乐观锁的理解:

我简单答了,悲观锁意思是认为冲突总是会发生,在事务读和写的过程中都加锁;

乐观锁认为冲突较少发生,只有在写的时候才加锁。

6. 多线程的理解; 并发数据同步问题。

 用 Synchonized 或者 lock, 有什么区别,我说lock更精细一点,有读锁,写锁。 

PS:(ReentrantLock 与synchronized有相同的并发性和内存语义,还包含了中断锁等候和定时锁等候,意味着线程A如果先获得了对象obj的锁,那么线程B可以在等待指定时间内依然无法获取锁,那么就会自动放弃该锁。但是由于synchronized是在JVM层面实现的,因此系统可以监控锁的释放与否,而ReentrantLock使用代码实现的,系统无法自动释放锁,需要在代码中finally子句中显式释放锁lock.unlock();

在并发量比较小的情况下,使用synchronized是个不错的选择,但是在并发量比较高的情况下,其性能下降很严重,此时ReentrantLock是个不错的方案

7. 怎样安全的打断一个 用while(true)控制的一个一直运行的线程:

还好平时也逛论坛,看到过类似的问题,不能用 interruput 中断一个线程,我说可以把 while的判断条件改为一个全局变量,在外面修改它为false就可以中断这个线程了。

8. 高并发,秒杀的问题,怎么设计:

这个问题太大, 我就说了下 前面用CDN分发,用nginx 或者Apache做load balance, 同时部署多台应用服务器,页面可以用OScache缓存,图片,物品描述,可以用分布式缓存,比如memcached,redis,mangoDB;数据库要考虑读写分离。。。说了一堆。

还问了最后一件物品,大家都在下单,怎么办,我的理解是肯定要用事务,保证不能超卖,他说其他人就会等待,我说可以先返回订单处理中,不让用户等待。他说这个用户反映不好。(这个是电商的高并发,数据还要保证一致性的问题,确实没有经验,一会再搜搜)

9.对开源工具了解多少:

Hadoop自己部署过单节节点,跑过字符统计。

了解SOA实现,说了 SCA, ESB 。

。。。。还有一些其他的,记不清了,总结是 挺杂的,东一句西一句,面试官不看简历,按着他自己准备好的题库,不停顿的一直问。  技术还是要更深入一些,平时要仔细钻研,多积累。记录以激励自己!

猜你喜欢

转载自mountain2010.iteye.com/blog/2217478