1. 手写快排
2. 手写归并
3. 手写堆排
4. 手写单例
public class Singleton {
//单例对象声明为volatile,它的值的修改会立即被其他线程可见,避免了多线程访问时出现并发问题
private volatile static Singleton singleton;
private Singleton() {}
public static Singleton getSingleton() {
if (singleton == null) {
synchronized (Singleton.class) {
//防止加锁的时候其他线程已经创建对象,所以加锁后多判断一次
if (singleton == null) {
singleton = new Singleton();
}
}
}
return singleton;
}
}
5. 手写LRUcache
设计一个双向链表,每次查询和新写入的,先判断是否在链表中,如果在就挪到链表头部,不在直接在链表头部插入新节点。每次链表满了之后,就清楚链表尾部的数据,这样就保证了链表中的数据都是最近访问的。
6. 手写线程池
7. 手写消费者生产者模式
见记某一次某大厂面试的实时笔试题
见手写消费者生产者模式
8.手写阻塞队列
见手写阻塞队列(java)
9. 手写多线程交替打印ABC
见手写多线程交替打印ABC
10. 交替打印FooBar
见交替打印FooBar