美文网首页面试题java
高级java 面试总结

高级java 面试总结

作者: 坚强一点 | 来源:发表于2017-04-27 18:03 被阅读37次

HashMap 实现原理  ConcurrentHashMap 怎么实现 线程安全的。

使用 一个 Entry 数组保存数据,Entry 对象中有四个属性,分别是 key,value,next[Entry 类型的](保存不同对象拥有相同hash值的value对象,也就是 hash冲突的解决方式(链表存储))
HashMap 的扩容标准是,达到了设置的哈希因子的临界值,2备扩充,扩充方式为新建一个 Entry 数组,然后重新计算key的hash值进行拷贝存储。

ConcurrentHashMap 是一个线程安全的 hashMap  线程安全是使用  Segment 实现的,并非 直接增加  synchronized关键字

Collections.synchronizedMap(Map)  创建的 线程安全的hashmap是通过 增加 synchronized 关键字 实现的线程安全。

hashMap 中解决 哈希冲突的方法为:重写equals 和 hashCode 函数(还有其他方法,我不会。)

为什么要重写 hashCode 函数减另一篇文章 http://www.jianshu.com/p/d8069b28bb40

volatile  关键字的作用。

volatitle  只能用来修饰 属性,被修饰的属性,在多线程环境中,总能保持最新的数据(不会出现脏数据)也就是实现了线程安全:原理是 被volatile修饰的属性,不允许线程保存私有拷贝。static 修饰的变量无需增加该关键字。volatile变量可以保证下一个读取操作会在前一个写操作之后发生

Integer  考题

Integer a=999;   Integer b=999;  System.out.print(a==b);  输出结果是

输出false  因为 Integer 是对象类型,对象类型得通过 equals 进行比较

如果换成 

Integer a = 999;  System.out.print(a == 999 ); 则输出结果是  true,因为 jdk 会自动进行拆箱操作,就相当于 二个基本数据类型 int  在比较,当然是 true。

如果换成

Integer a=9; Integer b=9; System.out.print(a==b);  输出结果是  true 因为 IntegerCache 会缓存 -128 到 127 之间的数据,所以 返回 true

线程池的实现原理   (我不会)

jvm 相关内容(我不会)

二个排序好的int 数组获取交集

点击查看

Java中CyclicBarrier 和 CountDownLatch有什么不同?

CyclicBarrier 和 CountDownLatch 都可以用来让一组线程等待其它线程。与 CyclicBarrier 不同的是,CountdownLatch 不能重新使用

分布式 ID 生成策略

1、利用 mysql 自增长特效,设置不同的步长 (扩展数据库数量难度大)

2、使用 uuid  (字符串类型,不利于存储和增加索引,无序)

3、使用 uuid 的变种 转换为 10进制的 数字。

4、使用像 Twitter的snowflake算法 

5、使用 redis 或 MongoDB的ObjectId  或 zookeeper 等第三方中间件来做

Spring  注入的方式由几种?

三种、接口类型注入、construct 注入(构造器注入)、set 注入(通过调用属性的set 方法注入)

Spring 的 bean 生命周期?

创建 - 属性注入 - init-method  -  销毁  - destroy-method   超详细讲解

Spring 事务的传播性

PROPAGATION_REQUIRED    如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择。

PROPAGATION_SUPPORTS   支持当前事务,如果当前没有事务,就以非事务方式执行。

PROPAGATION_MANDATORY   使用当前的事务,如果当前没有事务,就抛出异常。

PROPAGATION_REQUIRES_NEW   新建事务,如果当前存在事务,把当前事务挂起。

PROPAGATION_NOT_SUPPORTED   以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。

PROPAGATION_NEVER   以非事务方式执行,如果当前存在事务,则抛出异常。

PROPAGATION_NESTED     如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED   类似的操作。

mysql 的事务隔离级别有几种?(四种)

1、读取未提交行 - 会有脏读、重复读、幻读

2、读取提交行   - 会 重复读、幻读 (mysql 的默认事务级别)

3、不可重复读  - 会幻读

4、串行化    --( 一个事务部结束,其他事务只能等待,不可同时执行,所以没有 脏读,重复读,幻读风险)

脏读(Drity Read):某个事务已更新一份数据,另一个事务在此时读取了同一份数据,由于某些原因,前一个RollBack了操作,则后一个事务所读取的数据就会是不正确的。

不可重复读(Non-repeatable read):在一个事务的两次查询之中数据不一致,这可能是两次查询过程中间插入了一个事务更新的原有的数据。

幻读(Phantom Read):在一个事务的两次查询中数据笔数不一致,例如有一个事务查询了几列(Row)数据,而另一个事务却在此时插入了新的几列数据,先前的事务在接下来的查询中,就会发现有几列数据是它先前所没有的。

mysql 增加索引原则

点击查看

简单说说 http 协议

点击查看

暂时就记得这么多,如果有错误,欢迎指正、补充。

相关文章

网友评论

    本文标题:高级java 面试总结

    本文链接:https://www.haomeiwen.com/subject/ujavzttx.html