1 - Java
1.1 - Java源码阅读
HashMap HashTable ConcurrentHashMap 的区别
自动拆箱,装箱
import java.io.*;
class test
{
public static void main (String[] args) throws java.lang.Exception
{
Integer a = 1;
Integer b = 2;
Integer c = 3;
Integer d = 3;
Integer e = 321;
Integer f = 321;
Long g = 3L;
System.out.println(c == d); //true
System.out.println(e == f); //false
System.out.println(c == (a+b)); //true
System.out.println(c.equals(a+b)); //true
System.out.println(g == (a+b)); //true
System.out.println(g.equals(a+b)); //false
}
}
volatile - 并发可见性
transient - 序列化
jdk1.5 自动装箱,泛型,动态注解,枚举,变长参数,遍历循环,静态导入,并发包
反射
1.2 - 设计模式
为什么要写单例模式?
考察你对设计模式的理解,单例模式是唯一的可以仅仅用几十行代码完整实现的设计模式
Spring 源码用到了哪些单例模式?(待补充)
2 - 计算机系统
2.1 - 进程、线程和物理内存
进程是操作系统对一个正在运行的程序的一种抽象。在一个系统上可以同时运行多个进程,而每个进程都好像在独占地使用硬件。而并发运行,则是说一个进程的指令和另一个进程的指令是交错执行的。在大多数系统中,需要运行的进程数是多于可以运行它们的CPU个数的。传统系统在一个时刻只能执行一个程序,而先进的多核处理器同时能够执行多个程序。无论是在单核还是多核系统中,一个CPU看上去都像是在并发执行多个进程,这是通过处理器在进程间切换来实现的。操作系统实现这种交错执行的机制称为上下文切换。上下文指的是操作系统保存跟踪进程运行所需的所有状态信息。
一个进程实际上可以由多个称为线程的执行单元组成,每个线程都运行在进程的上下文中,并共享同样的代码和数据。由于网络服务器中对并行处理的需求,线程成为越来越重要的编程模型,因为多线程之间比多进程质检更容易共享数据,也因为线程一般来说都比进程更高效。
虚拟内存是一个抽象概念,它为每个进程提供了一个假象,即每个进程都在独占地使用主存。每个进程看到的内存都是一致的,称为虚拟地址空间。
2.2 - 栈内存和堆内存
2.3 - 同步、异步、阻塞、非阻塞
Linux IO模式及 select、poll、epoll详解
2.4、什么是协程,及于进程和线程比得优缺点
- 协程极高的执行效率:因为子程序切换不是线程切换,而是由程序自身控制,因此,没有线程切换的开销,和多线程比,线程数量越多,协程的性能优势就越明显。
- 不需要多线程的锁机制:因为只有一个线程,也不存在同时写变量冲突,在协程中控制共享资源不加锁,只需要判断状态就好了,所以执行效率比多线程高很多