Skip to content

Zheaoli/2019_interview

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 

Repository files navigation

2018年末的后端面试经历(两年经验/非科班):饿了么,豆瓣,用钱宝

18年年末,因为个人原因(身体,规划原因)从老东家离职,最后拿到了饿了么基础框架部的 Offer。在有点不太顺畅的18年末算是一个 Happy Ending

全文是流水账,大家随意看看就好

离职&&准备

我是16年学习 Python ,然后16年6月工作,然后半年后跳到前司(一个创业型互联网金融公司,换句话说,是放贷的)做风控工程的开发,主体而言,在老东家做的事偏向于基础服务和组件,同时偶尔会做一些业务需求。因为离职比较突然,同时我自己有一些存款,所以原定的打算是在年前先通过面试来看看目前的市场动态,以及进一步确认我自己适合的方向,当然如果年前能拿到合适的 Offer 是最好的啦。

我自己筛选公司的时候,我自己的选择目标是

  • 对应的方向以 Python 为主体开发语言(虽然我平时也写 Java/Golang, 但是平心而论熟练度并没有 Python 高)

  • 有不错的技术储备

  • 因为目前互联网整体环境不太好,所以需要找有一定盈利能力,短期内不会有裁员风险的公司

在确定未来目标后,我想了想我之前是面试人的思路

  • 算法/数据结构题,确认候选人代码能力不错

  • 针对其用过的相关组件深挖,确认他/她有尝试过深入学习,有一定的学习欲望

  • 基于他/她做过的场景进行扩展一下,看一下他/她的思路

所以基于这样的原则,我开始着手做这几方面的内容

  • 系统的刷题,这里推荐一个仓库CSNotes

  • 去复习使用过组件的源码,包含 CPython,Redis,Flask,Gunicorn,Gevent,asyncio 等

  • 去复习操作系统和网络编程的东西,我主体以两本书为主《Unix Network Programming》,《Advanced Unix Programming》

  • 去复习一些重要的语言/网络协议提案,比如 Python 的 PEP 333/3333,HTTP 的 RFC 2616 , HTTPS 的 RFC 2818/2660

  • 系统的重新思考之前做过的项目,为什么会这么做,当时的决策思路,以及可能的扩展方向等

在12月底开始正式面试

面试

用钱宝

用钱宝业务模式和老东家一样,都是做用户现金贷业务的,整体技术栈以 Python2 + Django 为主。面试是我最累的一次。共四面,从下午2.30到晚上9点过

一面

一面主要是针对我自己项目来问的

  • 你们之前为什么要做链路追踪系统?

  • 你们觉得你们链路追踪系统还能怎么扩展

  • 如果现在一个机器上出现了大量的 CLOSE_WAIT ,你会怎么排查

  • 有什么想问我的

二面

二面官主要是偏底层一些打法

  • 如果让你实现一个异步事件循环驱动你会怎么做

  • CLOSE_WAIT 什么情况下会产生

  • 一个二分查找的题目

  • 有什么想问我的

三面

三面官主体给的压力很大,而且可能有一些错误

  • 如果一个对象引用计数为 0 ,这个对象会不会回收?(我说不会,面试官不太满意)

  • Python 对于一个对象回收的流程

  • 两道算法题

  • 有什么想问我的

四面

四面官是风控方向的人,整个四面围绕一个具体的项目设计的问题来问的

现在有海量的结构化的数据需要储存,怎么样在尽可能节约成本的情况下,达成相关的查询/写入性能指标

面试体验

一些主观评价

  • 面试难度:正常偏难,强度高

  • 面试体验:还不错

  • 面试偏向:工程能力

饿了么

饿了么是12月底开始第一轮面试,不过整体流程相对较长,但是体验很棒

一面

一面是松鼠奥利奥老师,主体来讲是偏向于底层和项目细节

  • 我看你之前遇到过比较严重的内存泄露,能聊聊具体情况和怎么排查的么?

  • 你能详细说说 Python 的 GC 流程和算法么?

  • 我看你用过 Gevent ,能聊聊怎么实现的么?(因为我虽然看过 Gevent 的源码,但是并不算太有把握,就把面试官引导向我更熟悉的 asyncio,面试官也挺配合我的)

  • 能聊聊 asyncio 怎么实现的么(这种类型的问题,其实就是想让你以你的思路来实现一下)

  • 能聊聊几种多路复用的差异么?(我顺便扩展了一下,我自己处理过的一些问题)

  • MySQL 的事务隔离级别

  • 现在我们通过 ssh 连上服务器开启了一些作业进程,那么系统怎么保证在网络断开的时候,ssh 会安全的关闭所有进程呢?

  • 操作系统怎么保证内存在物理内存上彼此隔离(这个真没答上来,没学过操作系统太悲伤)

  • 当 accept 一个连接后,这个连接是不是真正建立了

  • 你有什么想问我的

二面

二面隔了两个星期,主体的问题偏向于协议和一些职业素养和方法论的内容

  • 你能描述一下 TCP 协议的报文结构么?

  • 我看你之前处理过 https 连接泄露的问题,能聊聊么(这个问题还有几个子问题,不过主体还是围绕 https 的一些细节来展开的)

  • 为什么会有 TIME_WAIT

  • 我看你之前推动过很多东西,那么你怎么去说服同事的?

  • 在推动过程中如果同事有抵触情绪你会怎么处理

  • 你有什么想问我的

三面

这次三面放在 HR 面之后,主体围绕一个项目来问的

  • 能介绍下你们风控系统和链路追踪之间的关系么?

  • 你们当时构建的链路的模型是怎么样的

  • 你们最后的信息储存展现的方案怎么设计的

  • 你们怎么将其应用在线上项目的

  • 我们这边以后可能会往 Java 转,你愿意么?

面试体验

  • 面试难度:偏难,强度一般

  • 面试体验:很棒

  • 面试偏向:系统,网络,技术细节,工程能力

豆瓣

豆瓣的面试可能是我见过的面试里面涉及到技术细节最少的,偏向于对人整体思维素质的考察

一面

一面是笔试

  • 两道算法题,一道 Hard,一道 Medium

  • 设计豆瓣的点赞系统的表结构

二面

二面主体是大致聊天

  • 对于 Python 2/3 的看法

  • 对于目前 Python 异步方案的看法

  • 自己的职业规划

三面

三面围绕一个问题

  • 假设用户在某年某月某日注册,在以后每年的某月某日前N天开始,我们都要给用户发祝福消息。你会怎么实现?以及你的 test case 怎么做?

面试体验

  • 面试难度:中等,强度一般

  • 面试体验:很棒

  • 面试偏向:基础和思维素质

总结

整体来看,最后能后能有 Happy Ending 也是运气不错

这里借用一些aylei/interview的总结

回头看面试的过程,有好多不尽如人意的地方,不过最后能够拿到三家的 offer 还是很幸运。最后再做一些补充性的小结:

一些经验:

  • 简历里写了的项目,以及熟练程度在"掌握"以上的领域与中间件要好好准备,当面试官问你一个偏门的问题时,他内心其实也没希望你能答上来。而当面试官问你简历上涉及的问题时,假如你答不上来,那面试官就觉得这个人要么是眼界太低,会了一点就觉得自己掌握了,要么是简历造假在胡吹,这两种都非常不利;
  • 在上一条的基础上,可以准备一个最得意的项目,在简历上和面试过程中引导面试官往这块聊;
  • 面试前心里可以准备一个方法论:明确面试官想招怎样的人有哪些特质,在面试过程中努力表现出这些特质。这听起来是句正确的废话,但面试的过程不可控因素太多,有一个清晰的目标在脑子里能帮你在手足无措时想到说什么。举个例子,有一轮中面试官问我有什么问题时,我就问贵司的对应岗位会面临哪些技术挑战(当然要先说清楚这不是在质疑他们没有挑战,只是自己渴望挑战);

一些各领域的资料与心得:

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published