楼赛第7期结束了,我来(另类)解答一下比赛的几道题。
一、重写equals方法
很简单也很基础,就不多说了,主要说说后两道题
二、反向输出列表
这道题是大家公认的最坑的一道题,主要还是题目描述的不清楚,读完一遍根本不知道要怎么做,也没有对应的测试用例,一共两个文件,一个是操纵文件读写的,没啥特别的,另一个是自定义了一个list,要你实现一个reverse()
方法,返回的是一个,匿名的Iterable
接口实现类,用做foreach循环
,正常的解法,可以参考一下ArrayList
的iterator()
方法实现,注意题目要求的反向输出
我来说说另类的解法,我们知道Collections
类是集合辅助类,有很多现成的方法,反转列表就有现成的实现,Collections.revese(list)
调用这个就能把list反转了,另外Iterable
接口是集合类都实现了的接口,所以说我们可以这样实现reversed()
方法:
1 | public Iterable<T> reversed(){ |
试了一下可以pass,(这里调用方法改变的是当前集合的顺序,正常的当然不能这么做,其实也可以在reversed()
方法里clone一个集合反转返回)
生产者消费者
上边第二题解法虽然另类但也算是编程实现,这个题就。。。。。
这个题比第二题好理解一些,但也没好太多,要实现一个生产者一个消费者,使用阻塞队列传递消息,还要保证不是10个都生产完再消费,看了大家的评论也都说要使用Thread.sleep()
来暂停线程达到效果,而且sleep时间还不能太长,否则很容易判题超时,看了下要输出的内容,好吧,我们直接来另类的解法吧,Producer.java:
1 | class Producer implements Runnable { |
Consumer.java
1 | class Consumer implements Runnable { |
是的你没看错,就是这么实现的,然后提交就pass了。。。
后记
上边的方法都能通过但不知道实验楼有没有人审核答案,如果有。。就肯定没戏
再说一下这个比赛还挺有意思的,就是题本身表达的不太准确,有时候要试很多次才能通过,再就是实验环境有时候很卡,真的很卡。希望实验楼的技术人员及出题的人员能把这个楼赛越办越好吧。
本文链接: http://blog.jisuye.com/2017/05/22/lousai_7_answer/
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!