摘要:最寒冷,面試跳槽不能等馬上就月份了,所謂的金三銀四招聘季。在中有兩種模式,分別是線程池和信號(hào)量,說到這里大家明白了吧,信號(hào)量的作用。感興趣的同學(xué)可以去了解下,講了線程,線程池,鎖,,等內(nèi)容。
2019最寒冷,面試跳槽不能等
馬上就3月份了,所謂的金三銀四招聘季。2019年也許是互聯(lián)網(wǎng)最冷清的一年,很多知名的大型互聯(lián)網(wǎng)公司都裁員過冬。當(dāng)然也有一些公司還在持續(xù)招人的,比如阿里就宣稱不裁員,反而要增加更多的就業(yè)機(jī)會(huì)。
面試大公司的職位,基礎(chǔ)顯得很重要,在并發(fā)編程這塊問的自然也比較多。對(duì)于一個(gè)Java程序員而言,能否熟練掌握并發(fā)編程是判斷他優(yōu)秀與否的重要標(biāo)準(zhǔn)之一。因?yàn)椴l(fā)編程是Java語言中最為晦澀的知識(shí)點(diǎn),它涉及操作系統(tǒng)、內(nèi)存、CPU、編程語言等多方面的基礎(chǔ)能力,更為考驗(yàn)一個(gè)程序員的內(nèi)功。
今天我們就來聊聊Java中的Semaphore(信號(hào)量)在面試過程中會(huì)有哪些問題,以及如何回答。
問題一:什么是信號(hào)量?信號(hào)量就相當(dāng)于一個(gè)計(jì)數(shù)器,通常用來限制線程的數(shù)量。每個(gè)線程操作前會(huì)先獲取一個(gè)許可證,邏輯處理完成之后就歸還這個(gè)許可證。
就好比我們?nèi)ゾW(wǎng)吧上網(wǎng),信號(hào)量初始化的大小就好比網(wǎng)吧中所有的電腦。當(dāng)有人交費(fèi)開機(jī)之后,可用電腦的數(shù)量就少了1臺(tái)。依次類推,當(dāng)有人下機(jī)之后可用的電腦數(shù)量又多了。當(dāng)機(jī)器被用完之后新來的客人就只能等待前面的人下機(jī),這就是歸還許可證。
問題二:信號(hào)量的應(yīng)用場景?信號(hào)量的核心功能就是用來對(duì)資源做一定的限制,防止出現(xiàn)崩塌現(xiàn)象。最適用的應(yīng)用場景那就是限流,通過限流來保護(hù)對(duì)應(yīng)的資源。
在Spring Cloud中我們會(huì)用Hystrix來保護(hù)服務(wù),進(jìn)行熔斷降級(jí)。在Hystrix中有兩種模式,分別是線程池和信號(hào)量,說到這里大家明白了吧,信號(hào)量的作用。
在限流層面,最簡單的實(shí)現(xiàn)可以用信號(hào)量來實(shí)現(xiàn)本地限流操作,集群限流必須得依賴第三方中間件,比如Redis。
問題三:你有在項(xiàng)目中使用過信號(hào)量嗎?這個(gè)問題那就得根據(jù)你的實(shí)際情況來說明了,如果確實(shí)沒用用過,你可以稍微構(gòu)思一下,在哪些業(yè)務(wù)場景下可以使用,然后封裝下,對(duì)吧,搞Java的怎么能不會(huì)封裝呢,然后侃侃而談,我用過啊,我在那個(gè)啥....用過啊....為了滿足xxx的需求啊。。。
比如:在我們的爬蟲系統(tǒng)中,都會(huì)通過多線程的方式去爬取數(shù)據(jù),而有些小型網(wǎng)站,并發(fā)能力不是特別強(qiáng),線程數(shù)一上去就很慢,然后服務(wù)出現(xiàn)504,502最后爬取不了,這個(gè)時(shí)候就需要對(duì)并發(fā)抓取量做一些限制了,這個(gè)時(shí)候就可以用信號(hào)量來進(jìn)行限制。
還有些并發(fā)量強(qiáng)的網(wǎng)站,能抗住很多的請(qǐng)求,但是人家的反爬取策略做的好啊,請(qǐng)求數(shù)量稍微多一點(diǎn)就能識(shí)別你是機(jī)器,給你封了,這也是需要做一些限制。
剩下的就靠你自己吹牛啦。。。
public class SemaphoreDemo { public static void main(String[] args) { ExecutorService executorService = Executors.newFixedThreadPool(10); Semaphore semaphore = new Semaphore(2); for (;;) { executorService.execute(() -> { try { semaphore.acquire(); System.out.println("抓取數(shù)據(jù)邏輯"); } catch (Exception e) { e.printStackTrace(); } finally { semaphore.release(); } }); } } }總結(jié)推薦
我這邊只是列舉了簡單的三個(gè)問題,實(shí)際面試中可能問的更深入,在并發(fā)這塊我也不是什么高手,我也是一直在學(xué)習(xí)的過程中,其實(shí)在2年之前吧,我自己也錄制過一套并發(fā)的課程,在我的網(wǎng)站猿天地上面。感興趣的同學(xué)可以去了解下,講了線程,線程池,鎖,CountDownLatch,Semaphore等內(nèi)容。
歡迎加入我的知識(shí)星球,一起交流技術(shù),免費(fèi)學(xué)習(xí)猿天地的課程(http://cxytiandi.com/course)文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/73508.html
摘要:作為面試官,我是如何甄別應(yīng)聘者的包裝程度語言和等其他語言的對(duì)比分析和主從復(fù)制的原理詳解和持久化的原理是什么面試中經(jīng)常被問到的持久化與恢復(fù)實(shí)現(xiàn)故障恢復(fù)自動(dòng)化詳解哨兵技術(shù)查漏補(bǔ)缺最易錯(cuò)過的技術(shù)要點(diǎn)大掃盲意外宕機(jī)不難解決,但你真的懂?dāng)?shù)據(jù)恢復(fù)嗎每秒 作為面試官,我是如何甄別應(yīng)聘者的包裝程度Go語言和Java、python等其他語言的對(duì)比分析 Redis和MySQL Redis:主從復(fù)制的原理詳...
摘要:作為面試官,我是如何甄別應(yīng)聘者的包裝程度語言和等其他語言的對(duì)比分析和主從復(fù)制的原理詳解和持久化的原理是什么面試中經(jīng)常被問到的持久化與恢復(fù)實(shí)現(xiàn)故障恢復(fù)自動(dòng)化詳解哨兵技術(shù)查漏補(bǔ)缺最易錯(cuò)過的技術(shù)要點(diǎn)大掃盲意外宕機(jī)不難解決,但你真的懂?dāng)?shù)據(jù)恢復(fù)嗎每秒 作為面試官,我是如何甄別應(yīng)聘者的包裝程度Go語言和Java、python等其他語言的對(duì)比分析 Redis和MySQL Redis:主從復(fù)制的原理詳...
閱讀 3916·2021-11-24 11:14
閱讀 3367·2021-11-22 13:53
閱讀 3944·2021-11-11 16:54
閱讀 1660·2021-10-13 09:49
閱讀 1261·2021-10-08 10:05
閱讀 3433·2021-09-22 15:57
閱讀 1788·2021-08-16 11:01
閱讀 1003·2019-08-30 15:55