何謂精通
先來看幾個面試的片段,從中也許能看出些端倪,:)
------------------------------------------------------------------------------------------------------------
片段一
背景:面試者之前做過一些網(wǎng)絡(luò)通訊的程序。
問:對Java網(wǎng)絡(luò)編程方面的package有了解嗎?
答:因為編寫過一些這樣的程序,應(yīng)該還是比較熟的。
問:那能說說Socket和ServerSocket中的timeout參數(shù)的具體作用嗎?
答:... (忘記當(dāng)時面試者答的具體是什么了,不過基本還是正確的)
問:能說說Socket中的setTcpNoDelay是拿來干什么的嗎?
答:... (沒答出來)
問:不知道有沒有了解過例如在linux操作系統(tǒng)上是怎么實現(xiàn)網(wǎng)絡(luò)通訊的呢,在操作系統(tǒng)中是個怎么樣的過程呢?
答:...
由于面試者對上面的問題并沒有回答到位,因此就沒有再在網(wǎng)絡(luò)編程這塊繼續(xù)問下去了,本來后續(xù)還打算問問tcp/ip協(xié)議、線程池、連接池、并發(fā)等等方面的一些問題。
片段二
背景:面試者之前有Load Balance方面的經(jīng)驗。
問:對Load balance接觸過吧?
答:是的,在幾個項目中都使用過,個人覺得還是比較精通的。
問:能說說在load balance通常有的幾種請求方式嗎?
答:... (沒明白)
問:例如最常見的load balance請求的場景是所有的請求經(jīng)過load balance,然后響應(yīng)也通過load balance返回,你覺得還有沒有其他的方式呢?
答:還有其他的方式嗎?
問:跳過上面的問題,load balance方面你們一般使用什么方式來保證均衡性呢?
答:輪循方式。
問:有沒有接觸過其他的一些保證均衡的方式呢?
答:沒有。
片段三
背景:面試者覺得自己對于java collection比較精通。
問:能說下java是怎么實現(xiàn)HashSet的嗎?
答:基于HashMap實現(xiàn),構(gòu)建一個key為傳入值,value也為傳入值的HashMap。
問:繼續(xù)聊下HashMap,java是怎么實現(xiàn)HashMap的呢?
答:對key進行hash,然后以數(shù)組的方式實現(xiàn)。
問:能說下在HashMap中當(dāng)放的數(shù)據(jù)量越來越大的時候,java會做些什么動作嗎?
答:當(dāng)放入的數(shù)據(jù)量達到容量時,會默認增大一倍。
問:你覺得如果需要在HashMap中存放大量的數(shù)據(jù)的時候,會有些什么問題呢,例如要往一個HashMap中放100w的數(shù)據(jù)?
答:... (具體答的什么我不太記得了,不過最起碼答出了沖突率會增高,效率會下降這點)
問:你覺得有什么辦法能提升效率嗎?
答:....(思考ing)....自己實現(xiàn)hashCode,盡量降低沖突率。
問:還有什么別的辦法嗎,或者自己來實現(xiàn)一個支撐100w的map結(jié)構(gòu)怎么做比較好呢,主要是要優(yōu)化寫?
答:...(thinking...)....自己做hash,然后存放在LinkedList里。
問:如果現(xiàn)在要放1T的數(shù)據(jù)怎么辦?肯定是不能放在單機上的了,怎么樣去分布式做呢?
答:...同樣做hash,然后例如0--7的放在哪些機器上,8---F開頭的放在另外的機器上。
問:那么如果加機器了是不是要修改配置呢,另外加機器是否有遷移數(shù)據(jù)的問題呢?
答:...嗯,暫時是的。
這個面試過程其實我們當(dāng)時是相當(dāng)滿意的,雖然這個面試者并沒有完全答出來了,但根據(jù)他以往的經(jīng)驗來看,能答到這個程度真的非常不錯了,而且我們最看重他的是碰到這些技術(shù)性的問題能夠很有興趣的進行思考,形象的說,簡直就是雙眼放光,:)
好,最后一個片段。
片段四
背景:面試者在項目中用過了java 5中的并發(fā)包。
問:覺得像ConcurrentHashMap這樣的類帶來了些什么好處呢?
答:將之前需要加鎖自己做同步的動作做了更好的原子性的封裝。
問:能講講CAS在這些并發(fā)數(shù)據(jù)結(jié)構(gòu)中起到了些什么作用嗎?
答:CAS?
問:(忽略上面的問題) 能說說Executors.newCachedThreadPool和直接new ThreadPoolExecutor的差別嗎?
答:...不太清楚。
------------------------------------------------------------------------------------------------------------
好,關(guān)于面試的一些片段就回放到這了,從上面這幾個面試片段中,估計也能看出一些端倪了,個人覺得精通真的很難,什么叫精通呢,我覺得應(yīng)該不僅僅是會使用,熟練的使用,而且能夠?qū)ζ涞讓拥膶崿F(xiàn)機制、原理有較深的了解,例如java網(wǎng)絡(luò)編程,應(yīng)該了解到j(luò)ava網(wǎng)絡(luò)編程package的參數(shù)細節(jié)的含義,進而應(yīng)該了解操作系統(tǒng)是怎么去實現(xiàn)的,再進一步來講,應(yīng)該能夠?qū)f(xié)議也有一定的了解,例如tcp/ip、http等等,所以說要做到精通真的很難,至于是否能夠解決大型場景中帶來的問題,這個則受限于每個人的經(jīng)歷,因此不認為這點是決定性的因素。
其實我以前也很反對面試的時候問細節(jié)的,因為認為很多細節(jié)問題其實都是可以google等找到的,但現(xiàn)在觀點在改變,我覺得如果真的精通的話,是會知道細節(jié)的,而不是靠臨時的查找去學(xué)會,因此漸漸的也在面試過程中問一些非常細節(jié)的問題了,而且其實很多大型場景從架構(gòu)層面來講也是差不多的,并不會有太多的不同,加上這些東西現(xiàn)在在網(wǎng)上講的也越來越多了(發(fā)現(xiàn)近來網(wǎng)上開始充斥著分布式、高可用性、高伸縮性這些詞,開源的這類東西也迅速的在冒出,都不知道到底是好現(xiàn)象呢還是不那么好的現(xiàn)象,^_^),估計很多同學(xué)背都能背出來了,雖然也許不是很理解為什么架構(gòu)是那樣的。
記得很久以前和raimundox聊天,raimundox說到在國外的工程師相當(dāng)專業(yè),對于這些需要使用的技術(shù)所涉及的相關(guān)東西都會懂的比較多,例如要使用java的多線程,那么他們通常會知道操作系統(tǒng)是怎么來實現(xiàn)這塊的,而這也是他們大學(xué)的教學(xué)方法,完全是針對性的,就是教需要用到的東西涉及的知識體系,至于其他的很多東西則不去教學(xué)了,因此相對來講國外的軟件質(zhì)量整體是更好的,而做研究的人就更不同了,他們眼中的研究都是創(chuàng)新性質(zhì)的,這讓他們很明顯的區(qū)分了工程和研究,這也許就是造成有很大差距的一點吧。
posted on 2008-06-12 21:41 BlueDavy 閱讀(8705) 評論(52) 編輯 收藏 所屬分類: 業(yè)界隨想