由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 面试结束,晒3个 Java面试题,请大家讨论。
相关主题
问个面试题One C++ question
问一道c++面试题one C++ question
一道count frequency of all words的面试题C++: what is the output? How to interpret it?
一道面试题,求解C++ Q42: (C22)
请教ebay 的面试题一道C++问题
发两个软件组的面试题弱问个C++ 问题 (const_cast)
one C++ question新手问个C++(Thinking in C++ source code)
C++ object size一问新手请教:C++ decrement loop (转载)
相关话题的讨论汇总
话题: thread话题: 线程话题: cout话题: java话题: endl
进入JobHunting版参与讨论
1 (共1页)
s********e
发帖数: 340
1
这周面试,但是面的不成功。有两个问题不知道怎么答,请大家指教:
1. 如何使用Junit 对 多线程中的Race Condition 作单元测试?
2. 不使用Java的Concurrent包中的类,不能使用额外的存储空间,如果在一个线程遍
历一个List中的元素的同时,另一个线程修改List的元素值。 我知道
CopyOnWriteArrayList是干这个的,但是这个的原理也是Copy这个List,也是使用了额
外的存储空间。
3. 比如使用线程池的的方式产生3个线程,这3个线程是由线程池管理的,如何让这个
三个线程的执行能被排序,比如线程1结束了,线程2 继续,然后是线程3. 注意不是
自己使用implement Runnable 接口产生的线程,所以不能用Join。
j****a
发帖数: 39
2
哪公司的
c********1
发帖数: 5269
3
我用c/c++线程十几年,
用java线程5年,
都一下答不上这些问题

【在 s********e 的大作中提到】
: 这周面试,但是面的不成功。有两个问题不知道怎么答,请大家指教:
: 1. 如何使用Junit 对 多线程中的Race Condition 作单元测试?
: 2. 不使用Java的Concurrent包中的类,不能使用额外的存储空间,如果在一个线程遍
: 历一个List中的元素的同时,另一个线程修改List的元素值。 我知道
: CopyOnWriteArrayList是干这个的,但是这个的原理也是Copy这个List,也是使用了额
: 外的存储空间。
: 3. 比如使用线程池的的方式产生3个线程,这3个线程是由线程池管理的,如何让这个
: 三个线程的执行能被排序,比如线程1结束了,线程2 继续,然后是线程3. 注意不是
: 自己使用implement Runnable 接口产生的线程,所以不能用Join。

z*********n
发帖数: 1451
4
第三提我也见到过,不过是C++的,其实很简单,就是a执行完解锁b,b执行完解锁c...
开始就a解锁就行了。Java的不懂。
参考代码:
#include
#include
#include
using namespace std;
class Solution
{
mutex mutexa, mutexb, mutexc;
int N = 0;
void threada()
{
for (int i = 0; i < N; ++i)
{
mutexa.lock();
cout<<"A ";
cout< mutexb.unlock();
}
}
void threadb()
{
for (int i = 0; i < N; ++i)
{
mutexb.lock();
cout<<"B ";
cout< mutexc.unlock();
}
}
void threadc()
{
for (int i = 0; i < N; ++i)
{
mutexc.lock();
cout<<"C ";
cout< mutexa.unlock();
}
}
public:
void solve(int n)
{
N = n;
mutexb.lock();
mutexc.lock();
cout<<"M "< std::thread ta(threada, this);
std::thread tb(threadb, this);
std::thread tc(threadc, this);
ta.join();
tb.join();
tc.join();
}
};
int main()
{
Solution s;
s.solve(10);
//cout< //cout< }
y***i
发帖数: 279
5
这些问题太general, 如果是我我会尽量问清楚要求细节,最好有个例子,因为不同的
要求解决方案也不一样,而且多问的目的是弄清楚考点是啥,毕竟是面你的人来决定啥
是最佳答案。
比如一,显然最简单的你可以create several threads within the same test method
, 或者你也可以用junit自带的,如果要求是不能自己kick off thread的话,其实我不
是很清楚具体的junior method/annotation,但是显然如此常规的测试,junit 应该支
持。
二,关键是啥叫同时,if only thread safe, 你可以wrap所有的call with
synchronized,如果"同时"的要求再高一点,可以内置lock, 只在改变的时候lock,
如果lock free, 可以考虑volatile, atom之类。
三,取决于pool manager 和 pool calller/user之间的具体交互,可以弄个queue,用
之前claim, 完了以后注销之类。
我说的这些也不一定对,就是给个思路,如果问题听起来mission impossible, 那肯定
是理解或者要求有问题,一定要多问,这些和那些需要刷的题不一样,一般没啥让人脑
洞大开的trick。
y***r
发帖数: 11
6
3. thread pool with only 1 thread?

【在 s********e 的大作中提到】
: 这周面试,但是面的不成功。有两个问题不知道怎么答,请大家指教:
: 1. 如何使用Junit 对 多线程中的Race Condition 作单元测试?
: 2. 不使用Java的Concurrent包中的类,不能使用额外的存储空间,如果在一个线程遍
: 历一个List中的元素的同时,另一个线程修改List的元素值。 我知道
: CopyOnWriteArrayList是干这个的,但是这个的原理也是Copy这个List,也是使用了额
: 外的存储空间。
: 3. 比如使用线程池的的方式产生3个线程,这3个线程是由线程池管理的,如何让这个
: 三个线程的执行能被排序,比如线程1结束了,线程2 继续,然后是线程3. 注意不是
: 自己使用implement Runnable 接口产生的线程,所以不能用Join。

j**********r
发帖数: 3798
7
第三个可以用Cyclic Barrier.
z**********i
发帖数: 452
8
高手啊
前面写了半天code,都没把barrier这个词说出来,面试估计废了

【在 j**********r 的大作中提到】
: 第三个可以用Cyclic Barrier.
B********d
发帖数: 1262
9
第三个,如果是C++可以用semaphore来唤醒进程

【在 s********e 的大作中提到】
: 这周面试,但是面的不成功。有两个问题不知道怎么答,请大家指教:
: 1. 如何使用Junit 对 多线程中的Race Condition 作单元测试?
: 2. 不使用Java的Concurrent包中的类,不能使用额外的存储空间,如果在一个线程遍
: 历一个List中的元素的同时,另一个线程修改List的元素值。 我知道
: CopyOnWriteArrayList是干这个的,但是这个的原理也是Copy这个List,也是使用了额
: 外的存储空间。
: 3. 比如使用线程池的的方式产生3个线程,这3个线程是由线程池管理的,如何让这个
: 三个线程的执行能被排序,比如线程1结束了,线程2 继续,然后是线程3. 注意不是
: 自己使用implement Runnable 接口产生的线程,所以不能用Join。

c*****l
发帖数: 312
10
"不使用Java的Concurrent包中的类"

【在 j**********r 的大作中提到】
: 第三个可以用Cyclic Barrier.
相关主题
发两个软件组的面试题One C++ question
one C++ questionone C++ question
C++ object size一问C++: what is the output? How to interpret it?
进入JobHunting版参与讨论
r***s
发帖数: 737
11
这明显是不给足条件看你下面怎么问问题的。
1. 在test method里面起多个线程轻而易举,问题测的问题什么特性,
2.追问他具体正确性描述,读线程正在读的元素被删了如何处理等等。
3.吃饱了撑的用线程,用三个task扔给一个单线程的线程池完事。

【在 s********e 的大作中提到】
: 这周面试,但是面的不成功。有两个问题不知道怎么答,请大家指教:
: 1. 如何使用Junit 对 多线程中的Race Condition 作单元测试?
: 2. 不使用Java的Concurrent包中的类,不能使用额外的存储空间,如果在一个线程遍
: 历一个List中的元素的同时,另一个线程修改List的元素值。 我知道
: CopyOnWriteArrayList是干这个的,但是这个的原理也是Copy这个List,也是使用了额
: 外的存储空间。
: 3. 比如使用线程池的的方式产生3个线程,这3个线程是由线程池管理的,如何让这个
: 三个线程的执行能被排序,比如线程1结束了,线程2 继续,然后是线程3. 注意不是
: 自己使用implement Runnable 接口产生的线程,所以不能用Join。

m*****k
发帖数: 731
12
3. countdownlatch

【在 s********e 的大作中提到】
: 这周面试,但是面的不成功。有两个问题不知道怎么答,请大家指教:
: 1. 如何使用Junit 对 多线程中的Race Condition 作单元测试?
: 2. 不使用Java的Concurrent包中的类,不能使用额外的存储空间,如果在一个线程遍
: 历一个List中的元素的同时,另一个线程修改List的元素值。 我知道
: CopyOnWriteArrayList是干这个的,但是这个的原理也是Copy这个List,也是使用了额
: 外的存储空间。
: 3. 比如使用线程池的的方式产生3个线程,这3个线程是由线程池管理的,如何让这个
: 三个线程的执行能被排序,比如线程1结束了,线程2 继续,然后是线程3. 注意不是
: 自己使用implement Runnable 接口产生的线程,所以不能用Join。

z*********n
发帖数: 1451
13

傻逼玩意儿,你连code都写不出来,我就问你这个千老转CS的,我写的code你不google
能读懂不能?

【在 z**********i 的大作中提到】
: 高手啊
: 前面写了半天code,都没把barrier这个词说出来,面试估计废了

b******s
发帖数: 2919
14

这个基本思路是,线程2等待一个信号,线程1发这个信号。
最直接的是用 Condition.signal/await
自己用 Object.notify/wait() 做也简单
(实际上 Thread.join() 就是用 Object.notify/wait 实现的)
java.util.concurrency 很多 class 都可以应用到这个问题上
如 Phaser , 因为这个问题是很多其他问题的一部分。
如果线程间需要传递数据,可以用SynchronousQueue
如果想更底层一点,可以用 LockSupport.park/unpark
前面有个思路是 lock/unlock (Java可以用 Lock class)
也是同样效果。但是JAVA人的习惯是不能长时间的 hold a lock .

【在 s********e 的大作中提到】
: 这周面试,但是面的不成功。有两个问题不知道怎么答,请大家指教:
: 1. 如何使用Junit 对 多线程中的Race Condition 作单元测试?
: 2. 不使用Java的Concurrent包中的类,不能使用额外的存储空间,如果在一个线程遍
: 历一个List中的元素的同时,另一个线程修改List的元素值。 我知道
: CopyOnWriteArrayList是干这个的,但是这个的原理也是Copy这个List,也是使用了额
: 外的存储空间。
: 3. 比如使用线程池的的方式产生3个线程,这3个线程是由线程池管理的,如何让这个
: 三个线程的执行能被排序,比如线程1结束了,线程2 继续,然后是线程3. 注意不是
: 自己使用implement Runnable 接口产生的线程,所以不能用Join。

z**********i
发帖数: 452
15
你看看你写的code,人家题目说明了不能用join,你用了三个join,题目都看不清,还
刷题进了google,是不是背题的?你只会basic版c++, 连java的runnable都不知道,
以后最好别说是google的,别给google丢人行不行?

..

【在 z*********n 的大作中提到】
: 第三提我也见到过,不过是C++的,其实很简单,就是a执行完解锁b,b执行完解锁c...
: 开始就a解锁就行了。Java的不懂。
: 参考代码:
: #include
: #include
: #include
: using namespace std;
: class Solution
: {
: mutex mutexa, mutexb, mutexc;

c********1
发帖数: 5269
16
写了10几年,multiple threading applications
也不知有barrier
我理解cpu level 如何support multiple treading
debug treading issues
主要靠log files

【在 z**********i 的大作中提到】
: 高手啊
: 前面写了半天code,都没把barrier这个词说出来,面试估计废了

z**********i
发帖数: 452
17
你个傻逼贴code前年不能自己先运行一下?
几十个error,你这种离了ide和compiler一下午你估计都pass不了一个leetcode easy
跟你这种人对骂简直是浪费生命

google

【在 z*********n 的大作中提到】
:
: 傻逼玩意儿,你连code都写不出来,我就问你这个千老转CS的,我写的code你不google
: 能读懂不能?

c*******a
发帖数: 1879
18
就这个CODE,还敢说自己是在狗家。
弱智儿童写的东西也拿出来。
狗家的code review估计大家看你弱智就懒得和你说了/

..

【在 z*********n 的大作中提到】
: 第三提我也见到过,不过是C++的,其实很简单,就是a执行完解锁b,b执行完解锁c...
: 开始就a解锁就行了。Java的不懂。
: 参考代码:
: #include
: #include
: #include
: using namespace std;
: class Solution
: {
: mutex mutexa, mutexb, mutexc;

s********e
发帖数: 340
19
一个很有名的大公司。

【在 j****a 的大作中提到】
: 哪公司的
s********e
发帖数: 340
20
您这个好像不行,因为他说了,这3个线程都是自己线程池产生的,不是自己new 出来
的, 我感觉线程池中线程是类似匿名的,不能直接拿出来操作。

..

【在 z*********n 的大作中提到】
: 第三提我也见到过,不过是C++的,其实很简单,就是a执行完解锁b,b执行完解锁c...
: 开始就a解锁就行了。Java的不懂。
: 参考代码:
: #include
: #include
: #include
: using namespace std;
: class Solution
: {
: mutex mutexa, mutexb, mutexc;

1 (共1页)
进入JobHunting版参与讨论
相关主题
新手请教:C++ decrement loop (转载)请教ebay 的面试题一道
这个C++程序的运行结果是什么发两个软件组的面试题
C++ Q76: singly linked list -- 这个逆序打印有什么错?one C++ question
关于8皇后问题,这个解是O(n^2)吗?C++ object size一问
问个面试题One C++ question
问一道c++面试题one C++ question
一道count frequency of all words的面试题C++: what is the output? How to interpret it?
一道面试题,求解C++ Q42: (C22)
相关话题的讨论汇总
话题: thread话题: 线程话题: cout话题: java话题: endl