1. 程式人生 > >作為一個專科大二學生真的應該有緊迫感了

作為一個專科大二學生真的應該有緊迫感了

            好久都沒寫blog了,又要到秋招了,作為一個正在學習的大二學生來講,離自己出去實習找工作的時間也不長了。最近看了些CSDN的技術部落格論壇,想就此總結談談自己的想法。

           從學歷談起作為一個專科生出去面試和其他高校比起來確實差了很多很多,也就只能拼工作經驗和腹中的那點墨水,因為很多大公司如果不看學歷的話都比較喜歡招兩年或者三年工作經驗的人,要想提升自己就需要在大學好好表現自己,雖然大學生獲得的什麼獎項,公司不一定能看重,但是在面試官面前可能還是會產生些微妙的影響。在大學也要學著和別人溝通,一個良好的溝通交流能力可以讓你在面試的時候不那麼沒有什麼話說。所以我買了很多書看,不知道有不有作用,總之多看書對自己素養提升應該還是有影響的。還有就是較強的學習能力和邏輯思維能力也要訓練,多看看演算法,學學高數看看理論相關的知識,從別人的部落格中得知,有的面試官看重面試者的學習能力,你有多久的工作經驗代表你正處於什麼級別,而學習能力代表你將來能達到什麼級別。

總結了幾點提升自己的能力過程:

  1. 看各大公司的面試題:因為從現在起看面試題可以學習很多很多的基礎知識,各大面試官總會問道的問題就是Java Jvm的執行機制 垃圾處理機制等等(下面會專門講解這些問題)。
  2. 進牛客網做些演算法相關的題,經常做,就算每天一道,一年就是365道,至少自己也應該理解了線性查詢,排序,遞迴,貪心演算法,陣列,連結串列,佇列,這些基本的演算法如果說熟悉運用應該還是有一定距離的,畢竟要熟悉這些演算法的相關理論,還是要深度研究它底層的東西。
  3. 深入學習:在看面試題或者進入牛客網學習演算法的時候,有可能會遇到一些自己沒有接觸過或者以前沒有深入學習過的知識,例如HashMap內部實現與原理,這就需要去看原始碼了,其實看原始碼是很重要的一步,起步雖然很難,但是會讓你受益良多。
  4. 熟系專案:在自己做過的專案中,肯定有自己沒有好好優化的功能,後臺寫的可能也不怎麼好,這個時候就需要自己去優化了,需要的是把一個功能吃透,這裡可以看看“最程式碼”,“碼雲“這些網站,去看看別人的專案是怎麼寫的,就因為這些我就已經開始接觸過Struts2,Maven,這些架構。
  5. 看書學習運用:我正在看得書有Java程式設計思想,演算法,高等數學;還有進csdn看看別人寫的部落格,慕課網看看帖子等等。其實還有很多微信公眾號是關於程式設計的。
  6. 看砍關於職業上相關的禮儀,職業上的事情,網際網路發生的事。推薦第一財經週刊,36氪這些,可以多看看學習。
  7. 學習記錄筆記:把自己每天的學習時間和學習內容記錄下來,可以讓自己更有動力學習,如果哪天自己的筆記本上沒有在更新了,自己的良心肯定也會過不去吧。學習是一個枯燥的過程,必須讓自己時刻保持有動力。

最近看到一篇《2017年一線城市程式設計師工資大調動》https://blog.csdn.net/tTU1EvLDeLFq5btqiK/article/details/78929087

中國一執行緒序員的平均工資為11770元,受到教育水平對工資有著顯著的影響,工資隨著工作經驗的增長而增長,工資的地域分佈也不均勻等等,雖然我們專科生經常聽到其實自己經驗豐富就足夠了,自己能力夠就行了,但是如果真把這些話當成自己為自己找的理由的話,就真的錯了,要的是提升自己,讓別人輸的心服口服,我覺得在校讀書的時候還是不要把自己是個專科生放下撇在一邊,我說的不是精神上的,是在與別人比較素養,記憶力,學習能力的時候。雖然有些本科生確實還沒有專科生好,但那也僅僅是有些。如果非要說比較的話專科的好學生比例是3:7;本科就是7:3;所以我們需要的是提升自己,真正的強大才是真的強大。其實真正的藐視不是大吵一架你吵贏了,而是沉默。

近期看部落格面試題的總結和自己百度學習的作答

列舉常問問題:

  1. 集合相關問題:

HashMap和Hashtable的區別:

答:1.從作者上就有不同,HashMap作者多了一個著名的Doug Lea,他是個併發程式設計大神;

       2.產生時間的不同:Hashtable在JAVA一發布就提供了鍵值對映的資料結構,而HashMap產生於JDK1.2

      3.繼承的父類不同:HashMap是繼承自AbstractMap類,而HashTable是Dictionary類。它們又同事實現了map,Cloneable(可複製),Serializable(可序列化)這三個介面(Dictionary類是個一個已經被廢棄的類。父類都被廢棄了,自然而然也就沒人用它的子類Hashtable)

     4.對外提供的介面不同

Hashtable比HashMap多提供了elments()和contains()兩個方法。

Contain()用來判斷此集合是否包含傳入的value

列印結果為true;

elments() 方法繼承自Hashtable的父類Dictionnary。elements() 方法用於返回此Hashtable中的value的列舉

5.對Null key和Null value的支援不同:

Hashtable既不支援Null key也不支援Null value。如果傳入null就會執行異常為空指標。

HashMap中,null可以作為鍵,這樣的鍵只有一個;可以有一個或多個鍵對應的值為null,當get()方法返回null值時,可能是 HashMap中沒有該鍵,也可能使該鍵所對應的值為null。因此,在HashMap中不能由get()方法來判斷HashMap中是否存在某個鍵, 而應該用containsKey()方法來判斷。

6.線性安全性的不同:

Hashtable是執行緒安全的,它的每個方法都加入了Synchronize方法。在多執行緒併發的環境下,可以直接使用Hashtable,而HashMap不是執行緒安全的,在多執行緒併發的環境下,可能產生死鎖等問題。

但是,HashMap效率要比Hashtable要好很多,在日常使用當中,大部分時間是單執行緒操作的。HashMap把這部分操作解放出來了。當需要多執行緒操作的時候可以使用執行緒安全的ConcurrentHashMap。ConcurrentHashMap雖然也是執行緒安全的,但是它的效率比Hashtable要高好多倍。因為ConcurrentHashMap使用了分段鎖,並不對整個資料進行鎖定。

7.遍歷方式的內部實現上不同

Hashtable、HashMap都使用了 Iterator。而由於歷史原因,Hashtable還使用了Enumeration的方式

              當其他執行緒改變了HashMap的結構(增加,刪除,修改元素的時候),將會丟擲異常

              但是通過iterator的remove()方法移除元素就不會丟擲異常,

這個要自己去理解。

儘管hashtable採用了原生的同步鎖來保護資料安全。但是在出現迭代資料的時候,則無法保證邊迭代,邊正確操作。於是使用這個值來標記狀態。一旦在迭代的過程中狀態發生了改變,則會快速丟擲一個異常,終止迭代行為。

              8.初始容量大小和每次擴充容量大小的不同:

              Hashtable預設的初始大小為11,之後每次擴充,容量變為原來的2n+1。HashMap預設的初始化大小為16。之後每次擴充,容量變為原來的2倍。

              9.計算hash值得方法不同:

              Hashtable直接使用物件的hashCode,Hashtable在計算元素的位置時需要進行一次除法運算,而除法運算是比較耗時的。

       HashMap的效率雖然提高了,但是hash衝突卻也增加了。因為它得出的hash值的低位相同的概率比較高,而計算位運算

為了解決這個問題,HashMap重新根據hashcode計算hash值後,又對hash值做了一些運算來打散資料。使得取得的位置更加分散,從而減少了hash衝突。當然了,為了高效,HashMap只做了一些簡單的位處理。從而不至於把使用2 的冪次方帶來的效率提升給抵消掉。

未完待續……