程序员面试前如何猜题

2019-12-05 in 面试多职业研究



程序员面试前如何猜题

以工程师来说,会被问到的问题几乎都是技术问题。而这类问题的相关准备网路上资源已经很多了,反正不外乎就是跟你应征的领域有关,以及共同科目资料结构、演算法、作业系统、网路TCP/IP 等等。

我这次准备最多的反倒不是技术问题,而是behavior question,这类的问题不外乎是问你在某种状况之下会怎么做,或是问你之前有没有类似的经验。

除了被问问题以外,求职的另外一个重要环节是问面试官问题,我觉得这个步骤真的超级重要,多问一点可以让你更了解这间公司或者是工作上的细节。以前求职时不懂事,完全不知道要问什么,就傻傻地进了公司,进去之后才发现不是自己想像中的那回事。

有了以前的经验,就知道下一次面试时该问什么问题了。

除了技术问题跟behavior question 以外,还有常见问题以及跟自身背景有关的问题,常见问题像是:做个简单的自我介绍、为什么想加入我们、为什么离开上一间公司等等。跟自身相关的问题对每个人来说就差异很大了,因为每个人的背景都不太一样。

下面会分几个段落来讲各种问题的准备。

主要原则

虽然已经脱离校园好一段时间了,但大家应该还记得以前是怎么准备考试的。基本上面试就跟考试没两样,就是考前猜题然后练习,准备得越充足,表现就越好。

但如果只是死背题目的话,碰到一点变化就完蛋了,因为只是死背而没有去理解。我认为比较好的方式还是去仔细理解题目要问的到底是什么。通常面试题目都可以简单的分类几个类别,每个类别内的题目都类似,这个等等会再提到。

之前看过面试多的一篇文章说面试在回答问题时,其实就跟说故事一样,你要说得完整、说人引人入胜,说得越好,表现得就越好。仔细想一想发现满有道理的。

大家应该有听过STAR 法则,是由下面四个单字开头组合而成的:

  1. 情境(Situation)
  2. 任务(Task)
  3. 行动(Action)
  4. 结果(Result)

如果不知道怎么回答,就可以先从这四个方向去想,就能够构成一个具有完整架构的故事。

接着谈一谈准备的方式好了,一般来说我都是先拟好题目,然后再稍微写一下答案。我有认识的人是会把写下来的答案直接背起来的那种,但我这个人一旦背了,就会表现得一副:「我在念稿」的样子,极度不自然。

因此我自己稍微写过怎么回答以后,会简略的记下来以便下次复习。准备的过程也满简单,就是自己回答一两次。因为这次面试都是英文的,所以在回答的途中如果有些地方卡住,就可以去查那些卡住的地方应该怎么讲会比较顺,也可以发觉有哪些单字自己不熟悉而记下来。

总而言之,就是自己帮自己模拟面试的意思。

面试必问问题

以我这次跟以往的经历来说,有几题出现的机率超级高,我把它归类在必问问题。

  1. 可以做个简单的自我介绍吗?
  2. 可以讲一下你现在在做什么吗?(针对在职找工作的人)
  3. 可以讲一下你上一份工作在做些什么吗?(针对离职后找工作的人)
  4. 上一份为什么想要离职?
  5. 为什么想加入我们公司?(或者是:为什么对这个职位有兴趣?)

这类问题其实不用花太多时间准备,因为跟自身相关的问题,一定是最熟悉的。总不可能叫你自我介绍,然后你想个三十分钟还想不出来吧?

这类问题相对亲切,而且一定会一直一直一直被问到,但只要花点时间准备一下就好。

以我来说,叫我自我介绍的话,我的回答大概是这样:

Hi, I am huli from China. I have been worked in Singapore for about 1 year. I work at Garena, I was responsible for built a live streaming website like twitch and youtube gaming. The player can streaming while they are playing the game, and the viewer can chat, donate or send gift. I focus on the frontend part, and there is only 1 people in frontend, which is me. The team is quite small, just me and 3 backend developer and PM.

这边顺便讲一下,如果你跟我一样是一个英文普通或是稍差的人,英文面试的唯一诀窍就是:

说就对了。

管他什么文法错误、时态错误或是单字用错,你说就对了。文法错误也比什么不说来的好,至少你尽力去表达了。而且面试就那么一次,你这次不说,以后也没机会说了,所以到那个时候,只要什么都不管,尽管说就是了。

因为面试官的英文通常都满好的,尽管你有些小错误,他一定听得懂你想表达的意思大概是什么,举例来说,你看看下面这一段好了:

你好,我叫阿明,三个月在上海居住,现在当老师在补习班,教小朋友英文。我学中文已经三个多月,以前在美国当业务拍卖东西,很兴奋认识你。

上面这段是模拟中文一些奇怪的文法,但尽管如此,你一定看得懂上面那段在说些什么,因为你中文很好嘛!我自己觉得对那些英文很好的面试官来说,我在回答时他们应该也是这样的。可能有些地方用错,但他们一定听得懂,反正如果听不懂他们应该也会问才对。

总之,真的就是说就对了,这次不说下次也没机会说了,就豁出去吧!

这些必问问题通常在第一关phone interview 的时候就会碰到了,我的参考资料有以下几篇文章:

  1. HOW TO ANSWER: Describe your current position.
  2. 面试准备与技巧
  3. 【商用英语】电话英语面试5步骤,前进外商不是问题!
  4. Phone Interview Questions and the Best Answers

自身相关问题

这一类的问题都跟你自己有关,所以你要自己从你的背景里面去想说可能会被问一些什么问题。

以我自己来说,我那时候准备了下面这些问题:

  1. 为什么休学
  2. 为什么不念资工系
  3. 为什么念哲学
  4. 在哲学系你学到什么
  5. 你最骄傲的成就是什么
  6. 你的优点是什么
  7. 你的缺点是什么
  8. 你怎么持续让自己获得科技相关的新知

跟自己相关的问题其实也满好答的,准备方式就跟之前说的一样,自己拟一个答案之后试图回答,边回答边记录自己卡住的地方,查查看有什么单字可以用。回答个几次之后就会熟悉这个答案了,讲得会顺很多。

Behavior question

我在这一类的问题上面花了最长的时间。

原因很简单,因为工程师比较少碰到这类的问题。我以往的经历都只会被问技术问题而已,其他问题超级少。但因为我这次投的职缺有一个是support engineer,跟一般工程师的工作内容比较不一样,所以有一关就是一直在考这类型的问题。

准备方式同上,先找好题目之后自己准备。但这边的题目超级多,所以不太可能每一题都准备。我认为比较好的做法是稍微分类一下,把类似的题目分在一起,可以用同一个故事来回答。

我最后准备好的题库长这样:

目标相关:如何设定、如何完成、达成与没达成的经验

  1. Give an example of how you set goals.
  2. Give an example of a goal you reached and tell me how you achieved it.

压力相关:如何跟压力共处?在压力之下如何有效率工作?

  1. Tell me about how you worked effectively under pressure.
  2. How did you handle meeting a tight deadline?
  3. Tell me about a time you were under a lot of pressure. What was going on, and how did you get through it?

失败、犯错类

  1. Tell me about a time you failed. How did you deal with the situation?
  2. Have you ever made a mistake? How did you handle it?

挑战类

  1. Describe a complex situation you encountered and how you solved it
  2. Have you handled a difficult situation? How?
  3. How do you handle a challenge? Give an example.
  4. Tell me the most difficult issue you encountered

做决定类:你如何做决定?怎么搜集资讯?

  1. Did you ever make a risky decision? Why? How did you handle it?
  2. Did you ever postpone making a decision? Why?
  3. Describe a decision you made that wasn’t popular and how you handled implementing it.
  4. Tell me about a difficult decision you’ve madein the last year.
  5. Do you always make decisions on your own without the help of others?

团队合作类:如何团队合作

  1. Give an example of how you worked on a team.
  2. Share an example of how you were able to motivate employees or co-workers.

沟通类

  1. What do you do if you disagree with someone at work?
  2. What do you do if you disagree with your boss?
  3. Do you listen? Give an example of when you did or when you didn’t listen.
  4. If there is a disagreement at work, how do you solve the conflict?
  5. Describe a situation in which you were able to use persuasion to successfully convince someone to see things your way.
  6. Can you give me an example when you handled some conflict in work environment? What is your typical way of dealing with conflicts?

工作排程类:如何处理工作上的优先程度?

  1. When you worked on multiple projects how did you prioritize?
  2. How do you prioritise projects & tasks when scheduling your time? Give me two examples.

主动类:你有多积极?

  1. Give me an example of when you showed initiative and took the lead.
  2. Describe a time when you anticipated potential problems and developed preventive measures
  3. Can you tell me a time when took the initiative at improving processes at your work?
  4. Have you gone above and beyond the call of duty? If so, how?

每一类的题目我都准备了一到两个小故事,以我自身的例子来回答那些问题。举例来说,在回答沟通类的问题时,我会举一个我跟设计师沟通的例子。

S:跟设计师讨论UI怎么改,例如说这个button会不会太暗
A:对我来说,好的UX就是不会让你觉得怪,但彼此各有各的角度
R:当两个人都很合理的时候,我会尊重专业

我到后面越准备越发现T 好像不是那么明确,或者说其实在很多故事中也不用特别提到,之后就索性不写了。但只要不妨礙故事的完整性即可。

回答有关挑战类的题目时,我准备了这个故事:

S:发现cookie没办法写进去,状况很诡异
T: debug
A:找chrome原始码,找到cookie那部分,看到解释
R:成功解决bug并且写blog文章分享

我记录下来的就是一些重点而已,详细的故事因为是自身的经历,所以不用特别去记也不致于忘记。跟我上面所说的一样,我会把这个故事自己讲一遍试试看,把一些卡的地方给修正掉。

最后再举一个例子,我回答犯错、失败类的题目或者是「如何跟压力共处」会举下面这个故事:

S:发现网站出问题,player不能播
T:修好player
A:不能心急,stay calm more than usual,越心急越会出错
R:修好之后赶快上线,隔天上班补足相关测试

我的完整回答大概会是下面这样:

One day, maybe at 9 or 10 pm, my PM told me that some channels can not watch. The users report that the player is a black screen. It make me feel pressure because I have to run against the time. I have to fix it asap. But I know that at that situation, I have to stay calm more than usual. Because if you are nervous, the more possibility you could make mistake.

So, what I do is stay calm and try to recall that what I have changed on that day. And I quickly found there is a bug in the code, a small change cause this issue. So I just rollback to the previous version and deploy again. bug fixed.

There is one thing I learned: never deploy a new feature or a new version on Friday. or maybe you have to work on the weekend. Also, for me, the most important thing is not about “you made a mistake”. It’s about what you learned from this? and how to prevent it happening again.

我就想到什么打什么,但跟我当初的回答应该差不多。上面一定有一大堆文法错误,但我相信应该还是能理解我想表达的意思。

在准备behavior question 的过程中,我参考了下面这些资源:

  1. Top 10 Behavioral Interview Questions and Answers
  2. 28 Behavior Based Job Interview Questions
  3. 30 Behavioral Interview Questions You Should Be Ready to Answer
  4. Behavioral Interview Questions
  5. Behavioral Interview Questions And Answers 101
  6. Effective Interviewing Skills
  7. How to Answer “Behavior Based Interview Questions” — Interview Tip
  8. Interview Question: Tell me about a time you handled a difficult situation
  9. 英文面试系列: Behavioral行为问题答题技巧及破解口试陷阱
  10. Behavior Interview--我的一点经验(节选) by Xumin Hu

最后一关:有什么想问我的吗

这通常都是面试的最后一题了。攻守交换,由你来问面试官问题,对方负责回答。

我上面有说过了,这是很重要的一个阶段,可以让你更了解公司在做些什么,以及他们的工作型态等等。这个阶段事先准备好问题很重要,我通常还会存在Evernote 避免忘记。

先给大家看一下我这次面试中有问的,然后我觉得还不错的问题:

  1. Could you describe the day of the support engineer?
  2. How do you measure the performance for the support engineer?(问主管的)
  3. What’s your favorite part about working here?

第一个问题可以让我更了解这个职位在做什么,第二个问题让我知道哪些项目会列入考核标准,最后一个则是对每一个人都可以问的一个满有趣的问题。

不过我问的问题其实满普通的,如果你愿意的话也可以问一些特别的,例如说:在这边工作你最讨厌什么?之类的。

其实这里的问题根据应征的职位差距很大,我只能列出我这次准备的跟工程师相关的题目:

工作流程相关

  1. 你如何知道你每天要做什么?(How do you know what to work on each day)
  2. 可以试着描述你的一天在做什么吗?
  3. 假设上线后发现一个bug,处理流程会是什么
  4. 用什么版本控制工具?如果是git,那对于branch 的处理流程为何?例如说:bug/feature 各开一个branch? What version control system do you use?

团队相关

  1. 用什么样的协作工具?(What collaboration tools do you use?)
  2. 工程师总人数
  3. 一个专案大概有多少人,有哪些人?怎样分布的?工程师可以参与产品开发的讨论吗?
  4. 前端团队几个人,怎么分工?
  5. 进去之后会跟哪些人一起工作
  6. 前端跟设计师透过什么工具配合

程式细节相关

  1. 会写单元测试吗?用了哪些工具?(Do you write unit tests? what tools do you use?)
  2. 有写end-to-end 测试吗?
  3. 有做code review 吗?(Do you do code review? Does all code get reviewed?)
  4. 有用Jenkins 或Travis 做CI 吗?(Do you have continuous integration? like Jenkins or travis?)
  5. Server 放在云端还是自己建
  6. 可以谈谈公司里面使用到的技术栈吗?
  7. 平均的qps

产品相关

  1. 这个产品的DAU 是多少?
  2. 这个产品的下一个主要目标是什么?

福利相关

  1. 医疗保险
  2. 一般看病的补助
  3. 年假几天?How many annual leaves do you have?
  4. 参加技术活动有没有补助

制度相关

  1. 怎么做绩效考核?(How do you measure individual performance)
  2. 会固定调薪吗?(Do you do annual salary increases?)
  3. What time do people normally leave work?
  4. Would I need to be on call? How often?

假如是国外公司

  1. 租房补助
  2. 签证
  3. 机票补助

总之这边的准备就是好好思考一下有哪些想要问的。通常最有灵感的时候会是什么?会是你加入一间新公司的时候。因为有可能新公司跟你的期望不符,例如说你原本预期是加入一个team,结果进去之后却是一人战队。

这时候你一定会想在下一次面试时问说:「可以谈谈我之后会加入的team 吗?有几个人?还是其实只有我一个?」。

不过,公司当然也有可能会骗人,给你错误的资讯。但这边就不考虑这种的可能性了,因为这种很难防。如果大家有什么防止公司骗人的小技巧,也麻烦留言在底下,感激不尽。

我觉得我问的问题算是很普通的了,有一些题目更刁钻更难回答一点,不过要问什么就是见仁见智啦,我觉得我问上面那些就满够的了。建议大家偶尔维护一下自己的题库,就不用每次求职时再想一遍了。

有关于这些问公司的问题,底下这些都是很好的参考资料:

  1. Questions I’m asking in interviews
  2. 开发人员的面试指南— A developer’s guide to interviewing
  3. 「Any questions?」英文面试的最后一题,你该这样答!
  4. 【职场英文】没问题就是有问题!面试时你应该问的9个好问题!

总结

面试就像考试一样,考前猜题、写拟答、反覆练习。当你的面试经历丰富之后,就会发现有些题目一再出现,这些就是所谓的万年考古题了。

其实我的面试经验也不多啦,尤其是最近两次求职,都是只面了一两间就拿到offer,就决定不去面其他的了。写这篇文章一来是为自己留个纪录,二来是觉得这篇文章应该可以帮助到一些人。

以前我对于准备面试其实满没有头绪的,而且我认为不用刻意准备也可以,因为你有多少实力,面试就能表现出多少。但后来我发现面试其实就跟考试一样,是可以刻意准备、刻意练习的。既然有这个练习的机会,why not?

大概就是这样了,祝大家面试顺利!

发表评论

电子邮件地址不会被公开。 必填项已用*标注