面经+知识点+总结(2019.11)
写在前面
大家好,这是一篇超长面经+总结,是对自己上一阶段的梳理,也希望给以后准备找工作/正在找工作的同学们多多少少一点帮助。
基本介绍:普通985本+海外渣硕,大二转到CS专业,大三项目交流3+2,19年10月留学毕业,有工程项目,无实习无额外加分项,主Java研发岗,非battmd级别选手,加一起拿了4个offer,最后准备去星环了。
一,面经集合(按公司划分)
最早是去年的12月开始,中间有几个月在研究室抗压没有面,考虑到读者的阅读喜好所以按公司划分面经,强调一点是时间线很重要,前后自己面试能力也有差距,请留意。一般都是远程视频/电话面,每场面经内问题提问顺序不定。一些过于水的面经没有包括在内(比如8月前的某为,银行)
字节跳动
字节跳动一面12.24(游戏研发 秋招补招)
程序:
1.实现优先队列
2.设计2D游戏功能 输入两个角色位置 输出射击转向角
3.环形buffer设计
提问:
1.二叉树与堆的关系
2.B+树
3.时间复杂度
4.内积点乘叉乘
5.CAS机制
6.重载 重写和多态
字节跳动二面12.28
1.内积点乘叉乘
2.堆
3. 排序 各种数据结构
4. 时间复杂度空间复杂度分析
5. 集合类中为什么不用int(为什么Java集合不能存放基本数据类型,只存放对象的引用)
6. 同步和异步
7. 多态
8. TCP表头
9. 四次挥手
字节跳动一面3.30(服务器研发 春招)
1. 链表k次反转
2. DB语句查询比平均分高的学生总数
3. 如何查询IP地址是否在国内网段
4. 线程池
5. Reentrantlock
6. synchronized
7. 组合索引
8. JVM内存结构,类加载信息存储在哪
9.数据库的隔离级别
10. cookie在http报文的那个位置
字节跳动二面3.30
1. 磁盘文件到JVM的加载过程
2. 类存在的意义
3. 如何确定session存放值比如用户id
4. 手写生产者消费者模式
5. a数组用b数组顺序排序
字节跳动7.17(研发 秋招提前批)
1. 查找树中连接两个节点最大路径
2. 进程间通信效率最高的方式
3.共享内存怎么实现
4. Mysql四种隔离级别
5.Mysql InnoDB和MyISAM区别
6. Mysql profile是做什么的
7. Redis负载均衡 热键和大键的影响
8.Redis主从机制 分片分布式
9. 缓存怎么实现
10. LRU和FIFO
11. 分页原理
12.tcp拥塞控制
13. http报文头结构
14. http报文长度边界字段
字节跳动8.18(秋招)
1. http和https
2. time-wait和close-wait
3. 最左看二叉树第一个节点
4. mysql左前原则
5. innodb索引 b+树子节点一定存表行信息吗
6. redis持久化 主进程和子进程
7. 有序集合数据结构怎么实现
8. jvm判断回收
9. minor gc和full gc
10. 类加载过程
11. java四种引用
12. 方法区
13. 项目
14. 队列集合怎么实现的,有哪些
15. 类加载过程的不足
16. blockingqueue怎么实现阻塞
17. 哪些对象可以作为gcRoot
字节跳动8.18二面
1. dns过程
2. dns递归调用和叠代调用
3. tcp可靠性含义
4. tcp可靠性应用
5. 拥塞机制
6. 长连接短链接
7. http常用首部字段
8. select函数,epoll函数
9. 静态链接库和动态链接库
10. 进程和线程
11. 编译和链接的区别
12. 最大连续和dp解法
面试总体体验很好很全面,我基本都是二面挂,每次都是面挂之后总结重新刷新知识库,然后学习很多。
阿里
阿里巴巴7.24(一二面在一天,秋招提前批)
1. 项目
2. 大数据优化内容
3. 口述程序整数反转
4. zk的作用
5.kafka的partition
6. kafka中一个broker故障,会怎么办
7. flink如何实现exactly-once语义
8. flink的实现原理
9. 其他流处理框架与flink的区别
10. spark如何处理流处理
11. storm如何处理流处理
12. lambda框架原理
13. 如何解决超卖问题
14. 如何用算法解决高并发
15. 如何大数据快速查询一条数据
16. redis存储数据,在工程中的作用
17. 怎么做evaluation验证flink效果
阿里准备的最多,面试官安排了三面,不过和三面面试官商量了下,我10月毕业,他们招11月之后的,为了怕被泡池子(因为能力并不突出)还是放弃了。
腾讯
腾讯 3.7一面(春招实习)
1. Java多态的实现
2. TreeMap和HashMap的区别
3.MySQL索引底层的实现
4. 什么是NoSQL,NoSQL的常见应用
5. Redis的数据结构
腾讯3.8二面
1. GC是怎么判断年代的
2. 浮点数怎么存储
3. 什么是TTL,什么是TraceRoute
腾讯3.20三面
1.项目,大数据框架了解
2.GC回收
3. 网络查找命令
4. Linux磁盘命令
5.网络第二层和第三层有什么区别
6.linux的常用指令
面试官说理论还可以,具体操作能力不行。。
腾讯 8.9(秋招提前批)
自己讲:
1. JVM
2. linux内核
3. zookeeper
4. kafka消息队列
5. 数据库mysql和redis
6. 分布式事务
7. 微服务框架
8. 网络攻击
9. 代码耦合性
10. 项目完成背景
11. TCP,UDP
期间提问:
1. Zab协议
2. 进程地址存储
3. 网络编程IO多路复用
4. 网络传输模型
5. IO过程
6. 新的微服务框架
王者荣耀项目组。。。我还说我不喜欢玩王者哈哈哈(一个半小时脑子晕掉了)
拼多多
拼多多3.25 一面(春招 java岗)
1.jsp到servlet过程,servlet生命周期
2.http与https区别,传输过程,如何交互
3. hashmap结构,concurrenthashmap结构
4.线程池声明与使用
5. JVM内存模型,垃圾回收
6. Tomcat运行原理
7. 手撸死锁模型
8. 流处理与批处理区别
9.storm和flink的区别
10.怎么学习的
拼多多3.28 二面
1. 手撸适配器模式
2. 手撸代码并查找边界错误
3. Spring MVC框架
4. BASE原则
5. 分布式原理CAP原则
6. Java反射
7. private属性,final类型举例
8. ReadWriteLock
9. 数据库-四种隔离级别-脏读/幻读/-索引
微信视频面,最后问了我要不要去大数据研发,我拒绝了,当时比较傻缺
晨星
晨星3.26(一面)
1. 网络:tcp udp区别
http协议介绍
2. 面向对象 抽象类和接口区别
3.单例模式实现
4. 数据库索引
5. Js怎么面向对象
6. 装饰器模式原理
7.静态类和单例模式有什么区别
8. 设计一个股票推送的设计模式
9. 容错分析题:页面加载慢原因
晨星二面(留的作业)
1:请在数据库设计两个表,分别存储股票每天的交易数据表,和上市公司的运营数据表
,画出相应的数据表和对应关系。
2. 请用TF-IDF算法计算相关度,并采用适当的机器学习训练模型来进行训练,找到更高的筛选文档准确率
3.聊人生
然后就是hr面了
BiGo
BiGo一面12.20
1. 原始项目介绍
2. Java HashMap/TreeMap
3. 多线程方法
3. JVM GC算法
4. 死锁
5. Flink
6.static关键字
7.数据库常见支持类型
8. char和varchar的区别,优缺点
9.索引的种类
10. 联合索引最左原则
11. 索引底层:B+树,散列,位图
12. java hashmap put操作
13. hashmap扩容,承载因子
14. 设计模式在自己工程中使用举例
二面
聊项目
第一个面的公司(当时还不知道bigo是什么公司。。)感觉当时bigo真的很缺人,主管还加了微信聊了很久,可是当时真的很菜,多线程一窍不通。。
海康
海康威视7.17 电话一面
1. 项目
2. zookeeper怎么实现分布式锁
3. 分布式锁作用
4. Hashmap,concurrentHashmap
5. redis分布式配置
6. redis持久化
7. redis单线程作用
8. 单例模式
9. 项目中遇到的OOM问题
10. 怎么监视JVM数据
海康9.21 现场二面
1. hbase读写过程
2. flink工程
3. 设计通过flink查找9点10分各个路口通过车辆的信息
4. 学习flink的方法和途径
5. jvm错误排查 oom排查 jvm问题:垃圾回收时间过长
6. 十个kafka消费者线程消费,如何设计在多线程场景下完成统计
7. 工程
b站
bilibili 8.6 一面
1. redis预热
2. redis存储数据
3. zookeeper原理 ZAB协议
4. zookeeper加节点
5. 分布式锁种类
6. zookeeper分布式锁,redis分布式锁
b站8.14 二面
1. 项目
2. 怎么做项目测试
3. java Threadlocal类(线程变量本地化)
4. mysql存储引擎
5. sql优化
6. 进程线程区别
7. SSM框架常用注解
7. 自定义注解
星环
星环 8.9 电话一面
1. 工程flink的checkpoint的具体过程
2. checkpoint对系统有什么影响
3. int和integer的区别,装箱与拆箱
4. 怎么调用integer的方法,具体过程
5. java内部类和静态内部类
6. 二叉树前序遍历
7. best time to buy and sell stock最多二次买卖
8. 常见设计模式
星环8.27 视频一面
1. c++static
2. java static
3. 操作系统栈和堆区别
4. 存储代码段
5. 缓存,缓存不一致性
6. tcp与udp应用场景
7. 聚簇索引与非聚簇索引
8. join的种类以及实际操作
9. 编程:二叉树按层遍历
10. 尬聊了一会儿工程
二面
1. 子数组和为0 dp算法
2. flink怎么保证exactly-once语义
3. 高并发环境怎么做测试
4. 常用的检查系统failure的方法
5. java堆怎么排查错误
6. 工程
感觉主要是临场写代码,还问了我好多测试的内容?
三面
0. c++虚函数
1. fibbonacci算法改进
2. redis怎么存储数据
3. redis存的key是什么值
4. MySQL的ORM方式
5. mybatis怎么对应实体
6. applicationcontext逻辑
7. bean的生命周期和种类
8. flink的检查点机制怎么改进?
9. flink窗口
10. flink的任务失败模型
11. 还有很多工程上的细节
狂怼项目,大佬知识量储备极高,我实为弱鸡
有道
有道8.24
1. 网络可靠传输
2. tcp报文结构
3. 网络传输模型
4. 拥塞机制
5. 流量控制
6. linux内存磁盘转化
7. linux线程状态
8. linux页表结构
9. 内核怎么处理线程(初始化,加锁)
10. 操作系统与jvm的不同
11. 类加载过程
12. 线程怎么去访问jvm里的类信息
13. pthread
面的java岗,当时想终于可以被问java相关了,结果给我来这个,问线程间通信方式的时候唯一一次轻怼面试官,接着就开始问POSIX了。
网易互娱
网易游戏8.28 一面
1. 操作系统进程分配区,内存管理
2. io多路复用
3. 操作系统层面怎么实现互斥锁
4. 数据段组成
5. 网络tcp建立与释放
6. tcp长连接 heartbeat
7. tcp半连接
8. 图的遍历算法 迪杰斯特拉算法
9. 上楼梯
10. 64匹马赛跑,8个跑道,选出最快4匹马
11. java单例模式一套
12. java多线程原子锁,cas机制,aba问题
13. 缓存置换lru实现
14. 图形学了解
15.快排实现
16. 堆排序实现,怎么建堆
17. cpu分配时间片算法
网易互娱10.15 二面
1. 项目
2. 输入整数n,输出1-n的随机数组(约瑟夫环?)
3. 链表成环,并找到入口节点,数学推导
种种原因 面试拖了好久
深信服
深信服 8.17
1. 4个项目挨个问
2. C++的new和malloc
3. C++重载
4. 进程间通信的互斥方法
5. 堆和栈的区别
6. 介绍进程和线程区别
7. linux内核
8. 介绍每种设计模式以及应用
9.单核cpu多线程
10. 指针有了解吗
11.文件软链接硬连接
二面
1. linux 怎么进shell
2. linux的swap分区
3. 网络tcp四次挥手
4. 应用层协议http post和get请求
5. jmeter集合测试
6. 大数据有哪些failure 怎么应对
7. 分布式架构的性能优化
8. mysql存储引擎
9. xss攻击,sql注入
10. 网络虚拟化技术是什么,常用平台
值得一提的是深信服hr真的知识面好广,给我讲的业务划分和概念很细hhh佩服
依图
依图 9.4
1. 项目
2. zk用途,分布式锁
3. redis分布式锁
4. 括号匹配编程
5. 树节点z-order打印
二面重感冒,写了个3-sum的变型题,状态太差了,不过很喜欢这种考察方式,上来没说几句就写代码,写完就完事hhh
招银科技
招银 9.29
1. java基本数据类型
2. java对象生命周期
3. mysql和redis区别
4. 线程生命周期
5. 多线程好处
6. 线程池作用
招银10.12
一面:
数据库mysql的隔离级别
怎么实现多线程安全
jvm的类加载机制和垃圾回收原理
b+树和红黑树区别
二叉树的遍历方法 写按层遍历二叉树
flink和spark的区别
单例模式和适配器模式
二面:
工程达到的效果,输入是什么输出是什么
有点像毕业答辩
感觉比较水。。。
二,知识点汇总
考过的面经提取的基础知识点,便于查缺补漏。
算法:双指针,排序,贪心思想,二分查找,分治,回溯法,动态规划,高级算法
数据结构:数组,链表,树,栈和队列,图,堆,散列表
JavaSE:static,装箱拆箱,多态,设计模式(单例模式,适配器模式,工厂模式,装饰器模式,迭代模式,至少会3个),集合(HashMap,LinkedListQueue, ArrayList, PriorityQueue, JUC包里的集合),NIO
多线程:CAS机制,volatile,synchronized,JUC包(CountDownLatch, Reentrantlock, FutureTask,ReadWriteLock)
JVM: 垃圾回收算法,垃圾回收器,类加载,内存模型,OOM处理,工程优化
JavaEE:SpringBoot,SpringMVC,AOP,IOC,MyBatis,Hibernate,微服务框架
分布式理论:CAP,BASE,2PC和3PC,Paxos,ZAB协议
操作系统:linux,进程与线程,IPC方式,PIV,shell,页表结构,同步异步,epoll函数
数据库:MySQL,ACID,索引,InnoDB,MyISAM,MVCC,NoSQL,Redis
网络:网络架构,tcp可靠性,窗口,UDP,HTTP,DNS,IP,ARP,Ping,TraceRoute
其他还有一些加分知识点,工程相关大数据/服务器框架组件(kafka,zk,Hbase,hdfs,flink,spark,storm,nginx,yarn等),微服务框架的几个,网络相关的一些概念(sdn,网络攻击类型,nagle)。每个词条都有自己完整的知识体系。
三,学习工具推荐
1. 写博客是很好的习惯,各大博客网站多看多想
2. 每个知识点掰开揉碎要讲的东西很多,不能浅尝辄止。
3. 看书很重要,知识体系会有一个完整的整合过程。
基本好书可以多看几遍,比如一些经典教材,深入理解JVM,Effective Java,java并发和深入剖析tomcat,图解系列,MySQL技术内幕,从paxos到zk一致性,有些书内容有些过时不过有些部分很精彩可以参考,操作系统我没找到什么好理解的书,有想要资源的可以私信。
四,关于笔试
我总共参加了50场左右笔试,每次笔试答题过程都会存在本地ide,从刚开始的都不会到最后可以A满4题 也是自己训练了很多,以下是自己的过程总结:
先从算法导论那本书入手,熟悉基本算法和基础集合的初始化,刚开始会很艰难,尤其是排序算法,我建议还是多练多会,对以后的提升很重要。
然后在leetcode上找题,刚开始我先找easy题做,做了50道左右感觉可以完整的解出一道题,开始按顺序从头做。一般我每道题会解至少3遍(因为刚开始不太会,先早上按照答案抄一遍,然后凭借印象自己A一下,晚上的时候再A一下,三天之后再A),每天做3道题左右,这种情况持续了一个半月吧,当时效果其实不太明显,不过后期还是有收获的。
leetcode上刷了200+之后转战牛客,因为企业面试现在用牛客比较多,而且我比较喜好牛客什么都没有写的ide,比较舒服。牛客上开始刷剑指offer,其实第一阶段我就偶尔有刷,不过这一次是有底气的刷,刷完之后觉得剑指offer应对笔试面试还是神器,所以以后每次要面试写代码的时候我都有看这个。
后来就懒了,每天在牛客的题库找两三道题做,直到把经验值刷到10为止。
以上过程仅供参考,请理智食用
最后关于笔试作弊,请不要拿社会什么的做借口,作弊可耻是基本常识,并不会因为形势或人数的因素而改变,扎实的代码能力肯定有用的,现在多吃点苦是值得的。
五,关于面试
有技术只是入场券,拿offer还是要一定的运气。当然,很多大牛之所以为大牛是因为平时积累的就足够多,会议论文,acm竞赛,大厂实习,科研创新成绩等等,非大牛的我们就要做好任人挑选的准备,态度端正到最后一刻,有比较烦人的面试官是常事,保持心态很重要。
面试官:“最后有什么问题要问我的吗?”
我一般是问一些公司业务,和进去之后做什么工作,然后直接问后续流程(我觉得挺好的,既能节省彼此时间也能直到自己一些技能点不足,下次面试加以改进)
六,关于选择
不要给自己太大压力,找工作和考试不一样,要顺着自己的心意在自己可达的范围内找合适的,不是追高(当然有上进心是好事)。努力很重要学会放下和生活也很重要。研发岗位有游戏研发,服务器研发,客户端研发,面向各种语言的研发,大数据研发,网络工程研发,安全研发等等,不同机构和公司业务要多少了解一点再选比较好。比如游戏岗几个经典考题(洗牌算法,搭配算法,动态规划,经典数据结构树,链表的考察),服务器研发针对各部门要求会有变化,感觉操作系统会多一些
七,一些Q&A
1. 内推有用吗
感觉内推不能太重视也不能过于轻视。有的公司内推纯粹是调用职工积极性来吸引简历,没有实质用途,比如网易?有的公司真的可以加快进程,提高成功率,所以还是提前找内推比较好。
2. 面了hr面之后就稳了吗
我面了7个场最终面(有的公司没hr面),最后到手的offer只有4个,成功率57%。
3. 留学生x月毕业算应届吗
感觉一般公司还是会介意,
我的情况 虽然没有明确拒的公司但感觉有介意这个问题的公司:b站,星环,海康
秋招明确拒了的:美团 拼多多 百度提前批,阿里
其他的没有提到过。
4. 招聘信息在哪得到的
牛客网,微信群,公众号,学长内推,各公司官网。以此为契机能交朋友也是好事。
5. 马上面试了,听说要手撕代码,我一点不会写代码怎么办
赶紧背按层遍历二叉树,我一个人就考了三四遍也是晕
6. 行测需要准备吗
行测题都差不多的,实在担心的就刷一刷题,一般行测分查不会很大,主要是性格测试,我的经验是想象一个乐观团结积极向上的人会怎么选,有些中肯题如果是银行就保守型选,如果是互联网公司就激进型选,具体也靠情商。
一些共同点:需要强调的是简历很重要,总体来说今年秋招感觉还好,不过bat选手的简历基本都有同样的特点,可以找别人去参考,实习经历(很重要),会议论文,大赛经历,有的一定要写。如果像我都没有的话就要自己找工程去做,如果你的工程比较好,拿得出手,一般面试官都会死扣项目,你要对你的项目了如执掌;如果面试官觉得你的工程一般,就会往知识点深层去挖,你要保证这一知识点你比别人要了解全面并告诉面试官你很懂。
所有提到的内容都可以私信找我,学习历程可以参看我同名的博客。
最后,最重要的是,希望可以结交更多的哥哥姐姐弟弟妹妹,共同进步,有时间可以在上海一起玩。
校招-社招-实习也可以私信我~
以上
#面经##字节跳动##星环##Java工程师##校招#