- 工廠里面有兩種類型的工人:A類型的工人的工作是生產(chǎn)面包,B類型的工人的工作是搬運(yùn)面包。現(xiàn)在有一個(gè)倉庫,最多可以容納20個(gè)面包。
- A類型的工人有5個(gè),不斷生產(chǎn)面包放入倉庫中。
- B類型的工人有4個(gè),不斷將倉庫中的面包搬運(yùn)出倉庫。
** 請(qǐng)模擬面包生產(chǎn)和搬運(yùn)的過程。 **
提示:
- 當(dāng)倉庫滿了的時(shí)候,A類型的工人暫停生產(chǎn)面包,等待倉庫未滿的時(shí)候繼續(xù)生產(chǎn)。
- 當(dāng)倉庫空了的時(shí)候,B類型的工人暫停搬運(yùn)面包,等待倉庫中有搬運(yùn)的面包時(shí),再開始搬運(yùn)。
知識(shí)點(diǎn):
多線程、同步、數(shù)據(jù)結(jié)構(gòu)
- 獲取在上海和深圳上市公司的所有股票代碼和名稱并保存為文本(格式:代碼=名稱)。
- 新浪接口:http://hq.sinajs.cn/list=sh601006 (list后面的參數(shù)為股票代碼)
- 返回格式:var hq_str_sh601006="大秦鐵路,6.360,6.350,6……"等
- 如圖:
?訪問結(jié)果圖
提示: - 深證上市公司代碼格式:sz00####(后面四位為數(shù)字),如sz008972,sz005763
- 上海上市公司代碼格式:sh60####(后面四位為數(shù)字),如sh600035,sh605602
- 可能要使用的類:
- HttpClient等相關(guān)類,用于發(fā)起請(qǐng)求
- 文件操作相關(guān)類,用于操作文件
*知識(shí)點(diǎn):*
模擬請(qǐng)求、字符串與文件操作
-
這個(gè)題目有多種解法:
- 線程之間的通信:使用Object.await(),notify()等方法可以實(shí)現(xiàn)目的;
- 使用阻塞隊(duì)列:這種方法簡單一點(diǎn),我用的就是這種;
- ...
題目一代碼
本來我覺得這個(gè)題目也不是很難,但是可能是代碼量多了一點(diǎn),所以大家這個(gè)題目普遍做的不完美,有很多小錯(cuò)誤,比如:亂碼、沒有獲取到所有數(shù)據(jù)以及字符串操作有問題等;這個(gè)題目邏輯稍微有點(diǎn)復(fù)雜,那么代碼塊(方法)的劃分就顯得非常重要了。
我們把問題拆分來看:
- 首先是構(gòu)造url
- 在不知道哪些是股票代碼的情況下,我們可以把數(shù)字全部遍歷一次把正確的代碼獲取到,sh6000001 - sh609999;
- 然后發(fā)起請(qǐng)求,獲得數(shù)據(jù)
- 不知道大家注意到?jīng)]有,一次請(qǐng)求可以帶很多個(gè)代碼參數(shù)的,這樣可以減少請(qǐng)求次數(shù)節(jié)約很多時(shí)間。** (出一個(gè)附加題,能不能把請(qǐng)求時(shí)間壓縮到7秒以內(nèi)!) **
- 對(duì)數(shù)據(jù)進(jìn)行處理,過濾掉垃圾數(shù)據(jù)
- 最后寫入文件
題目二代碼