小米一面 3.29
1.数组和链表的区别
2.hashMap数据结构
3.HashMap 在使用时需要注意什么地方
首先了解过其底层的都知道,HashMap有个扩容机制,是比较耗时的,所以为了减少扩容次数,在知道要存放多少元素的前提下最好指定HashMap的链表初始大小。
为了减少链表的碰撞次数,尽可能的选择不可变的类型作为Key,以为其不可变形,其HashCode的值也会不可变。如String类型
使用HashMap做缓存时,因为其线程不安全特性,最好使用ConcurrentHashMap代替。
key相同会覆盖之前的数据,因为其key的hashcode相同会向其index所对应的entry进行equals相同则覆盖
4.currentHashMap
5.synchronized 关键字和 volatile 关键字是两个互补的存在,而不是对立的存在!
- volatile 关键字是线程同步的轻量级实现,所以 volatile性能肯定比synchronized关键字要好 。但是 volatile 关键字只能用于变量而 synchronized 关键字可以修饰方法以及代码块 。
- volatile 关键字能保证数据的可见性,但不能保证数据的原子性。synchronized 关键字两者都能保证。
- volatile关键字主要用于解决变量在多个线程之间的可见性,而 synchronized 关键字解决的是多个线程之间访问资源的同步性。
6.重写和重载的区别
7.java面向对象的思想
8.final用来修饰什么
- 修饰类:当一个类被声明为final时,表示该类不能被继承,即不能有子类。这样可以确保该类的实现不会被修改或扩展。
- 修饰方法:当一个方法被声明为final时,表示该方法不能被子类重写或覆盖。这样可以确保该方法的实现不会被修改。
- 修饰变量:当一个变量被声明为final时,表示该变量的值不能被修改。一旦被赋值后,它的值将保持不变。
- 接口中的成员变量只能是public static final类型的
9.软引用和弱引用的区别
10.gc的流程?垃圾回收算法
11.进程和线程的区别
12.线程有哪些状态
13.notify()和notifyAll()的区别,哪个cpu会获取到锁?
14.线程池参数关系
15.http和https的区别
16.对称加密和非对称加密的区别
HTTPS 采用的是对称加密和非对称加密结合的「混合加密」方式:
- 在通信建立前采用非对称加密的方式交换「会话秘钥」,后续就不再使用非对称加密。
- 在通信过程中全部使用对称加密的「会话秘钥」的方式加密明文数据。
采用「混合加密」的方式的原因:
- 对称加密只使用一个密钥,运算速度快,密钥必须保密,无法做到安全的密钥交换。
- 非对称加密使用两个密钥:公钥和私钥,公钥可以任意分发而私钥保密,解决了密钥交换问题但速度慢。
17.get和post的区别
18.状态码
19.redis数据结构使用场景
20.最复杂的问题以及如何找到的解决方案
21.单例模式
#软件开发2024笔面经#