我的2022秋招

我的2022秋招
Page content

对我来说,秋招过程就是一个不断经历失败,同时也不断突破自我的过程。很庆幸,不论是出于兴趣,还是盲目跟风,我最终选择了走CS这条路,这是一个需要和计算机进行沟通,更需要和自己进行沟通的领域。也希望自己在这趟旅程中不忘初心,慢慢地前进


截至目前,总共经历31场面试,面试通过26场,失败5场。以下是目前我面过的公司的面经,由于个人项目的部分因人而异,这里只列出普适性的问题

字节跳动—国际化电商后端

一面(pass)

  • 详细解释一下mysql事务ACID特性?
  • mysql怎么实现持久化的?数据库宕机怎么进行数据恢复?
  • 什么是mysql的MVCC?MVCC怎么实现的?
  • 详细讲一下TCP4次挥手,3次握手?为什么要4次挥手?
  • 客户端断开连接的过程
  • 用过哪些shell命令?题目:如何统计访问日志的“99”线,写命令实现
  • 进程和线程的区别?如果一个进程中的线程过多会出现什么情况
  • 进程和线程的上下文切换对比
  • 算法题:给定一个链表,奇数位升序排列,偶数位降序排列,要求输出一个全局升序排列的链表

二面(fail)

  • HTTP和HTTPS的区别,什么是对称加密和非对称加密
  • 对称加密和非对称加密有什么优缺点,分别应用在什么场景
  • mysql有哪些锁,意向锁有什么作用
  • mysql事务有哪些隔离级别,分别解决了什么现象
  • redis缓存机制,什么是缓存雪崩、缓存穿透、缓存击穿,分别怎么解决
  • 算法题:输出最小字典序的最长递增子序列

面试挂掉后,被另一个部门面试官捞起又安排了一轮新面试,同样挂掉了(我不配去字节TAT)

交叉一面(fail)

  • TCP断开连接为什么有TIME_WAIT状态
  • mysql的MVCC怎么实现
  • redis有哪些数据结构,zset底层怎么实现
  • 算法题:
    • 给定一个数组,前半部分严格升序,后半部分严格降序,要求用O(1)空间复杂度求出数组中重复的元素(双指针)

阿里云智能信息事业部–后端开发

一面(pass)

  • 用户从url输入到后端返回经历哪些过程(主要考察后端架构的理解)?
  • 分发逻辑怎么实现的?看没看过源码?能怎么改进?主要难题是什么?
  • mysql主从架构
  • mysql有哪些引擎,innodb的新特性
  • mysql的事务特性,mysql的redolog的作用
  • mysql锁机制,讲的越详细越好
  • 什么是回表?
  • 用过哪些shell命令?sed和awk用过吗?
  • 听说过nosql吗?有没有用过离线分析的数据库?
  • 算法题
    • 反转链表
    • 求数据流中第K大的元素
    • 给定范围0<a<10^18的整数,求不包含0-9某个数字且小于a的数字个数

二面(pass)

  • 你理解的后端和算法的区别是什么
  • 自己的职业规划?
  • redis怎么保证缓存和数据库的一致性
  • mysql 慢查询怎么优化?
  • 联合索引(A,B,C)索引的顺序影响mysql的性能吗
  • 1亿的数据量放在线上mysql库中可能出现的问题是什么?怎么解决?(分库分表)

hr面()

这个hr并没有很多问题要问我

  • 留学期间印象最深刻的两件事、国内外授课模式有什么不同

滴滴广告业务部go后端开发

一面(pass)

  • 100个进程同时执行update t set k = k+1 where id = 1 会发生什么情况(回答了写锁等待,然后被追问依据是什么,回答了update当前读机制如果没有锁等待会导致数据不一致的问题)
  • 如果100个请求同时更新呢,在redis中会出现什么情况
  • 查看cpu占用信息的命令,查看内存占用信息的命令
  • 算法题
    • 求两个字符串数字的差
    • 给定一个数组,O(n)时间O(1)空间地将数组中的0元素移动到末尾,并保证数组中元素的相对顺序
    • 给定一组硬币面值可重复使用,求出凑齐k元的硬币最小数量
    • 两数之和

二面(pass)

  • 自我介绍+毕业时间+印象最深的项目+项目细节盘问
  • 算法题:螺旋打印矩阵中的元素

三面(pass)

  • 自我介绍+项目介绍(这一面盘把所有实习经历都盘问了一遍,要求讲自己一天的工作流程,举一个开发例子,尽可能细节)

HR面(pass)

  • 最有成就感的事情
  • 实习经历最大的收获
  • 实习期间遇到的困难怎么解决

知乎golang后端开发

一面(pass)

  • 少量的key值要在后端进行过滤,如何设计才能保证后端数据库不被不存在的key攻击
  • 少量的key值要进行redis存储,用什么数据结构
  • 大量的key在后端存储,如何设计才能不被攻?(bitmap,布隆过滤器)
  • mysql索引机制,为什么使用B+树进行存储?为什么不用二叉树,为什么不用B树
  • 为什么使用自增id作为主键
  • mysql事务的隔离级别有哪些?分别解决了什么问题
  • python 的super机制,装饰器
  • 对HTTP无状态怎么理解的,Cookie机制的流程,服务器怎么存储cookie的
  • 负载均衡的场景,怎么应对一台机器上保存了cookie而请求被转发到其他的机器上(请求固定转发,负载均衡端保存全局cookie)
  • 大量用户id和电话号码,一个频繁请求的场景,如何设计索引(电话号+uid组合索引,覆盖索引机制)
  • 操作系统,IO多路复用,对select/epoll的理解
  • 算法题:打印二叉树每层最小的节点值

百度–go后端开发

一面(fail)

  • url输入到展现过程?
  • mysql题目:给定一个表统计pv、uv
  • shell题目:统计文件中出现次数最多的10个ip
  • 进程和线程的区别,堆栈的区别
  • 算法题:快速排序

百度–搜索平台研发部go后端开发

一面(pass)–技术中台方向

  • mysql最左原则是什么、事务介绍,ACID四个特性分别怎么实现(越详细越好)
  • 介绍一下mysql的锁机制
  • 给定一个学生选课表,统计每个学生的选课门数,写一个sql语句
  • TCP怎么保持稳定性,TCP拥塞控制算法介绍(越详细越好),close_wait数量太多怎么解决
  • 怎么通过命令查询进程监听的端口号
  • select/epoll模型的理解
  • 哈希表如何处理冲突,红黑树了解到什么程度
  • 介绍一下常用排序算法以及应用场景
  • TopK问题怎么解决
  • 算法题:leetcode电话号码的字母组合

二面(pass) –技术中台方向

  • mysql的事务、索引、锁的详细介绍
  • 一张学生选课表,包含学生id、所选课程id、课程分数,要求仅用一个sql语句统计出个各个课程排名前3的学生id(窗口函数的考察)
  • 算法题
    • 二叉树的层序遍历
    • 将输入数组分割成两部分,使得两个子数组的和具有最小差,输出这个最小差(思路:leetcode分割等和子集)

二面通过后,得知面试的部门已经没有hc了(实惨),简历被其他的部门捞了起来,于是就有了下面的“二轮面试”

二轮一面(pass)–垂搜方向

  • 实习经历深入考察,这里问了我几个之前实习部门的后端架构问题,确实比较深入,没有回答上来
  • 讲一下php和python有什么区别
  • mysql索引用什么数据结构实现,还能不能用其他的数据结构
  • mysql中有没有用到哈希表作为索引(自适应哈希索引),什么场景下会用到
  • 什么是mysql的事务,隔离级别有哪些,分别解决了什么问题
  • 使用主键索引和非主键索引在查询数据的过程的区别
  • sql注入问题
  • redis有哪些数据结构
  • redis怎么实现分布式锁
  • 表单提交的去重和幂等问题,如何去实现幂等
  • cookie和session的区别,什么时候会用到cookie和session,session一般存放在哪里
  • 说一下你熟悉的shell命令(考察了netstat、ps、grep)
  • 讲一下用git做版本管理一般都有哪些步骤
  • 算法题:二分查找模版题
  • 面试问答环节:
    • 这里面试官跟我介绍了大量的部门业务,目前的工作以及未来的工作;和我介绍了要怎么去学习后端,学习过程中的侧重点等等,受益匪浅

二轮二面(fail)–垂搜方向

面试极其简单,但估计部门不招人,就不列出问题了

bilibili–流媒体算法工程师

一面(pass)

  • 对机器学习算法了解到什么程度,过往的算法项目做到什么程度
  • 算法题
    • 最长上升子序列(贪心+二分查找)
    • 用栈实现队列
  • TCP和UDP的区别,TCP可靠性是怎么实现的,为什么UDP不可靠
  • 如果想要UDP也可靠的话应该怎么实现
  • 进程和线程的区别、进程之间的通信方式
  • 常用的数据结构了解哪些
  • 智力题
    • 128个队伍进行淘汰赛,总共需要两两进行多少场比赛
    • 3L和5L的桶,装出4L的水如何操作

二面(fail)

  • 这一面只有20分钟,估计看我技术栈不是算法方向的就打算拒绝我了,面试的问题是一些软问题,比如“平时如何学习一门新技术”、“学习过程中遇到的最印象深刻的事情”;
  • 面试结束问答:
    • 面试官推荐在学习新技术的时候多去看一些first-hand的内容,比如源代码或者是开发者写的一些东西,遇到不懂的知识先仔细思考,实在不明白的话请教别人

好未来—服务端go开发工程师

一面(pass)

  • mysql分库分表了解吗,当时的公司的mysql库的架构是什么
  • mysql事务的ACID四个特性怎么实现的,mysql的redolog是什么,有什么作用
  • mysql的MVCC是怎么实现的
  • mysql有哪些隔离级别,脏读不可重复读幻读分别是怎么解决的
  • mysql的锁有哪些,什么是next-key lock,怎么加读写锁(语法层面)
  • mysql聚簇索引和非聚簇索引,为什么mysql用B+树,为什么不用哈希表和二叉树
  • mysql在非聚簇索引上查询数据的过程(回表,多一次磁盘访问操作)
  • 缓存穿透、缓存雪崩怎么解决(这里缓存穿透提出了永久驻留数据,面试官给出了代码层面的解决方案)
  • redis是单线程、单进程、单进程多线程还是多进程多线程?为什么是单线程设计?还有没有其他的线程/进程了?
  • redis rdb日志创建过程,什么是写时复制,为什么要fork子进程,为什么不fork子线程
  • 创建rdb日志的时候如果fork子进程,会存在数据冲突吗(操作系统层面解决了这个问题)
  • 小内存大数据文件怎么排序,小内存大数据文件TopK问题(最小堆)
  • 算法题:实现堆的插入操作

二面(pass)

3道系统设计题

  • 给定一个数据表,字段分别是uid,签到状态(可选项为“签入”,“签出”),签到时间
    场景:该数据表描述的是一个体育馆内一天内市民签入签出的信息
    需求:统计特定的一个时间点内,体育馆内有多少人

    • 问题1: 你会怎么实现该需求?
      • 实现1:使用sql语句计算要统计的时间点之前签入的人数p1,签出的人数p2,然后计算p1-p2的值(缺点:每次统计都需要扫描一遍数据库表,时间复杂度较大)
      • 实现2:新建一个字段为,当前时间点体育馆内的总人数;每次用户签入的时候将该字段+1,签出的时候将该字段-1(缺点,新建立的字段只能解决当前的需求,可扩展性不强)
      • 实现3:将实现2稍微进行一下修改,新建2个字段,分别为当前时间点签入了多少人,签出了多少人,这样实现该需求的时候只需要计算两个字段的差值即可,同时这样的设计也能实现需求“统计特定时间点内体育馆签入了多少人,签出了多少人”
    • 问题2:针对上述的设计3,可能存在的问题是什么?
      • 如果此时只有一张数据表,如果此时是高并发的场景,有大量请求同时在这张数据表中进行签入签出字段的修改,此时会造成大量写锁等待现象
        解决方案:使用一个消息队列中间件,在消息队列放在mysql数据库的前端,这样每个写请求可以把数据放在消息队列中,然后修改的时候进行队列的读操作即可(问题:如果在高并发的场景下也有需求统计当前体育馆内剩余多少人,会不会存在数据错误的问题,因为消息队列中缓存了大量的未消费的数据)
  • 给定1G的内存,10G的大文件,文件中保存着大量的用户名,可能存在重复,怎样输出一个去重的文件?

    • 实现1:将10G的文件分割成20个500M的小文件,然后在1G的内存中500M存放哈希表,500M存放数据文件,然后进行去重操作,输出一个必定小于500M的文件;上述操作进行多轮,最终剩下的一个小于1G的数据文件输出即可(问题:该方案只适用于存在大量重复的用户名的场景)
    • 问题2: 如果用户名只有少量重复,该如何进行去重?
  • 某平台有100w个用户在进行实时对战游戏,每个用户有对应的积分,请设计一个实时排行榜要求更快地求出用户的排名

腾讯技术中台–大数据平台

一面 40min(pass)

  • mysql事务、索引、锁介绍
  • 3道mysql语句书写题(分别考察子查询、join连接查询、窗口函数应用)

二面 80min(pass)

  • shell命令:递归查找符合X条件的所有文本文件中包含指定字符的文件名
  • 正则表达式:编写一段正则表达式代码提取给定url中所有的参数
  • sql题:
    • 给定学生选课表、学生成绩表,编写sql语句统计所有大于60分的学生人数
    • 统计在校生的及格率
    • 统计每个班级的及格率(须用1条sql语句)
  • 算法题:分别用递归和迭代两种方式判断二叉树是否为二叉查找树

三面 30min(pass)

  • 项目问题+过往经历
  • 算法题:不用for循环计算n! + (n-1)! + ... + 1!

hr面 30min

  • 为什么去国外读书+实习最大的收获+工作地点意向等软问题

爱奇艺–python+golang开发(云服务方向)

一面 50min (pass)

  • 基本数据结构:数组、链表、哈希表的底层实现;红黑树的特点;mysql索引的底层实现B+树
  • python多线程、python垃圾回收算法(引用计数、分代回收、标记清除)
  • TCP连接有哪些状态,分别是什么意思
  • 算法题: LFU缓存设计

二面 60min (pass)

  • 用1行python代码实现将 list_input [' a', ' b', ' ', ' c '] 变为 'a b c'?
  • 二分查找模版题+shell命令考察+sql窗口函数考察+git基本操作考察
  • 开放问题:
    • 5 台相同配置的服务器,都为 http 服务,其中 1 台机器 http 服务响应时间是其他的 2-3 倍,怎么查找问题
    • 有 5 亿条应用 event 记录,用什么办法可以让 90% 的查询能在 100ms 内返回
    • 有 1 千台机器,需要管理起来,并交付给业务使用,需要怎么处理

三面 30min (pass)

  • 实习相关问题
  • 算法题:基本计算器3(加减乘除带括号)

美团–后端开发(金融支付部门)

一面 60min(pass)

  • mysql事务、索引、锁、日志相关问题
  • redis底层数据结构有哪些
  • 算法题:判断链表是否有环并输出环节点

二面 60min (pass)

  • 项目相关问题
  • 进程同步和进程互斥介绍+解决方案+进程调度算法有哪些+磁盘IO算法
  • HTTP1.1和2.0的主要区别
  • mysql日志有哪些,分别解决什么问题+事务隔离级别+主从同步的实现机制
  • 智力题:
    • 有10L水+3L和7L的桶,将10L水分成2个5L水
    • 64匹马,8个赛道,求最快的4匹马,最少的赛跑次数是多少

hr面 20min ()