啊哈哈哈,鸡(面)汤(经)来喽~(得物,B站,百度),附答案总结
文章目录
- 前言
- 得物
- 一面
- 闲聊
- GRPC
- GO
- B站
- 一面
- 闲聊
- 领域驱动设计(DDD)
- Go
- 编程题
- 二面
- DDD
- 数据库
- 设计模式
- 编程题
- 三面
- 闲聊
- 百度
- 一面
- 闲聊
- 领域驱动设计
- GO
- 网络通信
- 数据库
- 算法题
- 二面
- 闲聊
- 领域驱动设计
- 算法题
- 三面
- 总结
前言
2021年底不幸经历了裁员风波,尽管已经预感公司有点风雨飘摇的意思了,但是没有想到来的这么快。
过完国庆后的一周。刚开完技术会议,方案定好,准备大干一场时,收到了leader的飞书,让去会议室聊聊。leader表现的很诚恳,公司也是第一次大规模裁员,赔偿方面也没有卡。
木已成舟,从会议室出来后,笔者开始快速思考下一步该怎么走。第一次亲身经历裁员,内心的紧迫感是前所未有的。随后的时间里,笔者开始开始整理过往工作经历,疯狂复习 + 刷题。在公司办理完所有手续之后,一边开始投递简历,一边继续复习刷题。
最后的结果是,花了2周时间(离职前在公司一周,离职后在家一周),面试了3家公司,分别是得物,B站,百度(之后还有米哈游和字节,不过时间原因没有在面),最终入职了B站。(笔者投递的公司不多,内心紧迫感也比较强烈)
为何选择B站,这里还有个小故事:笔者重度二次元,来上海之后一直想要进B站,无奈2年多以来兜兜转转始终没有机会,没想到最后以这种形式入职了(笑哭)
下面进入正题,来看看笔者所经历的
得物
第一家面试的公司,也是最惨的一次面试,一面挂。(80%的时间处于痛苦面具的状态)
一面
闲聊
聊一下上家公司的技术栈
有没有做过Go项目(笔者之前一直从事python开发,上家开始转型)
GRPC
项目中对GRPC框架进行了封装,主要是封装了什么
这块表达的不是很好,与面试官产生了歧义;其实主要是就是封装了一些常用的功能,比如注册发现,Go程封装,日志/埋点上报,签名等等
Grpc底层的通信协议有什么,简单讲讲
基于HTTP2,自然是HTTP协议,了解Grpc协议,可以参考这篇~
Grpc为什么采用这种协议,而不是别的
这个问题真的是灵魂发问,不了解很难答上,可以参考这条知乎问题
Grpc对HTTP2协议做了哪些改进(这块聊的时候提了一嘴,把自己带坑儿里了)
笔者就答了针对序列化协议做了改进,采用protobuf;支持流式传输;
Grpc的序列化方式有几种
茴香豆的茴字有几种写法类型的问题,貌似笔者就知道protobuf,其他例如json或者xml不知道支不支持。
Grpc底层是靠什么传输的?
底层传输方式基于TCP,传输数据为二进制字节流
GO
简单讲讲Go的高并发优势在哪里
高并发的优势自不必提,回答这个问题主要需要知道Go实现高并发的原理。详细内容可以参这篇文章
简单讲讲GMP模型
这个答案参考上一个问题
Go channel的实现原理
比较典型的考实现原理,这个问题可以参考这篇文章
深拷贝浅拷贝
这里充分解释一下深拷贝和浅拷贝就可以了,可以结合go语言实现举例说明;详细可以参考这篇文章
Go Map的底层实现是什么
又是一个实现原理相关的问题,Map 的实现原理其实大同小异,可能在扩容和处理冲突上有些许区别。关于Go Map的实现原理,可以参考这篇文章
Go Map是协程安全的的吗?如果并发操作一个map对象,安全性怎么保证。
先说结论,Go map不是线程安全的。但是Go语言提供了线程安全的SyncMap
,了解SyncMap
可以参考这篇文章
B站
3面
中规中矩,没有特别难的问题,笔者对DDD有一些浅显的认知,相当一部分时间都在聊关于DDD的架构设计。比较有意思的是,面试过程中只出了“编程题“,对算法的考量比较少。
一面
闲聊
为什么转Go,python 和 Go 主要有哪些区别
各有优劣,没必要捧一踩一。可以围绕区别讲讲;笔者认为Go语言相较于Python更加适合高并发的工程项目。(虽然内心更喜欢python一些)
简历上提到了系统的性能优化,讲讲你做了哪些工作
缓存的设计,带有缓存淘汰策略的内存缓存(LRU / 懒清理)
领域驱动设计(DDD)
DDD设计模式和MVC有什么区别
DDD展开来讲东西比较多,很多人对DDD的理解也不尽相同,可以参考的文章很多,笔者这里列举3篇:
DDD从天书到实践
美团DDD实践
后端开发–DDD编码实践
如果让你来设计会员购板块,你会怎么做
真正的好设计必须要建立在对需求的充分理解上,面试中主要结合DDD讲出自己的理解即可。
Go
Go中并发读10个文件,怎么做,如何保证每个并发任务能够正确执行
不能保证,所以需要完善的异常捕获 / 重试机制。简单发散一下,在读取文件的场景下可能会出现哪些问题(两个方面:并发,读文件)
如果某个任务(Go程)异常阻塞无法释放,怎么处理
这个问题在于无法释放的情况怎么处理,如果明确知道哪里出问题的情况下,其实是比较好解决的,找到引起阻塞的代码修复就好。
如果无法知道是哪里引起的阻塞,这个时候就需要上点小手段了,比如使用Go自带的pprof
性能排查工具排查阻塞的Go程。
可以让阻塞的那个服务(Go程)自行恢复么(不通过主程)
既然服务已经阻塞,我们就要想办法让他能够主动退出,恰好Go语言的context
提供了一个可以定时取消go程的方法WithDeadline
,能够让Go程在运行时间超出阈值后自动取消协程。
编程题
4个G的文件,里面是不重复的数字,用1个G的内存进行排序
一般这种要处理的数据很大,但是给的内存很小的问题都是采用分治法,写伪代码即可
二面
DDD
领取驱动模式设计(DDD)相关讨论
参考一面DDD相关问题
数据库
讲讲你做过的数据库优化(表设计 / 索引)
非常常见的问题,类似的文章有很多了,笔者推荐看看这篇文章
mysql索引底层实现是什么
比上个问题还常见
B+树叶子结点之间连接是单向的吗?为什么
是双向的,可以反过来想,如果是单向的,那么逆向的范围查找就无法支持了。
讲讲你都用过redis里面哪些数据结构,实现过什么功能
这个根据个人经验回答即可,缓存是最为常见的了,笔者使用list实现过延迟队列;使用string实现过分布式锁等等。
redis客户端连接池大小应该如何设置比较合理,主要考虑哪些维度
同样根据个人经验,可以参考这篇文章
如果系统读redis缓存失败了,可能是哪些原因,怎么排查,处理
读取缓存失败,可以考虑
- 客户端链接的时候出现异常
- 没有读取到值
这两个方面来考虑
redis高可用了解吗,redis哨兵模式和redis cluster主要有什么区别
这个真给我问住了,哨兵和集群是redis实现高可用的两种方式,可以参考这篇文章
设计模式
设计模式知道哪些?简单讲讲
单例 / 工厂 / 装饰器 这些最基本的,最好是在多会几个。再后来聊天的过程中,面试官表示基本问到设计模式的时候,大多数面试者就只会刚提到的这几种(实际项目中,针对不同场景,我们还采用了策略模式,责任链模式,模版模式,建造者模式等等多种设计模式)
观察者模式知道吗?
参考上一问,当时笔者是答不出来的
编程题
给你1w个数组成的数组,开10个子任务并发去求和,并返回最终的结果,用Go实现一下
考量的是对Go语言的熟悉程度,可以使用Go提供的waitGroup
保证全部Go程执行完后在求和,比较简单。
三面
闲聊
基本都在聊工作经历,这里就不展开来讲了。
百度
三家中面试体验最好的一家,全程是通过视频面的形式完成的
一面
闲聊
简历上写了做过系统优化,说说你做过的优化操作
根据个人经验回答即可
项目微服务化推进过程中,你都做过些什么
同上
领域驱动设计
领域驱动设计相关讨论
参考B站中DDD部分
为什么DDD在各大公司推进比较困难
这个笔者到没想那么多,回答过程中主要提DDD的规范复杂,团队中个体对于业务的理解偏差等几个方面做了回答
GO
说说Go中哪些操作是并发安全的
Go语言中提供了一些线程安全的数据结构和方法,比如channel
,SyncMap
, once
等等
说说你知道的Go语言的编程规范,说5条吧
这个把笔者问到了,这里贴一篇文章供小伙伴们参考:go语言规范-知乎
网络通信
如果服务间通信失败了,如果是你会如何处理
排查,确定问题原因,紧急情况下需要做对应的降级,熔断
数据库
说说你知道的mysql锁
什么时候mysql会使用锁
说说什么是聚簇索引
上面3问都是Mysql八股文
锁相关:mysql锁总结
索引相关:mysql索引原理
算法题
二叉树层次遍历
百度的算法考察基本来自Leetcode,本题传送门
二面
闲聊
简单介绍下你的项目(技术栈,架构)
根据个人经验回答即可
简历上写了你做过数据库优化,能简单介绍下你都做过哪些事情吗
参考上问数据库优化相关问题
领域驱动设计
领域驱动设计相关讨论
上文提到过了,不再重复
算法题
链表排序
同样是Leetcode原题,本题传送门
三面
这一面主要考察面试者的技术思维,并没有标准答案,这里把面试官提到的问题分享给小伙伴们看看
简单介绍下你自己,注意主要从两方面介绍:
你自己有哪些核心竞争力方面
你对未来3~5年的规划
说下你为什么要转Go
从语言本身,生态,应用场景以及工程性方面去做回答
结合你自己的项目说下你为什么要做微服务化
回答过程中面试官多次强调问题,要回答是什么原因驱使你做微服务化的决策,而不是怎么去做的,并且要结合自己的项目
自己评价一下对于上一个问题的回答是否满意(请用3个关键词 or 短句描述下答的好的地方和不好的地方)
你期望呆在一个什么样的团队
总结
面试复习的过程,也是一个学习的过程,甚至可能是你自我提升最快的过程。虽然很多知识在后续的工作中很少用到,但是扎实的基础可以帮助你在面对挑战时更好的去完成。总之,多多学习,肯定是没有坏处的~
引用一段话做结尾
技术里的二八定律,即用20%的技术可以解决80%的问题
但剩下20%的问题,却需要用80%的技术去解决
啊哈哈哈,鸡(面)汤(经)来喽~(得物,B站,百度),附答案总结相关推荐
- 【智能优化算法】基于全局优化的改进鸡群算法求解单目标优化问题(ECSO)附matlab代码
1 简介 智能算法分为两种,一种是群体智能算法(swarmintelligencealgorithm),该算法大多模拟自然界中动植物的特有行为,并将其表达成数学语言,从而进行迭代寻优,如模拟蝙蝠回声定 ...
- 鸡年关于鸡的一些歇后语
罢鸡钻草垛--顾头不顾尾 板凳上放鸡蛋--危险 半衣捅鸡窝--暗中捣蛋 报晓的公鸡--叫得早 抱鸡婆带娃娃--只管自家一窝 抱窝鸡带息--可忙啦 被打败的公鸡--垂头丧气 曹操吃鸡肋--食之无味,弃之 ...
- 私房小菜菜谱和煲汤大全汇总
一.[煲汤的知识] "汤"的文化历史 http://post.baidu.com/f?kz=13972875 汤水 清润当道 http://post.baidu.com/f?kz= ...
- 家用切鸡块的机器人_好的整鸡斩块机
牛羊肉切片机在安装中需要注意的事项:1.牛羊肉切片机的刀刃长短常锋利的,所以需要先安装护刀罩.2.刀具固定螺丝只需顺时针旋转可取下.3.松开牛羊肉切片机切片刀的倾斜角度调整扳手.4.移动刀片倾斜角度整 ...
- 猫和老鼠汤姆看java_《猫和老鼠》最可怕的瞬间!原来看汤姆和杰瑞都会吓到孩子!...
<猫和老鼠>一部老少皆宜的动画片,曾先后获得7次奥斯卡金像奖,作为脑残粉的小编碧波我,每一版都很喜欢!我不管!就是每一版都喜欢咋的! 不过最近听网友们说,其实小时候看<猫和老鼠> ...
- 商汤三体梦幻联动,能遭遇水滴的那种元宇宙要来了!我在现场听见了次元壁破碎的声音...
鱼羊 萧箫 发自 世界人工智能大会 量子位 报道 | 公众号 QbitAI 给你一个机会,穿越到<三体>世界,你愿意吗? 成为小说角色之一,像罗辑.云天明一样尽全力拯救地球人类:或是当个普 ...
- 怎么给二年级小学生讲鸡兔同笼问题
通常有抬腿藏腿法,假设代数法,比例法等. 但是这些统统的都不具有通用性和代表性. 最好好的办法是这样的; 假设我们的问题先是10只动28只脚 假如我就是一个脱线了的小朋友,那怎么做题呢?蒙呗. 先猜笼 ...
- C/C++经典例题:百钱百鸡
c++程序[百钱买百鸡]的解法 题型介绍: 百鸡问题是一个数学问题, 出自中国古代约5-6世纪成书的<张邱建算经>, 是原书卷下第38题, 也是全书的最后一题, 该问题导致三元不定方程组, ...
- 商汤给元宇宙理了理“三观”
杨净 发自 凹非寺 量子位 | 公众号 QbitAI 元宇宙,正在野蛮生长,比以往任何时候更甚. 一面是持续看好的市场表现.据麦肯锡数据显示,今年上半年有超过1200亿美元投向元宇宙,已是去年570亿 ...
最新文章
- Blender 2.9中的真实感三维产品全流程制作学习教程
- Python访问MySQL
- java中一些入门级技巧
- Exchange2010恢复已禁用邮箱后用户登录会出错
- drupal node 显示不同字段 node.tpl.php,修改Drupal Taxonomy Term列表显示方法
- python 使用jinjia2 生成文件的空格处理
- 如何使Flash在Internet Explorer的64位版本中工作
- linux 文件按时间 函数,[Linux文件属性]使用utime函数操作文件的时间参数
- python 心电处理包_python 黏包现象及其解决方案
- excel日期格式改不了_这一类型的Excel快捷键,为什么如此好用
- Ubuntu18.04(Gnome桌面)主题美化,Mac私人定制
- 北京某数据中心全年用水量分析
- 针对华硕飞行堡垒系列无法显示网卡驱动的问题
- MTK6737 WCN省晶体问题
- Windows编程画太极图
- UBUNTU教程之菜鸟飞飞
- python脚本备份linux,linux利用bypy自动备份文件上传百度云
- codeblocks安装
- Mysql数据库宾馆管理系统_酒店宾馆管理系统 springboot项目 mysql数据库 登陆界面 前端后台 layui.rar...
- 定位决定地位---职业程序员未必就是代码民工
热门文章
- Zhong__Python reduce()
- SQL Server数据库插入数据中文显示乱码问题
- 机械革命台式计算机,机械革命台式机怎么样
- 离线语音识别库_离线语音识别_离线语音识别sdk - 云+社区 - 腾讯云
- 简述现代计算机系统如何进行多级划分,现代计算机系统是如何进行多级划分?...
- Android——滑动监听SwipeRefreshLayout+瀑布流Recycl+Butter自动生成
- Flutter异常收集
- 网鼎杯半决赛 pwn1
- ubuntu12.04 飞鸽传书安装
- java并发编程2-一起看Happens-Before 规则的前因后果