坚定的做自己,同时允许异同看法~深爱这个世界,但是随时准备与之抗争
还记得两年前吧,我老弟来上南方上学,学的好像是船舶相关的专业,我将自己在社会的一些看法讲给他听,
希望他可以引以为鉴,可以在正确的年龄多多学习些有益的技能,
那个心情就像是一个老父亲一样,哈哈,在看待多年前的自己一样,
如果当时有一个人告诉我应该这样这样,我相信会比现在的我好很多
Java中你必须知道的内容
HashMap和TreeMap的区别
HashMap和TreeMap都实现了Map接口,TreeMap额外实现了SortedMap用来增加对Key排序的功能,TreeMap额外实现了NavigableMap用来实现了对集合内检索的功能
HashMap的底层实现原理
JDK1.8之前
数据结构:数组+链表;新增键值对的时候,首先按照Key的hashcode来判定存储位置(把这个位置可以理解成一个数组取模算位置的动作),额外在判定储存位置加了一个扰动函数(所谓扰动函数是在学术上设计了一个函数用来降低hashcode值相同的概率,最终达到降低存储位置冲突的可能),如果存储位置存在元素,则判定hashcode是否一致,如果一致则覆盖,不一致则通过拉链法解决冲突(类似LinkedList,不停的冲突位置后边追加新的元素)
JDK1.8之后
数据结构未发生变化;冲突的解决方式发生了调整;当存储位置相同时,如果hashcode相同则进行覆盖操作,如果hashcode不同,则优先判定链表数量是否超过阈值(默认8个),如果超过了,其次会判断数组长度是否小于64,如果小于则进行数组扩容;如果大于64则将链表结构转换为红黑树结构(便于解决因为链表导致检索效率降低问题)
聊下HashMap的线程不安全问题
聊聊JDK7/8版本下的ConcurrentHashMap的实现?
JDK7:采用Segemnt分段锁避免并发,数据结构:数组+链表,最大并发量取决与Segment分段数
JDK8:采用Node数组 + CAS + syschronized避免并发,数据结构:数组 + 链表/红黑树,最大并发量取决于Node数组长度
稍微讲下判断集合是否为空的方式有何不同?
isEmpty:时间复杂度(O1);size()方法时间复杂度依据集合容器类型不同效率也有很大差异
线程的生命周期?
初始状态(NEW)、运行状态(RUNNABLE)、阻塞状态(BLOCKED)、等待状态(WAITING)、超时等待状态(TIME_WAITING)、终止状态(TERMINATED)
sleep与wait方法异同?
共同点:暂停当前线程操作
区别点:
1. sleep没有释放锁,wait释放了锁
2. wait适用与线程间通信,sleep仅用于短暂停止线程
3. sleep是线程方法,wait是object方法;为啥不将wait放入到Thread类中?wait是所有对象都拥有的方法!
步五小结
每次看点资料必困~