Records & Afterthoughts About Interviews


摘录

日常 (Not) To Do

人事部门是这样阅读简历的
(+15分)如果简历中说到了和工作职位相符的技能超过5次以上。
(+8分)如果简历中说到了和工作职位相符的技能3次到5次。
(+4分)如果简历中说到了和工作职位相符的技能1次到2次。
(+4分)Cover Letter(“求职信”或“自荐信”)提到了招聘人员。
(+2分)简历中有Cover Letter(求职信)。
(-10分)没有提到和职位描述相关的技能。
(-15分)没有受过大专教育。
程序员是这样阅读简历的
(+15分)曾经因为好玩而写过操作系统或编译器。
(+12分)简历被LaTeX编译过。
(+11分)为开源软件贡献过代码。
(+9分)上学的时候曾经写过操作系统或编译器。
(+8分)有一个BLOG分享技术知识。
(+8分)编程/机器人/工程俱乐部主席。
(+7分)编程/机器人/工程竞赛参与者。
(+7分)在Google和Microsoft实习过。
(+6分)使用动态语言(Python/Perl/Ruby)写过非试验性的程序。
(+5分)知道3种或多于3种的编程语言。
(+5分)之前的工作和目前的职位有很相似的经验。
(+4分)有过实习经验。
(+4分)自己创过业开过公司。
(+4分)有一个通过Rail, PHP或ASP.NET的个人主页。
(+3分)有一个自己域名的邮件地址。
(+3分)改过一些由动态语言(Python/Perl/Ruby)写的程序。
(+2分)有一个个人主页。
(+1分)高学历,学习成绩优秀,等。
(+0分)有奖学金。
(+0分)在快餐店工作过。
(-0.5分)Fackbook上有一张看上去喝醉了的照片。
(-1分)有博士头衔。
(-2分)有一个一般的求职信。
(-2分)在简历中说自己懂Word/Excel。
(-2分)在简历中有拼写和语法错误。
(-3分)简历的字体太小。
(-4分)所有的编程经验只是在学校中。
(-4分)只知道一门编程语言。
(-6分)简历有三页以上。
(-6分)简历中有一些无关的东西。
(-7分)得到过一些课程的认证。
(-8分)相关专业课程很低的成绩。
(-10分)在技能中,把Visual Basic列在第一的位置。
(-12分)在Facebook中,有过光膀子的照片。
(-15分)简历中的缩进同时使用了空格和Tab键。
Ref: 别的程序员是怎么读你的简历的

作为求职者

我觉得对于一个没有什么工作经验,学历背景也不是太厉害的应届毕业生来说,一定要有一个拿得出手的个人作品或是参与完成的项目,然后就是围绕这个作品谈一谈产品设计、性能优化、架构等方面的话题,这样有助于通过一个你熟悉的东西把面试中可能涉及到的话题联系起来以便进一步主导整个面试过程的节奏

作为面试官

不得不说面试真的是一门学问,而且针对不同的面试者一定要准备好不同的面试问题,这不仅是对面试者的尊重更是对自己公司长远发展的负责。在国内,大部分公司的面试官通常只会问你会什么技术、有哪些项目经验、期望薪水是多少。大公司往往更加看重底层的基础知识和系统架构能力,也还会问一下业务方面的看法啦。

在面试之前有几个问题需要事先想清楚:

  • 需要找什么样的人
  • 需要让他完成怎样的工作
  • 如何针对这位求职者设计面试题

如何设计面试问题?

  1. 首先需要问一些基础的技术细节
  2. 问一些常见的算法问题(比如很经典的反转二叉树)
  3. 框架的技术实现细节/设计模式/架构设计
  4. 综合素质考察
    • 最喜欢读的书籍/技术书籍
    • 对开源软件的看法
    • 对当下很火的新技术的看法

面试也不能一概而论,针对不同类型的求职者自然要设置不同的侧重点:

  • 应届毕业学生:
    • 数据结构、算法
    • 操作系统、计算机网络等专业基础
    • 课余时间做过什么个人项目没
    • 毕业设计做的什么,为什么要做这个
  • 有过几年工作经验:
    • 工作方式
    • 解决问题的态度
    • 对新技术的了解及看法
    • 架构设计、设计模式

Ref:谈谈程序员面试那点事


总结

General Tips:

  • 少说,想清再说,微笑自信,放慢语速
  • 握手有力
  • 回答问题时最好1句结论+1个有细节的故事
  • 面实习生,面试官不会期待你什么都会,你得在面试过程展现自己乐于学习,遇到不会的问题也可以要hint
  • 可以反问面试官有没有更好的办法,不管结果,就当作个学习机会也能收获不少的
  • 注重日积月累,主要在以下四个方面:
    • 沟通能力
      • 表达逻辑,好的面试者能把很小的事或很乱的事梳理清楚
    • 逻辑思考
      • 逻辑连贯,能够自圆其说。被问倒就是自己没想清楚,先说服了自己才能说服别人
      • 大问题的拆解,其实主要是看逻辑分析能力了
    • 学习能力
      • 不断总结: 复盘思考,“你最成功的项目是什么,为什么?” “你最挫败的经历是什么,为什么?”
      • 紧密关注行业动态: 对历史的学习,对当下新知识的学习,加入一些自己的思考和判断,进而对行业未来的思考和判断
    • 积累成功
      • 有自信的人,说明他的过去有很多成功,可能是个A级选手
  • 平时对自己严格要求,反复练习,做充分思考——想明白:
    • 自己做了什么(what)
    • 为什么做(why,知其所以然)
    • 遇到什么真实的困难(difficulty)
    • 如何克服的(how)
    • 下一步怎么走(plan)
  • 最后只需在面试中真实表达

Algorithms

 * 先写一个最简单的例子,理解题意
 * 确认输入输出
 * 确认取值范围
 * 简述解题步骤/要hint
 * 开始动笔
 * 检查边界情况>还是>=,是否要-1等,corner case是否考虑全面,判断语句逻辑是否写反
 * 用最简单的例子跑一遍
 * 再用一个特殊例子跑一遍

Projects

  • 如实回答
  • 语言精练
  • 条理清晰,逻辑严谨,对项目整体有清晰的认识(STAR原则)
  • 技术要点:用什么工具,实现了什么功能
  • 重点,难点,解决问题的思路(为什么选择用这个工具?)
  • 总结收获:学到了什么,有什么不足,如何改进
  • 画出框架的流程图
  • 并准备技术相关概念
  • 写下来,帮助思考理清逻辑

Behavior Questions

  • 5分钟内讲清楚自己的经历(时间顺序,着重于转折:换专业、换工作)
  • 为什么转行,以后想从事哪一块,展现出自己对技术的热情
  • Know your story:
    • 简历上的经历在3-5min内讲完
    • 每个bullet都能讲出一个小故事: when, why, how, how long, result?
  • why this company/position? 至少2个理由,真实可信
  • why you? Skillset + past experience + strong interest
  • 给自己的skillset打分
  • 准备问题,中途也可以问: Sorry to interrupt you but can I chip in a question here?
  • i.e.
    1. How soon should I expect to get the feedback?
    2. Could you tell me more about the company/xx team?
    3. What do you value the most in the new hire?
    4. What's the job responsibility?
    5. Could you describe a typical day of yours?
    6. How much time do you spend on working on your computer, and how much time on talking to other people?
    7. What kind of people do you like to work with?
    8. I know you've been working here for a number of years. Would you mind sharing your personal experience with the company?
    9. What do you like the most about the company/xx team?
    10. What do you feel is the most challenging thing?

Experience

Rich, Phone Interview, May 8, 2018

Result: pass

  • 中文自我介绍1-2分钟
  • 算法题1,给一个整型数组,判断其元素的值是否在0~x.length-1之间。例x=[1,3,2,0] return true; x=[1,0,4,2] return false
    答题:先用O(n)的时空复杂度做出来,问有没有不用额外空间的方法,提了排序比较index和value即O(nlogn)的时间O(1)的空间,说确实和Index相关再想一下O(n)时间实现,未能想出,问有无学过离散数学,答没有…思路是index=0,value=1; index=1,value=3;index=3,value=0. 形成了一个圈。剩下的index=2,value=2.
  • 算法题2,切绳子,给一个长度为n的整型数组,代表n条绳子,里面的值代表每条绳子的长度。要切割成m条长度相等(整数)的绳子,问最大切割长度?n1 <= n <= 1000000,n1 <= m <= 1000000
    答题时漏掉了一个corner case:绳子即使切割成最小长度1也不够切成m段。面试官给出一个例子,我也是看了30s-1min才看出来…尴尬…然后改代码时,想到不要再另写一个for loop,就把代码增加到了helper函数里(专门判断输入x长度能否切成m段)。又被指出没解决,急忙补充应该只能在一开始就判断。说这样就没问题了,也没再改代码,最后面试完后面试官会复制代码,这里还是错的,不知会怎么样…
    项目:
  • Spring Boot的权限认证怎么实现的?
  • 有没有用到session?答在另一个js项目里写了session+描述具体怎么实现的
  • Java项目里,和数据库是怎么实现交互的?答最近一个Java的项目用的数据库的DynamoDB,用API进行增删改查等。这里还需再熟悉Spring Boot项目和mysql的交互
  • React和jQuery的区别?
  • 有没有用过Redux?

Rich
金融-证券银行,government
AI, Big data
端对端,主要做to B
搭建 -> 模型训练, 定制API

Recap

  1. 每次面试前还是好紧张,因为身体不适甚至想放弃,这次主要是被算法吓怕了。真的要从头开始磨练算法技艺
  2. 项目准备得还不够充分,Spring Boot的项目确实很怕被问
  3. 也只能庆幸没问之前的工作经历了,如果每次都心存侥幸,那每次都会很紧张啊,不知啥时候才能艺高人胆大一点

Tibco Mashery team, Onsite, May 4, 2018

Result: fail

Part1

  • 以前的工作经历,这部分先坑坑洼洼说了一些general的东西,要我具体举例,which client, collect what data, how to do data analysis, what suggestion?实在不知道怎么说…连6西格玛都突然忘记怎么说…我说please give me some time to get my memory back,沉默之后他说move on之后再回来说这个
  • What is Maven? Other tools like Maven?
  • Projects, 细讲了aws的那个,在白板上画图,举例用了哪些API
  • 写白板:pick a node randomly from a Binary Search Tree。比如一家公司的员工,Salary不同,放到一棵BST上,想从中随机选一个人发年终奖,怎么办?我说用inorder traversal变成一个升序数组,然后用Math.random选一个。然后让我开始写,我写了recursion的方法,问还有别的方法吗,我说可以遍历,问我这里用DFS还是BFS,我说因为是要先找到叶子节点,应该用DFS
  • 其他闲聊,关于可以实习的时间等等
  • what you don’t like about programming? 我说算法很难,像recursion, BFS, DFS, 我要花些时间才能理解到底是怎么回事。他说他也觉得…?

Part2

BQ
  • 给自己software engineer的skillset打分,10分满分. 我说如果是Software Engineer给自己打7.5分,又找死说到如果是a good software engineer的话打6分(还是5分记不清了),这部分很坦诚地说了明白自己和一些同学的差距,说他们能写出很elegant的code,但相信自己会越来越棒…唉对自己有点无语…
  • 有什么Advantages?说学得快(举例js),问题解决能力(举例大问题拆分小问题,设置优先级再基于优先级一一解决),时间管理(举例用表格track时间),细节导向
Technical

Java和JS穿插着问(幸好没写不会的语言在简历上…)

Java:

  • stack, queue (difference, common methods’ names. Stack: push, pop; queue: offer, poll, peek)
  • 写code: What is circularly linkedList? what is doublyLinkedList? Insert a new node at a specific index of a doublyLinkedList. 问题拆分为1.先找到Insert的位置 2.insert
  • finally keyword, 什么时候用?
  • public static void main(String[] args) 各部分的意思
  • static keyword
  • abstract class, interface有什么区别?可以被实例化吗?
  • overriding, overwriting

JS:

  • 判断true or false
a={‘bar’:1} b={‘bar’:1}
a==b // false
a===b //false
c=a
c==a // true
c===a // true
  • 给2个对象,判断他们的keys和values是否相同?先对key进行sort, 有一个方法是object.getownpropertynames, 会返回一个key的数组,但我并不知道,给了这个clue让我继续做。我没考虑到两个key的size可能不同的情况,提示可能一个长一个短,我又在for里面同时判断i
  • 给一个数组删除里面的所有元素,我用split实现
  • 什么是值传递什么是引用传递?JS是什么传递?我说不太清楚,但是从他给我的第一个问题看来是引用传递。他说有的是值传递有的是引用传递,让我猜什么时候是值传递,我说primitive比如Integer或者boolean的时候是值传递?他说对。对于primitive是值传递,对于其他诸如object就是引用传递

Recap

  • LinkedList那道题不是自己拆解问题的,解决问题这一点可能会扣分
  • js判断2个对象是否相同那道题想起来都好想打个地洞钻进去
  • 对js语言的基础其实掌握得不好,平时也只是照猫画虎,Java语法一般在写js,以实现功能为目标,不知其所以然
  • bq答得不太好,给自己打分太低…以前的工作经历也说不出来…
  • 准备以前工作经验的介绍,general+example
  • 应该可以看出这个人写code不是很熟练和严谨吧……
  • 好好练英语

想起某位大佬对我说的,“你这水平就算能过笔试也没用”

你可能感兴趣的:(Records & Afterthoughts About Interviews)