4面腾讯、字节!最终斩获两个月薪25K的offer,谈谈我的大厂面经

349 阅读7分钟

今日分享开始啦,请大家多多指教~

这是之前看到的听完整的面试经验,今天给大家分享一下,互相学习,让大家能找一份梦寐以求的工作,实现自己的梦想。

面试流程

第一天:第一面 + 第二面

等了两天:第三面 + HR面

过了一周后:等到意向书

第一面

第一面大概率是基础面,重点考察的是自己技术的广度和一些技术的掌握情况,一面也不会深究于某个特定的点,面试时间大约1个小时。

自我介绍

  • 有了解过OAuth2.0么,说说你对OAuth2.0的理解
  • 开发过程中,有了解或学习其它的开源框架么
  • 用到了RabbitMQ,那谈谈为什么引入RabbitMQ?
  • 你还知道其它的一些Linux命令么?
  • cat、tail、vi、vim命令的区别,分别说一说?
  • 如果Linux下需要打开或者查看大文件,你会怎么做?
  • 下面聊聊Http Code,你知道 3XX 状态码 对应的是什么?
  • 再谈谈你知道的其它一些状态码,4XX 和 5XX?

下面我们来做个题目吧?语言任意,选择喜欢的。

给定一个数组,例如 [1,1,2,2,2,3,3,3,3]这样的,里面的数组不一定连续并且有序,假设我输入 2,这个2表示出现次数最高的两个。

那么你需要给我返回 2,3。

换个题目吧,看看下面这个题目,找数组出现次数最多的TOP N。

给定一个数组,例如 [1,1,2,2,2,3,3,3,3]这样的,里面的数组不一定连续并且有序,假设我输入 2,这个2表示出现次数最高的两个。

那么你需要给我返回 2,3。

最开始的思路就是,通过hash存储出现的次数,然后key就是数组中出现的值。最后再对hash中的次数进行排序,最后得到top N,因为时间复杂度是O(N^2),问有没有优化思路,能否优化到O(N),想了半天没有想出来,没有充分运用以及构建好的hash表。

后面面试官给讲了一下思路。从数组长度向下遍历进行查找。

反问环节,问了问面试的表现,被告知算法能力比较薄弱,但是说这边可以让进入下一环节,大概需要等5到10分钟左右。

第二面

二面考察的是技术深度面试,面试时间大约50分钟左右

自我介绍

  • 对于Solr或者ES里面用到的一些中文分词器有了解过么?
  • 谈谈那些技术栈,你比较熟悉的是哪些,mysql 和redis?
  • 聊聊MySQL的底层索引结构,InnoDB里面的B+Tree?
  • B Tree 和 B+ Tree的区别
  • 聊聊MySQL索引的发展过程?是一来就是B+Tree的么?从 没有索引、hash、二叉排序树、AVL树、B树、B+树 聊。
  • 谈谈MySQL里面的事务,说说什么是事务?
  • MySQL里面有哪些事务级别,并且不同的事务级别会出现什么问题?
  • 谈谈可重复读和幻读的区别?
  • MySQL中如果使用like进行模糊匹配的时候,是否会使用索引?一定不会用么?(索引这块了解得太少了,二面结束后,回去恶补了一下)
  • 谈谈Redis吧,在你项目中的具体使用?
  • 如果我需要查看端口号或者进程号,你会使用什么命令?

来吧,写个题目试试

链表的两两翻转 # 给定链表: 1->2->3->4->5->6->7 # 返回结果: 2->1->4->3->6->5->7

反问环节:追问面试表现?告知 Redis这块掌握得还可以,但是MySQL这块显得不足。问后续的安排。

第三面

应该是Leader面,面试时间大概50分钟

自我介绍

  • 好奇一下,为什么没有用Github?
  • 英文水平怎么样?
  • 我们找些点来聊聊吧?先从ES和Solr开始,你们这两个都有在用么?
  • SQL的方式实现搜索,你是怎么做的呢?
  • 使用like匹配的时候,会不会查询非常慢呢?
  • 用链表的方式实现,时间复杂度是O(N),有没有什么方式能够让它是O(1)的时间复杂度呢?

image.png

OK,思路还可以,那手写一个LRU算法吧?(双向链表 + Hash?)

反问环节:问了下组织架构,以及python和go在项目中的使用。然后问了下面试的表现,答:代码写得不算好吧,LRU写成这样我觉得是不太合适的。(心碎的声音,感觉到凉凉的气息…),结束后以为面试已经结束,后面在准备关页面的时候,面试官说等一下。

HR面

花10来分钟做个简单的沟通

自我介绍

  • 为什么选择的是这个学校呢?
  • 回顾一下,上大学到现在这段时间内,让自己最有挫败感的事情是什么呢?
  • 有哪些方面需要在改进的么?
  • 对于以后参加的工作,你主要会看重哪些方面呢?
  • 同学这块,大家都有在投递字节这边的岗位么?

反问环节:关于面试结果,告知现在只是做简单的了解,面试结果大约会在一周左右出来,到时候会有邮件或者电话通知。关于面试的结果,需要综合前面的几个面试官进行综合评测,才能决定是否录取。

给大家个建议,面试官如果愿意和你聊组里业务,一定要把握机会好好聊,最好能提出让面试官眼前一亮的问题,直指业务核心。代码谁都会写,基础知识网上都能查到,但是对产品的理解和新的想法不是谁都有的

(1)第一步,面试前整理一个完整知识架构大纲

image.png

我将架构体系分为五大模块:并发编程、JVM性能调优、Spring开源框架源码解读、缓存数据库、分布式架构,微服务架构

(2)第二步,通过大纲对面试中的高频技术逐个攻克

1,并发编程(手写笔记:并发编程+并发编程_原理+并发编程_应用+并发编程_模式)

  • 并发编程共享模型篇
  • 并发编程_模式篇
  • 并发编程_应用篇
  • 并发编程_原理篇

image.png

并发编程共享模型篇

image.png

并发编程_模式篇

image.png

并发编程_应用篇

image.png

并发编程_原理篇

2,性能调优(Java性能调优实战:Java编程性能调优+JVM性能优化+Mysql调优笔记)

  • JVM性能优化

image.png

  • JVM性能监测及调优

image.png

  • Mysql调优笔记

image.png

3,Spring开源框架源码解读

image.png

4,缓存数据库

  • Redis核心笔记
  • MongoDB集群和安全

image.png

5,分布式架构

Kafka源码解析与实战

image.png

6,微服务架构

Spring Cloud Alibaba技术栈全解

image.png

Spring Cloud微服务笔记

image.png

k8s+Jenkins笔记

image.png

image.png

(3)第三步,刷面试题,面试字节跳动算法是必问的

image.png

算法刷题小册

image.png

25大Java面试专题

image.png

腾讯总体来说,面试体验还很不错的,尤其是在手撕代码题的时候,面试官会先叫你提供思路,如果你说的思路有问题的话,会帮你拨正,然后在进入coding阶段,但是怎奈何平时没怎么练习算法,leetcode做的少,面试两行泪。。

根据面试情况可以看到面试官会问到的一些重点问题,针对这些问题看看自己是否有自己的回答。基础知识还是非常有必要的,这是迈向成功的必经之路。

今日份分享已结束,请大家多多包涵和指点!