1. 锁的两种主要特性:
- 互斥:同一时间只允许一个线程持有某个特定的锁。线程持有该锁相当于令牌去访问线程共享的数据。
- 可见性:线程释放锁之前对共享数据做出的更改对于随后获得该锁的另一个线程是可见的。
2. 什么是原子性?
原子性是对操作而言的,原子操作就是不可再分的操作。所谓不可再分就是,操作一旦开始,就一直运行到结束,中间不会有任何 context switch(切换到另一个线程)。
3. 为什么一个字节是 8 位?
在计算机的发展历史上,IBM 为 System/360 (IBM 于 1964 年推出的大型电脑)设计了一套 8 位 EBCDIC 编码,涵盖了数字、大小写字母和大部分常用符号,同时兼容广泛用于打孔卡的 6 位 BCDIC 编码。System/360 在商业上的成功奠定了字符存储以 8 位即一个字节为单位的基础。
4. 类加载器的代理模式
类加载器在查找某个类的字节码并定义它时,首先会代理给父类加载器,由父类加载器尝试加载这个类,如果加载失败再让父类加载器的父类加载。使用代理模式保证了 Java 核心库的类的加载工作都是由引导类加载器来统一完成,保证了所有 Java 应用所使用的都是同一个版本的 Java 核心库的类。
5. 加载类的过程
类加载器首先会代理给父类加载器来尝试加载某个类,真正完成类加载工作的类加载器通过调用 defineClass
来实现,这个类加载器被称定义加载器。启动类的加载过程的类加载器通过调用 loadClass
来实现,这个类加载器称为初始加载器。
类加载器在成功加载某个类之后,会把得到的 java.lang.Class
类的实例缓存起来,下次加载该类时,类加载器会直接使用缓存中的类的实例。
6. URL 省略文件名
例如 http://www.example.com/dir/
,以“/”结尾代表 /dir/ 后面本来应该有的文件名被省略了,在这种情况下服务器会访问事先设置好的默认文件名,大多数情况下是 index.html 或者 default.htm。
7.什么是 URI (Uniform Resource Identifier)
统一资源标志符,URI 的内容是一个存放网页数据的文件名或者是一个 CGI 程序的文件名。
8.集线器和路由器的区别
集线器根据以太网的规则,在子网中将网络包传输到下一个路由器. 路由器根据 IP 规则判断下一个路由器的位置然后传输网络包.
9.什么是套接字(Socket)
套接字是网络通信过程中端点的抽象表示.如果把网络通信理解为一根水管,那么套接字就是水管的两个端点.套接字包含了网络通信必须的五种信息:连接使用的协议,本地主机的 IP 地址,本地进程的协议端口,远地主机的 IP 地址,远地进程的协议端口.这里的远地就是网络通信的另一端.
通过 TCP 头部中的发送方和接收放端口号可以找到要连接的套接字.
创建套接字时,首先分配一个套接字所需的内存空间,然后向其中写入初始状态.
10.什么是 ACK 号
ACK 号是 TCP 头中的 32 位数据,在网络传输中,接收方用来告知发送方接收方已经收到了所有数据的第几个字节