面試官:連Serializable都不知道是什麼,你這5年都幹些什麼了?

2021-01-11 洪生鵬

分享職場乾貨、軟體編程、程序人生和創業資源。

文|洪生鵬

程式設計師面試時,序列化知識點經常會遇到。

張工是一名java程式設計師,工作5年了,一直從事java開發。最近到某網際網路公司面試,做了筆試題後,有一道筆試題是這樣子的:Serializable有什麼作用,張工沒有作答,面談時面試官又問了,張工回答不出個所以然。面試官:你都工作五年了,連序列化都不知道,你這5年都幹些什麼了?張工一臉的無助,不過確實不應該,類似Serializable序列化這樣的知識點,平時應該不會少用。

小編之前參加的筆試也遇到了關於序列化的問題,關於序列化我們都能知道個大概,但要是能進一步分析個所以然那就更好了,這樣能給面試官留下更好的印象。

一般情況下,我們在定義實體類時會繼承Serializable接口,類似這樣:

我們在實體類中引用了Serializable這個接口,那麼這個接口到底有什麼?細心的你會發現我們還定義了個serialVersionUID變量。這個變量到底有什麼作用?

什麼是Serializable接口

一個對象序列化的接口,一個類只有實現了Serializable接口,它的對象才能被序列化。

什麼是序列化?

序列化是將對象狀態轉換為可保持或傳輸的格式的過程。與序列化相對的是反序列化,它將流轉換為對象。這兩個過程結合起來,可以輕鬆地存儲和傳輸數據。

為什麼要序列化對象

把對象轉換為字節序列的過程稱為對象的序列化把字節序列恢復為對象的過程稱為對象的反序列化什麼情況下需要序列化?

當我們需要把對象的狀態信息通過網絡進行傳輸,或者需要將對象的狀態信息持久化,以便將來使用時都需要把對象進行序列化

那為什麼還要繼承Serializable。那是存儲對象在存儲介質中,以便在下次使用的時候,可以很快捷的重建一個副本。

或許你會問,我在開發過程中,實體並沒有實現序列化,但我同樣可以將數據保存到mysql、Oracle資料庫中,為什麼非要序列化才能存儲呢?

我們來看看Serializable到底是什麼,跟進去看一下,我們發現Serializable接口裡面竟然什麼都沒有,只是個空接口

一個接口裡面什麼內容都沒有,我們可以將它理解成一個標識接口。

比如在課堂上有位學生遇到一個問題,於是舉手向老師請教,這時老師幫他解答,那麼這位學生的舉手其實就是一個標識,自己解決不了問題請教老師幫忙解決。在Java中的這個Serializable接口其實是給jvm看的,通知jvm,我不對這個類做序列化了,你(jvm)幫我序列化就好了。

Serializable接口就是Java提供用來進行高效率的異地共享實例對象的機制,實現這個接口即可。

什麼是JVM?

JVM是Java Virtual Machine(Java虛擬機)的縮寫,JVM是一種用於計算設備的規範,它是一個虛構出來的計算機,是通過在實際的計算機上仿真模擬各種計算機功能來實現的。

為什麼要定義serialversionUID變量

簡單看一下 Serializable接口的說明

從說明中我們可以看到,如果我們沒有自己聲明一個serialVersionUID變量,接口會默認生成一個serialVersionUID

However, it is <em>strongly recommended</em> that all serializable classes explicitly declare serialVersionUID values, since the default serialVersionUID computation is highly sensitive to class details that may vary depending on compiler implementations, and can thus result in unexpected<code>InvalidClassException</code>s during deserialization.

但是強烈建議用戶自定義一個serialVersionUID,因為默認的serialVersinUID對於class的細節非常敏感,反序列化時可能會導致InvalidClassException這個異常。

在前面我們已經新建了一個實體類User實現Serializable接口,並且定義了serialVersionUID變量。

我們把User寫到文件,然後讀取出來。

是的,你沒有看錯,序列化與反序列化操作過程就是這麼的簡單。只需要將User寫入到文件中,然後再從文件中進行恢復,恢復後得到的內容與之前完全一樣,但是兩者是不同的對象。前面提到過一個問題,如果將serialVersionUID變量去掉,我們來看看,會發生什麼事情。

剛開始提到了,serialVersionUID要不要指定呢?如果不指定會出現什麼樣的後果?如果指定了以後後邊的值又代表著什麼意思呢?既然系統指定了這個欄位,那麼肯定是有它的作用的。

這個serialVersionUID是用來輔助對象的序列化與反序列化的,原則上序列化後的數據當中的serialVersionUID與當前類當中的serialVersionUID一致,那麼該對象才能被反序列化成功。這個serialVersionUID的詳細的工作機制是:在序列化的時候系統將serialVersionUID寫入到序列化的文件中去,當反序列化的時候系統會先去檢測文件中的serialVersionUID是否跟當前的文件的serialVersionUID是否一致,如果一直則反序列化成功,否則就說明當前類跟序列化後的類發生了變化,比如是成員變量的數量或者是類型發生了變化,那麼在反序列化時就會發生crash,並且回報出錯誤:

java.io.InvalidClassException: User; local class incompatible: stream classdesc serialVersionUID = -1451587475819212328, local class serialVersionUID = -3946714849072033140at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:699)at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1885)at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1751)at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2042)at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1573)at java.io.ObjectInputStream.readObject(ObjectInputStream.java:431)at Main.readUser(Main.java:32)at Main.main(Main.java:10)

小編認為,類似序列化這樣的基礎知識,平時在學習中要重視,才能編寫出更加高效穩定的程序。不知對此你是怎麼看待的,歡迎交流!

相關焦點

  • 問你職業規劃是什麼?原來這才是面試官想知道的
    求職面試時候被問到職業規劃,面試官(不論是經理還是HR),他們其實真的是想了解什麼內容?A、你個人的宏圖大志?B、你未來的成就方便他提前巴結?C、你的眼光格局?D、如果你得到這份工作,工作思路如何,打算怎麼幹!
  • 面試官:口字加一筆是什麼字?回答日、中、曰都被淘汰了
    每當畢業季就意味著有成千上萬的大學生出來找工作了,讀了十幾年的書終於可以施展拳腳了,想像得很簡單,出來後才知道什麼叫不容易,在面試這關上就能有不少人撞得頭破血流,根本不知道面試官葫蘆裡買什麼藥,不知道該如何回答。
  • 面試官:「天王蓋地虎」的下一句是什麼?小夥子機智回答被錄用!
    面試官:「天王蓋地虎」的下一句是什麼?小夥子機智回答被錄用!得到一份工作的第一道坎就是要通過面試,對於面試很多剛剛步入社會的面試者常常以為,面試官會提問專業方面的知識,或者讓你做些試卷,如果面試者是這個想法的話那就大錯特錯了,現在的面試官都是喜歡出怪招,老是從各個方面出問題考你。擔任面試官的往往是人事部門的,他們來面試,更多的是來檢驗你的人品以及工作態度。所以面試時,我們一定要小心應對,很多奇葩問題背後都是隱藏著深意的。
  • 面試官:你一人在沙漠,屍體,水,肉這三樣吃什麼?員工回復亮了
    前不久,一家新開的公司進行招聘,面試這個環節肯定是少不了的,面試官出了一個看似特別尋常的題:「假如你一個人在沙漠,給你三樣東西,屍體,水,頭,你吃什麼?」下面是5位面試者的回答:1、我想說……我怎麼會在沙漠裡?我身在何處,我正在幹什麼,我想去什麼地方嗎?!這就是我的答案:我是誰,在哪,接下來做什麼2、在荒漠裡我會利用一切能用到的資源。
  • 面試官:什麼蛋不能吃?回答笨蛋、傻蛋、壞蛋的都被淘汰
    導語:面試官:什麼蛋不能吃?回答笨蛋、傻蛋的被淘汰最近,有關於面試之類的話題可以說是特別的火爆我也想起了朋友之前和我說過的,發生在他身邊的一個故事。接下來和大家分享一下:我朋友叫吳所偉,大學學的人力資源,畢業以後,就從事了相關方面的工作。
  • 面試官:你覺得你的優勢在哪?別傻傻回答,聰明人都了解這3點
    面試官:你覺得你的優勢在哪?別傻傻回答,聰明人都了解這3點相信大家都有過去面試的經歷,也就是說,你在和自己比較心儀的一家公司聊得比較來,且他有意願來讓你參加面試的時候,你就需要準備好面試所需的簡歷,然後去這家公司準備面試。
  • 面試官:「你有什麼要問我的嗎?」,牢記這3個點,不懂別亂問
    我們在參加面試,面試到了最後一個環節的時候,面試官總會問你:你還有什麼要問我的嗎?你這個時候你們是怎麼說的呢?是有問題還是沒有問題呢?小明在參加面試的時候,曾經就在這個問題上栽過坑,當面試官問小明有沒有什麼問題要問的時候,小明回答說,基本上沒有什麼問題要問你了。
  • 面試官:「你大概什麼時候入職」,別傻傻地透露,聰明人都這樣說
    面試官:「你大概什麼時候入職」,別傻傻地透露,聰明人都這樣說當我們在求職的時候,是需要花費很多的時間和精力的。畢竟你在面試過程中,不可能去了這家公司,別人就會立刻做決定讓你立刻入職,在這家公司上班。通過你對問題的回答,大概了解到你的一些生活情況還有工作情況是怎樣的。那麼,今天我們就來說說你面試時的一個常見問題。面試官問你:「你大概什麼時候入職」,別傻傻地透露,聰明人都是這樣來說的。1、可以說一些時間上的區間情況要說面試官的這個問題,其實是非常常見的,一個是本身想要確定一下你的時間。
  • 女面試官:桌子切去1個角後,還剩幾個角?回答5個的都被淘汰
    女面試官:桌子切去1個角後,還剩幾個角?回答5個的都被淘汰面試這個程序,相信很多人都曾經遇到過,在找工作的時候,每個公司都會有面試的環節,通過一些對話和問答,了解面試者是否符合公司所需要的的人才。當然,面試也是一個雙向選擇的過程。面試中,不僅僅是公司需要了解你的一些過往經驗,你也需要了解公司的一些過往。
  • 面試官:「個」字加1筆,是什麼字?小夥子:有3個字。面試官愣了
    但是,面試了好幾家,都沒有找到。有一次,一家外貿公司的面試官都已經把他錄取了,他說面試官的題沒水平,這樣的公司沒前途,他不入職。事情經過是這樣的。曉宇和兩個大學生一塊進入了面試環節,需要從這3個人中錄取一個。
  • 「你還有什麼問題?」面試官這個靈魂拷問,究竟怎麼答?
    下面是「你還有什麼問題?」面試官這個靈魂拷問,究竟怎麼答?(雙語新聞)的內容。  「你還有什麼問題?」面試官這個靈魂拷問,究竟怎麼答?  How to Respond to "Do You Have Any Questions for Me?"  北方各地初雪都下了一陣了,應屆生們關心的秋招也接近尾聲。
  • 面試官:上下兩個口,是什麼字?回答呂字的都被淘汰,小夥神回復
    面試官:上下兩個口,是什麼字?回答呂字的都被淘汰,小夥神回復!面試是求職者的敲門磚,是企業選拔人才的點金石。不同公司有不同的文化和理念,所以選拔的人才標準也各不一樣,有的公司會比較看重思維反應和突發狀況反應能力,有的比較看重情理表現和語言表達,有的看中抗壓能力和道德原則,各個面試官根據自身企業的需要,也會想出一個個特別刁難的問題,地雷還是坑,全靠面試者自身好好把握!下面大家一起跟我去面試現場看看吧!
  • 面試官:「葉」字加一筆是什麼字?搶答吐字的,都被淘汰了
    公司招賢納士,都要經過面試這一關,面試官作為公司新鮮血液的把關人,肩上的責任非常重。一些面試官為了能全面考核到面試者的思維,情商以及價值觀等綜合能力,會刻意出一些針對性的奇葩問題來「刁難」面試者。剛開始投遞簡歷,就有一家還不錯的外企讓她去面試了。可去到面試現場,已經通過了前面層層關卡,到最後一輪面試了,面試官卻問了一個讓大家都傻眼的問題。面試官問:"葉"字加一筆,變成什麼字?第一個回答問題的是有工作經驗的小夥子,他說:"我們花了時間和精力到了這邊,你卻問我們這樣一個問題,我覺得很可笑,而且很浪費我們的時間。"
  • 面試官:木字多一撇,是什麼字?小夥回答:「移」字,被淘汰了
    因為現在的就位崗位與就業人口,遠遠不成正比,所以一份稍微好一點的工作,一般都會面臨著眾多的求職者競爭。而面試官為了能從眾多的求職者中,挑選出最優秀的人才,那麼也會在面試中給求職者們很大的壓力,以而來挑選了最優秀的人才,從而被錄取。所以說,現在的求職者,如果沒有兩把刷子的話, 是很難找到了好工作的。前段時間應屆畢業生王迅在應聘一家公司時,就遇到了這樣一件事,面試官:木字多一撇,是什麼字?
  • 面試官:你們家的寵物都吃什麼牌子的寵物食品?貞稻梅這樣說
    面試官:你們家的寵物都吃什麼牌子的寵物食品?貞稻梅這樣說如今的社會當中,大家在找工作的時候都會提前做好準備。就怕自己在面試的時候回答不上來面試官的問題,也怕面試官提出一些奇葩的問題來為難自己!其實面試官問一些看似很奇葩的問題,並不是一定要你說出一個百分百的標準答案,而且那個問題的答案是沒有固定的,無論你怎麼回答都可以,只要你可以用自己的想法說服面試官,讓他認同就行了,而且還是要考驗你的思維能力。貞稻梅是今年剛畢業的女大學生,她很喜歡小動物,自己在校的時候也是在宿舍公寓偷偷養了只柴犬。畢業後就開始投簡歷找工作,很快,她收到一家大型公司的面試邀約。
  • 女面試官:「個」字添一筆,是什麼字?回答不和介字的都被淘汰了
    網際網路已經融入了各個項目,因此,很多公司對人員的掌控也是越來越嚴格,不但你得有學歷,而且你必須得有能力。  一個人的能力決定了自己的未來,不管在什麼時候,只要你有能力,我相信,你肯定會找到一份好的工作。即使現在很多公司,對人員的把控很嚴格,我相信你也一定會成功的被取。
  • 面試官:二「山」在一起,是什麼字?回答「出」,不被錄取
    現在社會需要高端的人才,不需要那種死記硬背,不善於創新的人。2019年高考結束了,高考生焦急的等待著成績,那麼,考上大學就會有一個好的專業嗎?當然,這是沒有答案的問題,仁者見仁智者見智嘛。每當想起這件事情,周志祥感覺心裡非常的不舒服。半年後,他產生了換工作的念頭,於是,他開始著手找工作,投放簡歷。功夫不負有心人,終於有一天,有一家比較大的公司讓他去面試。周志祥知道,面試並不容易,因為很多面試官會出一些比較難於回答的問題,而且回答的時候還不能按照常理。面試之前那段時間,周志祥補習了很多的面試技巧。
  • 女面試官:什麼酒不能喝?中專生5秒高智商回答,面試官拍案叫絕
    大家在職場上認真努力的工作,目的其實就是為了升職加薪,但很多時候工資如何都升不上去,所以很多人會沒有辦法最終選擇了跳槽,不過在新的公司裡又要進行新的一輪面試,你永遠也不知道你面對的面試官會有如何的奇葩。
  • 面試官問我:「你最近都在看什麼書」,我該如何回答
    朋友小景最近面試碰了一鼻子灰,這讓他不禁感慨現在的面試題目是即超綱又超乎想像。最讓他印象深刻的是某位HR問他:「你最近都在看什麼書?」對於常年不看書、一看書就打瞌睡的小景來說,這個問題真讓他頭大。於是他問我:「是年底HR都這麼刁難人嗎?」當然不是。俞敏洪在面試時,最經常問的問題之一就是:「最近在看什麼書啊?」
  • 面試官:「人」字加一橫,是什麼字?領導:面試官你可以走了
    面試官:「人」字加一橫,是什麼字?領導:面試官你可以走了阿詩在給我講述面試官當場被領導揭發的那一刻,我突然明白了所有的腦筋急轉彎問題的背後有著什麼樣的內幕……朋友阿詩目睹了面試官被炒魷魚的全過程,覺得這簡直就像在演電視劇一般,他們有著精明的領導,同時也有著敢於冒險給人後門的面試官。