面试总结

1.JAVA虚拟机
JVM包括下列几个运行时数据区域:
程序计数器、Java虚拟机栈、Java堆、方法区(永久代)、运行时常量池
2.垃圾回收算法
标记-整理算法:标记好需清除对象后,所有存活对象向一端移动。
复制搜急算法:标记好需清除对象后,将所有存活对象向另一个内存移动。
分代收集:新生代--》复制搜急算法,老年代--》标记-整理算法
3.多线程
synchronized 关键字的作用一个词概括就是:线程同步。它可以将将对象或者Class加锁,用来防止两个线程同时访问一个数据。
volatile的优势
与锁相比,volatile变量是一和更轻量级的同步机制,因为在使用这些变量时不会发生上下文切换和线程调度等操作,但是volatile变量也存在一些局限:不能用于构建原子的复合操作,因此当一个变量依赖旧值时就不能使用volatile变量
悲观锁和乐观锁
独占锁是一种悲观锁,synchronized就是一种独占锁,它假设最坏的情况,并且只有在确保其它线程不会造成干扰的情况下执行,会导致其它所 有需要锁的线程挂起,等待持有锁的线程释放锁。而另一个更加有效的锁就是乐观锁。所谓乐观锁就是,每次不加锁而是假设没有冲突而去完成某项操作,如果因为 冲突失败就重试,直到成功为止。
锁与原子变量的性能比较
在高度竞争的情况下,锁的性能将超过原子变量的性能,但在更真实的竞争情况下,原子变量的性能将超过锁的性能,这是因为锁在发竞争时会挂起线程,从而降低 了CPU的使用率和共享内存总线上的同步通信量
4.map结构,数组加链表。

5.设计模式。
单例模式:
观察者模式:观察者设计模式定义了对象间的一种一对多的组合关系,以便一个对象的状态发生变化时,所有依赖于它的对象都得到通知并自动刷新。
6.数据库
原子性 ,一致性 ,隔离性 ,持久性
事务隔离级别:读未提交、读提交、重复读、序列化
读未提交:A事物还没提交,B事物可以看到A更改的数据,脏读
读提交:A,B查询账户显示500,A取走500,B再取钱时提示余额不足,失败,不可重复读。
可重复读:一个事物里两次查询结果一致,但会产生幻读。比如第一次查询今天0点到当前时间(12点)的消费记录10条,这时另外一个事物正在新增数据。当第二次再查询时(新 的事物),条件还是0点到12点,但数据多了一条,就是 幻读
序列化:
大多数数据库默认级别:读提交
MYSQL默认级别,重复读
分布式系统,最终一致性。
索引:B+索引,位图索引
索引失效:强转,函数等。
7.系统设计。
1.尽量使错误可见。
2.预先减少错误概率。失败重试等机制
3.分布式系统,柔性事务,幂等,可补偿性。

posted @ 2018-09-03 19:25  水墨江南110  阅读(162)  评论(0)    收藏  举报