摘要:
接口和抽象类的区别? 重载和重写的区别? 重载,方法名称不变,入参改变,是一个新的方法,增强同一个方法名称的能力范围,比如LoggerFactory中的getLogger()方法,有多个重载方法,都可以通过getLogger拿到日志对象。 重写,类的继承因为开闭原则,不建议重写,主要针对接口,是对一 阅读全文
摘要:
开闭原则 对扩展开放,对修改关闭,通过抽象定义框架,通过实现扩展细节 依赖倒置原则 高层模块不应该依赖底层模块,二者都应该依赖抽象,抽象不应该依赖细节,细节应该依赖抽象,针对接口编程,而非针对实现编程,需要保证抽象稳定。 抽象通过入参,或者构造方法的方式注入。 单一职责原则 一个类,接口,方法只负责 阅读全文
摘要:
时间复杂度 随着数据量的增加,程序所消耗的时间变化趋势 O(1),O(logn),O(n),O(nlogn),O(n^2)....空间复杂度 随着数据数量增加 产生的额外空间消耗的变化趋势 同上 链表问题:单双休链表链表旋转问题:首选设置哨兵链表头,防止头部链表丢失,然后使用pre,current, 阅读全文
摘要:
public class WordLadder { //把start通过dict内的字符串转换成end需要多少步 一次只能转换一个char 方案:广度优先算法 public static void main(String[] args) { String start = "hit"; String 阅读全文
摘要:
//冒泡排序,思想就是每个数据与下一个数据一个个对比下去 public static void sort(int[] nums){ if(nums==null||nums.length==0){ return; } for(int i =0;i<nums.length;i++){ for(int j 阅读全文
摘要:
给一组长度确定的木头 如:int[]{232,124,456} 已经给定份数int k要求,将这组木头切成不低于K的份数,得到切割够木头最短值的最大值思想:二分查找public static int cutMax(int[] nums,int k){ if(nums==null||nums.leng 阅读全文
摘要:
题目:给定一个数组 求出截取出来的和和当前最小值的乘积结果的最大值 直接上答案: /** * 当前最小值 设每个值为当前最小值 * 前缀求和数组 * 通过栈的大小比较进出,可以确认到当前最小值的最远下标,也就是最大求和 * 升级版:顺序可以打乱 * @param args */public stat 阅读全文
摘要:
不扯概念,直接看代码: 以可重入锁ReentrantLock的lock()方法切入 Sync是ReentrantLock的一个抽象的静态内部类,同时继承了AbstractQueuedSynchronizer也就是我们常说的AQS,同步队列,源码上的解释太长了,这个抽象类的作用,就是维护一个双向链表, 阅读全文
摘要:
volatile:解决多线程场景的可见性问题 可见性问题:多线程的情况下,对于共享变量的读取,不一定是最新的值,就是可见性的问题 场景:多核cpu中,每个内核存在自己的高速缓存,线程的读取都是先从高速缓存中直接读取,读取不到才去内存中读取,优化了io开销过大,提升服务器性能,这是cpu的内存模型设计 阅读全文