Skip to content

Latest commit

 

History

History
86 lines (77 loc) · 3.5 KB

[interview] ByteDance&Tencent.md

File metadata and controls

86 lines (77 loc) · 3.5 KB

ByteDance&Tencent

2021/3 暑期实习

腾讯一面

  1. 上来抛了道js,问我输出
const a = (
   i : 0,
   toString(){
      return i++
   }
)
print(a == 0 && a==1 && a==2)
  • 答案是false,没答出来,我当时主要纠结于为什么会调用toString呢
  1. 问了下闭包,以及和方法引用对象变量的区别
  2. union结构体,柔性数组
  3. 讲讲TCP三次握手,序数是从0开始吗
    1. 不是
  4. 讲讲数据包从本机到公网的历程
    1. 讲了arp,交换机,路由器这些
  5. 讲讲物理层的冲突
    1. 载波侦听多路访问
  6. 交换机和路由器的区别
  7. 交换机的端口分向内向外吗
    1. 不分,一个广播域,一个子网
  8. 了解tcmalloc吗
    1. 不懂,查了下,是thread cache malloc,一种内存管理中的内存分配方法
  9. 介绍自己的项目,聊到多态哈希,问我的并发控制是怎么做的
    1. 读写锁,map分片
  10. 哈希怎么做的内存管理
    1. 用bitmap,不是像slab用链表
  11. 等等,多数忘了

二面

今天早上过了tx的二面,感觉面的很简单

  1. 讨论项目
  2. 问我了不了解第三方登陆接口
    1. 不了解,查了下,和OAuth有关
  3. 做题
    1. 用三种方法,计算一个数字转化为二进制后有多少个1
      1. for{b = a&1,a = a>>1,.....}
    2. 经典leetcode,找到数组第k大数
      1. 快排/优先队列
      2. 问了下算法复杂度
    3. 12个鸡蛋,一个天平,怎样快速识别出来唯一的坏鸡蛋
    4. 忘了

字节

  1. 接雨水,本菜鸡没写出来
  2. TCP三次握手,四次挥手
    1. 额外讲了个两个positive socket之间的主动连接
  3. 四次挥手可以是3次吗
    1. 回答可以,关闭连接的本质在于自己不再写socket,所以只要收到对方的fin,并且自己不再需要写,便可以返回fin+ack,没必要分开发
  4. SYN半连接攻击
    1. 导致SYN队列满
    2. 额外讲了个TCP cookie,用来解决SYN队列满的问题
  5. go GC
    1. 标记清扫法,三色标记法,混合写屏障
  6. 数据库事务的特性
    1. ACID
    2. 原子性:要么发生要么不发生
    3. 一致性:相容性,互相不矛盾
    4. 隔离性:四个隔离级别
    5. 持久性: 刷回硬盘,分数据和日志
  7. 讲讲隔离性中的幻读
    1. 即读出了其他事务插入的行,本质是只锁了行,可以通过gap锁来锁区间
  8. innoDB的索引
    1. B+树
  9. B+树的特点
    1. 叶子节点存数据,且链起来,方便顺序遍历
  10. B+树的优点
    1. 有序性:区间查找快,相较于B树的中序遍历,和hash的无序性
    2. 快速性: B+树更矮胖,查找的层级会更少,3层B+树可以容纳2kw个数据
    3. 稳定性: 因为数据都在叶子节点,所以搜索数据都必须搜到最底层
    4. 稳定性的好处,其实在于其非叶子节点容纳了更多的指向下一层的指针,这导致io次数急剧下降,所以应该说,不是稳定性的好处,而是B+树非叶子节点不存数据的好处(这导致了稳定性),想象一下.任意2kw数据,都可以只通过3次io就查出来,快到极致,反观B树,一层最多16个指针,16^6=1.6kw
      1. 可惜,当时我不会
  11. 结束

可以看出字节会偏向八股文一点,但是我个人觉得这是有必要的,因为虽然都是些基础概念,但每个人都会有自己的理解,而且都是比较简单的吧,如果不会,一是基础问题,二是态度问题.

并且字节问了我go的GC,这是我比较感动的,毕竟我简历上写着目标岗位是go后端开发:)