社招本一年 百度滴滴小米腾讯知乎字节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{} 不占用内存空间,实现传递信号的通道
      剩下的忘了一直在看表了想着还不结束, 面了两个小时
#校招##百度##滴滴##golang工程师##自动驾驶控制工程师#
全部评论
感谢分享! 欢迎大佬参加我们的社招面经征集活动呀!有京东卡可以拿~社招面经征集|参加过社招的牛友,来发面经吧,拿京东卡~:https://www.nowcoder.com/discuss/374207 #社招面经#
3 回复 分享
发布于 2020-11-23 19:30
avl树这个我是真的惊了。。。
2 回复 分享
发布于 2020-11-24 10:01
现在go和java哪个相对容易点
1 回复 分享
发布于 2020-11-24 02:00
恭喜恭喜🎉
1 回复 分享
发布于 2020-11-23 20:55
老哥工作多久的
点赞 回复 分享
发布于 2020-11-25 00:43
薪资涨幅多少
点赞 回复 分享
发布于 2020-11-24 11:43
点赞 回复 分享
发布于 2020-11-24 11:33
老哥,从哪跳槽的?
点赞 回复 分享
发布于 2020-11-24 09:15
是都拿了offer吗
点赞 回复 分享
发布于 2020-11-24 00:33
能爆料一下薪资吗
点赞 回复 分享
发布于 2020-11-23 23:10
大佬原来是写go的吗,个人经历感觉写java面go的话发挥不出对原语言特性的了解挺吃亏的
点赞 回复 分享
发布于 2020-11-23 21:01
老哥最后去哪了吗
点赞 回复 分享
发布于 2020-11-23 13:30

相关推荐

06-04 16:18
已编辑
湖南科技大学 Java
1.简单介绍一下你自定义的协议2.讲讲怎么做的Benchmark3.你的测试是在什么配置的机器上进行的?4.你在启动参数部分:配置了哪些参数?JVM内存是怎么分配的。除了堆/栈/元空间。你是如何考虑堆外内存的?有考虑过SurvivorRatio和newRatio么5.你做了哪些性能优化?从应用层的角度来谈6.我其实更想知道,你在TCP这一层做了哪些优化?7.从序列化的角度来看,你做了哪些优化?8.除了Nagel算法呢?在TCP层面还能做什么优化?9.你对哪一块比较了解?——答:MySQL10.那你讲讲建索引有哪些考虑?11.你给学校建索引,那假如这个学校字段不被查询呢?你再想想在实战中,建立索引要考虑哪些因素?12.给用户-活跃状态建立联合索引可行,在建表的时候,除了建立索引,你还会考虑哪些因素?13.讲讲OOM怎么排查的?14.我知道你可以jmap或者启动参数配置输出堆转储信息,但是我们用的k8s,服务器半夜崩溃了,整个container都消失了,那我怎么去查日志或者堆转储文件呢?15.假设我有A服务和B服务,不同的服务之间有TraceID,然后我的TraceID在A服务时是TraceA,在B服务突然变成traceB,你怎么排查出这个ID的变更?16.你用了Seata,那我想问问你:什么情况下需要用分布式事务,除了Seata你还能用什么来实现分布式事务?如果我不处理分布式事务会怎么样?什么业务场景需要一致性?17.手撕:给定仓库位置码:形如//&nbsp;A101-052-001&nbsp;//&nbsp;J01-002-001。如何进行排序呢?18.你项目用的JDK版本是多少?答:1719.你认为JDK17和JDK8相比有哪些优势?1.有二面的话联系你。答:我答成这样还有二面机会?反问:A.您好像对我的业务项目不感兴趣?答案:太玩具了,和我们生产用的差异太大,没什么好问的。B.对我的建议?答案:实战经验欠缺,但是现在这行业比较病态,实习机会需要有产出的实习做铺垫,努力多干活吧。八股文背的挺好的,可惜我不太喜欢问八股,&nbsp;我的面试风格和其他人不太一样。C.评价一下我?答:你比大二的我强,但是现在这个行情确实比我当年卷了非常多。你还得多练练。总结:A.聊了挺久,总共60minB.面试官人很幽默,但是对面试主动权把握的很好,我惯用的掌握面试节奏的技巧失效了。多次尝试吟唱八股都被打断了。C.感觉这会是我面试的第一寄。
采集想要offer:问八股还行,问实***就gg了,希望面我的不是这个面试官
点赞 评论 收藏
分享
评论
30
219
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务