成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

【C++】初窺門徑---入門篇

不知名網(wǎng)友 / 2988人閱讀

摘要:在大型的工程中,自己定義的變量函數(shù),類名與其他人定義的相沖突等問題。使用標(biāo)準(zhǔn)輸出控制臺和標(biāo)準(zhǔn)輸入鍵盤時,必須包含頭文件以及標(biāo)準(zhǔn)命名空間。缺省參數(shù)概念缺省參數(shù)是聲明或定義函數(shù)時為函數(shù)的參數(shù)指定一個默認(rèn)值。

目錄

前言

1.命名空間

1.1命名空間定義

1.2 命名空間使用

2. C++的輸入和輸出

3.缺省參數(shù)

3.1概念

3.2缺省參數(shù)分類

4.函數(shù)重載

4.1概念

4.2名字修飾(name Mangling)

5.extern “C”

6.引用

6.1概念

?6.2 引用特性

6.3 常引用

6.4 使用場景

6.5?引用和指針的區(qū)別

7. 內(nèi)聯(lián)函數(shù)

7.1 概念

7.2 特性

8. auto關(guān)鍵字(C++11)

8.1 auto簡介

8.2 auto的使用

8.3 auto不能推導(dǎo)的場景

9. 基于范圍的for循環(huán)(C++11)

9.1 范圍for的語法

9.2 范圍for的使用條件

10. 指針空值nullptr(C++11)


前言

經(jīng)過前面對C語言和數(shù)據(jù)結(jié)構(gòu)初階的學(xué)習(xí),自己也初步進(jìn)入了編程的世界。

從最初的興趣至極,到熱情消減,轉(zhuǎn)至平淡,再到現(xiàn)在代碼已經(jīng)逐漸為生活的一部分。

越發(fā)感覺代碼的奇妙,編程世界的廣闊無垠。

希望兩年后的自己回首往昔,能夠為之感嘆~

感謝各位讀者的點贊與支持,與君共勉!

從本章開始,將進(jìn)入C++學(xué)習(xí)階段。

1.命名空間

在C/C++中,變量、函數(shù)和后面要學(xué)到的類都是大量存在的,這些變量、函數(shù)和類的名稱將都存在于全局作用域中,可能會導(dǎo)致很多沖突。

使用命名空間的目的是對標(biāo)識符的名稱進(jìn)行本地化,以避免命名沖突或名字污染,namespace關(guān)鍵字的出現(xiàn)就是針對這種問題的。

?例如:自己定義的變量(函數(shù),類)名與C++內(nèi)置函數(shù)名等沖突,在C語言中是解決不了的。

? ? ? ? ? ? 在大型的工程中,自己定義的變量(函數(shù),類)名與其他人定義的相沖突等問題。

1.1命名空間定義

定義命名空間,需要使用到namespace關(guān)鍵字,后面跟命名空間的名字,然后接一對{}即可,{}中即為命名空間的成員。

//1. 普通的命名空間namespace N1 // N1為命名空間的名稱{	// 命名空間中的內(nèi)容,既可以定義變量,也可以定義函數(shù)	int a;	int Add(int left, int right)	{		return left + right;	}}//2. 命名空間可以嵌套namespace N2{	int a;	int b;	int Add(int left, int right)	{		return left + right;	}	namespace N3	{		int c;		int d;		int Sub(int left, int right)		{			return left - right;		}	}}//3. 同一個工程中允許存在多個相同名稱的命名空間,編譯器最后會合成同一個命名空間中。namespace N1{	int Mul(int left, int right)	{		return left * right;	}}

注意:一個命名空間就定義了一個新的作用域,命名空間中的所有內(nèi)容都局限于該命名空間中。

1.2 命名空間使用
?

命名空間是一個作用域,如果在使用的里面的變量時,只寫變量名,編譯器肯定是無法識別的。

例如:

namespace N{    int a = 10;    int b = 20;    int Add(int x, int y)    {        return x + y;    }    int Sub(int x, int y)    {        return x - y;    }}int main(){    printf("%d/n", a); // 該語句編譯出錯,無法識別變量a    return 0;}

那該如何使用命名空間中的成員呢?

這里有三種方法:

方法1:加命名空間名稱及作用域限定符(::) (最安全可靠,但使用時不太方便)

int main(){    printf("%d/n", N::a);    return 0;}

方法二:使用using將命名空間中成員引入 (展開命名空間中常用的成員)

using N::b; // 展開后,后續(xù)可直接使用int main(){    printf("%d/n", N::a);    printf("%d/n", b);    return 0;}

方法三:使用using namespace 命名空間名稱引入(不可靠,在項目中不能使用該方法) (展開命名空間中所有成員)

using namespce N;int main(){    printf("%d/n", N::a);    printf("%d/n", b);    Add(10, 20);    return 0;}

注意:

  • 在命名空間中定義的成員本質(zhì)是全局的,放在靜態(tài)區(qū)。
  • 命名空間中變量可以初始化,但不能賦值。
namespace N{	int a;// 定義變量a,未初始化	a = 0;// 不能在命名空間中賦值	int b = 10;// 定義變量b,同時初始化}

2. C++的輸入和輸出

C++中有新的輸入和輸出方式,但C++是包容C語言的,所以C語言中對的輸入和輸出在C++中同樣適用。

Hello world!!!?

#includeusing namespace std;int main(){    cout<<"Hello world!!!"<
#include using namespace std;int main(){    int a;    double b;    char c;    cin>>a;    cin>>b>>c;    cout<

對于上面的代碼,你是否有許多疑惑,沒關(guān)系我們來依次解答。

  1. ?使用cout標(biāo)準(zhǔn)輸出(控制臺)和cin標(biāo)準(zhǔn)輸入(鍵盤)時,必須包含< iostream >頭文件以及std標(biāo)準(zhǔn)命名空間。
  2. 在平常寫代碼練習(xí)時,我們可以直接將std命名空間展開。
  3. C++中的輸入是 cin 輸出是 cout
  4. 至于>><<表示將數(shù)據(jù)輸入和輸出到流,也可以表示移位運算(在C++中被重載了,后面會將這里不用深究)
  5. endl(end line)表示換行。
  6. ?使用C++輸入輸出更方便,不需增加數(shù)據(jù)格式控制,比如:整形--%d,字符--%c。

注意:早期標(biāo)準(zhǔn)庫將所有功能在全局域中實現(xiàn),聲明在.h后綴的頭文件中,使用時只需包含對應(yīng)頭文件即可,后來將其實現(xiàn)在std命名空間下,為了和C頭文件區(qū)分,也為了正確使用命名空間,規(guī)定C++頭文件不帶.h;舊編譯器(vc 6.0)中還支持格式,后續(xù)編譯器已不支持,因此推薦使用+std的方式。

3.缺省參數(shù)

3.1概念

缺省參數(shù)是聲明或定義函數(shù)時為函數(shù)的參數(shù)指定一個默認(rèn)值

在調(diào)用該函數(shù)時,如果沒有指定實參則采用該默認(rèn)值,否則使用指定的實參。
例如:

void TestFunc(int a = 0)//默認(rèn)參數(shù)為0{    cout<

編譯結(jié)果:

3.2缺省參數(shù)分類

  • 全缺省參數(shù)
// 函數(shù)中所有參數(shù)都指定默認(rèn)值void TestFunc(int a = 10, int b = 20, int c = 30){    cout<<"a = "<//函數(shù)中部分參數(shù)指定默認(rèn)值void TestFunc(int a, int b = 10, int c = 20){    cout<<"a = "<//下面兩種均是錯誤寫法!void TestFunc(int a = 10, int b, int c)void TestFunc(int a = 10, int b, int c = 30)//a.h(聲明)void TestFunc(int a = 10);// a.c(定義)void TestFunc(int a = 20){}// 注意:如果生命與定義位置同時出現(xiàn),恰巧兩個位置提供的值不同,那編譯器就無法確定到底該用那個缺省值。

4.函數(shù)重載

4.1概念

函數(shù)重載:是函數(shù)的一種特殊情況,C++允許在同一作用域中聲明幾個功能類似的同名函數(shù),這些同名函數(shù)的形參列表(參數(shù)個數(shù) 或 類型 或 順序)必須不同,常用來處理實現(xiàn)功能類似數(shù)據(jù)類型不同的問題。

int Add(int a, int b){    return a + b;}double Add(double a, double b){    return a + b;}long Add(long a, long b){    return a + b;}int main(){    Add(10, 20);    Add(10.0, 20.0);    Add(10L, 20L);    return 0;}//上面的函數(shù)功能相同,函數(shù)名相同,參數(shù)類型不同。//當(dāng)然這里的重載函數(shù)還可以 參數(shù)個數(shù)不同,參數(shù)順序不同

下面兩個函數(shù)屬于函數(shù)重載嗎?

short Add(short a, short b){    return a + b;}int Add(short a, short b){    return a + b;}// 注意:上面兩個函數(shù)不屬于函數(shù)重載,返回值不是定義函數(shù)重載的標(biāo)準(zhǔn),調(diào)用的時候不能區(qū)分
// 1、缺省值不同,不能構(gòu)成重載void f(int a){	cout << "f()" << endl;}void f(int a = 0){	cout << "f(int a)" << endl;}// 2、構(gòu)成重載,但是使用時會有問題 : f(); // 調(diào)用存在歧義void f(){	cout << "f()" << endl;}void f(int a = 0){	cout << "f(int a)" << endl;}

4.2名字修飾(name Mangling)

為什么C++支持函數(shù)重載,而C語言不支持函數(shù)重載呢?
在C/C++中,一個程序要運行起來,需要經(jīng)歷以下幾個階段:預(yù)處理、編譯、匯編、鏈接。

1. 實際我們的項目通常是由多個頭文件和多個源文件構(gòu)成,而通過我們C語言階段學(xué)習(xí)的編譯鏈接,我們可以知道,【當(dāng)前a.cpp中調(diào)用了b.cpp中定義的Add函數(shù)時】,編譯后鏈接前,a.o的目標(biāo)文件中沒有Add的函數(shù)地址,因為Add是在b.cpp中定義的,所以Add的地址在b.o中。那么怎么辦呢?
2. 所以鏈接階段就是專門處理這種問題,鏈接器看到a.o調(diào)用Add,但是沒有Add的地址,就會到b.o的符號表中找Add的地址,然后鏈接到一起。
3. 那么鏈接時,面對Add函數(shù),連接器會使用哪個名字去找呢?這里每個編譯器都有自己的函數(shù)名修飾規(guī)則。
4. 由于Windows下vs的修飾規(guī)則過于復(fù)雜,而Linux下gcc的修飾規(guī)則簡單易懂,下面我們使用了gcc演示了這個修飾后的名字。
5. 通過下面我們可以看出gcc的函數(shù)修飾后名字不變。而g++的函數(shù)修飾后變成【_Z+函數(shù)長度+函數(shù)名+類型首字母】。

采用C語言編譯器編譯后結(jié)果
?

?結(jié)論:在linux下,采用gcc編譯完成后,函數(shù)名字的修飾沒有發(fā)生改變
?

采用C++編譯器編譯后結(jié)果

結(jié)論:在linux下,采用g++編譯完成后,函數(shù)名字的修飾發(fā)生改變,編譯器將函數(shù)參數(shù)類型信息
添加到修改后的名字中

?

Windows下名字修飾規(guī)則比較復(fù)雜,這里不再講解。

6. 通過這里就理解了C語言沒辦法支持重載,因為同名函數(shù)沒辦法區(qū)分。而C++是通過函數(shù)修飾規(guī)則來區(qū)分,只要參數(shù)不同,修飾出來的名字就不一樣,就支持了重載。
7. 另外我們也理解了,為什么函數(shù)重載要求參數(shù)不同!而跟返回值沒關(guān)系。

5.extern “C”
?

有時候在C++工程中可能需要將某些函數(shù)按照C的風(fēng)格來編譯,在函數(shù)前加extern "C",意思是告訴編譯器,將該函數(shù)按照C語言規(guī)則來編譯(例如函數(shù)名修飾規(guī)則)。

extern "C" int Add(int a, int b);int main(){    Add(1,2);    return 0;}

6.引用

6.1概念

引用不是新定義一個變量,而是給已存在變量取了一個別名,編譯器不會為引用變量開辟內(nèi)存空間,它和它引用的變量共用同一塊內(nèi)存空間。

類型& 引用變量名(對象名) = 引用實體
?

void TestRef(){    int a = 10;    int& ra = a;//<====定義引用類型    printf("%p/n", &a);    printf("%p/n", &ra);}

?注意:引用類型必須和引用實體是同種類型的

從上圖結(jié)果可以看出,ra 和 a 共同一塊空間。

?6.2 引用特性
?

1. 引用在定義時必須初始化
2. 一個變量可以有多個引用
3. 引用一旦引用一個實體,再不能引用其他實體

void TestRef(){    int a = 10;    // int& ra; // 該條語句編譯時會出錯    int& ra = a;// 一個變量可以有多個引用    int& rra = a;    printf("%p %p %p/n", &a, &ra, &rra);}

6.3 常引用

在引用常量時,需在類型前加const。

引用時如存在隱式類型轉(zhuǎn)換,也需在類型前加const,且這時引用的不是變量本身,而是隱式類型轉(zhuǎn)換時的臨時空間。

void TestConstRef(){    const int a = 10;    //int& ra = a; // 該語句編譯時會出錯,a為常量    const int& ra = a;    // int& b = 10; // 該語句編譯時會出錯,b為常量    const int& b = 10;    double d = 12.34;    //int& rd = d; // 該語句編譯時會出錯,類型不同    const int& rd = d;}

?

6.4 使用場景

1. 做參數(shù)

void Swap(int& a, int& b)//因為引用使用的是變量原空間,所以可以直接交換{    int temp = a;    a = b;    b = temp;}

2. 做返回值
由于存在棧中的地址,在函數(shù)結(jié)束后回還給操作系統(tǒng),所以引用做返回值時,不能用棧中的地址。

int& Add(int a, int b){    int c = a + b;    return c;}int main(){    int& ret = Add(1, 2);    Add(3, 4);    cout << "Add(1, 2) is :"<< ret <

這里的c是局部變量,引用做返回值,返回的是c的別名,而c已經(jīng)被還給操作系統(tǒng)了。

?這里的結(jié)果是:

了解函數(shù)棧幀的朋友應(yīng)該知道,第一次調(diào)用Add函數(shù)之后,c空間就被釋放了,但這塊空間還是存在于棧中的,而且里面的值(3)沒有被修改;

第二次調(diào)用Add后會在相同的地址開辟c空間,這時里面的值就被第二次得到的結(jié)果覆蓋了,所以輸出這塊空間中的值時得到的是?7。

int& Count(){    static int n = 0;// 加上static之后該變量就被存放在靜態(tài)區(qū)中,函數(shù)返回后該空間不會被釋放    n++;    // ...    return n;}

注意:如果函數(shù)返回時,出了函數(shù)作用域,如果返回對象還未還給系統(tǒng),則可以使用引用返回,如果已經(jīng)還給系統(tǒng)了,則必須使用傳值返回。
?

6.5?引用和指針的區(qū)別

在語法概念上引用就是一個別名,沒有獨立空間,和其引用實體共用同一塊空間。

底層實現(xiàn)上實際是有空間的,因為引用是按照指針方式來實現(xiàn)的。

int main(){	int a = 10;	int& ra = a;	ra = 20;	int* pa = &a;	*pa = 20;	return 0;}

?匯編代碼比較:

引用和指針的不同點:

  1. ?引用在定義時必須初始化,指針沒有要求
  2. ?引用在初始化時引用一個實體后,就不能再引用其他實體,而指針可以在任何時候指向任何一個同類型實體
  3. ?沒有NULL引用,但有NULL指針
  4. ?在sizeof中含義不同:引用結(jié)果為引用類型的大小,但指針始終是地址空間所占字節(jié)個數(shù)(32位平臺下占4個字節(jié))
  5. ?引用自加即引用的實體增加1,指針自加即指針向后偏移一個類型的大小
  6. ?有多級指針,但是沒有多級引用
  7. 訪問實體方式不同,指針需要顯式解引用,引用編譯器自己處理
  8. ?引用比指針使用起來相對更安全

7. 內(nèi)聯(lián)函數(shù)

7.1 概念

inline修飾的函數(shù)叫做內(nèi)聯(lián)函數(shù),編譯時C++編譯器會在調(diào)用內(nèi)聯(lián)函數(shù)的地方展開,沒有函數(shù)壓棧的開銷,內(nèi)聯(lián)函數(shù)提升程序運行的效率。

如果不是內(nèi)聯(lián)函數(shù),使用時會有調(diào)用函數(shù)的操作:

如果在上述函數(shù)前增加inline關(guān)鍵字將其改成內(nèi)聯(lián)函數(shù),在編譯期間編譯器會用函數(shù)體替換函數(shù)的調(diào)用。不會有函數(shù)壓棧的開銷。

7.2 特性

1. inline是一種以空間換時間的做法,省去調(diào)用函數(shù)額開銷。所以代碼很長或者有循環(huán)/遞歸的函數(shù)不適宜使用作為內(nèi)聯(lián)函數(shù)。
2. inline對于編譯器而言只是一個建議,編譯器會自動優(yōu)化,如果定義為inline的函數(shù)體內(nèi)有循環(huán)/遞歸等等,編譯器優(yōu)化時會忽略掉內(nèi)聯(lián)。
3. inline不建議聲明和定義分離,分離會導(dǎo)致鏈接錯誤。因為inline被展開,就沒有函數(shù)地址了,鏈接就會找不到。

4.頻繁使用的小函數(shù),可以定義成內(nèi)聯(lián)函數(shù)

例如:

// F.h#include using namespace std;inline void f(int i);// F.cpp#include "F.h"void f(int i){    cout << i << endl;}// main.cpp#include "F.h"int main(){    f(10);    return 0;}

上面這段代碼,在main函數(shù)中f函數(shù)的聲明和定義是分離的,在F.h展開后,f函數(shù)也會被直接展開,而F.h中只有聲明,在鏈接時找不到f函數(shù)的地址,程序就會出現(xiàn)鏈接錯誤。

8. auto關(guān)鍵字(C++11)

8.1 auto簡介

在早期C/C++中auto的含義是:使用auto修飾的變量,是具有自動存儲器的局部變量,但遺憾的是一直沒有人去使用它。

C++11中,標(biāo)準(zhǔn)委員會賦予了auto全新的含義即:auto不再是一個存儲類型指示符,而是作為一個新的類型指示符來指示編譯器,auto聲明的變量必須由編譯器在編譯時期推導(dǎo)而得。
?

int TestAuto(){    return 10;}int main(){    int a = 10;    auto b = a;//auto自動識別a的類型    auto c = "a";    auto d = TestAuto();    cout << typeid(b).name() << endl;//C++中tyoeid().name可以輸出變量類型    cout << typeid(c).name() << endl;    cout << typeid(d).name() << endl;    //auto e; 無法通過編譯,使用auto定義變量時必須對其進(jìn)行初始化    return 0;}

【注意】
使用auto定義變量時必須對其進(jìn)行初始化,在編譯階段編譯器需要根據(jù)初始化表達(dá)式來推導(dǎo)auto的實際類型。因此auto并非是一種“類型”的聲明,而是一個類型聲明時的“占位符”,編譯器在編譯期會將auto替換為變量實際的類型。

?

8.2 auto的使用

1. auto與指針和引用結(jié)合起來使用
用auto聲明指針類型時,用auto和auto*沒有任何區(qū)別,但用auto聲明引用類型時則必須加&?

int main(){    int x = 10;    auto a = &x;    auto* b = &x;    auto& c = x;    cout << typeid(a).name() << endl;    cout << typeid(b).name() << endl;    cout << typeid(c).name() << endl;    *a = 20;    *b = 30;    c = 40;    return 0;}

2. 在同一行定義多個變量
當(dāng)在同一行聲明多個變量時,這些變量必須是相同的類型,否則編譯器將會報錯,因為編譯器實際只對第一個類型進(jìn)行推導(dǎo),然后用推導(dǎo)出來的類型定義其他變量。

void TestAuto(){    auto a = 1, b = 2;    auto c = 3, d = 4.0; // 該行代碼會編譯失敗,因為c和d的初始化表達(dá)式類型不同}

?

8.3 auto不能推導(dǎo)的場景

1. auto不能作為函數(shù)的參數(shù)

// 此處代碼編譯失敗,auto不能作為形參類型,因為編譯器無法對a的實際類型進(jìn)行推導(dǎo)void TestAuto(auto a){}

2. auto不能直接用來聲明數(shù)組

void TestAuto(){    int a[] = {1,2,3};    auto b[] = {4,5,6};}

3. 為了避免與C++98中的auto發(fā)生混淆,C++11只保留了auto作為類型指示符的用法
4. auto在實際中最常見的優(yōu)勢用法就是跟C++11提供的新式for循環(huán),還有l(wèi)ambda表達(dá)式等進(jìn)行配合使用。


9. 基于范圍的for循環(huán)(C++11)

9.1 范圍for的語法

在C++98中如果要遍歷一個數(shù)組,可以按照以下方式進(jìn)行:

void TestFor(){    int array[] = { 1, 2, 3, 4, 5 };    for (int i = 0; i < sizeof(array) / sizeof(array[0]); ++i)    array[i] *= 2;    for (int* p = array; p < array + sizeof(array)/ sizeof(array[0]); ++p)    cout << *p << endl;}

對于一個有范圍的集合而言,由程序員來說明循環(huán)的范圍是多余的,有時候還會容易犯錯誤。

因此C++11中引入了基于范圍的for循環(huán)。

for循環(huán)后的括號由冒號“ :”分為兩部分:第一部分是范圍內(nèi)用于迭代的變量,第二部分則表示被迭代的范圍。
?

void TestFor(){    int array[] = { 1, 2, 3, 4, 5 };    for(auto& e : array)    e *= 2;    for(auto e : array)    cout << e << " ";    return 0;}

注意:與普通循環(huán)類似,可以用continue來結(jié)束本次循環(huán),也可以用break來跳出整個循環(huán)。
?

9.2 范圍for的使用條件
?

1. for循環(huán)迭代的范圍必須是確定的

對于數(shù)組而言,就是數(shù)組中第一個元素和最后一個元素的范圍;對于類而言,應(yīng)該提供begin和end的方法,begin和end就是for循環(huán)迭代的范圍。
注意:以下代碼就有問題,因為for的范圍不確定

void TestFor(int array[]){    for(auto& e : array)    cout<< e <

2. 迭代的對象要實現(xiàn)++和==的操作。
?

10. 指針空值nullptr(C++11)

在良好的C/C++編程習(xí)慣中,聲明一個變量時最好給該變量一個合適的初始值,否則可能會出現(xiàn)不可預(yù)料的錯誤,比如未初始化的指針。

如果一個指針沒有合法的指向,我們基本都是按照如下方式對其進(jìn)行初始化:
?

void TestPtr(){    int* p1 = NULL;    int* p2 = 0;    // ……}

NULL實際是一個宏,在傳統(tǒng)的C頭文件(stddef.h)中,可以看到如下代碼:

#ifndef NULL#ifdef __cplusplus#define NULL 0#else#define NULL ((void *)0)#endif#endif

可以看到,NULL可能被定義為字面常量0,或者被定義為無類型指針(void*)的常量。不論采取何種定義,在使用空值的指針時,都不可避免的會遇到一些麻煩,比如:
?

void f(int){    cout<<"f(int)"<

結(jié)果如下:

?

?

程序本意是想通過f(NULL)調(diào)用指針版本的f(int*)函數(shù),但是由于NULL被定義成0,因此與程序的初衷相悖。

在C++98中,字面常量0既可以是一個整形數(shù)字,也可以是無類型的指針(void*)常量,但是編譯器默認(rèn)情況下將其看成是一個整形常量,如果要將其按照指針方式來使用,必須對其進(jìn)行強(qiáng)轉(zhuǎn)(void *)0。

注意:
1. 在使用nullptr表示指針空值時,不需要包含頭文件,因為nullptr是C++11作為新關(guān)鍵字引入的。
2. 在C++11中,sizeof(nullptr) 與 sizeof((void*)0)所占的字節(jié)數(shù)相同。
3. 為了提高代碼的健壯性,在后續(xù)表示指針空值時建議最好使用nullptr。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/125659.html

相關(guān)文章

  • 某熊的技術(shù)之路指北 ?

    某熊的技術(shù)之路指北 ? 當(dāng)我們站在技術(shù)之路的原點,未來可能充滿了迷茫,也存在著很多不同的可能;我們可能成為 Web/(大)前端/終端工程師、服務(wù)端架構(gòu)工程師、測試/運維/安全工程師等質(zhì)量保障、可用性保障相關(guān)的工程師、大數(shù)據(jù)/云計算/虛擬化工程師、算法工程師、產(chǎn)品經(jīng)理等等某個或者某幾個角色。某熊的技術(shù)之路系列文章/書籍/視頻/代碼即是筆者蹣跚行進(jìn)于這條路上的點滴印記,包含了筆者作為程序員的技術(shù)視野、...

    shadowbook 評論0 收藏0
  • 十年鏟碼,八大體系超千數(shù)百萬字技術(shù)筆記系列匯總(GitBook 悅享版)

    摘要:十年鏟碼,八大體系超千篇數(shù)百萬字技術(shù)筆記系列匯總悅享版十年鏟碼兩茫茫,縱思量,卻易忘不覺筆者步入程序員已有十年。十年之期,正巧筆者從阿里離開,重回打印制造業(yè)的懷抱,希望能依托于設(shè)備優(yōu)勢逐步真正構(gòu)建分布式制造網(wǎng)絡(luò)。 showImg(https://segmentfault.com/img/remote/1460000020151971); 十年鏟碼,八大體系超千篇數(shù)百萬字技術(shù)筆記系列匯總...

    Ashin 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<