Redian新闻
>
有两道Java多线程的面试题能不能帮我看看?
avatar
有两道Java多线程的面试题能不能帮我看看?# Programming - 葵花宝典
L*d
1
5月份开始,wire transfer要收费,有谁能解释一下,这个具体是什么吗?
是自己在不同银行之间的账户吗?
是用Bill Pay付钱的账户吗?
谢谢!
avatar
g*y
2
父母上次来美国延期过. 这次申请需要交延期批准信的原件还是复印件. 如果是原件,
使馆会退还吗? 另外, 需要提交我的财力证明吗?
Thanks!!!
avatar
s*y
3
该方法要去除list的所有null,因为输入的list非常、非常大,请问如何尽可能地改进
这个方法?
public void removeAllNull(LinkedList f) {
List lock = new ArrayList();
for (int i = 0; i < f.size(); i++) {
synchronized (lock) {
if (f.get(i) == null) {
lock = new ArrayList();
f.remove(i);
}
lock.add(f);
}
}
}
输入:[1, 2, null, 3, null, 4, null, 5, null, 6]
输出:[1, 2, 3, 4, 5, 6]
还有一道题,多线程共同扫描DNA,主线程在多线程中启动scanDNA方法,每个线程都有
一个私有的dnaList,每个线程共享一个“results”对象来向主线程报告进度,
成功扫描次数必须精确。请改正和修改scanDNA方法以提高任务性能。
private interface DNA {
public boolean scan();
}
public void scanDNA(List dnaList, Properties results) {
synchronized (results) {
Iterator i = dnaList.iterator();
Object lock = new Object();
while (i.hasNext()) {
if (i.next().scan()) {
String key = "Successful Scans Performed";
synchronized (lock) {
results.setProperty(key, String.valueOf(Integer.valueOf(
results.getProperty(key)) + 1));
}
}
}
}
}
avatar
k*t
4
是电汇!

【在 L*******d 的大作中提到】
: 5月份开始,wire transfer要收费,有谁能解释一下,这个具体是什么吗?
: 是自己在不同银行之间的账户吗?
: 是用Bill Pay付钱的账户吗?
: 谢谢!

avatar
g*g
5
No.1 is not a multithread program, I don't see why you need lock there. If
you are able to use Java 8, try parallel Stream. If you are using Java 7 and
under, split the list using Guava and run ExecutorService with
CountDownLatch or blocking on futures for coordination.
No.2 Use a ConcurrentHashMap with AtomicInteger.

【在 s****y 的大作中提到】
: 该方法要去除list的所有null,因为输入的list非常、非常大,请问如何尽可能地改进
: 这个方法?
: public void removeAllNull(LinkedList f) {
: List lock = new ArrayList();
: for (int i = 0; i < f.size(); i++) {
: synchronized (lock) {
: if (f.get(i) == null) {
: lock = new ArrayList();
: f.remove(i);
: }

avatar
e*2
6
Java 7有RecursiveTask,挺好的。

and

【在 g*****g 的大作中提到】
: No.1 is not a multithread program, I don't see why you need lock there. If
: you are able to use Java 8, try parallel Stream. If you are using Java 7 and
: under, split the list using Guava and run ExecutorService with
: CountDownLatch or blocking on futures for coordination.
: No.2 Use a ConcurrentHashMap with AtomicInteger.

avatar
e*2
7
话说Matlab也是用Java做的,为什么多线程那么慢?我觉得没人会用Matlab的Parallel
库。

【在 e********2 的大作中提到】
: Java 7有RecursiveTask,挺好的。
:
: and

avatar
n*t
8
这两道题在实际编程中基本上没用.

【在 s****y 的大作中提到】
: 该方法要去除list的所有null,因为输入的list非常、非常大,请问如何尽可能地改进
: 这个方法?
: public void removeAllNull(LinkedList f) {
: List lock = new ArrayList();
: for (int i = 0; i < f.size(); i++) {
: synchronized (lock) {
: if (f.get(i) == null) {
: lock = new ArrayList();
: f.remove(i);
: }

avatar
s*y
9

and
第二题能不能帮我写个例子?

【在 g*****g 的大作中提到】
: No.1 is not a multithread program, I don't see why you need lock there. If
: you are able to use Java 8, try parallel Stream. If you are using Java 7 and
: under, split the list using Guava and run ExecutorService with
: CountDownLatch or blocking on futures for coordination.
: No.2 Use a ConcurrentHashMap with AtomicInteger.

avatar
g*g
10
ConcurrentMap map;
map.get(key).incrementAndGet();
avatar
s*y
11

如果我只要一个变量,是不是可以只用AtomicInteger?不加ConcurrentHashMap不影响
性能吧?
AtomicInteger a = new AtomicInteger();
a.incrementAndGet();

【在 g*****g 的大作中提到】
: ConcurrentMap map;
: map.get(key).incrementAndGet();

avatar
g*g
12
可以,不过既然只有一个变量,为啥要弄个Properties.

【在 s****y 的大作中提到】
:
: 如果我只要一个变量,是不是可以只用AtomicInteger?不加ConcurrentHashMap不影响
: 性能吧?
: AtomicInteger a = new AtomicInteger();
: a.incrementAndGet();

avatar
s*y
13

估计是题目想增加些难度,所以加个Properties。
题中要求Each thread provided with its own private share of the work (the
list, individual to each thread),是不是要为每个线程传入一个新的对象(实现
Callable的),每个对象的list都是私有的?

【在 g*****g 的大作中提到】
: 可以,不过既然只有一个变量,为啥要弄个Properties.
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。