前言
首先在这里介绍一下这位大佬,他是之前就在看我博客的一个算是粉丝吧,自己是湖大毕业的,自己在学校里面就经常趁着假期去找各种实习的事,非常好学的一个人,平时有什么不懂的就来问我,我也很乐意解答,他是去年毕业的,前一段时间找我吃了个饭,告诉我自己进字节了,说实话我还是有点惊讶的,毕业一年进BATJ,这不是大佬是什么,下面附上大佬的面试感悟以及复习资料!
我这里还准备了一线大厂面试资料和我原创的超硬核PDF技术文档,以及我为大家精心准备的多套大厂面试题(不断更新中),希望大家都能找到心仪的工作!有需要的朋友点击这里备注简书,自行下载即可,希望大家面试顺利,拿下自己心仪的offer!
一面 11.10 :44 min
说下项目。
线程与协程。(协程不会)
DNS查询。
DNS投毒。(不会)
堆和栈的区别。
堆什么时候做内存回收。(错了一半)
项目有无用过多线程。(无,只看过书上的demo)
多线程的参数。
用过哪些设计模式,我说单例、工厂、观察者、代理模式。(他想让我说策略模式、装饰模式和适配器模式,但这三个我都不知道)
说一下代理模式和使用场景。
Redis字典结构、扩容。
HashMap解决Hash冲突的方法。
MySQL的二叉树、B树、B+树、Hash索引比较,二叉树的缺点。
. MySQL的可重复读是怎么实现的,MVCC怎么实现的。
MySQL如何判断死锁,回滚的时间是空闲的,能做什么优化。(优化不知道)
进程间通信方式,举例说明一个。(举例说明不会)
一个跟内存泄漏比较相近的词,问我有没有听说过,具体忘了,答没有。
代码:二选一,做的第一个,没bugfree,改动了一次,挺遗憾的。
- 字符串最长子串
输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
输入: "bbbbb" 输出: 1 解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
- 给定一组正整数,重新排列它们的顺序然后组成一个最大的整数
输入: [11,5] 输出: 511
输入: [3,30,34,5,8] 输出: 8534330
- 反问:
问部门语言
是不是ToB
跟商业变现的区别
我看有些面经都直接问自己过没过,面试官会直接说,我也问了自己过没过,他说等hr通知,我心里咯噔一下,但觉得不至于不过,也不怎么慌。
五点四十五左右面完,六点半hr回复我了,六点四十的时候二面hr就给我打电话预约下次面试了,约到了第二天两点,不得不说,字节效率拉满。
二面 11.11 54min
问了什么时候能实习,实习多久
项目里的登录状态怎么做的(一开始说的SpringSecurity的过滤链,看他表情好像说的不对,他给了点提示,我问是说cookie吗,他说对,然后开始说cookie)
-* cookie与session区别
进程间通信方式,每个详细说明(一面问过了,可能一面答得不好,被标记成答不出来了,所以又问了一边,还好一面结束后好好背了一下)
url输入后的过程,https版本,顺便说了数字签名、证书,session-key的建立
TCP三次握手、四次挥手
TIME_WAIT作用
HashMap原理和扩容(脑子一紧张,扩容给忘了,想了能有10秒钟)
HashMap是否是线程安全的,从你刚才说的头插法插入链表说一下为什么不安全,是一个什么样的过程
如果想要实现HashMap线程安全,要怎么做(我问可以直接说ConcurrentHashMap的原理吗,他说最好是根据HashMap的问题,一步步推导出来,然后我就对比了HashTable、HashMap说了一下,最后说到为了保持可见性和速度,value用volatile修饰,引出了下面的问题)
volatile性质(说错了,挺离谱了,我先说了可见性和原子性,又说了++不是原子性,自己打自己脸,面试官说那到底是不是原子性,我说部分原子性,他说不是原子性)
什么是原子性
缓存行原理(说错了,我说缓存行在内存里,他说不对,然后说CPU什么的,我说不了解)
CPU调度(不会)
volatile为什么使用缓存行
volatile对于64位缓存行的优化
网卡的工作原理(数据到网卡,从网卡读取出来的方法等,不会,只知道到了网卡怎么出去)
使用TCP的时候网络拥塞的处理(我答的流控制、滑动窗口那一套,看面试官表情应该是没错)
滑动窗口大小如何确定
TCP拥塞控制
TCP连接的时候的攻击了解吗(我说了一直发送SYN让服务器多个连接处于SYN_RCVD状态来消耗服务器内存,他问我确定是内存吗,我说是吧,不太清楚)
代码:基础题型,Bugfree。
给定一个仅包含数字0−9 的二叉树,每一条从根节点到叶子节点的路径都可以用一个数字表示。
例如根节点到叶子节点的一条路径是1→2→3,那么这条路径就用123 来代替。
找出根节点到叶子节点的所有路径表示的数字之和
反问:
问了结果,面试官一开始不想说,最后反问快结束的时候给说了,说给过了,基本符合他的预期。
问了三面侧重点在哪,是项目还是基础,面试官笑了,说不知道,说他自己看重基础,说他自己不了解三面。
问了新人怎么培养,面试官说有官方培训还有组内交流。
问了实习生多久参与线上项目,面试官说一个周,基本把实习生当正常员工用,面试官还问了有没有转正需求,我说有。
三面 11.12 25 min
问我投没投别的公司,我说就字节和滴滴,然后问我为啥没投其他厂,我说美团、阿里现在不招,腾讯感觉语言方向不太合适,不太想去。
让我对自己的基础状况做个评价,我说我对计算机网络、MySQL、Redis比较熟悉,操作系统相对薄弱一些。
问我考研专业课考了什么,我说只考了c语言和数据结构,还有部分算法,当时他听到后还挺吃惊的,又确认了一遍,觉得学的太少了,到这我就感觉不太妙了。
手撕生产者、消费者模型,10个生产者,10个消费者,队列容量为30个,没写出来,这个怪我,之前看了一遍还手写了一遍,但是当时都给忘了,能有10分钟,没写出来。然后他说“你不是看过吗”,我说有点忘记了。
讲讲同步IO、异步IO、(还有个IO我不记得名字了),从用户态与内核态的角度讲一下。(不会,都说了操作系统薄弱,还问我这种问题)
项目为什么用SpringBoot。
知道事务的传播吗。(没了解过)
对于Spring你了解什么。我说了IOC和AOP,然后他问使用AOP的好处是什么。
设计模式了解吗,说一下策略模式。这个我准备了,看的大话设计模式,举了满减、优惠例子,还说了抽象类、实现类、工厂类、客户端做什么,然后他说我说的不对,不是策略模式,我就问那我说的是什么模式,他说有点像模板方法模式,然后问策略模式的好处。
说说自己有什么优势,好像是这么个问题,就是问学习状态之类的,我说专注、效率高之类的。
问我能不能接受半年且没有转正机会的实习。听到这我挺火大,虽然三面面的有点稀碎,但我就这么差吗,半年就半年,连转正资格都没有,我又不是非吃你这口饭不可,然后我就说不太想考虑。
反问:这块我就知道自己凉了,那既然都到三面了,也不能白来,你们部门干嘛我也不感兴趣了,又进不去,就问了下面试官对于面试者的考核问题,还问了下问什么三次面试都几乎没有提及Redis,是不是部门里用的少,他说不能说,然后说就到这吧,我说好,就结束了。
结果:11.16接到电话了,说三面表现不好,面试官给的结果是待定,换个部门加面,然后约到了11.19号。
四面 40 min
面试官说咱们先做个题试试,我说可以,我一说他啪的就把题目打在了公屏上,很快啊,然后上来就是一个"二维数组查找",一个"2*N铺瓷砖",一个"TopK",我全防出去了啊,防出去以后,自然是传统面试,点到为止,我已经准备背八股文了,他突然袭击,一记"还有别的方法吗?",打过来了,我大意了啊,没有背,当时流眼泪了,我说停停,我不知道。
代码:
- 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
- 我们可以用2 * 1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2 * 1的小矩形无重叠地覆盖一个2 * n的大矩形,总共有多少种方法?写出您的代码 。
- 在100亿个无符号整数中取最大100个 topK Memory has limited. What’s time complexity of this solution?(题的原文就这样,一半中文一半英文,说思路就行,先问了有内存限制的情况,我说堆排序,他说什么堆,我说最小堆,他说时间复杂度呢,我说N * log K,他说要是没内存限制呢,我说快速选择, 他说时间复杂度呢,我说K,他说最坏的情况会到N方,还有别的方法吗,我想了一会,说如果均匀分布可以用桶排序,其他的不知道了,他没说话,就结束了。)
基础知识问题:
- HTTPS加密过程。
- MySQL为什么用B+数,不用二叉查找树、红黑树。
- 知道pagefault吗。(没听说过这个名词,我说知道一些页的内容,您可以说说这是什么我可能知道一些相关的,他说知道页中断吗,这个词我也没听说过,我就问是"缺页"吗,他也没说话,我就说不知道了,但是我面完一查,确实是跟缺页相关的,他要是说是我又能背五分钟。。。怎么就不说话呢)
反问:
问这次发的邮件是”广告研发“,之前是”广告系统“,想问区别是啥,他说没区别。又问多久参与上线代码,1-2个周。然后就完了,也没说过不过,然后HR通知说过了。
最后
我们总是喜欢瞻仰大厂的大神们,但实际上大神也不过凡人,与菜鸟程序员相比,也就多花了几分心思,如果你再不努力,差距也只会越来越大。实际上,作为程序员,丰富自己的知识储备,提升自己的知识深度和广度是很有必要的,在我看来,自己付出多少,回报就有多少。
最后提供免费的Java架构学习资料,学习技术内容包含有:Spring,Dubbo,MyBatis, RPC, 源码分析,高并发、高性能、分布式,性能优化,微服务 高级架构开发等等。有需要的朋友点击这里备注简书,自行下载即可,还有Java核心知识点+全套架构师学习资料和视频+一线大厂面试宝典+面试简历模板+阿里美团网易腾讯小米爱奇艺快手哔哩哔哩面试题+Spring源码合集+Java架构实战电子书一起免费分享给大家!