2020 阿里巴巴和字节跳动面试总结

字节跳动

截止到11-20号,字节跳动一共面了七轮(挂->捞->挂,一般来说技术在3-5面),现在还在流程中。

字节跳动最大的特点就是每一轮最后都有笔试题。很考验选手心态,很多上周的穿山甲三面就是因为笔试影响了心态导致后面连环爆炸。

字节目前大部分均为GO,因此Java问的较少,这是和阿里最大的区别

技术类问题

  • 缓存失效的一瞬间如何防止大量请求打垮应用?
    解法1:守护线程为缓存续期
    解法2:二级缓存错开过期时间
    解法3:为数据库访问做令牌,拿到令牌的才可访问数据库

  • Redis缓存淘汰策略
    对这块不太熟悉,但是粗略想来和操作系统里的页面置换算法应该异曲同工

  1. 最优页面算法。根据页面的使用频率来进行置换,但并无可行性。因为操作系统无法判断页面的使用频率。
  2. NRU。 分为R位和M位,启动时均为0。操作系统会定时将R位置零,区分近期使用的页面。0: R=W=0, 1: R=0 W=1, 2: R=1 W=0, 3 R=W=1。算法会随机从编号最小的非空页挑选一页淘汰。FIFO。最早进入的页放在队头,缺页中断时,移除队头,加入队尾。
  3. 二次机会。基于FIFO,不过在移除时,如R位为1,置零,加入队尾,继续查找。
  4. 时钟算法。二次算法的循环链表形式。
  5. LRU。淘汰近期未被使用的页面。要求硬件有一个64位计数器C,在每条指令执行后自增。每个页面也需要有能容纳该计数器值的域。
  6. NFU。软件模拟LRU。每次时钟中断时,计数器加上相应页面的R值。可以大致纪录页面的访问频率,被称为NFU(not frequently used)。
  7. 老化算法。对NFU进行小小修改即可模拟LRU,在每个时钟周期对计数器进行右移操作,推入R值。在缺页中断时,移除值最小的页面。
  8. 工作集算法。一个进程在过去n秒中访问到的所有页称为一个工作集。(前提:人们发现进程并不会访问所有的页。)时钟中断会定期清空R位。每个页在使用时会纪录当前时间,但扫描时,算法根据R值与时间差来判断是否需要置换。最坏的情况下,无可置换页面,则随机选择,一般选择“干净”的页面,即W=0。
  9. 工作集时钟。如R=1,则R=0,检查下一页。如R=0且已过时,再看W值,如W=1,为防止调度写磁盘引起的中断,则继续向后,直到找到一个干净页面。如W=0,说明页未修改,在磁盘中有有效副本,则申请页框,将新页面放入其中。最大移动N次,即一圈。会出现两种情况,至少调用一次写操作,那么就有干净页面存在,否则随机找一个干净页面置换,如无干净页面,将当前指向的页面写入磁盘。
  • 分布式锁的实现
    Redis,但CAP中REDIS并不支持C。ZK可以解决这一问题

  • 数据库索引的数据结构,优点
    B+ 树,范围遍历及低层级可以减少离散IO

  • MySQL中事务的隔离级别
    四个级别要简单说下。其中Innodb下RR是如何解决幻读的也要提一下。间隙锁及MVCC。

  • RedoLog, BinLog, UndoLog 区别及作用

  • 有无听过逃逸分析
    标量替换,锁膨胀,锁消除,栈内分配等

  • 有无通过拥塞控制,聊一下其原理
    TCP拥塞控制。BBR等

  • 间隙锁上锁细节
    确认过眼神,是极客时间的同班同学哈哈哈哈哈。

  • 乐观锁与悲观锁
    简单聊一下,扩展到CAS,然后是ABA问题,如何解决?版本号。

  • ConcurrentHashMap实现原理
    分段锁及CAS,其他同HashMap

  • ReentrantLock 源码实现

  • HashMap 源码实现

  • 调表、布隆过滤器(布谷鸟过滤器)

项目类问题

项目类问题大致分为以下几种

  • 聊一下项目架构

  • 聊一下解决过哪些问题

  • 自己在团队中的角色,团队在公司的角色,当前工作在公司中的定位等等

  • 项目细节,会根据说的东西提出一些疑问,对做的不好的地方做优化等等

  • 技术选型类问题

  1. 外包项目以客户环境优先。
  2. 功能得满足
  3. 看有无成功生产考验为其背书
  4. 社区环境,是否仍在维护,换句话说,出了问题,可有人帮你找纸擦屁股
  5. 开发语言(小公司不用考虑,大公司会考虑自维护)

设计类问题

  • 抢红包
    几个要点:
    请求抖动。请求的Set化。对请求做消息队列防止打垮服务器

  • 设计一个定时任务系统

  • 钉钉的消息已读未读,如何设计该功能对应的数据结构

  • 如何实现断点续传
    文件分块+校验码

算法类

  • Top K 问题的时间复杂度;如果内存足够,能否优化其时间复杂度
    小根堆,n(logk)。后面一问没想出来

  • 二维数组,向左递增,向右递增,最优解
    第一反应是依赖有序特性二分查,横竖交替。但不对

  • *** 2 x N的空间,使用1 x 2的矩形填充,共有多少种方式***
    标准动态规划,状态转移方程式:dp[n] = dp[n-1] + dp[n-2]。
    就是这题还有上面那题把我心态弄慌的QAQ,差点过了,太可惜了

  • 求数组中最大山脉数组的长度

  • 有向图中,求起点到任意一点的最短路径长度
    DFS或者BFS,然后DP优化一下

阿里巴巴

截止到11-20号,阿里一共面了六轮,其中支付宝给的评级是P5,但社招并无该级别的HC(简单来说就是挂了QAQ),而且支付宝的面试没有问技术,全程问项目。中间被菜鸟鸽了一波,企业事业部虐了一波,目前在走淘宝特价版的流程。

想进阿里,我觉得要么学历好(重点大学本/硕/博或者海龟),要么有开源贡献或者博客质量高,或者是走边缘部门。最重要的一点,履历得好,不能频繁跳槽,最好能有知名互联网搬砖经历(比如携程[狗头])

技术类问题

  • 创建线程池的参数
    CPU密集型和IO密集型的设置区别及原因

  • GC算法
    引用计数法。可达性分析(三色标记)。标记-清除。标记-压缩。

  • 如何解决频繁GC
    这个问题其实在问什么情况下会触发GC

  1. System.gc();
  2. jcmd 也可以触发
  3. Young区无可用空间
  4. Young晋升至Old时无足够空间
  5. 永久代满:常量池、类数据(动态代理类)

HR类问题

  • 为什么考虑换工作(我是两年经验一年一跳)
  • 职业规划,目前还欠缺什么
  • 如何看待工作

你可能感兴趣的:(2020 阿里巴巴和字节跳动面试总结)