首页 > 笔经面经 > 还愿!收获字节、腾讯 offer,21后台面经

还愿!收获字节、腾讯 offer,21后台面经

头像
在所不辞 #实习面经#
编辑于 2020-05-28 22:25:11 APP内打开
赞 19 | 收藏 207 | 回复26 | 浏览10067

补充

已经拿到 offer call 了,感谢牛客!感觉运气不错,问题都比较基础,大家加油!

学习经历

说实话我是起步比较早的,入学后就打算毕业工作,大二也去了tx实习,但是搞的测开,岗位不是很满意,实习了几个月就溜了。今年年初还很迷茫,想去tx,搞了一阵子cpp,寒假就是打王者,三天打鱼两天晒网,学不进去,后来下定决心走JAVA(如果当初不浪费时间去搞不熟悉的cpp,可能更早就能拿offer,当然结局总归是好的)。1月份面了一次头条,实力被吊锤(三范式都答不出来你敢信),2月份面了一次阿里,感觉自己深度不足,开始规划复习进度,3月2号-3月15日,进步最快的两周,基本所有常见知识点都扫了一遍,面向面经复习,用思维导图捋顺复习思路,常见考点深入源码,多思考为什么;每天早上8点起来学习到晚上11点多,然后睡觉。(除去吃饭洗澡上厕所的时间)每周下来都感觉脱胎换骨,说实话专心学东西,学完真的很爽。虽然现在还是有很多不足,毕竟突击学习的东西不够稳固,但是也是告诉大家,突击也是有可能拿offer的,不要放弃,多投多面!祝大家都能拿到理想的offer~

算法学习

有不少同学私我问算法怎么准备,我个人偏向兔系刷法,第一遍思考5分钟做不出来的题目直接看答案,但是注意,最终每道题一定要自己完整的敲出答案来,不能边写边看。二刷的时候追求速度,我在三月份的时候进入二刷阶段,一天10道题左右,题目范围就是 剑指offer 和 Leetcode100。另外一个,Leetcode上有一个字节跳动的题目区,里面的题目字节确确实实很常考,建议大家熟练掌握。
对于初学者或者想快速提高的同学,我推荐左神的算法课,去年12月份我就跟同学一起过了一遍左神的初级班,从0到1的感觉真的很棒。几百块钱的课,在以前我也会觉得很贵,但大二到现在,靠自己技术也赚了几万块,用钱方面思路跟以前差别蛮大的,能有效提升自我的,校招拿个更高档次的offer,这几百块钱真的很便宜;当然了,觉得自己自制力不行的,不喜欢看视频的,那建议不买。用下面的链接购买可以减免140块,算下来差不多就是一两天工资。
https://www.nowcoder.com/courses/cover/live/350?coupon=At6W3pw

然后看视频这里也有技巧,很多人都有这种思维误区,看书的时候总爱一页一页看,一行一行读,看了前面忘了后面,看视频也是一点点看,效率其实不算高;建议讲废话的地方、你已经懂的地方,倍速播放, 拿好本子记录关键节点对应的时间戳,后续复习翻本子找对应的时间节点来看,效率怎么样,谁试谁知道。


楼主情况

  • 双非一本,大三菜鸡,JAVA后台
  • 拿到offer后会再补充学习经历和面试技巧

面试情况

  • 字节三面完,18号二三面完,23号晚收到 oc。
  • 腾讯目前三面完了,状态HR面,感觉是备胎,接了头条offer,不等了。(后续:oc的时候拒掉offer)
  • 阿里还在面试中,暂时不放出来了。(放弃流程了,懒得面了)

字节跳动

(1-13)后台开发(一面挂)

一面面试官很不错,一开始还几次听不到我这边的声音,不知道是牛客的问题还是面试官的电脑问题;不过这个面试官真的挺好的,没有特别严肃,整体感觉还可以。

  1. 自我介绍:讲了下自己的项目经历、实习经历

  2. 问了下技术栈

  3. HashMapConcurrentHashMap 的区别?(不会,当时太菜了)

  4. 线程池(当时就说了怎么用,连底层结构都答不上来,太丢人了)

  5. 数据库的锁(不会)

  6. 数据库的三范式(不会,还瞎扯了一堆)

第一范式是属性不可分;

第二范式是在第一范式的基础上,要求实体的属性完全依赖于主关键字,没有部分依赖;

第三范式是在第二范式的基础上,所有属性都和主键有直接关系,没有传递依赖。

  1. 线程和进程的区别

  2. 缓存(简单说了下浏览器缓存的作用)

算法题目1:随机链表复制(秒了)

给定一个链表,节点数据结构如下,除了包含一个next指针,还包含一个rand指针,随机指向链表的某一元素,或者为空指针,实现一个函数,深复制这个链表,要求空间复杂度O(1)

struct Node {
  int val;
  Node* next;
  Node* rand;
}

算法题目2:滑动窗口算法(卡了蛮久)

给定m个不重复的字符[a,b,c,d], 以及一个长度为n的字符串tbcacbdata, 问能否在这个字符串中找到应该长度为m的连续子串,使得这个子串刚好由上面m个字符组成,顺序无所谓,返回任意满足条件的一个子串的起始位置,未找到返回-1。比如上面的这个例子,acbd,返回3。要求优化到O(N)

这道题没接触过,有点懵,不过在面试官提醒下写出了一个简单的版本,对不在m个中的字符和重复的字符进行了优化。

大家可以看到当时的我是有多菜了,3月5号重新被捞,约了13号一面。

3-13 视频一面(一个小时左右)

  1. 常规自我介绍

  2. 期间问了项目的问题:缓存一致性问题、MySQL乐观锁;

  3. 问之前实习的一些问题,在实习的时候学到了什么。

  4. Redis 的过期策略、缓存雪崩、惰性删除

  5. MySQL索引、b+树,为什么不用哈希map来存储?

  6. 最左前缀原则

  7. (A,B,C)的联合索引,去查 B = 0 和 C = 0,还会使用索引吗?

编程题

  1. SQL,求第二大的薪水
Employee
+----+--------+  
| Id | Salary |  
+----+--------+ 
| 1  | 100    | 
| 2  | 200    |  
| 3  | 300    |  
+----+--------+  

+---------------------+  
| SecondHighestSalary |  
+---------------------+  
| 200                 |
  1. 给定一个排序链表,删除所有重复的元素只留下原链表中没有重复的元素。
输入 : 1->2->3->3->4->4->5->null
输出 : 1->2->5->null
public class ListNode {
     int val;
     ListNode next;
     ListNode(int x) {
         val = x;
         next = null;
     }
}

3-18 视频二面(一个小时左右)

面试官比较严肃。

  1. 自我介绍

  2. 怼项目(质疑我的缓存一致性操作,然后我口嗨用消息队列解决并发问题)

  3. 手写单例模式-懒汉模式

  4. JAVA的锁、乐观锁悲观锁(视频卡出翔,面试官基本听不到我说啥,然后说我们来先做题吧,我??)

  5. 编程题1:最大岛问题(我想了个分治,思路不对,直接爆炸,面试官还是不错的,给我换了道题)

  6. 编程题2:股票利润1(还要求写测试用例,要求跑通)

  7. 编程题3:股票利润2(可以买卖多次)(这两题都秒了,面试前一晚正好想刷一刷dp的题,就刷了这两题,所以说大家想到什么一定要去学!!!)

  8. TCP的四次挥手

  9. HTTPS

  10. 分代回收在整个GC中处于什么位置?

3-18 视频三面(一个小时左右)

二面完也没告诉我过了,还在整理面经,没关牛客,突然就收到面试邀请。

  1. 自我介绍、怼项目、Redis缓存

  2. LRU在操作系统怎么实现?

  3. HashMap扩容底层实现

  4. Git 底层实现;如何解决冲突?

  5. 设计题:关注系统怎么设计?

    • 可以关注、取关别人
    • 可以查看关注、粉丝列表
    • 可以查看关注、粉丝数
    • 快速判断两个人的关系
  6. 如果有大V(粉丝数很多),你的系统有没有问题?或者说如果觉得没问题,为什么没问题?(存储上,使用上)

  7. 编程题1:股票利润1

  8. 编程题2:股票利润3(可以买卖两次)(查了下,就是股票利润3,hard)

(写了半天,头秃,之前都没做过,想了几个办法都感觉不行,不断地跟面试官交流,好在最后在面试官的引导下写出来了)

给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。

注意: 你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
  1. 最近有看什么书?接下来什么打算?

腾讯

3-5 电话一面(30min左右)

感觉比较赶,就简单问了几个问题

  1. 先自我介绍一下。

  2. 讲一下websocket?和http有什么区别?

  3. 讲到了建立连接,说说TCP三次握手。

  4. 第三次握手失败会怎样?

  5. 为什么需要三次?两次可以吗?

  6. 提到了SYN洪泛攻击,讲一下

  7. 了解HTTP/2.0吗?

  8. 了解HTTPS吗?

  9. 讲一下nginx

  10. 谈到了跨域,讲一下跨域

  11. 谈到了CORS,我们一般怎么解决?

  12. nginx在项目中怎样部署负载均衡呢?

  13. 32机器,2亿个整数中找不重复数字?

  14. 快速排序的原理、时间复杂度、空间复杂度


3-18 电话二面(50min左右)

二面鸽了我快两周整场面试体验还可以,题不难,有些题目比较新颖。

  1. 一个进程中,多个线程会共享哪些资源?

A. 栈 B. 数据段 C. 寄存器 D.线程ID

  1. 多线程中以下哪些操作需要同步操作?(说白了就是哪些操作不具备原子性)

A. x=y B. x++ C.x=x+1 D. x=1

  1. 如何轻量级实现进程间通信?(答了信号量,讲了下实现)

  2. 中断了解吗?CPU在中断时会干嘛?

  3. 动态链接和静态链接的比较(给了几个选项,不太记得了,很简单的)

  4. 设计题:设计高效的数据结构来实现下面的两个方法

  5. 解释下这两个方法,ADD来加入一个事件,RUN来执行事件,有点像缓存这些事件,到点了把执行完的事件删除。

ADD(int x, func *y) // x 是等待秒数,y是函数指针,意思是这个函数x秒后会执行
RUN() // 操作系统每一秒会执行一次
操作系统提供API:获取time(从1970年至今的秒数)

一开始想到了有序链表,ADDO(N)、RUNO(1);然后让我优化,想到了最小堆,ADDO(logN),RUN因为需要调整堆,也是O(logN);再然后类比LRU,想到用这个函数的开始执行时间(当前时间+等待秒数)作为key,然后value为链表中的节点位置,用HashMap来存储,用一个链表来存储事件指针,ADDO(1),在面试官提醒下发现删除可以再用一次搜索(搜索当前时间)O(1)

  1. 问输入www.qq.com然后按下回车,浏览器作为客户端会发生什么?

浏览器的DNS缓存 -> 操作系统的DNS缓存 -> host文件 -> 本地DNS解析服务器

TCP三次握手 -> http传输数据 -> html文件、css文件渲染

  1. 第二次输入www.qq.com,和第一次有什么不同?

DNS缓存、http/1.0下长链接复用、静态文件缓存、携带cookie

  1. 四次挥手(从状态到报文控制标志位去讲具体流程)

  2. 为什么要四次、2MSL的作用

  3. 用过什么抓包软件?(wireshark、fiddle)

  4. 脑筋急转弯:1到10层电梯,每层电梯门口有1颗钻石,从1楼坐电梯到10楼,只能拿一次,怎么拿才能拿到最大的钻石?(我放弃治疗,想不出来。)

  5. 项目上线了吗?讲项目上线后遇到过什么BUG

3-19 电话三面(30min左右)

各种被打断,体验很差,只能说还是我太菜了,感觉要凉。

  1. 问实习经历

  2. TCP和UDP的区别?

  3. UDP不可靠的话,为什么可以用来发送文件?

  4. TCP怎么做流量控制?

  5. 发送窗口、接收窗口、拥塞窗口三者的关系

  6. 拥塞窗口的变化规律

  7. HTTPS的S是什么意思?

  8. HTTPS的作用是什么?

  9. 为什么要用fiddler?

  10. fiddler能看到HTTPS中的内容吗?

  11. 什么是时间换空间?有例子吗?

  12. 你觉得跟身边的同学比起来你的优点是什么?

  13. 有没有解决过复杂的问题?

  14. 什么是乐观锁?

草草收尾,没有反问阶段,就面了半小时。

后话

第一次写面经,格式方面调得不好请多担待。

超越姐姐真的很棒,多拜有奇效。

26条回帖

回帖
加载中...
话题 回帖

相关热帖

笔经面经近期热帖

近期精华帖

热门推荐