湾区求职分享:三个月刷题拿到 Google offer,欢迎踊跃提问

本文仅以我的经历和我的观点做为参考。如能受益,不胜荣幸。
本文会不断的修正,更新。但愿经过你们的互动最后能写出一份阅者受益的文章。
本文纯手打,会有错别字,欢迎指出,虚心接受及时更改。
小马过河,大牛以为轻松,松鼠以为可怕。java

湾区求职经验分享:我是如何经过三个月努力拿到Google offer,欢迎踊跃提问!node

有朋友指出“三个月”是否是哗众取宠博取眼球。其实我确实是实话实说(详见下文)三个月。我只是想分享如何高效的作题,让你们少走弯路。那些刷五遍十遍的朋友,在我看来是走了弯路的,若是你们都能一两遍作懂,何乐不为?python

本人背景介绍:程序员

  • 本科国内某211,EE major Power
  • 硕士研究生USC CS General

实习经历web

  • Amazon Inc, Seattle, WA. 3-month intern
  • Tesla Motors, Fremont, CA. 4-month intern LinkedIn

简历

简历的意义:简历到底有多重要?是否是要把简历写的很Fancy?写的比较多比较夸张会不会被问到?面试

对于New Grad来讲,简历只是敲门砖,好的简历的目的是让HR注意到你“哎哟,这个New Grad不错,给ta安排一个面试吧”。因此,你的最终目的仍是有面试机会。好的简历可以帮助你经过机器筛选和HR的筛选,可是不少时候,简历普通也是能够拿到面试机会的。“简历普通”不表明“简历写的差”,下面我会详细说明一下。算法

一个优秀的简历大概的样子:数据库

Name: John Doe      
Email:jd@gmail.com      
Phone:xxx-xxx-xxxx

EDUCATION:
08/2014 - 05/2016   University of Southern California (USC)
M. S. in Computer Science   Los Angeles, USA    GPA: 3.80
......
//这个没什么说的,简单明了就好

EXPERIENCE:
2015/05-2015/08 : Amazon Inc, Seattle, WA
Position: SDE Internship
- Design and develop a realtime data aggregation workflow...
- Use AWS Kinesis to consume the original chunk of data...
- Develop a Java data processor that runs on AWS EC2...

2014/07-2015/01 ......
//写一下本身曾经在哪工做/实习过,大概作了什么内容用了什么技术。

PROJECTS:
Web Search Engines on Arctic Data Information Retrieval
- Build a search engine based on Apache Solr for polar data analyzation.
- Design and develop web crawler to fetch data from polar science website
- Use SimHash algorithm for near-duplicates deduplication.
- Build a web search engine and apply page rank.
......

//须要对project技术性的描述。项目名称,以后以bullet point的形式写用了什么技术,实现了什么东西。

SKILLS:
- Programming Languages: Java, Python, PHP, JavaScript
- Operating Systems: RHEL, Debian, Mac OS X
Data Analysis: Hortonwork; AWS EC2, S3, CloudWatch, Kinesis; NoSQL, RDB 
- Web: LAMP
......

//SKILLS的建议是,不要写本身不会的,你写Python就要期待面试会用Python面你。任何写在SKILLS上的东西都会被问到。

总结:编程

  • 好的简历不须要Fancy的排版,大方得体就行,不要有“酷炫”的感受;
  • 尽可能安排在恰好一页。不须要超过一页(大牛除外);
  • 内容最起码要“基于真实”,能够“适当加工”;

标准是:任何写到简历上的东西面试官问道均可以详尽流畅的表达清楚。用了什么技术?哪些service?“看你简历写用AWS EC2了,给我详细讲一下AWS EC2和你使用的时候遇到的困难”这类问题。设计模式

实习的重要性:
若是说一个“完美的简历”是100%的话,一个好的工做/实习经历决定了这份简历的50%-80%,若是能够尽可能去大公司实习,尽可能多去几个不一样的公司实习。除了实习以外:论文、Project、名校会分剩下的20%-50%。4.0会是一个小小的Plus,除此以外在3.0-3.9之间没什么区别,可是不要低于3.0,其实除了Oracle以外没多少人会看GPA。

若是说你没有实习经历,最好的建议是用从如今到毕业的这段时间给本身多找几个实习。
若是说你已经毕业或立刻毕业没有时间实习,那么就把在学校作过的Proj多写一些。

刷题

三个月的过程:
2015年12月从特斯拉实习结束,到2016年4月面试完谷歌,一共四个多月时间。元旦给本身放了两周假期,过年给本身放了两周假期,中间再穿插着出去玩。连续的用在刷题的日子大概有三个月。我是天天“全职刷题”的,分派给天天的任务(x道题)会被我分红上午a道,下午b道,晚上c道。若是提早完成,剩余时间自由支配,放松一下。

从2015年12月开始刷题,就给本身制定了一个作题计划,在衣柜的镜子(没有白板-。-)上制做了一个表格,这个表格是我天天自我check的参考。原计划是两个月作完全部题(约340),但事实是一直到找到工做也没有真的作完全部题。最后作了250道unlock的和全部lock的题(咱们几个朋友合买了一个leetcode会员)。

我以前的基础:
本科没有学过编程,研究生上的算法课也上的不是很懂,不少课堂上的概念反而是刷题的时候才理解。

2015年初,在面Amazon Intern的时候刷过一次题,作了大约100个 easy 和 medium。在学校一边上课一边作题,三天打鱼两天晒网效果很差,只学了个皮毛。

2015年末翻看作过的题,基本忘光了。干脆搞个新帐号从新开始。此次是每作一道题进行一次总结。翻看leetcode的热门评论,把本身的解题思路和别人比本身写得好的解题思路都详细的记在笔记本上。遇到一道新题就尝试理解,归类,翻出老题作对比,写code,看热门答案,更正、优化本身的答案,为何他能想出这个解,搜一下相关不熟悉的知识点。

这个方法开始起步会特别慢,没有什么成就感。可是效果出奇的好,刷了一半,只要作过的题,理解的十分透彻。遇到一个考到的算法或者数据结构,好比trie tree,就会回去看全部trie tree分类的题,主要是看题目,回忆解法,若是想不起来或者不是很自信,再写一次。反之很熟悉,脑子里过一遍就继续下去。看完trie tree也会想到Binary Search Tree, Segment Tree, Binary Index Tree。脑子里对这些数据结构过一遍。

这样作题到后来的感受就是,everything is connected. 随便给一个题,就能找出这个题和什么题是相似的,或者其本质是这个算法的变形。简而言之,明确的感受到,本身学懂了。

刷题是枯燥的,若是你想着用毅力用坚持,只会让它更枯燥。毅力是必须的可是坚持每每是痛苦的,何不让这个过程变的快乐。这个年代人人都是千里马,可是伯乐不常有。咱们只能作本身的伯乐,给本身制定最合适的训练方法,因人而异因地制宜,本身既是“运动员”也是“教练”,毕竟仍是本身最了解本身。时不时给本身一些奖励,给本身放一个小假出去转转。

其实辛苦几个月,没那么难。和农民伯伯同样,种地是辛苦的,但是丰收是喜悦的。当你发现你努力了一个月以后,作过的题能够驾轻就熟,还能够给别人讲的头头是道,仍是十分有成就感的。毕竟才几百道题嘛,比上高考差远了。作到炉火纯青很难,可是驾轻就熟仍是指日可待的。

怎么刷题:

最多被问到的问题是:刷题刷多少遍才够?我想说,答案因人而异,我一遍都没刷完,感受就够了。由于刷题的目的并非为了刷多少遍,而是为了作懂题。举个例子,参加太高考的都知道,高考是不会出你作过的题的,那作《5年高考3年模拟》还有用吗?答案是确定的。刷算法题和作高考练习题的意义是同样的,你的目的是理解出题人想要考你什么,如何解题,几种思路,最后写出最优解。

如何“一遍都没刷完”而作懂题?

“善于总结”是核心。仍是拿高考举例子,“不会作的题和作错的题”远比“作对的题”有意义,只有从错题中才能进步。作算法题也是同样的,不要在烂熟于心的题上面浪费时间,把时间用在错的,不理解的题上面。

拿到一道题,怎么作?
就拿Merge k sorted Lists这一题举例子:
Merge k sorted linked lists and return it as one sorted list. [Java]
1) First think about a simple merge idea. Go through k head elements each time, they are the smallest among their list, k pointers and totally nk elements.
time: O(nk^2) space:O(k);
[CODE] 略,本身写一下把,这个简单

2) Use heap. This is a classic question for heap. each time we change a heap value we only use Log(k) time
time: O(nkLogk) space:O(k)

1) A comparator used can be passed to Collections.sort(coll,comparator)
2) In java, heap is implemented as PriorityQueue. The constructor
PriorityQueue(int initialCapacity, Comparator<? super E> comparator)
constructor is initialized with capacity and compare rule.
3) Java anonymous class is used to simply create and use this comparator
4) The node inside list could be null
5) PriorityQueue use poll() method to pop out it’s first element

public class Solution {
      private static final Comparator<ListNode> comp = new Comparator<ListNode>(){
      public int compare(ListNode x, ListNode y){
        return x.val-y.val;
      }
    };

    public ListNode mergeKLists(List<ListNode> lists) {
      if(lists.size()==0) return null;
      Queue<ListNode> heap = new PriorityQueue(lists.size(),comp);
      for(ListNode node : lists){
        if(node!=null) heap.add(node);
      }
      ListNode dummy = new ListNode(0);
      ListNode p = dummy;
      //heap did not implement isEmpty method
      while(heap.size()>0){
        ListNode node = heap.poll();
        if(node.next != null) heap.add(node.next);
        p.next = node;
        p=p.next;
      }
      return dummy.next;
    }
}

一、这一题明显是考Heap的,若是对Java PriorityQueue不够了解的,就应该去复习一下。Java7和Java8不太同样,Java8在传入comparator再也不须要给定size。
二、代码中写到了Collections.sort(),和在sort中写匿名类。
三、为何要写dummy?在那些题中须要写dummy而return dummy.next。那些题不须要?
四、为何用Queue interface,用List->LinkedList能够吗,是否要复习总结一下list,queue和它们的implementation? 若是对Object Oriented 不熟悉的,是否要再看看继承(Inheritence)和多态(Polymorphism)。那再往深处想想,Abstract Class 和 Interface 的区别,优缺点呢?

这些 Java 基础就是作题的时候要想,不是很理解就要及时解决。基础很差的同窗,刚开始作会比较慢,因此一道题作完过去了大半天,这很正常,等作多了,烂熟于心了,作题就快了。每次作题也都是对知识点的强化。

代码[CODE]部分和代码上面我本身的思考笔记都是写在Evernote上的,每次写完代码要把遇到这个题时候的想法,解题思路,看完别人答案以后本身的理解,基于答案对本身code的改进写进去。

Design:
Design能够基本分红Object-oriented Design(OOD)System Design(SysD). 简单说一下个人理解:
OOD: 面向对象设计,顾名思义,针对开发过程当中的结构,关系,逻辑进行设计。好比说:设计电梯;设计五子棋;设计各类游戏等
SysD: 更可能是scalability侧重。好比:DB(Master-slave),sharding,Cache(Redis, Memcached), Load-balancing等等

OOD 推荐:

SysD 推荐:
hiredintech
http://highscalability.com

一个很不错的帖子:https://www.evernote.com/shard/s576/sh/7e58b450-1abe-43a8-bf82-fbf07f1db13c/049802174415b418a2e65f75b744ab72

一、 这个准备但是没有尽头的。对New Grad来讲不必在这上面投入太多时间。我用了两周时间,OOD和SysD各一周。
二、SysD把hiredintech网站的这个教程看两遍,尤为是Harvard 的那个1小时45分钟的视频,我前后看了三遍。第一次彻底不懂讲什么,只是记笔记听课。而后上highscalability.com 看了几个例子。搜了搜全部视频里介绍到到概念。再看第二遍1.5倍速,基本理解透彻。面试前2倍速看了一半,回忆一下。
三、 OOD没有尽头。最起码记住,理解,会用Singleton和Factory这两个。剩下的吹牛逼就行。OOD不多有绝对的正确或者错误。一般看你能不能说出这样设计的优势和缺点,选择的得失。
四、不要在design上面花太多时间。这东西,你不用也记不住,也不理解。抽出两三周好好理解几个例题就好,记笔记,onsite以前再复习一下。
五、 SysD我跟着Harvard的lecture画了一个有广泛适用性的图,不一样的公司/业务scalability均可以套用。仔细看lecture。

面试

面试Pipeline:
HR安排面试 -> (HR聊天) -> (OA) -> 电面 (x 2) -> onsite -> (加面)
备注:(括号内容)或许有,或许没有。

最关键的是如何让HR把你放进pipeline,给你安排面试。有几种方式:海投 < 校园招聘 < 内推< 直接和 HR 联系

因此说,最好的状况是,HR主动联系你。说明ta对你感兴趣。那么ta必定会给你安排进面试pipeline。那么如何作到让 HR 主动联系你呢?
一、优秀的简历(经历);
二、 LinkedIn Allstar;
三、Hackathon,Hackerrank 等活动/平台比较出众;
4.、从有面试的人手里得到 HR 的Email,主动和 HR 联系,毛遂自荐。

1和4结合效果最好。推荐你们把简历写好,而后从你周围面试的朋友那里要到 HR 联系方式,而后毛遂本身。

主动联系HR:
前文说到,能直接和 HR 联系是最好的。简单粗暴的方法是,从朋友那里要到 HR 的联系方式,主动发 Email 过去,自我描述外加简历。一般 HR 都会很快的回复你。

标题能够用:Strong Background Candidate You Might be Interested.
内容:简单介绍一下本身,和本身作过的proj。感受和贵公司方向/产品/文化很match。
附件:简历

最好是直接联系校园招聘的 HR。HR的 level 和 focus 有不少,有些是专门招聘大牛的,工资,面试等都是单独谈的。有些是面对New Grad。有些面对普通跳槽的。有些公司HR是跟组的,好比Apple,某组的hr专门为这个组来找人。

一般状况下,若是HR认为你不match,会给你推荐给你对应level的HR/别的组的HR。

电面:
电面“一般”比Onsite简单,可是这个“一般”在Google Uber等“比较火”的公司这里不适用。Google的面经能够说“深不见底”,因此若是你是aim the top的话,仍是推荐把题目作到融会贯通。

Onsite:
我的感受onsite没有必然比电面难或者简单。出什么题,随机性很大。一个面试官大概有准备的题会有三五道,ta一般从本身熟悉的三五道题里出题来考你。
考核的内容是:

对问题的抽象和理解:这里期待你回答的内容是:”这道题能够抽象成拓扑排序,有些步骤须要在其余步骤以前执行,若是没有造成cycle那么整个就能完成。” 可以庖丁解牛的把这道题的本质分析清楚,剩下的就是实现了。固然,有些题没有见过,猛一看并不能说出个一二三来,那么就须要和面试官沟通了。

沟通能力:如何同面试官沟通?遇到一个没有见过的题,或者遇到写到一半写不下去卡了,这时候就须要“试探”面试官了。假如遇到一个有关比较大小的题,你不会,你总能想到 1排序 2DP 3divide conquer 那么你就说,目前我有几个不成熟的想法:1,2,3. 可是不肯定哪一个更合适,你怎么看?一个通情达理的面试官马上就理解了,他会说,能够从排序试试。这里的核心思想是,不要不会就不说话,要去旁敲侧击试探性的提出几个假设,看面试官怎么回答。

Coding:和面试官“商量”的差很少,肯定了思路,就能够开始写了。写代码其实没什么说的,刷题都刷够了。这里的建议是,白板写代码最好本身带笔,我面试都是本身带“粗细程度为fine的黑红蓝绿白板笔”(amazon买的),由于细一点的笔方便我写的清楚,节约白板空间,减小涂抹,清晰好看,和面试官讲本身代码时候用另外一种颜色,清晰明了。

再有就是代码风格“努力让每一个函数在20行以内”,能单独写成一个函数的尽可能单独写出来,由于白板都是长宽的,竖着写得多了再拐弯就很差看,容易出错。好比
isGraphVerticallySymmetric()

Given a list of dots, return true iff the graph in the dot can form a vertically symmetric graph.

EX:
    0 0 1 0 1
    0 0 0 1 0
    0 0 0 1 0
    0 0 1 0 1
    return true;

    0 1 0 1 0
    0 1 1 0 0
    return false;

分析:

For each x, find all it’s y and put it into a list. HashMap<Integer, List<Integer>>
For each x, calculate its list of y's symmetric middle point.
If pre_middle_point != cur_middle_point return false.

那么分析中能够看出须要两个独立的函数,结构以下:

isGraphVerticallySymmetric()
        preProcessGraphToMap()
        calculateAndCompareMiddlePoint()
            calculateMidPointOfList()

isGraphVerticallySymmetric()分别调用这两个函数就能完成判断。写calculateAndCompareMiddlePoint()中发现能够单独再写一个calculate的函数,compare比较简单就在calculate函数以后作判断便可。[这一题挺不错的,建议你们本身写写加深理解]。

那么白板上应该有四个函数,每一个函数都不会很长,逻辑清晰,代码明了。(optional)代码很好地写完以后,还有时间有思路的话,能够口头聊一聊一些比较有创意的解法,展示智力优越性。

总结:好的面试过程就像给一个不会这道题的学生讲课同样。要想办法十分清晰的给对方讲懂。若是有不明白的地方就多沟通,这样就算最坏结果你没有完整的写出代码,那么面试官也会以为你思路清晰逻辑正确,虽然代码能力欠佳。给你一个中等评分。尽可能不要得到差评。

Q&A

1)Q:几月份开始投简历,几月份开始面试比较合适?
公司与之间公司不同,Google, Uber, Amazon这一类的“人才饥渴”的公司是一年四季都在招聘的。而大多数小公司是按人头招聘的。

2)从开始投简历到面试,中间时间可否充分刷题?
建议作题作到基础知识扎实(好比上面讲的从一道题回忆java基础)Leetcode Easy和 Medium均可以作懂,就能够开始投了。固然,hard题也是很重要的,可是刷题是没有尽头的,从开始投简历找工做到找到工做一般会有一两个月时间,这段时间一方面复习easy 和med,一方面作作hard刷刷面经。

3)学校career fair有多大意义?
有些同窗是从学校career fair被招聘到的,可是我我的不是很建议在career fair上投大公司。
一、人多,扎堆,来CF的人也记不住你是谁;
二、你的目的是 HR 把你放进hiring pipeline里,开始面试过程,然而CF和这个关系并不大;
三、若是能够,在CF开始前半个月开始找人内推或者主动联系HR比较合适。

4)除了算法还面别的吗?
面试随机性很大,若是面试官想面你design那就面。从经验来看,Uber必定是会面design的,而FMAG(Facebook, Microsoft, Amazon, Google) 大概10%的几率会面你design。

5)特斯拉实习时候是毕业了吗?
USC能够选择最后一个学期全职实习,因此那是我最后一个学期。我我的不推荐毕业以后还去实习。若是能够,尽可能拿full time。

6)可否分享一下面经?
Sorry, 签定了保密协议,并且本身也是实名写这个经验贴,不方便分享面经。

7)您当时也是EE2CS这么一个过程 就是可否请问本科结束到去美帝之间这段时间 请问您有作什么准备 以及如何去自学相关的CS知识呢? 经过什么样的途径 须要学习些什么呢?而后到了美帝之后又该如何进一步地提高本身的实力以及相关CS的知识储备呢? 以及怎么去多作一些Project呢?
当时自学java,python,数据库等。后来发现仍是差的太多。研究生第一年很是痛苦,天天白天上课晚上本身补习白天不会不懂的知识点。第二年就好多了。学习的方法我以为你们都知道,无外乎挤出时间补足本身的短板吧。全部知识储备也都是基于学校课程,刷题和实习。

8)想请问下刷题如何能作到触类旁通?我目前的问题就是碰到新题目没有思路,不知道如何开始写?请问你在这方面有什么经验吗?
“遇到新题没有思路”通常是这个题型没有见过。若是是比较偏的,冷门的题型这很正常,总会有没有见过的题。可是若是看答案以后发现是经常使用的数据结构、考点、算法、那么就说明是本身掌握的还不够。针对: Array, BFS, DFS, Backtracking, Binary Search, DP, Graph, Hash Table, LinkedList, 各类tree (Segment, Tire, Binary Indexed), Topological Sort 等常见类型的题都应该熟练的掌握。

9)地理位置优点,性别优点?
从周围的朋友的面试观察来看,确实存在地理优点和性别优点。
一、若是你距离公司不远,好比公司在湾区,你也在湾区。公司会更愿意给你面试机会,对于公司来讲成本低。这个现象在小公司尤其明显,小公司hr是要考虑节约开支的。大公司好不少,你只要优秀,总会给你面试机会。

二、若是你是女性,那么恭喜你,你比男性程序员有优点。不管是公司会想办法平衡那女比例,仍是大部分面试官看到女性都会有“手下留情”,这两方面来看。我知道的周围的女性程序员,bar一般比男性程序员低一些。(只是低一些,你真作不出来谁也帮不了你。可能会面试题不那么变态,想不出来多给你一次提示 etc)

10)楼主在面狗家以前面过几个onsite啊?
没面过,谷歌是我第一个真正意义上的onsite,以前tesla的return offer onsite也没有考什么技术或算法。不过我十分不推荐把谷歌放在第一个来onsite。有一些onsite经验以后再去你最想去的公司。谷歌面试较难,作好充分准备。

11)More coming

······

内推

关于内推和”熟人“:仅就我所知道的谷歌而言,每周入职的Noogler (New Googler) 在150 - 200之间。公司对人才能够用“饥渴”来形容。在我看来,你简历(经历,背景)优秀,刷题刷到位(不要当炮灰),我就愿意推你。我认为不合适的,我天然会告诉你哪里还须要提升。内部推荐系统只是填一个表格交一份简历而已。HR会再次审核,ta看完简历以后再决定是否给你联系,是否把你放入面试的pipeline。我只推荐well prepared的人。熟不熟不要紧。

我的不推荐把Google当作第一个去面试的公司。谷歌的面试仍是颇有难度的,先面一些其余公司做为锻炼,对面试过程有足够了解。

联系我

一、若是你知足如下条件,欢迎联系我内推 If you think you are ready, shot me: **shaoyili@usc.edu with the following content:**

  • Leetcode easy 和 medium 能“作懂”, hard作了一半;
  • 有过其余公司onsite经历;
  • 自我感受简历过关;

必须有:

  • 简历.pdf
  • 目前Leetcode的刷题程度
  • 自我介绍:

    • 简单聊一下本身;
    • 简历中最自信的proj;
    • 本身的优点;
  • 感兴趣的职位三个

(New Grad除外,NG的职位一般是 University Graduate - North America)

最好有:

  • 任何你认为能吸引hr注意力把你放入面试pipeline的陈述。
    • 好比:搞过research,在某大公司实习,hackathon...
  • LinkedIn 连接

二、若是你如今在湾区或者将来计划去湾区从事编程工做,欢迎加入微信群聊,加diycode.cc 社区发起人微信,他会拉你入群(微信号:jixiaohua888,备注,湾区交流)

理工科思惟

首先澄清这里不是说“理工科 > 文科”。这里只是说一种思惟方式。这部分和面试没有直接关系,可是我的感受这是从开始学习编程,到如今,这三年最大的收获。简单粗暴的来讲是:遇到一个问题,抽象这个问题,这个问题大概分为多少小的目标,如何达成一个个目标从而解决这个问题。

举例:1)面试算法题

抽象:
遇到一个算法题,这个算法题能够被抽象归类成另外一种题。化未知为已知。
好比,Find the Duplicate Number 的本质就是Linked List Cycle。你们能够作一下理解一下。
再好比,横着作 two sum, three sum, four sum, 3Sum Smaller 等题目。理解他们相同和不一样是什么。

划分 小的问题不须要划分,可是大的问题,复杂的问题一般须要划分红一个个小的问题去实现。好比上文Onsite分析的那一题,就是把一个复杂的问题分为几个小问题去解决。分别把小问题解决以后,整个大的问题也就获得了解决。这样作更有逻辑更清晰,不容易出错,化大为小各个击破下降难度。

举例:2)毕业生刷题找工做

问题:
毕业须要找工做,找工做须要刷题。

抽象
化未知为已知。刷题没有作过,可是中考考高仍是经历过的。那时候对于作题,练习,准备考试的这一套方法应该依然适用。

划分
也至关于制定计划。我计划三个月找到工做,那么我先制定一个两个月的计划,一方面留有裕量,另外一方面好的复习应该两三轮,那么剩下的的时间再来复习一次/两次。
指定具体计划,前几周先把easy和med的作掉,由于效益最大化原则,用最少的时间作最大的cover。后面对简单题理解充分以后难题就不那么难了。
把任务分到天天作什么,天天的任务分到上午作什么,下午作什么。晚上根据状况能够有bonus。充分利用天天的时间。

实现
奖惩机制,完成要对本身有所奖励,物质/精神。没有完成要写下为何没有完成,可控因素,不可控因素,计划制定不合理等。
过于难的题能够推后/放弃,时间有限,若是须要未来再回头作说不定就迎刃而解。
这个世界上太多千里马,太少伯乐。与其等待伯乐,不如作本身的伯乐。

举例:3)其余
马拉松,这个相比不用多说,马拉松哪怕是对于专业运动员也是超出人类极限运动。把26 mile划分红26份,每次完成1 mile就对本身进行一次确定。心中永远只有下一个目标。

schedule;大公司的业务制定和实现,KPI考核;国家的“五年计划”;

总结
1) 凡事预则立,不预则废。
2) 一个优秀的人应该具备很好解决问题的能力。遇到问题,分析问题,划分问题,执行力。
3) 不要乱了阵脚,胡子眉毛一把抓。计划才能高效。
4) 计划赶不上变化,不断调整。不断调整算法,达到实时的最优解。

CS学多了
1)出个门都想着路线最优解,出去一趟,顺便取个信,丢个垃圾。怎样路程最短。
2)作什么事,本能的会在脑里子列举0,1,2,3,4个步骤去解决。
3)总会想这个事会不会有edge case。
4)考虑周全,留有余地: extensibility, scalability。
5)受不了别人问问题不先Google。
6)受不了阐述不清晰。(说一个面经两句话说完了,没有完整的把题说完,没有例子,没有本身的理解)

这些都是编程里深入理解到的,发现对现实生活也颇有帮助。

共勉。

相关文章
相关标签/搜索