转载了师姐的博客,供自己借鉴,师姐应该不会介意。
- HashMap和Treemap的区别:
- HashMap底层基于哈希表实现,用链表法解决冲突,TreeMap基于红黑树实现,TreeSet也是;
- HashMap插入数据后,遍历出的顺序是随机的,TreeMap默认按照key的升序排列,也可以自定义比较器,LinkedHashMap则可以保证输出顺序和输入顺序相同,是有序的;
- 参考链接:Java中HashMap,LinkedHashMap,TreeMap的区别
- kafka相关原理
- 基本架构,哪几部分
- producer发送消息给broker,可靠性保证机制:
- consumer消费端的可靠性??
- 参考链接:Apache kafka原理与特性 Apache Kafka消息传递可靠性分析
- volatile关键字
- 禁止指令重排序优化
- 修改后,对其他线程立即可见;
- java的内存模型中,分为主内存、工作内存,volatile修饰的变量修改后立即将值同步回主内存,且其他线程工作内存中的值失效,需重新同步;
- 可以保证顺序性和可见性,但不能保证原子性;
- java多线程
- 引出:hashTable是线程安全的,每个方法前面都加了synchronized关键字
- 一个类中,一个同步方法(即用synchronized修饰),一个普通方法,都操作同一个成员变量,线程安全吗?不安全。同步方法,需获得该对象的锁才可以执行,修改变量,而非同步方法,其他线程可以任意随时直接访问,不安全;
- 如果非同步方法只是读,不修改变量的值:也不安全,可能读到中间值;
- 多个线程同时操作一个对象时,才存在线程安全的问题,如果确保一个线程,对应一个对象,只访问该对象的方法,那么是安全的;
- 锁是属于对象的,每一个对象都拥有一个锁标记(monitor),static方法可以加synchronized关键字吗?
- 每个类也有一个锁,用来控制多线程对static数据成员的并发访问;所以static方法也可以是同步的;
- 更深刻的:一个线程执行该对象的普通synchronized方法,另一个线程执行其所属类的static synchronized方法,这两个线程不冲突,因为一个获得该对象的锁,另一个获得类的锁;
- java.util.concurrent包中有哪些类?Java 并发工具包 java.util.concurrent 用户指南
- 熟悉的设计模式:
- 自己常用的Linux命令;
- top:查看每个进程使用的CPU、内存情况,Load average。fine,要真正熟悉一条命令,他的每个字段的含义;
- netstat
- lsof
- jinfo
- 查看磁盘IO的命令:iostat
- df
- zookeeper的原理:
- 需要再看书,学习;
- 提了永久节点,临时节点,时序节点,三种;fine,临时节点的生命周期???
- 一致性哈希原理
- 分布式算法???
- bash:bash中 2>&1 & 的解释
- 操作系统的缓存替换算法:LRU等等
总结:
看过书、博客之后,需要自己记录,整理,这是一个重理解的过程,也有助于理清知识点之间的逻辑关系。
So,加油!