集合UML图
HashMap的内存溢出以及ConcurrentHashMap(分段锁)等问题
HashMap之所以会造成内存溢出是因为用了没有实现hashcode()和equals()方法的类作为key值,导致存入了大量相同的数据,多线程会导致HashMap的Entry链表形成环造成线程不安全问题
https://blog.youkuaiyun.com/u010536377/article/details/42031599
重入锁Reentrantlock(可加锁多次,只有被释放锁次数与加锁次数相等时,才会真正释放锁)–>syschronized(锁对象和锁方法问题)–>volidate(可见性-保证代码执行顺序不会被优化,不会发生指令重排,非原子性)–>CAS
Servlet 生命周期
Servlet 生命周期可被定义为从创建直到毁灭的整个过程。以下是 Servlet 遵循的过程:
Servlet 通过调用 init () 方法进行初始化。
Servlet 调用 service() 方法来处理客户端的请求。
Servlet 通过调用 destroy() 方法终止(结束)。
最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。
http://www.runoob.com/servlet/servlet-life-cycle.html
问题延伸:与jsp的区别https://www.zhihu.com/question/37962386
快速排序:通过一趟排序将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另一部分关键字小,则分别对这两部分继续进行排序,直到整个序列有序。https://blog.youkuaiyun.com/wangkuifeng0118/article/details/7286332
问题延伸:冒泡排序:设数组的长度为N:
(1)比较前后相邻的二个数据,如果前面数据大于后面的数据,就将这二个数据交换。
(2)这样对数组的第0个数据到N-1个数据进行一次遍历后,最大的一个数据就“沉”到数组第N-1个位置。
(3)N=N-1,如果N不为0就重复前面二步,否则排序完成。https://blog.youkuaiyun.com/u010853261/article/details/54891710
hashCode()/equal()/==的区别:equal()比较的是值,==比较的是引用的地址
https://www.cnblogs.com/kexianting/p/8508207.html
Object有哪些公用方法:clone/equals/hashcode/getClass/wait/notify/notifyall
https://blog.youkuaiyun.com/donghaol/article/details/49252383
jdk各版本新特性
https://www.cnblogs.com/langtianya/p/3757993.html
Netty粘包/拆包
https://blog.youkuaiyun.com/zbw18297786698/article/details/53691915
sql优化
https://blog.youkuaiyun.com/w369033345/article/details/52026022
线程池ThreadPoolExecutor–>ThreadLocal系列问题
1 Executors.newCacheThreadPool():可缓存线程池,先查看池中有没有以前建立的线程,如果有,就直接使用。如果没有,就建一个新的线程加入池中,缓存型池子通常用于执行一些生存期很短的异步型任务;
2 Executors.newFixedThreadPool(int n):创建一个可重用固定个数的线程池,以共享的无界队列方式来运行这些线程;
3 Executors.newScheduledThreadPool(int n):创建一个定长线程池,支持定时及周期性任务执行;
4 Executors.newSingleThreadExecutor():创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。
核心参数:corePoolSize:核心池的大小、maximumPoolSize:线程池最大线程数、keepAliveTime:表示线程没有任务执行时最多保持多久时间会终止、unit:参数keepAliveTime的时间单位、workQueue:一个阻塞队列,用来存储等待执行的任务、threadFactory:线程工厂,主要用来创建线程、handler:表示当拒绝处理任务时的策略
ThreadLocal原理分析
ThreadLocal是一个保存线程本地化变量的容器,当在多线程环境下使用ThreadLocal维护变量时,其会为每个线程分配一个独立的变量副本,这样一来每个线程都只能对其变量副本进行读写而不会影响到其他线程的变量副本,从而保证了线程安全。ThredLocal的实现是这样的,首先在每个线程对象内部保存了一个map,这个map的key是ThreadLocal实例,value是ThreadLocal中要保存的值,每当使用ThreadLocal对变量副本进行set的时候,首先会从当前线程对象内部拿到相应的map,然后将ThreadLocal实例自身作为key,要保存的值作为value,put进map中,这样一来就实现了每个线程保存了独立的变量副本,它们之间互不影响。
问题延伸:聊聊ThreadLocal的内存泄露问题。http://www.importnew.com/22039.html
AOP–>动态代理–>静态代理–>策略模式
AOP:
(1)Aspect(切面):通常是一个类,里面可以定义切入点和通知
(2)JointPoint(连接点):程序执行过程中明确的点,一般是方法的调用
(3)Advice(通知):AOP在特定的切入点上执行的增强处理,有before,after,afterReturning,afterThrowing,around
(4)Pointcut(切入点):就是带有通知的连接点,在程序中主要体现为书写切入点表达式
(5)AOP代理:AOP框架创建的对象,代理就是目标对象的加强。Spring中的AOP代理可以使JDK动态代理,也可以是CGLIB代理,前者基于接口,后者基于子类
IO中涉及到的设计模式:装饰模式和适配器模式
https://www.cnblogs.com/wxgblogs/p/5649933.html
问题延伸:java中常见的设计模式:单例模式,装饰模式,适配器模式等
https://blog.youkuaiyun.com/column/details/18850.html