今天和大家分享一下来自粉丝的面经投稿,他在最近半个月内疯狂的面试,光百度就约面了两个岗位,一共进行了6场面试,并且其中一个进到了 HR 面。
他的基本情况是这样的:统招本科,计算机相关专业,拥有八年的工作经验,目前处于离职状态,之前的薪资 20K+ ,期望薪资 25K+ 。
大家可以看一下他下面分享的面经的难度:
工作职责:
职责要求:
高并发,消息队列,分库分表,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进度
团队解散了,协议离职
消息队列:数据倾斜问题,数据不丢,重复消费
redis:使用hash以及Pipline
数据库:增加索引,分库分表
这里聊了很多细节问题,根据业务来说这个东西
信号量,共享内存(这块感觉还有别的可以说)
分页,分块,FIFO,LRU(这块感觉还有别的可以说)
说写了爬虫,爬了百度,弹出了验证码
AOF,RDB还有混合持久化
多线程,不支持持久化(具体不了解)
加锁,解锁
top检查cpu使用,网络问题(在国内访问国外),内存,磁盘使用是否在临界区
没搞定,就说了grep,awk的一些命令
df,du查看磁盘
这块说有什么命令可以列出来,但是具体忘了
ES是搜索引擎,redis是数据结构数据库,可以做很多事情比如消息队列,geo啥的
创建链表 1->2->3->4->5 输入2,让链表偏移 4->5->1->2->3
写出来了,但是有bug,说是看一下代码风格,说一下写题目的思路
暂时还没有
深耕服务端,了解架构,有机会也可以走向管理
- 介绍了一下业务
- 培训,晋升
- 福利
工作职责:
任职资格:
会的啊,python后端,java写android,C/C++配合Lua开发固件
比如说map,多个协程访问,可以加锁。
atomic包的CompareAndSwapInt32
编译器使用 race 发现竞争问题
加读写锁,使用sync map
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
加锁可以解决
给权限,4读,2写,1执行
文件所有者,文件所属的组,其他的用户
cd,ls,ps,top,
lscpu,cat,touch,mkdir,
grep,awk,
df,du,
ifconfig,netstat,ip addr
限制cpu和内存资源用的
使用yaml文件,管理启动和停止多个容器用的
SELECT dpid
FROM employees
GROUP BY dpid
HAVING AVG(age) > 35;
打开慢查询的日志,设置慢查询的超时时间,用explain显示执行计划
将type如果是all或者是index优化到range会比较好
索引优化
不是回答的很好,应该是索引的范围扫描
ref,system,这块没答全
老问题,(a,b,c)顺序问题
这块a肯定是能有的,b是in不知道能不能用,得拿sql试试
Zset
bitmap实现,多个函数落在里面,如果说在,不一定在,如果说不在则一定不在,优化的话,增加bitmap的长度,设置函数的个数
既不在redis,也不在数据库。使用布隆过滤器过滤,加载空的key,业务层增加参数校验,使用分布式锁减少访问数据库
redis知道,zoomkeeper不太懂
谁记这东西啊(2.6.12)
工厂,抽象工厂,单例,创建对象用的
责任链,gin和goframe的中间件调next用的
装饰器,python中用来包装函数,然后可以用来计时
适配器,统一外部接口
观察者,回调函数实现异步
这种类型的题目都没啥好玩的,不过用的是他们的编辑器,没啥提示,有bug但是最后解决了
- zoomkeeper如何实现分布式锁,刚刚没答出来:他说自己去搜
- 业务有啥:说文库,ai生成内容图表,脑图啥的,等过来就知道了
- 上班时间:10点到晚上9点(这么卷!!!)
会的啊,python后端,java写android,C/C++配合Lua开发固件
变量类型不确定,有全局变量引用,给slice分配的长度太大,给slice分配的长度不定
使用gcflags case by case 分析
这快没看,然后就说了下gin中间件的实现
说了有json,然后说gin的不太熟,但是goframe的有 method方法,v参数校验,dc描述。
gin应该和goframe差不多
说了数据结构里面有哪些字段用来干啥的,说了一下channel的一些用法以及注意事项
mutex,rwmutex,sync.map,sync.once,sycn.pool
说了一下他们是干啥的
1XX,2XX,3XX,4XX,5XX
这个没碰到过(查了一下是Nginx定义的)
原子操作,多个操作可以用lua脚本,也可以用事务,事务用起来比较坑,回滚啥的
底层B+树,不自增的话插入数据容易导致节点分裂和合并,影响效率
不会变,删除只是标记为删除,要把表删了才全删了,因此删除不会释放磁盘的空间
先说了表的字段数量优化,再说表的字段类型优化,尽量选容量少的
然后引申到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小时了啊)
- 工作内容,业务
- 工作时间
- 团队的人数,入职培训
我们搞了一个免费的面试真题共享群,互通有无,一起刷题进步。
没准能让你能刷到自己意向公司的最新面试题呢。
感兴趣的朋友们可以加我微信:wangzhongyang1993,备注:csdn面试群。