自我介绍
大家好 我是小苏~
本人三年开发,985渣硕一枚,211本科,专业都是软件工程,一直投的是Java后台开发,只投过一次网易的测试,技术不是太牛,但是比较努力。
前言
不过说起 2021 的上半年,真是一把辛酸泪呀,我经历的最大的一件事就是离职,离开了我待了整整4年的一家公司,而且我还是 “裸辞” ,没错,你没有看错,就是“裸辞”,身边也有朋友问我关于离职的建议, 我都是拼命劝大家不要“裸辞”,压力大风险高巴拉巴拉一大堆,不过正所谓劝人者难自劝,当一点点小的事情积累起来之后就成了压死骆驼的最后一根稻草。
哈哈 ~不过小苏今天想要和大家分享的不是关于离职的心得,而是想和大家分享下最近面试的一些经历和后续的工作计划,在这次的招聘中有幸拿到几个公司的研发岗offer,包括百度,阿里,腾讯,今日头条,网易,华为等。希望对大家能有帮助吧!
1、面试相关
一天安排 6+公司面试不是吹的
其中在 22 号当天安排了 6 场面试 基本一整天都是神经绷紧的状态 体验了什么叫做在家面试比上班还累的感觉
2 面试分享
阿里面经
阿里中间件研发面经(研发工程师(Java))
一面:
1 自我介绍
2 项目中做了什么,难点呢。
3 Java的线程池说一下,各个参数的作用,如何进行的。
4 Redis讲一下
5 分布式系统的全局id如何实现。用zookeeper如何实现的呢,机器号+时间戳即可。
6 分布式锁的方案,redis和zookeeper那个好,如果是集群部署,高并发情况下哪个性能更好。
7 kafka了解么,了解哪些消息队列。
8 想做业务还是研究。
9 然后出了一道题,linux的访问权限是rwx格式的。使用一个类支持访问权限的增删改查,并且注意使用的数据格式以及方法效率,规范。给了一个多小时写题。
耗时将近30分钟。
二面:
1 介绍你做的项目和其中的难点。
2 上次面试官问的问题,反射的作用是什么。
3 数据仓库,多线程和并发工具等。
4 私有云,docker和k8s等。
5 了解哪些中间件,dubbo,rocketmq,mycat等。
6 dubbo中的rpc如何实现。
7 自己实现rpc应该怎么做
9 dubbo的服务注册与发现。
10 听说我是非科班,于是问了些排序算法
耗时将近30分钟。
三面:
三面不是面试,而是笔试,耗时三个小时,考的是Java核心的基础。但是好像不能透题,就不说了。都挺有难度的。
大概说一下就是有几个考点,Java并发的知识点,集合类,线程池,多线程之间的通信等。
HR面:
聊人生谈理想,HR小姐姐非常温柔,交流十分愉快。30分钟。
腾讯面经
一面:
1 .有序数组排序,二分,复杂度
2.常见排序算法,说下快排过程,时间复杂度
3.有N个节点的满二叉树的高度。1+logN
- 朋友之间的点对点关系用图维护,怎么判断两人是否是朋友,并查集,时间复杂度,过程。没讲清楚
(1). 初始化元素
(2). 实现元素与元素间的联合操作
(3). 实现查找元素所在树的根节点
(4). 解决一个问题,判定两个元素是否在同一棵树上(两个元素是否相互连接)
5.单元点最短路的方法,时间复杂度
6.如何实现关键字输入提示,使用字典树,复杂度多少,有没有其他方案,答哈希,如果是中文呢,分词后建立字典树?
7.hashmap的实现讲一下吧,讲的很详细了。讲一下红黑树的结构,查询性能等。
8.Java中的垃圾回收讲一下,讲了分代,gc算法,gc root可达性分析等
9.讲一下两个项目你都做了什么把。
10.除了代码之外你还学习了什么技术,框架。
11.死锁是怎么产生的
12.线程和进程的区别
13.进程的通信方式
14.CPU的执行方式
15.代码中遇到进程阻塞,进程僵死,内存泄漏等情况怎么排查。通过ps查询状态,分析dump文件等方式排查。
16.Linux了解么,查看进程状态ps,查看cpu状态 top。查看占用端口的进程号netstat grep
17.10g文件,只有2g内存,怎么查找文件中指定的字符串出现位置。MapReduce分割文件处理。
他说可以用cat | grep 管道处理。
二面:
1.快排的时间复杂度,冒泡时间复杂度,快排是否稳定,快排的过程
2.100w个数,怎么找到前1000个最大的,堆排序,怎么构造,怎么调整,时间复杂度。
3.一个矩阵,从左上角到右下角,每个位置有一个权值。可以上下左右走,到达右下角的路径权值最小怎么走。
先说了一下dfs递归实现。面试官说要优化。
说了一下用迪杰斯特拉的思路,说可以。
4.四辆小车,每辆车加满油可以走一公里,问怎么能让一辆小车走最远。说了好几种方案,面试官引导我优化了一下,但是还是不满意,最后他说跳过。
5.hashmap的实现,hashtable,concurrenthashmap实现。
6.MySQL的索引,B+树性质。
7.Linux的cpu 100怎么排查,top jstack,日志,gui工具
8.Linux大文件怎么查某一行的内容。
9.Redis内存数据库的内存指的是共享内存么
10.Redis的持久化方式
11.秒杀系统的架构设计
三面:
1.十亿个数的集合和10w个数的集合,如何求它们的交集。集合的数字不重复。
2.十亿和数找到前100个最大的,堆排序,怎么实现,怎么调整。
3.TCP和UDP的区别,具体使用场景呢。
4.TCP四次挥手讲一下过程,最后一次ack如果客户端没收到怎么办。
5.对于socket编程,accept方法是干什么的,在三次握手中属于第几次,可以猜一下,为什么这么觉得。
6.Linux操作系统了解么,了解一点点,就没问了。
7.对于单例模式,有什么使用场景了,讲了全局id生成器,他问我分布式id生成器怎么实现,说了zk,问我zk了解原理不,讲了zab,然后就没问啦。
8.除了单例模式,知道适配器模式怎么实现么,有什么用
9.回到网络,刚才你说到直播场景,知道直播的架构怎么设计么
10.Redis和MySQL有什么区别,用于什么场景。
11.问了一下最近看什么书,什么时候开始写博客的
12.问了还有几轮面试,他说这轮我可以过,有点小惊喜
四面:
1.自我介绍
2.项目,收获
3.Linux了解哪些,基础命令和知识。问我proc文件系统了解么,答不了解。
4.TCP和UDP的核心区别在哪,讲了滑动窗口保证可靠有序传输,UDP不可靠。TCP需要连接而UDP不需要。
5.TCP的四次挥手,time wait状态有什么意义。
6.说完这个他问我有什么想问他的了。
HR面:
1.自我介绍
2.实习收获
3.之前实习公司的情况,拿到offer了吗,会如何选择呢
4.排一下公司,部门,薪资和城市等因素。
5.你的优缺点,如何改进
6.学生时代最成功的事
7.你的预期薪资
百度面经
百度智能云研发岗
一面:
1自我介绍,项目
2 static关键字有什么用,static修饰不同东西时有什么作用,内部类用static修饰和不用static修饰有何区别。
3 hashmap,hashtable,concurrenthashmap区别和场景
4 volatile关键字有什么用
5 jvm分区讲下,作用讲下,gc算法讲一下,gc是否会有停顿或者延迟。
6 讲一下OOM和内存泄漏的例子,为什么有GC还会出现内存泄漏和内存溢出呢
7 线程和进程的区别,通信方式的区别。
8 悲观锁和乐观锁,说一下Java和数据库分别怎么实现的。
9 数据库索引说一下,除了B+树索引还有什么索引。
10倒排索引说一下,如果关键字很多,怎么优化。使用前缀树和hashmap优化。
11 前缀树的结构和原理说一下。
12 浏览器发起http请求过程,越详细越好。
13 缓存和数据库的一致性怎么保证
14 网上写代码,写了一个快排
二面:
1 自我介绍
2 项目中难点,用到的技术
3 多线程,说一下线程的状态和状态转换,详细问
4 多线程的sleep方法和wait方法为什么来源不同,一个是object方法,一个是Thread的方法。
5 为什么object的wait和notify必须在同步块中使用,不在同步块使用会报错么,编译报错还是运行报错。
6 jvm讲一下gc吧,两个对象的引用循环依赖,会不会被垃圾回收,什么情况下会什么情况下不会呢
7 GC root是哪些位置呢,我说记不起来,他说你不用记,其实就是运行时的一些对象和变量,比如局部变量表,方法区的元数据比如fianl,static变量,本地方法栈执行的方法。
8 数据库了解哪个。Redis说一下为什么是单线程的,不会很慢么,有什么好处。
9 Redis的IO请求模型,是不是IO多路复用呢。
10 Spring的interceptor和filter有什么区别。我说没区别,错!
11 网络这块,说一下dns请求的过程吧,dns是否会访问缓存呢,缓存在本地和浏览器,还有dns服务器上是不是都有。
12 get和post的区别讲一下,底层的实现有区别么,都是基于TCP,那么如何限制get的url长度,在哪一层限制的。
13 数据结构熟么,讲一下树和图吧,树的层次遍历使用什么结构,相应的图的遍历呢。讲讲最小生成算法,还有迪杰斯特拉。
14 数组,找到唯一一个出现两次的数。
15 一个10000以下的数组,内存够。里面只有1,2,3。排下序。
全程50分钟
三面HR
巴拉巴拉巴拉。基本上问题都大同小异。
- 百度智能云 数据库部门
一面:
1 数据库的事务,四个性质说一下,分别有什么用,怎么实现的。
2 讲到了redo和undo日志,问我分别有什么用
3 数据库的隔离性如何保证,使用悲观锁和乐观锁有何区别。MVCC的设计目的是什么,怎么使用版本号判断数据的可见性。
4 问了一道算法,1到N的所有数字,按照字典序打印,怎么做。
5 多线程并发的同步实现,有两个方法,每个方法里有a部分代码和b部分代码,我要让两个线程分别执行两个方法,并且让他们运行完a部分代码再一起向下执行,如何实现。
6 我说了用cyclicbarrier实现,互相等待await。
然后他问我怎么用信号量实现,并且提示可以再用一个线程。
然后我说了个方案。
7 问了项目
8 如何把优化递归的代码
二面:
1 自我介绍,项目 10分钟过去
2 服务器如何负载均衡,有哪些算法,哪个比较好,一致性哈希原理,怎么避免DDOS攻击请求打到少数机器。
3 TCP连接中的三次握手和四次挥手,四次挥手的最后一个ack的作用是什么,为什么要time wait,为什么是2msl。
4 数据库的备份和恢复怎么实现的,主从复制怎么做的,什么时候会出现数据不一致,如何解决。
5 今天面试太多了,记不清了。。。
6 开源的技术看过用过么,分布式存储的了解么。
7 想做什么方向的开发。
8 Linux查看cpu占用率高的进程
9 查看占用某端口的进程和某进程监听的端口
10 如何查询日志文件中的所有ip,正则表达式
三面(8.3号更新):
数据库部门真的很严格,问题都挺难的。
1 讲一下项目
2 平时了解什么操作系统
3 Linux的内存管理算法,问了一下是不是页面置换算法,他说是。
4 Linux的文件系统了解么,讲了一下inode节点,文件和目录的原理。他问我了不了解具体的文件系统ext2,ext3,答不会。。
5 进程通信方式有哪些,问我分别怎么使用,管道有哪些类型,各有什么优缺点。
6 问我服务器硬件了解么。。一脸懵逼,问了我懂不懂Raid,瞎扯了几句就说不懂了。
7 shell了解么,没怎么写过。
8 听说你会Java,说一下JVM内存模型把,有哪些区,分别干什么的
9 说一下gc算法,分代回收说下。
10 设计模式了解么,说了7种,问我分别怎么用,实际应用过吗,稍微扯了一下。
11 MySQL的引擎讲一下,有什么区别,使用场景呢。
12 查询最新的10条数据,想了好一会,order by id desc limit 10
13 MySQL的union all和union有什么区别,我瞎掰了一下,应该不对。
14 MySQL有哪几种join方式,底层原理是什么,答不会,只知道表现形式。
15 Redis了解哪些啊,数据结构和基本原理把。问我Redis怎么做集群
Redis的持久化怎么做,aof和rdb,有什么区别,有什么优缺点。
16 Redis使用哨兵部署会有什么问题,我说需要扩容的话还是得集群部署。
17 分布式系统了解么,说一下Hadoop了解啥。
18 MapReduce的combiner干啥的,我说是合并结果的,问我啥时候会用到,答不知道。
19 Hadoop分发任务时,有个job失败了,hadoop会怎么处理,我答不知道,猜是会继续执行。。
20 hadoop分发任务,如果有一个节点特别慢拉慢了整体速度怎么办。我猜测是通过yarn分配相同的资源给每个任务,可以避免这种情况,他好像不太满意。
21 hadoop答得很烂。问了我两个10g文件比较,2g内存,重复率很高,筛选出不同的内容。我说拆成十份hash,每份两两比较hash的结果集,貌似他说OK。
22 排序算法了解哪些,巴拉巴拉。
23 用队列计算一个树的高度,我说用层次遍历记录节点高度。
24 一个黑名单集合,数据量很大,快速查询一个值是否在集合里,怎么设计,我说布隆过滤器。
25 还是上一题,说这个黑名单可能需要动态地增删改,如何设计才能避免访问响应太慢。我没思路,瞎扯了一下加硬件,用内存存,都被驳回了。然后他说算了。
26 上一题的黑名单做成分布式,怎么做。说了分片的方案,根据地址的hash值确定分片所在节点。
27 分布式数据库了解么,我不太明白他问的是啥,说不了解,感觉应该是问数据库的分布式方案。
28 有什么想问的,据他所说还有2-3轮面试,惊了。
全程50分钟,可以说是迄今为止难度最大的一个?
3 关于面试的建议
1.一定要多面
- 我见过很多同学拿到了一个满意的 offer 就不面了 其实我想说 不管你一开始拿了多么满意的 offer 还是建议尽可能多面一些公司的 因为面试不仅仅为了拿 offer 还是一种很好的技术检验和自我学习的方法 不要担心面试过不了被打击 小苏去年面阿里两次都败在一面 面字节也面了好几次 所以面试失败并不可怕 可怕的是不敢踏出自己的第一步 不去争取怎么知道自己就一定不行呢
2.合理安排面试时间和顺序
- 这里其实就是说 咱们可以先拿一些不那么想去的公司练练手 把自己最想去的公司放在后面去面试 因为你会发现 前面不少的坑你都遇到了 后面会越来越顺 每场面试的时间间隔久一点 不然后续可能会出现不能准时赴约的情况
3.准备好了再出发
- 很多的大厂 其实对于面试失败是有一个简历锁定期的 一般都是半年左右 如果面评好 还能被其他部门捞起来继续面 但是如果面评不是很好的话 只能等半年左右再去尝试了 所以在这里建议大家 想要面试的同学一定要好好准备 不要盲目去面试 不然可能会让自己后续错过了一些机会
在文章的结尾处给大家准备了一些资料:java学习路线+学习资源等,皆可100%免费发送给你!si星回复:java学习路线即可