鹅厂面试

作者:codegoose

https://segmentfault.com/a/1190000017864721

经过半年的沉淀,加上对MySQL,redis和分布式这块的补齐,终于重拾面试信心,再次出征。

鹅厂

面试职位:go后端开发工程师,接受从Java转语言

都知道鹅厂是cpp的主战场,而以cpp为背景的工程师大都对os,network这块要求特别高,不像是Java这种偏重业务层的语言.

之前面试Java的公司侧重还是在数据结构、网络、框架、数据库和分布式。所以OS这块吃的亏比较大

一面:基础技术面

电话面试,随便问了些技术问题,最后还问了个LeetCode里面medium级别的算法题,偏简单。大概整理回忆了一下:

  1. redis有没有用过,常用的数据结构以及在业务中使用的场景。(redis 数据类型详解 以及 redis适用场景场合redis5种数据结构讲解及使用场景
  2. redis的hash怎么实现的?(美团针对Redis Rehash机制的探索和实践redis渐进式 rehash
  3. rehash过程讲一下和JavaHashMap的rehash有什么区别? (HashMap的内部实现机制,Hash是怎样实现的,什么时候ReHash  redis rehash  redis rehash
  4. redis和memcache区别?(Redis和Memcache对比及选择
  5. redis cluster有没有了解过,怎么做到高可用的? (Redis Cluster 分区实现原理高可用Redis:Redis Cluster
  6. 说说redis的持久化机制,为啥不能用redis做专门的持久化数据库存储?(Redis提供的持久化机制(RDB和AOF)Redis持久化
  7. 了不了解tcp/udp,说下两者的定义,tcp为什么要三次握手和四次挥手? (TCP和UDP的最完整的区别理解TCP/IP三次握手与四次挥手的正确姿势
  8. tcp怎么保证有序传输的,讲下tcp的快速重传和拥塞机制 (TCP的可靠传输的保证和拥塞控制
  9. 知不知道time_wait状态,这个状态出现在什么地方,有什么用?
  10. udp是不可靠的传输,如果你来设计一个基于udp差不多可靠的算法,怎么设计?(UDP如何实现可靠传输
  11. http与https有啥区别?(我是这样理解HTTP和HTTPS区别的)说下https解决了什么问题,怎么解决的?说下https的握手过程。 (HTTP,SSL/TLS和HTTPS协议的区别与联系
  12. 看你项目里面用了etcd,讲解下etcd干什么用的,怎么保证高可用和一致性? (etcd:从应用场景到实现原理的全方位解读
  13. 既然你提到了raft算法,讲下raft算法的基本流程? (一文搞懂Raft算法
  14. raft算法里面如果出现脑裂怎么处理?(为 Raft 引入 leader lease 机制解决集群脑裂时的 stale read 问题
  15. 有没有了解过paxos和zookeeper的zab算法,他们之前有啥区别? (Paxos算法与Zookeeper分析,zab (zk)raft协议(etcd) 8. 与Galera及MySQL Group replication的比较
  16. 你们后端用什么数据库做持久化的?有没有用到分库分表,怎么做的?
  17. 索引的常见实现方式有哪些,有哪些区别?  数据库索引类型及实现方式
  18. MySQL的存储引擎有哪些,有哪些区别? Mysql索引面试题
  19. InnoDB使用的是什么方式实现索引,怎么实现的?说下聚簇索引和非聚簇索引的区别?   Mysql索引面试题
  20. 有没有了解过协程?说下协程和线程的区别? 进程和线程、协程的区别
  21. 算法题一个,剑指offer第51题,数组中的重复数字? 找出数组中重复的数字
  22. MySQL这块很熟了,包括索引,锁,事务机制以及mvcc  MySql 三大知识点——索引、锁、事
  23. raft算法
  24. 协程和线程,主要说了go程和Java线程的区别以及go程的调度模型
  25. 面试官提示没有提到线程的有内核态的切换,go程只在用户态调度
  26. 最后一个算法题,首先说使用HashMap来做,说空间复杂度能不能降到O(1),后面想了大概5min才想出来原地置换的思路

大概说下我自己的回答情况,redis这块没啥问题,具体rehash有印象是渐进式的,但是具体原理可能答的有点出入。

tcp的 time_wait 这块答的不是很好,之前没有了解过quic机制的实现,所以问可靠性udp的时候,基本上脑子里就照着tcp的实现在说。

https这块没啥说的,之前项目里面有用到类似的东西,研究的比较清楚了。

raft算法这个因为刚好在刷6.824(才刷到lab2。。。),答的也凑合,不过paxos和zab算法确实不熟悉,直接说不会。

MySQL这块很熟了,包括索引,锁,事务机制以及mvcc等等,没啥说的,都已经补齐了。

协程和线程,主要说了go程和Java线程的区别以及go程的调度模型。面试官提示没有提到线程的有内核态的切换,go程只在用户态调度。

最后一个算法题,首先说使用HashMap来做,说空间复杂度能不能降到O(1),后面想了大概5min才想出来原地置换的思路。

总得来说,答的还行,一面就这么过了。

二面:项目技术面

二面从基础技术考察转移到了项目,主要问了我下面一些问题:

  1. 针对自己最熟悉的项目,画出项目的架构图,项目主要的数据表结构。【现有项目经验、思考、难点、改进点、后续重新做类似项目思考】
  2. 说说项目中使用到的技术点,项目的总峰值qps,时延。【golang 分布式部署 nosql数据库 redis数据库 qps 消息存储 消息重试 消息丢失】
  3. 有没有分析过时延出现的耗时分别出现在什么地方,项目有啥改进的地方没有? 【全链路监控,耗时主要在第三方推送以及连接过程】
  4. 如果请求出现问题没有响应,如何定位问题,说下思路? 【】
  5. tcp 粘包问题怎么处理?【规定格式截取或者定长截取】
  6. 然后还问了下缓存更新的模式,以及会出现的问题和应对思路?
  7. 除了公司项目之外,业余时间有没有研究过知名项目或做出过贡献?
  8. 这一面答的也比较顺利,因为都是围绕项目,自己很熟悉,基本都没有啥问题,除了面试官说项目经验稍弱之外,其余还不错。
三面:综合技术面

这面面的是阵脚大乱,面试官采用刨根问底的方式提问,终究是面试经验不够,导致面试的节奏有点乱。举个例子:

其中有个题:go程和线程有什么区别?

:起一个go程大概只需要4kb的内存,起一个Java线程需要1.5MB的内存;go程的调度在用户态非常轻量,Java线程的切换成本比较高。

接着问为啥成本比较高?因为Java线程的调度需要在用户态和内核态切换所以成本高?为啥在用户态和内核态之间切换调度成本比较高?我简单说了下内核态和用户态的定义。

接着问,还是没有明白为啥成本高?心里瞬间崩溃,没完没了了呀,OS这块依旧是痛呀,支支吾吾半天放弃了。

后面所有的提问都是这种模式,结果回答的节奏全无,感觉被套路了。大多度都能回答个一二甚至是一二三,但是再往后或者再深入的OS层面就GG了。

后面问了下项目过程中遇到的最大的挑战,以及怎么解决的?

还问了一个问题定位的问题,服务器CPU 100%怎么定位?

可能是由于平时定位业务问题的思维定势,加之处于蒙蔽状态,随口就是:

  • 先查看监控面板看有无突发流量异常

  • 接着查看业务日志是否有异常,针对CPU100%那个时间段,取一个典型业务流程的日志查看

  • 最后才提到使用top命令来监控看是哪个进程占用到100%

果然阵脚大乱,张口就来,捂脸。。。 

对这个问题,本来正确的思路应该是先用top定位出问题的进程,再用top定位到出问题的线程,再打印线程堆栈查看运行情况

这个流程换平时肯定能答出来,但是,但是没有但是。还是得好好总结。

最后问了一个系统设计题目(朋友圈的设计),白板上面画出系统的架构图,主要的表结构和讲解主要的业务流程,如果用户变多流量变大,架构将怎么扩展,怎样应对?

这个答的也有点乱,直接上来自顾自的用了一个通用的架构,感觉毫无亮点。

后面反思应该先定位业务的特点,这个业务明显是读多写少。然后和面试官沟通一期刚开始的方案的用户量,性能要求,单机目标qps是什么等等?

在明确系统的特点和约束之后再来设计,而不是一开始就是用典型互联网的那种通用架构自顾自己搞自己的方案。

面试结果:3天后收到短信,被拒

总结:
  1. tcp/udp,http和https还有网络这块(各种网络模型,已经select,poll和epoll)一定要非常熟悉

  2. 一定要有拿的出手的项目经验,而且要能够讲清楚,讲清楚项目中取舍,设计模型和数据表

  3. 分布式要非常熟悉

  4. 常见问题定位一定要有思路

  5. 操作系统,还是操作系统,重要的事情说三遍

  6. 系统设计,思路,思路,思路,一定要思路清晰,一定要总结下系统设计的流程

  7. 一点心得,平时blog和专栏看的再多,如果没有自己的思考不过是过眼云烟,根本不会成为自己的东西,就像内核态和用户态,平常也看过,但是没细想,突然要自己说,还真说不出来,这就很尴尬了。勿以浮沙筑高台,基础这种东西还是需要时间去慢慢打牢,多去思考和总结。

原文地址:https://www.cnblogs.com/williamjie/p/11113494.html