为了鸭脖,为了妹子,为了理想,努力吧骚年;
(个人为面试准备的备忘录,慢慢学习,慢慢完善)
https://github.com/hunter1314?tab=repositories
一、java基础
1.HashMap和Hashtable:
[1]继承不一样,table继承老集合包,Map继承抽象类AbstractMap,并实现Map接口类
Hashtable<K,V> extends Dictionary<K,V> implements Map<K,V>, Cloneable, java.io.Serializable
HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable
[2]table是同步的,map不同步,故map在多线程中是不安全的;
[3]map支持空的key、value,table不支持
[4]Hashtable使用Enumeration进行遍历,HashMap使用Iterator进行遍历
[5]容器扩展的方式不一样,.Hashtable中hash数组默认大小是11,增加的方式是 old*2+1。HashMap中hash数组的默认大小是 16,而且一定是2的指数。
[6]table中直接使用对象的hashCode作为hash,hashMap中重新计算hash。hashMap重新计算,对hash值做位运算,是为了 在hash数组上面,元素分配的更均匀一些,具体算法看不懂,可以看看大佬的博客。
2.HashMap的使用和介绍:
拉链法,hash碰撞,equals和hashCode,hashMap为什么线程不安全等。从这几方面来讲;
hashMap的结构从jdk18开始改变,当某一hashcode数组元素上的链表长度大于8时,会将链表改为红黑树结构。
嗯,这块讲源码可能也会问道LinkedList的双向链表的实现。源码再问就是spring了,没啥说的,ioc,aop......
3.多线程并发
java的concurrent包,线程的3种创建方式(runnable和callable以及Thread,如果算上线程池的话那就多了),java回调,countdownLaunch等等;
死锁,数据共享,读写锁,互斥锁,悲观锁,乐观锁。
二、java web(框架和应用)
1.http:从基本风格和2中应用:restful和soa来讲;
2.restful(不是什么具体的框架,而是一种类似于mvc的一种架构风格,是http协议的最主要的表现形式):
资源:通过uri对外暴露的可以获取访问的视频,音频,文本,json数据等等,由uri来抽象代指资源;
表现层:资源的表现形式(格式),比如html,json,jpg等;
状态转化:通过get,post,put,delete方法来操作资源,称为状态转化;
以上三层合一,就是我理解的restful;
三、数据库
感觉没啥好说的,就看看性能调优和索引模型原理,mysql存储引擎,和红黑树存储结构就行了吧~~
mysql存储引擎:InnoDB、MyISDM。从支持事务,行级锁,表锁,共享锁,排它锁,意向锁等方面聊聊,嗯也可以延伸着讲讲悲观锁和乐观锁。就没啥了吧~~~
四、jvm
另起一章博客去写了,https://blog.csdn.net/HuntermanFirst/article/details/102869124。
五、事物
spring的事物机制,看看@Transactional。
可以结合数据库事务聊聊。
六、设计模式
1.单例,注意懒汉式的并发加锁问题,还有spring的单例加载;
2.装饰者模式,利用继承给类添加职责;
3.策略模式
4.工厂没啥说的
七、算法(没啥说的,都是基础中的基础)
1.基本排序算法:冒泡排序,选择~,插入~,快速~
2.贪婪算法,