1.ArrayList和LinedList的区别?
- 数据结构实现:ArrayList :基于数组,容量不够时候采⽤复制⽅式扩容。LinkedList:使⽤链表实
现。
- 随机访问效率:ArrayList ⽐ LinkedList 在随机访问的时候效率要⾼,因为 LinkedList 是链
表结构,需要依次查找元素,性能不⾼。- 增加和删除效率: LinkedList ⾸位操作具备很⾼效率。ArrayList 的头部性能稍差。
- 线程安全:ArrayList 和 LinkList 都是不同步的,不保证线程安全
- 综合来说,需要频繁读取集合中的元素时,更推荐使⽤ Arrayist;⽽在头尾增删操作较多时,更
推荐使⽤ LinkedList。ArrayList综合性能优秀,优选之!
2. ⼿写⼀下HashMap的⼏种遍历⽅式
- Entry 遍历
- keySet 遍历
- foreach遍历
- keySet foreach遍历
3. Collection和Collections的区别?
- Collection 是⼀个集合接⼝,集合类的⼀个顶级接⼝。它定义了集合通⽤⽅法。
- Collection 接⼝直接继承接⼝有 List 与 Set。
- Collections 则是集合类的⼀个⼯具类,其中提供了⼀系列静态⽅法,⽤于对集合 中元素进⾏排
序、搜索以及线程安全等各种操作。
4. Map、List和Set的区别是什么?
- List 线性表,有序可以重复的集合,元素有先后次序,可以按照位置访问元素,可以存储null
- Set 元素不重复集合,重复元素算⼀个,不保证元素的先后次序,可以存储⼀个null
- Map元素按照key:value成对存储,可以按照key查找value,查找性能好,key不可以重复,可以
存储⼀个null key
5. 什么叫对象序列化,什么是反序列化,实现对象序列化需要做哪些⼯作?
- 序列化:把对象转化为可传输的字节序列过程称为序列化。
- 反序列化:把字节序列还原为对象的过程称为反序列化。
- 其实序列化最终的⽬的是为了对象数据存储,或者进⾏⽹络传输
- java 实现序列化很简单,只需要被序列化对象类实现Serializable 接⼝,然后使⽤对象流进⾏
序列化和反序列化。
- 使⽤ObjectOutputStream 进⾏对象序列化
- 使⽤ObjectInputStream 进⾏对象反序列化
6. 创建线程的⼏种⽅式是什么?
- 通过继承 Thread 类创建线程类。
- 实现 Runnable 接⼝创建线程类。
- 通过 Callable 和 Future 接⼝创建线程
7. 进程和线程的区别
- 进程是资源分配的最⼩单位,线程是CPU调度的最⼩单位。操作系统执⾏程序时候,按照进程分配内存等资源,⽽执⾏程序时候以线程为单位执⾏程序中的指令。⼀个进程内部包含多个并发执⾏的线程。在进程内部多个线程共享⼀个进程的内存资源。
8. 什么是死锁,产⽣死锁的四个条件
1) 互斥条件:⼀个资源每次只能被⼀个进程使⽤。
2) 请求与保持条件:⼀个进程因请求资源⽽阻塞时,对已获得的资源保持不放。
3) 不剥夺条件:进程已获得的资源,在末使⽤完之前,不能强⾏剥夺。
4) 循环等待条件:若⼲进程之间形成⼀种头尾相接的循环等待资源关系。
这四个条件是死锁的必要条件,只要系统发⽣死锁,这些条件必然成⽴,⽽只要上述条件之⼀不
满⾜,就不会发⽣死锁。
9. 线程池有⼏种?
- Java通过Executors(JUC)提供四种线程池,分别为:
- newCachedThreadPool 创建⼀个可缓存线程池,如果线程池⻓度超过处理需要,可灵活 回
收空闲线程,若⽆可回收,则新建线程。
- newFixedThreadPool 创建⼀个定⻓线程池,可控制线程最⼤并发数,超出的线程会在队 列
中等待。
- newScheduledThreadPool 创建⼀个定⻓线程池,⽀持定时及周期性任务执⾏。
- newSingleThreadExecutor 创建⼀个单线程化的线程池,它只会⽤唯⼀的⼯作线程来执 ⾏
任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执⾏。
10. TCP/UDP的区别
- TCP 基于连接,UDP 基于⽆连接。
- TCP 要求系统资源较多,UDP 较少。
- UDP 程序结构较简单。
- TCP 保证数据正确性,UDP 可能丢包。
- TCP 保证数据顺序,UDP 不保证。
11. 三次握⼿四次挥⼿
- 三次握⼿的原⽂是 three-way handshake,整个名词的可以翻译为:需要三个步骤才能建⽴握⼿/连接的机
制。当然,三次握⼿也可以叫 three-message handshake,通过三条消息来建⽴的握
⼿/连接。
- 第⼀次握⼿:客户端什么都不能确认;服务器确认了对⽅发送正常,⾃⼰接收正常
- 第⼆次握⼿:
客户端确认了:⾃⼰发送、接收正常,对⽅发送、接收正常;
服务器确认了:对⽅发送正常,⾃⼰接收正常
- 第三次握⼿(客户端发送 ACK 报⽂给服务器):
客户端确认了:⾃⼰发送、接收正常,对⽅发送、接收正常;
服务器确认了:⾃⼰发送、接收正常,对⽅发送、接收正常
-
TCP
连接的释放需要发送四个包(执⾏四个步骤),因此称为四次挥⼿(Four-way
handshake),客户端或服务端均可主动发起挥⼿动作。
- 通俗的来说,两次挥⼿就可以释放⼀端到另⼀端的 TCP 连接,完全释放连接⼀共需要四次挥⼿。
12. Java异常体系?
- 顶层是throwable 然后是 error 和 exception;
- Error 就是 虚拟机错误,⽐如典型的 outofMemoryError, stackOverFlowError,出现以后
系统基本崩溃,不可恢复;
- exception 两部分:
-
RuntimeException,也称为⾮检查异常:程序运⾏过程中才可能发⽣的异常。⼀般为代码的
逻辑错误。例如:类型错误转换,数组下标访问越界,空指针异常、找不到指定类等等。
- 检查异常:编译期间可以检查到的异常,必须显式的进⾏处理(捕获或者抛出到上⼀层)。例
如:IOException, FileNotFoundException等等。
51万+

被折叠的 条评论
为什么被折叠?



