鹅厂面试委员会面经
上周刚刚经历面试委员会的面试,因为网上相关的资料很少,所以记录一下,当作一个data point来帮助大家准备。
经历
工作经验3年,PCG后端岗位。 技术栈nodejs,mongoDb,python,redis
面试流程
- 简单自我介绍
- 主要负责的项目介绍
- 项目中感觉收获最大研究最深的一个项目详细介绍一下
- 深挖技术
- 如何在nodejs里实现多线程
- 如何保证前后端的数据同步
- mongoDb的比较优势
- 如果用户量增加,数据流变大,系统会有哪些风险
- 从什么角度考虑去解决这些风险
- Redis在系统中的作用
- 设置Redis的淘汰策略时是如何考虑的
- 平常公司有什么流程上的安排来保证代码质量
- Code Review
- Pair Programming
- CI,unit tests,integration tests,end to end tests
- CD,各种test environment
- 在几百个服务器相互依赖的情况下如何设计测试使得测试的运行效率变快
总结
整体来讲整个面试流程都很中规中矩,问到的问题也都是简历上面有的东西,可能也是我简历上的内容比较丰富,可以问的地方很多。
把简历上涉及到的知识点准备全面
面试到达后期,基本上很少有人再问基础知识了。大部分都是按照简历上所呈现的项目和技术栈,来详细考察对项目的抽象化思考和对技术的理解。 比如说系统里用到了多线程,为什么一定要用多线程,解决了什么问题,引入了什么风险,在什么情况下这种风险会比较大,整个系统的运行环境是否会将风险变大。 再比如技术上,redis部署时考虑了什么问题,它是如何解决高可用性的,为什么redis的性能好,在性能好的同时是如何保证数据不丢失的。redis的淘汰策略的实现是如何的。在多线程使用情况下,redis提供了什么样的解决方案可以辅助多线程的数据安全。 基本上所问的问题都会比较全面,是在工作中做技术选型的时候很常见但都要考虑到的问题。
技术理解要深入并且视野要广阔
在讨论某一项技术的时候,面试人会将自己对技术的理解带入到对话当中。此时的对话是一个双向的,纯交流性质的,双方观点可以互斥,但被面试的人在表达观点的时候一定要结合自己工作的经验来阐述。包括对这个技术的展望和比较。 例如mongoDb相关的对话中,会被问到为什么mongoDb在小公司开发的过程中有优势。此数据库跟其余的数据库相比较有什么有点和劣势。之后业务的发展趋势是否能够和数据库的选型相匹配?
不仅要理解现有实践,而且要展望未来可能遇到的危机
总来来说感觉工程师的工作之所以有价值,是因为当设计一个软件或者功能的时候,不仅能够解决当前的问题,而且能够设计出一套系统,在之后业务发展的时候,可以做到花费极低的成本做出灵活的修改以实现新功能。这是OOD或者说系统设计的精髓所在。所以在了解当前业务的情况下,还要思考之后可能会遇到的问题,包括但不限于用户量增加,访问量剧增,服务器宕机,网络中断,团队人员配置等。在考虑到这些问题之后,有选择性的做作出合理的设计来规避这些问题,才能够达到最优的设计。而对于这些问题的思考和讨论,是一个工程师功力的体现。 在面试的过程中被问到这种发散性的问题,有时没准备过,但只要之前有过思考,临时性的快速语言组织就能够达到面试要求。
后记
网页编辑器真的有BUG,之前在网页上写了一整篇,临时提交的时候自动刷新,结果整个文章都丢失了,还重新码了一遍。好烦。 不过希望能帮助到大家吧。
全部评论
(0) 回帖