某大公司兩次面試技術(shù)總結(jié)

一面:
1.B+樹的時(shí)間復(fù)雜度:O(logn)啄刹,當(dāng)時(shí)說成nlogn是講話時(shí)沒思考涮坐,B樹也說成B減樹,汗顏誓军。
2.聚簇索引在存儲(chǔ)方式上的特點(diǎn)膊升,跟主鍵id是否自增有沒有關(guān)聯(lián):只要聚簇索引是相鄰的,那么對(duì)應(yīng)的數(shù)據(jù)一定也是相鄰地存放在磁盤上的谭企。如果主鍵不是自增id廓译,那么可以想象它會(huì)不斷地調(diào)整數(shù)據(jù)的物理地址、分頁(yè)债查。比如非区,使用UUID作為聚簇索引會(huì)很糟糕:它使得聚簇索引的插入變得完全隨機(jī)。
3.mysql的樂觀鎖盹廷、悲觀鎖區(qū)別:樂觀鎖用版本號(hào)方式來解決征绸,悲觀鎖用阻塞其他select操作的方式解決問題。
4.tcp/ip分層當(dāng)時(shí)講的模糊俄占,現(xiàn)在重講:
比特流一層
arp協(xié)議等管怠,以及物理地址尋址、數(shù)據(jù)的成幀缸榄、流量控制渤弛、數(shù)據(jù)的檢錯(cuò)、重發(fā)一層
ip協(xié)議一層
tcp udp等協(xié)議一層
http甚带,ftp等協(xié)議一層
5.線程她肯,進(jìn)程,協(xié)程的區(qū)分:
進(jìn)程擁有自己獨(dú)立的堆和棧鹰贵,既不共享堆晴氨,亦不共享?xiàng)#M(jìn)程由操作系統(tǒng)調(diào)度碉输。
線程擁有自己獨(dú)立的棧和共享的堆籽前,共享堆,不共享?xiàng)7蠹兀€程也由操作系統(tǒng)調(diào)度枝哄。
協(xié)程和線程一樣共享堆,不共享?xiàng)H蚍牵瑓f(xié)程由程序員在代碼里調(diào)度膘格。(援引網(wǎng)絡(luò)博文)

當(dāng)運(yùn)行一個(gè)程序時(shí),OS會(huì)為這個(gè)程序啟動(dòng)一個(gè)進(jìn)程财松,可以將進(jìn)程看做一個(gè)包含了程序在運(yùn)行中需要用到和維護(hù)的各種資源的容器瘪贱。
一個(gè)線程是一個(gè)執(zhí)行空間纱控,這個(gè)空間會(huì)被OS來運(yùn)行函數(shù)中所寫的代碼。每個(gè)進(jìn)程至少包含一個(gè)線程菜秦,每個(gè)進(jìn)程的初始線程被稱作主線程甜害。(援引自GO語言實(shí)戰(zhàn))
6.用grep從百萬行數(shù)據(jù)里面匹配出對(duì)應(yīng)模式的數(shù)據(jù)前10條:
grep -e "pattern" -m 10 filepath
7.redis pub/sub如何保證消息可靠性?
redis的pub/sub不能直接支持消息可靠球昨,建議用rabbitmq等功能更強(qiáng)的消息隊(duì)列尔店。
8.php浮點(diǎn)型應(yīng)注意什么?(當(dāng)時(shí)沒有講很細(xì)主慰,沒有講出浮點(diǎn)型保存的小數(shù)為什么精度會(huì)失準(zhǔn)嚣州。)
二進(jìn)制保存十進(jìn)制的小數(shù),比如5.2 在十進(jìn)制5.2是有限小數(shù)共螺,改成二進(jìn)制確實(shí)無限小數(shù)该肴,所以保存起來,精度肯定會(huì)有一些缺失藐不。
詳解可以參考盧鈞軼博客http://cenalulu.github.io/linux/about-denormalized-float-number/
可以知道需要用到bcmath這樣的數(shù)學(xué)函數(shù)庫(kù)來操作浮點(diǎn)數(shù)的運(yùn)算匀哄,來保證精度。
參考鳥哥博客雏蛮,http://www.laruence.com/2011/12/19/2399.html http://www.laruence.com/2013/03/26/2884.html

二面
1.積分排行榜解決方案:利用redis的zset數(shù)據(jù)結(jié)構(gòu)的 zrank key member實(shí)現(xiàn)涎嚼,原理類似二分搜索。
2.go高并發(fā)的原理:我的回答是利用了協(xié)程挑秉,占用cpu和內(nèi)存的資源比進(jìn)程和線程少法梯。理由顯然單薄。補(bǔ)充如下:
內(nèi)存方面:
執(zhí)行協(xié)程只需要極少的棧內(nèi)存(大概是4~5KB)衷模,默認(rèn)情況下鹊汛,線程棧的大小為1MB-8MB
goroutine 的創(chuàng)建初始內(nèi)存成本很低廉,并且會(huì)根據(jù)需要?jiǎng)討B(tài)增長(zhǎng)和縮減占用的資源阱冶。這使得 goroutine 會(huì)從 4096 字節(jié)的初始棧內(nèi)存占用開始按需增長(zhǎng)或縮減內(nèi)存占用,而無需擔(dān)心資源的耗盡滥嘴。(援引自網(wǎng)絡(luò)博文)
模型優(yōu)勢(shì)方面:GO語言自帶一個(gè)可以調(diào)度線程和協(xié)程運(yùn)行的調(diào)度處理器木蹬,這個(gè)調(diào)度處理器實(shí)現(xiàn)了一些高級(jí)的算法,并發(fā)模型具有優(yōu)勢(shì)若皱。

進(jìn)程I/O訪問镊叁,阻塞了后面所有的計(jì)算,OS就直接把CPU切換到其他進(jìn)程走触,讓人家先用著晦譬。當(dāng)然除了I\O阻塞,還有時(shí)鐘阻塞等等互广。然后就出現(xiàn)了一個(gè)問題敛腌,就是太慢了卧土,一切換進(jìn)程得反復(fù)進(jìn)入內(nèi)核,置換掉一大堆狀態(tài)像樊。進(jìn)程數(shù)一多尤莺,大部分系統(tǒng)資源就被進(jìn)程切換給吃掉了。后來也有用線程來改善的生棍,大致意思就是颤霎,這個(gè)地方阻塞了,但我還有其他地方的邏輯流可以計(jì)算涂滴,這些邏輯流是共享一個(gè)地址空間的友酱,不用特別麻煩的切換頁(yè)表、刷新TLB等柔纵,只要把寄存器刷新一遍就行缔杉,能比切換進(jìn)程開銷少點(diǎn)。而協(xié)程是在進(jìn)程里寫一個(gè)邏輯處理器調(diào)度首量,利用到了并發(fā)優(yōu)勢(shì)壮吩,又可以避免反復(fù)系統(tǒng)調(diào)用,也沒有進(jìn)程切換造成的開銷加缘。這種用戶態(tài)線程就叫協(xié)程鸭叙。
協(xié)程主要解決了兩個(gè)必須的問題:一是碰著阻塞式I\O會(huì)導(dǎo)致整個(gè)進(jìn)程被掛起;二是由于缺乏時(shí)鐘阻塞拣宏,進(jìn)程需要自己擁有調(diào)度線程的能力暂雹。如果一種實(shí)現(xiàn)使得每個(gè)線程需要自己通過調(diào)用某個(gè)方法格仲,主動(dòng)交出控制權(quán)。那么我們就成這種用戶態(tài)線程是協(xié)作式的,就是協(xié)程哩陕。(引用自知乎~阿貓)

3.分庫(kù)分表技術(shù)方面考慮,什么時(shí)候該分庫(kù)分表褐荷,怎么操作计济?
垂直分表,把不常用的字段拆分到另外一張表各吨。
垂直分庫(kù)枝笨,把不同業(yè)務(wù)的數(shù)據(jù)放在不同的庫(kù)。服務(wù)化的拆分利于解耦和提高性能揭蜒,也利于系統(tǒng)擴(kuò)展横浑。
水平分表,表中的數(shù)據(jù)(比如user表)按照一定規(guī)律(比如對(duì)id進(jìn)行hash和取模后拆分)屉更♂闳冢可以一定程度緩解查詢性能瓶頸。但還會(huì)有庫(kù)級(jí)別IO瓶頸瑰谜,因?yàn)閿?shù)據(jù)在同一個(gè)庫(kù)中欺冀。
水平分庫(kù)分表树绩,于水平分表類似,唯一不同是將這些拆分出來的表保存在不同的數(shù)據(jù)庫(kù)中脚猾。在冷熱數(shù)據(jù)分離的場(chǎng)景很適用葱峡。能有效緩解單機(jī)和單褲性能瓶頸壓力,突破IO龙助、連接數(shù)砰奕、硬件資源的瓶頸。(援引Infoq作者 丁浪)

4.mysql讀寫分離或負(fù)載均衡靠什么機(jī)制調(diào)度提鸟?
應(yīng)該是問mysql數(shù)據(jù)庫(kù)訪問層主流方案军援,這個(gè)我沒接觸過,以后再補(bǔ)充称勋。

5.mysql跨庫(kù)事務(wù)怎么做
第一胸哥,用mysql5.7的XA特性。第二赡鲜,或者用隊(duì)列(需要設(shè)計(jì)一下這個(gè)隊(duì)列空厌,我后面補(bǔ)充下)來確保兩個(gè)任務(wù)執(zhí)行成功(限不需要回滾的場(chǎng)景)

6.redis集群增加或減少一個(gè)節(jié)點(diǎn)應(yīng)注意什么?
參考codis的redis集群方案的增加和減少節(jié)點(diǎn)的方法银酬。http://www.reibang.com/p/ec6a04eb66c3
7.swoole worker 的運(yùn)行方式嘲更,我回答是以多線程方式運(yùn)行的,其實(shí)是以多進(jìn)程方式運(yùn)行揩瞪。
關(guān)于Reactor Worker Task的關(guān)系赋朦,我后期再補(bǔ)充下。

14.memcache 一致性哈希原理李破?
簡(jiǎn)單的講宠哄,就是利用hash環(huán)和虛擬節(jié)點(diǎn)的思路,把請(qǐng)求分發(fā)到分布得很細(xì)密的虛擬節(jié)點(diǎn)上嗤攻。增加或刪除節(jié)點(diǎn)的時(shí)候毛嫉,該節(jié)點(diǎn)的緩存會(huì)被分發(fā)到下一虛擬節(jié)點(diǎn),而不會(huì)影響其他節(jié)點(diǎn)的已有緩存的命中率妇菱。
參考狱庇,朱雙印博客
http://www.zsythink.net/archives/1182
php對(duì)memcache/memcached的一致性實(shí)操,可以通過三種方式實(shí)現(xiàn):
第一恶耽,修改php.ini memcache擴(kuò)展的配置:

[Memcache] 
Memcache.allow_failover = 1 
Memcache.hash_strategy =consistent 
Memcache.hash_function =crc32

第二,使用memcachd擴(kuò)展時(shí)颜启,可以通過setOption方法配置偷俭。

$mem = new Memcached();
$mem->setOption(Memcached::OPT_HASH, Memcached::HASH_CRC);
$mem->setOption(Memcached::OPT_DISTRIBUTION, Memcached::DISTRIBUTION_CONSISTENT);
$servers = array(
  array('192.168.20.193', 11211, 33),
  array('192.168.20.194', 11211, 67)
);
$mem->addServers($servers);

print_r($mem->get('str_key'));

第三,可以通過php代碼實(shí)現(xiàn)缰盏,比如flexihash.php類庫(kù)
援引http://www.itnose.net/detail/6619318.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末涌萤,一起剝皮案震驚了整個(gè)濱河市淹遵,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌负溪,老刑警劉巖透揣,帶你破解...
    沈念sama閱讀 219,366評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異川抡,居然都是意外死亡辐真,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門崖堤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來侍咱,“玉大人,你說我怎么就攤上這事密幔⌒ǜ” “怎么了?”我有些...
    開封第一講書人閱讀 165,689評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵胯甩,是天一觀的道長(zhǎng)昧廷。 經(jīng)常有香客問我,道長(zhǎng)偎箫,這世上最難降的妖魔是什么木柬? 我笑而不...
    開封第一講書人閱讀 58,925評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮镜廉,結(jié)果婚禮上弄诲,老公的妹妹穿的比我還像新娘。我一直安慰自己娇唯,他們只是感情好齐遵,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,942評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著塔插,像睡著了一般梗摇。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上想许,一...
    開封第一講書人閱讀 51,727評(píng)論 1 305
  • 那天伶授,我揣著相機(jī)與錄音,去河邊找鬼流纹。 笑死糜烹,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的漱凝。 我是一名探鬼主播疮蹦,決...
    沈念sama閱讀 40,447評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼茸炒!你這毒婦竟也來了愕乎?” 一聲冷哼從身側(cè)響起阵苇,我...
    開封第一講書人閱讀 39,349評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎感论,沒想到半個(gè)月后绅项,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,820評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡比肄,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,990評(píng)論 3 337
  • 正文 我和宋清朗相戀三年快耿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片薪前。...
    茶點(diǎn)故事閱讀 40,127評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡润努,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出示括,到底是詐尸還是另有隱情铺浇,我是刑警寧澤,帶...
    沈念sama閱讀 35,812評(píng)論 5 346
  • 正文 年R本政府宣布垛膝,位于F島的核電站鳍侣,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏吼拥。R本人自食惡果不足惜倚聚,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,471評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望凿可。 院中可真熱鬧惑折,春花似錦、人聲如沸枯跑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)敛助。三九已至粗卜,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間纳击,已是汗流浹背续扔。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留焕数,地道東北人纱昧。 一個(gè)月前我還...
    沈念sama閱讀 48,388評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像堡赔,于是被迫代替她去往敵國(guó)和親砌些。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,066評(píng)論 2 355

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