1、常用设计模式
单例模式:懒汉式、饿汉式、双重校验锁、静态加载,内部类加载、枚举类加载。
http://wuchong.me/blog/2014/08/28/how-to-correctly-write-singleton-pattern/
代理模式:动态代理和静态代理,什么时候使用动态代理。
https://www.cnblogs.com/cenyu/p/6289209.html
适配器模式:将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
装饰者模式:动态给类加功能。
观察者模式:有时被称作发布/订阅模式,观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。
https://www.cnblogs.com/V1haoge/p/6513651.html
策略模式:定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。
外观模式:为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
命令模式:将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化。
创建者模式:将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。
抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
https://zhuanlan.zhihu.com/p/27517749
2、基础知识
Java基本类型哪些,所占字节和范围
https://www.cnblogs.com/yuanting/p/4756632.html
Set、List、Map的区别和联系
https://www.cnblogs.com/IvesHe/p/6108933.html
ArrayList、LinkedList、HashMap
https://www.cnblogs.com/gossip/p/8745656.html
Hashmap、Linkedhashmap、Concurrenthashmap、Weakhashmap
https://blog.csdn.net/happy_coding_life/article/details/80381293
哪些集合类是线程安全的
https://blog.csdn.net/u013239236/article/details/51005976
为什么Set、List、map不实现Cloneable和Serializable接口
1、集合类接口Collection,List,Set,Map定义了自己集合类的抽象即可,如果接口的设计也要考虑是否可以克隆,串行化等一堆额外特性,那是不是还要额外考虑是否可以Closeable, 接口就不是基于抽象,不是纯粹的接口了。
2、对于具体的实现类, java.util.ArrayList,LinkedList,HashMap,HashSet, 有什么特性就实现什么接口,可以实现多个接口即可。实际这些类都实现了Cloneable和Serializable接口,因为实际应用中集合类很常用,串行化和克隆也常用。
Concurrenthashmap的实现,1.7和1.8的实现
http://www.importnew.com/23610.html
http://www.infoq.com/cn/articles/ConcurrentHashMap
Arrays.sort的实现
https://blog.csdn.net/zilong0536/article/details/51284017
什么时候使用CopyOnArrayList
http://ifeve.com/java-copy-on-write/
volatile
http://www.cnblogs.com/dolphin0520/p/3920373.html
reentrantlock的实现和synchronied的区别
https://blog.csdn.net/qq838642798/article/details/65441415
https://blog.csdn.net/wangqiubo2010/article/details/79588527
CAS的实现原理以及问题
https://blog.csdn.net/hsuxu/article/details/9467651
https://www.xilidou.com/2018/02/01/java-cas/
https://www.sohu.com/a/150900817_178889
AQS的实现原理
http://www.importnew.com/24006.html
java创建对象的几种方式
https://www.cnblogs.com/wxd0108/p/5685817.html
类加载机制的步骤,每一步做了什么,static和final修改的成员变量的加载时机
http://hammer.coding.me/2016/10/26/jvm-1/
https://blog.csdn.net/u010442302/article/details/52052091
双亲委派模型
http://blog.51cto.com/shangdc/1923698
反射机制
https://www.cnblogs.com/bojuetech/p/5896551.html
https://blog.csdn.net/mlc1218559742/article/details/52754310
泛型擦除
https://blog.csdn.net/briblue/article/details/76736356
动态绑定:父类引用指向子类对象
https://www.jb51.net/article/97834.htm
https://blog.csdn.net/sureyonder/article/details/5569617
JVM内存管理机制、垃圾回收机制、参数设置、调优
https://blog.csdn.net/anjoyandroid/article/details/78609971
https://www.cnblogs.com/andy-zcx/p/5522836.html
内存溢出
https://blog.csdn.net/ni357103403/article/details/51940884
内部类:静态内部类和匿名内部类的使用和区别
http://baijiahao.baidu.com/s?id=1570847030399239&wfr=spider&for=pc
https://www.cnblogs.com/latter/p/5665015.html
Redis
https://www.cnblogs.com/Survivalist/p/8119891.html
http://baijiahao.baidu.com/s?id=1588454565071211950&wfr=spider&for=pc
https://blog.csdn.net/sunqingzhong44/article/details/73866263
MySQL
https://www.cnblogs.com/panwenbin-logs/p/8366940.html
https://blog.csdn.net/mydream119/article/details/80974764
mysql的优化策略有哪些
https://blog.csdn.net/seudongnan/article/details/57086633
http://www.sohu.com/a/206843388_505818
https://blog.csdn.net/sun_96216/article/details/79324664
https://www.jb51.net/article/65603.htm
● 创建表的时候。应尽量建立主键,根据主键查询数据;● 大数据表删除,用truncate table代替delete。● 合理使用索引,在OLTP应用中一张表的索引不要太多。组合索引的列顺序尽量与查询条件列顺序保持一致;对于数据操作频繁的表,索引需要定期重建,以减少失效的索引和碎片。● 查询尽量用确定的列名,少用*号。尽量少嵌套子查询,这种查询会消耗大量的CPU资源;对于有比较多or运算的查询,建议分成多个查询,用union all联结起来;多表查询的查询语句中,选择最有效率的表名顺序(基于规则的优化器中有效)。Oracle解析器对表解析从右到左,所以记录少的表放在右边。● 尽量多用commit语句提交事务,可以及时释放资源、解锁、释放日志空间、减少管理花费;在频繁的、性能要求比较高的数据操作中,尽量避免远程访问,如数据库链等,访问频繁的表可以常驻内存:alter table...cache;
mysql索引的实现 B+树的实现原理
https://www.jianshu.com/p/d7665192aaaf
https://blog.csdn.net/u013235478/article/details/50625677
什么情况索引不会命中,会造成全表扫描
https://blog.csdn.net/phantomes/article/details/39552897
https://blog.csdn.net/wendy432/article/details/52319908
java中bio nio aio的区别和联系
https://blog.csdn.net/u010796790/article/details/52214544
JAVA NIO是同步非阻塞io。同步和异步说的是消息的通知机制,阻塞非阻塞说的是线程的状态 。下面说说我的理解,client和服务器建立了socket连接:1、同步阻塞io:client在调用read()方法时,stream里没有数据可读,线程停止向下执行,直至stream有数据。阻塞:体现在这个线程不能干别的了,只能在这里等着同步:是体现在消息通知机制上的,即stream有没有数据是需要我自己来判断的。2、同步非阻塞io:调用read方法后,如果stream没有数据,方法就返回,然后这个线程就就干别的去了。非阻塞:体现在,这个线程可以去干别的,不需要一直在这等着同步:体现在消息通知机制,这个线程仍然要定时的读取stream,判断数据有没有准备好,client采用循环的方式去读取,可以看出CPU大部分被浪费了3、异步非阻塞io:服务端调用read()方法,若stream中无数据则返回,程序继续向下执行。当stream中有数据时,操作系统会负责把数据拷贝到用户空间,然后通知这个线程,这里的消息通知机制就是异步!而不是像NIO那样,自己起一个线程去监控stream里面有没有数据!
为什么bio是阻塞的 nio是非阻塞的 nio是模型是什么样的
https://www.cnblogs.com/tuliang/p/6292871.html
IO多路复用的机制:select、poll、epoll
http://www.cnblogs.com/Anker/p/3265058.html
Java io的整体架构和使用的设计模式
https://blog.csdn.net/when_less_is_more/article/details/70194221
Reactor模型和Proactor模型
https://blog.csdn.net/u013074465/article/details/46276967
https://www.cnblogs.com/bitkevin/p/5724410.html
http 报文结构
https://blog.csdn.net/u010256388/article/details/68491509
tcp三次握手和四次挥手
https://www.cnblogs.com/qdhxhz/p/8470997.html
https://www.cnblogs.com/Jessy/p/3535612.html
线程池
//ExecutorService exeService = Executors.newCachedThreadPool();
//ExecutorService exeService = Executors.newFixedThreadPool(3);
//ExecutorService exeService = Executors.newSingleThreadExecutor();
//ScheduledExecutorService exeService = Executors.newScheduledThreadPool(5);
for (int i = 0; i < 10; i++) {
final int index = i;
Thread.sleep(index * 1000);
exeService.execute(new Runnable() {
public void run() {
System.out.println(index);
}
});
}
https://www.cnblogs.com/dolphin0520/p/3932921.html
rpc相关:如何设计一个rpc框架,从io模型 传输协议 序列化方式综合考虑
https://blog.csdn.net/come_sky/article/details/76333513
http://www.cnblogs.com/codingexperience/p/5930752.html
https://blog.csdn.net/u013177446/article/details/66473066
https://blog.csdn.net/bitcarmanlee/article/details/52993197
Linux常用命令
https://www.cnblogs.com/gaojun/p/3359355.html
StringBuff 和 StringBuilder 的实现,通过byte 数组 拷贝来实现的
https://www.cnblogs.com/Wilange/p/7570633.html
http://www.cnblogs.com/Wilange/p/7572125.html
https://www.cnblogs.com/hysum/p/7125651.html
https://www.jianshu.com/p/64519f1b1137
spring
http://www.cnblogs.com/wang-meng/p/5701982.html
内存缓存和数据库一致性
https://blog.csdn.net/simba_1986/article/details/77823309
https://www.cnblogs.com/winner-0715/p/7456151.html
jdbc
https://www.cnblogs.com/Java3y/p/8455883.html
微服务的优缺点
https://blog.csdn.net/qq_27298687/article/details/78557738
线程池参数说明及队列拒绝策略
https://blog.csdn.net/mary881225/article/details/70173924
乐观锁和悲观锁的实现
https://blog.csdn.net/claram/article/details/53959367
java: 乐观锁 cas,悲观锁 synchronized
mysql: 乐观锁 for update,悲观锁 version
synchronized实现原理
http://www.importnew.com/23511.html
Future
https://www.cnblogs.com/cz123/p/7693064.html
hashmap
https://blog.csdn.net/vking_wang/article/details/14166593
spingboot
https://my.oschina.net/oosc/blog/1627555
https://my.oschina.net/u/1033181/blog/1799080
http://www.wityx.com/bbs/post/242_1_1.html
杂(挑着看)
https://blog.csdn.net/zhangchen124/article/details/77371786
https://note.youdao.com/share/?id=1aa1883f5524c497744d6078589530b7&type=notebook#/
springmvc
https://blog.csdn.net/TVwR8OfV0P/article/details/78384331?locationNum=4&fps=1
过程:
1.spring mvc将所有的请求都提交给DispatcherServlet,它会委托应用系统的其他模块负责对请求进行真正的处理工作
2.DispatcherServlet查询一个或多个HandlerMapping,找到处理请求的Controller
3.DispatcherServlet将请求提交到目标Controller
4.Controller进行业务逻辑处理后,会返回一个ModelAndView
5.Dispathcher查询一个或多个ViewResolver视图解析器,找到ModelAndView对象指定的视图对象
6.视图对象负责渲染返回给客户端
https
https://note.youdao.com/share/?id=5c8d279cd7303848e66510a25d178eb6&type=note#/
第三方机构使用它的私钥对我们的公钥进行加密,传给客户端,客户端再使用第三方机构的公钥进行解密
dubbo
http://bbs.itheima.com/forum.php?mod=viewthread&tid=386556
https://www.cnblogs.com/yang-lq/p/9168216.html
http://shiyanjun.cn/archives/325.html
Dubbo支持的协议
https://blog.csdn.net/fuyuwei2015/article/details/72848310
kafka
https://blog.csdn.net/caisini_vc/article/details/48007297
https://www.cnblogs.com/cyfonly/p/5954614.html
zookeeper
https://segmentfault.com/a/1190000014479433
ThreadLocal
https://www.cnblogs.com/coshaho/p/5127135.html
https://www.cnblogs.com/chengxiao/p/6152824.html
https://www.cnblogs.com/yxysuanfa/p/7125761.html
ThreadLocal最常见的使用场景:用来解决数据库连接、Session管理等
数据库连接
private static ThreadLocal connectionHolder = new ThreadLocal() {
public Connection initialValue() {
return DriverManager.getConnection(DB_URL);
}
};
public static Connection getConnection() {
return connectionHolder.get();
}
session管理
private static final ThreadLocal threadSession = new ThreadLocal();
public static Session getSession() throws InfrastructureException {
Session s = (Session) threadSession.get();
try {
if (s == null) {
s = getSessionFactory().openSession();
threadSession.set(s);
}
} catch (HibernateException ex) {
throw new InfrastructureException(ex);
}
return s;
}
算法相关:判断能否从数组中找出两个数字和为给定值,随机生成1~10000不重复并放入数组,求数组的子数组的最大和,二分查找算法的实现及其时间复杂计算
你在项目中遇到的困难和怎么解决的
你在项目中完成的比较出色的亮点
3、其它
算法:常用排序算法,二分查找,链表相关,数组相关,字符串相关,树相关等
常见序列化协议及其优缺点
memcached内存原理,为什么是基于块的存储
搭建一个rpc需要准备什么
如果线上服务器频繁地出现full gc ,如何去排查
如果某一时刻线上机器突然量变得很大,服务扛不住了,怎么解决
LUR算法的实现
LinkedHashMap实现LRU
定义栈的数据结构,请在该类型中实现一个能够找到栈最小元素的min函数
海量数据处理的解决思路
reactor模型的演变
阻塞、非阻塞、同步、异步区别
Collection的子接口
jvm调优相关
zookeeper相关,节点类型,如何实现服务发现和服务注册
nginx负载均衡相关,让你去实现负载均衡,该怎么实现
linux命令,awk、cat、sort、cut、grep、uniq、wc、top等
压力测试相关,怎么分析,单接口压测和多情况下的压测
你觉得你的有点是什么,你的缺点是什么
spring mvc的实现原理
netty底层实现,IO模型,ChannelPipeline的实现和原理
缓存的设计和优化
缓存和数据库一致性同步解决方案
你所在项目的系统架构,谈谈整体实现
消息队列的使用场景
ActiveMQ、RabbitMQ、Kafka的区别