- 工厂里面有两种类型的工人:A类型的工人的工作是生产面包,B类型的工人的工作是搬运面包。现在有一个仓库,最多可以容纳20个面包。
- A类型的工人有5个,不断生产面包放入仓库中。
- B类型的工人有4个,不断将仓库中的面包搬运出仓库。
** 请模拟面包生产和搬运的过程。 **
提示:
- 当仓库满了的时候,A类型的工人暂停生产面包,等待仓库未满的时候继续生产。
- 当仓库空了的时候,B类型的工人暂停搬运面包,等待仓库中有搬运的面包时,再开始搬运。
知识点:
多线程、同步、数据结构
- 获取在上海和深圳上市公司的所有股票代码和名称并保存为文本(格式:代码=名称)。
- 新浪接口:http://hq.sinajs.cn/list=sh601006 (list后面的参数为股票代码)
- 返回格式:var hq_str_sh601006="大秦铁路,6.360,6.350,6……"等
- 如图:
提示: - 深证上市公司代码格式:sz00####(后面四位为数字),如sz008972,sz005763
- 上海上市公司代码格式:sh60####(后面四位为数字),如sh600035,sh605602
- 可能要使用的类:
- HttpClient等相关类,用于发起请求
- 文件操作相关类,用于操作文件
*知识点:*
模拟请求、字符串与文件操作
-
这个题目有多种解法:
- 线程之间的通信:使用Object.await(),notify()等方法可以实现目的;
- 使用阻塞队列:这种方法简单一点,我用的就是这种;
- ...
题目一代码
本来我觉得这个题目也不是很难,但是可能是代码量多了一点,所以大家这个题目普遍做的不完美,有很多小错误,比如:乱码、没有获取到所有数据以及字符串操作有问题等;这个题目逻辑稍微有点复杂,那么代码块(方法)的划分就显得非常重要了。
我们把问题拆分来看:
- 首先是构造url
- 在不知道哪些是股票代码的情况下,我们可以把数字全部遍历一次把正确的代码获取到,sh6000001 - sh609999;
- 然后发起请求,获得数据
- 不知道大家注意到没有,一次请求可以带很多个代码参数的,这样可以减少请求次数节约很多时间。** (出一个附加题,能不能把请求时间压缩到7秒以内!) **
- 对数据进行处理,过滤掉垃圾数据
- 最后写入文件
题目二代码