国语精品91自产拍在线观看二区_色偷偷五月天_天天射夜夜爽_99久久免费国产特黄_1717国产精品久久

機(jī)械工程師英語(yǔ)面試

時(shí)間:2022-07-02 15:53:28 面試 我要投稿
  • 相關(guān)推薦

機(jī)械工程師英語(yǔ)面試

  應(yīng)屆生在面試的時(shí)候,大公司偶爾也會(huì)遇到一些系統(tǒng)設(shè)計(jì)題,而這些題目往往只是考一下你的知識(shí)面,或者對(duì)系統(tǒng)架構(gòu)方面的了解,不會(huì)涉及編碼。很多人感覺(jué)難以應(yīng)對(duì)這樣的題目,也不知道從何說(shuō)起,在本文中,總結(jié)了回答這類(lèi)題目需要哪些基礎(chǔ)知識(shí),以及怎樣使用這些知識(shí)回答這些問(wèn)題。

機(jī)械工程師英語(yǔ)面試

  在正式介紹基礎(chǔ)知識(shí)之前,先羅列幾個(gè)常見(jiàn)的系統(tǒng)設(shè)計(jì)相關(guān)的筆試面試題:

  (1)(百度)要求設(shè)計(jì)一個(gè)DNS的Cache結(jié)構(gòu),要求能夠滿(mǎn)足每秒5000以上的查詢(xún),滿(mǎn)足IP數(shù)據(jù)的快速插入,查詢(xún)的速度要快。(題目還給出了一系列的數(shù)據(jù),比如:站點(diǎn)數(shù)總共為5000萬(wàn),IP地址有1000萬(wàn),等等)

  解決方案:DNS服務(wù)器實(shí)現(xiàn)域名到IP地址的轉(zhuǎn)換。

  每個(gè)域名的平均長(zhǎng)度為25個(gè)字節(jié)(在域名的命名標(biāo)準(zhǔn)中,對(duì)于域名長(zhǎng)度是有明顯限制的。其中,中國(guó)國(guó)家域名不得超過(guò)20個(gè)字符,國(guó)際通用域名不得超過(guò)26個(gè)字符),每個(gè)IP為4個(gè)字節(jié),所以Cache的每個(gè)條目需要大概30個(gè)字節(jié)。

  總共50M個(gè)條目,所以需要1.5G個(gè)字節(jié)的空間?梢苑胖迷趦(nèi)存中。(考慮到每秒5000次操作的限制,也只能放在內(nèi)存中。)

  可以考慮的數(shù)據(jù)結(jié)構(gòu)包括hash_map,字典樹(shù),紅黑樹(shù)等等。

  我覺(jué)得比較好的解決方法是,將每一個(gè)URL字符串轉(zhuǎn)化為MD5值,作為key,建立最大或最小堆,這樣插入和查找的效率都是O(log(n))。

  MD5是128bit的大整數(shù)也就是16byte,比直接存放URL要節(jié)省的多。

  具體可應(yīng)用方法:每秒5000的查詢(xún)不算高啊,最土的方法使用MySQL+Memcached架構(gòu)應(yīng)該都能滿(mǎn)足吧?

  數(shù)據(jù)結(jié)構(gòu)建議以域名的md5值為主鍵來(lái)存儲(chǔ),值可以只存儲(chǔ)目標(biāo)IP就行。Memcached用戶(hù)支撐前端查詢(xún),MySQL用戶(hù)存儲(chǔ)數(shù)據(jù),還要看總數(shù)量會(huì)有多大,如果不是特別大,直接使用MyISAM引擎來(lái)存儲(chǔ)就行,更新插入都非常快,如果超千萬(wàn),可以使用InnoDB來(lái)存儲(chǔ),每次有新數(shù)據(jù)插入時(shí)直接使用replace into table就行,Memcached數(shù)據(jù)的更新直接使用set。

  Memcached隨便用得好些,每秒上萬(wàn)次的get是容易達(dá)到的,MySQL你別小看,在有的測(cè)試?yán)铮灾麈I查詢(xún)的測(cè)試,一臺(tái)普通的服務(wù)器上,MySQL/InnoDB 5.1服務(wù)器上獲得了750000+QPS的成績(jī)。

  總結(jié):關(guān)于高并發(fā)系統(tǒng)設(shè)計(jì)。主要有以下幾個(gè)關(guān)鍵技術(shù)點(diǎn):緩存,索引,數(shù)據(jù)分片,鎖粒度盡可能小。。

  (2)有N臺(tái)機(jī)器,M個(gè)文件,文件可以以任意方式存放到任意機(jī)器上,文件可任意分割成若干塊。假設(shè)這N臺(tái)機(jī)器的宕機(jī)率小于1/3,想在宕機(jī)時(shí)可以從其他未宕機(jī)的機(jī)器中完整導(dǎo)出這M個(gè)文件,求最好的存放與分割策略。

  解決方案:涉及到現(xiàn)在通用的分布式文件系統(tǒng)的副本存放策略。一般是將大文件切分成小的block(如64MB)后,以block為單位存放三份到不同的節(jié)點(diǎn)上,這三份數(shù)據(jù)的位置需根據(jù)網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)配置,一般而言,如果不考慮跨數(shù)據(jù)中心,可以這樣存放:兩個(gè)副本存放在同一個(gè)機(jī)架的不同節(jié)點(diǎn)上,而另外一個(gè)副本存放在另一個(gè)機(jī)架上,這樣從效率和可靠性上,都是最優(yōu)的(這個(gè)google公布的文檔中有專(zhuān)門(mén)的證明,有興趣的可參閱一下。)。如果考慮跨數(shù)據(jù)中心,可將兩份存在一個(gè)數(shù)據(jù)中心的不同機(jī)架上,另一份放到另一個(gè)數(shù)據(jù)中心。

  (3)假設(shè)有三十臺(tái)服務(wù)器,每個(gè)上面都存有上百億條數(shù)據(jù)(有可能重復(fù)),如何找出這三十臺(tái)機(jī)器中,根據(jù)某關(guān)鍵字,重復(fù)出現(xiàn)次數(shù)最多的前100條?要求用Hadoop來(lái)做。

  方案:針對(duì)每一臺(tái)機(jī)器有100億,類(lèi)似100萬(wàn)時(shí)的處理方法,對(duì)數(shù)據(jù)進(jìn)行切片,可以都切為100萬(wàn)的記錄,對(duì)100萬(wàn)、取最前100,不同在于這前100也存入hash,如果key相同則合并value,顯然100億的數(shù)據(jù)分割完后的處理結(jié)果也要再進(jìn)行類(lèi)似的處理,hash表不能過(guò)長(zhǎng),原理其實(shí)也就是map和reduce。然后合并這30臺(tái)機(jī)器的結(jié)果。

  (4)設(shè)計(jì)一個(gè)系統(tǒng),要求寫(xiě)速度盡可能高,說(shuō)明設(shè)計(jì)原理。

  解決方案:涉及到BigTable的模型。主要思想是將隨機(jī)寫(xiě)轉(zhuǎn)化為順序?qū)懀M(jìn)而大大提高寫(xiě)速度。具體是:由于磁盤(pán)物理結(jié)構(gòu)的獨(dú)特設(shè)計(jì),其并發(fā)的隨機(jī)寫(xiě)(主要是因?yàn)榇疟P(pán)尋道時(shí)間長(zhǎng))非常慢,考慮到這一點(diǎn),在BigTable模型中,首先會(huì)將并發(fā)寫(xiě)的大批數(shù)據(jù)放到一個(gè)內(nèi)存表(稱(chēng)為“memtable”)中,當(dāng)該表大到一定程度后,會(huì)順序?qū)懙揭粋(gè)磁盤(pán)表(稱(chēng)為“SSTable”)中,這種寫(xiě)是順序?qū),效率極高。說(shuō)到這,可能有讀者問(wèn),隨機(jī)讀可不可以這樣優(yōu)化?答案是:看情況。通常而言,如果讀并發(fā)度不高,則不可以這么做,因?yàn)槿绻麑⒍鄠(gè)讀重新排列組合后再執(zhí)行,系統(tǒng)的響應(yīng)時(shí)間太慢,用戶(hù)可能接受不了,而如果讀并發(fā)度極高,也許可以采用類(lèi)似機(jī)制。

  (5)設(shè)計(jì)一個(gè)高并發(fā)系統(tǒng),說(shuō)明架構(gòu)和關(guān)鍵技術(shù)要點(diǎn)。

  方案:分布式系統(tǒng)中的核心的服務(wù)器的實(shí)現(xiàn)。可以是http服務(wù)器,緩存服務(wù)器,分布式文件系統(tǒng)等的內(nèi)部實(shí)現(xiàn)。下邊主要從一個(gè)高并發(fā)的大型網(wǎng)站出發(fā),看一個(gè)高并發(fā)系統(tǒng)的設(shè)計(jì)。下邊是一個(gè)高并發(fā)系統(tǒng)的邏輯結(jié)構(gòu):

  1)緩存系統(tǒng):緩存是每一個(gè)高并發(fā),高可用系統(tǒng)不可或缺的模塊。常見(jiàn)的緩存系統(tǒng):Squid(前端緩存)、Ehcache(對(duì)象緩存系統(tǒng)),動(dòng)態(tài)頁(yè)面靜態(tài)化(頁(yè)面緩存)

  2)負(fù)載均衡系統(tǒng):負(fù)載均衡策略有隨機(jī)分配,平均分配,分布式一致性hash等。軟件負(fù)載均衡有:基于DNS的負(fù)載均衡、基于LVS的負(fù)載均衡和基于lptables的負(fù)載均衡。硬件負(fù)載均衡:路由上配置nat實(shí)現(xiàn)負(fù)載均衡、對(duì)萬(wàn)網(wǎng)一個(gè)虛擬ip,內(nèi)網(wǎng)映射幾個(gè)內(nèi)網(wǎng)ip。數(shù)據(jù)庫(kù)負(fù)載均衡:數(shù)據(jù)庫(kù)集群等。

  (6)有25T的log(query->queryinfo),log在不段的增長(zhǎng),設(shè)計(jì)一個(gè)方案,給出一個(gè)query能快速返回queryinfo?

  方案:1)建立適當(dāng)索引;2)優(yōu)化sql語(yǔ)句;3)實(shí)現(xiàn)小數(shù)據(jù)量和海量數(shù)據(jù)的通用分頁(yè)顯示存儲(chǔ)過(guò)程;4)合理選擇聚集索引

  以上所有問(wèn)題中凡是不涉及高并發(fā)的,基本可以采用google的三個(gè)技術(shù)解決,分別為:GFS,MapReduce,Bigtable,這三個(gè)技術(shù)被稱(chēng)為“google三駕馬車(chē)”,google只公開(kāi)了論文而未開(kāi)源代碼,開(kāi)源界對(duì)此非常有興趣,仿照這三篇論文實(shí)現(xiàn)了一系列軟件,如:Hadoop、HBase、HDFS、Cassandra等。

  在google這些技術(shù)還未出現(xiàn)之前,企業(yè)界在設(shè)計(jì)大規(guī)模分布式系統(tǒng)時(shí),采用的架構(gòu)往往是database+sharding+cache,現(xiàn)在很多公司(比如taobao,weibo.com)仍采用這種架構(gòu)。在這種架構(gòu)中,仍有很多問(wèn)題值得去探討。如采用什么數(shù)據(jù)庫(kù),是SQL界的MySQL還是NoSQL界的Redis/TFS,兩者有何優(yōu)劣? 采用什么方式sharding(數(shù)據(jù)分片),是水平分片還是垂直分片?據(jù)網(wǎng)上資料顯示,weibo.com和taobao圖片存儲(chǔ)中曾采用的架構(gòu)是Redis/MySQL/TFS+sharding+cache,該架構(gòu)解釋如下:前端cache是為了提高響應(yīng)速度,后端數(shù)據(jù)庫(kù)則用于數(shù)據(jù)永久存儲(chǔ),防止數(shù)據(jù)丟失,而sharding是為了在多臺(tái)機(jī)器間分?jǐn)傌?fù)載。最前端由大塊大塊的cache組成,要保證至少99%(該數(shù)據(jù)在weibo.com架構(gòu)中的是自己猜的,而taobao圖片存儲(chǔ)模塊是真實(shí)的)的訪(fǎng)問(wèn)數(shù)據(jù)落在cache中,這樣可以保證用戶(hù)訪(fǎng)問(wèn)速度,減少后端數(shù)據(jù)庫(kù)的壓力,此外,為了保證前端cache中數(shù)據(jù)與后端數(shù)據(jù)庫(kù)中數(shù)據(jù)一致,需要有一個(gè)中間件異步更新(為啥異步?理由簡(jiǎn)單:同步代價(jià)太高。異步有缺定,如何彌補(bǔ)?)數(shù)據(jù),這個(gè)有些人可能比較清楚,新浪有個(gè)開(kāi)源軟件叫memcachedb(整合了Berkeley DB和Memcached),正是完成此功能。另外,為了分?jǐn)傌?fù)載壓力和海量數(shù)據(jù),會(huì)將用戶(hù)微博信息經(jīng)過(guò)片后存放到不同節(jié)點(diǎn)上(稱(chēng)為“sharding”)。

  這種架構(gòu)優(yōu)點(diǎn)非常明顯:簡(jiǎn)單,在數(shù)據(jù)量和用戶(hù)量較小的時(shí)候完全可以勝任。但缺定早晚一天暴露出來(lái),即:擴(kuò)展性和容錯(cuò)性太差,維護(hù)成本非常高,尤其是數(shù)據(jù)量和用戶(hù)量暴增之后,系統(tǒng)不能通過(guò)簡(jiǎn)單的增加機(jī)器解決該問(wèn)題。

  于是乎,新的架構(gòu)便出現(xiàn)了。主要還是google的那一套東西,下面分別說(shuō)一下:

  GFS是一個(gè)可擴(kuò)展的分布式文件系統(tǒng),用于大型的、分布式的、對(duì)大量數(shù)據(jù)進(jìn)行訪(fǎng)問(wèn)的應(yīng)用。它運(yùn)行于廉價(jià)的普通硬件上,提供容錯(cuò)功能,F(xiàn)在開(kāi)源界有HDFS(Hadoop Distributed File System),該文件系統(tǒng)雖然彌補(bǔ)了數(shù)據(jù)庫(kù)+sharding的很多缺點(diǎn),但自身仍存在一些問(wèn)題,比如:由于采用master/slave架構(gòu),因而存在單點(diǎn)故障問(wèn)題;元數(shù)據(jù)信息全部存放在master端的內(nèi)存中,因而不適合存儲(chǔ)小文件,或者說(shuō)如果存儲(chǔ)的大量小文件,那么存儲(chǔ)的總數(shù)據(jù)量不會(huì)太大。

  MapReduce是針對(duì)分布式并行計(jì)算的一套編程模型。他最大的優(yōu)點(diǎn)是:編程接口簡(jiǎn)單,自動(dòng)備份(數(shù)據(jù)默認(rèn)情況下會(huì)自動(dòng)備三份),自動(dòng)容錯(cuò)和隱藏跨機(jī)器間的通信。在Hadoop中,MapReduce作為分布計(jì)算框架,而HDFS作為底層的分布式存儲(chǔ)系統(tǒng),但MapReduce不是與HDFS耦合在一起的,你完全可以使用自己的分布式文件系統(tǒng)替換掉HDFS。當(dāng)前MapReduce有很多開(kāi)源實(shí)現(xiàn),如Java實(shí)現(xiàn)Hadoop MapReduce,C++實(shí)現(xiàn)Sector/sphere等,甚至有些數(shù)據(jù)庫(kù)廠(chǎng)商將MapReduce集成到數(shù)據(jù)庫(kù)中了。

  BigTable俗稱(chēng)“大表”,是用來(lái)存儲(chǔ)結(jié)構(gòu)化數(shù)據(jù)的,個(gè)人覺(jué)得,BigTable在開(kāi)源界最火爆,其開(kāi)源實(shí)現(xiàn)最多,包括:HBase,Cassandra,levelDB等,使用也非常廣泛。

  除了google的這三家馬車(chē),還有其他一些技術(shù):

  Dynamo:亞馬遜的key-value模式的存儲(chǔ)平臺(tái),可用性和擴(kuò)展性都很好,采用DHT(Distributed Hash Table)對(duì)數(shù)據(jù)分片,解決單點(diǎn)故障問(wèn)題,在Cassandra中,也借鑒了該技術(shù),在BT和電驢的中,也采用了類(lèi)似算法。

  虛擬節(jié)點(diǎn)技術(shù):該技術(shù)常用于分布式數(shù)據(jù)分片中。具體應(yīng)用場(chǎng)景是:有一大坨數(shù)據(jù)(maybe TB級(jí)或者PB級(jí)),我們需按照某個(gè)字段(key)分片存儲(chǔ)到幾十(或者更多)臺(tái)機(jī)器上,同時(shí)想盡量負(fù)載均衡且容易擴(kuò)展。傳統(tǒng)的做法是:Hash(key) mod N,這種方法最大缺點(diǎn)是不容易擴(kuò)展,即:增加或者減少機(jī)器均會(huì)導(dǎo)致數(shù)據(jù)全部重分布,代價(jià)忒大。于是乎,新技術(shù)誕生了,其中一種是上面提到的DHT,現(xiàn)在已經(jīng)被很多大型系統(tǒng)采用,還有一種是對(duì)“Hash(key) mod N”的改進(jìn):假設(shè)我們要將數(shù)據(jù)分不到20臺(tái)機(jī)器上,傳統(tǒng)做法是hash(key) mod 20,而改進(jìn)后,N取值要遠(yuǎn)大于20,比如是20000000,然后我們采用額外一張表記錄每個(gè)節(jié)點(diǎn)存儲(chǔ)的key的模值,比如:

  node1:0~1000000

  node2:1000001~2000000

  。。。。。。

  這樣,當(dāng)添加一個(gè)新的節(jié)點(diǎn)時(shí),只需將每個(gè)節(jié)點(diǎn)上部分?jǐn)?shù)據(jù)移動(dòng)給新節(jié)點(diǎn),同時(shí)修改一下這個(gè)表即可。

  Thrift:Thrift是一個(gè)跨語(yǔ)言的RPC框架,分別解釋一下“RPC”和“跨語(yǔ)言”,RPC是遠(yuǎn)程過(guò)程調(diào)用,其使用方式與調(diào)用一個(gè)普通函數(shù)一樣,但執(zhí)行體發(fā)生在遠(yuǎn)程機(jī)器上?缯Z(yǔ)言是指不同語(yǔ)言之間進(jìn)行通信,比如c/s架構(gòu)中,server端采用C++編寫(xiě),client端采用PHP編寫(xiě),怎樣讓兩者之間通信,thrift是一種很好的方式。


【機(jī)械工程師英語(yǔ)面試】相關(guān)文章:

機(jī)械工程師英語(yǔ)自我介紹12-09

應(yīng)聘機(jī)械工程師英語(yǔ)句型表達(dá)07-04

接到華大基因設(shè)備工程師面試,我本來(lái)也是學(xué)機(jī)械的07-11

機(jī)械工程師簡(jiǎn)歷07-03

機(jī)械工程師崗位04-23

機(jī)械工程師簡(jiǎn)歷02-27

機(jī)械結(jié)構(gòu)工程師的職責(zé)10-18

機(jī)械的看過(guò)來(lái),機(jī)械工藝工程師工資?07-14

英語(yǔ)面試04-09

機(jī)械面試問(wèn)題及答案09-19