作者:牛客229490098号 链接:https://ac.nowcoder.com/discuss/755338?type=2&order=0&pos=1&page=1&ncTraceId=&channel=-1&source_id=discuss_tag_nctrack 来源:牛客网 一面 自我介绍 实验室项目 object方法 hashmap 数组 链表 TCP、UDP GET、POST 缓存 双亲委派机制 好处 数据库事务、索引、大表优化 垃圾回收机制 年龄到15晋升到老年代 为什么?可以更改么?object方法
finalize
对象在被GC释放之前一定会调用finalize方法,对象被释放前最后的挣扎,因为无法确定该方法什么时候被调用,很少使用。
hashmap从结构实现来讲,HashMap是数组+链表+红黑树(JDK1.8增加了红黑树部分)实现的,如下如所示。红黑树是2-3-4是引入红黑树形成的特殊平衡树
数组 链表数组存储地址连接在一起,方便查询,难于插入删除
链表存储地址不联系,每个元素保存下一个元素的地址,方便插入删除,易于查询
TCP、UDPtcp/udp都属于Tcp/Ip协议。在tcp/ip的模型中属于传输层,
UDP用于处理数据包,是一种无连接的协议,只管发送不确认是否完整发送或是完整到达,发送是只需在数据报加上一个udp头标,开销小,数据传输高效。
TCp也用于处理数据包。是一种面写连接,可靠,基于字节流的传输层通信协议,连接时需要三次握手,核心是双方都能收发数据
第一次客服端,发送握手信号。
第二次服务端,返回握手信号,和确认信号。 这步就完成了客户端收发数据,服务端发数据,所以我们扔需要确认服务端是否能受数据。
第三次客户端,发送确认信号
如果没有收到,会有超时重发。
断开连接四次挥手也是同理
第一次客户端,发送断开请求
第二次服务端,发送确认信号,客户端到服务端连接断开,但是是双工通信,服务端仍可发出信息,客户端需要等待服务端发送二次确认。 这里完成了,客户端的收发数据
第三次服务端,发送数据完成后,想客户端发送确认断开信号。 服务端发数据
第四部客户端,等待2msl(Maximum Segment Lifetime),返回确认信号。完成服务端收数据
1.为什么连接的时候是三次握手,关闭的时候却是四次握手?
但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET
2.为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态?
可以最后一个ACK丢失。所以TIME_WAIT状态就是用来重发可能丢失的ACK报文
对比
双亲委派机制 好处双亲委派先谈jvm,jvm提供了BootstrapclassLoaderExtClassLoader/AppClassLoader三个类加载器
如果没有定义,自定义类加载器,程序一般在appClassLoard中
我们程序的类被加载时先=》ExtClassLoader-》BootstrapclassLoader
如果都不存在再有本身加载,这样利用三层查找加载已加载的类。
优势
沙箱安全机制:比如自己写的String.class类不会被加载,这样可以防止核心库被随意篡改
避免类的重复加载:当父ClassI oader已经加载了该类的时候,就不需要子CJlassI oader再加载一 次
事务就是并发控制的基本单位。有一系列操作指令组成
特性:ACID
原子性/一致性/隔离性/持久性
原子性:同事成功或失败
一致性:事务执行前后执行状态一致,几个并行执行的事务,其执行结果必须与按某一顺序 串行执行的结果相一致。 例如不能从余额为0的银行卡先取出1000,在存入1000,一致性和原子性密切相关。
隔离性:事务不受其他因素干扰,事务执行的中间结果对其他事务必须是透明的
持久性: 对数据影响的永久的
索引不了解
大表优化
1.字段优化
- 尽量使用 TINYINT,SMALLINT,MWDIUM_INT作为整数类型而非 INT,如果非负则加上UNSIGNED.
- VARCHAR 的长度只分配需要的空间.
- 使用枚举或者整数代替字符串类型.
- 尽量使用TIMESTAMP而非DATETIME.
- 单表不要有太多字段,建议在20以内.
- 避免使用null字段,很难查询优化且占用额外索引空间.
- 用整形来存ip
2.索引优化
- 字符字段只建前缀索引.
- 字符字段最好不要做主键.
- 不用外键,用程序保证约束.
- 尽量不用UNIQUE,由程序保证约束.
3.查询SQL优化
- 不用 SELECT *.
- 少用 JOIN.
- 避免 %xxx式查询.
垃圾回收机制GC的算法有哪些?标记清除法,标记压缩,复制算法,引用计数器,分代收集算法 怎么用的?
引用计数是计算机编程语言中的一种**内存管理**技术,是指将资源(可以是对象、内存或磁盘空间等等)的被引用次数保存起来,当被引用次数变为零时就将其释放的过程。
复制算法需要空间只有一半了
为了优化复制算法,产生了标记清除算法,
标记清除会产生内存片段不连续,优化之后就是标记压缩算法。
64位操作系统的jvm虚拟机新生代GC最大年龄为15后转为老年代的原因
我们所知道的对象布局中对象头中会存储对象的GC状态,而这个GC状态也就有对象的GC年龄。而在对象头中,它是由4位数据来对GC年龄进行保存的,所以最大值为1111,即为15。所以在对象的GC年龄达到15时,就会从新生代转到老年代。
可以更改么?
不知道



