JAVAJava学习笔记Java技术升华

Java面试细节总结

2018-03-15  本文已影响767人  一抹斜阳丶

Java基础

  1. 首先HashMap的对象是存储在堆中的,堆是线程共有的。这样就有多线程操作同一数据源的基础。
  2. 其次。HashMap每次put的过程就是先通过hashcode找到对应的槽。然后顺序遍历Node链表对比(通过hashcode 和 equals)
  3. 然而,如果多线程同时put,有一定概率出现某一个线程put时,正好发生resize过程。 这时这个线程在resize,数据重新copy的时候,其他线程正在put。就有可能造成Node链表循环。这就是HashMap线程非安全的原因。
  4. ConcurrentHashMap线程安全是因为加锁。默认有16个segment,每个segment存储不同的hash值范围的key。put,get操作时,只需要lock部分数据源。但是调用全局方法等操作时,lock整个数据源。

Java进阶

linux

数据库

常用中间件

  1. 首先redis的rebalance发生场景,是在redis集群增减节点时发生的。
    redis集群,通过hash槽将不同节点存储不同的数据块范围。hash槽是典型的圆环式。
  2. 增加节点到redis集群,redis不会立即提供服务,会有槽重新分配的过程。但是因为是hash槽,只会从某一节点划分部分数据到新的节点。
  3. 删除节点,也是不会立即下线,会将该节点的数据,按照重新hash值划分到不同的节点上。
  4. 整个过程就是rebalance。如果配置人rdb, aof 就能支持秒级持久化。其中持久化也是异步操作,性能无需担心。基本不会有什么问题。

常见大题

  1. 按照hash值按照url分流,循环递归拆分子文件,使得小文件小于内存大小。需保证同一url只能出现在一个子文件中;
  2. 建立队列,判断文件大小, 同时计算n个文件,快排得出结果;
  3. 归并排序得到top n的值。

答案太多,慢慢补充。欢迎关注

上一篇 下一篇

猜你喜欢

热点阅读