文章目录

  • 前言
  • 得物
    • 一面
      • 闲聊
      • 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缓存失败了,可能是哪些原因,怎么排查,处理

读取缓存失败,可以考虑

  1. 客户端链接的时候出现异常
  2. 没有读取到值

这两个方面来考虑

redis高可用了解吗,redis哨兵模式和redis cluster主要有什么区别

这个真给我问住了,哨兵和集群是redis实现高可用的两种方式,可以参考这篇文章

设计模式

设计模式知道哪些?简单讲讲

单例 / 工厂 / 装饰器 这些最基本的,最好是在多会几个。再后来聊天的过程中,面试官表示基本问到设计模式的时候,大多数面试者就只会刚提到的这几种(实际项目中,针对不同场景,我们还采用了策略模式,责任链模式,模版模式,建造者模式等等多种设计模式)

观察者模式知道吗?

参考上一问,当时笔者是答不出来的

编程题

给你1w个数组成的数组,开10个子任务并发去求和,并返回最终的结果,用Go实现一下

考量的是对Go语言的熟悉程度,可以使用Go提供的waitGroup保证全部Go程执行完后在求和,比较简单。

三面

闲聊

基本都在聊工作经历,这里就不展开来讲了。

百度

三家中面试体验最好的一家,全程是通过视频面的形式完成的

一面

闲聊

简历上写了做过系统优化,说说你做过的优化操作

根据个人经验回答即可

项目微服务化推进过程中,你都做过些什么

同上

领域驱动设计

领域驱动设计相关讨论

参考B站中DDD部分

为什么DDD在各大公司推进比较困难

这个笔者到没想那么多,回答过程中主要提DDD的规范复杂,团队中个体对于业务的理解偏差等几个方面做了回答

GO

说说Go中哪些操作是并发安全的

Go语言中提供了一些线程安全的数据结构和方法,比如channelSyncMap, once等等

说说你知道的Go语言的编程规范,说5条吧

这个把笔者问到了,这里贴一篇文章供小伙伴们参考:go语言规范-知乎

网络通信

如果服务间通信失败了,如果是你会如何处理

排查,确定问题原因,紧急情况下需要做对应的降级,熔断

数据库

说说你知道的mysql锁

什么时候mysql会使用锁

说说什么是聚簇索引

上面3问都是Mysql八股文
锁相关:mysql锁总结
索引相关:mysql索引原理

算法题

二叉树层次遍历

百度的算法考察基本来自Leetcode,本题传送门

二面

闲聊

简单介绍下你的项目(技术栈,架构)

根据个人经验回答即可

简历上写了你做过数据库优化,能简单介绍下你都做过哪些事情吗

参考上问数据库优化相关问题

领域驱动设计

领域驱动设计相关讨论

上文提到过了,不再重复

算法题

链表排序

同样是Leetcode原题,本题传送门

三面

这一面主要考察面试者的技术思维,并没有标准答案,这里把面试官提到的问题分享给小伙伴们看看

简单介绍下你自己,注意主要从两方面介绍:

你自己有哪些核心竞争力方面

你对未来3~5年的规划

说下你为什么要转Go

从语言本身,生态,应用场景以及工程性方面去做回答

结合你自己的项目说下你为什么要做微服务化

回答过程中面试官多次强调问题,要回答是什么原因驱使你做微服务化的决策,而不是怎么去做的,并且要结合自己的项目

自己评价一下对于上一个问题的回答是否满意(请用3个关键词 or 短句描述下答的好的地方和不好的地方)

你期望呆在一个什么样的团队

总结

面试复习的过程,也是一个学习的过程,甚至可能是你自我提升最快的过程。虽然很多知识在后续的工作中很少用到,但是扎实的基础可以帮助你在面对挑战时更好的去完成。总之,多多学习,肯定是没有坏处的~

引用一段话做结尾

技术里的二八定律,即用20%的技术可以解决80%的问题
但剩下20%的问题,却需要用80%的技术去解决

啊哈哈哈,鸡(面)汤(经)来喽~(得物,B站,百度),附答案总结相关推荐

  1. 【智能优化算法】基于全局优化的改进鸡群算法求解单目标优化问题(ECSO)附matlab代码

    1 简介 智能算法分为两种,一种是群体智能算法(swarmintelligencealgorithm),该算法大多模拟自然界中动植物的特有行为,并将其表达成数学语言,从而进行迭代寻优,如模拟蝙蝠回声定 ...

  2. 鸡年关于鸡的一些歇后语

    罢鸡钻草垛--顾头不顾尾 板凳上放鸡蛋--危险 半衣捅鸡窝--暗中捣蛋 报晓的公鸡--叫得早 抱鸡婆带娃娃--只管自家一窝 抱窝鸡带息--可忙啦 被打败的公鸡--垂头丧气 曹操吃鸡肋--食之无味,弃之 ...

  3. 私房小菜菜谱和煲汤大全汇总

    一.[煲汤的知识] "汤"的文化历史 http://post.baidu.com/f?kz=13972875 汤水 清润当道 http://post.baidu.com/f?kz= ...

  4. 家用切鸡块的机器人_好的整鸡斩块机

    牛羊肉切片机在安装中需要注意的事项:1.牛羊肉切片机的刀刃长短常锋利的,所以需要先安装护刀罩.2.刀具固定螺丝只需顺时针旋转可取下.3.松开牛羊肉切片机切片刀的倾斜角度调整扳手.4.移动刀片倾斜角度整 ...

  5. 猫和老鼠汤姆看java_《猫和老鼠》最可怕的瞬间!原来看汤姆和杰瑞都会吓到孩子!...

    <猫和老鼠>一部老少皆宜的动画片,曾先后获得7次奥斯卡金像奖,作为脑残粉的小编碧波我,每一版都很喜欢!我不管!就是每一版都喜欢咋的! 不过最近听网友们说,其实小时候看<猫和老鼠> ...

  6. 商汤三体梦幻联动,能遭遇水滴的那种元宇宙要来了!我在现场听见了次元壁破碎的声音...

    鱼羊 萧箫 发自 世界人工智能大会 量子位 报道 | 公众号 QbitAI 给你一个机会,穿越到<三体>世界,你愿意吗? 成为小说角色之一,像罗辑.云天明一样尽全力拯救地球人类:或是当个普 ...

  7. 怎么给二年级小学生讲鸡兔同笼问题

    通常有抬腿藏腿法,假设代数法,比例法等. 但是这些统统的都不具有通用性和代表性. 最好好的办法是这样的; 假设我们的问题先是10只动28只脚 假如我就是一个脱线了的小朋友,那怎么做题呢?蒙呗. 先猜笼 ...

  8. C/C++经典例题:百钱百鸡

    c++程序[百钱买百鸡]的解法 题型介绍: 百鸡问题是一个数学问题, 出自中国古代约5-6世纪成书的<张邱建算经>, 是原书卷下第38题, 也是全书的最后一题, 该问题导致三元不定方程组, ...

  9. 商汤给元宇宙理了理“三观”

    杨净 发自 凹非寺 量子位 | 公众号 QbitAI 元宇宙,正在野蛮生长,比以往任何时候更甚. 一面是持续看好的市场表现.据麦肯锡数据显示,今年上半年有超过1200亿美元投向元宇宙,已是去年570亿 ...

最新文章

  1. Blender 2.9中的真实感三维产品全流程制作学习教程
  2. Python访问MySQL
  3. java中一些入门级技巧
  4. Exchange2010恢复已禁用邮箱后用户登录会出错
  5. drupal node 显示不同字段 node.tpl.php,修改Drupal Taxonomy Term列表显示方法
  6. python 使用jinjia2 生成文件的空格处理
  7. 如何使Flash在Internet Explorer的64位版本中工作
  8. linux 文件按时间 函数,[Linux文件属性]使用utime函数操作文件的时间参数
  9. python 心电处理包_python 黏包现象及其解决方案
  10. excel日期格式改不了_这一类型的Excel快捷键,为什么如此好用
  11. Ubuntu18.04(Gnome桌面)主题美化,Mac私人定制
  12. 北京某数据中心全年用水量分析
  13. 针对华硕飞行堡垒系列无法显示网卡驱动的问题
  14. MTK6737 WCN省晶体问题
  15. Windows编程画太极图
  16. UBUNTU教程之菜鸟飞飞
  17. python脚本备份linux,linux利用bypy自动备份文件上传百度云
  18. codeblocks安装
  19. Mysql数据库宾馆管理系统_酒店宾馆管理系统 springboot项目 mysql数据库 登陆界面 前端后台 layui.rar...
  20. 定位决定地位---职业程序员未必就是代码民工

热门文章

  1. Zhong__Python reduce()
  2. SQL Server数据库插入数据中文显示乱码问题
  3. 机械革命台式计算机,机械革命台式机怎么样
  4. 离线语音识别库_离线语音识别_离线语音识别sdk - 云+社区 - 腾讯云
  5. 简述现代计算机系统如何进行多级划分,现代计算机系统是如何进行多级划分?...
  6. Android——滑动监听SwipeRefreshLayout+瀑布流Recycl+Butter自动生成
  7. Flutter异常收集
  8. 网鼎杯半决赛 pwn1
  9. ubuntu12.04 飞鸽传书安装
  10. java并发编程2-一起看Happens-Before 规则的前因后果