实习Java后端面经(字节一二三面 + 网易一面)
字节跳动(电商业务)
一面
1.13 号下午 2 点
(写帖子的时候离一面已经过了一个星期了,细节记不清楚了,小伙伴们大致看看就好)
首先是自我介绍环节,面试官介绍部门相关的技术栈以及常用语言等,然后让我做了一下自我介绍(因为是视频面,建议准备一个3-5min的自我介绍稿,直接切屏照着稿子读就好了),随后开始技术问题
-
你介绍说使用Java做开发,但是我们项目主要是使用Golang(这当然是不介意)
-
经常使用Linux是吧,问你几个命令吧,查询当前目录下所有以.go结尾的文件数(这个应该是用find的exec参数就好了,楼主没有回答出来)
-
杀掉一个进程 -9 代表什么(强制) 还有什么其他参数、使用kill命令后,操作系统是如何通知进程的(这里回答了进程间交互,后来在引导下讲了socket,最后没有得到很好的回答,过)
-
32、64位系统有什么区别
-
操作系统的寻址有哪些方式(分页、分段、段页式)
-
段页式查询一次数据总共需要几次访存
-
如何减少访存次数
-
来写个SQL吧,统计数据表time中每个小时记录数
id p_date 1 2020/08/29 00:10:10
2 2020/08/29 01:10:10
3 2020/08/29 01:10:10
4 2020/08/29 02:10:10
5 2020/08/29 01:10:10
-
MySQL默认引擎是哪个,底层索引有什么作用,主键索引&非主键索引的区别
-
在浏览器中输入 www.douyin.com 浏览器提示找不到 IP 地址是什么原因
-
DNS解析有哪两种,分别讲一下具体流程
-
问一下关于Java的问题吧,Java如何安全地停止一个线程(不等它运行结束)(这里楼主本来想回答 join() 不过 join() 要等它运行结束)
-
编程题
旋转无环链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数
in:1->2->3->4->5->NULL, k = 2
out:4->5->1->2->3->NULL
这里就是非常建议小伙伴们写题时要问面试官,比如这题就是关于 k > list.length 时如何解决 -
编程题
给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于n,你需要让组成和的完全平方数的个数最少
in: n = 12
out: 3
反问环节
因为当时那两道编程题楼主花了太多时间了,面试官没时间就走了(这时候真的以为自己已经凉了!)
总结
面试官水平很高,有不懂的千万不要不懂装懂,本来面试也没期望能答出所有问题;面试官很有耐心的,又不懂的地方完全可以询问,不要自己一个人闷想。
二面
1.20 号下午 5 点
首先是自我介绍环节,面试官介绍部门相关的业务(主要是电商平台的风险管控),然后让我做了一下自我介绍,随后开始技术问题
-
Java内置对象Object,有什么方法以及对应的用处(这里我主要讲了hashcode()、equals()、toString()、clone()),在讲到clone的时候也问了常见的深拷贝与浅拷贝问题;之后面试官也提到了wait()以及notify()方法(楼主只记得notify()在观察者模式的应用)
-
因为在前面提到了设计模式,面试官就顺势问了设计模式的五大原则(SOLID)以及hash碰撞的几种解决方法
-
final以及finalize关键字(楼主回答了 final常量、不可继承... finalize()类似于析构函数但是GC时只会调用一次...)
-
在讲到finalize的时候楼主作死提到了最近看了Thinking in Java(这里建议大家了解深入的可以多提一些,让面试官更深入问知道的问题,不深入了解的真的可以不要提了,血的教训),面试官就顺势问了,在Thinking in Java中印象最深的是哪个章节(楼主回答了有关堆栈的内容)
-
这里面试官来了个callback,在深拷贝时,实例变量是个对象,那么对应的变量应该存在堆栈中的什么地方(就是局部变量在堆栈中的创建)
-
看到你在简历中写了Spring以及SpringBoot,在Spring中FactoryBean和BeanFactory有什么区别呢
-
简述一下Spring中的AOP、Ioc以及DI
-
你们专业在大学中上过什么课程(这里楼主回答了数据库、数据结构...)
-
数据库中的ACID分别代表什么(常见,Atomicity原子性、Consistency一致性、Isolation隔离性、Durability持久性)
-
既然学过数据结构,简述一下B树和B+树的区别吧
-
计算机网络中,TCP如何保证可靠
-
TCP为什么要使用三次握手而不是两次握手(这题划重点,楼主被问到好多次)
-
TCP的序号机制有什么用处
-
场景题,两个大文件,如何得到两个文件中内容相同的行(两个文件都不能完全被内存读入)(这题答得不好,最后在面试官帮助下也没想到最优的解法,不过比一开始优化了很多),随后字节开会,面试官留下一道编程题
-
编程题,重排链表,leecode中等题,要求是使用原题算法 Leetcode143题原题 (这里真的发挥失常,思路非常清晰,但是没有用牛客网写过题,被报错误导了好久,不过所幸最后还是写出来了)
反问环节
最后因为面试官开会离开,少了反问环节,不过一开始部门介绍已经非常仔细了
总结
关于以上,楼主大概答出了九成,但是编程题发挥太差了,花了半个小时左右,剩下的就看命了,希望能进下一面!!!(第二天楼主还在打游戏就收到了hr的三面邀请,原定在1.22的下午,后来因为面试官22号请假,直接安排在了当天的下午5点)
三面
1.21 号下午 5 点
自我介绍...
-
学过计算机网络吧,你们学的是哪种模型(楼主回答 OSI七层、TCP四层以及课本整合的5层都有学习过)那具体讲一下OSI的七层分别是哪七层,数据链路层具体有什么功能
-
具体讲一下TCP中的time_wait(在解释具体为什么选择2MSL时没有给出满意的回复)
-
知道HTTPS的证书具体是怎么交换的吗(这个没有回答出来)
-
编程题,给定一个数字n,求出对应1-n的所有子序列(常规的回溯法或者动规)
例 in: n=3 out: [[1], [2], [3], [1, 2], [1, 3], [2, 3], [1, 2, 3]]
(这里楼主选择较为简单的回溯,5min解决,学完之后面试官也提到用动规比较麻烦)
-
学过数据库吧,MySQL默认的隔离级别是什么,为什么选择这个级别(这里楼主忘记了,回答了Read Committed!可惜)
-
了解数据库的 MVCC 吗(不了解)
-
MySQL的引擎有哪几种,它们有什么区别(常规题)
-
问问关于操作系统的吧,进程、线程和协程分别是什么以及他们之间的关系(常规题)
-
讲讲死锁吧,发生的条件以及如何避免(常规题,不过楼主好像漏掉了一个必要条件!可惜)
-
数据结构学过吧,不知道你熟悉什么语言,就是我们常见的字典,HashMap是怎么实现的(hash表顺便问了如何解决hash碰撞)
-
了解跳表这种数据结构吗(不了解)
-
来写个SQL吧
给定一个表T,表结构如下: id, name, salary, city 根据两个条件查找name 1. salary 大于等于 10000 2. 所在 city 的平均 salary 大于等于 5000
(一层嵌套SQL,最后在面试官的提醒下写出来了)
反问环节
问了关于具体需要学习的相关技术等(不过三面面试官是北京总部的,楼主base是杭州,让我具体入职后问二面面试官,二面面试官就是入职后的mentor)
总结
字节的面试官中的都是非常友好的,面试体验也特别舒服,小伙伴们主要要注意遇到不清楚的编程题一定要和面试官商量,不要一开始就上手写代码,这样真的很减分,先和面试官讨论题目不清楚的细节,然后简述自己的思路,最后再上手。
字节的技术面结束了,而且三面感觉也挺不错的,希望可以收获offer!!!
网易(杭州研究院)
一面
1.21 号上午 10 点
TODO: 上面三篇连着写,写不动了,下次补上
#实习##面经##网易##Java工程师#