我的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数据库的前端,这样每个写请求可以把数据放在消息队列中,然后修改的时候进行队列的读操作即可(问题:如果在高并发的场景下也有需求统计当前体育馆内剩余多少人,会不会存在数据错误的问题,因为消息队列中缓存了大量的未消费的数据)
- 如果此时只有一张数据表,如果此时是高并发的场景,有大量请求同时在这张数据表中进行签入签出字段的修改,此时会造成大量写锁等待现象
- 问题1: 你会怎么实现该需求?
-
给定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匹马,最少的赛跑次数是多少