給Java小白,整理一套能上手的簡單編程算法題!!!

做者:小傅哥
博客:https://bugstack.cnhtml

沉澱、分享、成長,讓本身和他人都能有所收穫!😄

1、前言

數學離程序員有多近?java

ifelse也好、for循環也罷,代碼能夠說就是對數學邏輯的具體實現。因此敲代碼的程序員幾乎就離不開數學,難易不一樣而已。git

那數學很差就寫不了代碼嗎😳?不,同樣能夠寫代碼,能夠寫出更多的CRUD出來。那你不要總以爲是產品需求簡單因此你的實現過程才變成了增刪改查,每每也是由於你還不具有可擴展、易維護、高性能的代碼實現方案落地能力,才使得你小小年紀寫出了更多的CRUD程序員

與一錐子買賣的小做坊相比,大廠和超級大廠更會注重數學能力。面試

first 10-digit prime found in consecutive digits of e

2004年,在硅谷的交通動脈 101 公路上忽然出現一塊巨大的廣告牌,上面是一道數學題: {e 的連續數字中最早出現的 10 位質數}.com。算法

廣告:這裏的 e 是數學常數,天然對數的底數,無限不循環小數。這道題的意思就是,找出 e 中最早出現的 10 位質數,而後能夠得出一個網址。進入這個網址會看到 Google 爲你出的第二道數學題,成功解鎖這步 Google 會告訴你,咱們或許是」志同道合「的人,你能夠將簡歷發到這個郵箱,咱們一塊兒作點改變世界的事情。編程

計算 e 值能夠經過泰勒公式推導出來:e^x≈1 + x + x^2/2! + x^3/3! +……+ x^n/n! (1) 推導計算過程還包括埃拉托色尼篩選法(the Sieve of Eratosthenes)線性篩選法的使用。感興趣的小夥伴能夠用代碼實現下。設計模式

2、編程練習題

1. 斐波那契數列

@Test
public void test_Fibonacci() {
    int month = 15;  // 15個月
    long f1 = 1L, f2 = 1L;
    long f;
    for (int i = 3; i < month; i++) {
        f = f2;
        f2 = f1 + f2;
        f1 = f;
        System.out.println("第" + i + "個月的兔子對數: " + f2);
    }
}
  • 難度:⭐⭐⭐⭐⭐
  • 題目:有一對兔子,從出生後第3個月起每月都生一對兔子,小兔子長到第三個月後每月又生一對兔子,假如兔子都不死,問每月的兔子總數爲多少?
  • 邏輯:F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)
  • 擴展斐波那契數列(Fibonacci sequence),又稱黃金分割數列,因數學家萊昂納多·斐波那契(Leonardoda Fibonacci)以兔子繁殖爲例子而引入,故又稱爲「兔子數列」,指的是這樣一個數列:0、一、一、二、三、五、八、1三、2一、3四、……在數學上,斐波那契數列以以下被以遞推的方法定義:F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)在現代物理、準晶體結構、化學等領域,斐波納契數列都有直接的應用,爲此,美國數學會從 1963 年起出版了以《斐波納契數列季刊》爲名的一份數學雜誌,用於專門刊載這方面的研究成果。

2. 判斷素數

@Test
public void test_Prime() {
    int count = 0;
    for (int i = 101; i < 200; i++) {
        boolean b = true;// 默認此數就素數
        for (int j = 2; j <= Math.sqrt(i); j++) {
            if (i % j == 0) {
                b = false; // 此數不是素數
                break;
            }
        }
        if (b) {
            count++;
            System.out.print(i + " ");
        }
    }
    System.out.println("\n素數的個數:" + count);
}
  • 難度:⭐⭐⭐
  • 題目:判斷101-200之間有多少個素數,並輸出全部素數。
  • 邏輯:判斷素數的方法,用一個數分別去除2到sqrt(這個數),若是能被整除,則代表此數不是素數,反之是素數。
  • 擴展:素數又稱質數,質數的個數是無窮的。歐幾里得的《幾何本來》中有一個經典的證實。它使用了證實經常使用的方法:反證法。具體證實以下:假設質數只有有限的n個,從小到大依次排列爲p1,p2,……,pn,設N=p1×p2×……×pn,那麼, 是素數或者不是素數。

3. 水仙花數

@Test
public void test_narcissus() {
    for (int num = 101; num < 1000; num++) {
        int bbb = num / 100;
        int bb = (num % 100) / 10;
        int b = (num % 100) % 10;
        if ((bbb * bbb * bbb + bb * bb * bb + b * b * b) == num) {
            System.out.println(num);
        }
    }
}
  • 難度:⭐⭐⭐⭐
  • 題目:打印出全部的"水仙花數(narcissus number)",所謂"水仙花數"是指一個三位數,其各位數字立方和等於該數自己。例如:153是一個"水仙花數",由於153=1的三次方+5的三次方+3的三次方。
  • 邏輯:利用for循環控制100-999個數,每一個數分解出個位,十位,百位。
  • 擴展:水仙花數(Narcissistic number)也被稱爲超徹底數字不變數(pluperfect digital invariant, PPDI)、自戀數、自冪數、阿姆斯壯數或阿姆斯特朗數(Armstrong number),水仙花數是指一個 3 位數,它的每一個位上的數字的 3次冪之和等於它自己(例如:1^3 + 5^3+ 3^3 = 153)。

4. 分解質因數

@Test
public void test_ZhiYinShu() {
    f(200);
}
int k = 2;
public void f(int n) {
    while (k <= n) {
        if (k == n) {
            System.out.println(n);
            break;
        } else if (n > k && n % k == 
            System.out.print(k + "*")
            n = n / k;
            f(n);
            break;
        } else if (n > k && n % k != 
            k++;
            f(n);
            break;
        }
    }
}
  • 難度:⭐⭐⭐⭐
  • 題目:將一個正整數分解質因數。例如:輸入90,打印出90=233*5。
  • 邏輯:對n進行分解質因數,應先找到一個最小的質數k,而後按此步驟完成(1)若是這個質數恰等於n,則說明分解質因數的過程已經結束,打印出便可。(2)若是n>k,但n能被k整除,則應打印出k的值,並用n除以k的商,做爲新的正整數你n,重複執行第一步。(3)若是n不能被k整除,則用k+1做爲k的值,重複執行第一步。
  • 擴展:每一個合數均可以寫成幾個質數相乘的形式,其中每一個質數都是這個合數的因數,把一個合數用質因數相乘的形式表示出來,叫作分解質因數。如30=2×3×5 。分解質因數只針對合數。

5. 楊輝三角

@Test
 public void test_YangHuiSanJiao(){
     int[][] a = new int[10][10];
     for (int i = 0; i < 10; i++) {
         a[i][i] = 1;
         a[i][0] = 1;
     }
     for (int i = 2; i < 10; i++) {
         for (int j = 1; j < i; j++) {
             a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
         }
     }
     for (int i = 0; i < 10; i++) {
         for (int k = 0; k < 2 * (10 - i) - 1; k++) {
             System.out.print(" ");
         }
         for (int j = 0; j <= i; j++) {
             System.out.print(a[i][j] + "   ");
         }
         System.out.println();
     }
 }
  • 難度:⭐⭐⭐⭐
  • 題目:打印出楊輝三角形
  • 邏輯:楊輝三角形性質:每行數字左右對稱,由1開始逐漸變大,而後變小,回到1。第n行的數字個數爲n個。第n行數字和爲2^(n-1)。每一個數字等於上一行的左右兩個數字之和。可用此性質寫出整個楊輝三角形。第n行的第1個數爲1,第二個數爲1×(n-1),第三個數爲1×(n-1)×(n-2)/2,第四個數爲1×(n-1)×(n-2)/2×(n-3)/3…依此類推。
  • 擴展:楊輝三角,是二項式係數在三角形中的一種幾何排列,中國南宋數學家楊輝1261年所著的《詳解九章算法》一書中出現。在歐洲,帕斯卡(1623----1662)在1654年發現這一規律,因此這個表又叫作帕斯卡三角形。帕斯卡的發現比楊輝要遲393年,比賈憲遲600年。

6. 求最大公約數與最小公倍數

@Test
public void test_Prime() {
    int a = 10, b = 24;
    int m = division(a, b);
    int n = a * b / m;
    System.out.println("最大公約數: " + m);
    System.out.println("最小公倍數: " + n);
}
public int division(int x, int y) {
    int t;
    if (x < y) {
        t = x;
        x = y;
        y = t;
    }
    while (y != 0) {
        if (x == y)
            return 1;
        else {
            int k = x % y;
            x = y;
            y = k;
        }
    }
    return x;
}
  • 難度:⭐⭐⭐
  • 題目:兩個正整數m和n,求其最大公約數和最小公倍數。
  • 邏輯:在循環中,只要除數不等於0,用較大數除以較小的數,將小的一個數做爲下一輪循環的大數,取得的餘數做爲下一輪循環的較小的數,如此循環直到較小的數的值爲0,返回較大的數,此數即爲最小公約數,最小公倍數爲兩數之積除以最小公倍數。
  • 擴展:最大公因數,也稱最大公約數、最大公因子,指兩個或多個整數共有約數中最大的一個。a,b的最大公約數記爲(a,b),一樣的,a,b,c的最大公約數記爲(a,b,c),多個整數的最大公約數也有一樣的記號。求最大公約數有多種方法,常見的有質因數分解法、短除法、展轉相除法、更相減損法。與最大公約數相對應的概念是最小公倍數,a,b的最小公倍數記爲[a,b]。兩個或多個整數公有的倍數叫作它們的公倍數,其中除0之外最小的一個公倍數就叫作這幾個整數的最小公倍數。整數a,b的最小公倍數記爲[a,b],一樣的,a,b,c的最小公倍數記爲[a,b,c],多個整數的最小公倍數也有一樣的記號。

7. 徹底平方數

@Test
public void test_PerfectSquare() {
    for (long l = 1L; l < 100000; l++) {
        if (Math.sqrt((l + 100)) % 1 == 0) {
            if (Math.sqrt((l + 268)) % 1 == 0) {
                System.out.println(l + "加100是一個徹底平方數,再加168又是一個徹底平方數");
            }
        }
    }
}
  • 難度:⭐⭐⭐⭐
  • 題目:一個整數,它加上100後是一個徹底平方數,再加上168又是一個徹底平方數,請問該數是多少?
  • 邏輯:在10萬之內判斷,先將該數加上100後再開方,再將該數加上268後再開方,若是開方後的結果知足以下條件,便是結果。
  • 擴展:徹底平方指用一個整數乘以本身例如11,22,3*3等,依此類推。若一個數能表示成某個整數的平方的形式,則稱這個數爲徹底平方數。徹底平方數是非負數,而一個徹底平方數的項有兩個。注意不要與徹底平方式所混淆。

8. 求主對角線之和

@Test
public void test_Sum() {
    Scanner s = new Scanner(System.in);
    int[][] a = new int[3][3];
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            a[i][j] = s.nextInt();
        }
    }
    System.out.println("輸入的3 * 3 矩陣是:");
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            System.out.print(a[i][j] + " ");
        }
        System.out.println();
    }
    int sum = 0;
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            if (i == j) {
                sum += a[i][j];
            }
        }
    }
    System.out.println("對角線和是 " + sum);
}
  • 難度:⭐⭐⭐
  • 題目:求一個3*3矩陣對角線元素之和
  • 邏輯:利用雙重for循環控制輸入二維數組,再將ai累加後輸出。
  • 擴展:在一個n階方陣(或是n階行列式)中,從左上角到右下角這一斜線方向上的n 個元素所在的對角線,叫作n 階方陣(或行列式)的主對角線。

9. 完數求解

@Test
public void test_solution() {
    System.out.println("1到1000的完數有: ");
    for (int i = 1; i < 1000; i++) {
        int t = 0;
        for (int j = 1; j <= i / 2; j++) {
            if (i % j == 0) {
                t = t + j;
            }
        }
        if (t == i) {
            System.out.print(i + " ");
        }
    }
}
  • 難度:⭐⭐⭐⭐
  • 題目:一個數若是剛好等於它的因子之和,這個數就稱爲 "完數 "。例如6=1+2+3.編程 找出1000之內的全部完數
  • 邏輯:若是p是質數,且2^p-1也是質數,那麼(2^p-1)X2^(p-1)即是一個徹底數。
  • 擴展:徹底數(Perfect number),又稱完美數或完備數,是一些特殊的天然數。它全部的真因子(即除了自身之外的約數)的和(即因子函數),剛好等於它自己。

10. 求s=a+aa+aaa+aaaa+aa...a的值

@Test
public void test_asum() {
    long a = 2, b = 0;
    Scanner s = new Scanner(System.in);
    int n = s.nextInt();
    int i = 0;
    long sum = 0;
    while (i < n) {
        b = b + a;
        sum = sum + b;
        a = a * 10;
        ++i;
    }
    System.out.println("input number: " + n);
    System.out.println(sum);
}
  • 難度:⭐⭐⭐
  • 題目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一個數字。例如2+22+222+2222+22222(此時共有5個數相加),幾個數相加有鍵盤控制。
  • 邏輯:定義一個變量b, 賦初值爲0;定義一變量sum, 賦初值爲0,進入循環後,將a + b 的值賦給b,將sum + b 的值賦給sum;同時,將a 增長十倍, ++ i; 繼續循環;循環結束後,輸出sum 的值。

11. 無重複三位數

@Test
public void test_AC() {
    int count = 0;
    for (int x = 1; x < 5; x++) {
        for (int y = 1; y < 5; y++) {
            for (int z = 1; z < 5; z++) {
                if (x != y && y != z && x != z) {
                    count++;
                    System.out.print(x * 100 + y * 10 + z + "   ");
                    if (count % 4 == 0) {
                        System.out.println();
                    }
                }
            }
        }
    }
    System.out.println("共有" + count + "個三位數");
}
  • 難度:⭐⭐⭐⭐
  • 題目:有一、二、三、4個數字,能組成多少個互不相同且無重複數字的三位數?都是多少?
  • 邏輯:可填在百位、十位、個位的數字都是一、二、三、4。組成全部的排列後再去掉不知足條件的排列。

12. 從小到大輸出數列

public class SmallToBig {
    public static void main(String[] args) {
        SmallToBig fnc = new SmallToBig();
        int a, b, c;

        System.out.println("Input 3 numbers:");
        a = fnc.input();
        b = fnc.input();
        c = fnc.input();

        if (a > b) {
            int t = a;
            a = b;
            b = t;
        }

        if (a > c) {
            int t = a;
            a = c;
            c = t;
        }

        if (b > c) {
            int t = b;
            b = c;
            c = t;
        }
        System.out.println(a + " " + b + " " + c);
    }

    public int input() {
        int value = 0;
        Scanner s = new Scanner(System.in);
        value = s.nextInt();
        return value;
    }

    public void compare(int x, int y) {// 此方法沒用
        if (x > y) {
            int t = x;
            x = y;
            y = t;
        }
    }
}
  • 難度:⭐⭐
  • 題目:輸入三個整數x,y,z,請把這三個數由小到大輸出
  • 邏輯:辦法把最小的數放到x上,先將x與y進行比較,若是x> y則將x與y的值進行交換,而後再用x與z進行比較,若是x> z則將x與z的值進行交換,這樣能使x最小。

13. 猴子吃桃問題

public class Monkey {
    
    public static void main(String[] args) {
        int lastdayNum = 1;
        for (int i = 2; i <= 10; i++) {
            lastdayNum = (lastdayNum + 1) * 2;
        }
        System.out.println("猴子第一天摘了 " + lastdayNum + " 個桃子");
    }
}
  • 難度:⭐⭐⭐⭐
  • 題目:猴子第一天摘下若干個桃子,立即吃了一半,還不癮,又多吃了一個 次日早上又將剩下的桃子吃掉一半,又多吃了一個。之後天天早上都吃了前一天剩下 的一半零一個。到第10天早上想再吃時,見只剩下一個桃子了。求第一天共摘了多少。
  • 邏輯:採起逆向思惟的方法,從後往前推斷。

14. 乒乓球比賽

public class Compete {
    
    static char[] m = { 'a', 'b', 'c' };
    static char[] n = { 'x', 'y', 'z' };

    public static void main(String[] args) {
        for (int i = 0; i < m.length; i++) {
            for (int j = 0; j < n.length; j++) {
                if (m[i] == 'a' && n[j] == 'x') {
                    continue;
                } else if (m[i] == 'a' && n[j] == 'y') {
                    continue;
                } else if ((m[i] == 'c' && n[j] == 'x')
                        || (m[i] == 'c' && n[j] == 'z')) {
                    continue;
                } else if ((m[i] == 'b' && n[j] == 'z')
                        || (m[i] == 'b' && n[j] == 'y')) {
                    continue;
                } else
                    System.out.println(m[i] + " vs " + n[j]);
            }
        }
    }
}
  • 難度:⭐⭐⭐⭐
  • 題目:兩個乒乓球隊進行比賽,各出三人。甲隊爲a,b,c三人,乙隊爲x,y,z三人。已抽籤決定比賽名單。有人向隊員打聽比賽的名單。a說他不和x比,c說他不和x,z比,請編程序找出三隊賽手的名單。

15. 求分數之和

public class FenShu {
    public static void main(String[] args) {
        int x = 2, y = 1, t;
        double sum = 0;

        DecimalFormat df = new DecimalFormat("#0.0000");

        for (int i = 1; i <= 20; i++) {
            sum += (double) x / y;
            t = y;
            y = x;
            x = y + t;
            System.out.println("第 " + i + " 次相加,和是 " + df.format(sum));
        }
    }
}
  • 難度:⭐⭐⭐⭐
  • 題目:有一分數序列:2/1,3/2,5/3,8/5,13/8,21/13...求出這個數列的前20項之和。
  • 邏輯:抓住分子與分母的變化規律。

16. 求階乘的和

public class JieCheng {
    static long sum = 0;
    static long fac = 0;

    public static void main(String[] args) {
        long sum = 0;
        long fac = 1;
        for (int i = 1; i <= 10; i++) {
            fac = fac * i;
            sum += fac;
        }
        System.out.println(sum);
    }
}
  • 難度:⭐⭐⭐
  • 題目:求1+2!+3!+...+20!的和
  • 邏輯:把累加變成了累乘
  • 擴展:階乘是基斯頓·卡曼(Christian Kramp,1760~1826)於 1808 年發明的運算符號,是數學術語。一個正整數的階乘(factorial)是全部小於及等於該數的正整數的積,而且0的階乘爲1。天然數n的階乘寫做n!。1808年,基斯頓·卡曼引進這個表示法。

17. 迴文判斷

public class HuiWen {
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        System.out.print("請輸入一個正整數:");
        long a = s.nextLong();
        String ss = Long.toString(a);
        char[] ch = ss.toCharArray();
        boolean is = true;
        int j = ch.length;
        for (int i = 0; i < j / 2; i++) {
            if (ch[i] != ch[j - i - 1]) {
                is = false;
            }
        }
        if (is == true) {
            System.out.println("這是一個迴文數");
        } else {
            System.out.println("這不是一個迴文數");
        }
    }
}
  • 難度:⭐⭐⭐
  • 題目:一個5位數,判斷它是否是迴文數。即12321是迴文數,個位與萬位相同,十位與千位相同。

18. 按順序輸出數列

public class ShunXu {
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        int a = s.nextInt();
        int b = s.nextInt();
        int c = s.nextInt();

        if (a < b) {
            int t = a;
            a = b;
            b = t;
        }

        if (a < c) {
            int t = a;
            a = c;
            c = t;
        }

        if (b < c) {
            int t = b;
            b = c;
            c = t;
        }

        System.out.println("從大到小的順序輸出:");
        System.out.println(a + " " + b + " " + c);
    }
}
  • 難度:⭐⭐⭐
  • 題目:輸入3個數a,b,c,按大小順序輸出

19. 位置替換

public class TiHuan {
    
    static final int N = 8;

    public static void main(String[] args) {

        int[] a = new int[N];
        Scanner s = new Scanner(System.in);
        int index1 = 0, index2 = 0;

        System.out.println("please input numbers");
        for (int i = 0; i < N; i++) {
            a[i] = s.nextInt();
            System.out.print(a[i] + " ");
        }

        int max = a[0], min = a[0];
        for (int i = 0; i < a.length; i++) {
            if (a[i] > max) {
                max = a[i];
                index1 = i;
            }
            if (a[i] < min) {
                min = a[i];
                index2 = i;
            }
        }

        if (index1 != 0) {
            int temp = a[0];
            a[0] = a[index1];
            a[index1] = temp;
        }

        if (index2 != a.length - 1) {
            int temp = a[a.length - 1];
            a[a.length - 1] = a[index2];
            a[index2] = temp;
        }
        System.out.println("after swop:");
        for (int i = 0; i < a.length; i++) {
            System.out.print(a[i] + " ");
        }
    }
}
  • 難度:⭐⭐
  • 題目:輸入數組,最大的與第一個元素交換,最小的與最後一個元素交換,輸出數組。

20. 1的個數

long startTime = System.currentTimeMillis();
int num = 10000000, saveNum = 1, countNum = 0, lastNum = 0;
int copyNum = num;
while (num != 0) {
    lastNum = num % 10;
    num /= 10;
    if (lastNum == 0) {
        // 若是是0那麼正好是少了一次因此num不加1了
        countNum += num * saveNum;
    } else if (lastNum == 1) {
        // 若是是1說明當前數內少了一次因此num不加1,並且當前1所在位置
        // 有1的個數,就是去除當前1最高位,剩下位數,的個數。
        countNum += num * saveNum + copyNum % saveNum + 1;
    } else {
        // 若是非1非0.直接用公式計算
        // abcd...=(abc+1)*1+(ab+1)*10+(a+1)*100+(1)*1000...
        countNum += (num + 1) * saveNum;
    }
    saveNum *= 10;
}
System.out.println("1的個數:" + countNum);
System.out.println("計算耗時:" + (System.currentTimeMillis() - startTime) + "毫秒");
  • 難度:⭐⭐⭐⭐
  • 題目:1~n中,1出現的次數。好比:1~10,1出現了兩次。
  • 邏輯:咱們能發現這個1的個數在100、1000、10000中是有規則的循環出現的。十一、十二、1三、14或者2一、3一、4一、51,以及單個的1出現。最終能夠得出通用公式:abcd...=(abc+1)1+(ab+1)10+(a+1)100+(1)1000...,abcd表明位數。另外在實現的過程還須要考慮好比不足100等狀況,例如9八、1232等。

3、深度擴展

Java 代碼自己就是基於數據結構和算法對數學邏輯的具體實現,而那些隱含在代碼中的數學知識若是你不會,那麼壓根你就會忽略掉它,也就所以看不懂源碼了。數組

就像我問你:數據結構

  • HashCode爲何用31做爲乘數,你證實過嗎?
  • 擾動函數的函數做用是什麼,它還有什麼場景在用?
  • 拉鍊尋址和開放尋址具體是什麼表現,怎麼解決的碰撞問題?
  • ThreadLocal 的實現中還有黃金分割點的使用,你知道嗎?
  • CLH、MCS,都是怎麼實現的公平鎖,代碼是什麼樣?
  • jvmti 能夠用於非入侵的監控線程池狀態,你用過嗎?

因此小傅哥整理了一本,《Java 面經手冊》 是一本以面試題爲入口講解 Java 核心技術的 PDF 書籍,書中內容也極力的向你證明代碼是對數學邏輯的具體實現爲何這麼說? 當你仔細閱讀書籍時,會發現這裏有不少數學知識,包括:擾動函數、負載因子、拉鍊尋址、開放尋址、斐波那契(Fibonacci)散列法還有黃金分割點的使用等等。

Java 面經手冊,資料下載:https://codechina.csdn.net/MiddlewareDesign/doc/-/issues/8

4、總結

  • Programming is one of the most difficult branches of applied mathematics; the poorer mathematicians had better remain pure mathematicians. https://www.cs.utexas.edu/use...
  • 單純的只會數學寫不了代碼,能寫代碼的不懂數學只能是CRUD碼農。數學知識幫助你設計數據結構和實現算法邏輯,代碼能力幫你駕馭設計模式和架構模型。多方面的知識結合和使用纔是碼農和工程師的主要區別,也是是否擁有核心競爭力的關鍵點。
  • 學習知識有時候看不到前面的路有多遠,但哪怕是個泥坑,只要你不停的蠕動、折騰、翻滾,也能抓出一條泥鰍。知識的路上是發現知識的快樂,還學會知識的成就感,不斷的促使你前行

5、系列推薦

相關文章
相關標籤/搜索