首页 > 社招本一年 百度滴滴小米腾讯知乎字节BIGO面经
头像
晚霞的眼睛
编辑于 2020-11-23 13:09
+ 关注

社招本一年 百度滴滴小米腾讯知乎字节BIGO面经

因为在原公司待的不是很开心,然后决定裸辞了(千万不要裸辞!!!一方面心理压力比较大。另一方面也可能会被压薪资)
裸辞之后没着急找工作,因为原先做的东西比较偏底层,所以也是学习了一段时间先拿小公司练练手,大厂问的东西无外乎项目、基础、算法,这些的话楼主推荐几本书,基本问的东西都在这里面了《Redis设计与实现》、《Mysql技术内幕 InnoDB存储引擎》、《TCP-IP详解卷一》、《HTTP权威指南》、《深入理解Linux内核》、《研磨设计模式》、《数据结构与算法分析-c语言描述》机械工业的那个 我这边是应聘go的开发,学习go的话推荐《Go并发编程实战》、林海的《Go源码解析》最好源码和书一起看

这篇挺长的,抽着看吧

百度

一面

  • redis和etcd的区别
  1. 从数据结构方面来讲 Redis支持多种数据类型(string,set,list,hash,zset)
  2. 从读写性能上来讲,Redis读写性能优异,并且提供了RDB、AOF持久化,而etcd v3的底层采用boltdb做存储,value直接持久化
  3. 从使用场景上来看,etcd更适用于服务发现,配置管理,而Redis更适用于非强一致性的需求,比如说是队列,缓存,分布式Session
  4. 两者都是KV存储,但是etcd通过Raft算法保证了各个节点间的数据和事务的一致性,更强调各个节点间的通信;Redis则时更像是内存式的缓存,因此来说读写能力很强。
  5. Redis是c开发的,etcd是go开发的,他是源于k8s的兴起作为一个服务发现。
  6. etcd v3只能通过gRPC访问,而redis可以通过http访问,因此etcd的客户端开发工作量高很多。
  • etcd的Raft算法介绍一下
  • ping指令的实现,涉及到哪些协议
  • linux的用户态和内核态,什么时候切换到内核态
  • 为什么说线程的切换比协程要慢
  • redis、etcd 分布式锁的实现
  • redis string类型的底层实现
  • 和c语言string的区别
  1. 获取字符串长度只需要O(1)的时间复杂度,程序仅需要访问SDS的len属性即可
  2. c语言会产生缓冲区溢出,在Redis中如果需要对SDS进行修改时,API回显检查SDS的空间是否满足修改所需要的要求,如果不满足的话,API会自动将SDS的空间拓展到执行修改所需要的大小,然后才执行实际的修改操作
  3. 减少修改字符串时带来的内存重分配次数,SDS通过free属性记录未使用的字节,通过未使用空间,SDS实现了空间预分配和惰性空间释放两种优化策略。是的修改字符串长度N次最多需要执行N次的内存重分配。
  4. c字符串只能保存文本数据,SDS可以保存文本或者二进制数据

二面

二面基本是场景设计题,具体忘了,有一说一百度面试体验很好,和面试官一起探讨解决的办法
之后有一道智力题吧,有10个元素存到长度为12的数组中,有两个元素重复,找出这两个元素

比如a+b通过把元素累加在进行减法运算可以得到a+b
通过累乘再进行除法运算可以得到a*b的值
考虑到假如元素溢出,那么可已通过平方累加得到a^2+b^2的值
根据关系式可以求得a,b的值

三面

  • go和java的区别
    可以从多个角度来讲 比如面向对象来说,多态继承等等
    从运行速度来讲,go的并发模型 channel和goroutine
    从包管理来讲,go mod 包括之前的dep等等
  • go的gmp调度原理
  • cpu的上下文切换问题
  • channel有无缓冲槽的区别
    主要还是从同步和异步来讲
  • redis的zset实现
  • 负载均衡实现
    几道算法题 现场手写的
    堆排的一道问题,string化整型,链表反转

四面

手写了两道算法,单链表的中间节点 一道dp题目 百度的算法题目都是easy到meduim级别的
然后对项目问的比较细,比如在实现的虚拟链路中keepalive是怎么实现的啊,有什么可以优化的点吗
怎么查找程序的性能瓶颈等等

滴滴 自动驾驶Vovager

一面

主要是项目和部分基础知识这里记不太清了
算法 剑指63 股票问题
dp[i]=max(dp[i-1],num[i]-num[j])

func maxProfit(prices []int) int {
    size := len(prices)
    if size==0||size==1{
        return 0
    }
    profit := 0
    cost := prices[0]
    for i := 1; i < size; i++ {
        cost = min(prices[i], cost)
        profit = max(profit, prices[i]-cost)
    }
    return profit
}

问了能不转py

二面

二面主要问了项目以及一道算法题和场景设计题,我个人觉得不具有总结性

三面

*epoll和poll的区别
三面送命了,顺时针打印矩阵,一般按层模拟就好了,我也不知道怎么脑子就抽了

func spiralOrder(matrix [][]int) []int {
    if matrix == nil || len(matrix) == 0 || len(matrix) == 0 {
        return []int{}
    }
    top := 0
    hsize := len(matrix)
    lsize := len(matrix[0])
    left := 0

    bottom := hsize - 1
    right := lsize - 1
    index := 0
    x, y := 0, 0
    sum := make([]int, hsize*lsize)
    for bottom >= top && right >= left {
        for x = left; x <= right; x++ {
            sum[index] = matrix[top][x]
            index++
        }
        for y = top + 1; y <= bottom; y++ {
            sum[index] = matrix[y][right]
            index++
        }
        if bottom > top && right > left {
            for x = right - 1; x > left; x-- {
                sum[index] = matrix[bottom][x]
                index++
            }
            for y = bottom; y > top; y-- {
                sum[index] = matrix[y][left]
                index++
            }
        }
        left++
        right--
        top++
        bottom--
    }
    return sum
}

Aibee

一面

  • 数组中找出和为k的两个元素返回下标 模板题了
    另一道有意思的题目可以参考leetcode 560题
  • 无头结点的链表元素删除
  • 排行榜的设计
  • https加密过程
  • InnoDb的索引模型 详细一些
  • 覆盖索引和非覆盖索引的区别

二面

算法和股票差不多
根据项目延伸来问的一些问题

  • slice的底层实现
  • gmp调度模型
  • golang的gc回收
  • tcp的粘包问题
  • mysql隔离级别

三面

没啥好说的 和面试官互相吹牛逼了

小米

一面

  • Redis缓存策略
  • 分布式CAP原理
  • Mysql事务的隔离级别 分别解决了哪些问题?
  • mysql的存储引擎的区别?
  • Redis持久化的区别
  • Grpc的过程

二面

怼了项目 业务上不合适

  • 怎么限制goroutine的数量?
  • redis为什么快?

字节跳动

一面

  • https的过程
    1. 客户端请求网址,服务器接收到请求后返回证书公钥
    2. 客户端验证证书的有效性和合法性,然后生成一个随机值
    3. 客户端通过证书的公钥加密随机值,将加密后的密钥发送给服务器
    4. 服务器通过私钥解密密钥,通过解密后的密钥加密要发送的内容
    5. 客户端通过密钥解密接受的内容
  • http keep-alive的作用
  • 755 是什么权限? 详细见linux权限入门
    7=rwx=4+2+1 5=rx
    拥有者可读可写可执行 群组可读可执行 其他组可读可执行
  • linux 查找当前文件后20行
    tail -n 20 filename
  • linux统计字符出现的个数
    grep -o objStr filename|wc -l
  • epoll和poll的区别
    本质都是IO多路复用
  • 算法题 10进制转7进制
  • 算法题 判断数独的有效性

二面

撕AVL树 撕哈希表

图片说明

知乎

一面

项目

  • redis的多集群方案
  • mysql的b+索引
  • golang的内存分配机制
  • golang的多态实现
  • interface的底层实现

二面

只问了两道算法
连续子序列的最大和并返回所有序列
另一道忘了

三面

  1. 非递归形式的前序遍历
  2. k个有序链表合并

项目问题

  • golang的context包
  • string类型转为[]byte过程发生了什么
  • redis的数据类型及底层实现
  • mysql聚集索引和非聚集索引底层实现
  • b+树和红黑树

腾讯

一面

之前看面经听说腾讯面试官惜字如金,果真就想几个字骗一段话啊

  • golang的多路复用
  • fasthttp为什么快
  • pprof使用
  • 性能调优怎么做
  • http2.0的多路复用怎么实现的
  • 最大连续子序列和
  • mysql怎么监控流量
  • golang调度 能不能不要p
  • 负载均衡哪些算法?

二面

二面基本围绕项目拓展来说的 人家说你简历写的我不问。。
场景设计 秒杀、抽奖、推荐 三剑客
etcd和zk的区别
etcd的Raft算法详细讲一下

三面

项目细问包括一些基础问题没啥好讲的
职业规划等等

BIGO

  • prometheus实际使用

  • linux tcp 半连接

  • 常见的linux指令
    tail pwd chmod lsof netstat top

  • 实现一个压测工具
    golang编写一个http客户端,支持参数httprequest -c 5 -r 1000 http://**** 客户端,输出所有响应

  • string类型加法实现

  • sql题

    CREATE TABLE IF NOT EXISTS `mytable` (
       `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
       `video_id` bigint unsigned NOT NULL DEFAULT 0,
       `uid` int unsigned NOT NULL DEFAULT 0,
       `country` varchar(194)  NOT NULL ,
       `class` varchar(64)  NOT NULL ,
       `status` tinyint(4) unsigned NOT NULL DEFAULT '0',
       `video_view` bigint(20) unsigned NOT NULL DEFAULT '0',
       `created` timestamp  NOT NULL DEFAULT CURRENT_TIMESTAMP,
       PRIMARY KEY (
           `id`
       )
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
    SELECT * FROM mytable WHERE created > ? AND class = ? AND country IN (?) ORDER BY created DESC LIMIT 100;
    SELECT * FROM mytable WHERE class = ? AND country IN (?) ORDER BY video_view DESC LIMIT 100;
    SELECT * FROM mytable WHERE created > ? AND class IN (?) LIMIT 100;
    SELECT * FROM mytable WHERE created > ? AND country IN (?) LIMIT 100;

    怎么建索引?

  • map如何实现顺序读取
    空间换时间
    借助额外的数据结构比如slice 等,对key进行排序,遍历slice得到顺序输出

  • 协程泄***r>如果你启动了一个 goroutine,但并没有符合预期的退出,直到程序结束,此goroutine才退出,这种情况就是 goroutine 泄露。当 goroutine 泄露发生时,该 goroutine 的栈(一般 2k 内存空间起)一直被占用不能释放,goroutine 里的函数在堆上申请的空间也不能被 垃圾回收器 回收。

  • 空结构体的用处
    空结构体不占用内存空间

    1. 实现set
    2. 实现chan struct{} 不占用内存空间,实现传递信号的通道
      剩下的忘了一直在看表了想着还不结束, 面了两个小时

更多模拟面试

全部评论

(12) 回帖
加载中...
话题 回帖

推荐话题

相关热帖

近期热帖

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

近期精华帖

热门推荐