程序员工作面试的秘密

       这星期看了《C专家编程》的一部分“程序员工作面试的秘密”,我觉得里面的东西讲得非常有用,这里写写我对书中提到的一些问题的看法。


       首先不得不说,我感觉我根本不会C语言编程,我所知道的仅仅是简单的语法,对编程语言的理解根本就没有深入下去。我觉得掌握一门编程语言意味着你至少能对一些关键的语句说出他的底层原理,处理一些数据量比较大的问题,能做到这点对程序的优化真地很重要!比如++x 和 x++的区别,前者表示取x的地址,增加它的内容,然后把值放在寄存器,后者表示取x的地址,把对应值放在寄存器,然后去增加内存中x的值。我之前就不知道。再比如A[i++] += 1;这里i++是只执行1次的,我之前是知道这个的,但是不能很好地解释原因(原因在于左值通常只有1个地址,只能被计算1次)。


        好了,步入正题了。想加大型公司或者学术机构的一个组,你必须能让组里的所有人信服你的实力,所以面试会持续很久。所以我切身感受到了加入这样一个组的难度,以前基本以为GPA就能代表很多东西,面试只需要去划划水就行了。但是在这样一种强度面试的情况下,个人的真实能力几乎能被无死角地发掘出来,所以面试的占比是很大的。


         而且,每个面试官问到的问题都是比较personal的,所以可能有些偏,这个时候你能不能回答出来就不是问题的关键了,你给出的最后反应也不重要了,关键是考察你是怎么做出反应的。是深思熟虑,面面俱到还是脑子里面有想法就马上说出来?在说明自己想法的时候,使用的论据是否有足够的说服力?思维是否灵活?面对一些问题,能否快速地做出反应?

 

        文章中还提出了一些其他很底层的问题,直到看到了这些问题,我才明白操作系统对编程人员的重要性!比如一个问题:库函数和系统调用区别何在?问题简明的答案是:库函数调用是语言或者应用程序的一部分,用户态执行,属于过程调用,开销小;而系统调用是OS的一部分,内核态执行,需要切换到内核态,切换开销大。我是这段时间一直在看OS,才能勉强回答这个问题,之前没有仔细思考过。

        还有比较迷糊人的问题,比如打印二叉树的时间是多少?面试者可能没意识到面试人想问什么,不假思索地回答O(logN),这是很不可取的。很明显,打印一棵二叉树的时间复杂度是O(N)。回答问题之前一定要有清晰的思考以及准备好你坚实的论据!三思而行,不然很有可能就丧失了机会!

posted @ 2018-04-04 12:02  eeom  阅读(199)  评论(4编辑  收藏  举报