今天和大家分享一下来自粉丝的面经投稿,他在最近半个月内疯狂的面试,光百度就约面了两个岗位,一共进行了6场面试,并且其中一个进到了 HR 面。
他的基本情况是这样的:统招本科,计算机相关专业,拥有八年的工作经验,目前处于离职状态,之前的薪资 20K+ ,期望薪资 25K+ 。
大家可以看一下他下面分享的面经的难度:
第一家:百度地图后端研发工程师
职位要求
工作职责:
- 负责百度地图POI数据中台的研发和数据体系建设,支撑千万级数据处理压力的高可靠系统研发工作
- 负责POI数据建设与情报/特征/模型等层面的架构设计和工程实现,场景为大规模分布式存储、计算、数据挖掘应用
- 探索研究大数据解决方案在POI数据处理和情报分析方面的应用,分析与改进现有系统
- 负责地图部分用户端产品的研发和数据系统后台服务架构研发
职责要求:
- 计算机相关专业本科及以上,1年以上相关工作经验
- 熟悉Linux及常见数据结构和算法,至少熟悉一种主流开发语言(Python/Golang/C++)
- 对大数据处理和数据工程与分析有浓厚的兴趣,良好的团队合作精神和主动的沟通意识
一面
- 自我介绍
说一下IoT云平台的搭建,遇到的困难,怎么解决的
高并发,消息队列,分库分表,redis集群,将来支撑千万级上亿级(dns负载均衡,反向代理负载均衡)
对比了无服务和微服务的优势和劣势
半夜服务器告警,解决问题
主要对接国外第三方,遇到的困难
编程题
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),这个不是很明白怎么写
反问
公司的业务,工作时间,福利等
什么时候能来上班
看offer进度
二面(没后续了)
- 自我介绍
为什么离职
团队解散了,协议离职
说一下IoT云平台构建的实现以及技术难点
消息队列:数据倾斜问题,数据不丢,重复消费
redis:使用hash以及Pipline
数据库:增加索引,分库分表
这里聊了很多细节问题,根据业务来说这个东西
操作系统处理死锁的方法
信号量,共享内存(这块感觉还有别的可以说)
操作系统内存管理的方法
分页,分块,FIFO,LRU(这块感觉还有别的可以说)
会不会写python脚本
说写了爬虫,爬了百度,弹出了验证码
Redis持久化
AOF,RDB还有混合持久化
Memcache知道吗
多线程,不支持持久化(具体不了解)
Redis分布式锁
加锁,解锁
登入linux终端,输命令很卡
top检查cpu使用,网络问题(在国内访问国外),内存,磁盘使用是否在临界区
使用shell统计文件中top3的ip地址
没搞定,就说了grep,awk的一些命令
磁盘满了写不进去,排查命令
df,du查看磁盘
找出文件夹中最大的几个文件,命令是什么
这块说有什么命令可以列出来,但是具体忘了
说一下ES和Redis的区别
ES是搜索引擎,redis是数据结构数据库,可以做很多事情比如消息队列,geo啥的
写代码
创建链表 1->2->3->4->5 输入2,让链表偏移 4->5->1->2->3
写出来了,但是有bug,说是看一下代码风格,说一下写题目的思路
有没有offer
暂时还没有
职业规划
深耕服务端,了解架构,有机会也可以走向管理
反问
- 介绍了一下业务
- 培训,晋升
- 福利
第二家:百度文库研发部_服务端研发工程师
职位要求
工作职责:
- 负责百度文库的服务端研发工作
- 编写核心代码,承担关键技术攻关任务
- 参与服务架构设计,独立完成业务需求分析和设计
- 对现有服务框架的升级、性能优化和稳定性建设
- 推动技术与产品创新,建设良好的技术文档,帮助团队理解需求和技术架构,提高开发效率
任职资格:
- 计算机或相关专业,本科及以上学历
- 两年以上 Golang/PHP/Java/Python/C++ 项目开发经验,有良好的编程习惯
- 熟悉 Linux 操作系统和开发环境,有良好的数据结构、算法基础和系统设计能力,熟悉技术领域的通用组件如Mysql、Redis,Kafka,ElasticSearch等,有较深的理论研究和实践经验,并能落地到业务中
- 熟悉web service相关技术,如高并发处理、存储与缓存,RPC、消息队列等技术
- 有支付、会员、文档智能化等系统相关研发设计经验者优先
- 有较好的团队合作精神,较强的沟通能力,主动性强,有很强的自我驱动力
- 有较好的产品意识,主动关注产品效果并积极推进产品方案的落实与完善
一面
- 自我介绍
还会别的啥语言吗
会的啊,python后端,java写android,C/C++配合Lua开发固件
go的竞争问题
比如说map,多个协程访问,可以加锁。
atomic包的CompareAndSwapInt32
编译器使用 race 发现竞争问题
map解决竞争还有什么办法
加读写锁,使用sync map
sync 包还有哪些东西?
mutex,RWmutex,waitGroup,Once
看一段代码,说下输出。
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
加锁可以解决
chmod 644什么意思?
给权限,4读,2写,1执行
文件所有者,文件所属的组,其他的用户
Linux 常用命令有哪些
cd,ls,ps,top,
lscpu,cat,touch,mkdir,
grep,awk,
df,du,
ifconfig,netstat,ip addrdocker的Cgroup有哪些作用?
限制cpu和内存资源用的
docker compose是用来做啥的?
使用yaml文件,管理启动和停止多个容器用的
写sql平均年龄大于35的部门id,dpid是部门id,cid是员工id,age是员工的年龄
SELECT dpid
FROM employees
GROUP BY dpid
HAVING AVG(age) > 35;
说一下mysql的慢查询,怎么排查?
打开慢查询的日志,设置慢查询的超时时间,用explain显示执行计划
将type如果是all或者是index优化到range会比较好
索引优化
索引是什么样子的时候type会是range
不是回答的很好,应该是索引的范围扫描
type还有哪些取值
ref,system,这块没答全
说一下最左匹配
老问题,(a,b,c)顺序问题
联合索引a,b,c 查询语句 WHERE c = 1 AND b IN (1, 3) AND a = 3;用的索引长度
这块a肯定是能有的,b是in不知道能不能用,得拿sql试试
redis排名怎么用,取前10的命令
Zset
说一下布隆过滤器,原理,问题,优化
bitmap实现,多个函数落在里面,如果说在,不一定在,如果说不在则一定不在,优化的话,增加bitmap的长度,设置函数的个数
缓存穿透,怎么解决
既不在redis,也不在数据库。使用布隆过滤器过滤,加载空的key,业务层增加参数校验,使用分布式锁减少访问数据库
redis分布式锁如何实现,zoomkeeper怎么实现
redis知道,zoomkeeper不太懂
redis哪个版本加入了setnx带过期时间的
谁记这东西啊(2.6.12)
常用设计模式有哪些,都是干啥用的?
工厂,抽象工厂,单例,创建对象用的
责任链,gin和goframe的中间件调next用的
装饰器,python中用来包装函数,然后可以用来计时
适配器,统一外部接口
观察者,回调函数实现异步
- 哪里人?目前薪资多少?
用两个go协程交替打印1,2,3,4一直到100
这种类型的题目都没啥好玩的,不过用的是他们的编辑器,没啥提示,有bug但是最后解决了
反问
- zoomkeeper如何实现分布式锁,刚刚没答出来:他说自己去搜
- 业务有啥:说文库,ai生成内容图表,脑图啥的,等过来就知道了
- 上班时间:10点到晚上9点(这么卷!!!)
二面
- 自我介绍
其他的语言会不会
会的啊,python后端,java写android,C/C++配合Lua开发固件
go逃逸分析
变量类型不确定,有全局变量引用,给slice分配的长度太大,给slice分配的长度不定
使用gcflags case by case 分析
gin的http方法怎么实现的
这快没看,然后就说了下gin中间件的实现
gin框架的tag
说了有json,然后说gin的不太熟,但是goframe的有 method方法,v参数校验,dc描述。
gin应该和goframe差不多
channel了解吗
说了数据结构里面有哪些字段用来干啥的,说了一下channel的一些用法以及注意事项
sync包有哪些东西
mutex,rwmutex,sync.map,sync.once,sycn.pool
说了一下他们是干啥的http状态码
1XX,2XX,3XX,4XX,5XX
http状态码499
这个没碰到过(查了一下是Nginx定义的)
redis的使用,数据一致问题
原子操作,多个操作可以用lua脚本,也可以用事务,事务用起来比较坑,回滚啥的
Mysql innodb为什么主键推荐用自增
底层B+树,不自增的话插入数据容易导致节点分裂和合并,影响效率
mysql删除数据,容量会不会变
不会变,删除只是标记为删除,要把表删了才全删了,因此删除不会释放磁盘的空间
mysql表设计优化
先说了表的字段数量优化,再说表的字段类型优化,尽量选容量少的
然后引申到mysql的优化,语句优化走索引,参数优化buffer_pool_size,锁超时优化,连接数优化
根据业务优化,读多写少加缓存等
微服务优缺点
优点:服务拆分,职责分明,语言不限,部署有工具docker,k8s,多云端部署
缺点:需要运维关注,不熟悉业务排查问题慢
微服务排查问题的方法
根据请求id,链路追踪,log记录,普罗米修斯监控,grafana告警,架构文档梳理
迭代升级频繁方案
灰度,内测用户,实时监控状态,渐进式的开放,出问题回滚还是修复,看业务影响
说做的挑战的项目
消息队列:数据倾斜问题,数据不丢,重复消费
redis:使用hash以及Pipline,bigkey拆解
数据库:性能优化,分库分表
写代码
a:="baissbaidubbbaidu" b:="baidu" c:="baissbb" 将a中出现的b去掉,输出的就是c了
用了两个for循环就搞定
反问
- 业务有啥:文库ai gc相关的
- 上班的时间:10点到晚上9点(看来是真的忙,这接近12小时了啊)
- 有后续的话,3天内就有结果了,感觉我挺不错的
三面
- 自我介绍
- 离职的原因
- 为什么想来北京发展
- 为什么毕业了想去深圳
- 做项目的时候合作的比较愉快的经历
- 有挑战的项目是哪个,如何克服挑战的
- 说一下有挑战的项目的一个业务的逻辑
- 第一份工作的离职原因
- 说一下python和go的一个使用上的区别
- 说一下团队的大小,以及在团队中承担的角色
- 说一下如何学习go的
- 写go的时候遇到了哪些问题,怎么解决的
- 如果出现和同事有争议的事情,该如何解决,如果同事一直坚持怎么办
- 领导做出了错误的决策怎么办
反问
- 工作内容,业务
- 工作时间
- 团队的人数,入职培训
HR面!
期待他的好消息。
欢迎关注 ❤
我的文章都首发在同名公众号:王中阳
需要简历优化或者就业辅导,可以直接加我微信:wangzhongyang1993 , 备注:思否或者sf
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。