08 2018 档案
摘要:1,对比 弱分治归并算法 vs 强分治归并算法 弱分治: 强分治: 强分治归并排序与弱分治排序的归并逻辑是一致的,只是在分治逻辑不同, 是通过递归的方式,将源数列层层切割,以下标middlle 为分界点,切割的逻辑图如上所示,逐步切成成长度为1的有序数列,然后再层层反向归并。 代码参考如下: 关于分
阅读全文
摘要:概念:递归算法(英语:recursion algorithm)在计算机科学中是指一种通过重复将问题分解为同类的子问题而解决问题的方法。 绝大多数编程语言支持函数的自调用,在这些语言中函数可以通过调用自身来进行递归。 递归执行的语句在遇到同名函数前正常执行,而其后的语句则暂时保留在内存中,待其递归后得
阅读全文
摘要:1,归并排序是建立在归并操作上的一种有效的排序算法。该算法也是采用分治法(Divide and Conquer)的一个非常典型的应用。 难点在于分治,分治是将原有数列分成一个个小的的有序数列,然后再合并。 2,例如集合{7,6,5,4,3,2,1},分治归并的逻辑如下: groupsize = 1:
阅读全文
摘要:假设集合int a = {4,3,2,1}; 插入排序法会设置一个插入的“标杆”,一般是以数列的第一个数为标杆,因次判断是否插入是从第二个数字开始。 从小至大排序: 第一轮: 排序完 3,4,2,1 第二轮: 排序完 2,3,4,1 第三轮: 排序完 1,2,3,4 current 代表当前的元素,
阅读全文
摘要:冒泡:核心是相邻的两个数进行比较。然后量两两交换。知道没有交换,代表排序完成。这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。 外循环控制着冒泡的轮数,内循环控制着每轮比较的个数 第一轮比较:
阅读全文
摘要:1,在一个未排序的数组或者集合中,依次比较,依次将最小的放在排序后的起始位置(从小至大),或者将最大的放在排序后的起始位置(从大至小)。 int [] a = {12,3,4,55,66,7,8,90}; 第一轮比较: a[0] 依次和 a[1],a[2],[3]......a[n-1]比较,将最小
阅读全文
摘要:1,饿汉试 线程安全 2,懒汉式 线程不安全,加双锁 3,枚举 枚举类型本身JVM 就会保证其是单例 4,静态内部类 单例的优化,防止被外部攻击 通过反射能够攻击有些单例模式,生成新的对象,以饿汉式为例: 因为通过new 生成的关键字,通过调用public 的构造方法 通过反射 Class 对象下的
阅读全文
摘要:1,new Student s = new Student(); 在堆储存区开辟了一块空间,其对象的引用存储在栈存储区上。 2,反射 reflect java的反射机制是指,在运行状态中,对于任意一个类,我们可以获取这个类的属性和方法,对于任意一个对象,我们可以调用这个对象的方法和属性。这种动态获取
阅读全文
摘要:1,概念 AOP,面向切面编程,实际上对OOP(面向对象编程)的一个补充。 在面向对象编程的软件设计中,设计者会让不同的类去实现不同的方法,代码就分散到不同的类里面去了。降低了代码的复杂程度,提高了类的重用性。 但是如果不同的类里面方法都需要实现某个功能,例如日志功能,那就必须在每个类都添加日志内容
阅读全文
摘要:静态储存区:全局变量,static 内存在编译的时候就已经分配好了,并且这块内存在程序运行期间都存在。 栈储存区:1,局部变量。2,,保存类的实例,即堆区对象的引用。也可以用来保存加载方法时的帧。函数执行结束后,这些在栈储存区的存储单元都会被释放。《栈储存区的内存分配是通过处理器的集中指令,效率高,
阅读全文
摘要:1,导入 Integer a = 100; Integer b = 100; Integer c = 150; Integer d = 150; a == b; true c == d; false 2,wrapper class(包装类) java是面向对象的语言,在java中,为了方便编程,设定
阅读全文