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+树

posted @ 2024-07-04 18:27  lucky要努力  阅读(3)  评论(0编辑  收藏  举报