谷歌面试技巧

寒暄 -> 分析问题 -> coding 代码转化 解决问题 -> 代码测试 -> Followup 优化 -> 提问

面试要领:
##########################################################
1 首先和面试官讨论清楚 edge case,所有assumption。
思路通过了才开始写代码。
拿test case举例子模拟跑一边,testcase很有用,尤其当中间遇到不清晰的case,直接举例子辅助写代码
2 写代码
注意代码规范和整洁 细节:
传参用能用尽量用 const & 尤其是比较大的数据结构copy memo cost, int、long就没太大所谓了
for (const auto& item: v)
for loop, if statement 即便是一行代码也要包住{ …}
function 开头定义变量 local var
先check edge cases,再做操作。
注意主要操作部分 先写代码结构,打comment,再填充代码。 力求思路清晰!
基本写完了debug环节:
compile error:
Runtime error:
seg fault? access dummy memory, index out of range…
cerr 在seg fault 之前打印是可以打出来debug的
3 最后再考虑优化:
nested if 能否合并 if else if 。。
loop 循环能否压缩 排除重复counting
代码复用 写一个helper function
########## 面试注意事项 ##########
明确题意:通过与面试官交流明确需要解答的问题。这部分主要为了让自己放松心态,并且给面试官留下你具有良好团队
意识和交流能力的印象。
描述大体思路:描述你打算用什么算法,什么数据结构。主要是为了让面试官了解你的思维过程,如果你给出的解答与他
想要的答案偏差太多,可以及时纠正。同时,描述思路也给了你自己思考的机会。
实现算法:先处理边界条件。对于重要的算法模块,加一些注释或者与面试官进行交流。目的是让面试官始终了解你在做
什么,算法框架是什么。
跑一个测试:用一个测试用例(test case)走一遍你写的程序。目的在于和面试官一起确保你的算法是有效的,可以在过程中
及时发现并纠正自己的错误。同时,给面试官留下你有写单元测试习惯的良好印象。
描述算法复杂度,回答面试官的问题