exp2018

转眼已经19年了, midterm结束, 一直拖着的找工总结终于有时间写了, 先说点废话:
其实写经验之前还是有点儿犹豫的, 毕竟经验这种东西是私有属性, 每个人的学习方法都不同, 背景也不同。
所以先声明: 以下事项全部出于个人主观建议, 如果能帮助到你是最好, 但并不是说需要完全按照我的来, 看经验贴、刷题是个体力活, 但本质上其实应该是脑力劳动! 切记! 勤加思考!

offer情况:
3/8: 一共投了8家, 基本上就是大家讨论最多的几家公司了, 贴这个不是为了炫耀, 毕竟写的是经验贴, 总不能拿失败的经验跟大家分享吧. 在这里吐槽一下Amazon, 太玄了, 不建议当成第一目标.

基本情况:
我来美之前有一些工作经验, 所以我针对自己的长处和不足制定了计划, 在国内某里写过java, 所以对java生态比较熟悉, 也算一个优势, 有一个熟知的语言能让你刷题的时候轻松不少, 如果算法有问题可以第一时间定位问题。但这也是一个限制, 尤其是限制思维, 这点后面详谈。在工作中, 我用到的算法最多的就是排序了, 基本上都用别人写好的库和工具, 所以我的工作经验并没有对刷题有多大加成。

刷题量:

从图上看, 其实我没刷多少题, 一共就288, 总提交1250次, 我对刷题的看法是: 重质不重量! (当然了, 有些情况也是能量变引起质变的)
我把经验分为准备和实施两个方面:
北美大厂基本上开始招intern的时间都是8月底开始, 我的建议是在7月前完成基本准备。
基本准备包括:
1.英语: 重中之重, 至少熟练掌握相关术语, 让你在表述时候准确无误
2.编程语言: 练熟一门, 推荐java, lc题解最多的也是java
3.算法和数据结构基础课程: 必须, 推荐UCB的 cs61A\B (https://sp18.datastructur.es/index.html)
4.有余力可以自学web\容器\编程思想\设计模式\操作系统
进阶准备(开始刷题):
1.编辑器: 我是vim党, 推荐VScode(据说有lc插件了), sublime, 不推荐IDE
2.github: 进度追踪 以及自我鼓励 (看着小绿格比较有成就感)
3.算法课: 除了常用算法的, 推荐MIT advanced algorithm, Youtube上有个硬度小哥Tushar讲的不错, 但个别代码有错误. (还有一个国人用中文讲的不错HxxHxx, 不过不太推荐听中文的…..)
其他:
吃好点\咖啡\可乐
前辈的资源帖: https://www.1point3acres.com/bbs/thread-146158-1-1.html

Timeline:
7月: 刷题
8月: 刷题, 准备简历
9月: 刷题, 找地里大佬内推
10\11月: 同上

以上就是我自己做的所有准备了, 然后说说具体实施:
我爱睡觉, 所以通常下午刷题, 一个小tip就是, 约面试的时候约下午, 状态会很好
一天计划: 2-2-1 (2 easy, 2 medium, 1 hard)
重点来了, 我是如何刷题的:

1. 从lc上粘贴题目下来保存到本地, 每一题写一个class (用java的同学推荐使用Spring当容器, c++ python无所谓)
2. 认真读题和例子, 用自己的话(英语)说出这题是干什么, input什么, output什么 (很重要, 前期尽量准确, 后期要限时)
3. 草稿纸上写写画画 (思路)
4. 开始coding (开始很难, 没思路看看讨论)
5. 自己写test case, 然后编译运行, 跑跑例子举一反三, testcase都过了去网站提交代码
6. 分析一下时间\空间 (看别人答案, 和自己的对比) 提交github

一开始基本上卡在5, 我本着绝不留问题过夜的原则, 如果晚上洗漱前还做不出来, 我会去看别人的答案. 看答案不丢人(划掉), 这个过程是我请教了很多FLAG工作的大牛总结出来的, 看起来很啰嗦, 但经我验证非常有用, 8家我拿到面试5家, 用这个步骤面试只fail了两个, strong hire据内推人反馈也是有的.
lc题目的话 按topic tag刷 思路比较连贯 先写这么多吧 有问题的小伙伴留言问吧~ 谢谢大家