写点什么

半个月 6 次面试,终于进百度 HR 面了

作者:王中阳Go
  • 2024-07-04
    湖南
  • 本文字数:4242 字

    阅读完需:约 14 分钟

半个月6次面试,终于进百度HR面了

今天和大家分享一下来自粉丝的面经投稿,他在最近半个月内疯狂的面试,光百度就约面了两个岗位,一共进行了 6 场面试,并且其中一个进到了 HR 面。


他的基本情况是这样的:统招本科,计算机相关专业,拥有八年的工作经验,目前处于离职状态,之前的薪资 20K+ ,期望薪资 25K+ 。


大家可以看一下他下面分享的面经的难度:

第一家:百度地图后端研发工程师

职位要求

工作职责


  • 负责百度地图 POI 数据中台的研发和数据体系建设,支撑千万级数据处理压力的高可靠系统研发工作

  • 负责 POI 数据建设与情报/特征/模型等层面的架构设计和工程实现,场景为大规模分布式存储、计算、数据挖掘应用

  • 探索研究大数据解决方案在 POI 数据处理和情报分析方面的应用,分析与改进现有系统

  • 负责地图部分用户端产品的研发和数据系统后台服务架构研发


职责要求


  • 计算机相关专业本科及以上,1 年以上相关工作经验

  • 熟悉 Linux 及常见数据结构和算法,至少熟悉一种主流开发语言(Python/Golang/C++)

  • 对大数据处理和数据工程与分析有浓厚的兴趣,良好的团队合作精神和主动的沟通意识

一面

  1. 自我介绍

  2. 说一下 IoT 云平台的搭建,遇到的困难,怎么解决的


高并发,消息队列,分库分表,redis 集群,将来支撑千万级上亿级(dns 负载均衡,反向代理负载均衡)

对比了无服务和微服务的优势和劣势

半夜服务器告警,解决问题

主要对接国外第三方,遇到的困难


  1. 编程题


Go两个goroutine交替打印1-10 //G1 1 //G2 2 //G1 3 //G2 4 //… //G1 9 //G2 10
复制代码


用两个 channel 读写数据就好了


长度10初始化都为0的数组,顺序填入1-10,因为中间一个数值漏掉了,填到最后发现数组没有填满,找出漏掉了哪个数字?例如输入[1,2,3,4,5,7,8,9,10,0] 返回 6 
复制代码


写出了 O(n)的,说用二分查找可以写出 O(logn),这个不是很明白怎么写


  1. 反问


公司的业务,工作时间,福利等


  1. 什么时候能来上班


看 offer 进度

二面(没后续了)

  1. 自我介绍

  2. 为什么离职


团队解散了,协议离职


  1. 说一下 IoT 云平台构建的实现以及技术难点


消息队列:数据倾斜问题,数据不丢,重复消费

redis:使用 hash 以及 Pipline

数据库:增加索引,分库分表

这里聊了很多细节问题,根据业务来说这个东西


  1. 操作系统处理死锁的方法


信号量,共享内存(这块感觉还有别的可以说)


  1. 操作系统内存管理的方法


分页,分块,FIFO,LRU(这块感觉还有别的可以说)


  1. 会不会写 python 脚本


说写了爬虫,爬了百度,弹出了验证码


  1. Redis 持久化


AOF,RDB 还有混合持久化


  1. Memcache 知道吗


多线程,不支持持久化(具体不了解)


  1. Redis 分布式锁


加锁,解锁


  1. 登入 linux 终端,输命令很卡


top 检查 cpu 使用,网络问题(在国内访问国外),内存,磁盘使用是否在临界区


  1. 使用 shell 统计文件中 top3 的 ip 地址


没搞定,就说了 grep,awk 的一些命令


  1. 磁盘满了写不进去,排查命令


df,du 查看磁盘


  1. 找出文件夹中最大的几个文件,命令是什么


这块说有什么命令可以列出来,但是具体忘了


  1. 说一下 ES 和 Redis 的区别


ES 是搜索引擎,redis 是数据结构数据库,可以做很多事情比如消息队列,geo 啥的


  1. 写代码


创建链表1->2->3->4->5输入2,让链表偏移4->5->1->2->3
复制代码


写出来了,但是有 bug,说是看一下代码风格,说一下写题目的思路


  1. 有没有 offer


暂时还没有


  1. 职业规划


深耕服务端,了解架构,有机会也可以走向管理


  1. 反问


  1. 介绍了一下业务

  2. 培训,晋升

  3. 福利

第二家:百度文库研发部_服务端研发工程师

职位要求

工作职责


  • 负责百度文库的服务端研发工作

  • 编写核心代码,承担关键技术攻关任务

  • 参与服务架构设计,独立完成业务需求分析和设计

  • 对现有服务框架的升级、性能优化和稳定性建设

  • 推动技术与产品创新,建设良好的技术文档,帮助团队理解需求和技术架构,提高开发效率


任职资格


  • 计算机或相关专业,本科及以上学历

  • 两年以上 Golang/PHP/Java/Python/C++ 项目开发经验,有良好的编程习惯

  • 熟悉 Linux 操作系统和开发环境,有良好的数据结构、算法基础和系统设计能力,熟悉技术领域的通用组件如 Mysql、Redis,Kafka,ElasticSearch 等,有较深的理论研究和实践经验,并能落地到业务中

  • 熟悉 web service 相关技术,如高并发处理、存储与缓存,RPC、消息队列等技术

  • 有支付、会员、文档智能化等系统相关研发设计经验者优先

  • 有较好的团队合作精神,较强的沟通能力,主动性强,有很强的自我驱动力

  • 有较好的产品意识,主动关注产品效果并积极推进产品方案的落实与完善

一面

  1. 自我介绍

  2. 还会别的啥语言吗


会的啊,python 后端,java 写 android,C/C++配合 Lua 开发固件


  1. go 的竞争问题


比如说 map,多个协程访问,可以加锁。

atomic 包的 CompareAndSwapInt32

编译器使用 race 发现竞争问题


  1. map 解决竞争还有什么办法


加读写锁,使用 sync map


  1. sync 包还有哪些东西?


mutex,RWmutex,waitGroup,Once


  1. 看一段代码,说下输出。


package main
import ( "fmt" "sync" "time")
type Person struct { name string
age int}
var p Person
func update(name string, age int) {
p.name = name
time.Sleep(time.Millisecond * 200) p.age = age}
func main() {
wg := sync.WaitGroup{} wg.Add(10) for i := 0; i < 10; i++ {
name, age := fmt.Sprintf("nobody:%v", i), i
go func() {
defer wg.Done()
update(name, age)
}()
}
wg.Wait() fmt.Printf("p.name= %s\np.age=%v", p.name, p.age)}
复制代码


输出结果不一定,go 的协程执行顺序不好说

name 和 age 不一定相等,因为有 sleep

加锁可以解决


  1. chmod 644 什么意思?


给权限,4 读,2 写,1 执行

文件所有者,文件所属的组,其他的用户


  1. Linux 常用命令有哪些


cd,ls,ps,top,lscpu,cat,touch,mkdir,grep,awk,df,du,ifconfig,netstat,ip addr


  1. docker 的 Cgroup 有哪些作用?


限制 cpu 和内存资源用的


  1. docker compose 是用来做啥的?


使用 yaml 文件,管理启动和停止多个容器用的


  1. 写 sql 平均年龄大于 35 的部门 id,dpid 是部门 id,cid 是员工 id,age 是员工的年龄


SELECT dpid

FROM employees

GROUP BY dpid

HAVING AVG(age) > 35;


  1. 说一下 mysql 的慢查询,怎么排查?


打开慢查询的日志,设置慢查询的超时时间,用 explain 显示执行计划

将 type 如果是 all 或者是 index 优化到 range 会比较好

索引优化


  1. 索引是什么样子的时候 type 会是 range


不是回答的很好,应该是索引的范围扫描


  1. type 还有哪些取值


ref,system,这块没答全


  1. 说一下最左匹配


老问题,(a,b,c)顺序问题


  1. 联合索引 a,b,c 查询语句 WHERE c = 1 AND b IN (1, 3) AND a = 3;用的索引长度


这块 a 肯定是能有的,b 是 in 不知道能不能用,得拿 sql 试试


  1. redis 排名怎么用,取前 10 的命令


Zset


  1. 说一下布隆过滤器,原理,问题,优化


bitmap 实现,多个函数落在里面,如果说在,不一定在,如果说不在则一定不在,优化的话,增加 bitmap 的长度,设置函数的个数


  1. 缓存穿透,怎么解决


既不在 redis,也不在数据库。使用布隆过滤器过滤,加载空的 key,业务层增加参数校验,使用分布式锁减少访问数据库


  1. redis 分布式锁如何实现,zoomkeeper 怎么实现


redis 知道,zoomkeeper 不太懂


  1. redis 哪个版本加入了 setnx 带过期时间的


谁记这东西啊(2.6.12)


  1. 常用设计模式有哪些,都是干啥用的?


工厂,抽象工厂,单例,创建对象用的

责任链,gin 和 goframe 的中间件调 next 用的

装饰器,python 中用来包装函数,然后可以用来计时

适配器,统一外部接口

观察者,回调函数实现异步


  1. 哪里人?目前薪资多少?

  2. 用两个 go 协程交替打印 1,2,3,4 一直到 100


这种类型的题目都没啥好玩的,不过用的是他们的编辑器,没啥提示,有 bug 但是最后解决了


  1. 反问


  1. zoomkeeper 如何实现分布式锁,刚刚没答出来:他说自己去搜

  2. 业务有啥:说文库,ai 生成内容图表,脑图啥的,等过来就知道了

  3. 上班时间:10 点到晚上 9 点(这么卷!!!)

二面

  1. 自我介绍

  2. 其他的语言会不会


会的啊,python 后端,java 写 android,C/C++配合 Lua 开发固件


  1. go 逃逸分析


变量类型不确定,有全局变量引用,给 slice 分配的长度太大,给 slice 分配的长度不定

使用 gcflags case by case 分析


  1. gin 的 http 方法怎么实现的


这快没看,然后就说了下 gin 中间件的实现


  1. gin 框架的 tag


说了有 json,然后说 gin 的不太熟,但是 goframe 的有 method 方法,v 参数校验,dc 描述。

gin 应该和 goframe 差不多


  1. channel 了解吗


说了数据结构里面有哪些字段用来干啥的,说了一下 channel 的一些用法以及注意事项


  1. sync 包有哪些东西


mutex,rwmutex,sync.map,sync.once,sycn.pool 说了一下他们是干啥的


  1. http 状态码


1XX,2XX,3XX,4XX,5XX


  1. http 状态码 499


这个没碰到过(查了一下是 Nginx 定义的)


  1. redis 的使用,数据一致问题


原子操作,多个操作可以用 lua 脚本,也可以用事务,事务用起来比较坑,回滚啥的


  1. Mysql innodb 为什么主键推荐用自增


底层 B+树,不自增的话插入数据容易导致节点分裂和合并,影响效率


  1. mysql 删除数据,容量会不会变


不会变,删除只是标记为删除,要把表删了才全删了,因此删除不会释放磁盘的空间


  1. mysql 表设计优化


先说了表的字段数量优化,再说表的字段类型优化,尽量选容量少的

然后引申到 mysql 的优化,语句优化走索引,参数优化 buffer_pool_size,锁超时优化,连接数优化

根据业务优化,读多写少加缓存等


  1. 微服务优缺点


优点:服务拆分,职责分明,语言不限,部署有工具 docker,k8s,多云端部署

缺点:需要运维关注,不熟悉业务排查问题慢


  1. 微服务排查问题的方法


根据请求 id,链路追踪,log 记录,普罗米修斯监控,grafana 告警,架构文档梳理


  1. 迭代升级频繁方案


灰度,内测用户,实时监控状态,渐进式的开放,出问题回滚还是修复,看业务影响


  1. 说做的挑战的项目


消息队列:数据倾斜问题,数据不丢,重复消费

redis:使用 hash 以及 Pipline,bigkey 拆解

数据库:性能优化,分库分表


  1. 写代码


  a:="baissbaidubbbaidu"  b:="baidu"  c:="baissbb"  将a中出现的b去掉,输出的就是c了
复制代码


用了两个 for 循环就搞定


  1. 反问


  1. 业务有啥:文库 ai gc 相关的

  2. 上班的时间:10 点到晚上 9 点(看来是真的忙,这接近 12 小时了啊)


  1. 有后续的话,3 天内就有结果了,感觉我挺不错的

三面

  1. 自我介绍

  2. 离职的原因

  3. 为什么想来北京发展

  4. 为什么毕业了想去深圳

  5. 做项目的时候合作的比较愉快的经历

  6. 有挑战的项目是哪个,如何克服挑战的

  7. 说一下有挑战的项目的一个业务的逻辑

  8. 第一份工作的离职原因

  9. 说一下 python 和 go 的一个使用上的区别

  10. 说一下团队的大小,以及在团队中承担的角色

  11. 说一下如何学习 go 的

  12. 写 go 的时候遇到了哪些问题,怎么解决的

  13. 如果出现和同事有争议的事情,该如何解决,如果同事一直坚持怎么办

  14. 领导做出了错误的决策怎么办

  15. 反问


  1. 工作内容,业务

  2. 工作时间

  3. 团队的人数,入职培训

HR 面!

期待他的好消息。

欢迎关注 ❤

我的文章都首发在同名公众号:王中阳


需要简历优化或者就业辅导,可以直接加我微信:wangzhongyang1993 , 备注:infoq

发布于: 刚刚阅读数: 5
用户头像

王中阳Go

关注

靠敲代码在北京买房的程序员 2022-10-09 加入

【微信】wangzhongyang1993【公众号】程序员升职加薪之旅【成就】InfoQ专家博主👍掘金签约作者👍B站&掘金&CSDN&思否等全平台账号:王中阳Go

评论

发布
暂无评论
半个月6次面试,终于进百度HR面了_Go_王中阳Go_InfoQ写作社区