Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

【038-毕业总结】但行好事,莫问前程 #290

Open
liujianbo opened this issue Jul 7, 2019 · 0 comments
Open

【038-毕业总结】但行好事,莫问前程 #290

liujianbo opened this issue Jul 7, 2019 · 0 comments

Comments

@liujianbo
Copy link

学习方法

精通一个领域

  • 全局了解知识脉络,形成树状的结构体系,抓住主干
  • 切碎知识点,填充到树状主干上,完善树的茎叶
  • 刻意练习,针对每个切碎的知识点特别是缺陷点进行精深练习,即使枯燥、不舒服也要坚持,职业选手必经之路,没有躺赢
  • 反馈,练习时需要独立思考解决方案并实践进行检验,同时阅读前人解决方案,给出自己的评价,这个又是一个学习思考的过程
  • 遇到不会的问题,直接看解法,思考解法含义
  • 21天习惯养成
  • 切题四件套:
    1. 与考官确认题目意思,确认边界
    2. 找出可能的所有解法,分析每种解法的时间、空间复杂度,对于好的解法加强练习
    3. 多多练习
    4. 多个案例
  • 五+毒神掌:
    1. 读题+思考,写出解法,不会直接看题解,记住并默写解法
    2. 写出代码,将多种解法进行比较,理解和优化
    3. 过一天,再次练习不同解法,根据熟练程度精深练习
    4. 过一周再次练习
    5. 面试前恢复练习

工具

  • 使用google
  • 编码规范
  • 编码热键
    1.
  • 编辑器的 top ten tips

学习内容

主干

数据结构

一维

  • 基础:数组、链表
  • 高级:栈、队列、双端队列、优先队列、set、map

二维

  • 基础:树、图
  • 高级:二叉搜索树、红黑树、AVL、堆、并查集、字典树

特殊

  • 位运算
  • 布隆过滤器
  • LRU cache

算法

  • 分支:if else,switch
  • 迭代:for,while 循环
  • 递归:分治,回溯
  • 搜索:二叉搜索,深度优先搜索,广度优先搜索,A*
  • 动态规划
  • 贪心算法

时间、空间复杂度

O(1) > O(logn) > O(n) > O(n^2) > O(2^n) > O(n!)

各数据结构时间复杂度表

时间复杂度

二叉树遍历模版

  • TreeNode
public class TreeNode {
    public int val;
    public TreeNode left, right;
    public TreeNode(int val) {
        this.val = val;
        this.left = null;
        this.right = null;
    }
}
  • 前序
public void preOrder(TreeNode root) {
    if (node == null) return;
    visit(root);
    preOrder(root.left);
    preOrder(root.right);
}
  • 中序
public void inOrder(TreeNode root) {
    if (node == null) return;
    inOrder(root.left);
    visit(root);
    inOrder(root.right);
}
  • 后序
public void postOrder(TreeNode root) {
    if (node == null) return;
    postOrder(root.left);
    postOrder(root.right);
    visit(root);
}

二叉搜索树

  • 左子树上所有节点的值都小于根节点的值
  • 右子树上的所有节点值都大于根节点的值
  • 上述规则在所有子树中同样符合

递归

    1. 不要人肉递归
    1. 找到最近最简方法,将问题拆解为可重复解决的子问题
    1. 重申:拒绝人肉递归诱惑,训练机器思维
    1. 代码模版:
public void recursion(...) {
  # recursion terminator
  
  # process logic in current level
  
  # drill down
  
  # reverse the current level status if needed
}
  

动态规划

  • 适用范围:求取最优解
  • 求解方法:最优子问题的拆分,通过寻找子问题的最优解来解决

毕业总结

最近的几年是我最迷茫和焦虑的一段时间,主要是几个方面:

  • 技术的更新换代:技术的更新速度正在指数级增长,而我却一直码着curd的业务代码,想跟上时代学习技术,但是却无从下手,最后就觉得列车越开越远,而我只能留在原地眼睁睁看他离开。

  • 年龄的增长:网上盛传35岁是程序员的终点,而我离35岁只有一步之遥,跟新进的95后相比,学习新技术完全无优势。

  • 工作的压力:工作几年后半推半就就地走上管理岗位,老板就是最大的产品经理,老板一声令下,只能硬着头皮干。

  • 缺乏技术自信:由于专业基础没有打牢,导致我在技术选型方面都是套用现有框架,没有自己深刻的理解,对项目进度无法自信预估,对团队成员也无法给出令人信服的解答。

    在我最迷茫的时候我遇到了极客时间,他让我慢慢明白了技术的发展都是建立在如 算法和数据结构、计算机原理、计算机网络、软件工程 等基础之上的,只要抓住了这些基础的主干就能从容应对上层建筑。
    极客时间的线上课程通过跟随业界顶尖大神的思路让我可以随时随地地补充自己的短板,犹如打开顶级玩家的第一视角,让我能够学习了解业界的先进技术。而本次的算法训练营给我的则是一种全新的学习体验,重返校园的课堂体验、超哥面对面的教学反馈、同学的分享讨论,这些都是我在工作中无法体验到的。同时,与认真的同学一起学习的氛围更是一个人学习不可能有的。
    通过线上和线下的结合学习,我慢慢走出迷茫,慢慢懂得了技术的发展终究是为了解决现实的问题,单纯追逐技术只会让人力不从心。还有就是学习从来没有躺赢的办法,只有抓住主干,针对自身缺陷刻意练习形成肌肉化的记忆才能在工作中更好的实践。
    感谢超哥、池大大和所有老师,感谢你们让我慢慢掌握了正确的学习方法和树立了正确的职业观。(借用池大大的话:但行好事,莫问前程。前辈的职业观是我努力的方向。)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant