2020春招实习面经(20+大企)| 掘金技术征文

2,243 阅读8分钟

背景

  • 本科双非+末流985渣硕
  • 算法:无ACM/OI经验,leetcode 500 + (周赛平均前200名)
  • 实习:无

投递

  • 腾讯wxg ( 4轮技术+ 1轮hr + 1轮技术(hc不够内部转岗到wxg另一个组) ) 挂
  • 腾讯csig ( 3轮技术 + 1轮hr ) OC
  • 腾讯ieg ( 2轮技术 ) 拒了第二轮面试(技术栈不匹配)
  • 美团到店( 3.12第一批笔试:0.45 + 1 + 0.36 + 0.9 + 0.55 2轮技术 ) 无下文
  • 携程( 笔试:1 + 1 + 0.7 ) 无下文
  • 百度(笔试:1 + 0.7 + 1 ) 拒绝面试(北京好像不允许武汉本地人入京, 枯了)
  • 亚马逊 拒绝面试(理由同上)
  • 京东 (一面过,准备拒绝, 理由同上)
  • 招商银行信用卡中心( 笔试 1 + 1 ) 笔试挂( 2道算法题Ak都挂,感觉很卡学校 (985渣硕被刷))
  • 微软( 笔试 0 + 0 + 0 ) 笔试挂( 跟蚂蚁金服的面试冲突了,没有做 )
  • 谷歌( 笔试 kickstart19年全打,最好名次前200名,邀请去了A day with google 面试 1轮技术 ) (过了,由于疫情取消今年实习)
  • 网易云音乐( 笔试 1 + 1 + 0.6 + 1 2轮技术 + hr面 ) 等待结果
  • 华为云( 1 + 0.75 + 0.7 )等待面试
  • 蘑菇街( 2轮技术 + 1轮hr )oc
  • 阿里消息中台( 提前批2轮技术 ) 挂
  • 阿里中间件( 提前批2轮技术 ) 挂
  • 蚂蚁金服中间件( 3.20第一批笔试:0.8 + 1 2轮技术 + 1轮hr ) 等待结果(评级可能不高就没交叉面)
  • 字节跳动( 笔试:1 + 1 + 0.25 + 1 一面过 ) 等待二面
  • 微众银行( 笔试:1 + 1 + 1 ) 无下文
  • 滴滴出行( 2轮技术面 ) 无下文( 实习时间不匹配,需要长时间实习 )
  • 斗鱼( 笔试: 0.8 + 2轮技术 ) 等待结果
  • shopee( 笔试 1 + 0.6 + 0.3 ) 无下文
  • 猿辅导( 内推无下文 )
  • 虎牙( 内推无下文 )
  • 奇安信( 内推无下文 )
  • 小米( 内推无下文 )
  • paypal( 简历挂 )
  • 快手( 简历挂 )

面经

腾讯ieg

(一面)
  1. Epoll ET/LT的区别( 源码级别 )
  2. TCP关键字( reuseport reuseaddress这些 )
  3. nginx了解不(回答了accept锁)
  4. redis相关( 为什么用跳跃表不用红黑树 )
  5. C++ 内存分配,虚函数( 我是Java,基本都不会,不过好像不要紧 )
  6. 进程的内存结构( 我从JVM层面回答的,但是要从linux角度,不会,但是不要紧 )
  7. C++的内存分配( 我从Netty的pooledbytebuffer的Jemalloc来回答的,答出了伙伴分配 )
  8. 可重入锁,自旋锁,悲观锁,乐观锁,cas( 从Java角度和数据库锁来回答,面试官希望我从linux来回答 )
(二面)

技术栈不匹配,拒绝面试

腾讯csig

(一面)
  1. Netty相比NIO来说的优点( 主从Reactor模型+Mpsc队列( 核心思想是异步串行无锁化 ) + 各种组件 )
  2. Netty做了哪些优化( 空轮询bug + 重写keyset )
  3. Epoll源码,LT和ET区别( 是否需要重新放回rdlist )
  4. tomcat/Jetty这些中对兴趣集中的read/write等操作与Netty的不同之处( 这个我没听懂,后来换了个说法,为什么有的网络框架需要将read/write等事件重建线程 )
  5. 线程上下文切换对Netty线程的影响( 面试官想听的是不要把耗时任务放入Netty线程来处理的原因,从线程上下文角度来回答 )
  6. 单例模式的实现方式( 枚举模式 )
  7. Netty的内存分配原理( pooledByteBuffer的源码实现 )( Jemalloc算法的Java实现:FastThreadLocal(确保线程安全) + 伙伴分配算法实现(完全二叉树) + 位图 )
  8. Netty实现RPC的方式
  9. Eureka的原理( CAP理论的AP + 保活机制 )
  10. 从redis集群扯到了raft算法
  11. spring ioc/aop/声明式事务/springboot的自动装配
(二面)
  1. TCP三次的整个流程,从UNIX网络编程的角度来回答( Bind(),listen(),accept这些,扯了一点半连接队列 )
  2. 项目中为什么要使用disruptor框架( 主要是方便构建解密时的消费者链,面试官质疑是为了用而用,确实是= = )
  3. 分布式ID生成算法( 雪花算法,实现参考的百度的uuid-generator,问什么要参考百度开源的这个,有什么优点,有做过对比吗( 没有 ) )
  4. 场景题1:微信实现的IM的算法中,为了保证消息的顺序传递,需要使用递增的分布式ID算法,在分布式的环境下,如果保证每个用户的消息携带的ID是趋势递增的(完全不会)
  5. 场景题2:简单说下百度搜索下,输入几个关键字,后面出现的推荐是如何实现的以及排序的( 我回答说不考虑推荐系统啥的,使用trie树+redis的sortedset )
(三面)

随便聊聊

(Hr面)

随便聊聊( 等后续通知 )

网易云音乐

(一面)
  1. 自我介绍+项目
  2. 线程池相关( 回答得深一点:futuretask + worker类( state为-1的作用 ) )
  3. Java线程的安全性( 从重排序+可见性+原子性来答,尽可能深入回答 )
  4. redis分布式锁相关,在项目中是如何应用的
  5. mysql,聚集和非聚集索引,%like%,maysql的事务,默认级别,gap锁的原理, 组合索引在B+树中是如何表示的( 这块没答好 )
  6. 手撕算法,求top100 ( 快速排序稍微变变 )
(二面)
  1. UNIX网络编程中,使用线程池的情况下,主线程如何将fd传给从线程(不太会)
  2. Redis的网络模型(EPOLL LT模式)+内存分配算法(Jemalloc) + LRU如何实现( 我是从Java的LinkedHashMap回答的,红黑树+双向链表 )
  3. 聊聊对网易云音乐的认识
(Hr面)

随便聊聊

美团到店(严重怀疑被kpi了,明明笔试那么好T。T)

(一面)(18分钟)
  1. 微服务架构
  2. Java的各种锁
  3. 自己实现一个RPC框架
(二面)(15分钟)
  1. 介绍下项目,没了

京东

(一面)
  1. 聊项目
  2. Java线程的安全性,各种锁,Syn和可重入锁的区别(源码级别)
  3. SpringBott的自动装配
  4. Spring的设计模式( 单例,工程,代理,观察者 )
  5. 对比jdk的动态代理和cglib动态代理区别
  6. bean的默认级别(@scope注解,默认是单实例,可以修改为多实例)
  7. 算法题
给一个时间,设计一个算法来判断是对应一周中的哪一天。

输入为三个整数:day、month 和 year,分别表示日、月、年。

返回的结果必须是这几个值中的一个 {"Sunday", "Monday", "Tuesday", "Wednesday",  "Thursday", "Friday", "Saturday"}。(2020.1.1是星期三)

字节

(一面)
  1. 聊项目
  2. redis的原理(数据结构,持久化原理(rdb+aof),主从通信原理(raft协议), 集群与哨兵模式的区别)
  3. 数据库索引(B+树索引,聚簇与非聚簇,组合索引(最左匹配))
  4. 数据库事务(隔离级别,各种读问题, innodb默认隔离级别)
  5. 算法题
排序二叉树第k大结点

斗鱼

(一面)
  1. 聊项目
  2. 聊JVM(垃圾回收,内存分配,有没有实际调优过(没有))
  3. 聊线程池(自带的常用3中线程池原理,参数+流程 + 源码)
  4. 聊数据库(隔离级别,事务性)
  5. 随便写个二叉树遍历
(二面)
  1. 聊项目
  2. 聊TCP在UNIX网络编程下的原理
  3. 愿不愿意转go + 闲聊

阿里消息中台

(一面)
  1. select/poll/epoll 理解, ET/LT源码区别
  2. tcp协议,setnoday配置, reset包
  3. JUC中的copyonwrite的理解
  4. 可重入锁源码(公平与非公平模式), 在唤醒过程做了哪些优化
  5. netty线程模型,write()和channel.write()的区别
(二面)
  1. 全程吊打,项目到了几百万,甚至上亿的级别如何优化,然后凉凉

其他

其他的还有的面经,其实跟上面知识点差不多,加上自己之前没有记录,忘了很多,大家将就看看

体会

  1. 一定要早投,不然后面可够你等的
  2. 基础扎实是不够的,还要有项目支撑(在项目的基础上问基础),我一般能过一面,二面就拉闸,因为没有实习经历
  3. 建议面一轮总结后就忘一轮(别在意结果),因为等得是真的难受,各位心态要好
  4. 尽量海投
  5. 多做项目,没有就上github上面找

项目建议

我自己的话没有实习经历,基本都是自学,我自己的话对Netty框架比较感兴趣,这里以Netty为基础给大家几个项目方向参考

  • 基于Netty实现RPC框架,在此基础上实现raft算法,然后继续在此基础上实现一个简单的kv存储。
  • 基于how tomcat works这本书,自己使用NIO和Netty分别实现一个简易的Http服务器
  • 使用EPOLL/POLL/SELECT 三种网络编程模式,实现一个c语言版的简易Netty,并在此基础上实现Http协议的解析,并使用webbench进行压力测试
  • 自己实现一个简易的spring 框架 支持IOC/AOP,网上资料很多,如果不满足,可以阅读blade(github.com/lets-blade/…)这个开源项目的源码