跳至主要內容

秋招Tips

Weiser大约 10 分钟

秋招Tips

此篇秋招tip转载于北邮人论坛。

0. 卷首语

秋招算是个人成长的一大转折,跌跌撞撞,终于在近期正式结束,由于受惠于诸多前辈的经验,打算写一下没啥人看的经验。攒攒人品,求个大包。

本人应届硕士,15级北邮本,计院;大四某无人驾驶公司算法实习 + 暑期阿里云弹性计算实习(偏底层)

收获的意向书:阿里云tan性计算,腾讯guang子,百度推广搜某架构,字节dou音电商,美团到家,快手shang业化,拼多多,虾皮,京东,网易互娱;其他公司offer够了就没面了,如微软,hulu...

码字不易,请别外传,请别乱传

1. 三维

和保研差不多,秋招最重要的也是你的三维,好学校科班出身,基础知识牢固,丰富的大厂实习经验,SSSSP赢家就是你

  1. 学历/专业: 211+, 计科/软工/网工/通信...
  2. 基本知识:语言基础(C++, Go, Java),算法,TCP/IP, Os,Redis,消息队列, 分布式(CAP,BASE,Xcc, Paxos,Raft...)
  3. 实习/项目:大厂相关实习,知名开源项目...
    1. 个人觉得实习更重要,学历没法补,基本知识可以突击
    2. 找一个放实习的老板;个人最大的吃亏在于只有2段比较偏的实习,一个算法,一个太底层
    3. 相关实习,某些实习面试官可能不太care or 体现不出能力

2. 复习&相关题目

本人由于算法转开发,大多复习的是后台/服务器开发相关的知识;

大部分公司会在八股的基础上深入一下,但不会深入太多,很多我觉得难的都不会问....

建议不要只刷面经,系统的看一下/复习一下会更好

以下复习按照我理解的优先级进行排序;

  1. TCP / IP:复习使用的书籍《TCP/IP详解》,各种blog

    1. TCP,IP,UDP基本头部
    2. TCP为啥三次握手/四次挥手;对应的状态迁移
    3. TCP的各种状态位,什么时候有用
    4. TCP的3种定时器,TCP的长肥管道问题
    5. 半连接,全连接
    6. Time wait; 为啥Time wait;大量短连接怎么处理
    7. TCP vs UDP
    8. HTTP协议基本,以及1.0/1.1/2.0/3.0对比
    9. HTTPS,和Http对比;握手;数字证书;对称加密非对称加密
    10. DNS,递归/迭代查询;什么时候UDP,什么时候TCP
    11. ARP,arp广播,arp代理
    12. ICMP (比较偏),ping,traceroute
    13. socket编程客户端/服务端的几个函数,以及对应参数
    14. IO多路复用select,poll,epoll区别/优劣,epoll的两种模式
      1. select为啥有个1024的限制,32*i32
      2. epoll线程安全
      3. reactor vs proactor
  2. OS: 复习使用的书籍《现代操作系统》

    1. 虚拟内存(必问):MMU/TLB,多级页表,内存分配(slab,伙伴)
    2. 进程&线程基本概念,PCB包含什么,进程内存模型,TCB
    3. 进程间通信
      1. 基本概念,原理
      2. 通信效率,是否设计系统调用
    4. 死锁,条件,检测/恢复/预防
    5. 同步,原子操作,CAS&FAA,互斥锁,条件变量,RCU
    6. 底层IO模型,阻塞,非阻塞,信号,多路复用,异步
    7. 多线程vs多进程;同一进程线程切换,不同进程线程切换;
    8. 协程vs线程
    9. inode,软连接、硬链接,文件描述符
    10. 零拷贝
  3. 数据库 复习使用的课程《mysql实战45讲》+ blog

    1. mysql架构,server层 + 引擎层;
      1. 连接器,查询缓存,分析器,优化器,执行器
      2. 两种存储引擎的对比
    2. redo log vs binlog vs undo log,这块可以问得可深了...
      1. redolog为啥crash safe, binlog为啥不是
      2. 如何恢复数据
      3. 何时刷新log/数据
      4. https://juejin.cn/post/6855129007336521741open in new window
    3. 索引
      1. B+树 vs B树
      2. 唯一索引vs普通索引
      3. 聚簇 vs 非聚簇
      4. 最左前缀匹配,给你个sql让你分析
      5. 回表/覆盖索引
      6. 索引设计
      7. explain
    4. 事务,隔离级别(默认),脏读/不可重复读/幻读
    5. MVCC,什么时候生成read view;如何判断哪些事务可见
    6. 锁(加锁才能实际解决幻读)
      1. 两阶段锁
      2. record lock,gap lock, next key lock
    7. 数据库优化,读写分离,主从,分库分表等等
    8. 范式
    9. 手写嵌套查询
      1. 如何设计索引
      2. 执行顺序
    10. 给你个sql,让你分析如何加索引,使用了什么索引
  4. 语言基础 (C++, Go)

    https://github.com/huihut/interviewopen in new window

    + C++ primer plus

    1. 几种时期多态,虚函数表(最基本, 多重继承)
    2. 智能指针 & 手写最简单的智能指针
    3. C++的内存分布/ 内存对齐
    4. static / const
    5. C++11,右值,转移语义,lambda等等
    6. ...
    7. Go语言 GMP模型
    8. 线程池,内存池 (比较偏)
  5. Redis

    1. 基本数据结构底层,大数据量和小数据量情况下不同的数据类型;
      1. sds
      2. 跳表
      3. ziplist,有啥好处
      4. hash,渐进式hash,rehash
      5. intset,提升
    2. 为啥快?基于内存,多路复用,单线程事件分配器
    3. 大key问题;慢日志
    4. 缓存穿透,击穿,雪崩;如何处理
    5. redis分布式锁,单机版&分布式版
    6. redis持久化,AOF vs RDB
    7. redis主从流程
  6. 消息队列:没复习,但经常会问

  7. 数据结构 《STL源码剖析》+ blog

    1. vector底层
      1. 扩容
      2. 迭代器失效
    2. hashmap底层
    3. 树,**二叉树,avl,红黑树,B+树,B树,LSM树
      1. avl vs 红黑树
      2. B+树 vs B树
  8. 设计模式 《大话设计模式》

    1. 手写单例 (必问)
    2. 简单工厂,工厂方法...
  9. linux 常用指令

    1. grep
    2. sed
    3. find
    4. iostat/netstat
    5. top
  10. 分布式

    1. CAP, BASE
    2. 分布式事务,两阶段,三阶段
    3. Raft基本流程,选主,日志复制,脑裂之后流程
    4. 一致性hash

3. 算法

除了字节和外企,其他公司的面试题都很简单....也不用特别担心;建议面试前看看公司最喜欢考的题(https://codetop.cc/#/homeopen in new window)

现在一般考你背题能力....

个人leetcode刷了400道 + leetcode Top 100 + leetcode Top interview + 牛客

  • 必刷:leetcode Top 100 + leetcode Top interview + 牛客常考题 + codetop
    • 比如著名的LRU...
  • 链表题
    • 翻转,每k个翻转,字节最爱...
    • 环的入口
    • 删除重复节点
    • 链表快排/归并排序
  • 动规题,动规题理解了背住常见的几个模板就行;一般最多2维dp
    • 最长公共子串
    • 最长上升子序列
    • 换零钱,变种考了很多次
    • 01背包
    • 回文子串,及其变种比如区间[i, j]符合某某条件
    • 矩阵连乘,加括号
    • 编辑距离
  • 二叉树前中后,递归/非递归遍历;一般比较简单
    • 非递归遍历
    • 前序中序重建
    • 最大路径和
    • 公共祖先
  • 排序,快排变种
    • 第K大/小
    • 两个数组第k大
  • 单调栈,接雨水
  • 位运算,子网掩码,只出现一次的数...
  • 广度搜索 + 记忆化数组,求最短路径
  • dfs,暴力解法,骗分
  • 排序算法,n2, nlogn, n
  • 排列
    • 全排列,无重复
    • 下一个排列
    • 洗牌算法

4. 项目

尽量提前实习,去有含金量的大厂,比如wxg,阿里云,抖音等等;

尽量实习方向和就业方向相同;

没项目经验的可以看看下面这个

项目常常问

  • 介绍你的项目请使用star法则
  • 项目实施的一些详细数据
  • 为什么这么设计,你在其中承担的角色
  • 如何保证/增加crash-safe的能力
  • 为什么xxx,为什么xxx,为什么xxx
  • 考虑以后的优化
  • 你的收获

5. 简历&投递

  • 建议使用 超级简历 https://www.wondercv.com/open in new window 上面的简历模板,简洁明了,别整些花里胡哨的图片模板
  • 建议参考下网上写简历的方法Star法则,背景,待解决的问题,难点,成果;
  • 简历多Review几遍,不要给自己留坑,某个点不太熟悉请别写,别抱侥幸心理...(我写在简历上的算法项目/实习都被问过...)
  • 提前调研下某个公司某个组是否核心(脉脉),是否难进;适合自己的才是最好的,别一味冲wxg,阿里妈妈之类的;也别随便选一个自己不会去的部门
  • 善用内推,熟人 >> 北邮人论坛 > 脉脉/牛客;一些网站上的内推人不负责,不会管你,而论坛里很多师兄会帮你改简历,以及tou露一些常考题

6. 面试

不要紧张,不要紧张,不要紧张,此处不留爷自有留爷处;

大部分公司面试官都是很nice的,不要被某些面试官的黑脸搞崩心态,比如某节面试官。

  1. 提前熟悉下牛客网之类的白板写题,写写常考题练练手

  2. 找一个安静,整洁的环境;好的环境会让双方都体验更好,开始我在宿舍面就体验不咋样,后来去学校的一些小房间/活动室面,状态感觉就不一样

  3. 开始面试前,让自己放松下,不要太紧张,不要再去拼命复习,没用的反而会让自己紧张

  4. 面试过程尽量保持自己的语调,确保面试官能听清楚,不会太快太急

  5. 一定要结构化的回答问题,面试官听你的回答提炼答案也很累;除了基本知识,面试官还考察表达/沟通能力

    1. 为啥有xx;相同点是: 第一点,第二点,第三点;不同点是:第一点,第二点,第三点;最后总结一下
  6. 遇到不会的题,尽量回答一些有关系的点,如果实在不会,直接说不会,不要绕来绕去

  7. 遇到会的题,在答完基础的情况下,可以加深一下,比如

    1. 面试官问你虚拟内存是啥;

      虚拟内存的是啥...; 段式,页式;单级页表,多级页表;MMU,TLB加速翻译过程;内存换入换出等等

    2. MYSQL的锁

      表锁+行锁;行锁基于索引,record/gap/next-key;意向锁

  8. 除了部分公司某些面试官,比如某节,其他公司的面试官会引导你去回答,也不会缠着你不会的;

  9. 不要在面试官面前显示的很卑微,此处不留爷自有留爷处

  10. 面试完了就不要患得患失了,准备下一场比啥都重要

7. 总结

  1. 尽量早投,尤其是提前批别错过,秋招的一大感悟就是投晚了,真hc紧缺,很多公司都会有个池子养鱼,简历投了几个星期才面试。
  2. 适当练下手,培养面试状态,别一开始就面你最想去的公司
  3. 别只等转正offer,今年很多公司招了不少实习生(比如wxg,比如*里云),转正率不高,等offer会变得很焦虑
  4. 提早复习,边实习边复习,真的会没时间复习&焦虑&复习效果不好;
  5. 尽早拿一个offer垫底,没offer+没试提前批真的焦虑;有offer之后面试也硬气起来了
  6. 找个小伙伴 or 对象;不要一个人焦虑

祝学弟学妹们,春招/秋招顺利!