Hi,大家好,我是Mic
一個工作4年的粉絲,投了很多簡歷
好不容易接到一個網際網路公司的面試邀約。
在面試第一輪就被幹掉了,原因是對主流網際網路技術理解太淺了。
其中就有一個這樣的問題:“簡單說一下你對序列化和反序列化的理解”
下面看看普通人和高手的回答。
普通人:
序列化和反序列化就是說我要去把一個物件傳輸到網路上的其他的一個應用上一個情況下,就是我需要對這個物件做序列化。
然後想Java裡面我們可以,我們需要對這個物件的序列化的話,我們需要去實現像Serializable這樣一個介面吧。
高手:
好的,關於這個問題,我需要從幾個方面來回答。
首先,我認為,之所以需要序列化,核心目的是為了解決網路通訊之間的物件傳輸問題。
也就是說,如何把當前JVM程式裡面的一個物件,跨網路傳輸到另外一個JVM程式裡面。
而序列化,就是把記憶體裡面的物件轉化為位元組流,以便用來實現儲存或者傳輸。
反序列化,就是根據從檔案或者網路上獲取到的物件的位元組流,根據位元組流裡面儲存的物件描述資訊和狀態。
重新構建一個新的物件。
其次呢,序列化的前提是保證通訊雙方對於物件的可識別性,所以很多時候,我們會把物件先轉化為通用的解析格式,
比如json、xml等。然後再把他們轉化為資料流進行網路傳輸,從而實現跨平臺和跨語言的可識別性。
最後,我再補充一下序列化選擇。
市面上開源的序列化技術非常多,比如Json、Xml、Protobuf、Kyro、hessian等等。
那在實際應用裡面,哪種序列化最合適,我認為有幾個關鍵因素。
- 序列化之後的資料大小,因為資料大小會影響傳輸效能
- 序列化的效能,序列化耗時較長會影響業務的效能
- 是否支援跨平臺和跨語言
- 技術的成熟度,越成熟的方案使用的公司越多,也就越穩定。
以上就是我對這個問題的理解!
總結
序列化這個問題,面試問得也比較多
再深入一點,還會問到序列化的演算法和原理。
在實際開發中,序列化技術的選擇對於效能的影響也是比較大的。
因此網際網路公司對這方面的考察會比較多一些。
喜歡我作品的小夥伴,記得點贊收藏加關注。
版權宣告:本部落格所有文章除特別宣告外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自Mic帶你學架構
!
如果本篇文章對您有幫助,還請幫忙點個關注和贊,您的堅持是我不斷創作的動力。歡迎關注同名微信公眾號獲取更多技術乾貨!