程序员面试那些事儿(一)——面试官希望什么样的答案

2018年02月27日 13:45供稿中心:

    在IT公司的技术面试中,面试官常常会提出五花八门的技术问题,最难回答的恐怕是分析/设计类问题了。因为这类问题大部分没有标准答案,面试官要考察的是你在遇到问题时的第一反应、思维逻辑、思考方法、解决问题的方式、偏好等,然后综合这些因素来评估你的工作经验以及在未来团队中的位置和融入的可能性。
    所以,程序员在平时要注意培养自己从多个角度看待问题、提出解决方案的能力。因为工业界的解决方案通常取决于用户现有的技术条件及需求,如果仅仅用教科书里给出的经典方法来回答,结果往往不能令人满意。比如下面两个例子:
    1.请问如何将单链表反转?
    这道面试题恐怕是程序员技术面试中最常出现的问题了,有很多种解决方案。很多程序员,特别是刚毕业的同学的第一反应就是用C语言和数据结构课程中学到的递归算法来作答。
    当然,递归方案非常经典,但是,很重要的但是,这个答案只能算是中规中矩,面试官最想听到的并不是这个答案。
    因为递归的效率并不高,每一次调用都会产生大量的内存占用(与清除)。对于长链表,还有发生堆栈溢出的风险。所以,如果你给出用循环(不占用额外存储、降低堆栈溢出的风险)或递归嵌套循环(并且时刻监视内存的使用及是否有内存泄漏等风险)的方案,面试官将对你刮目相看。
    2.有一个大型无线网络,其中几千台无线热点部署在城市的不同地区。管理员发现,其中80%同一型号的AP会不定期地出现死机现象,这时无法进行远程访问,也无法自动重启,只能人工重新在本地断电重启。由于所有AP均为企业级,有日志定期上传到管理服务器,因此分析得出此类AP会在频繁使用的24—48小时内出现上述死机现象。这个问题极度困扰网管部门,请问如何解决?
    一部分面试者会提出统一升级固件的方案,这是一种方法,除此之外,还有其他方法吗?我们知道,提供服务的网络设备(如无线AP)通常会提供远程访问接口,常见的有SNMP、Telnet、TFTP,高级的有SSH。TFTP有的会被用来上传固件;SNMP多数只提供读,较少支持写,这一批AP也不支持SNMP写;最后就只剩下Telnet接口了。传统意义上远程Telnet登录并执行reboot操作即可。但现在的问题是如何自动登录几千台AP。经过上面的分析,这个问题已经简化为:写一个UserAgent来自动Telnet登录,把它放到一个大的循环中访问几千台AP,而自动登录时间选择在凌晨3点到4点,因为几乎没有用户会在这个时间段登录。再完善一点的解决方案是先通过SNMP或Telnet判断是否有活跃链接用户,等待其下线再重启,这有点像ApacheWeb服务器的平滑重启。再进一步考量的是发起大规模Telnet登录请求的主机用何种方法来完成工作:循环、多进程、多线程、非阻塞I/O,以及异常处理等因素。
    通过上面这两个简单的例子,相信你们已经能感受到在真实工业环境下应如何分析面临的问题、如何因地制宜地提出最适合的解决方案。面试官最想听到的答案就是能充分利用现有条件,帮助客户解决问题的方法。记住:教科书上的最优解不一定是最好的,但能解决客户问题的方法一定就是好方法。

相关搜索

热点关注

在线报名卓京人的精彩瞬间