大年初一,一起嗨起來!!!
強調一句很重要的心裡話:祝大家在 2021 年,健康好運,平安幸福!
用兩個執行緒,乙個輸出數字,乙個輸出字母,交替輸出 1a2b3c4d...26z
該如何實現?
據說解決方式有上百種,但有些是脫了褲子放屁,有些是民間偏方,所以沒必要全部都知道(其實樓主也不知道具體是哪一百多種)
掌握常用的那幾個就好;為了方便,我們就以 1234567 和 abcdefg 為例進行演示
如果我們對 juc 不熟的話,那這種方式往往是我們最容易想到的
這種方式,相信大家都能寫出來,但是這裡留三個問題(面試點)
1、執行緒**中, try
中的 notify() 能否與 wait() 交換位置,為什麼
2、執行緒**中, for
下的 notify() 能否去掉,為什麼
3、上面的**能否保證一定先輸出數字,為什麼,如何保證一定先輸出數字
很多場景下,用 reentrantlock 可以替代 synchronized
,而在交叉輸出這個場景中,同樣可以替代
這種方式,寫出來應該也不難,同樣留三個問題(面試點)
1、執行緒**中, for
中的 signal() 能否與 await() 交換位置,為什麼
2、執行緒**中, for
下的 signal() 能否去掉,為什麼
3、上面的**能否保證一定先輸出數字,為什麼,如何保證一定先輸出數字
估計很多人都沒想到這種方式,直接上**
這是目前最優的解決方式,照樣留四個問題(面試點)
1、 t1.start() 能否與 t2.start() 交換位置,為什麼
3、上面的**能否保證一定先輸出數字,為什麼
4、 locksupport 的 park 、 unpark 與 object 的 wait 、 notify 有什麼異同
這種方式可能也比較難想到,直接上**
這種方式也許不太好理解,留四個問題(面試點)加深理解
1、執行緒**中, while
條件為什麼是 !=,而不是 ==
2、上面的**能否保證一定先輸出數字,為什麼
3、cas 的優缺點是什麼,適用於什麼場景
其實就是 cas 的乙個變種,直接上**
也是 cas 的乙個變種,直接上**
一般很難想象到這種方式,但卻是很有趣的一種實現方式
如果不了解 transferqueue ,那這種方式就想不到;同樣留乙個問題(面試點)
1、上面的**能否保證一定先輸出數字,為什麼
一般也比較難想到這種方式,有所了解就好
效率很低,知道有這麼回事就好
2、需要掌握的實現方式
synchronized、reentrantlock、locksupport、cas、transferqueue 這幾種實現方式必須掌握
其他的了解就好
3、如何保證一定先輸出數字
上面介紹的那些方式中,有些是不能保證一定先輸出數字的,而有些是能保證一定先輸出數字的
不能保證先輸出數字的,可以用 countdownlatch 來控制,是一種比較理想的做法
乙個有意思的面試題(1)
村子裡有100對夫妻,其中每個丈夫都瞞著自己的妻子 村里的每個妻子都能立即發現除自己丈夫之外的其他男人是否 唯獨不知道她自己的丈夫到底有沒有 村里的規矩不容忍通姦。任何乙個妻子,一旦能證明自己的男人 就必須當天把他殺死。村里的女人全都嚴格照此規矩辦事。一天,女頭領出來宣布,村里至少有乙個丈夫 請問接...
有意思的面試題
1.10個箱子,每個箱子10個蘋果,其中乙個箱子的蘋果是9兩 個,其他的都是1斤 個。要求利用乙個秤,只秤一次,找出那個裝9兩 個的箱子。1,他們都是很聰明的人 2,他們的原則是先求保命,再去多殺人 3,100顆不必都分完 4,若有重複的情況,則也算最大或最小,一併處死 3.現在北京有一套房子,20...
幾個有意思的面試題
1,abcdx9 dcba 因為9乘a不進製所以a只能是1 9乘d得個位是1所以d只能是9 同樣9乘b也不能進製只有1和0,1已屬a所以b只能是0 9乘9進8要想第二位為0,乘9的個位上必須是2,c就只有8了 所以abcd 1089 2,一艘輪船從甲港順水航行到乙港,立即逆水返回甲港。共用8小時。已...