程序员的修炼-知识与体系

程序员的修炼-知识与体系

本文来自我最近正在学习的课程,极客时间胡峰的专栏文章《程序员进阶攻略》,内容如下。

今年年初,我学习了梁宁的《产品思维》课,其中有一篇叫《点线面体的战略选择》,我觉得特别有感触。虽然是讲产品,但假如把个人的成长当成产品演进一样来发展,会有一种异曲同工、殊途同归之感。

在我工作的经历中就曾碰到过这么一个人,他一开始做了几年开发,从前端到后端,后来又转做测试,接触的“点”倒是不少,但却没能连接起来形成自己的体系,那他个人最大的价值就局限在最后所在的“点”上了。

其实个人的成长有很多方面,但对于程序员的成长最重要的就是知识体系的构建,这其实就是一个 “点线面体” 的演进过程。

下面我会结合自己的成长路线来梳理下这个体系的建立过程。

阅读更多
今日算法12-矩阵中的路径

今日算法12-矩阵中的路径

一、题目描述

题目链接:https://leetcode.cn/problems/ju-zhen-zhong-de-lu-jing-lcof/

难易程度:中等

给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false

例如,在下面的 3×4 的矩阵中包含单词 “ABCCED”(单词中的字母已标出)。

示例:

1
2
输入:board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]], word = "ABCCED"
输出:true
阅读更多
今日算法11-旋转数组的最小数字

今日算法11-旋转数组的最小数字

一、题目描述

题目链接:https://leetcode.cn/problems/xuan-zhuan-shu-zu-de-zui-xiao-shu-zi-lcof

难易程度:简单

把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。

给你一个可能存在 重复 元素值的数组 numbers ,它原来是一个升序排列的数组,并按上述情形进行了一次旋转。请返回旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一次旋转,该数组的最小值为 1。

注意,数组 [a[0], a[1], a[2], …, a[n-1]] 旋转一次 的结果为数组 [a[n-1], a[0], a[1], a[2], …, a[n-2]] 。

1
2
3
4
5
6
7
示例1:
输入:numbers = [3,4,5,1,2]
输出:1

示例2:
输入:numbers = [2,2,2,0,1]
输出:0
阅读更多
今日算法10-变态跳台阶

今日算法10-变态跳台阶

一、题目描述

题目链接:牛客网

难易程度:简单

一只青蛙一次可以跳上 1 级台阶,也可以跳上 2 级… 它也可以跳上 n 级。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。


阅读更多
今日算法09-青蛙跳台阶问题

今日算法09-青蛙跳台阶问题

一、题目描述

题目链接:https://leetcode.cn/problems/qing-wa-tiao-tai-jie-wen-ti-lcof/

难易程度:简单

一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。

答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。

1
2
3
4
5
6
7
8
9
10
11
示例1
输入:n = 2
输出:2

示例2
输入:n = 7
输出:21

示例3
输入:n = 0
输出:1

阅读更多
今日算法08-矩形覆盖

今日算法08-矩形覆盖

一、题目描述

题目链接:牛客网

难易程度:简单

我们可以用 2*1 的小矩形横着或者竖着去覆盖更大的矩形。请问用 n 个 2*1 的小矩形无重叠地覆盖一个 2*n 的大矩形,总共有多少种方法?


阅读更多
今日算法07-斐波那契数列
今日算法06-用两个栈实现队列
今日算法05-二叉树的下一个结点

今日算法05-二叉树的下一个结点

一、题目描述

题目链接:牛客网

难易程度:中等

给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回 。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。

1
2
3
4
5
6
7
8
9
10
11
public class TreeLinkNode {

int val;
TreeLinkNode left = null;
TreeLinkNode right = null;
TreeLinkNode next = null; // 指向父结点的指针

TreeLinkNode(int val) {
this.val = val;
}
}
阅读更多
今日算法04-重建二叉树