阿里旗下某互聯(lián)網(wǎng)公司一面(附個(gè)人回答)

問(wèn)題還有答案都在,歡迎大家一起討論指正。

如何實(shí)現(xiàn)動(dòng)態(tài)修改配置

我提到 1)通過(guò)MBean來(lái)保存配置信息,JMX來(lái)修改配置;還提到log4j2就是通過(guò)這種機(jī)制來(lái)實(shí)現(xiàn)日志級(jí)別的動(dòng)態(tài)修改;2)開(kāi)放telnet接口或者h(yuǎn)ttp接口來(lái)允許參數(shù)的修改;

他提到如何實(shí)現(xiàn)中心配置,我提到了zookeeper,而且提到一個(gè)好處,當(dāng)參數(shù)修改時(shí),可以實(shí)時(shí)通知;他提到zookeeper的客戶端需要保持長(zhǎng)連接才能接收參數(shù)變化的通知,這樣連接數(shù)會(huì)很多,有沒(méi)有其他方式;我提到可以通過(guò)push的方式,短連接來(lái)發(fā)送通知的方式。

Vertx的線程模式

線程模型和Netty的區(qū)別,回答不上來(lái),只說(shuō)了下Vertx的線程模型 - 分發(fā)線程和工作線程

Vertx和RxJava的區(qū)別

都是響應(yīng)式框架,區(qū)別是什么?回答不上來(lái)

用了什么validation框架

Vertx-contract,若干個(gè)內(nèi)置的validation rule,實(shí)質(zhì)是對(duì)應(yīng)一個(gè)正則表達(dá);可以自定義validation rule,例如某個(gè)API的枚舉類型數(shù)據(jù);

NIO的BIO的區(qū)別

我回答到NIO內(nèi)有selector,它可以注冊(cè)事件,從而提高線程的使用效率;他問(wèn)到selector背后的實(shí)現(xiàn),我提到了epoll;繼續(xù)問(wèn)我是否知道epoll的兩種觸發(fā)方式 - 水平觸發(fā)和邊緣觸發(fā),我回答不上來(lái)。

Redis分布式鎖的實(shí)現(xiàn)

我回答使用redisson的Redloc算法實(shí)現(xiàn)分布式鎖,它提到了這個(gè)算法還是會(huì)有問(wèn)題,但想不起來(lái)什么場(chǎng)景下會(huì)有問(wèn)題了。

他提到了一個(gè)場(chǎng)景:如果有三個(gè)請(qǐng)求,第一個(gè)請(qǐng)求加了分布式鎖,其他二個(gè)等待,在返回前第一個(gè)請(qǐng)求當(dāng)機(jī)了,沒(méi)有清除鎖,這種情況怎么辦?

我提到了通過(guò)TTL來(lái)防止死鎖;我還提到了用setnx來(lái)加鎖,用ttl來(lái)設(shè)置存活時(shí)間防止死鎖;他提到這是兩個(gè)命令,不是原子的,我回答可以將setnx的value內(nèi)設(shè)置存活時(shí)間,這樣當(dāng)?shù)诙?qǐng)求來(lái)的時(shí)候,盡管有分布式鎖,但是顯示鎖已經(jīng)過(guò)期,所以這個(gè)鎖不會(huì)生效;

這個(gè)地方有些模糊,需要好好看一下,有點(diǎn)蒙過(guò)去的感覺(jué)。

further: 如上我的solution也是會(huì)有問(wèn)題的,當(dāng)后續(xù)線程并行可能同時(shí)檢測(cè)到鎖已經(jīng)過(guò)期,例如B和C,這樣就會(huì)同時(shí)執(zhí)行delete操作,然后執(zhí)行set操作,這時(shí)可能c刪除的是B剛剛設(shè)置的鎖,而不是最初的A鎖。

所以可以這樣,

1. 用一個(gè)更多參數(shù)的set方法,同時(shí)有NX和PX語(yǔ)義,即只有當(dāng)不存在才設(shè)置,和同時(shí)設(shè)置過(guò)期時(shí)間在一個(gè)原子操作內(nèi),防止客戶端執(zhí)行第一步后宕機(jī)。

2. 兩個(gè)語(yǔ)句 - setnx和expire, 當(dāng)setnx失敗的時(shí)候,會(huì)檢測(cè)ttl是否存在,如果不存在則設(shè)置ttl防止死鎖,這樣即使A線程宕機(jī)沒(méi)有來(lái)得及執(zhí)行expire,也會(huì)被后續(xù)線程設(shè)置上。這樣的side-effect是鎖的持續(xù)時(shí)間會(huì)比預(yù)期要長(zhǎng)些。

TTL過(guò)期后,什么時(shí)候Redis真正刪除這個(gè)緩存?

回答不上來(lái)。過(guò)后查詢的答案是:Redis使用惰性刪除和定期刪除的策略,惰性刪除是在訪問(wèn)數(shù)據(jù)時(shí),首先判斷是否過(guò)期,如果過(guò)期,則刪除緩存返回為空;定期刪除是一定時(shí)間內(nèi)對(duì)數(shù)據(jù)庫(kù)進(jìn)行掃描,清除掉過(guò)期數(shù)據(jù),防止由于數(shù)據(jù)未被訪問(wèn)而內(nèi)存沒(méi)有釋放。定期刪除會(huì)設(shè)定最大的掃描時(shí)間以及每一個(gè)數(shù)據(jù)庫(kù)抽樣的個(gè)數(shù);并且下次掃描會(huì)從根據(jù)上次掃描到的數(shù)據(jù)庫(kù)繼續(xù)掃描下一個(gè)數(shù)據(jù)庫(kù)。

如上是刪除過(guò)期數(shù)據(jù),這里是刪除未過(guò)期數(shù)據(jù)-當(dāng)內(nèi)存使用達(dá)到maxmemory閾值時(shí),執(zhí)行maxmemory-policy的策略,一共有6種策略來(lái)刪除未過(guò)期的數(shù)據(jù)。

volatile-lru -> remove the key with an expire set using an LRU algorithm

# allkeys-lru -> remove any key according to the LRU algorithm

# volatile-random -> remove a random key with an expire set

# allkeys-random -> remove a random key, any key

# volatile-ttl -> remove the key with the nearest expire time (minor TTL)

# noeviction -> don't expire at all, just return an error on write operations

volatile指設(shè)置了ttl的元素; allkey指所有元素

lru指least rencently used,去除最近最不常訪問(wèn)的元素; random指隨機(jī)刪除元素。

ttl指按照ttl優(yōu)先刪除即將過(guò)期的元素。

默認(rèn)是volatile-lru從設(shè)置過(guò)期時(shí)間的元素里刪除最不長(zhǎng)訪問(wèn)的元素。

分布式提交

是否用過(guò)分布式提交? 我提到二次提交,面試官說(shuō)這是傳統(tǒng)辦法,對(duì)于互聯(lián)網(wǎng)行業(yè)來(lái)說(shuō)用的比較少,因?yàn)樾阅懿粔颉?/p>

查詢文檔后,可以通過(guò)消息中間件轉(zhuǎn)為本地事務(wù)。

消息中間件

我提到了kafka,

順序存儲(chǔ)是如何實(shí)現(xiàn)的?

我說(shuō)不知道,應(yīng)該是文件的追加寫入,kafka不支持文件的隨機(jī)寫入;

是否知道zero-copy?

我回答的是有點(diǎn)類似堆外內(nèi)存,少了內(nèi)核態(tài)到用戶態(tài)的拷貝,所以加快速度;另外我還提到了kafka的作弊,可以直接把一個(gè)幾M文件直接返回,從而達(dá)到幾M/s的吞吐量。

有沒(méi)有了解push機(jī)制的中間件

不會(huì)回答

GC

Full GC頻繁,如何查錯(cuò)?

我提到首先了解當(dāng)前的配置信息,例如是那種GC collector,young/old區(qū)的大小;

開(kāi)啟GC日志來(lái)獲取更多信息;

dump堆找出異常大或者異常多的可以對(duì)象,查看代碼是否有內(nèi)存泄露;

如何寫代碼模擬出Full GC頻繁的現(xiàn)象

我回答 1)調(diào)節(jié)參數(shù)使得young區(qū)很小,這樣對(duì)象直接分配到old區(qū);2)調(diào)節(jié)參數(shù),使得promotion的閾值很小,甚至為0,這樣young區(qū)對(duì)象直接promote到old區(qū);3)創(chuàng)建大的數(shù)組對(duì)象,因?yàn)樾枰B續(xù)空間,所以很容易直接分配到堆中;

什么情況下對(duì)象會(huì)創(chuàng)建在棧內(nèi)?

我提到JVM有優(yōu)化,會(huì)把對(duì)象打散,將基本數(shù)據(jù)存儲(chǔ)在棧內(nèi);

是否聽(tīng)說(shuō)過(guò)逃逸分析?

我回答:判斷一個(gè)對(duì)象是否可能被其他線程調(diào)用,如果沒(méi)有,則說(shuō)明這個(gè)對(duì)象時(shí)線程安全的,不需要同步,即使有同步也會(huì)進(jìn)行同步消除來(lái)提高性能。

如何優(yōu)化spark程序?

1)改變數(shù)據(jù)的處理流程;2)充分利用DataFrame的緩存;3)調(diào)優(yōu)參數(shù)

是否遇到數(shù)據(jù)不平衡問(wèn)題

回答遇到過(guò),舉了分org存儲(chǔ)的實(shí)際解決方案。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,461評(píng)論 6 532
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,538評(píng)論 3 417
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 176,423評(píng)論 0 375
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 62,991評(píng)論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,761評(píng)論 6 410
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 55,207評(píng)論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,268評(píng)論 3 441
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 42,419評(píng)論 0 288
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,959評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,782評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,983評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,528評(píng)論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,222評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 34,653評(píng)論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 35,901評(píng)論 1 286
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,678評(píng)論 3 392
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,978評(píng)論 2 374

推薦閱讀更多精彩內(nèi)容

  • 1.1 資料 ,最好的入門小冊(cè)子,可以先于一切文檔之前看,免費(fèi)。 作者Antirez的博客,Antirez維護(hù)的R...
    JefferyLcm閱讀 17,087評(píng)論 1 51
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,659評(píng)論 25 708
  • 42、PHP緩存技術(shù)有哪些?1)、全頁(yè)面靜態(tài)化緩存2)、頁(yè)面部分緩存3)、數(shù)據(jù)緩存4)、查詢緩存5)、按內(nèi)容變更進(jìn)...
    像敏銳的狗閱讀 760評(píng)論 1 2
  • 在愛(ài)情的城堡里面,我覺(jué)得最難得就是對(duì)方的付出,做什么多數(shù)都是提前為對(duì)方考慮,而另一方也剛才是她能接受的。理解并且能...
    此刻最重要閱讀 155評(píng)論 1 1
  • 不知道還能頂著學(xué)生這個(gè)保護(hù)神的光環(huán)享受多久
    宋芷安閱讀 164評(píng)論 0 0