程序员,去面试



图片取自“ Militant Amethysts频道的视频



。大约10年来,我担任Linux的系统程序员。这些是内核模块(内核空间),各种守护程序,并且可以与用户空间(用户空间)中的硬件,各种引导加载程序(u-boot等),控制器固件等一起使用。有时甚至碰巧切断了Web界面。但是更经常发生的是,我不得不坐在烙铁上坐下来,与印刷电路板的设计师互动。此类工作的问题之一是,很难评估自己的能力水平,因为您可能非常了解一项任务,但附近可能根本不知道。理解去哪里和现在潮流的唯一适当方法是去采访。



在本文中,我想总结一下我因Linux系统程序员的空缺而进行面试的经验,面试的细节,工作以及如何评估与未来雇主进行沟通时的个人知识水平以及对此不应期望的内容。



文章将包含一个有奖竞赛。



专业特色



就我所从事的工作而言,系统程序员是一名全面的通才:我必须同时编写代码和调试硬件。通常,需要自己焊接一些东西。有时,我的硬件更正随后会传递给开发人员。因此,要在该领域工作,需要在数字电路领域和编程领域都具有相当好的知识储备。因此,进行系统程序员工作的面试通常看起来像在寻找电子专家。





系统程序员的典型工作场所。



上面的照片是我调试驱动程序时的典型工作场所。逻辑分析仪显示传输信号的正确性,示波器监视信号边缘的形状。同样,当不再使用标准调试工具时使用的jtag调试器也没有进入框架。而且您需要能够使用所有这些设备。



通常,与将产品佩戴到安装程序中相比,您自己可以更快速,更轻松地重新焊接某些元素,修复拓扑错误。然后,焊台也将安置在您的工作场所中。



在驱动程序和硬件级别进行开发的另一个功能是Google无法提供帮助。通常,您必须查找有关问题的信息,并且有三个链接,其中两个是您在某个论坛上的问题。甚至更糟的是,当您遇到同一个可怜的家伙的问题时,那个家伙在5年前在内核邮件列表中提出了这个问题,却从未得到答案。在这项工作中,除了硬件和软件设计方面的错误外,还经常遇到文档错误-这些可能是最严重和不愉快的问题。有时寄存器描述不正确,或者根本没有描述。仅通过科学地将随机数放入某些寄存器的方法(一种相反的方法)即可解决这些问题。处理器经常具有某种功能,而且除了您之外,没有人实现此功能(尤其是在处理器是新处理器的情况下)。这是带着耙子在田里走的,其中70%是孩子。但是,即使有文档,即使有错误,也已经取得了进展。经常发生的情况是根本没有文件记录,这就是铁燃烧时在雷区已经开始行走的地方。是的,我也成功解决了此类问题。



面试



我的看法是,即使您很喜欢工作并且不想更换工作,也值得至少每六个月进行一次面试。通过面试,您可以了解自己的专家水平。我认为最有价值的采访是失败。他们是最准确地表明哪些知识瓶颈值得加强的人。



另一个有趣的功能是采访的质量。这是我的观察,但事实并非如此,我承认我是如此幸运。如果采访是按脚本进行的:



  • 向我们介绍你自己;
  • 我们有这样的任务;
  • 你喜欢?


并且,如果在对话之后你们彼此喜欢,又去上班,那么通常来说,公司和任务会非常愉快和充分。如果面试就像经历了12个地狱般的循环:第一次是与HR面试,然后是与一组程序员,然后是董事,更多功课等的面试,那么通常这些都是失败的组织,我在这些组织工作了很长时间。再次,这是个人观察,但通常来说,过多的官僚主义和漫长的雇用过程表明,公司内部发生的过程完全相同。决策是缓慢而无效的。还有相反的情况,面试的圈子很多,而公司却变得华丽,当经过一记耳光后,公司却变成一片沼泽,但这是很少的。



如果您认为这样的情况:满足,被告知自己和被雇用的情况仅存在于小型公司中,则不存在。我已经在拥有数百名员工并在全球市场上都有代表的大型公司中看到了这一点。这是一种正常的机制,特别是如果您拥有丰富的记录并且有机会致电您以前的雇主并询问您。



对我来说,当被要求显示其项目和代码示例时,这是公司的一个很好的指标。立即显示申请人的培训水平。而且,对我而言,从甄选候选人的角度来看,这是比炫耀性面试最有效的甄选方法。实际上,在面试时,您可能会因为兴奋而失败,反之亦然,您可能会肾上腺素下降。但是在实际工作中,您无法应对实际任务。当我自己采访人们时,我也遇到了这个问题。一位专家来了,完美地展现了自己,我喜欢,他喜欢我们。结果,由于我经历了一个月的最简单任务,另一位程序员在几天之内解决了这个问题。我不得不和那个程序员分开。



我特别重视采访中的编程任务。而那些必须在会议期间,压力和家庭作业中解决的问题。第一个显示了您准备如何快速,准确地解决处于压力状态和紧急情况下的问题。第二部分显示您的能力水平以及寻求信息和解决当前问题的能力。



我最有趣的工作是在我们的国防综合体中。在工作过程中,我只需要解决商业程序员梦dream以求的奇妙问题。超级计算机,路由器设计,各种节点作战综合体-令人兴奋。在游行期间,当您看到一个将代码本身存储在内部的复合体时,这真的很不错。奇怪的是,通常情况下,在这样的公司中进行采访非常简单,我从字面上就喜欢上了它-被接受(可能是军方的细节,他们不喜欢四处乱窜)。我在那里必须面对的任务确实很有趣而且很困难。有了经验,可以向他们学习成为一名高素质的系统程序员是一件好事。还有缺点,这甚至不是低工资。目前,国防综合体的薪水相当不错,有奖金和bun头。通常,这是一个庞大的官僚机构,不规律的工作时间,无休止的紧急工作,工作压力很大。在某些情况下,不能排除保密性,这增加了出国旅行的某些问题。另外,当然还有老板靴的暴政,可惜这也发生了。尽管我与客户代表一起工作的经验非常令人愉快。这是与国防秩序有关的三个不同研究机构和公司的集体印象。当然,酋长靴的暴政也发生了。尽管我与客户代表一起工作的经验非常令人愉快。这是与国防秩序有关的三个不同研究机构和公司的集体印象。当然,酋长靴的暴政也发生了。尽管与客户代表一起工作的经验对我来说是非常愉快的。这是与国防秩序有关的三个不同研究机构和公司的集体印象。





为了避免造成误解,并且为了不暴露我采访过的公司,我不会诱惑命运并指出他们的数据。但是,我感谢人们接受我的每一次采访,以及有机会从外部对自己进行自我审视。我只能说任务是针对在不同国家/地区设有代表的大型国际公司。



我将告诉您最有趣的事情:面试中给出哪些任务。通常,系统编程人员和微控制器编程人员的空缺最常见的问题是各种形式的位操作。因此,朝这个方向做好最好的准备。



关于极性的第二个主题是指针,该主题应该从牙齿反弹。这样您就可以在半夜醒来,并且可以说出一切。



从几次采访中,我脑子里浮现了这些问题,我会在这里回答,因为我觉得它们很有趣。我故意不回答这些问题,以便读者可以在评论中独立回答这些问题,并且在通过一次真正的采访时有点火药味。



第1个问题

I. SI知识。以下条目是什么意思:



const char * str;

char const * str;

const * char str;

char * const str;

const char const * str;


所有输入正确吗?



二。为什么该程序会引发分段错误?



int main ()
{
       fprintf(0,"hello\n");
       fork();
       return(0);
}


III. .



. , . 1 /. , . , .



下一次面试对我来说是一个失败,我发现这是我编程实践中最有意义的。它显示了我无能为力的深度。在面试之前,我熟悉这些问题中的每一个,在我的实践中他们经常遇到,但是以某种方式我对它们并不十分重视,因此对于前五名我也不了解。因此,这次考试,我丢脸了。我非常感激这样的失败发生了,它对我影响最大。您认为自己是一个很酷的专家,您知道电路,接口和内核一起工作。然后,您遇到了真正的问题,然后开始浮动。让我们来看看。



面试问题2



硬件问题。



  • 在x86上的ARM处理器上,如何以汇编语言排列linux系统调用。有什么不同?
  • ? , ?
  • i2c spi?
  • i2c ?
  • RS-232 : RX TX? : , , 9600, !!!
  • : ?
  • ? , ? ( ).
  • ?
  • RS-485. . , , . ?
  • ?
  • 如何使用cmake?
  • 有关构建yocto linux的问题。


访谈的目的:



1.编写一个将uint32_t所有位取反的函数(我建议他们喜欢在面试时节拍)

2。



int32_t a = -200;
uint32_t b = 200;
return *(uint32_t) * (&a)) > b;


该函数将返回什么?(纸上解决方案,无需计算机)



3.计算两个数字的算术平均值的功能int32_t



4.程序中输出的方法有哪些,包括。进入错误流。


第三种选择是相对较新的,如果那里仍然有这样的调查表,我不会感到惊讶,因此我不会透露公司,以免暴露它们。但是总的来说,我会举一个可能出现问题的例子,如果您发现了问题,那么我问好:)。



面试问题3

  1. , .
  2. ls. “-l”.
  3. . ?
  4. RS-232? RS-485 RS-232? RS-232 RS-485 ?
  5. USB ( )?
  6. .




本章甚至不适合程序员(尽管也适合程序员),但不适合HR。最合适的公司不会仔细观察采访结果。犯错误是很正常的,大多数情况下,他们会着眼于一个人如何解决问题和理性。



关键问题之一是应聘者在面试中成功解决了问题,表现出自己是一名出色的专家,但在第一项真正的任务上就融合了。我不会狡猾,我也有。他成功地走过了地狱的各个角落,解决了所有测试任务,但是在实际情况下,由于缺乏经验,工作变得非常艰巨。入职并不是最困难的任务。最困难的是留在这家公司。



因此,我信任更多与候选人进行简单面试的公司,他们说:在工作的第一个月后,很明显您是否适合我们。这是最适当的方法,是的,也许有点贵,但立即知道谁是谁。



面试还有另一种选择:成功通过面试后,但是根据面试的结果,您知道雇主是完全不够的。如果我被提供以个人企业家身份工作,并保证获得高收入,我将立即拒绝工作。这是当前组织逃税的一种形式,为什么雇主的问题让我作为程序员感到担心?另一种选择是各种政府机构。我接受了一次面试,因此得到了不错的薪水,但是他们说前一个程序员由于工作量大而辞职,生病,死亡,狂饮,而您的工作从上午8点开始。我也从这样的地方跑来,使我的脚后跟闪闪发光。是的,人力资源经理要注意,如果工作时间必须从清晨开始,程序员甚至可以放弃最美味的空缺。



最后,我将提供一个优秀的视频,介绍如何选择程序员,并在本文开头提供了屏幕截图。我也接受了不止一次这样的采访。如果您在提问阶段看到暴政,那么请尊重自己,起床,拿东西然后离开-这很正常。如果人力资源部和面试经理声称要自己付出代价,则表明这家公司具有毒性,除非您不喜欢老板不足,否则您不应该在那里工作。





结论



程序员,去采访吧!并尝试始终上升。例如,如果您收到N笔钱,则至少要接受N * 1.2的薪水,或更佳的N * 1.5的薪水去面试。即使您不立即接受这份工作,您也将了解该工资水平需要什么。

我的观察表明,对英语的良好了解,在行业中相当丰富的经验以及自信是决定性的。后者是生活中其他地方的主要素质。通常,与优秀但更害羞,更主动的候选人相比,更有信心的候选人可以通过面试更成功,即使出错更多。祝您采访愉快!



P / S比赛



如果您有人力资源为您加载的有趣任务示例,请欢迎发表评论。我们已经准备了一个小竞赛-条件很简单:您编写面试中遇到的最不寻常的任务,读者会对其进行评估(加上),然后我们会在一周内总结结果并向获奖者提供有趣的礼物。










All Articles