我如何准备 Google 实习面试。
大家好,我是 Atibhi,2020 年我在 Google 担任暑期实习生。实习结束后,很多人问我准备策略。
在这篇博文中,我尝试解答学生在面试准备过程中遇到的一些常见问题。我还提供了一些帮助我准备的资源!
我选择的网站 - Leetcode
我浏览过很多网站,最终发现 Leetcode 是最好的。
像 CodeChef、Codeforces 和 SPOJ 这样的网站也确实不错,但它们并非专注于面试/求职,更偏向竞技编程。如果你的目标是参加 ACM ICPC,一定要在这些网站上练习。
对于面试准备,Leetcode、GeeksForGeeks 和 Interview Bit 是最佳选择。Leetcode 完胜其他两个网站。GeeksForGeeks 的理论不错(但代码通常效率低下),但他们的练习平台测试用例比较薄弱。InterviewBit 的题目库很丰富,但题目数量有限,而且社区也不活跃。Leetcode
具备一个优秀网站应有的一切条件:丰富的题目列表、优秀的社论、优秀的测试用例以及一个活跃的社区(这才是最大的优势)。讨论区讨论非常精彩,有时这里的解决方案甚至比社论中的方案还要好。
我被一大堆问题弄得不知所措,我应该从哪里开始呢?
首先,没有理由感到害怕,我们每个人都必须从某个地方开始 :) 如果你是完全的初学者,可以从“最热门的 100 个问题”和“热门面试问题”开始。按难度排序,先做简单的,然后是中等难度,最后是困难难度。
我该如何解答每一道题?
每个人解决问题的方法都不一样。我最初会查找每个问题的答案,但参加每周竞赛(又一个很棒的功能!稍后会详细介绍)后,我意识到自己的方法行不通。之后,我会思考一个问题,设计一个基本算法,然后进行编码。如果花费的时间超过一定时间,我就能找到答案。我还浏览了 Leetcode 的讨论,了解不同的方法。
以下是一些来自不同人士的“Leetcode 入门指南”,请务必阅读!它很有帮助:
- Reddit 上的 Leetcode 磨练指南
- LeetCode 题目模式
- 想要轻松破解 Leetcode 题目吗?
- r/cscareerquestions - 我必须逐一查找 LeetCode 的所有答案。这正常吗?
- 如何有效地进行 LeetCode 编程
我如何衡量我的表现,我正在解决问题,但我有进步吗?
一个词—— 每周竞赛。刚开始参加每周竞赛的时候,我连一道题都答不出来,但随着练习,我开始能答出两到三道。这激励我每周更加努力,更好地管理时间。我还保存了一个Excel表格,用来记录我在竞赛中解答的题目。
我的比赛 Excel 表是什么样的。
我应该解决多少个问题?
重要的不是问题的数量,而是你对概念的理解程度以及处理新问题的能力。即便如此,做那些热门面试问题仍然是必须的。
其他提示
- 从 Leetcode Discuss 上阅读尽可能多的人们的面试经历。
- 在 Leetcode 中针对每个问题进行讨论并提出疑问。
- 如果您的面试临近,请参加 Leetcode Premium 并回答一些公司相关的问题(非常有帮助)。
我应该研究哪些重要课题?
大 O 符号
- 理论
- 《破解编码面试》中的练习题
数组和数学
- 大量练习数组和数学题。以下列出了一些重要的主题。
- 循环数组 - Leetocode 上的典型求解方法
- Boyer Moore 投票算法 Leetcode
- 两题之和 - Leetcode
- 三和问题 - Leetcode
- 四和问题 - Leetcode
- 购买和库存问题 - Leetcode
- 买入和存货问题 II - Leetcode
- 买入和存货问题 III - Leetcode
- 买入和存货问题 IV - Leetcode
- 买入并入库(带冷却时间)-Leetcode
- 与回文有关的问题。
- 最长回文子序列
- 在 logn 时间内找到数字的平方根 - Leetcode
- 子数组和子序列问题。
二分查找
按位操作
- 总结:如何利用位操作轻松高效地解决问题 - LeetCode 讨论
- 可视化位运算的好网站
- https://www.geeksforgeeks.org/bits-manipulation-important-tactics/
树木
- 预订(递归和迭代)
- 后序(递归和迭代
- 有序(递归和迭代
- N叉树先序遍历
- N叉树先序遍历
- N 元树层次遍历
- N 叉树的最大深度
- 树的序列化与反序列化 - Leetcode
- 二叉搜索树
- 最低公共祖先 - Leetcode
- Tushar Roy 的 Morris 中序遍历(视频)
- 线程二叉树
递归和回溯
图表
- 表示图表
- csgator 对 DFS、BFS 的解释(最佳)
- 拓扑排序
- Prims 和 Kruskal
- 迪吉克斯特拉
- 稀疏图上的 Dijkstra - 竞争性编程算法
- 岛屿数量
- 朋友圈
- 解码字符串
几何学
哈希
- C++ 中的 map 与 unordered_map - GeeksforGeeks
- 设计 HashMap
- 设计哈希集
- 滑动窗口算法模板解决所有 Leetcode 子串搜索问题。 - LeetCode 讨论(这很重要!)
- 字符串哈希
链表
- 插入
- 删除节点
- 反向链接列表(迭代和递归)
- 循环链表
- 双向链表
- 弗洛伊德循环检测算法
- 链表循环 - Leetcode
- LRU 缓存 - C++ 实现 - Bhrigu Srivastava
- 使用随机指针复制列表(漂亮的问题!)
动态规划
- TopCoder 文章(非常重要!!!必须)
- 前 20 个 DP 问题(极客对极客)重要!
- Tushar Roy DP播放列表
- 做面试题(好清单):P
- 50 个热门 DP 问题
- DP 与分而治之的区别
不相交集合并集
排序
- 清楚所有排序算法的基本算法和时间复杂度。
- 另外阅读计数排序、桶排序和基数排序。
贪婪的
系统设计
目前,这些是我认为对于面试很重要的主题,显然,这不是一个详尽的清单:)
Google 面试技巧
- 在 google docs 上练习编码。
- 写出描述性的变量和函数名称。
- 诚实一点,别虚张声势。
- 在编码时大声解释你的方法。
- 在真实的环境中给朋友们进行大量模拟面试。
- 做了很多 leetcode。
- 要有信心!
希望这篇博文对你有帮助!祝一切顺利!如果你需要进一步的指导,欢迎留言或在推特上私信我。你也可以通过atibhi.a@gmail.com联系我😄
文章来源:https://dev.to/asquare14/how-i-prepared-for-the-google-internship-interview-2fno