最近一直在忙着复习期末考和实习面试,面试完没有来得及总结,总结一下
2022届实习面试(一,二,三面)
一面 (接近一小时)
1.自我介绍
如实讲述自己的情况
2.问你一道算法题:一个随意的字符串,存在一个子串,这个子串中要出现a,b,c三个字母,三个字母顺序不做要求,但是在这个子串中,这三个字符每个只能出现一次,求最小子串,讲一下你的想法
我想的是将abc当做一个子串,然后使用滑动窗口去求这个字符串中最小的子串,具体怎么说的我也说不清楚,但是这道题就是leetCode46题,第二个字符串就是abc
3. jvm内存布局
这个问题好像只要问jvm就会问它,周志明的jvm开始就讲的内存布局。程序计数器、虚拟机栈、本地方法栈、Java堆、方法区、直接内存(它不是虚拟机运行时数据区的部分,但是也要申请空间,但是操作系统给的内存是有限的,Java堆设置太大导致它没地方的话也会导致OOM),还有这些内存结构存储什么数据和作用也讲了一下。
4.tcp的三次握手四次挥手知道吧,为什么四次挥手
刚开始听到挺激动的,因为三次握手仔细看过。然后面试官问我为什么四次挥手。。。我想了一会,幸亏看过RuiDer的腾讯面经,然后仔细叙述了一遍
5.mysql中Innodb和MyIASM的区别
聚簇索引和非聚簇索引
Innodb主键索引叶子节点存储数据,更加高效。而MyIASM存储的是行数据地址
。。。忘了
N.你有什么问我的?
二面(中间隔了一天,接近一小时)
1.自我介绍
2.链表反转
没啥说的,默写就行了,代码如下
public ListNode reverseList(ListNode head) {
ListNode cur = head,pre = null;
while(cur != null) {
ListNode temp = cur.next;
cur.next = pre;
pre = cur;
cur = temp;
}
return pre;
}
3.spring循环依赖问题如何解决
具体不记得了,但是在某个地方见到过。好像使用了三级缓存,在bean实例化之后就放入一个工厂的缓存,然后在依赖注入之后会放入第三级缓存,当其他bean使用这个bean的时候,就是用这个工厂缓存中的仅仅实例化的bean
4.联合索引底层如何实现
非叶子节点存储最左边的索引,叶子节点存储三个索引的数据,从左到右排序
5.上家公司干了什么
6.http和https的区别
还是看了RuiDer的面经我会的,主要就是SSL/TSL
7.ssl过程详细讲一下
涉及到安全证书,数据加密,密钥协商等
8.你有并发经验,讲一下
。。。忘记了
N.你有什么问我的?
三面(二面11天后,55分钟)
1.自我介绍
2.你有并发实战经验,讲一下
3.给你一个网址,使用套接字变成完成数据传输
很长时间没看,具体怎么写忘了,给面试官讲了一下思路
4.http和tcp德区别
一个应用层,一个传输层,HTTP就是讲数据包装通过Socket传递给传输层去传输,讲一下二者是什么就行
5.Synchronized和volatile的区别
一个修饰代码块,一个修饰单个变量。一个保证原子性和可见性,一个只保证可见性
6.那十个线程,每个线程进行100次i++,应该使用volatile还是synchronized?
用Synchronized...我在并发编程的艺术里看到了volatile不能保证i++线程安全,但是十个线程,不敢说。面试官:
应该用volatile,它不是不保证原子性吗
7.进程和线程的区别
进程大,内存消耗多,线程是轻量级进程,一个进程可以有多个线程。
8.那直接运行多个进程好了,还这么麻烦
线程有共享的内存(java堆,方法区),线程切换消耗小。进程切换消耗大
9.两个数组,求公共元素
用hashSet