如何做编程知识投资及减少知识失效的影响


参考

本文转载自https://liuzhenglai.com/post/625131eda6983941cca711cc

转帖至此, 版权归原作者


前言

  • 时间线管理
    • 提前开始Phone Screen, 然后扎堆安排Onsite. 我这次由于休假才开始电面, 所以各个公司的流程参差不齐, 有的公司offer都已经快过期了, 别的家还没下offer, 导致我不得不拖着一些offer, 也是很不好意思. 不同公司的流程不大一样, 有的快有的慢. 面试之前我听说Google的流程比较慢, Facebook的比较快. 可是我的实际体验是, Facebook电面结束后花了两周时间做背景调查, 又赶上年中绩效评定的时间, 面试很难约上. 最后Facebook拖拖拉拉是我最后面完的一个公司. 反而Google却是非常快的. 最好提前一两个月先把各家公司的电面完成, 然后把(Virtual) onsite约到比较接近的时间, 这样可以尽量确保公司出offer的时间比较接近.
    • 面过了, 如果希望各家公司一起出offer, 可以让HR不着急出offer number. 一旦出了Offer number就会有deadline.
  • 行动要趁早, 不要拖: 如果有跳槽想法就要尽早跳, 不要拖, 不要觉得还没准备好(面试内容多且杂, 永远不会有一个完美的准备好的状态), 边准备边联系, 早面早踏实. 即使挂了来年也可以更早面. 对我来说, 在微软刚升Senior的时候就跳槽是性价比最高的.
  • 多面: 先拿一些公司练手, 拿Competing offer, 有时候有意外惊喜. 失败不要气馁.

生产力/笔记: Notion.so

职位等级查询: levels.fyi

刷题

加入残酷群! 加入残酷群! 加入残酷群!

以我个人的经验, 我在残酷群一年里的成长远大于我之前自己单打独斗多年的成长. 我为我没有早点知道残酷群而感到惋惜, 否则早就可以行动了.

为什么加入残酷群很值得?

  • 大牛: 群里有很多大牛, 其中还有不少有竞赛经验. 可以从他们那里拓宽眼界, 收到指点.
  • 套路: 很多题目类型的解法非常套路, 比如二分查找, 滑动窗口). 这些题目最好先使用大牛已经总结好的模板, 熟悉之后再做自己的修改, 这样可以避免走弯路, 事半功倍.
  • 专题: 残酷群的题目是群主精心按类别循序渐进地选择的, 适合大家在一段时间内把一个专题完全攻克.
  • 坚持: 自己学习难免有懈怠的时候. 小组里面的学习气氛可以激励自己坚持.
  • 互通: 面试同一家公司的群友也可以私下建群交流面经. 求LeetCode相似的题目或者问面经解法, 群友一般都可以解答.

我的投入

  • 我github上的C++ LeetCode代码

我的建议

  • 专题: 按照群主的专题分类进行专项突破.
  • 多总结记录: 算法知识内容比较多而且散, 容易忘记, 而且自己的解法/模板一开始可能不是最优的, 需要不断迭代. 把自己的经验记录下来, 做题目归档, 总结/迭代自己的模板和套路, 可以让刷题效率更高.
  • 时空复杂度: 要对时空复杂度敏感, 每道题都要估算.
  • 问清题意: 确保题意明确再下手. 某些题可以简单快速列举一些testcase.
  • 一题多解: 有时候面试官会考察你是否是死记硬背的, 是否对知识点融会贯通, 让你换一种解法/思路. 所以平时做题的时候, 如果时间允许, 尽量多想想有没有别的解法. 以图的连通性的题为例, 可以DFS/BFS/UnionFind.
  • 求提示: 先尽量把自己能想到的讲出来. 有些题的关键点很Tricky, 需要灵光一闪. 如果闪不出来, 放心地求提示, 然后展示自己根据提示修改思路的能力. LeetCode里面做不出来也可以看Hint, 或者看看题解的提示, 然后尝试自己做一次.
  • 网站:
    • 洛谷: https://www.luogu.com.cn/. 有裸题可以用来测试代码模板.
    • oi wiki: https://oi-wiki.org/
    • cp algorithm: https://cp-algorithms.com/
  • 看视频: wisdompeak; 花花酱; _黄歪歪; 一俩三四五; 大雪菜. 学习大神的思路
  • 周赛: 虽然没有沟通交流部分, 可以帮助熟悉类似面试的那种限时的紧张感, 而且对自己的进步有直观的反馈.
  • 限时: 一道题如果做不出来, 不要花太多时间, Hard限时15分钟. 做不出来就看答案, 有的时候关键点想再久也不一定能想出来. 要注意效率.
  • 坚持. 那种刷一两百道就去FANNG的是少数, 咱们需要耐心坚持. 残酷群里的很多大佬都在坚持.

Behavioral question

自我介绍

  • 2-3分钟的自我介绍.
  • 我个人是按照时间顺序, 旧的经历稍微简略, 近的经历可以作为重点.
  • 结尾, 可以总结自己的闪光点, 以及我为什么适合这个职位/贵司.

Amazon Leadership Principle

14条军规. (最新变成了16条)

  • STAR: 每一条按照STAR (Situation, Task, Action, Result) 填写至少一个事例.
  • 量化: Result尽量用数字量化.
  • 点题: 针对心仪的公司/组, 可以仔细看看Job Description, 把自己的故事和JD中要求的一些要素结合在一起.

常见问题

  • Teamwork: 如何分工合作.
  • Problem Solving/Planning: 如何设计和实施某个项目; 如何攻克一个难题.
  • Initiative/Leadership: 如何主动地发起/推进项目; 怎么展现的ownership/leadership.
  • Interpersonal skills/conflict: 如何解决矛盾.
  • Pressure/Stress: 如何处理压力; 如何处理deadline.

一般事例都是成功案例, 但是有时候会问, 你失败的一次xxx是什么. 这种问题的重点是看你有没有吸取教训, 之后做出了哪些相应的改进.

平时软实力的体现, 需要平时积累. 面试时注意点题, 如同理心, 设置milestone和执行力等等.

准备问面试官的问题

个人喜欢问”你觉得贵司的好和不好的点有哪些” (问得婉转growth mindset一些, 可以改进的地方有哪些)? 我想去了解大家在公司里的幸福感从何而来, 以及内部有哪些被诟病, 可以改进的地方. 特别是不好的点, 面试官的回答往往各式各样, 会告诉我一些我完全没想到的问题, 帮助我更全面地了解公司.

我另外一个喜欢问的是”贵组最近一年的发展如何? 未来一年的计划如何?” 想通过这个问题了解组的发展速度和前景.

其他的问题根据面试官的自我介绍和聊天内容自由发挥.

系统设计 (System Design)

准备材料

我看过的:

  • Grokking the System Design Interview

  • Designing Data-Intensive Applications (DDIA)

  • 目标公司的Engineering Blog. 比如Facebook Engineering的Live Commenting: Behind the Scenes. 这是一个经典面试题.

  • Youtube: Top Facebook System Design Questions

  • Google Non Abstract Design

    • 个人感觉核心点就是1. 从简单(单机)往复杂设计. 2. 设计东西不能脱离现实, 需要认真估算负荷以确保设计是可实施的.
    • 个人感觉对面试帮助不大, 但是对工作有指导作用. 面试中没时间让你从单机开始设计, 需要直接到达比较合理多机的设计, 然后再讨论扩展性.
  • 九章的

    4S分析法

    Scenario(场景),Service(服务),Storage(存储),Scale(扩展)

    • 我的理解就是, 先通过提问问清楚Scenario, 然后设计Service和Storage, 最后根据面试官要求讨论Scalability.

拓展阅读:

经验

模拟面试

不像算法面试, 对和错很明确, 至多加一个思路/代码是否清晰, SD的内容非常丰富广泛, 所以不同公司/面试官差别比较大, 个人觉得找目标公司的人面试一下还是很有必要的.

interviewing.io上可以花钱请目标公司的员工来面试自己. 模拟SD一次$225, 个人感觉这钱花得值得, 拿一个大包就轻轻松松回本了.

我的interviewing.io referral link: https://iio.sh/r/rUwQ (双方互得$30)

算法不建议花钱面试, 刷题就够了. 如果担心英语表达, 可以上pramp上免费互面.

我的pramp referral link: https://www.pramp.com/invt/J6WZz5v7gaUp39r0B8x4

Drawing Tool

https://whimsical.com/

个人感觉最好用好看的. 面试能不能用得问考官, 但是自己记笔记时用也很不错.

实际面试可能用到https://excalidraw.com/. 可以自己添加一些模板, 节约时间

默认是手写字体, 改成Normal更好读一些

我的记录

获得面试机会

  • Linkedin上被勾搭 (完善Linkedin的重要性)
  • 求内推
  • 官网自投简历
  • Linkedin搜索该公司的recruiter, 发私信.

看面经

我以前是比较不屑于看面经的, 感觉有点作弊. 但是我后来发现:

  • 有些小公司, 面试题可能非常特殊/单一.
  • 有些大厂, 比如Facebook, 题目不难, 更侧重考察你的熟练度和思路清晰度.

所以针对性地做准备还是很有必要的.

找面经也很简单. 去一亩三分地的海外面经板块, 搜索公司的名称就好了. 过十几二十个帖子把题目汇总到一个地方, 然后自己刷就好了.

谈包裹

包裹调研

知己知彼, 百战不殆.

拿到offer之后, 甚至是之前, HR会问一些薪水期望. (特别是你还没有competing offer的时候; 如果有了competing offer, 把对面的数字甩出来让对方compete就简单多了). 因此, 了解该公司该职位的薪资范围特别是顶包是很有必要的, 这样报期望的时候可以直接照着顶包去报. 另外对面给出初始包裹之后, 也可以对于还有多少谈的空间, 心里有数.

调研包裹, 可以去一亩三分地的抖包袱板块, 搜索公司名称, 职位类型, 地理位置等等, 过几个, 把数字记录下来对比一下, 就可以心里有数了.

另外一个了解包裹比较好的网站是Blind. 这个网站里有很多匿名分享的信息.

一亩三分地

🔑晒工资抖包袱 板块遍历或搜索(消耗大米)

比较麻烦的是里面的很多帖子需要足够的大米(类似于积分)才可以看. 每天的签到和答题打卡可以获得两个大米. 这里强烈推荐一下Chrome插件一亩三分地每日答题助手. 答题答错了是会扣一个大米的, 所以答错了一天就白费了. 这个插件可以标注出哪个是正确答案, 超级好用.

经验

Competing Offer

我觉得最重要的一个谈包裹的”技巧”, 就是拿competing offer.

个人认为, 靠嘴遁的话, 只能在HR能控制的范围内小小浮动. 想要有大幅涨薪, 需要HR的上层审批, 需要用competing offer作为依据. 所以, 要多面一些.

跳槽几年跳一次, 懒不得. 另外, 多接触公司, 也是一个接触各种不同公司文化, 了解行业行情的机会. 我认识的一些人就是最后去了那些本来打算面着玩儿的公司.

别不好意思

另外一个心得是一定要狠, 不要害羞.

大家都是拿钱办事儿, 并不会因为你少要, 公司就心疼你照顾你. 所以, 照着顶包甚至更高要.

薪资比较

可以弄一个Excel计算. 方便对齐各个公司.

身份

L1出国 (例如微软)

要求: 过去三年至少在该公司工作连续一年.

L1与公司绑定, 不可跳槽.

可以抽H1B, 抽到后就可以跳, 新公司需要提供新的H1B.

在微软, 如果抽不到H1B, 公司可以让你去加拿大远程工作, 然后一年后再回来.

H1B

跟HR问什么时候可以开始抽. Premium Processing (PP)是否公司报销.

绿卡

绿卡三部曲是PERM, 140和485.

跳槽的话需要从头走绿卡流程. 例外: 485递交180天之后, 新雇主可以沿用旧的485.

如果140批了之后, Priority Date (PD) 就固定了, 即使跳槽要重新从PERM走起, 依然可以关联到旧的PD.

如果跳槽需要重新办理PERM和140, 跟HR问清楚大概需要多久.




Enjoy Reading This Article?

Here are some more articles you might like to read next:

  • 2379. Minimum Recolors to Get K Consecutive Black Blocks
  • 2471. Minimum Number of Operations to Sort a Binary Tree by Level
  • 1387. Sort Integers by The Power Value
  • 2090. K Radius Subarray Averages
  • 2545. Sort the Students by Their Kth Score