0%

面试经历--腾讯篇

背景

有个猎头一直在问是否要出去面面试之类的,在闲下来之后,本着出去试试水,看看外面的世界和自己当前的水平,就答应的去面试了下。在6月份试着面试了腾讯的OpenJDK部门的岗位。准备不是很充分,加上线上面试,电脑环境还出现了些问题,导致面试过程比较尴尬,总体上整体表现不良。结果是意料中的不通过。

面试

因为只面了一面,所以体验不多。整体是常规的问答形式,加上一道leetcode题目作为笔试。因为电脑问题调试了一段时间,所以面试官先大致介绍了下部门和岗位的背景,过了一下简历上的经历。然后开始正式的面试环节:

  1. 自我介绍

    简单说了下自己的工作经历和项目经历,把简历上的东西概要了一番,强调主要做编译器后端。本来隐去一些项目具体信息,但据了解面试官本身也是项目组出去的,还是猜到了具体的项目。

  2. 觉得有难度或者成就感的工作

    常规问题,说了下指令调度的具体流程。然后被问及如何调优的,主要是通过用例效果找到最优解,然后调整启发式规则来达到效果。面试官提到存在可以自动调优的方式,有相关的研究论文。

  3. 编译器与runtime如何交互

    因为面试的是OpenJDK的岗位吧,大致问题是问了下编译器中与JAVA规范关联比较密的有哪些。当时忘提GC yield point,异常处理。只想到了native 调用,说了下编译器里要用到一个特定寄存器来存储函数地址。然后就被问道JNI调用流程,没答上来,只说了个要用到Stub函数。

  4. Stub函数实现

    接上面的JNI问题,被问到Stub函数的过程,说了下简单的寄存器保存和恢复,参数的传递。面试官补充了下会有栈帧的转换,异常状态的处理等。

  5. 手写汇编

    问及是否需要手写汇编进行优化。在项目中没有接触到太多。

  6. 20分钟的leetcode 题目

    一道中等题,简单计算器算术表达式的处理,因为涉及到符号优先级的问题,想到要用栈来处理,因为思路放在了当前字符和前一个字符的关系上,导致要记录的状态比较多,没有当场完成,只说了下大致思路。整体实现也比较糟糕,有个变量放到了循环里,面试官让看下有没有错误,也没看出来。后来面试官提了可以用编译器前端parser中向前看的方法(LL(1)?),通过下个字符来判断当前字符的处理方式。顿悟。后面在leetcode实现了下。

  7. 职业规划

    主要被问及5年了对工作的期望,表达了下自己想做些完整的模块之类的,被说那边还是以小功能为主。

  8. 平时如何学习
    工作之外如何提高自己的,看一些开源代码。

  9. 提问

    感觉面试的不好,就没有询问面试官问题了。

面完有段时间了,记得的问题大致就上述的七个。

总结

整体上是在问项目经历上的事情,被问及到的细节偏和runtime的配合实现,比较不熟悉,细节含糊不清。编码实现上没有做好,比较不能原谅。一次敷衍失败的面试。对不起那个猎头半年多的电话吧。

后面文字整理下两年多做过的事情,有个交代。还有补足下leetcode算法题目。