文章目录
提问问题
- 介绍一下反射?有哪些常见操作?有什么优缺点?
- 堆是唯⼀可分配对象的地⽅吗?栈中的对象和堆中的对象内存分布有啥区别?
- 为什么 Java 对象占⽤的内存⼤⼩是 8 的整数倍
- 介绍一下锁升级过程?
- 如何实现乐观锁?
- 创建线程的⽅法?
- 线程池的常⽤参数?
- 为什么要⽤⾃增的主键?
- 由联合索引,联合索引列(如 where a=,b=,c=)如何确定是 a b c 的顺序?
- 介绍一下覆盖索引?
- union /union all 的区别,使用场景?
- ⼆叉树的遍历⽅式?根据前中后,怎么能复原⼆叉树?为什么前后不⾏?
- 五层⽹络模型是哪五层,七层网络模型呢?数据链路层的作⽤?
- 简述一下三次握⼿和四次挥⼿?为什么要等 2MSL?
- 大数据思路题:⼀个很⼤的数据⽂件,如何找其中最⾼频的 10 个?
- 算法题:反转链表
问题1
反射机制主要通过java.lang.reflect
包中的类和接口实现,包括Class
,Field
,Method
和Constructor
等。
使用反射的好处包括:
缺点:性能开销较大,代码可读性降低,以及安全性问题
问题2
在Java中,堆不是唯一可以分配对象的地方。
栈中的对象和堆中的对象内存分布的区别主要在于它们的生命周期和访问方式:
-
栈上的对象通常是局部变量,它们的生命周期与方法的执行时间相同。当方法执行完毕后,栈帧被弹出,栈上的局部变量随之销毁。
-
堆上的对象则有自己独立的生命周期,它们的创建和销毁由垃圾回收器控制。对象在堆上分配后,即使方法执行完毕,只要还有引用指向这个对象,它就不会被垃圾回收器回收。
问题3
Java对象占用的内存大小通常是8的倍数,这是为了保持内存对齐并提高性能,Java虚拟机通常将对象的大小对齐到8字节边界。
问题4
问题5
实现乐观锁通常使用版本号或时间戳来记录数据的变更。
问题6
问题7
线程池的常用参数包括核心线程数、最大线程数、存活时间、工作队列等。
问题8
问题9
在数据库中,联合索引(也称为复合索引)是在两个或多个列上建立的索引。索引列的顺序非常重要,因为它决定了数据库如何使用该索引来加速查询。通常情况下,数据库查询优化器会根据以下规则来确定是否使用联合索引以及如何使用联合索引:
问题10
问题11
问题12
问题13
问题14
TCP连接的建立和终止过程分别称为三次握手(Three-way Handshake)和四次挥手(Four-way Handshake)。
三次握手用于建立连接,而四次挥手用于安全地关闭连接。等待2MSL时间是为了确保连接的正确关闭和网络中旧连接请求的清理,从而维护网络的稳定性和可靠性。
问题15
问题16
使用双指针法,用一个临时变量指针做跳板,更换节点的next指向,具体看反转链表
class Solution {
public ListNode reverseList(ListNode head) {
ListNode pre = null;
ListNode cur = head;
ListNode temp = null;
while (cur != null) {
temp = cur.next;// 保存下一个节点
cur.next = pre;
pre = cur;
cur = temp;
}
return pre;
}
写在最后
面试一般根据岗位要求或者简历上写的来进行扩展提问,也有些是直接问公司常用到的相关方面的技术问题,无论怎么准备都祝大家能拿到心怡的offer!