2020暑期实习笔面试review(二)

2020暑期实习笔面试review(二)

做题中暴露出的一些还需要再精进的知识点

Hashmap

研读此链接

Hashset

研读此链接

并发模块:volatile 和 synchronized

volatile 让变量每次在使用的时候,都从主存中取。而不是从各个线程的“工作内存”。
synchronized 当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码。
volatile具有synchronized关键字的“可见性”,但是没有synchronized关键字的“并发正确性”,也就是说不保证线程执行的有序性。
也就是说,volatile变量对于每次使用,线程都能得到当前volatile变量的最新值。但是volatile变量并不保证并发的正确性。
volatile 不加锁即可实现可见性 比synchronized轻量级 效率高;
但是volatile不能保证原子性。synchronized可以保证原子性

接口和抽象类

Java提供和支持创建抽象类和接口。它们的实现有共同点,不同点在于:
接口中所有的方法隐含的都是抽象的。而抽象类则可以同时包含抽象和非抽象的方法。
类可以实现很多个接口,但是只能继承一个抽象类
类如果要实现一个接口,它必须要实现接口声明的所有方法。但是,类可以不实现抽象类声明的所有方法,当然,在这种情况下,类也必须得声明成是抽象的。
抽象类可以在不提供接口方法实现的情况下实现接口。
Java接口中声明的变量默认都是final的。抽象类可以包含非final的变量。
Java接口中的成员函数默认是public的。抽象类的成员函数可以是private,protected或者是public。
接口是绝对抽象的,不可以被实例化。抽象类也不可以被实例化,但是,如果它包含main方法的话是可以被调用的。

TCP

还要继续看书

为什么需要线程?

多线程的优势

  1. 发挥处理器的强大能力
    在多处理器上,多线程可以通过提高处理器资源的利用率来提高系统的吞吐率。
    在单处理器系统上也可以获得更高的吞吐率,比如说多线程程序在等待某个同步I/O操作时,还有其他线程可以继续运行。

  2. 建模的简单性
    完成单任务时,很简单,只要把这件事做好就行。但是在完成多任务的时候,不仅要把活干好,还要考虑不同任务之间存在优先级和时间。

  3. 异步事件的简化处理
    一部分线程接受客户端请求,另一部分处理器请求。如果是单线程程序的话,处理请求时会停顿导致接受请求阻塞,为了避免这个问题单线程程序必须使用非阻塞的I/O,这种I/O的复杂性要远远高于同步I/O。

  4. 响应灵敏的用户界面

数组和ArrayList的区别

1.数组长度固定,ArrayList长度可变(自动扩容,扩容的规则是原来容量大小 + 容量大小的一半,也就是原来容量的 1.5 倍
2.数组可以包含基本类型和对象类型,ArrayList 只能包含对象类型
3.ArrayList 提供了更多的特性(addAll、removeAll)
4.ArrayList 是允许 null 值的。
5.ArrayList是类型安全的

你可能感兴趣的:(2020暑期实习笔面试review(二))