java面试题
1、为什么要做序列化
在前端调用或接口之间相互调用的场景,使用序列化在网络传输时以流的形式,能提升网络间传输的效率。
实现:
Java 类只需要实现 java.io.Serializable 接口,声明SerialVersionUID。
2、为什么要做反序列化
拿到原始的字节流,转换成java对象,保证的数据(类、属性、方法是原始的,未被修改的)
如果通过方法直接调用,万一有人在这期间通过反射改变了类的属性呢?
3、Interger是127及以内的存在一个对象里,128以上存在2个对象里
4、为什么 char 数组比 String 更适合存储密码
字符串在 Java 中是不可变的,如果你将密码存储为纯文本,它将在内存中可用,直到垃圾收集器清除它. 并且为了可重用性,会存在 String 在字符串池中, 它很可能会保留在内存中持续很长时间,从而构成安全威胁。
String在常量池中,不安全。
5、网络传输协议?
6、字节流、字符流的使用场景
字节流传递:excel、压缩包、音频、视频、图片
字符流传递:txt文件
字符流需要经缓存区读写文件,慢。
字节流不需要,快。
6、TCP建立链接
三次挥手、四次挥手
ack包
7、B+树
索引底层搜索快,底层数据结构是B+树