真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

go語言面試100道 go語言筆試題

面試問題總結(jié)(一)Golang

使用go語言的好處: go語言的設(shè)計(jì)是務(wù)實(shí)的, go在針對(duì)并發(fā)上進(jìn)行了優(yōu)化, 并且支持大規(guī)模高并發(fā), 又由于單一的碼格式, 相比于其他語言更具有可讀性, 在垃圾回收上比java和Python更有效, 因?yàn)樗呛统绦蛲瑫r(shí)執(zhí)行的.

發(fā)展壯大離不開廣大客戶長(zhǎng)期以來的信賴與支持,我們將始終秉承“誠信為本、服務(wù)至上”的服務(wù)理念,堅(jiān)持“二合一”的優(yōu)良服務(wù)模式,真誠服務(wù)每家企業(yè),認(rèn)真做好每個(gè)細(xì)節(jié),不斷完善自我,成就企業(yè),實(shí)現(xiàn)共贏。行業(yè)涉及成都陽臺(tái)護(hù)欄等,在重慶網(wǎng)站建設(shè)公司、營銷型網(wǎng)站建設(shè)、WAP手機(jī)網(wǎng)站、VI設(shè)計(jì)、軟件開發(fā)等項(xiàng)目上具有豐富的設(shè)計(jì)經(jīng)驗(yàn)。

1. 進(jìn)程, 線程, 協(xié)程的區(qū)別, 協(xié)程的優(yōu)勢(shì)

2. 講一下GMP模型(重點(diǎn))

3. Go的GC, 混合寫屏障(重點(diǎn))

4. go的Slice和數(shù)組的區(qū)別, slice的擴(kuò)容原理(重點(diǎn))

5. 講一下channel,實(shí)現(xiàn)原理(重點(diǎn))

6. 講一下Go的Map的實(shí)現(xiàn)原理, 是否線程安全, 如何實(shí)現(xiàn)安全(重點(diǎn))

7. new 和 make 的區(qū)別

8. 說一下內(nèi)存逃逸

9. 函數(shù)傳指針和傳值有什么區(qū)別

10. goroutine之間的通信方式

11. 測(cè)試是怎么做的(單元測(cè)試, 壓力測(cè)試)

12. 堆和棧的區(qū)別

go面試題整理(附帶部分自己的解答)

原文:【 】

如果有解答的不對(duì)的,麻煩各位在評(píng)論寫出來~

go的調(diào)度原理是基于GMP模型,G代表一個(gè)goroutine,不限制數(shù)量;M=machine,代表一個(gè)線程,最大1萬,所有G任務(wù)還是在M上執(zhí)行;P=processor代表一個(gè)處理器,每一個(gè)允許的M都會(huì)綁定一個(gè)G,默認(rèn)與邏輯CPU數(shù)量相等(通過runtime.GOMAXPROCS(runtime.NumCPU())設(shè)置)。

go調(diào)用過程:

可以能,也可以不能。

因?yàn)間o存在不能使用==判斷類型:map、slice,如果struct包含這些類型的字段,則不能比較。

這兩種類型也不能作為map的key。

類似棧操作,后進(jìn)先出。

因?yàn)間o的return是一個(gè)非原子性操作,比如語句 return i ,實(shí)際上分兩步進(jìn)行,即將i值存入棧中作為返回值,然后執(zhí)行跳轉(zhuǎn),而defer的執(zhí)行時(shí)機(jī)正是跳轉(zhuǎn)前,所以說defer執(zhí)行時(shí)還是有機(jī)會(huì)操作返回值的。

select的case的表達(dá)式必須是一個(gè)channel類型,所有case都會(huì)被求值,求值順序自上而下,從左至右。如果多個(gè)case可以完成,則會(huì)隨機(jī)執(zhí)行一個(gè)case,如果有default分支,則執(zhí)行default分支語句。如果連default都沒有,則select語句會(huì)一直阻塞,直到至少有一個(gè)IO操作可以進(jìn)行。

break關(guān)鍵字可跳出select的執(zhí)行。

goroutine管理、信息傳遞。context的意思是上下文,在線程、協(xié)程中都有這個(gè)概念,它指的是程序單元的一個(gè)運(yùn)行狀態(tài)、現(xiàn)場(chǎng)、快照,包含。context在多個(gè)goroutine中是并發(fā)安全的。

應(yīng)用場(chǎng)景:

例子參考:

waitgroup

channel

len:切片的長(zhǎng)度,訪問時(shí)間復(fù)雜度為O(1),go的slice底層是對(duì)數(shù)組的引用。

cap:切片的容量,擴(kuò)容是以這個(gè)值為標(biāo)準(zhǔn)。默認(rèn)擴(kuò)容是2倍,當(dāng)達(dá)到1024的長(zhǎng)度后,按1.25倍。

擴(kuò)容:每次擴(kuò)容slice底層都將先分配新的容量的內(nèi)存空間,再將老的數(shù)組拷貝到新的內(nèi)存空間,因?yàn)檫@個(gè)操作不是并發(fā)安全的。所以并發(fā)進(jìn)行append操作,讀到內(nèi)存中的老數(shù)組可能為同一個(gè),最終導(dǎo)致append的數(shù)據(jù)丟失。

共享:slice的底層是對(duì)數(shù)組的引用,因此如果兩個(gè)切片引用了同一個(gè)數(shù)組片段,就會(huì)形成共享底層數(shù)組。當(dāng)sliec發(fā)生內(nèi)存的重新分配(如擴(kuò)容)時(shí),會(huì)對(duì)共享進(jìn)行隔斷。詳細(xì)見下面例子:

make([]Type,len,cap)

map的底層是hash table(hmap類型),對(duì)key值進(jìn)行了hash,并將結(jié)果的低八位用于確定key/value存在于哪個(gè)bucket(bmap類型)。再將高八位與bucket的tophash進(jìn)行依次比較,確定是否存在。出現(xiàn)hash沖撞時(shí),會(huì)通過bucket的overflow指向另一個(gè)bucket,形成一個(gè)單向鏈表。每個(gè)bucket存儲(chǔ)8個(gè)鍵值對(duì)。

如果要實(shí)現(xiàn)map的順序讀取,需要使用一個(gè)slice來存儲(chǔ)map的key并按照順序進(jìn)行排序。

利用map,如果要求并發(fā)安全,就用sync.map

要注意下set中的delete函數(shù)需要使用 delete(map) 來實(shí)現(xiàn),但是這個(gè)并不會(huì)釋放內(nèi)存,除非value也是一個(gè)子map。當(dāng)進(jìn)行多次delete后,可以使用make來重建map。

使用sync.Map來管理topic,用channel來做隊(duì)列。

參考:

多路歸并法:

pre class="vditor-reset" placeholder="" contenteditable="true" spellcheck="false"p data-block="0"(1)假設(shè)有K路a href=""數(shù)據(jù)流/a,流內(nèi)部是有序的,且流間同為升序或降序;

/pp data-block="0"(2)首先讀取每個(gè)流的第一個(gè)數(shù),如果已經(jīng)EOF,pass;

/pp data-block="0"(3)將有效的k(k可能小于K)個(gè)數(shù)比較,選出最小的那路mink,輸出,讀取mink的下一個(gè);

/pp data-block="0"(4)直到所有K路都EOF。

/p/pre

假設(shè)文件又1個(gè)G,內(nèi)存只有256M,無法將1個(gè)G的文件全部讀到內(nèi)存進(jìn)行排序。

第一步:

可以分為10段讀取,每段讀取100M的數(shù)據(jù)并排序好寫入硬盤。

假設(shè)寫入后的文件為A,B,C...10

第二步:

將A,B,C...10的第一個(gè)字符拿出來,對(duì)這10個(gè)字符進(jìn)行排序,并將結(jié)果寫入硬盤,同時(shí)記錄被寫入的字符的文件指針P。

第三步:

將剛剛排序好的9個(gè)字符再加上從指針P讀取到的P+1位數(shù)據(jù)進(jìn)行排序,并寫入硬盤。

重復(fù)二、三步驟。

go文件讀寫參考:

保證排序前兩個(gè)相等的數(shù)其在序列的前后位置順序和排序后它們兩個(gè)的前后位置順序相同的排序叫穩(wěn)定排序。

快速排序、希爾排序、堆排序、直接選擇排序不是穩(wěn)定的排序算法。

基數(shù)排序、冒泡排序、直接插入排序、折半插入排序、歸并排序是穩(wěn)定的排序算法。

參考:

head只請(qǐng)求頁面的首部。多用來判斷網(wǎng)頁是否被修改和超鏈接的有效性。

get請(qǐng)求頁面信息,并返回實(shí)例的主體。

參考:

401:未授權(quán)的訪問。

403: 拒絕訪問。

普通的http連接是客戶端連接上服務(wù)端,然后結(jié)束請(qǐng)求后,由客戶端或者服務(wù)端進(jìn)行http連接的關(guān)閉。下次再發(fā)送請(qǐng)求的時(shí)候,客戶端再發(fā)起一個(gè)連接,傳送數(shù)據(jù),關(guān)閉連接。這么個(gè)流程反復(fù)。但是一旦客戶端發(fā)送connection:keep-alive頭給服務(wù)端,且服務(wù)端也接受這個(gè)keep-alive的話,兩邊對(duì)上暗號(hào),這個(gè)連接就可以復(fù)用了,一個(gè)http處理完之后,另外一個(gè)http數(shù)據(jù)直接從這個(gè)連接走了。減少新建和斷開TCP連接的消耗。這個(gè)可以在Nginx設(shè)置,

這個(gè)keepalive_timout時(shí)間值意味著:一個(gè)http產(chǎn)生的tcp連接在傳送完最后一個(gè)響應(yīng)后,還需要hold住keepalive_timeout秒后,才開始關(guān)閉這個(gè)連接。

特別注意TCP層的keep alive和http不是一個(gè)意思。TCP的是指:tcp連接建立后,如果客戶端很長(zhǎng)一段時(shí)間不發(fā)送消息,當(dāng)連接很久沒有收到報(bào)文,tcp會(huì)主動(dòng)發(fā)送一個(gè)為空的報(bào)文(偵測(cè)包)給對(duì)方,如果對(duì)方收到了并且回復(fù)了,證明對(duì)方還在。如果對(duì)方?jīng)]有報(bào)文返回,重試多次之后則確認(rèn)連接丟失,斷開連接。

tcp的keep alive可通過

net.ipv4.tcp_keepalive_intvl = 75 // 當(dāng)探測(cè)沒有確認(rèn)時(shí),重新發(fā)送探測(cè)的頻度。缺省是75秒。

net.ipv4.tcp_keepalive_probes = 9 //在認(rèn)定連接失效之前,發(fā)送多少個(gè)TCP的keepalive探測(cè)包。缺省值是9。這個(gè)值乘以tcp_keepalive_intvl之后決定了,一個(gè)連接發(fā)送了keepalive之后可以有多少時(shí)間沒有回應(yīng)

net.ipv4.tcp_keepalive_time = 7200 //當(dāng)keepalive起用的時(shí)候,TCP發(fā)送keepalive消息的頻度。缺省是2小時(shí)。一般設(shè)置為30分鐘1800

修改:

可以

tcp是面向連接的,upd是無連接狀態(tài)的。

udp相比tcp沒有建立連接的過程,所以更快,同時(shí)也更安全,不容易被攻擊。upd沒有阻塞控制,因此出現(xiàn)網(wǎng)絡(luò)阻塞不會(huì)使源主機(jī)的發(fā)送效率降低。upd支持一對(duì)多,多對(duì)多等,tcp是點(diǎn)對(duì)點(diǎn)傳輸。tcp首部開銷20字節(jié),udp8字節(jié)。

udp使用場(chǎng)景:視頻通話、im聊天等。

time-wait表示客戶端等待服務(wù)端返回關(guān)閉信息的狀態(tài),closed_wait表示服務(wù)端得知客戶端想要關(guān)閉連接,進(jìn)入半關(guān)閉狀態(tài)并返回一段TCP報(bào)文。

time-wait作用:

解決辦法:

close_wait:

被動(dòng)關(guān)閉,通常是由于客戶端忘記關(guān)閉tcp連接導(dǎo)致。

根據(jù)業(yè)務(wù)來啊~

重要指標(biāo)是cardinality(不重復(fù)數(shù)量),這個(gè)數(shù)量/總行數(shù)如果過?。ㄚ吔?)代表索引基本沒意義,比如sex性別這種。

另外查詢不要使用select *,根據(jù)select的條件+where條件做組合索引,盡量實(shí)現(xiàn)覆蓋索引,避免回表。

僵尸進(jìn)程:

即子進(jìn)程先于父進(jìn)程退出后,子進(jìn)程的PCB需要其父進(jìn)程釋放,但是父進(jìn)程并沒有釋放子進(jìn)程的PCB,這樣的子進(jìn)程就稱為僵尸進(jìn)程,僵尸進(jìn)程實(shí)際上是一個(gè)已經(jīng)死掉的進(jìn)程。

孤兒進(jìn)程:

一個(gè)父進(jìn)程退出,而它的一個(gè)或多個(gè)子進(jìn)程還在運(yùn)行,那么那些子進(jìn)程將成為孤兒進(jìn)程。孤兒進(jìn)程將被init進(jìn)程(進(jìn)程號(hào)為1)所收養(yǎng),并由init進(jìn)程對(duì)它們完成狀態(tài)收集工作。

子進(jìn)程死亡需要父進(jìn)程來處理,那么意味著正常的進(jìn)程應(yīng)該是子進(jìn)程先于父進(jìn)程死亡。當(dāng)父進(jìn)程先于子進(jìn)程死亡時(shí),子進(jìn)程死亡時(shí)沒父進(jìn)程處理,這個(gè)死亡的子進(jìn)程就是孤兒進(jìn)程。

但孤兒進(jìn)程與僵尸進(jìn)程不同的是,由于父進(jìn)程已經(jīng)死亡,系統(tǒng)會(huì)幫助父進(jìn)程回收處理孤兒進(jìn)程。所以孤兒進(jìn)程實(shí)際上是不占用資源的,因?yàn)樗K究是被系統(tǒng)回收了。不會(huì)像僵尸進(jìn)程那樣占用ID,損害運(yùn)行系統(tǒng)。

原文鏈接:

產(chǎn)生死鎖的四個(gè)必要條件:

(1) 互斥條件:一個(gè)資源每次只能被一個(gè)進(jìn)程使用。

(2) 請(qǐng)求與保持條件:一個(gè)進(jìn)程因請(qǐng)求資源而阻塞時(shí),對(duì)已獲得的資源保持不放。

(3) 不剝奪條件:進(jìn)程已獲得的資源,在末使用完之前,不能強(qiáng)行剝奪。

(4) 循環(huán)等待條件:若干進(jìn)程之間形成一種頭尾相接的循環(huán)等待資源關(guān)系。

避免方法:

端口占用:lsof -i:端口號(hào) 或者 nestat

cpu、內(nèi)存占用:top

發(fā)送信號(hào):kill -l 列出所有信號(hào),然后用 kill [信號(hào)變化] [進(jìn)程號(hào)]來執(zhí)行。如kill -9 453。強(qiáng)制殺死453進(jìn)程

git log:查看提交記錄

git diff :查看變更記錄

git merge:目標(biāo)分支改變,而源分支保持原樣。優(yōu)點(diǎn):保留提交歷史,保留分支結(jié)構(gòu)。但會(huì)有大量的merge記錄

git rebase:將修改拼接到最新,復(fù)雜的記錄變得優(yōu)雅,單個(gè)操作變得(revert)很簡(jiǎn)單;缺點(diǎn):

git revert:反做指定版本,會(huì)新生成一個(gè)版本

git reset:重置到某個(gè)版本,中間版本全部丟失

etcd、Consul

pprof

節(jié)省空間(非葉子節(jié)點(diǎn)不存儲(chǔ)數(shù)據(jù),相對(duì)b tree的優(yōu)勢(shì)),減少I/O次數(shù)(節(jié)省的空間全部存指針地址,讓樹變的矮胖),范圍查找方便(相對(duì)hash的優(yōu)勢(shì))。

explain

其他的見:

runtime2.go 中關(guān)于 p 的定義: 其中 runnext 指針決定了下一個(gè)要運(yùn)行的 g,根據(jù)英文的注釋大致意思是說:

所以當(dāng)設(shè)置 runtime.GOMAXPROCS(1) 時(shí),此時(shí)只有一個(gè) P,創(chuàng)建的 g 依次加入 P, 當(dāng)最后一個(gè)即 i==9 時(shí),加入的最后 一個(gè) g 將會(huì)繼承當(dāng)前主 goroutinue 的剩余時(shí)間片繼續(xù)執(zhí)行,所以會(huì)先輸出 9, 之后再依次執(zhí)行 P 隊(duì)列中其它的 g。

方法一:

方法二:

[圖片上傳失敗...(image-4ef445-1594976286098)]

方法1:to_days,返回給的日期從0開始算的天數(shù)。

方法2:data_add。向日期添加指定時(shí)間間隔

[圖片上傳失敗...(image-b67b10-1594976286098)]

golang面試題2之判斷字符串中字符是否全都不同

請(qǐng)實(shí)現(xiàn) 個(gè)算法,確定 個(gè)字符串的所有字符【是否全都不同】。這 我們要求【不允

許使 額外的存儲(chǔ)結(jié)構(gòu)】。 給定 個(gè)string,請(qǐng)返回 個(gè)bool值,true代表所有字符全都

不同,false代表存在相同的字符。 保證字符串中的字符為【ASCII字符】。字符串的

度 于等于【3000】。

這 有 個(gè)重點(diǎn),第 個(gè)是 ASCII字符 , ASCII字符 字符 共有256個(gè),其中128個(gè)是常

字符,可以在鍵盤上輸 。128之后的是鍵盤上 法找到的。

然后是全部不同,也就是字符串中的字符沒有重復(fù)的,再次,不準(zhǔn)使 額外的儲(chǔ)存結(jié)

構(gòu),且字符串 于等于3000。

如果允許其他額外儲(chǔ)存結(jié)構(gòu),這個(gè)題 很好做。如果不允許的話,可以使 golang內(nèi)置

的 式實(shí)現(xiàn)。

通過 strings.Count 函數(shù)判斷:

使 的是golang內(nèi)置 法 strings.Count ,可以 來判斷在 個(gè)字符串中包含

的另外 個(gè)字符串的數(shù)量

還有不同的方法同樣可以實(shí)現(xiàn),你了解嗎?

推薦go相關(guān)技術(shù) 專欄

gRPC-go源碼剖析與實(shí)戰(zhàn)_帶你走進(jìn)gRPC-go的源碼世界-CSDN博客

徹底理解Golang Map

本文目錄如下,閱讀本文后,將一網(wǎng)打盡下面Golang Map相關(guān)面試題

Go中的map是一個(gè)指針,占用8個(gè)字節(jié),指向hmap結(jié)構(gòu)體; 源碼 src/runtime/map.go 中可以看到map的底層結(jié)構(gòu)

每個(gè)map的底層結(jié)構(gòu)是hmap,hmap包含若干個(gè)結(jié)構(gòu)為bmap的bucket數(shù)組。每個(gè)bucket底層都采用鏈表結(jié)構(gòu)。接下來,我們來詳細(xì)看下map的結(jié)構(gòu)

bmap 就是我們常說的“桶”,一個(gè)桶里面會(huì)最多裝 8 個(gè) key,這些 key 之所以會(huì)落入同一個(gè)桶,是因?yàn)樗鼈兘?jīng)過哈希計(jì)算后,哈希結(jié)果是“一類”的,關(guān)于key的定位我們?cè)趍ap的查詢和插入中詳細(xì)說明。在桶內(nèi),又會(huì)根據(jù) key 計(jì)算出來的 hash 值的高 8 位來決定 key 到底落入桶內(nèi)的哪個(gè)位置(一個(gè)桶內(nèi)最多有8個(gè)位置)。

bucket內(nèi)存數(shù)據(jù)結(jié)構(gòu)可視化如下:

注意到 key 和 value 是各自放在一起的,并不是 key/value/key/value/... 這樣的形式。源碼里說明這樣的好處是在某些情況下可以省略掉 padding字段,節(jié)省內(nèi)存空間。

當(dāng) map 的 key 和 value 都不是指針,并且 size 都小于 128 字節(jié)的情況下,會(huì)把 bmap 標(biāo)記為不含指針,這樣可以避免 gc 時(shí)掃描整個(gè) hmap。但是,我們看 bmap 其實(shí)有一個(gè) overflow 的字段,是指針類型的,破壞了 bmap 不含指針的設(shè)想,這時(shí)會(huì)把 overflow 移動(dòng)到 extra 字段來。

map是個(gè)指針,底層指向hmap,所以是個(gè)引用類型

golang 有三個(gè)常用的高級(jí)類型 slice 、map、channel, 它們都是 引用類型 ,當(dāng)引用類型作為函數(shù)參數(shù)時(shí),可能會(huì)修改原內(nèi)容數(shù)據(jù)。

golang 中沒有引用傳遞,只有值和指針傳遞。所以 map 作為函數(shù)實(shí)參傳遞時(shí)本質(zhì)上也是值傳遞,只不過因?yàn)?map 底層數(shù)據(jù)結(jié)構(gòu)是通過指針指向?qū)嶋H的元素存儲(chǔ)空間,在被調(diào)函數(shù)中修改 map,對(duì)調(diào)用者同樣可見,所以 map 作為函數(shù)實(shí)參傳遞時(shí)表現(xiàn)出了引用傳遞的效果。

因此,傳遞 map 時(shí),如果想修改map的內(nèi)容而不是map本身,函數(shù)形參無需使用指針

map 底層數(shù)據(jù)結(jié)構(gòu)是通過指針指向?qū)嶋H的元素 存儲(chǔ)空間 ,這種情況下,對(duì)其中一個(gè)map的更改,會(huì)影響到其他map

map 在沒有被修改的情況下,使用 range 多次遍歷 map 時(shí)輸出的 key 和 value 的順序可能不同。這是 Go 語言的設(shè)計(jì)者們有意為之,在每次 range 時(shí)的順序被隨機(jī)化,旨在提示開發(fā)者們,Go 底層實(shí)現(xiàn)并不保證 map 遍歷順序穩(wěn)定,請(qǐng)大家不要依賴 range 遍歷結(jié)果順序。

map 本身是無序的,且遍歷時(shí)順序還會(huì)被隨機(jī)化,如果想順序遍歷 map,需要對(duì) map key 先排序,再按照 key 的順序遍歷 map。

map默認(rèn)是并發(fā)不安全的,原因如下:

Go 官方在經(jīng)過了長(zhǎng)時(shí)間的討論后,認(rèn)為 Go map 更應(yīng)適配典型使用場(chǎng)景(不需要從多個(gè) goroutine 中進(jìn)行安全訪問),而不是為了小部分情況(并發(fā)訪問),導(dǎo)致大部分程序付出加鎖代價(jià)(性能),決定了不支持。

場(chǎng)景: 2個(gè)協(xié)程同時(shí)讀和寫,以下程序會(huì)出現(xiàn)致命錯(cuò)誤:fatal error: concurrent map writes

如果想實(shí)現(xiàn)map線程安全,有兩種方式:

方式一:使用讀寫鎖 map + sync.RWMutex

方式二:使用golang提供的 sync.Map

sync.map是用讀寫分離實(shí)現(xiàn)的,其思想是空間換時(shí)間。和map+RWLock的實(shí)現(xiàn)方式相比,它做了一些優(yōu)化:可以無鎖訪問read map,而且會(huì)優(yōu)先操作read map,倘若只操作read map就可以滿足要求(增刪改查遍歷),那就不用去操作write map(它的讀寫都要加鎖),所以在某些特定場(chǎng)景中它發(fā)生鎖競(jìng)爭(zhēng)的頻率會(huì)遠(yuǎn)遠(yuǎn)小于map+RWLock的實(shí)現(xiàn)方式。

golang中map是一個(gè)kv對(duì)集合。底層使用hash table,用鏈表來解決沖突 ,出現(xiàn)沖突時(shí),不是每一個(gè)key都申請(qǐng)一個(gè)結(jié)構(gòu)通過鏈表串起來,而是以bmap為最小粒度掛載,一個(gè)bmap可以放8個(gè)kv。在哈希函數(shù)的選擇上,會(huì)在程序啟動(dòng)時(shí),檢測(cè) cpu 是否支持 aes,如果支持,則使用 aes hash,否則使用 memhash。

map有3鐘初始化方式,一般通過make方式創(chuàng)建

map的創(chuàng)建通過生成匯編碼可以知道,make創(chuàng)建map時(shí)調(diào)用的底層函數(shù)是 runtime.makemap 。如果你的map初始容量小于等于8會(huì)發(fā)現(xiàn)走的是 runtime.fastrand 是因?yàn)槿萘啃∮?時(shí)不需要生成多個(gè)桶,一個(gè)桶的容量就可以滿足

makemap函數(shù)會(huì)通過 fastrand 創(chuàng)建一個(gè)隨機(jī)的哈希種子,然后根據(jù)傳入的 hint 計(jì)算出需要的最小需要的桶的數(shù)量,最后再使用 makeBucketArray 創(chuàng)建用于保存桶的數(shù)組,這個(gè)方法其實(shí)就是根據(jù)傳入的 B 計(jì)算出的需要?jiǎng)?chuàng)建的桶數(shù)量在內(nèi)存中分配一片連續(xù)的空間用于存儲(chǔ)數(shù)據(jù),在創(chuàng)建桶的過程中還會(huì)額外創(chuàng)建一些用于保存溢出數(shù)據(jù)的桶,數(shù)量是 2^(B-4) 個(gè)。初始化完成返回hmap指針。

找到一個(gè) B,使得 map 的裝載因子在正常范圍內(nèi)

Go 語言中讀取 map 有兩種語法:帶 comma 和 不帶 comma。當(dāng)要查詢的 key 不在 map 里,帶 comma 的用法會(huì)返回一個(gè) bool 型變量提示 key 是否在 map 中;而不帶 comma 的語句則會(huì)返回一個(gè) value 類型的零值。如果 value 是 int 型就會(huì)返回 0,如果 value 是 string 類型,就會(huì)返回空字符串。

map的查找通過生成匯編碼可以知道,根據(jù) key 的不同類型,編譯器會(huì)將查找函數(shù)用更具體的函數(shù)替換,以優(yōu)化效率:

函數(shù)首先會(huì)檢查 map 的標(biāo)志位 flags。如果 flags 的寫標(biāo)志位此時(shí)被置 1 了,說明有其他協(xié)程在執(zhí)行“寫”操作,進(jìn)而導(dǎo)致程序 panic。這也說明了 map 對(duì)協(xié)程是不安全的。

key經(jīng)過哈希函數(shù)計(jì)算后,得到的哈希值如下(主流64位機(jī)下共 64 個(gè) bit 位):

m: 桶的個(gè)數(shù)

從buckets 通過 hash m 得到對(duì)應(yīng)的bucket,如果bucket正在擴(kuò)容,并且沒有擴(kuò)容完成,則從oldbuckets得到對(duì)應(yīng)的bucket

計(jì)算hash所在桶編號(hào):

用上一步哈希值最后的 5 個(gè) bit 位,也就是 01010 ,值為 10,也就是 10 號(hào)桶(范圍是0~31號(hào)桶)

計(jì)算hash所在的槽位:

用上一步哈希值哈希值的高8個(gè)bit 位,也就是 10010111 ,轉(zhuǎn)化為十進(jìn)制,也就是151,在 10 號(hào) bucket 中尋找** tophash 值(HOB hash)為 151* 的 槽位**,即為key所在位置,找到了 2 號(hào)槽位,這樣整個(gè)查找過程就結(jié)束了。

如果在 bucket 中沒找到,并且 overflow 不為空,還要繼續(xù)去 overflow bucket 中尋找,直到找到或是所有的 key 槽位都找遍了,包括所有的 overflow bucket。

通過上面找到了對(duì)應(yīng)的槽位,這里我們?cè)僭敿?xì)分析下key/value值是如何獲取的:

bucket 里 key 的起始地址就是 unsafe.Pointer(b)+dataOffset。第 i 個(gè) key 的地址就要在此基礎(chǔ)上跨過 i 個(gè) key 的大?。欢覀冇种?,value 的地址是在所有 key 之后,因此第 i 個(gè) value 的地址還需要加上所有 key 的偏移。

通過匯編語言可以看到,向 map 中插入或者修改 key,最終調(diào)用的是 mapassign 函數(shù)。

實(shí)際上插入或修改 key 的語法是一樣的,只不過前者操作的 key 在 map 中不存在,而后者操作的 key 存在 map 中。

mapassign 有一個(gè)系列的函數(shù),根據(jù) key 類型的不同,編譯器會(huì)將其優(yōu)化為相應(yīng)的“快速函數(shù)”。

我們只用研究最一般的賦值函數(shù) mapassign 。

map的賦值會(huì)附帶著map的擴(kuò)容和遷移,map的擴(kuò)容只是將底層數(shù)組擴(kuò)大了一倍,并沒有進(jìn)行數(shù)據(jù)的轉(zhuǎn)移,數(shù)據(jù)的轉(zhuǎn)移是在擴(kuò)容后逐步進(jìn)行的,在遷移的過程中每進(jìn)行一次賦值(access或者delete)會(huì)至少做一次遷移工作。

1.判斷map是否為nil

每一次進(jìn)行賦值/刪除操作時(shí),只要oldbuckets != nil 則認(rèn)為正在擴(kuò)容,會(huì)做一次遷移工作,下面會(huì)詳細(xì)說下遷移過程

根據(jù)上面查找過程,查找key所在位置,如果找到則更新,沒找到則找空位插入即可

經(jīng)過前面迭代尋找動(dòng)作,若沒有找到可插入的位置,意味著需要擴(kuò)容進(jìn)行插入,下面會(huì)詳細(xì)說下擴(kuò)容過程

通過匯編語言可以看到,向 map 中刪除 key,最終調(diào)用的是 mapdelete 函數(shù)

刪除的邏輯相對(duì)比較簡(jiǎn)單,大多函數(shù)在賦值操作中已經(jīng)用到過,核心還是找到 key 的具體位置。尋找過程都是類似的,在 bucket 中挨個(gè) cell 尋找。找到對(duì)應(yīng)位置后,對(duì) key 或者 value 進(jìn)行“清零”操作,將 count 值減 1,將對(duì)應(yīng)位置的 tophash 值置成 Empty

再來說觸發(fā) map 擴(kuò)容的時(shí)機(jī):在向 map 插入新 key 的時(shí)候,會(huì)進(jìn)行條件檢測(cè),符合下面這 2 個(gè)條件,就會(huì)觸發(fā)擴(kuò)容:

1、裝載因子超過閾值

源碼里定義的閾值是 6.5 (loadFactorNum/loadFactorDen),是經(jīng)過測(cè)試后取出的一個(gè)比較合理的因子

我們知道,每個(gè) bucket 有 8 個(gè)空位,在沒有溢出,且所有的桶都裝滿了的情況下,裝載因子算出來的結(jié)果是 8。因此當(dāng)裝載因子超過 6.5 時(shí),表明很多 bucket 都快要裝滿了,查找效率和插入效率都變低了。在這個(gè)時(shí)候進(jìn)行擴(kuò)容是有必要的。

對(duì)于條件 1,元素太多,而 bucket 數(shù)量太少,很簡(jiǎn)單:將 B 加 1,bucket 最大數(shù)量( 2^B )直接變成原來 bucket 數(shù)量的 2 倍。于是,就有新老 bucket 了。注意,這時(shí)候元素都在老 bucket 里,還沒遷移到新的 bucket 來。新 bucket 只是最大數(shù)量變?yōu)樵瓉碜畲髷?shù)量的 2 倍( 2^B * 2 ) 。

2、overflow 的 bucket 數(shù)量過多

在裝載因子比較小的情況下,這時(shí)候 map 的查找和插入效率也很低,而第 1 點(diǎn)識(shí)別不出來這種情況。表面現(xiàn)象就是計(jì)算裝載因子的分子比較小,即 map 里元素總數(shù)少,但是 bucket 數(shù)量多(真實(shí)分配的 bucket 數(shù)量多,包括大量的 overflow bucket)

不難想像造成這種情況的原因:不停地插入、刪除元素。先插入很多元素,導(dǎo)致創(chuàng)建了很多 bucket,但是裝載因子達(dá)不到第 1 點(diǎn)的臨界值,未觸發(fā)擴(kuò)容來緩解這種情況。之后,刪除元素降低元素總數(shù)量,再插入很多元素,導(dǎo)致創(chuàng)建很多的 overflow bucket,但就是不會(huì)觸發(fā)第 1 點(diǎn)的規(guī)定,你能拿我怎么辦?overflow bucket 數(shù)量太多,導(dǎo)致 key 會(huì)很分散,查找插入效率低得嚇人,因此出臺(tái)第 2 點(diǎn)規(guī)定。這就像是一座空城,房子很多,但是住戶很少,都分散了,找起人來很困難

對(duì)于條件 2,其實(shí)元素沒那么多,但是 overflow bucket 數(shù)特別多,說明很多 bucket 都沒裝滿。解決辦法就是開辟一個(gè)新 bucket 空間,將老 bucket 中的元素移動(dòng)到新 bucket,使得同一個(gè) bucket 中的 key 排列地更緊密。這樣,原來,在 overflow bucket 中的 key 可以移動(dòng)到 bucket 中來。結(jié)果是節(jié)省空間,提高 bucket 利用率,map 的查找和插入效率自然就會(huì)提升。

由于 map 擴(kuò)容需要將原有的 key/value 重新搬遷到新的內(nèi)存地址,如果有大量的 key/value 需要搬遷,會(huì)非常影響性能。因此 Go map 的擴(kuò)容采取了一種稱為“漸進(jìn)式”的方式,原有的 key 并不會(huì)一次性搬遷完畢,每次最多只會(huì)搬遷 2 個(gè) bucket。

上面說的 hashGrow() 函數(shù)實(shí)際上并沒有真正地“搬遷”,它只是分配好了新的 buckets,并將老的 buckets 掛到了 oldbuckets 字段上。真正搬遷 buckets 的動(dòng)作在 growWork() 函數(shù)中,而調(diào)用 growWork() 函數(shù)的動(dòng)作是在 mapassign 和 mapdelete 函數(shù)中。也就是插入或修改、刪除 key 的時(shí)候,都會(huì)嘗試進(jìn)行搬遷 buckets 的工作。先檢查 oldbuckets 是否搬遷完畢,具體來說就是檢查 oldbuckets 是否為 nil。

如果未遷移完畢,賦值/刪除的時(shí)候,擴(kuò)容完畢后(預(yù)分配內(nèi)存),不會(huì)馬上就進(jìn)行遷移。而是采取 增量擴(kuò)容 的方式,當(dāng)有訪問到具體 bukcet 時(shí),才會(huì)逐漸的進(jìn)行遷移(將 oldbucket 遷移到 bucket)

nevacuate 標(biāo)識(shí)的是當(dāng)前的進(jìn)度,如果都搬遷完,應(yīng)該和2^B的長(zhǎng)度是一樣的

在evacuate 方法實(shí)現(xiàn)是把這個(gè)位置對(duì)應(yīng)的bucket,以及其沖突鏈上的數(shù)據(jù)都轉(zhuǎn)移到新的buckets上。

轉(zhuǎn)移的判斷直接通過tophash 就可以,判斷tophash中第一個(gè)hash值即可

遍歷的過程,就是按順序遍歷 bucket,同時(shí)按順序遍歷 bucket 中的 key。

map遍歷是無序的,如果想實(shí)現(xiàn)有序遍歷,可以先對(duì)key進(jìn)行排序

為什么遍歷 map 是無序的?

如果發(fā)生過遷移,key 的位置發(fā)生了重大的變化,有些 key 飛上高枝,有些 key 則原地不動(dòng)。這樣,遍歷 map 的結(jié)果就不可能按原來的順序了。

如果就一個(gè)寫死的 map,不會(huì)向 map 進(jìn)行插入刪除的操作,按理說每次遍歷這樣的 map 都會(huì)返回一個(gè)固定順序的 key/value 序列吧。但是 Go 杜絕了這種做法,因?yàn)檫@樣會(huì)給新手程序員帶來誤解,以為這是一定會(huì)發(fā)生的事情,在某些情況下,可能會(huì)釀成大錯(cuò)。

Go 做得更絕,當(dāng)我們?cè)诒闅v map 時(shí),并不是固定地從 0 號(hào) bucket 開始遍歷,每次都是從一個(gè)**隨機(jī)值序號(hào)的 bucket 開始遍歷,并且是從這個(gè) bucket 的一個(gè) 隨機(jī)序號(hào)的 cell **開始遍歷。這樣,即使你是一個(gè)寫死的 map,僅僅只是遍歷它,也不太可能會(huì)返回一個(gè)固定序列的 key/value 對(duì)了。

面試常見100道問題及回答(4)

四:能力表現(xiàn)

問題:假如你流落荒島,可以擁有一本書,你會(huì)選擇哪一本?為什么?

回答:我選擇生活 百科 全書,因?yàn)榇藭r(shí)人最基本的問題是解決生存問題。

點(diǎn)評(píng):這是假設(shè)性問題,來測(cè)試應(yīng)試者的 想象力 、解決問題的能力,目的看你有沒有急才,思想有沒有條理。

問題:你喜歡你們學(xué)校嗎?你的老師怎么樣?

回答:我很喜歡學(xué)校,那是我學(xué)習(xí)、生活了四年的地方,也是我成材、成熟的人生車站。四年中也碰到了許多好老師,對(duì)我思想上引導(dǎo)、學(xué)業(yè)上指導(dǎo)、能力上輔導(dǎo),我從心里感謝他們。特別我們的英語老師,上課非常幽默,回想起來仍感到回味無窮。

點(diǎn)評(píng):每個(gè)學(xué)生對(duì)這個(gè)問題一定要持積極肯定的態(tài)度。這是主考者考察應(yīng)試者的個(gè)人品格的題目。作為一個(gè)具有高度思想覺悟和良好道德品質(zhì)的現(xiàn)代大學(xué)生,尊師愛校是應(yīng)有的品質(zhì)。此外,人們普遍認(rèn)為,一個(gè)不熱愛母校、不尊敬老師的大學(xué)畢業(yè)生,也很難談得上熱愛就業(yè)單位,尊敬單位領(lǐng)導(dǎo)及老同志。因此,因充滿激情地簡(jiǎn)單說明喜歡自己母校的原因,及老師對(duì)自己在學(xué)業(yè)和能力上的幫助和影響。

問題:談一談你在過去工作中生活中遇到的問題,以及如何解決。

回答:舉一個(gè)你在過去的工作中或生活中遇到的問題,說明你是如何解決該問題的。

點(diǎn)評(píng):判斷你對(duì)問題的分析能力,看看你有沒有團(tuán)隊(duì)精神和克服困難的信心。這也是給你一個(gè)表現(xiàn)自我的機(jī)會(huì)。

問題:你為什么想要換工作?

回答:“我想進(jìn)一步發(fā)揮我的能力”,或“我目前單位的發(fā)展機(jī)會(huì)非常有限?!?/p>

點(diǎn)評(píng):這個(gè)問題是判斷你的動(dòng)機(jī),和你處理問題的能力。切記,不要抱怨你過去或目前的雇主。

問題:為什么要錄用你?

回答:這是你要回答好的最重要的問題。根據(jù)公司目前的需要,強(qiáng)調(diào)你的背景優(yōu)勢(shì),根據(jù)工作的需求敘述一下你的能力。如果你沒有相關(guān)工作經(jīng)驗(yàn),強(qiáng)調(diào)你的其他工作經(jīng)驗(yàn)和所受的教育,適合這個(gè)工作。

點(diǎn)評(píng):確定你是不是最佳人選,看看你有沒有自信心。

問題:你為什么這么長(zhǎng)時(shí)間沒有工作?

回答:我花了很長(zhǎng)一段時(shí)間對(duì)自己的經(jīng)歷進(jìn)行了反省和總結(jié),并仔細(xì)研究了目前的就業(yè)市場(chǎng),以確定自己的目標(biāo)和方向,當(dāng)然我也有過一些工作機(jī)會(huì),但我的目的不僅僅是找一份工作,我追求的是有發(fā)展前途的未來。今天來應(yīng)聘貴公司,我覺得貴公司適合我的發(fā)展。

點(diǎn)評(píng):判斷你對(duì)難題的應(yīng)變能力,以及你對(duì)實(shí)際生活中問題的判斷和處理能力。

問題:你今后打算是什么?

回答:“我希望我能夠在這個(gè)公司里長(zhǎng)久地工作。根據(jù)自己的能力和表現(xiàn),不斷地增加工作中所擔(dān)負(fù)的責(zé)任?!?/p>

點(diǎn)評(píng):看看你真正想要得到的是什么,以判定你是否會(huì)長(zhǎng)期在公司工作。明確你的個(gè)人目標(biāo)和公司是否一致。

問題:能否介紹一下你的社會(huì)活動(dòng)能力

回答:

1.我的外交能力較強(qiáng),在校學(xué)生會(huì)我擔(dān)任外聯(lián)部長(zhǎng)。

2.我在校盡可能多地參加一些能發(fā)揮自己特長(zhǎng)的活動(dòng),使社會(huì)活動(dòng)能力得到了一定的提高。

3.我善于組織同學(xué)開展活動(dòng),如組織演講賽, 辯論 賽,知識(shí)搶答賽等等,而且活動(dòng)也較成功,從中可以證實(shí)我有一定的社會(huì)活動(dòng)能力。

4.在校期間,我曾擔(dān)任過班長(zhǎng)職務(wù)。為了把班級(jí)基礎(chǔ)文明建設(shè)搞好,組織全班同學(xué)進(jìn)行校規(guī)校紀(jì)學(xué)習(xí),集思廣益,制定了“班規(guī)十條”,并要求全班同學(xué)嚴(yán)格遵守班級(jí)紀(jì)律。經(jīng)過大家的努力,我班評(píng)為校先進(jìn)班級(jí),全班同學(xué)學(xué)習(xí)努力,團(tuán)結(jié)友愛。

點(diǎn)評(píng):

1.過于簡(jiǎn)單,草率,效果不好。

2.比較謙虛地說明自己有一定的能力,但言之無物,有些空洞。

3.如實(shí)的介紹自己曾組織過活動(dòng),但不具體。

4.通過例舉事例,來說明自己的能力,有理有據(jù),效果最佳,使主試者了解其素質(zhì)和能力。

問題:你的外語水平如何?

回答:

如果你水平高的話,對(duì)方又是懂外語的面試官你可以直接用外語進(jìn)行回答你外語所具備的能力,得到的證書或托福的考分,以表示你的能力。但表示還不夠,還需努力繼續(xù)學(xué)習(xí)。

若你的水平較低,就應(yīng)如實(shí)回答 ,講出低的原因,如筆頭翻譯不差,口語聽力稍差,或?qū)I(yè)詞匯較熟悉,人文詞匯掌握較少等。并表示你目前還在學(xué)習(xí)。

點(diǎn)評(píng):遇到的問題屬于自己的長(zhǎng)處,也不要洋洋灑灑,滔滔不絕。對(duì)方問到自己的短處,不要避而不談,或者轉(zhuǎn)移話題,其實(shí)每一個(gè)人即使是非常優(yōu)秀的人都會(huì)有自己的弱點(diǎn),這種情況下應(yīng)該正面回答對(duì)方的問題,同時(shí)如果自己認(rèn)為這是一個(gè)欠缺而又是對(duì)方的招聘條件的話,應(yīng)該積極表示自己現(xiàn)在的或者即將的行動(dòng)用來克服這方面的缺點(diǎn)。

問題:你的計(jì)算機(jī)能力如何?

回答:

如果你這方面能力較差的話,你就應(yīng)該告訴他們你的計(jì)算機(jī)能力較為欠缺,但是你目前還在繼續(xù)學(xué)習(xí)計(jì)算機(jī)。

如果能力強(qiáng)的話,就可直接告訴他們你所得到的高級(jí)或中級(jí)編程員證書,及計(jì)算機(jī)的其他能力。

點(diǎn)評(píng):遇到的問題屬于自己的長(zhǎng)處,也不要洋洋灑灑,滔滔不絕。對(duì)方問到自己的短處,不要避而不談,或者轉(zhuǎn)移話題,其實(shí)每一個(gè)人即使是非常優(yōu)秀的人都會(huì)有自己的弱點(diǎn),這種情況下應(yīng)該正面回答對(duì)方的問題,同時(shí)如果自己認(rèn)為這是一個(gè)欠缺而又是對(duì)方的招聘條件的話,應(yīng)該積極表示自己現(xiàn)在的或者即將的行動(dòng)用來克服這方面的缺點(diǎn)。

問題:你好象不適合到我們公司工作?

回答:可能在剛才的陳述中沒把問題談清楚,是我引起你的誤解。其實(shí)我對(duì)貴公司非常尊重,對(duì)公司業(yè)務(wù)也有一些了解,我想在貴公司經(jīng)過培訓(xùn)和工作后,是能夠達(dá)到貴公司要求的,請(qǐng)務(wù)必再次考慮錄用的問題。

點(diǎn)評(píng):應(yīng)答時(shí),千萬要注意不可反問對(duì)方提出的此問題的理由。此問有時(shí)也是主試者考驗(yàn)應(yīng)試者到企業(yè)的決心,和應(yīng)試者的自信心。

問題:你認(rèn)為對(duì)員工的管理嚴(yán)厲的好,還是寬松的好?

回答:我想這要因時(shí)因人而定的,不能千篇一律。有些人對(duì)嚴(yán)厲的管理 方法 反應(yīng)良好,有些人卻需要鼓勵(lì)才能做得更好。好的管理人員應(yīng)該知道怎么使他的部屬發(fā)揮更大的潛力。

點(diǎn)評(píng):你不清楚企業(yè)需要的是什么樣的管理作風(fēng),也是測(cè)試你能接受什么樣的管理風(fēng)格,如你確實(shí)不能接受他們的管理風(fēng)格,那等到錄取了再抉擇。

問題:你對(duì)營銷、管理工作如何看待?

回答:現(xiàn)在社會(huì)競(jìng)爭(zhēng)非常激烈,營銷、管理工作不是光憑熱情能干好的,它需要經(jīng)常做些調(diào)查研究,了解社會(huì)需求,提出目標(biāo)、計(jì)劃,同時(shí),需要各方面的配合,才能把工作做的更好。

點(diǎn)評(píng):應(yīng)聘者對(duì)所應(yīng)聘的崗位不能僅僅是有熱情,同時(shí)還要冷靜、理智地作出一些工作設(shè)想,這既說明了工作的積極主動(dòng)性,也表明了應(yīng)聘者是一個(gè)聰慧且思考成熟的人。

問題:如果公司與另外一家公司同時(shí)錄用你,你將如何選擇?

回答:

1.貴公司是我的第一選擇。

2.我不敢奢望有兩家公司同時(shí)看上我,即使有此情況,我還是首選貴公司。

點(diǎn)評(píng):無論你到哪家公司應(yīng)聘,都應(yīng)這么回答,在未確定最后的歸屬前,回答這個(gè)問題不能有絲毫猶豫。

問題:假如我們聘用你,但有時(shí)需要做些倒茶端水的雜務(wù),你會(huì)反對(duì)嗎?

回答:“只要需要,我不會(huì)斤斤計(jì)較?!薄叭绻锌腿说轿宜诘哪莻€(gè)部門,我會(huì)主動(dòng)倒茶端水,這些雜務(wù)只是我的工作內(nèi)容的一小部分而已。”

點(diǎn)評(píng):這是一個(gè)試探性問題,目的是觀察應(yīng)聘者的反應(yīng),以判斷你對(duì)工作的態(tài)度。因沒有任何一家公司會(huì)聘用大學(xué)畢業(yè)生專門從事雜務(wù)工作。若明確拒絕接受這類雜務(wù),則意味著拒絕接受職位,且在面試時(shí)與主試者爭(zhēng)論差別毫無意義。

問題:你喜歡什么樣的上司?

回答:

忌:“誰做我的上司都喜歡?!被颉安恢馈?/p>

應(yīng):“我本人比較喜歡有真才實(shí)學(xué),公正嚴(yán)明的上司?!?/p>

點(diǎn)評(píng):大多數(shù)應(yīng)聘者對(duì)上司的背景毫不知情,因此,用一些普通適用的公認(rèn)標(biāo)準(zhǔn)為好

問題:你對(duì)大學(xué)生就業(yè)市場(chǎng)的評(píng)價(jià)如何?

回答:這個(gè)問題很大,很難用三言兩語概括清楚。在雙向選擇,自主擇業(yè)的政策下,要就業(yè),找市場(chǎng)已被學(xué)生接受,雖然就業(yè)市場(chǎng)形勢(shì)嚴(yán)峻,但我們樂意在市場(chǎng)中參與競(jìng)爭(zhēng),選擇合適自己的職業(yè)。

點(diǎn)評(píng):主試人為測(cè)驗(yàn)應(yīng)試者分析問題與 邏輯思維 能力,有意提一些很難回答的問題?;卮鸫藛栴}時(shí)應(yīng)邊說邊想。若想好了再說,主試人會(huì)認(rèn)為你反映遲鈍。為了贏得思考的時(shí)間,開頭可以先說一句開場(chǎng)白,后面邊想邊說,分條回答。想起一條答一條,在答第一條時(shí)就想第二條,依此類推。回答完了的時(shí)候,再從中找出一兩個(gè)重點(diǎn)。這樣就容易獲得構(gòu)思敏捷,思路清晰,善于抓住要害的好評(píng)。

問題:你喜歡和何種人共事?

回答:總的說來我是一個(gè)開朗的人,我喜歡和有相同個(gè)性的人打交道。

點(diǎn)評(píng):此句意在了解求職者本身的個(gè)性特點(diǎn),并借此來分析求職者一旦進(jìn)入新的機(jī)構(gòu)后與現(xiàn)職位的其他人員的相容程度,主考官據(jù)此判斷此人是否能與其他人融洽相處。按照一句時(shí)髦的話來說,就是看看求職者是否具有團(tuán)隊(duì)精神。作為求職者,應(yīng)當(dāng)注意不要過分對(duì)此句話“躲躲閃閃”或是故意回避,回答這個(gè)問題時(shí),要先大概介紹一下自己的個(gè)性特點(diǎn),然后再說喜歡同什么樣的人相處,總之要言之有理,順理成章。

問題:小姐,假如在將來的工作中,你接待的客人要你陪跳舞,你不想跳,但不跳又不行,你會(huì)怎么辦?

回答:

1.你們是什么樣的鬼單位,在這里擺攤招舞女。”說完頭也不回?fù)P長(zhǎng)而去。

2.若是工作需要,要陪客人跳舞,跳跳也無妨。若是客人另有意思,那可約男同事一起去娛樂。

點(diǎn)評(píng):此是外貿(mào)進(jìn)出口公司在人才會(huì)上招聘秘書,單位是很正派很有聲望的企業(yè),提出這一問題,考官只是想試試求職者的口頭應(yīng)變能力和處事能力。該小姐只要冷靜下來,思考考官提出的問題,把自己的看法如實(shí)說出,作機(jī)敏的回答,就不至于失去一份很有前途的工作。

問題:你可以有三分鐘的表現(xiàn)自己的機(jī)會(huì),若表現(xiàn)得使我感興趣,就留下來,否則另請(qǐng)高就。

回答:這三分鐘的表現(xiàn),可以成為你去留的依據(jù),有的學(xué)生充分顯示實(shí)力,把握了機(jī)會(huì),有的學(xué)生則不會(huì)表現(xiàn)而被淘汰。有的學(xué)生為了顯得謙虛,盡量少講自己的優(yōu)點(diǎn),少表現(xiàn)自己,結(jié)果也失去了這個(gè)機(jī)會(huì)。

點(diǎn)評(píng):此類面試問題一般是企業(yè)總經(jīng)理面試時(shí)提的,他們的話簡(jiǎn)單明了:“你連自己都推銷不掉,你幫我推什么?要幫我推銷商品,推銷企業(yè)形象,首先學(xué)會(huì)推銷自己。”因此針對(duì)不同的面試對(duì)象,自己認(rèn)真準(zhǔn)備好幾個(gè)三分鐘是有必要的。因此,自我表現(xiàn)時(shí)要充滿自信,落落大方,態(tài)度誠懇。

問題:我們公司今年計(jì)劃一般不招女學(xué)生

回答:貴公司的用人計(jì)劃我了解,但我想性別差異并非是挑選人才的關(guān)鍵,還是要看個(gè)人的基本素質(zhì),何況我各方面表現(xiàn)都較優(yōu)秀,有些男同學(xué)還趕不上我,而且女生在貴公司的職位更能顯示女同學(xué)的優(yōu)勢(shì)。

點(diǎn)評(píng):女同學(xué)碰到此類問題,不要憤怒、憎恨,要靠耐心和韌性,回答問題不要帶怒意,要不卑不亢,充滿自信,介紹自己的優(yōu)勢(shì),有與男同學(xué)一比高低的勇氣。

問題:在工作中你怎樣看待錯(cuò)誤?

回答:

1.我盡量不出錯(cuò)誤

2.我并不擔(dān)心自己會(huì)出錯(cuò),但我能做到不重復(fù)同樣的一個(gè)錯(cuò)誤。

點(diǎn)評(píng):對(duì)回答1的公司沒有錄用。

人非圣賢,熟能無過?錯(cuò)誤是必不可少的,但關(guān)鍵是要能很快地吸取經(jīng)驗(yàn)教訓(xùn),總結(jié)經(jīng)驗(yàn)。求職也如此,不要害怕失敗,你應(yīng)牢牢記?。骸笆∧顺晒χ?!”“失敗是成功的踏腳石?!蓖ㄍ晒Φ穆窂牟黄教梗故请y免的,但是,跌倒了并不是失敗,真正的失敗是跌倒了怕不起來了?!?/p>

問題:“會(huì)打 羽毛球 嗎?”

“給你們一輛小轎車,有沒有把握學(xué)會(huì)駕駛?”

“廚房里有蔬菜,你倆能不能給我做幾樣拿手的好菜?”

回答:

男:會(huì) 女:打的不好

男:有 女:不敢保證

男:沒問題 女:做得不好

點(diǎn)評(píng):

此應(yīng)聘面試單位是一家中外合資公司,已經(jīng)過了幾道關(guān)卡的面試,此是最后復(fù)試,主考經(jīng)理是外國人,以上是閑聊中隨便地問了三個(gè)問題。最后,公司錄用了男學(xué)生,淘汰了女學(xué)生。公司對(duì)女學(xué)生的評(píng)價(jià)是:有自卑情緒,缺乏自信心,無法勝任本公司職務(wù)。其實(shí),該女同學(xué)是個(gè)不錯(cuò)的羽毛球選手。

問題:你救了我女兒,是我們家的救命恩人,對(duì)你的錄用我們會(huì)優(yōu)先考慮的。

回答:不,先生,你弄錯(cuò)了吧,我未曾救過任何人

考 官:年輕人,你說的很對(duì),是我弄錯(cuò)了,我很欣賞你的誠實(shí),我決定,不是優(yōu)先,而是你的復(fù)試已經(jīng)通過了

點(diǎn)評(píng):此問題是考官設(shè)的一個(gè)“陷阱”。一個(gè)人的優(yōu)秀品質(zhì)會(huì)引起他人喜歡的,而誠實(shí)是招聘者看重的必備品質(zhì)。因此大學(xué)生雖有良好的資歷和優(yōu)秀的學(xué)業(yè)成績(jī),更必備誠實(shí)的品格。

問題:如果你被錄用,是否馬上就可來上班?

回答:今天聽到你的聘用邀請(qǐng)十分感激,但學(xué)校里學(xué)業(yè)還未全部結(jié)束,論文撰寫正是關(guān)鍵的時(shí)候,還在準(zhǔn)備論文答辯階段,容我回去征求導(dǎo)師意見,看能否抽出時(shí)間上班,所以允許我明天正式回復(fù)。

點(diǎn)評(píng):面對(duì)開門見山的質(zhì)問,如當(dāng)時(shí)無法確定答復(fù),且自己未決定真正意愿應(yīng)允,應(yīng)考慮到事后可能還會(huì)有更讓自己心動(dòng)的工作機(jī)會(huì)。在回答時(shí)即應(yīng)巧妙預(yù)設(shè)一個(gè)轉(zhuǎn)彎的空間。同時(shí),避免得罪對(duì)方而錯(cuò)失良機(jī),這比“對(duì)不起,我還不能回答這個(gè)問題,我必須仔細(xì)考慮看看?!边@種答復(fù)圓滑的多。

問題:聽說你對(duì)XX工作(業(yè)務(wù))很精通,不妨談些你的看法吧?

回答:談不上精通,只是略知一二,可以共同探討一下。

點(diǎn)評(píng):給自己留下一點(diǎn)回旋的余地。對(duì)于此類問題,特別要謹(jǐn)慎,這往往是一個(gè)“陷阱”,是主考官有意想進(jìn)一步對(duì)求職者有更加深入的了解所設(shè)定的“圈套”。因此,求職者要小心回答問題,即使你真的對(duì)XX業(yè)務(wù)很精通,也千萬不要自以為是,否則你將面臨難度更大的問題。

問題:今天來參加面試的有近十位候選人,而我們只挑選二名,如何證明你是他們中最優(yōu)秀的呢?

回答:恐怕不能一下子講清,得具體情況具體分析,比如貴公司現(xiàn)在所最需要的是行政管理方面的人才,雖然前來應(yīng)征的都是這方面的對(duì)口人才,但我深信我在大學(xué)四年中擔(dān)任過的學(xué)生干部及組織過多次大型活動(dòng)的經(jīng)驗(yàn)已經(jīng)為我打下了扎實(shí)的基礎(chǔ),我想這一點(diǎn)恐怕也是我自認(rèn)為比較突出的一點(diǎn)。

點(diǎn)評(píng):這樣的回答可以說比較圓滑,以免主考官抓住某一“把柄”,再度發(fā)難。此問題是考察求職者隨機(jī)應(yīng)變的能力。無論你列舉多少優(yōu)點(diǎn)別人總有比你更多的優(yōu)點(diǎn),因此,你從正面去回答這樣的問題毫無意義的。

問題:依你現(xiàn)在的水平,恐怕能找到比我們企業(yè)更好的公司吧?

回答:

1.“YES”說明你這個(gè)人“身在曹營心在漢?!?/p>

2.“NO”說明你的能力有問題或是對(duì)自己自信心不足,總之你會(huì)左右為難。而如果你說“不知道”或“不清楚”。則又拒絕回答之嫌。

3.“不可一概而論?!?/p>

“或許我能找到比貴公司更好的企業(yè),但別的企業(yè)或許在對(duì)人才培養(yǎng)方面不如貴公司重視,機(jī)會(huì)也不如貴公司多,或許我找不到更好的企業(yè),我想珍惜已有的最為重要的。”

點(diǎn)評(píng):象上面這個(gè)問題以3回答最好,可以說把一個(gè)“模糊”的答案拋給主考官,做到滴水不漏。這類問題的特點(diǎn)是主考官設(shè)定了一個(gè)特定的背景式條件,讓求職者作出回答,有時(shí)任何一種條件答案都不是很理想,這時(shí)就需要用模糊語言表示。

問題:你的面試通過了,現(xiàn)在我們簽約。

回答:讓我考慮一下,我要和父母商量過再?zèng)Q定。

點(diǎn)評(píng):其實(shí)這是一種不成熟的回答,在應(yīng)聘外企時(shí)不可取得,設(shè)想如果將來讓這樣的人代表公司和客戶談判,凡事都回公司請(qǐng)示 報(bào)告 ,到手的生意也會(huì)飛了。該同學(xué)是一個(gè)條件很不錯(cuò)的人選,應(yīng)聘的是一家非常出名的跨國公司。她走后,公司馬上通知了“替補(bǔ)隊(duì)員”(為防意外,公司面試人數(shù)比正式錄取的人數(shù)總多1—2名)那位小伙子看完公司聘函立即簽了約。他表示,我就想到該公司工作。待女孩子回來。說跟家人商量好了,同意簽約,而此時(shí),那個(gè)職位已招到新人,就是那位替補(bǔ)隊(duì)員。所以當(dāng)機(jī)會(huì)來臨時(shí),千萬要抓住,猶豫就會(huì)錯(cuò)失良機(jī),后悔也無濟(jì)于事。

問題:你談戀愛了嗎?你如何看待大學(xué)生談戀愛?

回答:沒有。我個(gè)人認(rèn)為大學(xué)生最好不要談戀愛,因?yàn)榇髮W(xué)生畢竟不是很成熟,自控力比較差,因戀愛荒廢學(xué)業(yè)、不求上進(jìn)的大有人在,大學(xué)生應(yīng)集中精力搞好學(xué)業(yè)、鍛煉能力。

點(diǎn)評(píng):通過這個(gè)問題來考察應(yīng)試者的成熟程度和處理生活事務(wù)的能力,考察應(yīng)試者的人生觀和價(jià)值觀。因此,應(yīng)提高認(rèn)識(shí)的層次,從用人單位領(lǐng)導(dǎo)的角度思考問題。


當(dāng)前名稱:go語言面試100道 go語言筆試題
本文地址:http://weahome.cn/article/hjjpoj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部