初面
1、JVM的垃圾回收器有哪些?
Serial、Parallel、CMS、G1
2、MyBatis 中 # 和 $ 的区别?
# 预编译后生成占位符,$ 类似于字符串拼接;# 比较安全,$ 容易造成 SQL 注入
3、什么是 SQL 注入?(我给忘了)
sql注入是一种将sql代码添加到输入参数中,传递到sql服务器解析并执行的一种攻击手法
4、知道内存溢出吗?
OOM 的话,有栈内存溢出,举个例子像递归忘记写递归出口,就容易造成栈内存溢出;堆内存溢出的话主要是堆内存空间不足,比如对象太多垃圾回收器处理不过来,而且都是强引用
5、生产上 OOM 怎么排查?(有一点印象但还是不会)
(1)通过top命令找出CPU占比最高的进程;
(2)jps -l 找到后台 Java 程序;
(3)定位到具体线程或代码 ps -mp 进程 -o THREAD, tid, time
(4)将该线程id转成16进制
(5)jstack 进程id | grep tid -A60找到具体代码
6、JVM常用参数有哪些?
-Xmx:最大堆内存空间;-Xms:初始化堆内存
7、生产上有千个接口,但客户说太卡了,怎么排查哪个接口有问题?
不太懂......但感觉是用 Spring AOP 切入各个接口
8、JVM 堆内存是怎么样的?
堆内存主要有新生代和老年代,其中新生代分为 Eden、S0区、S1区。新生代中主要发生 Minor GC,老年代主要是 Full GC
9、你有什么想问的?
如果有幸加入贵司需要做什么?需要学什么技术?我的面试情况来看您觉得我还有什么欠缺的?
二面:
先是问我大学学了什么课程,然后面试官列举了几个:计算机原理?计算机网络?数据库?数据结构与算法?操作系统?我都说有,他说那来聊聊。
1、平时都有啥兴趣爱好?
内心OS:这就是想看看我有没有学技术吧,但是不能直接说。
回答:我平时喜欢健身看书,有看一些文学类的书也有技术类的书。
2、都看什么技术书?
内心OS:其实我啥都没看过,我得挑个比较会的
回答:《深入理解Java虚拟机》
3、为什么看这书?
想要提高自己的技术,觉得不能只是当一个只会CRUD的程序员,而且这属于Java 的底层技术,作为一个即将从事Java的人来说必须要学。
4、那说说JVM的内存结构
线程共享的有 堆、方法区;线程私有的有 栈、本地方法栈、程序计数器。
5、什么叫线程共享?
线程共有的话是每个线程都能访问,比如堆中的对象还有方法区中的常量池;而像栈那样的,每个线程都独有一份栈空间,存放各自的局部变量表和操作数栈等,这就是线程私有。
6、垃圾回收算法知道哪些?
复制算法,主要发生在新生代,在需要回收的时候,将S0区的存活对象复制到S1区,清除可回收对象;
标记清除算法:标记存活对象,清除可回收对象,可能造成内存碎片;
标记整理算法:和前面类似,标记存货对象,清除可回收对象,整理存活对象,不会造成内存碎片,但多了整理的过程,效率比前面的差一点;
分代收集算法:按照不同的代,使用不同的算法;一般来说,新生代使用复制算法;老年代使用标记清除火标记整理。
7、你怎么理解计算机网络的模型的?
我比较熟的是传输层,所以这个问题回答的断断续续,面试官实在受不了了,直接打断我。
8、TCP和UDP的区别?UDP怎么传输的?TCP怎么保证可靠传输的?WebSocket的特点?
9、数据库脏读和幻读的区别?
脏读:读取了已经修改但未提交的数据;幻读:读取到了新增列
10、BIO 和 NIO ?是那个层面的实现?
BIO 阻塞 IO;NIO 非阻塞 IO。IO是操作系统层面实现的,在进行IO操作时不是直接操作物理硬件,而是通过缓冲区的复制进行的,一般来说是用户缓冲区和内核缓冲区之间复制。BIO 像 read 操作需要等数据准备好才会接着往下执行;NIO 则是通过轮询,若没有准备好则去处理别的事,偶尔查看,如果备好了就往下执行。
11、来说说数据结构吧,说一下线性结构有哪些?
数组,栈、队列等。
12、数组和链表区别?
数组是顺序结构,即在物理层面,数据之间存储是相邻的;链表是链式存储结构,它会存储下一个数据所在地址;在查询上数组支持随即查找,效率更高,插入和删除操作需要移动空间,效率相对较低;而链表则相反。
13、你从计算机原理的角度说一下为什么数组查找更快?(不会)
CPU和内存的读取速度差异使得Cache出现,Cache会把一片连续的内存空间读入, 因为数组结构是连续的内存地址,而链表的节点是分散在堆空间里面的,所以数组全部或者部分元素被连续存在Cache,而链表则需要去内存查找,速度较慢。
14、算法思想?(没搞懂,说不会)
枚举、贪心、动态规划、递归、分治等
15、了解 Java 并发包吗?讲一下都知道什么?
ConcurrentHashMap,分1.7和1.8给面试官讲了一下;说完准备说原子类的时候被打断了问下一个
16、Java Web有什么组件?(不会)
Servlet,Filter,Listener
17、MVC是什么?为什么这么设计?
M:model,分装数据相关;V:view,视图层;C:controller,控制层,一般处理逻辑,作为连接 M 和 C 的“桥梁”。这么设计使得相关模块分层,增加了程序的可拓展性和维护性。
18、有什么想问的?
和一面问的差不多......多了一个问题:下面还有面试吗?面试官说接下来不是技术面了。