1. 程式人生 > >「女程式設計師」JAVA面試經驗(3年左右工作經驗)

「女程式設計師」JAVA面試經驗(3年左右工作經驗)

123211.png

 前言

致那些迷茫的JAVA面試者(特別是南京的1-4年經驗),致那些奮發的年輕人,致自己。寫這篇博文主要也是對我的成長道路的記錄,面試受挫後的反思,及對自己的勉勵。

本人介紹:3年多經驗的程式設計師,座標南京。

背景:因水平有限,及對部分面試問題記憶及理解有限,可能有些問題並不能表達準確。掌握技術有限,學習主動性一般(雖遇到問題善於思考鑽研,但如果沒有遇到問題比較放縱自己...被自由,輕鬆,安逸迷失心智),以及原公司專案背景因素,基本不需要太多新的技術框架支援,更沒有涉及訊息中介軟體,高併發分散式等等相關較主流技術,技術體系相對較老。綜上導致我對很多新技術並不是太瞭解。

面試經驗背景:基本公司都是按簡歷掌握技術來問(當然也有超綱不按套路出牌的),如果你簡歷掌握技術什麼都不寫,也有可能接到面試邀請,那麼面試官問題可能就比較廣了,對面試者不利。掌握技術我寫了java基礎:多執行緒,io/nio,jvm,集合底層,tcp/ip協議,socket,websocket。spring,springmvc,xml,設計模式,eclipse plugin開發,資料庫,前端(基本沒有什麼人問,面的後端開發,也許熟悉前端也是加分項)瞭解netty、mybatis、redis(實際就是看了一點點).

專案經驗背景:

  • 1.原公司我所在的部門做的是一款大型工具,web專案。專案週期很長很長,至今還在做,具體不細說,技術上就用了上述我寫的部分技術(未涉及redis、netty、mybatis、springmvc),作為專案經歷,該專案競爭力不強。

  • 2.朋友找我做的私活專案,只接觸了一個星期左右,朋友就跟接活人鬧崩了,然後不了了之。但是我還是把專案寫進專案經驗了(投遞的時候寫,自帶的紙質簡歷就把它去掉,以防面試官問到我一臉懵逼...機智如我,當然也有公司不需要你的自帶簡歷,那就沒辦法,他問到的話我就忽悠,坦白)。實際就是個特別小的專案,用到的技術springmvc,mybatis,redis,activemq,阿里雲物件儲存等等。這個專案我只稍微瞭解了一點點springmvc,mybatis,redis最最基本的用法,可以說沒啥用。

面試經歷(具體錄用薪資我就不說明了,只說我對薪資+公司福利滿意度。

面試中專案介紹必定要說的,以及專案中的細節問題,這些不細說了。只說技術問題)

按時間先後排序(時間越遠遺忘的問題可能越多。很多重複的,將就看吧)

1.小公司

名字忘了。時間久遠,只記得有多執行緒,執行緒池拒絕策略,jvm調優,tomcat調優,訊息中介軟體,分散式,叢集,zookeeper,微服務。sql左連線右連線區別,儲存過程。linux。基本全程懵逼,(因為第一次面試,簡歷技術什麼都沒寫,這貨敞開了問)。最後竟然通知我面試通過。

  • 難度-難

  • 公司環境-不滿意

  • 薪資福利-不滿意

  • 工作內容-不滿意(忽悠我剛開始寫邏輯程式碼,以後可能會做微服務,大資料,基本不加班,我是不信的)。

2.軟通動力(華為外包)

stringbuffer和stringbuild區別,stringbuild執行緒不安全體現在哪,你對執行緒安不安全怎麼理解(這個問題發揮空間很大,關鍵詞:全域性變數、JVM執行時資料區、可見性、原子性、鎖、甚至可以說到多核cpu硬體層面(我是不會的)),arraylist和linkedlist區別,spring ioc,aop作用,原理。springmvc執行流程(這種問題最扯淡),hashmap原理(問的很淺,底層結構,答陣列+連結串列/紅黑樹。他就沒問了),hashmap,hashtable,concurrentHashMap(大致基本說下,他就不問了),hashmap遍歷。對大資料有關技術瞭解多少(答:瞭解一點,聽過hadoop)。其它忘了,總體難度不大。寫程式碼:字串分割排序(split+冒泡))。

  • 難度-簡單

  • 薪資福利- 一般

  • 工作內容-不滿意(外包你懂的。有關大資料方面的(這點還可以),更多的是資料清洗)

3.鴻信集團(電信子公司)

一個年紀比較大的面試官,像管理層人員,感覺技術水平有限。基本就問了專案,spring的理解,activemq,沒了。筆試,扯淡的筆試題,寫了一點走人了。公司整體給人的感覺比較自由鬆散,適合養老。感覺技術上沒有發展空間。

  • 面試建議-別去

4.蘇寧

我前後面了4次(因為住的地方就靠著蘇寧,沒事就順便去面試打發時間,4個部門,通過了3個)。寫一起。

蘇寧金服:問的專案業務,公司業務模組(無從下口),為什麼要用redis,相比於如memcached,mongodb有什麼優勢,mybatis,activemq。springmvc有什麼好處,為什麼要用它,springmvc和struts區別(都不會)...用過什麼資料庫,有沒有做過資料庫優化,什麼情況下要用到索引,好處是什麼,哪些欄位適合建立索引,mysql索引底層資料結構瞭解嗎,索引什麼情況下會失效,聯合索引abc只用了a欄位,索引是否會生效。什麼情況下要用到多執行緒,為什麼要用,好處。啟動多個執行緒,如何知道他們都執行完畢了。jquery要想取某個節點中的第幾個元素怎麼寫,具體哪個方法((我看你是閒著蛋疼)答:元素選擇器,find,eq)。 總體回答的很不好,感覺他就盯著我寫的瞭解程度的技術問,有為難我降低我薪資要求的意思。最後通知面試通過(也許是真的缺人,也許是我吹牛比較6,畫了專案流程圖給他)

  • 難度-對於我來說難(其實一般,主要是我實在不太會他問的框架技術)

  • 薪資福利- 一般(面的不太好的地方我是不太好意思去的,感覺進去有種擡不起頭的感覺)

蘇寧易購網站購物車消費者業務線:string為什麼是不可變的,重寫過載,object類有哪些方法,sleep和wait區別,實現執行緒的方式,run,start區別,執行緒有幾種狀態,synchronize實現原理(這個問題可以說的很多,建議大家往深了看,往深了說,以震懾面試官),與lock區別,還知道哪些鎖,說說自旋鎖。執行緒池,執行緒池等待佇列,拒絕策略,死鎖產生原因。為什麼java可以一次編譯,到處執行。事務特性,索引失效,mysql有哪些函式。http和https區別,get和post區別,springbean是單例嗎,spring原始碼看過嗎,其中的單例bean是怎麼實現的。redis有支援哪些資料結構。servlet怎麼取前端引數。(兩個面試官,感覺面試官水平有限,一直在想問什麼問題,越問越沒難度)設計個洗牌演算法。線上購物車需要有個標誌唯一id,有什麼方法實現這個id(uuid,參考jdk中random實現原理,取隨機種子)

  • 難度-一般

  • 薪資福利- 一般

大資料部門:抽象類介面區別,介面中可以定義成員變數嗎,預設是什麼型別的變數(public static final),介面中方法許可權可以是private嗎,介面是否可以寫具體實現(答:jdk8開始可以)重寫過載區別,執行緒的實現方式(我已經感覺到這個部門有多缺人了)。sql交併集,事務隔離級別。能呼叫另一個類的私有方法嗎,怎麼做。如果執行緒池執行shutdown或shutdownNow,執行緒池中執行緒會中斷嗎,會出現什麼異常,catch處理中該寫些什麼。用過哪些concurrent包下的類,說說原子類,cas操作可能會存在什麼問題。jdk中有哪些設計模式的運用,專案中用了哪些設計模式,treemap中compartor用了什麼設計模式,有哪些單例模式的實現方式,springbean是單例嗎。如果想要在某些自己指定的某些方法前後列印日誌怎麼實現(答:自定義註解,問:具體怎麼做,答:spring aop的實現思路...),註解實現原理。

  • 面試難度-一般

  • 薪資福利- 較滿意

蘇寧物流部:蘇寧最難的一次面試經歷,也許是晚上面試,時間充分,安靜,面試官比較好發揮,我全程半懵逼,面試官是中年人,看氣勢最起碼經理級別。

servlet和jsp區別,如果沒有servlet,jsp怎麼跟後端互動(大概是這個意思,沒聽太懂,一臉懵逼)。springmvc怎麼取前端資料,springmvc模式下,如果沒有註解怎麼取前端引數(答:servlet,requset.getParameter。他問,具體在哪怎麼用,也沒聽太懂,懵逼)。搭建springmvc專案步驟。spirngmvc controller中定義全域性hashmap,它是否是執行緒安全的,為什麼。

Io nio區別,nio原理。netty用的多嗎。答,不多。

專案中用哪種方式解析xml的 答:jaxb,dom4j,digester。問:jaxp是什麼。 答:是jaxb,巴拉巴拉... 問:哦哦,挺好用的

servlet生命週期。tomcat在初始化中做了什麼事(答:啟動socket服務端...問:沒了嗎?答:... 很明顯該回答的還有很多,想了解的應該是我對tomcat的理解程度,以及是否看過tomcat原始碼)。是否用過Nginx。過濾器和攔截器的區別。

專案中有用到快取嗎,redis有提供了哪些儲存資料結構,redis持久化。

說說java記憶體模型,新生代老年代演算法,你說的新生代老年代屬於堆還是棧,還知道哪些gc演算法,建立大物件也是在新生代分配嗎,(答:直接晉升進入老年代,問:具體多大物件,答:超過eden區大小,問:你是否確定,頓時虛了,後來回去查閱過,我回答的不對,jvm這裡的看點很多,涉及到優化)。新生代的演算法,說說minor gc,minor gc觸發條件。老年代用了什麼演算法,說說標記整理演算法,full gc是否真正回收了廢棄物件。有哪些gc策略。你覺得你的專案中如果需要jvm調優你會注重哪個分帶的調優,或者說更注重哪種gc調優,為什麼,具體怎麼做(懵逼,隨便吹了下。問:你確定嗎? 頓時又虛了)。

線上系統每天會收到20萬級的資料,一個月會有百萬條,並且還會遞增。你如何設計資料庫(答:分庫分表,建立索引,問:分庫分表對的,還有哪些點,分庫分表按什麼規則分)。如果查詢欄位不是分庫分表的規則欄位,怎麼辦(他說沒事,想到什麼說什麼,也許你的思路會比我們的更好,你說說看)。沉默許久,不會,沒接觸過。(後來查了該問題:分庫分表多維度查詢)問:oracle分頁的sql關鍵字是什麼 答:limit 問:不對吧,那是mysql的 答:啊?好吧 問:也許是limit,我也記不清了,可能你說的是對的,回去我得看看。(面試官還算和藹,其實是rownum)

  • 面試難度- 難

蘇寧結束,總結:蘇寧大部分部門都非常缺程式設計師,招人要求相比於其它大點公司要低一些,都會問的同樣的問題:能否接受蘇寧的加班(部門加班情況不一,按我面試部門瞭解(加班從多到少:金服->物流/購物車->大資料部門),總體加班很多) ,蘇寧的軟體電商工作在外的名聲總體不太好,加班嚴重,福利一般,晉升難,聽說不是太注重員工培養。

5.烽火科技

寫筆試題,筆試題一看就是用心出的(基礎題偏多,也有問答題:線上系統出現故障,怎麼排查。以及一些程式設計題:用jdk自帶包實現抓取指定網頁元素/內容(不會,後來查了,程式碼如下:),兩個執行緒間隔輸出字元,資料夾中查詢指定型別檔案)。

 
static void doGet() {  try {

    String urlStr = "https://bbs.csdn.net";

    URL url = new URL(urlStr);

    HttpURLConnection connection = (HttpURLConnection) url.openConnection();

    connection.setDoOutput(true);

    connection.setDoInput(true);

    connection.setRequestMethod("GET");

    connection.setUseCaches(false);

    connection.setInstanceFollowRedirects(false);

    connection.connect();

    BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));

    String ss ,total="";    while ((ss = reader.readLine()) != null) {

      total += ss;

      total+="\n";

    }

    System.out.println("total=" + total);

    reader.close();

    connection.disconnect();

  } catch (Exception e) {

    e.printStackTrace();

  }

}

面試開始:1面。3個技術人員依次提問,jdbc連線步驟,statement和prepareStatement區別,專案中資料庫事務控制你們是怎麼做的。TreeMap,TreeSet,HashSet實現原理(之前只看了hashmap(別人都問hashmap,偏偏他就不問,這公司有套路的)其它回答的不好。這次面試經驗很重要-所有集合實現都得認真看一遍),dom4j怎麼取節點。為什麼重寫equals方法最好也得重寫hashcode。treeMap中元素怎麼排序,如果沒實現comparator介面會怎麼樣。序列化作用。

中途hr跟我聊了聊公司福利,公司制度。

2面,也是3個人,專案經理(從言談中看得出來技術沉澱很不錯)+HR+不知道什麼人(女,基本沒說話)。都是專案經理問。自我介紹,專案介紹,專案細節(問的很細緻)。專案中有用到多執行緒,執行緒池嗎,怎麼用的。說說你對hash的理解。hashSet是怎麼去重的。你知道哪些map,set,說說他們實現原理。紅黑樹,二叉樹。sql優化。linux。socket長連線短連線,連接出現異常你是怎麼處理的。定時器。如果cpu有8個核心,那麼程式啟動多少個執行緒相對合適(懵逼)。最後還是通過了。

  • 難度-稍難(其實還好,是我準備不充分)

  • 薪資福利 - 不滿意

6.擎天科技

  • 最扯淡的一次面試。浪費我時間

  • 面試建議-別去

7.亞信科技(亞信安全)

寫面試題(難度一般,sql,springmvc,程式設計)。Integer快取-128-127物件相不相等問題,其它都是上面提到的問題,不細說了(感覺面試官水平有限),問題基本都完整的回答出來了。跟面試官也談了很久,問了他們現在具體做什麼,用了什麼技術,這家公司所用技術挺老(估計還沒我原公司用到的技術多),貌似也是在做工具,非線上系統。還誇讚了我在原公司的做的專案(所有面試中唯一誇讚的)。

因為這次面試很成功,而且此公司環境和技術方面沒有吸引我的地方,而且面試官還說他們可能就12-13薪 。綜上最終我提了個很高的薪資要求,xx最低。

  • 面試難度-簡單

  • 薪資福利- 一般(沒達到我提的要求)

8.中地控股(付融寶),雲問科技。這兩家問題合併放一起(因為問的很多問題對於我來說算是超綱了,更多的偏向了線上系統大流量情況下的處理方案)。

  • treeMap元素排序。專案中是否做過jvm優化,sql優化。gc演算法。是否用過webservice。mybatis分頁,redis有關問題。BIO,NIO,AIO區別。高併發情況下怎麼降低伺服器壓力(暫不從增加伺服器和硬體提升層面考慮),方案解決問題:

  • 1.假如servlet處理一個請求需要0.4秒,那麼處理100請求大概需要多久,為什麼。同時處理1000個請求導致伺服器壓力過大崩潰怎麼解決

  • 2.線上系統造成伺服器cpu佔用率過高問題(網上有解決方案)

  • 3.秒殺系統少賣超賣問題怎麼處理(網上有解決方案)

  • 4.有個業務場景,通過第三方工具收集到大概百萬條手機號,儲存到文字中,文字中每行一個號碼。我們的資料庫中會存每個號碼對應的會員等級資訊(也有可能這個號碼在資料庫中不存在,那麼他就是新使用者)。按會員等級給號碼傳送不同內容的資訊,新號碼傳送邀請資訊。設計一個方案,怎麼做效率最高(資料庫資料量很大)。

  • 難度-很難

9.焦點科技

兩位面試官。專案介紹,細節提問。

專案中用到快取了嗎,答:曾經打算用用ehcache,後來發現種種原因(細說)並不需要用到

eclipse外掛開發,它的初始化方法是什麼(答:2年前做的了,實在是忘了...)

以下問題問的很細,我用紅色標註面試官的提問。

ArrayList和LinkedList區別,ArrayList有初始容量嗎,你看的是jdk幾版本 ,容量不夠怎麼辦 ,擴容為多大 ,如果Arraylist當前容量是10,且有9個數據,那麼是新增第10個數據時擴容還是第11個,擴容怎麼實現的,為什麼採用複製陣列的方式而不是往後直接新增資料 。(回答的不好,我回答的是jdk1.8初始化容量10,擴容回答的是2倍,都錯了...ArrayList沒細看,以為很簡單,大概看看就行了,然後看完就忘了,實際上可看的點還是很多的。回去之後研究了下,JDK6-8ArrayList實現都有變化:體現在初始容量不同,1.7之前初始化容量為10,1.7及之後只會初始化空{},新增資料時才會開始給定初始化容量,如果初始化時自定義容量,那麼情況又不一樣,擴容規則

int newCapacity = oldCapacity + (oldCapacity >> 1);

以及其它一些細節,這裡就不細說了)然後我說ArrayList看的不太仔細,面試官問:你比較熟悉哪個集合,答:hashmap。

說說hashmap資料結構(陣列+連結串列,連結串列長度超過8此連結串列轉為紅黑樹(其實不準確,後來又看了1.8原始碼

 
final void treeifyBin(Node<K,V>[] tab, int hash) {  int n, index; Node<K,V> e;  if (tab == null || (n = tab.length) < MIN_TREEIFY_CAPACITY)

    resize();  else if ((e = tab[index = (n - 1) & hash]) != null) {

    TreeNode<K,V> hd = null, tl = null;    do {

      TreeNode<K,V> p = replacementTreeNode(e, null);      if (tl == null)

        hd = p;      else {

        p.prev = tl;

        tl.next = p;

      }

      tl = p;

    } while ((e = e.next) != null);    if ((tab[index] = hd) != null)

      hd.treeify(tab);

  }

陣列長度少於MIN_TREEIFY_CAPACITY 是不優先轉紅黑樹的,而是優先進行擴容))。

說說紅黑樹,它是基於什麼資料結構實現的(紅黑樹瞭解不深,只是大致說了下思想-旋轉、平衡、大小比較。(我感覺很難,有空得靜下心來好好研究))。紅黑樹可能會再轉為連結串列嗎(答:長度低於8會轉回連結串列 問:你確定是8而不是6 答:好像是6... (hashmap的看點真的很多,回去看了原始碼真的是6,而且擴容時紅黑樹變化很複雜,暫時看不懂))。說下hashmap put的過程(答:key的hashcode高16位與低16位異或運算得到新的hash,為了讓資料(特別是在當前容量不大的情況下)雜湊更均勻,然後把異或計算出的新hash與此時的hashmap容量-1做&運算,得到插入下標。問:為什麼要做&運算,還有什麼方式。答:二進位制運算速度快,還可以取模。之後如果下標位陣列無資料則直接插入,如果有資料則連結串列往下逐個進行hash比較,如果產生hash碰撞再進行==或者equals比較key是否一樣,一樣則覆蓋原資料,否則新增到連結串列後面。問:發生hash衝突怎麼辦 答:剛剛說了(重複) 問:你確定是新增到連結串列後面嗎 答:確定(我懷疑他jdk8的hashmap沒看全(jdk7是新元素插入至連結串列頭部的)還問了產生hash衝突後為什麼還會比較原來key的hashcode,表示沒聽懂,看了原始碼也沒發現有再次比較的過程,而且之後也重複問rehash後的元素具體去向問題(1.7和1.8元素rehash後元素去向是不同的),還有擴容問題,感覺他對jdk8的hashmap和1.7的有點混淆(還好我沒怎麼看jdk7,不過如果jdk7也看明白了,再說明與1.8的區別之後估計會大大加分吧,有點遺憾))。繼續,當hashmap中資料量超過當前容量*擴容因子(預設0.75)則擴容為原來的2倍,問:還有什麼要求 答:好像沒了 問:當前插入的位置上沒有元素就不擴容吧 答:哦哦。(其實不然,他說的是jdk7的情況,jdk8沒有這個要求。當時要是知道7和8的區別,指出這點,那就是亮點了,再次遺憾))。為什麼是2次冪擴容。(答:我覺得有3點因素。2進位制運算快;hash與當前容量-1做&運算很快且很巧妙地獲得元素下標;擴容後能巧妙地重新分配元素位置)說下擴容的rehash,擴容後的部分節點資料會重新定位,具體規則是hash&原容量,得到無非兩個結果:0和1,如果是0則該元素所在下標位置不動,如果是1則將該元素放置原位置擴容後的對應位置(假如原先容量為16,元素位置在陣列下標14的位置,則擴容後容量為32,該元素移動到陣列下標30的位置(即原索引+原容量位置)。當時沒這點解釋的不夠準確,有瑕疵)。為什麼看hashmap原始碼,你覺得看了後對你有什麼好處(答:比較喜歡探究(其實是近期面試才認真看的...)。知道了計算機位運算速度會比其它數學運算快;學習了它的思想對我思考問題方式有提升(能吹多少儘量吹多少);擴容是一個費效能的事,如果知道集合中大致會存多少元素最好給它一個初始容量),如果你知道里面會存100個左右資料,你會給它多大初始容量 (答:128) 它是執行緒安全的嗎(答:不是,jdk1.8多執行緒情況下可能會造成資料丟失,1.8之前更可能造成死迴圈),執行緒安全的map有什麼(答:hashtable,concurrentHashMap,前者已經被後者替代了,效率更高),說說concurrentHashMap,預設容量多少(答:16。只是瞭解,太複雜了,沒細看,只知道jdk1.8之前採用分段鎖方式處理,1.8之後採用cas樂觀鎖的方式來操作)。其它集合類瞭解嗎(hashSet,treeSet,treeMap,都解釋的相對明白,篇幅過長,不細說了),它們是否允許插入空值(treeSet,treeMap不可以)使用treeMap有什麼需要注意的 (其中的元素要實現comparator介面)

有關synchronize的問題(忘了怎麼問的了,只記得回答的挺多(作用,原理及jdk6之後的優化(鎖升級:偏向鎖->輕量級鎖->重量級鎖)))。Lock介面有哪些實現類,說說讀寫鎖。

java記憶體模型,新生代老年代演算法,簡述新生代老年代gc過程,演算法(複製回收(這裡沒說太明白,有點模糊),標記清除,標記整理(也說的不漂亮))。為什麼新生代和老年代採用gc演算法不同。jvm調優。

執行緒池有哪些引數,各代表什麼意思。執行緒池中提供哪些佇列種類。假如執行緒池核心池5,總池大小10,有界佇列長度10,現在有13個執行緒要用執行緒池執行,說下核心池和佇列中的執行緒情況。jdk中提供了哪幾種執行緒池的實現。專案中用到執行緒池嗎。

JDK中有哪些設計模式的體現,io中用了什麼設計模式,說說觀察者模式,專案中用了哪些設計模式。jdk8有哪些新增功能(答:那個箭頭的那個叫什麼來著 面試官:(笑)lambda表示式 答:對,可以讓一些操作更直白簡單,也有效率上的提高 問:說說它的閉包體現在哪 答:(隨便說說,也不知道對不對) 還有哪些其它功能 答:還可以引數傳入方法 問:它有什麼好處 (隨便說了點,也不知道對不對))。

redis有哪些資料結構。spring bean的生命週期,spring的BeanFactory和FactoryBean有什麼區別。

之後問工作中,程式碼上的一些注意細節,總共面試時間將近2小時,最長時間一次面試。給我的感覺面試氛圍很好,有位面試官全程都是笑著的,另一位稍微嚴肅,都挺好。

  • 面試難度- 稍難

  • 薪資福利-薪資稍低,福利很好

  • 福利分享
    Java程式設計師面臨的競爭壓力越來越大。那麼,作為一名Java程式設計師,怎樣努力才能快速成長為一名高階的程式設計師或者架構師,或者說一名優秀的高階工程師或架構師應該有怎樣的技術知識體系,這不僅是一個剛剛踏入職場的初級程式設計師,也是工作三五年之後開始迷茫的老程式設計師,都必須要面對和想明白的問題。為了幫助大家少走彎路,我總結出一個Java程式設計師的工作2-5年成長路線圖。

     

如何學習才能快速入門並精通呢?
當真正開始學習的時候難免不知道從哪入手,學習時頻繁踩坑,導致效率低下影響繼續學習的信心,最終浪費大量時間。
為了讓學習變得輕鬆、高效!今天給大家免費分享一套教學資源,幫助大家在成為架構師的道路上披荊斬棘。
群內已經將知識體系整理好(原始碼,筆記,PPT,學習視訊)進群免費領取。
加我的企鵝裙:948-368-769,免費領取資料
享給喜歡Java,喜歡程式設計,有夢想成為架構師的程式設計師們,希望能夠幫助到你們。
最後,做一個愛思考,懂思考,會思考的程式設計師