JavaSE:
--------多线程--------
①线程:线程在java中也是对象,也要创造线程类。
②创建线程的三种方式:
继承Thread:Thread是Runnable的实现类,而线程类进一步继承Thread类。
实现Runnable:线程类直接对Runnable类进行实现。
实现Callable:线程类实现Callable类。
③线程的生命周期:线程从诞生到死亡,除此之外还有就绪态、阻塞态、运行态。运行态还会进入等待池或者锁池。
④线程安全问题:线程安全问题有三种解决办法,同步代码块、同步方法或者使用Lock锁。
⑤线程同步的缺点:效率慢。有可能还会出现【死锁】。死锁就是每个线程各自占用一部分资源,而每个线程等待的资源都不在空闲状态,产生了死锁现象。
⑥线程通信问题(生产者与消费者问题)。
--------Junit、注解、枚举--------
⑦Junit:Junit是白盒测试。
⑧注解:
Junit的注解:Test、After、Before
JDk内置的三个注解:Override(重写)、Deprecated(表示方法过时)、SuppressWaring(能够抑制编译器警告)
元注解(修饰注解的注解):Retention(修饰注解的生命周期)、Target(修饰注解能够修饰什么东西)、Documented、Inherited
⑨枚举:是对象个数有限或确定的类,可以应用于在输入入口对参数做限制。
算法:
①前k个高频值:就是统计数组中出现次数最多的k的数字。思路是先用HashMap统计每个数字出现次数。然后用优先队列(小根堆)根据出现次数把键值对(封装成数组)进行排列。这个时候因为只需要维护k个键值对,如果小根堆的堆顶小于下一个待加入的数值,直接把堆顶弹出即可。最后把小根堆装进数组返回。
②二叉树的节点定义:
public class TreeNode(){
int val;
TreeNode left;
TreeNode right;
TreeNode(){
}
TreeNode(int val){
this.val = val;
}
TreeNode(int val, TreeNode left, TreeNode right){
this.val = val;
this.left = left;
this.right = right;
}
}
③二叉树的递归遍历:比较简单,分清楚前中后遍历中add代码的位置就行。
今天JavaSE学完了,还有一点Java新版本的特性,感觉可以放在后面看。明天看看是按顺序学数据库和前端还是直接进入开源框架。
算法明天继续二叉树,看看迭代遍历和统一迭代法的区别是啥。。