當前位置:首頁 » 編程語言 » 代碼生成器python

代碼生成器python

發布時間: 2024-09-18 22:19:43

1. 閑話python 45: 淺談生成器yield

生成器似乎並不是一個經常被開發者討論的語法,因此也就沒有它的大兄弟迭代器那麼著名。大家不討論它並不是說大家都已經對它熟悉到人盡皆知,與之相反,即使是工作多年的開發者可能對生成器的運行過程還是知之甚少。這是什麼原因導致的呢?我猜想大概有以下幾點原因: (1)運行流程不同尋常,(2)日常開發不需要,(3)常常將生成器與迭代器混淆。 生成器的運行流程可以按照協程來理解,也就是說 返回中間結果,斷點繼續運行 。這與我們通常對於程序調用的理解稍有差異。這種運行模式是針對什麼樣的需求呢? 一般而言,生成器是應用於大量磁碟資源的處理。 比如一個很大的文件,每次讀取一行,下一次讀取需要以上一次讀取的位置為基礎。下面就通過代碼演示具體看看生成器的運行機制、使用方式以及與迭代器的比較。

什麼是生成器?直接用文字描述可能太過抽象,倒不如先運行一段代碼,分析這段代碼的運行流程,然後總結出自己對生成器的理解。

從以上演示可以看出,這段代碼定義了一個函數,這個函數除了yield這個關鍵字之外與一般函數並沒有差異,也就是說生成器的魔法都是這個yield關鍵字引起的。 第一點,函數的返回值是一個生成器對象。 上述代碼中,直接調用這個看似普通的函數,然後將返回值列印出來,發現返回值是一個對象,而並不是普通函數的返回值。 第二點,可以使用next對這個生成器對象進行操作 。生成器對象天然的可以被next函數調用,然後返回在yield關鍵字後面的內容。 第三,再次調用next函數處理生成器對象,發現是從上次yield語句之後繼續運行,直到下一個yield語句返回。

生成器的運行流程確實詭異,下面還要演示一個生成器可以執行的更加詭異的操作:運行過程中向函數傳參。

返回生成器和next函數操作生成器已經並不奇怪了,但是在函數運行過程中向其傳參還是讓人驚呆了。 調用生成器的send函數傳入參數,在函數內使用yield語句的返回值接收,然後繼續運行直到下一個yield語句返回。 以前實現這種運行流程的方式是在函數中加上一個從控制台獲取數據的指令,或者提前將參數傳入,但是現在不用了,send方式使得傳入的參數可以隨著讀取到的參數變化而變化。

很多的開發者比較容易混淆生成器和迭代器,而迭代器的運行過程更加符合一般的程序調用運行流程,因此從親進度和使用熟悉度而言,大家對迭代器更有好感。比如下面演示一個對迭代器使用next方法進行操作。

從以上演示來看,大家或許會認為迭代器比生成器簡單易用得太多了。不過,如果你了解迭代器的實現機制,可能就不會這么早下結論了。python內置了一些已經實現了的迭代器使用確實方便,但是如果需要自己去寫一個迭代器呢?下面這段代碼就帶大家見識以下迭代器的實現。

在python中,能被next函數操作的對象一定帶有__next__函數的實現,而能夠被迭代的對象有必須實現__iter__函數。看了這么一段操作,相信大家對迭代器實現的繁瑣也是深有體會了,那麼生成器的實現是不是會讓你覺得更加簡單易用呢?不過千萬別產生一個誤區,即生成器比迭代器簡單就多用生成器。 在實際開發中,如果遇到與大量磁碟文件或者資料庫操作相關的倒是可以使用生成器。但是在其他的任務中使用生成器難免有炫技,並且使邏輯不清晰而導致可讀性下降的嫌疑。 這大概也能解釋生成器受冷落的原因。不過作為一個專業的開發者,熟悉語言特性是分內之事。

到此,關於生成器的討論就結束了。本文的notebook版本文件在github上的cnbluegeek/notebook倉庫中共享,歡迎感興趣的朋友前往下載。

2. 如何更好地理解Python迭代器和生成器

Python這門語言中,生成器毫無疑問是最有用的特性之一。與此同時,也是使用的最不廣泛的Python特
性之一。究其原因,主要是因為,在其他主流語言裡面沒有生成器的概念。正是由於生成器是一
個「新」的東西,所以,它一方面沒有引起廣大工程師的重視,另一方面,也增加了工程師的學習成本,
最終導致大家錯過了Python中如此有用的一個特性。
我的這篇文章,希望通過簡單易懂的方式,深入淺出地介紹Python的生成器,以改變「如此有用的特性卻
使用極不廣泛」的現象。本文的組織如下:在第1章,我們簡單地介紹了Python中的迭代器協議;在本文
第2章,將會詳細介紹生成器的概念和語法;在第3章,將會給出一個有用的例子,說明使用生成器的好
處;在本文最後,簡單的討論了使用生成器的注意事項。
1. 迭代器協議
由於生成器自動實現了迭代器協議,而迭代器協議對很多人來說,也是一個較為抽象的概念。所以,為了
更好的理解生成器,我們需要簡單的回顧一下迭代器協議的概念。
1. 迭代器協議是指:對象需要提供next方法,它要麼返回迭代中的下一項,要麼就引起一個
StopIteration異常,以終止迭代
2. 可迭代對象就是:實現了迭代器協議的對象
3. 協議是一種約定,可迭代對象實現迭代器協議,Python的內置工具(如for循環,sum,min,max函
數等)使用迭代器協議訪問對象。
舉個例子:在所有語言中,我們都可以使用for循環來遍歷數組,Python的list底層實現是一個數組,所
以,我們可以使用for循環來遍歷list。如下所示:
>>> for n in [1, 2, 3, 4]:
... print n
但是,對Python稍微熟悉一點的朋友應該知道,Python的for循環不但可以用來遍歷list,還可以用來遍歷
文件對象,如下所示:
>>> with open(『/etc/passwd』) as f: # 文件對象提供迭代器協議
... for line in f: # for循環使用迭代器協議訪問文件
... print line
...
為什麼在Python中,文件還可以使用for循環進行遍歷呢?這是因為,在Python中,文件對象實現了迭代
器協議,for循環並不知道它遍歷的是一個文件對象,它只管使用迭代器協議訪問對象即可。正是由於
Python的文件對象實現了迭代器協議,我們才得以使用如此方便的方式訪問文件,如下所示:
>>> f = open('/etc/passwd')
>>> dir(f)
['__class__', '__enter__', '__exit__', '__iter__', '__new__', 'writelines', '...'
2. 生成器
Python使用生成器對延遲操作提供了支持。所謂延遲操作,是指在需要的時候才產生結果,而不是立即產
生結果。這也是生成器的主要好處。
Python有兩種不同的方式提供生成器:
2017/11/6 如何更好地理解Python迭代器和生成器? - 知乎
https://www.hu.com/question/20829330 2/5
1. 生成器函數:常規函數定義,但是,使用yield語句而不是return語句返回結果。yield語句一次返回一
個結果,在每個結果中間,掛起函數的狀態,以便下次重它離開的地方繼續執行
2. 生成器表達式:類似於列表推導,但是,生成器返回按需產生結果的一個對象,而不是一次構建一個
結果列表
2.1 生成器函數
我們來看一個例子,使用生成器返回自然數的平方(注意返回的是多個值):
def gensquares(N):
for i in range(N):
yield i ** 2
for item in gensquares(5):
print item,
使用普通函數:
def gensquares(N):
res = []
for i in range(N):
res.append(i*i)
return res
for item in gensquares(5):
print item,
可以看到,使用生成器函數代碼量更少。
2.2 生成器表達式
使用列表推導,將會一次產生所有結果:
>>> squares = [x**2 for x in range(5)]
>>> squares
[0, 1, 4, 9, 16]
將列表推導的中括弧,替換成圓括弧,就是一個生成器表達式:
>>> squares = (x**2 for x in range(5))
>>> squares>>> next(squares)
0
>>> next(squares)
1
>>> next(squares)
4
>>> list(squares)
[9, 16]
Python不但使用迭代器協議,讓for循環變得更加通用。大部分內置函數,也是使用迭代器協議訪問對象
的。例如, sum函數是Python的內置函數,該函數使用迭代器協議訪問對象,而生成器實現了迭代器協
2017/11/6 如何更好地理解Python迭代器和生成器? - 知乎
https://www.hu.com/question/20829330 3/5
議,所以,我們可以直接這樣計算一系列值的和:
>>> sum(x ** 2 for x in xrange(4))
而不用多此一舉的先構造一個列表:
>>> sum([x ** 2 for x in xrange(4)])
2.3 再看生成器
前面已經對生成器有了感性的認識,我們以生成器函數為例,再來深入探討一下Python的生成器:
1. 語法上和函數類似:生成器函數和常規函數幾乎是一樣的。它們都是使用def語句進行定義,差別在
於,生成器使用yield語句返回一個值,而常規函數使用return語句返回一個值
2. 自動實現迭代器協議:對於生成器,Python會自動實現迭代器協議,以便應用到迭代背景中(如for
循環,sum函數)。由於生成器自動實現了迭代器協議,所以,我們可以調用它的next方法,並且,
在沒有值可以返回的時候,生成器自動產生StopIteration異常
3. 狀態掛起:生成器使用yield語句返回一個值。yield語句掛起該生成器函數的狀態,保留足夠的信息,
以便之後從它離開的地方繼續執行
3. 示例
我們再來看兩個生成器的例子,以便大家更好的理解生成器的作用。
首先,生成器的好處是延遲計算,一次返回一個結果。也就是說,它不會一次生成所有的結果,這對於大
數據量處理,將會非常有用。
大家可以在自己電腦上試試下面兩個表達式,並且觀察內存佔用情況。對於前一個表達式,我在自己的電
腦上進行測試,還沒有看到最終結果電腦就已經卡死,對於後一個表達式,幾乎沒有什麼內存佔用。
sum([i for i in xrange(10000000000)])
sum(i for i in xrange(10000000000))
除了延遲計算,生成器還能有效提高代碼可讀性。例如,現在有一個需求,求一段文字中,每個單詞出現
的位置。
不使用生成器的情況:
def index_words(text):
result = []
if text:
result.append(0)
for index, letter in enumerate(text, 1):
if letter == ' ':
result.append(index)
return result
使用生成器的情況:
2017/11/6 如何更好地理解Python迭代器和生成器? - 知乎
https://www.hu.com/question/20829330 4/5
def index_words(text):
if text:
yield 0
for index, letter in enumerate(text, 1):
if letter == ' ':
yield index
這里,至少有兩個充分的理由說明 ,使用生成器比不使用生成器代碼更加清晰:
1. 使用生成器以後,代碼行數更少。大家要記住,如果想把代碼寫的Pythonic,在保證代碼可讀性的前
提下,代碼行數越少越好
2. 不使用生成器的時候,對於每次結果,我們首先看到的是result.append(index),其次,才是index。
也就是說,我們每次看到的是一個列表的append操作,只是append的是我們想要的結果。使用生成
器的時候,直接yield index,少了列表append操作的干擾,我們一眼就能夠看出,代碼是要返回
index。
這個例子充分說明了,合理使用生成器,能夠有效提高代碼可讀性。只要大家完全接受了生成器的概念,
理解了yield語句和return語句一樣,也是返回一個值。那麼,就能夠理解為什麼使用生成器比不使用生成
器要好,能夠理解使用生成器真的可以讓代碼變得清晰易懂。
4. 使用生成器的注意事項
相信通過這篇文章,大家已經能夠理解生成器的作用和好處。但是,還沒有結束,使用生成器,也有一點
注意事項。
我們直接來看例子,假設文件中保存了每個省份的人口總數,現在,需要求每個省份的人口佔全國總人口
的比例。顯然,我們需要先求出全國的總人口,然後在遍歷每個省份的人口,用每個省的人口數除以總人
口數,就得到了每個省份的人口佔全國人口的比例。
如下所示:
def get_province_population(filename):
with open(filename) as f:
for line in f:
yield int(line)
gen = get_province_population('data.txt')
all_population = sum(gen)
#print all_population
for population in gen:
print population / all_population
執行上面這段代碼,將不會有任何輸出,這是因為,生成器只能遍歷一次。在我們執行sum語句的時候,
就遍歷了我們的生成器,當我們再次遍歷我們的生成器的時候,將不會有任何記錄。所以,上面的代碼不
會有任何輸出。
因此,生成器的唯一注意事項就是:生成器只能遍歷一次。
5. 總結
2017/11/6 如何更好地理解Python迭代器和生成器? - 知乎
https://www.hu.com/question/20829330 5/5
本文深入淺出地介紹了Python中,一個容易被大家忽略的重要特性,即Python的生成器。為了講解生成
器,本文先介紹了迭代器協議,然後介紹了生成器函數和生成器表達式,並通過示例演示了生成器的優點
和注意事項。在實際工作中,充分利用Python生成器,不但能夠減少內存使用,還能夠提高代碼可讀性。
掌握生成器也是Python高手的標配。希望本文能夠幫助大家理解Python的生成器

3. 浠涔堟槸Python涓鐨勭敓鎴愬櫒鎺ㄥ煎紡

Python涓鏈変竴縐嶇揣鍑戠殑璇娉曪紝鍙浠ラ氳繃涓涓寰鐜鍜屾潯浠舵瀯寤轟竴涓鍒楄〃錛岃繖縐嶈娉曞彨鍋氬垪琛ㄦ帹瀵煎紡錛坙ist comprehension錛夛細 my_list = [ f(x) for x in sequence if cond(x) ] 綾諱技鍦幫紝鎴戜滑鍙浠ラ氳繃瀛楀吀鎺ㄥ煎紡

Python涓鏈変竴縐嶇揣鍑戠殑璇娉曪紝鍙浠ラ氳繃涓涓寰鐜鍜屾潯浠舵瀯寤轟竴涓鍒楄〃錛岃繖縐嶈娉曞彨鍋氬垪琛ㄦ帹瀵煎紡錛坙ist comprehension錛夛細
my_list = [ f(x) for x in sequence if cond(x) ]

綾諱技鍦幫紝鎴戜滑鍙浠ラ氳繃瀛楀吀鎺ㄥ煎紡錛坉ictionary comprehension錛夊壋寤哄瓧鍏革紝閫氳繃闆嗗悎鎺ㄥ煎紡錛坰et comprehension錛夊壋寤洪泦鍚堬細
my_dict = { k(x): v(x) for x in sequence if cond(x) }
my_set = { f(x) for x in sequence if cond(x) }

錛堣繖涓璇娉曟敮鎸佹洿鍔犲嶆潅鐨勬搷浣滐紝浣嗚繖閲屼粎浣滅ず渚嬶級
鏈鍚庯紝浣犺繕鍙浠ヤ嬌鐢ㄧ被浼肩殑璇娉曞壋寤轟竴涓鐢熸垚鍣錛
my_generator = ( f(x) for x in sequence if cond(x) )

涓嶈繃錛岃繖騫朵笉鍙鍋氱敓鎴愬櫒鎺ㄥ煎紡錛岃屾槸鍙鍋氱敓鎴愬櫒琛ㄨ揪寮忥紙generator expression錛夈備負浠涔堜笉鍙鍓嶈呭憿錛熷傛灉鍓嶄笁涓璇娉曢兘琚縐頒負鈥滄帹瀵煎紡鈥濓紝涓轟粈涔堢敓鎴愬櫒榪欎釜涓嶅彨鍛錛
PEP 289 鈥斺 鐢熸垚鍣ㄨ〃杈懼紡 鐨勬渶鍚庣粰鍑轟簡璇︾粏鐨勫囨敞錛屽叾涓鎸囧嚭Raymond Hettinger璧峰垵鎻愯浣跨敤鈥滅敓鎴愬櫒鎺ㄥ煎紡錛坓enerator comprehension錛夆濅竴璇嶏紝鍚庢潵Peter Norvig鎻愬嚭浜嗏滅瘡璁℃樉紺猴紙accumulation displays錛夆濓紝鍚庢潵Tim Peters鎺ㄨ崘浜嗏滅敓鎴愬櫒琛ㄨ揪寮忊濊繖涓
鍚嶈瘝銆備絾鏄瀹冨苟娌℃湁鍚嶈瘝鍑虹幇浜嗚繖鏍風殑鍙樺寲銆
EarlGrey錛氫笂闈㈡彁鍒扮殑榪欏嚑浣嶉兘鏄澶х墰鍟婏紒鍏蜂綋澶у跺彲浠ヨ胺姝屼竴涓嬨
鎵浠ユ垜鍦═witter涓婃彁鍑轟簡榪欎釜闂棰橈細
python 鏈変釜鎴戜笉鎳傜殑闂棰橈細涓轟粈涔堝畠浠琚縐頒負鈥滅敓鎴愬櫒琛ㄨ揪寮忊濓紝鑰屼笉鏄鈥滅敓鎴愬櫒鎺ㄥ煎紡鈥濓紵
Guido鐨勫洖絳旀寚鍑轟簡鏍稿績鍘熷洜錛
鎺ㄥ煎紡涓寮濮嬪睘浜庘滃瓧闈㈤噺鏄劇ず錛坙iteral display錛夆濊繖涓姒傚康銆傝岀敓鎴愬櫒琛ㄨ揪寮忎笉鏄涓縐嶆樉紺猴紙display錛夈
Matt Boehm鍚庢潵鎵懼埌浜員im Peters鎻愬嚭鈥滅敓鎴愬櫒琛ㄨ揪寮忊濅竴璇嶇殑閭浠訛紝鍏朵腑璁茶堪浜嗕竴浜涚粏鑺傦細
璇誨畬閭浠跺悗錛屾垜瀵硅繖涓闂棰樼殑鐞嗚В鏇存繁浜嗐傞栧厛錛屼負浠涔堜細浣跨敤鈥滄帹瀵煎紡鈥濓紙comprehension錛変竴璇嶏紵Tim鍦ㄩ偖浠朵腑鎸囧嚭錛岃繖涓璇嶆潵婧愪簬闆嗗悎璁轟腑鐨勬帹瀵煎叕鐞嗭紙Axiom of Comprehension錛夛紝瀹冩寚鐨勬槸閫氳繃瀵瑰彟涓涓闆嗗悎鐨勫厓緔犲簲鐢ㄦ煇涓璋撹瘝錛坧redicate錛屽嵆鏉
浠訛級鑰岀粍鎴愭柊鐨勯泦鍚堛傝繖鍜屽悜鍙︿竴涓搴忓垪涓鐨勫厓緔犲簲鐢ㄦ煇涓鏉′歡浠庤岀敓鎴愬垪琛ㄧ殑鍋氭硶闈炲父綾諱技銆
EarlGrey錛氭垜涔嬪墠鐪嬪埌寰堝氱炕璇戜負鈥滆В鏋愨濓紝鐪嬪埌榪欓噷鎵嶈夊緱鈥滄帹瀵煎紡鈥濇墠鏄鏇村噯紜鐨勮存硶銆
姝e侴uido鎵鎸囧嚭鐨勶紝Python鐨勮捐¤呭綋鏃舵洿娉ㄩ噸鐨勬槸鏄劇ず錛岃屼笉鏄鏉′歡銆傗滄樉紺衡濅竴璇嶅湪榪欓噷鎰忓懗鐫浠g爜鐨勮娉曠湅涓婂拰瀹冨皢鍒涘緩鐨勬暟鎹緇撴瀯寰堝儚銆傚垪琛ㄦ樉紺猴紙鍒楄〃鎺ㄥ煎紡錛夌湅涓婂幓鍍忎竴涓鍒楄〃銆傚逛簬闆嗗悎鍜屽瓧鍏告樉紺烘潵璇達紝涔熸槸涓鏍風殑閬撶悊銆備絾鏄鐢變簬娌℃湁鐢熸垚鍣
瀛楅潰閲忚娉曪紝鍥犳ゆ牴鏈灝辨病鏈変竴涓鐢熸垚鍣ㄦ樉紺哄彲浠ヨ繘琛屽規瘮錛屼篃灝變笉瀛樺湪鐢熸垚鍣ㄦ樉紺轟簡銆
鍦ㄨ捐¤ュ姛鑳界殑閭e皝閭浠朵腑錛屸滄帹瀵煎紡鈥濅竴嬈℃槸鈥滄樉紺衡濈殑鍚屼箟璇嶏紝鐢變簬鐢熸垚鍣ㄦ病鏈夋樉紺猴紝鎵浠ヤ篃涓嶅彲鑳芥湁鎺ㄥ煎紡銆
涓嶈繃Time鍦ㄤ粬鐨勯偖浠朵腑涔熻村埌錛屾帹瀵煎紡鐨勫囧欎箣澶勫湪浜庢潯浠躲傛帹瀵煎叕鐞嗙殑鏍稿績鍒欐槸璋撹銆備篃璁告槸鍥犱負Python鎺ㄥ煎紡涓鐨勬潯浠舵槸鍙閫夌殑錛屽叧娉ㄧ殑鐒︾偣琚杞縐誨埌浜嗘樉紺烘柟闈銆
浣嗘槸鎴戣や負錛屾垜浠搴旇ュ彨瀹冧滑鈥滅敓鎴愬櫒鎺ㄥ煎紡鈥濄傛垜浠鍦ㄦ弿榪拌繖綾昏娉曟椂錛屽苟娌℃湁浣跨敤鈥滄樉紺衡濅竴璇嶃傛垜浠娌℃湁鐞嗙敱灝嗏滄帹瀵煎紡鈥濅笌鈥滄樉紺衡濆拰瀛楅潰閲忚娉曡仈緋誨湪涓璧楓
鍒楄〃鎺ㄥ煎紡銆佸瓧鍏告帹瀵煎紡銆侀泦鍚堟帹瀵煎紡鍜岀敓鎴愬櫒琛ㄨ揪寮忥紝榪欏洓涓琛ㄨ揪寮忓悇鑷涔嬮棿鏈夌潃璁稿氱浉浼間箣澶勩傚傛灉灝嗗洓鑰呬箣闂寸殑綾諱技鐐規葷粨涓衡滄帹瀵煎紡鈥濓紝灝嗘瀬澶у湴綆鍖栫浉鍏蟲傚康銆傚畠浠涔嬮棿鐨勭浉浼肩偣榪滃ぇ浜庝笉鍚屼箣澶勶紝鎴戝緩璁澶у跺硅繖鍥涗釜琛ㄨ揪寮忎嬌鐢ㄥ悓鏍風殑姒傚康

4. 浣滀負紼嬪簭鍛樼殑浣狅紝甯哥敤鐨勮蔣浠舵湁鍝浜涳紵

榪欎釜灝遍潪甯稿氫簡錛屼笅闈㈡垜浠ュ父瑙佺殑緙栫▼寮鍙戣蔣浠鍜屾暟鎹搴撶$悊杞浠朵負渚嬶紝綆鍗曚粙緇嶅嚑縐嶏紝鎰熷叴瓚g殑鏈嬪弸鍙浠ュ皾璇曚竴涓嬶細

01 緙栫▼寮鍙戣蔣浠

榪欎釜瑕佺湅鍏蜂綋緙栫▼璇璦浜嗭紝涓嶅悓璇璦寮鍙戝伐鍏瘋嚜鐒朵笉鍚岋紝榪欓噷浠ュ父瑙佺殑C/C++銆丣ava鍜孭ython涓轟緥錛岀畝鍗曚粙緇3縐嶆瘮杈冨父鐢ㄧ殑杞浠訛細

榪欐槸Windows騫沖彴涓嬩竴涓闈炲父涓撲笟鐨勯泦鎴愬紑鍙戝伐鍏鳳紝鍙風О瀹囧畽絎涓IDE鐜澧冿紝涓嶄粎浠呭彧鏄疌/C++錛屽父瑙佺殑C#銆乂B絳夌紪紼嬭璦錛岃繖涓杞浠墮兘鑳藉緢濂芥敮鎸侊紝鏅鴻兘琛ュ叏銆佷唬鐮侀珮浜銆佽娉曟鏌ョ瓑鍔熻兘闈炲父涓嶉敊錛岄櫎姝や箣澶栵紝榪樻敮鎸鍗曞厓嫻嬭瘯銆佷唬鐮侀噸鏋勫拰鍒嗘瀽絳夐珮綰у姛鑳斤紝鍥犳ら潪甯擱傚悎澶у瀷欏圭洰寮鍙戝拰緇存姢錛

榪欐槸涓涓闈炲父涓撲笟鏅鴻兘鐨凧ava寮鍙戝伐鍏鳳紝鍦ㄤ紒涓氬拰涓浜烘岄潰涓錛屾湁鐫闈炲父楂樼殑浣跨敤鐜囧拰嬈㈣繋搴︼紝鑷鍔ㄨˉ鍏ㄣ佽娉曟彁紺恆佷唬鐮侀珮浜絳夊姛鑳介潪甯鎬笉閿欙紝闄ゆや箣澶栵紝榪樻敮鎸丣Unit銆丆VS鏁村悎銆佷唬鐮侀噸鏋勭瓑楂樼駭鍔熻兘錛岃嚜甯︽湁Maven鍜孏radle鏋勫緩宸ュ叿錛屽洜姝ゆ洿閫傚悎java欏圭洰寮鍙戝拰緇存姢錛屼釜浜轟嬌鐢ㄨ搗鏉ラ潪甯鎬笉閿欙細

榪欐槸涓涓闈炲父涓撲笟鐨凱ython寮鍙戣蔣浠訛紝鍜孖ntelliJ IDEA涓鏍鳳紝Jetbrains鍏鍙哥殑浜у搧錛屽湪涓氱晫闈炲父嫻佽屻佸彈嬈㈣繋錛屾櫤鑳借ˉ鍏ㄣ佷唬鐮侀珮浜銆佽娉曟彁紺虹瓑鍔熻兘闈炲父涓嶉敊錛岄櫎姝や箣澶栵紝榪樻敮鎸佷唬鐮侀噸鏋勫拰鍒嗘瀽銆佸崟鍏冩祴璇曠瓑楂樼駭鍔熻兘錛屽洜姝ゆ洿閫傚悎澶у瀷欏圭洰錛屼釜浜轟嬌鐢ㄦ潵璇達紝涔熼潪甯哥畝鍗曪紝寰堝規槗涓婃墜鍜屾帉鎻★細

02 鏁版嵁搴撶$悊杞浠

榪欎釜灝遍潪甯稿氫簡錛屼笉鍚屾暟鎹搴撻兘鏈変笓闂ㄧ殑綆$悊杞浠跺拰宸ュ叿錛岃繖閲岀畝鍗曚粙緇3涓姣旇緝閫氱敤鐨勬暟鎹搴撶$悊杞浠訛紝鍒嗗埆鏄疕eidisql銆丏Beaver鍜孌ataGrip錛屽逛簬鏃ュ父浣跨敤鏉ヨ達紝闈炲父涓嶉敊錛

榪欐槸Windows騫沖彴涓嬩竴涓闈炲父杞誨閥鐏墊椿鐨勬暟鎹搴撶$悊杞浠訛紝鍩轟簬Delphi寮鍙戣屾潵錛岀洰鍓嶆敮鎸丮ySQL銆丮ariaDB銆丮SSQL銆丳ostgreSQL絳変富嫻佹暟鎹搴擄紝甯歌佺殑寤哄簱寤鴻〃銆佽嗗浘緔㈠紩銆瑙﹀彂鍣絳夊熀鏈鍔熻兘錛岃繖涓杞浠墮兘鑳藉緢濂藉吋瀹癸紝闄ゆや箣澶栵紝榪樻敮鎸丼QL鑴氭湰瀵煎叆瀵煎嚭銆佹暟鎹澶囦喚鎮㈠嶇瓑鍔熻兘錛屽逛簬鏃ュ父鏁版嵁搴撶$悊鏉ヨ達紝闈炲父涓嶉敊錛

榪欐槸涓涓鍩轟簬Java寮鍙戠殑鏁版嵁搴撶$悊杞浠訛紝鍏嶈垂銆佸紑婧愩佽法騫沖彴錛岀洰鍓嶆敮鎸丱racle銆丮ySQL銆丳ostgreSQL銆丼QL Server絳夊嶮鍑犵嶄富嫻佹暟鎹搴撳紑鍙戱紝寤哄簱寤鴻〃銆佽嗗浘緔㈠紩銆佽Е鍙戝櫒銆瀛樺偍榪囩▼絳夊熀鏈鍔熻兘 閮 鍙杞繪澗鏌ョ湅鍜岃捐★紝鏁版嵁搴撳煎叆瀵煎嚭銆佹暟鎹 鎮㈠ 澶囦喚絳夊姛鑳戒篃閮介潪甯鎬笉閿欙紝瀵逛簬鏃ュ父鏁版嵁搴撶$悊鍜岀淮鎶ゆ潵璇達紝鏄涓涓闈炲父涓嶉敊鐨勫伐鍏鳳細

榪欎篃鏄涓涓閫氱敤鐨勬暟鎹搴撶$悊杞浠訛紝Jetbrains鍏鍙哥殑浜у搧錛屾敮鎸佽法騫沖彴錛屼絾鍘熷垯涓婇拡瀵逛釜浜轟笉鍏嶈垂錛屽父瑙佺殑PostgreSQL銆丮ySQL銆丱racle絳夋暟鎹搴擄紝榪欎釜杞浠墮兘鑳藉緢濂芥敮鎸侊紝 鏁版嵁瀵煎叆瀵煎嚭錛 鎮㈠嶅囦喚 錛夈 鏅鴻兘浠g爜濉鍏呫佺増鏈 闆嗘垚 鎺у埗絳夊姛鑳介潪甯鎬笉閿欙紝瀵逛簬鏃ュ父鏁版嵁搴撶$悊鏉ヨ達紝涔熸槸涓涓涓嶉敊鐨勫伐鍏鳳細

姣忓ぉ甯哥敤寮鍙戝伐鍏鳳細

0.Git錛氬垎甯冨紡鐗堟湰鎺у埗緋葷粺錛

1.IntelliJ IDEA錛歫ava璇璦寮鍙戠殑闆嗘垚鐜澧冿紝IntelliJ鍦ㄤ笟鐣岃鍏璁や負鏈濂界殑java寮鍙戝伐鍏蜂箣涓錛

2.Sublime Text錛氫笉鍙鏄浠g爜緙栬緫鍣錛

3.Postman錛欻ttp璇鋒眰妯℃嫙宸ュ叿鍜屽姛鑳藉己澶х殑緗戦〉璋冭瘯宸ュ叿錛

4.DataGrip錛氭敮鎸佸嚑涔庢墍鏈変富嫻佺殑鍏崇郴鏁版嵁搴銆佸氬姛鑳界殑鏁版嵁搴撴搷浣滃伐鍏鳳紱

5.Vagrant錛氱敤浜庡壋寤哄拰閮ㄧ講鉶氭嫙鍖栧紑鍙戠幆澧冿紝閰嶅悎鉶氭嫙鏈浣跨敤錛

6.Gradle錛氳嚜鍔ㄥ寲鏋勫緩宸ュ叿錛

7.JIRA錛氶」鐩涓庝簨鍔¤窡韙宸ュ叿錛

8.iTerm2錛歁ac涓婄殑緇堢宸ュ叿錛

9.Jenkins錛鎸佺畫闆嗘垚宸ュ叿銆

鍋氫簡涓涓鍐欎唬鐮佺敤浜嗗嶮鍑犲勾鐨勪漢錛屽緢澶氱紪紼嬬殑涔犳儻宸茬粡鍏繪垚浜嗭紝鐜板湪灝辯綏鍒椾笅姣忓ぉ蹇呯敤鐨勮蔣浠訛細

鐩存帴瀹夎呯殑linux緋葷粺錛屽洜涓哄嚑涔庢墍鏈夌殑浠g爜閮芥槸鍦╨inux涓嬪畬鎴


java寮鍙戠幆澧


C/C++浠g爜緙栬緫宸ュ叿


linux涓嬭櫄鎷焪indows緋葷粺virtualBox


杞浠舵彁浜ゅ伐鍏穏it

涓嶅悓鐨勫紑鍙戣璦錛屾瘡澶╄佺敤鍒扮殑杞浠跺彲鑳戒笉涓鏍楓

鎴戞槸寮鍙慾ava web鐨勶紝鐢佃剳瀹夎呬簡寰堝氬伐鍏鳳紝浣嗘槸璇存瘡澶╄佺敤鍒扮殑濂藉儚灝卞嚑涓銆


浣滀負紼嬪簭鍛樹嬌鐢ㄦ渶澶氱殑杞浠訛紝鑾榪囦簬緙栫▼寮鍙戞墍鐢ㄥ埌鐨勮蔣浠剁紪杈戝櫒錛屼絾鏄緙栬緫鍣ㄧ殑縐嶇被鏈夊緢澶氥傛垜浠闇瑕佸仛鍒扮殑鏄錛屾壘鍒頒綘鏈鍠滄㈢殑緙栬緫鍣ㄧ劧鍚庣啛緇冪殑浣跨敤瀹冦

鍚屾椂鎺屾彙甯歌佺殑涓浜蹇鎹烽敭鐨勬搷浣滄柟寮忥紝浠庤屾潵鎻愬崌鎴戜滑鐨宸ヤ綔鏁堢巼錛岃屼笉鏄浠ヨ蔣浠惰岃鴻蔣浠訛紝浠涔堥兘鍘繪帴瑙︿嬌鐢ㄣ傛瘯絝熻蔣浠舵槸宸ュ叿鏄甯鍔╂垜浠鎻愬崌寮鍙戞晥鐜囥


涓嬮潰鎴戝氨鍒椾婦鎴戜滑PHP緇忓父浣跨敤鐨勮蔣浠

IDE宸ュ叿綾昏蔣浠

榪欎竴綾繪槸寮鍙戣蔣浠剁紪鍐欎唬鐮佺敤鐨勩傝繖涓綾葷殑杞浠墮潪甯稿氾紝鎴戝氨鎺ㄨ崘涓涓緇忓父浣跨敤鐨凱HPStorm錛屽洜涓哄お澶氱殑璇濆ぇ瀹朵篃鐢ㄤ笉鍒幫紝涔熸病鏈夐偅涔堝氱殑綺懼姏鍘葷啛緇冩瘡涓涓緙栬緫鍣ㄣ


PHPStorm鏄 JetBrains 鍏鍙稿紑鍙戠殑涓嬈懼晢涓氱殑 PHP 闆嗘垚寮鍙戝伐鍏鳳紝鏃ㄥ湪鎻愰珮鐢ㄦ埛鏁堢巼錛屽彲娣卞埢鐞嗚В鐢ㄦ埛鐨勭紪鐮侊紝鎻愪緵鏅鴻兘浠g爜琛ュ叏錛屽揩閫熷艱埅浠ュ強鍗蟲椂閿欒媯鏌ャ傚彲浠ヨ存槸PHP寮鍙戠▼搴忓憳蹇呭囩殑紲炲櫒銆

甯哥敤蹇鎹烽敭濡備笅錛

1.澶嶅埗蹇鎹鋒柟寮

F5 澶嶅埗鏂囦歡/鏂囦歡澶

CTRL+C 澶嶅埗

CTRL+V 綺樿創

CTRL+X 鍓 鍒,鍒犻櫎琛

CTRL+D 澶嶅埗琛

CTRL+SHIFT+V 鍙浠ュ嶅埗澶氫釜鏂囨湰

2.鑷鍔ㄤ唬鐮

ALT+鍥炶濺 瀵煎叆鍖,鑷鍔ㄤ慨姝

CTRL+ALT+L 鏍煎紡鍖栦唬

鐮丆TRL+ALT+I 鑷鍔ㄧ緝榪

CTRL+ALT+O 浼樺寲瀵煎叆鐨勭被鍜屽寘

CTRL+SHIFT+SPACE 鍒囨崲紿楀彛

CTRL+SPACE絀烘牸 浠g爜鑷鍔ㄥ畬鎴愶紝浠g爜鎻愮ず,涓鑸涓庤緭鍏ユ硶鍐茬獊

CTRL+ALT+SPACE 綾 鍚嶆垨鎺ュ彛鍚嶆彁紺猴紙涓庣郴緇熷啿紿侊級

CTRL+P 鏂規硶鍙傛暟鎻愮ず錛屾樉紺洪粯璁ゅ弬鏁

CTRL+J 鑷鍔ㄤ唬鐮佹彁紺猴紝鑷鍔ㄨˉ鍏

CTRL+ALT+T 鎶婇変腑鐨勪唬鐮佹斁鍦 TRY{} IF{} ELSE{} 閲孉LT+INSERT 鐢熸垚浠g爜(濡侴ET,SET鏂規硶,鏋勯犲嚱鏁絳)

3.榪愯

Alt + Shift + F10 閫夋嫨鐨勯厤緗鍜岃繍琛

Alt + Shift + F9 閫夋嫨閰嶇疆鍜岃皟璇

Shift + F10 榪愯

Shift + F9璋冭瘯

Ctrl + Shift + F10榪愯岃寖鍥村唴閰嶇疆緙栬緫鍣

Ctrl + Shift + X榪愯屽懡浠よ

4.鍏朵粬蹇鎹鋒柟寮

CTRL+Z 鍊掗(浠g爜鍚庢倲)

CTRL+SHIFT+Z 鍚戝墠

CTRL+H 鏄 紺虹被緇撴瀯鍥

Ctrl +F12 鏂囦歡緇撴瀯寮瑰嚭

CTRL+O 欖旀湳鏂規硶

CTRL+/ 娉ㄩ噴//鍙栨秷娉ㄩ噴

CTRL+SHIFT+/ 娉ㄩ噴/*...*/

ctrl + '.': 鎶樺彔閫変腑鐨勪唬鐮佺殑浠g爜

ALT+ / 鍒囨崲浠g爜瑙嗗浘錛屾爣絳懼垏鎹

5.鍏朵粬蹇鎹鋒柟寮

CTRL+Z 鍊掗(浠g爜鍚庢倲)

CTRL+SHIFT+Z 鍚戝墠

CTRL+H 鏄 紺虹被緇撴瀯鍥

Ctrl +F12 鏂囦歡緇撴瀯寮瑰嚭

CTRL+O 欖旀湳鏂規硶CTRL+/ 娉ㄩ噴//鍙栨秷娉ㄩ噴

CTRL+SHIFT+/ 娉ㄩ噴/*...*/

ctrl + '.': 鎶樺彔閫変腑鐨勪唬鐮佺殑浠g爜

ALT+ / 鍒囨崲浠g爜瑙嗗浘錛

鏁版嵁搴撶浉鍏沖父鐢ㄧ殑宸ュ叿

Navicat for MySQL鏄綆$悊鏁版嵁搴撶殑鎿嶄綔宸ュ叿錛岄兘鏄鍙浠ヨ繛鎺ヨ繙紼嬬殑浜戞暟鎹搴撱傛柟渚跨畝鍖栧紑鍙戱紝榪樺彲浠ユ墜鍔ㄥ囦喚銆佸彲瑙嗗寲鐨剆ql鍒嗘瀽銆

甯哥敤蹇鎹烽敭錛

ctrl+q 鎵撳紑鏌ヨ㈢獥鍙

ctrl+/ 娉ㄩ噴sql璇鍙

ctrl+shift +/ 瑙i櫎娉ㄩ噴

ctrl+r 榪愯屾煡璇㈢獥鍙g殑sql璇鍙

ctrl+shift+r 鍙榪愯岄変腑鐨剆ql璇鍙

F6 鎵撳紑涓涓猰ysql鍛戒護琛岀獥鍙

ctrl+d 錛1錛夛細鏌ョ湅琛ㄧ粨鏋勮︽儏錛屽寘鎷緔㈠紩 瑙﹀彂鍣錛屽瓨鍌ㄨ繃紼嬶紝澶栭敭錛屽敮涓閿;錛2錛夛細澶嶅埗涓琛

ctrl+l 鍒犻櫎涓琛

ctrl+n 鎵撳紑涓涓鏂扮殑鏌ヨ㈢獥鍙

ctrl+w 鍏抽棴涓涓鏌ヨ㈢獥鍙

ctrl+tab 澶氱獥鍙e垏鎹

鏈嶅姟鍣ㄨ繛鎺ヨ蔣浠

XShell6鏄闈炲父寮哄ぇ鐨凷SH榪滅▼緇堢瀹㈡埛絝錛屽府鍔╂垜浠榪炴帴榪滅▼鐨凩inux鏈嶅姟鍣ㄦ潵榪涜屾搷浣溿

綺樿創錛歋hift+Insert

鍘嗗彶 鍛戒護緙栬緫ctrl + p 榪斿洖涓婁竴嬈¤緭鍏ュ懡浠ゅ瓧絎

alt + > 榪斿洖涓婁竴嬈℃墽琛屽懡浠

鍏跺畠

ctrl + s 閿佷綇緇堢

ctrl + q 瑙i攣緇堢

ctrl + l 娓呭睆鐩稿綋浜庡懡浠clear

Tab閿錛屽揩閫熻ˉ鍏ㄥ懡浠

杞婚噺綰ф枃鏈緙栬緫鍣

Notepad++銆傝繖涓寰堣交閲忥紝鎵撳紑涓涓嬫枃鏈闈炲父鐨勬柟渚褲

甯哥敤蹇鎹烽敭

Ctrl+C 澶嶅埗

Ctrl+X 鍓鍒

Ctrl+V 綺樿創

Ctrl+Z 鎾ゆ秷

Ctrl+Y 鎮㈠

Ctrl+A 鍏ㄩ

Ctrl+F 閿鏌ユ壘瀵硅瘽妗嗗惎鍔

Ctrl+H 鏌ユ壘/鏇挎崲瀵硅瘽妗

Ctrl+D 澶嶅埗騫剁矘璐村綋琛

Ctrl+F2 鍒囨崲涔︾

F2 杞鍒頒笅涓涓涔︾維hift+F2 杞鍒頒笂涓涓涔︾

F11 鍏ㄥ睆妯″紡


緇間笂鎵榪幫紝杞浠跺彧鏄涓涓宸ュ叿錛屾垜浠闇瑕佹壘鍒拌嚜宸卞枩嬈浣跨敤鐨勶紝鐒跺悗鐔熺粌涓浜涘父鐢ㄧ殑蹇鎹鋒柟寮忓嵆鍙錛岃屽苟涓嶆槸鍦ㄤ簬鏁伴噺澶氥

鍓嶇

visual studio code

鍚庣錛

pycharm

IDEA

瀹夊崜錛

android studio

嫻忚堝櫒錛

璋鋒瓕

鐏鐙

鏁版嵁搴撶$悊錛

navicat


榪滅閾炬帴錛

fileZilla

xshell

electerm錛坢ac涓婁嬌鐢錛


嫻佺▼鍥捐捐★細

xmind

processOn

絎旇幫細

涓虹煡絎旇幫紙浠樿垂涓騫60錛

鏈夐亾浜戠瑪璁

鉶氭嫙鏈猴紙瀹瑰櫒錛

VMware Fusion錛坢ac涓婏級

docker


鍏朵粬錛

postman

jmeter

浣滀負涓涓12騫村紑鍙戠粡楠岀殑鍓嶇紼嬪簭鍛橈紝鎴戞潵鑱婅亰姣忓ぉ蹇呯敤鐨勫嚑涓杞浠躲

鍐欎唬鐮佽嚜鐒剁諱笉寮 緙栬緫鍣 銆傜洰鍓嶆垜涓昏佷嬌鐢ㄧ殑鏄寰杞鐨 Visual Studio Code 銆俈S Code姣旇緝杞婚噺錛屽姛鑳借凍澶熷簲浠樻棩甯稿紑鍙戞墍闇錛岃法騫沖彴錛岃屼笖瀹屽叏鍏嶈垂 銆傚洜涓轟箣鍓嶉暱鏈熶嬌鐢╒isual Studio鍦╓indows騫沖彴涓婂仛寮鍙戱紝鍚庢潵鎶鏈鏍堝彉鍖栵紝緇忓父闇瑕佸湪Linux鍜孧acOS涓婂仛寮鍙戱紝VS Code灝辨垚浜嗘垜欏虹悊鎴愮珷鐨勯夋嫨銆傚悗鏉ュ共鑴嗗湪Windows涓婁篃鐢╒S Code浜嗐傜洰鍓嶆暣涓鍥㈤槦閮藉凡緇忚玍S Code鍦堢矇浜嗐傚叾瀹冪被浼肩殑濡係ublime Text(闇瑕佷粯璐)鍜孉tom涔熸湁涓嶅皯浜轟嬌鐢ㄣ

鍥犱負鏄鍥㈤槦寮鍙戱紝 婧愪唬鐮佺$悊宸ュ叿 鑷鐒跺繀涓嶅彲灝戱紝鑰 git 鏄鐩鍓嶆渶鐑闂ㄧ殑涓涓銆傛垜浠鍏鍙鎬篃涓嶄緥澶栵紝鍑犲勾鍓嶄粠Perforce榪佺Щ鍒頒簡 GitHub浼佷笟鐗 (鍜屽叕浼楃増鏈琔I瀹屽叏鐩稿悓)銆傚鉤鏃剁殑浠g爜瀹℃煡涔熼兘鏄鍦℅itHub浼佷笟鐗堜笂瀹屾垚鐨勶紝涓嶅啀浣跨敤鍗曠嫭鐨勪唬鐮佸℃煡宸ュ叿銆傛湁浜涗笉涔犳儻浣跨敤鍛戒護琛屾柟寮忕殑鍚屼簨浣跨敤 SourceTree 瀹屾垚鏃ュ父鐨勪唬鐮佸垎鏀綆$悊鍜屾彁浜わ紝鑰屾垜鍒欐瘮杈冪儹琛蜂簬鍛戒護琛屾柟寮忋俈S Code涔熸彁渚涗簡姣旇緝瀹屽杽鐨刧it闆嗘垚錛屼絾鍥犱負涔犳儻鐨勫師鍥狅紝闄や簡鐩磋傛瘮杈冧笉鍚屼唬鐮佺増鏈鐨勫樊寮傦紝鎴戜竴鑸涔熶笉鐢╒S Code鎵ц実it鎿嶄綔銆

浣滀負涓涓猈eb鍓嶇錛 嫻忚堝櫒鍙婂墠絝璋冭瘯宸ュ叿 鑷鐒朵笉鍙鎴栫己錛 Google Chrome + Developer Tools (F12) 鑷鐒舵槸棣栭夈備嬌鐢―eveloper Tools錛屽彲浠ュ笿avaScript榪涜岃皟璇曪紝鐩戞帶HTTP璇鋒眰/鍝嶅簲錛屽垎鏋怌SS璁$畻闂棰樺拰JS鎬ц兘闂棰樸 Chrome涓嬭繕鏈夊緢澶氬姛鑳藉己澶х殑鎻掍歡錛屼釜浜烘瘮杈冨父鐢ㄧ殑鍖呮嫭React Developer Tools銆丳ostMan銆丳roxy SwitchOmega鍜孉dBlock銆傚綋鐒訛紝鍥犱負緇忓父闈㈠規祻瑙堝櫒鍏煎規ч棶棰橈紝Firefox銆両E銆丒dge銆丄pple Safari浠ュ強鍚勮嚜鐨凞eveloper Tools閮芥槸鍏嶄笉浜嗚佺敤鐨勩

鍥㈤槦鐩鍓嶄嬌鐢⊿crum妯″瀷錛岃嚜鐒墮渶瑕佷竴涓鍋 浠誨姟瑙勫垝鍜岃川閲忕$悊 鐨勫伐鍏楓傛垜浠閲囩敤浜 JIRA , 姣忓ぉ鐨勭珯浼(daily stanp meeting)閮戒細瀵箂crum鐪嬫澘(board)榪涜屾洿鏂般

閬囧埌鎶鏈闂棰橈紝鑷鐒跺厤涓嶄簡瑕佷笂緗戞煡鎵捐祫鏂欍 Google 鐨勪嬌鐢ㄩ戠巼闈炲父楂(闇瑕佺戝︿笂緗)銆傚ぇ閮ㄥ垎闂棰橀兘鑳藉湪 StackOveflow 涓婃壘鍒扮嚎緔錛屼絾鏈夋椂鍊欎篃涓嶅緱涓嶈窇鍒板ぇ鍚嶉紟榧庣殑鍚屾т氦鍙嬬綉絝 GitHub 涓婄湅婧愮爜銆 MDN 錛圡ozilla Developer Network錛夊逛簬鍓嶇寮鍙戜篃鏄涓嶅彲鎴栫己(姝ゅ勯剻瑙嗕竴涓媤3cschool錛屼笂闈㈠埌澶勬槸閿欒鐭ヨ瘑)銆

鍏跺畠濡俷ode.js/npm銆乨ocker絳夛紝鍥犱負鍜屽叿浣撶殑鎶鏈鏍堢浉鍏籌紝灝變笉鍏蜂綋灞曞紑璁蹭簡銆

浣滀負涓涓寮鍙戜漢鍛橈紝浣犳瘡澶╀嬌鐢ㄤ粈涔堣蔣浠跺憿錛屾㈣繋璇磋寸湅銆

灝界℃垜鏄鍚庣鍑鴻韓鐨勶紝涓嶈繃涔熺粡甯稿啓鍓嶇浠g爜錛岀敋鑷寵繕鐢–#/C++鍙備笌榪囦竴浜涘㈡埛絝寮鍙戱紝鑷璁や負涔熺畻鏄涓涓猈eb鍏ㄦ爤宸ョ▼甯堛傞殢鐫鍓嶇鎶鏈鐨勪笉鏂榪涙ワ紝鐜板湪鐨勫墠絝宸茬粡涓嶅啀鏄鍐欏啓欏甸潰榪欎箞綆鍗曚簡錛屽緢澶氶昏緫鍦ㄥ墠絝灝卞啓浜嗭紝鎴戝緩璁姣忎竴涓鍑鴻壊鐨勫紑鍙戣呭簲璇ュ敖鍙鑳藉瑰墠鍚庣閮借兘鏈変笉閿欑殑鎺屾彙銆

浠婂ぉ緇欏ぇ瀹舵帹鑽愪竴浜涙垜璁や負鍓嶇鍜屽悗絝寮鍙戦兘闇瑕佺粡甯哥敤鍒扮殑涓浜涜蔣浠訛紝榪欓噷闈㈠寘鎷浜嗘煡璇㈣祫鏂欏伐鍏楓佸師鍨嬪伐鍏楓佹枃鏈緙栬緫鍣ㄣ佺増鏈綆$悊宸ュ叿銆

鍘熷瀷宸ュ叿

涓嶇″墠絝榪樻槸鍚庣錛屽挨鍏舵槸鍓嶇紼嬪簭鍛橈紝鍦ㄨ窡浜у搧緇忓巻娌熼氫箣鍚庤偗瀹氫細瑕佹煡鐪嬪師鍨嬬殑錛屾柟渚胯嚜宸卞湪寮鍙戣繃紼嬩腑浣跨敤錛屽熀鏈涓婂ぇ鍏鍙歌緭鍑虹殑鍘熷瀷閮芥瘮杈冭勮寖錛岄櫎闈炰綘閬囧埌寮犲皬榫欒繖縐嶇駭鍒鐨勫ぇ紲烇紝鍝ヤ滑鍎跨洿鎺ョ洴鐫浣犲仛浜嗐

鐩鍓嶄富嫻佺殑鍘熷瀷宸ュ叿涓昏佹湁Axure銆丮ockPlus銆佸ⅷ鍒絳夛紝鍏朵腑Axure渚濈劧鏄搴旂敤鏈涓哄箍娉涚殑鍘熷瀷宸ュ叿錛屽ぇ澶氭暟寮鍙戣呬篃閮藉簲璇ョ敤鏉ョ湅鍘熷瀷銆

鏂囨湰緙栬緫鍣

涓嶇℃槸鍓嶇榪樻槸鍚庣紼嬪簭鍛橈紝褰撶劧鍓嶇紼嬪簭鍛樺氨涓嶈翠簡錛屽湪WebStorm鍑虹幇涔嬪墠錛屾病鏈変竴嬈劇湡姝e彲浠ュ彨鍋欼DE鐨勫墠絝寮鍙戝伐鍏鳳紝閭d箞鍩烘湰涓婃枃鏈緙栬緫鍣ㄥ氨鏄鍓嶇紼嬪簭鍛樻渶閲嶈佺殑緙栫▼宸ュ叿銆傚悓鏍峰悗絝紼嬪簭鍛樺嵆浣誇笉闇瑕佸啓鍓嶇浠g爜錛屾枃鏈緙栬緫鍣ㄤ篃鏄蹇呭囩殑錛屾偍涓嶉渶瑕佹瘡嬈$湅浠g爜閮芥墦寮搴炲ぇ鐨勯泦鎴愬紑鍙戠幆澧冿紝鍍廔DEA榪欑嶆瘮杈冭楄垂璧勬簮鐨勶紝騫蟲椂鏌ョ湅浠g爜鍟ョ殑瀹屽叏娌℃湁蹇呰侊紝浣曞喌浣犺繕緇忓父瑕佺湅涓浜涘墠絝浠g爜銆

褰撶劧浣犳瘮杈冧範鎯疞inux/Unix涓嬪紑鍙戱紝Emacs/Vim鍙鑳芥槸浣犵敤寰楁瘮杈冨氱殑鏂囨湰緙栬緫鍣錛岃繕鏈塙ltraEdit銆丼ublime Text銆丒ditPlus銆丄tom榪欎簺鑰佺墝鐨勬枃鏈緙栬緫鍣錛屼笉榪囩幇鍦ㄦ垜瑙夊緱姣忎釜紼嬪簭鍛橀兘搴旇ヤ笅杞戒竴涓猇isual Studio Code錛屾敮鎸佺殑璇璦姣旇緝澶氾紝鑰屼笖鎻掍歡闈炲父涓板瘜錛屾槸寰杞瀹樻柟鏀鎸佺殑寮鍙戣呭伐鍏鳳紝寮婧愬厤璐硅屼笖棰滃奸潪甯擱珮銆

鏌ヨ㈣祫鏂欍佺増鏈綆$悊宸ュ叿

涓嶇敤澶氳達紝姣忎釜紼嬪簭鍛橀兘瑕佸︿細寰堝ソ鐨勪嬌鐢℅oogle銆丼tack Overflow涓や釜宸ュ叿錛屽彲浠ヨ翠綘鏃ュ父寮鍙戝綋涓鍙鑳介亣鍒扮殑闂棰橈紝閫氳繃榪欎袱涓宸ュ叿浣犲叏閮借兘鎵懼埌瑙e喅鏂規堛

鍙﹀栦竴涓鏄疍ash鏂囨。綆$悊宸ュ叿錛孌ash鏄涓涓闈炲父濂界殑寮鍙戣呭府鍔╂枃妗e伐鍏鳳紝榪欎釜宸ュ叿鐨勫ソ澶勬槸緇欐墍鏈夌殑寮鍙戞枃妗e仛浜嗕竴涓鏁村悎錛孋/C++銆丣ava銆丳HP銆丳ython銆丩atex銆丒macs Lisp銆丠askell銆丣avaScript銆丟o璇璦絳夋枃妗i兘鑳藉熷湪榪欎釜宸ュ叿褰撲腑涓嬭澆浣跨敤銆

鏈鍚庝竴涓灝辨槸鐗堟湰綆$悊浜嗭紝SVN鍜孏it渚濈劧鏄鐩鍓嶄嬌鐢ㄦ渶涓哄箍娉涚殑鐗堟湰綆$悊宸ュ叿錛屼笉榪囧氨浣跨敤鏉ヨ存垜榪樻槸鎺ㄨ崘Git鐗堟湰鎺у埗緋葷粺錛屽彲浠ヨ磋繖涓鏃朵唬Git灝辨槸鏈濂界殑鐗堟湰綆$悊宸ュ叿浜嗭紝灝ゅ叾鏄寮婧愭椂浠c佷簰鑱旂綉鏃朵唬錛孏it宸茬粡鎴愪負浜嗘渶閲嶈佺殑鐗堟湰綆$悊宸ュ叿錛屼笉綆℃槸鍛戒護琛岀$悊榪樻槸浣跨敤Github絳夊㈡埛絝宸ュ叿錛屽牚縐板畬緹庛

鍏ヨ屽嶮涓騫達紝鐜板湪涓昏佸仛涓浜涚$悊鍜屾灦鏋勬柟闈㈢殑宸ヤ綔錛屼篃浼氬仛涓浜汣oding錛屼富瑕佹槸涓浜涙柊鎶鏈鐨勭爺絀跺拰鈥滆俯鍧戔濄

緙栬緫鍣

棣栧厛鏄疎ditPlus錛岃繖鏄涓涓鏂囨湰緙栬緫鍣ㄣ傛渶甯哥敤鐨勪袱涓鍔熻兘錛氭e垯琛ㄨ揪寮忔煡璇㈠拰鏂囦歡澶瑰唴鎵鏈夋枃浠跺唴瀹規悳緔銆

騫蟲椂緇忓父闇瑕佺湅涓浜涚郴緇熸棩蹇楋紝鐢氳嚦瑕佷粠濂藉嚑澶╁嚑鍗佷釜鏃ュ織鏂囦歡涓鎵懼埌鍐呭癸紝榪欎釜杞浠跺緢濂界敤銆傦紙鍘熻皡鎴戜滑娌℃湁涓婃棩蹇楀鉤鍙幫級

鐒跺悗灝辨槸IDE鍟︼紝鎴戣繕鏄鍠滄㈢敤Eclipse錛屾湁鏃跺欎細鐢⊿TS(Spring Tool Suite)錛屽畠涔熸槸涓涓琚鍖呰呰繃鐨凟clipse錛屾柟渚垮仛涓浜汼pring妗嗘灦鐨勭爺絀躲



鏁版嵁搴撳伐鍏

涓涓鏄疍bVisualizer錛屽嚒鏄鍏鋒湁JDBC鏁版嵁搴撴帴鍙g殑鏁版嵁搴撻兘鍙浠ョ$悊錛屼粈涔堟暟鎹搴撻兘鑳借繛銆

榪樻湁涓涓鏄瘲QLyog錛岃繖鏄涓涓蹇閫熻岀畝媧佺殑鍥懼艦鍖栫$悊MYSQL鏁版嵁搴撶殑宸ュ叿錛屾垜鍙鐢ㄩ噷闈涓涓鍔熻兘錛屽氨鏄鏁版嵁鐨勫煎叆瀵煎嚭錛屾晥鐜囬潪甯擱珮錛



鎺ュ彛嫻嬭瘯宸ュ叿

澶ч儴鍒嗛」鐩鍙瀵瑰栨彁渚涙帴鍙f湇鍔★紝鎵浠ユ帴鍙f祴璇曞伐鍏峰皯涓嶄簡錛屾垜涓鑸浣跨敤SoapUI錛學ebService/Rest閮藉彲浠ヨ繘琛屾祴璇曘



鍏朵粬

姣忓ぉ鑲瀹氫細鐢ㄧ殑鑲瀹氫笉姝涓婇潰鍑犱釜錛岃繕鏈夌増鏈鎺у埗宸ュ叿svn鍜実it錛岄兘浼氱敤鍒版槸鍥犱負鍗曚綅svn鐜板湪寮濮嬪線git榪佺Щ銆

鍥犱負鐢ㄧ殑Scrum鏁忔嵎寮鍙戞祦紼嬶紝鎵浠JIRA銆丼onar銆丗isheye榪欎簺涔熸槸閮戒細鐢ㄥ埌鐨勩

Maven涔熶笉鐢ㄨ翠簡錛屽嚑涓欏圭洰鍩烘湰閮芥槸鍩轟簬Maven鏋勫緩鐨勩

蹇呯敤鐨勫熀鏈灝辨槸榪欎簺錛屽彧瑕佺數鑴戝紑鐫錛岃繖鍑犱釜杞浠跺熀鏈閮芥槸鎵撳紑鐘舵併

熱點內容
linux分割行 發布:2024-11-24 22:11:02 瀏覽:576
獲取ftp文件 發布:2024-11-24 21:54:20 瀏覽:520
資源平滑演算法 發布:2024-11-24 21:54:18 瀏覽:57
vs和vc編譯器哪個好使 發布:2024-11-24 21:54:07 瀏覽:805
愛課程適用於什麼安卓系統 發布:2024-11-24 21:54:02 瀏覽:38
51單片機編譯 發布:2024-11-24 21:50:05 瀏覽:367
android常用的工具類 發布:2024-11-24 21:42:25 瀏覽:48
用戶管理源碼 發布:2024-11-24 21:29:36 瀏覽:677
監控怎麼配置路由器 發布:2024-11-24 21:29:27 瀏覽:455
小型編譯器的實現 發布:2024-11-24 21:27:48 瀏覽:999