地址:进击的Java新人
https://zhuanlan.zhihu.com/hinus
第一周:
进制及计算机表示
尾递归优化
谈递归时,我们在谈什么?
面试官的一次面试经历分享
- JVM有没有尾递归优化?
- 里面m的n次方优化解法
Java语言的品味(一)
Java语言的品味(二)
第二周:
构建工具的进化:ant, maven, gradle
Java中的设计模式:适配与装饰
Java语言的品味(三)
数据结构(一):栈
用栈进行表达式求值
第三周:
深入理解函数调用(上)
深入理解函数调用(下)
递归下降做表达式求值
位操作
第四周:
数据结构(二):链表
数据结构(三):队列
泛型
数据结构(四):Java中的容器
第五周:
数据结构(五):二叉树
数据结构(六):二叉树的遍历
Java中的设计模式之迭代器
数据结构(七):二叉树的删除和应用举例
Java网络编程(一):初体验
分层网络协议
Java网络编程(二):套接字
多线程编程基础
进程的内存
第六周:
平衡二叉树
代码实现平衡二叉树
红黑树(一):插入
红黑树(二):删除
第七周:
红黑树(三):TreeMap源码解析
Unicode字符集与UTF-8编码
哈希表
HashMap源码解析
第八周:
Java网络编程(一)
分层网络协议
Java网络编程(二):套接字
多线程编程基础
第九周:
Java反射
Class对象
代理模式
动态代理
第十周:
面向对象编程(一)
面向对象编程(二)
排序算法
面向对象编程(三)
第十一周:
算法(一):贪心
数据结构:堆
堆排序和PriorityQueue源码解析
算法设计(二):分治
第十二周:
强大的二分法
快速排序
归并排序
Java反射
Class对象
代理模式
map-reduce中的分治思想
第十三周:
计数排序
基数排序
构建自己的RPC
序列化与反序列化
第十四周:
多线程服务端
多线程的内幕
线程的共享互斥
纯函数和CAS
第十五周
第一课:Atomic变量
第二课:线程池
第三课:工厂模式
第四课:线程池的结构和原理
第十六周
第一课:nio(1):buffer
第二课:nio(2):channel
第三课:Java NIO(3): IO模型
第四课:Java NIO(4): 阻塞与非阻塞
第十七周
第一课:Java NIO(5): IO多路复用
第二课:Java NIO(6): Selector
第三课:Java NIO (7):Epoll版的Selector
第四课:Java NIO(8) : 异步模型之状态机
第十八周
第一课:Java NIO(9) : 状态机
第二课:Java NIO(10): 异步模型之Callback
第三课:Direct Buffer
第四课:Direct Buffer的回收(待GC课程完成后补充)
第十九周
第一课:FileChannel的基本操作
第二课:内存映射(memory map)
第三课:FileChannel的map
第二十周
第一课:协程,高并发IO的终级杀器(1)
第二课:协程,高并发IO的终极杀器(2)
第三课:协程,高并发IO终极杀器(3)
第二十一周
第一课 : 图算法:图的表达
第二课:图的广度优先搜索
第三课:习题课:八数码问题(上)
第四课:习题课:八数码问题(下)
第二十二周
第一课:图的深度优先搜索
第二课:DFS构造全排列
第三课:垃圾回收与图算法
第四课:图的非递归遍历
第二十三周
第一课:垃圾回收:基本概念
第二课:GC算法之引用计数
第三课:Python的引用计数
第四课:C++智能指针(上)
第二十四周
第一课:C++智能指针(下)
第二课:copy gc(1)
第三课:Copy GC(2) : 非递归的遍历
第四课:Copy GC(3) : JVM中的实现
第二十七周
第一课:GIT的使用(动手操作,小密圈专有课程)
第二十八周
第一课:Gradle的使用(动手操作,小密圈专用课程)
第二十九周
第一课:单例模式
谈递归时,我们在谈什么?
8086通用寄存器 EAX EBX ECX EDX ESI EDI ESP EBP EIP
EAX 是"累加器"(accumulator), 它是很多加法乘法指令的缺省寄存器。
EBX 是"基地址"(base)寄存器, 在内存寻址时存放基地址。
ECX 是计数器(counter), 是重复(REP)前缀指令和LOOP指令的内定计数器。
EDX 则总是被用来放整数除法产生的余数。
ESI/EDI分别叫做"源/目标索引寄存器"(source/destination index),在很多字符串操作指令中, DS:ESI指向源串,而ES:EDI指向目标串
ESP寄存器里存储的是在栈的栈顶。
EBP寄存器里存储的是是栈的栈底指针,通常叫栈基址。
EIP寄存器里存储的是CPU下次要执行的指令的地址。
ESP 栈顶 Extended stack pointer
EBP 栈底 extended base pointer
EIP 指令 extended instruction pointer
Java语言的品味(二)
自动拆装箱的坑
Integer类型可用 = 直接比较
Long直接使用new构造一个长整型的时候,会生成一个新的对象。而使用 valueOf 的时候,如果参数位于[-128, 127]这个区间内,则直接从cache数组中取一个对象。
System.out.println(new Long(1).equals(1)); //false 右边自动装箱成Int
System.out.println(new Long(1) == 1); //true 左边自动拆箱,变成1
字面量都不是对象
class JvmEqualsTest {
public static void main(String[] args) {
String s3 = "s";
String s4 = "s";
System.out.println(s3==s4); //true
Integer i = 2017;
Integer j = 2017;
System.out.println(i==j); //false
i = 127;
j = 127;
System.out.println(i==j); //true
String s1 = new String("s");
String s2 = new String("s");
s1.concat("b");
System.out.println(s1.intern()==s2.intern()); //true
}
}
Unicode字符集与UTF-8编码
unicode字符集 把数字与汉字对应起来
UTF-8 一种unicode编码方式
java.nio.ByteBuffer中flip、rewind、clear方法的区别
http://www.blogjava.net/sdjxsgb/archive/2013/06/18/400703.html
UTF_8的源码没看懂
第十四周:线程的共享互斥
static synchronized 锁住的是类的Class对象