1.31小厂实习技术面试 面经 已拿offer
前言 年后投了一下,马上约了面试,一面应该是主管面,问了几个问题,然后就是技术面了,技术面我其实有挺多没答上来的,我主要还是想积累一下面试经验吧,面试官人真的很好,整体面试感觉也非常不错,考虑到大厂实习还没开,还是想准备准备投投大厂,拒了offer。
面试闲聊篇
Java应用相关的知识更新太快,不养老,有家有孩子的时候拼不过年轻人。
安全的方向接近底层,知识更新不会太快,知识都是往下挖掘,这方面的技术沉淀这块比较好,不会特别快。
安全这个方向时间工作还是能比较好的平衡。
建议往底层,算法,偏研究性质的东西。
最好是去大公司,去过一次小厂,人家看到这个经历可能会皱眉头,现在吃点苦,往大厂拼,拿小厂练练手是可以的,但是重心应该还是准备大厂面试。大厂考在校的知识比较多,但是也要准备一些项目相关的八股。
简历上写的东西一定要弄清楚,会深挖简历上的东西。不写就觉得亏,敢写面试官就敢问。
面试这个东西要有一个熟悉的过程,会遇到挫折的,但是多面试多总结复盘,会好起来的。
把知识体系化,画个图。
面试过程
计算机组成原理这门课还是非常重要的!我们软件都是建立在冯诺依曼体系之上的,我们工作以后要拿工作内容往这门课的知识去靠,就会发现所有的程序的实现方式和设计原则都是围绕冯诺依曼的体系去做的,不仅是计算机的硬件体系,也是计算机的软件体系。都是围绕控制,运算,存储去处理问题的。
数据结构
1.说一下快速排序的实现简单说一下,再说一下归并排序
2.那归并排序和快速排序哪一个更快一些呢
3.再介绍一下最短路径算法,迪杰斯特拉算法。
4.那在图上面发生循环了的话怎么处理?
计算机网络
5.http里面GET和POST的区别?
6.GET和POST的长度限制是多少?
7.POST的数据存在Body的最大大小是多少?这个面试没答出来,要查一下
8.URL的最大长度是多少?没答出来
9.GET的URL长度呢?没答出来
10.其他的请求方式有什么?
11.简单说一下三次握手和四次挥手
Java基础
12.Java有哪些基础数据类型,还有他们的长度是多少?int 32位 这个要去熟悉一下,特别注意内存占用的字节!! String是类,不是源数据类型!
13.还有一个我们使用当中接触不到的源数据类型,了解过吗?有关Java虚拟机的知识,查一下,看一下深入理解Java虚拟机那本书把
14.我有一个int类型的数据把它包装成Integer类型,那他现在占用的内存大小是多少?新的对象大小是多少?
这个和类创建方面的知识有关,没答上来,这块的知识需要重新学习下。 一般会扩大四倍,自己分析结构。value,对齐等等。
15.说一下一个class对象的结构?没答完全。
16.对象的创建机制?
17.说一下类加载的过程吧?
18.问单例设计模式,很多种写法,尤其是懒汉式的写法,保证单例的方式实际上是基于类加载的机制的,虽然有线程同步的问题和被重写的问题,但在实际开发中已经很好了。这个时候就要去从类加载流程方面解释,常量的初始化在类加载的哪一步,这个要了解清楚。
19.ArrayList的结构是什么样的?
20.ArrayList扩容的流程简单介绍一下
21.ArrayList扩容你觉得它这个方法有什么风险没有?多线程,非线程安全,除此以外?扩容的时候数据量太大了,会耗光内存,时间长,里面可以存空值吗?一个可以存null的容器和一个不可以存null的容器要知道,会减少bug。
22.要遍历ArrayList里面所有对象,有什么方式,除了for和for each还有? 就遍历,不存在排序什么的? 答了个while index 一个一个去get
23.那我要遍历找到一个对象在ArrayList里面,然后从里面删掉,在for里面revome会报错,那用什么方式去遍历然后删掉它不会报错呢?答了个遍历完直到在哪再删除。
24.为什么刚才的情况会报错呢? 涉及到java实现foreach的实现原理,就是值传递,对象传递的知识,多了解点底层看代码会不一样。
25.了解HashSet吗?里面可以存null吗?没答对。
26.给一个数组进行排序有什么方法?就对ArrayList那个数组?答了Arrays.sort() 加lambda表达式
27.JVM的主要内存结构?高版本的方法区有什么变化吗?然后他们的主要功能是什么,简要说一下。
28.垃圾回收的优先级是什么样的?答了分区分代,要回去看一下。
29.System.gc() 显示的声明进行一次垃圾回收,会立即进行垃圾回收吗? 答不会,需要查一下。
30.那这个方法写了不立即执行,写了有什么作用?没答出来,但思路是对的
Spring框架
31.简单说一下spring bean的生命周期 或者说 spring容器启动的时候怎么初始化? 这个没答上,要重新学下这方面的八股。这块要详细了解清楚,和类加载有点类似,出事情多在这个方面。
框架这块没多问,因为我确实没怎么看这方面八股就直接和面试官说了不太熟悉。
Mysql
32.说一个场景,用Sql语句写一下,统计一下一个学校三年级的性别分布
统计出来结果应该是这样:
男 100
女 95
未知 3
select sex, nums from (select sex, count(id) as nums from school group by sex) order by column desc;
面试结束闲谈
大厂和小厂还不一样,大厂会问Mysql的实现机制,索引啊,数据存储啊,Sql语句执行机制啊,小厂可能会让你去开发项目,如果sql写的不熟悉工作效率就低了。
简历上面写的特别有聊的地方,数据存储优化,引入redis数据库,session使用啊,在哪引入redis,怎么判断引入redis数据库,为什么redis那么快,这个东西可以聊到硬件这个层面,你为啥用redis为什么不用mysql,你说数据存储快,那我可以用缓存啊,你说持久化我可以说memorycache也有持久化的机制啊,为什么非要用redis啊。
你是从那个地方发现需要优化session?当然你可以说我自己做项目我想优化就优化
热点数据访问,点赞实现机制,实现集群分布式情况下的点赞实现,怎么去处理大量的数据啊?
你去了解一下输入url到相应,这个过程里面都发生了什么,这个不只是网络,这个说地方都可以讲。
最简单的就是DNS,那哪些地方可以进行域名解析,大学里面学到的就是DNS嘛,除了这些地方呢?浏览器,操作系统,那windows和Linux具体是在哪里解析呢?post文件 host里面
网卡是怎么处理它的?小区服务器,联通的机房,服务器静态文件,动态文件怎么处理的?
开放性的就需要深挖很多很多细节,了解的越多越详细就更好,也更容易发现问题,开发的时候也要有这些知识作为储备的。
上网百度Java工作技术栈,八股文等等。在学校里学要知道原理,实际开发需要了解更多细节。
总结
JVM类加载机制,参照简历上的去翻书,总结
spring框架要深入的理解,特别是bean生命周期啊,初始化等一些高频问题,网上找八股看看。
然后就是对自己的项目再去熟悉,想想一些可能以后会遇到的情况,以及你如何去解决。
上网百度Java工作技术栈,八股文等等。在学校里学要知道原理,实际开发需要了解更多细节。
把知识体系化,画个图。
简历写上计算机组成原理
#我的求职思考#