面试的Communication
coding 部分
拿到题目不要马上就写,先要正确理解题意,了解input的范围:
先写几个例子跟面试官确认input和output确保自己理解了题意(尤其是带有矩阵,字符串,还有数组etc的题目)。
然后跟面试官说你打算用什么方法然后用例子illustrate一下自己的方法,如果有暴力法的话可以先画一个暴力法的例子然后说怎么样可以优化。然后再开始coding就会好很多。第一步很重要,碰上dp直接上来状态转移方程的也是醉了。。。
关于Corner case,corner case的讨论其实是一个评分重点。所以一上来空数组,NULL input和illegal input什么的请务必考虑好。你可以不抠这一部分(因为我知道据说有些公司习惯leave them alone然后让它们自己去丢NULLpointerException)但是你必须跟面试官说清楚了不然会被以为说你没考虑这个。关于数值问题,会不会overflow,正数负数0什么的都要考虑。一个良好的corner case考虑习惯是给面试官的coding的第一印象。同时如果到后半部分才考虑corner case的话难免手忙脚乱,especially当作为bug被指出之后。。。
接上一条,所以在讨论过程中如果要make assumption的话,就问面试官,【假设XXXX】可以吗,之类的。比如说假设不会overflow之类的。。。。就是多用疑问句,面试官要是不质疑就是默许~这个比你默认会好很多。
关于事后的go through,一般选一个普通例子一个特殊例子比较好,然后强烈建议合理应用注释说明到哪一步数字变成了什么样,做了什么操作。同时,coding 中的注释也是可以加分的一部分。
关于bug的影响,写完之前改正的<写完之后发现的<写完之后自己跑例子发现的<面试官发现了之后提出马上改了的<面试官提出之后不会改的<面试官对你放弃治疗了不想指出bug。
介绍自己
自我介绍建议是这样的,大概就是我是来自XXXX,major XXX的学生,我在XXXX方面比较好,我在XXXXX方面有经验(或者是我在XXXXX实习过,实习时候做XXXXX),然后我想找XXXXX的工作——就这样的一个架构。大概就是告诉人家【我是谁】【我会什么】。如果是转专业的人的话,CS相关性很重要,千万避免揪着无关的东西扯。。。会让人觉得【你来干嘛的】然后会对你的编程能力有质疑。。。
然后如果要介绍project的话呢,大概就是用XXX实现了一个YYY。那个YYY是用来干嘛。我觉得最challenge/interesting的part是XXX,我怎么克服的。最多加一句我学会了什么。
可能以上的两条的detail都不多,但是实际上就是这样的(:зゝ∠)如果面试官对当中某一个方面感兴趣(according to他的expertise)他会问你的