w********p 发帖数: 948 | 1 下面这个是收到的coding exercise, 烦请帮忙看看。
Please design, code and send back a complete, production ready module,
第一步:
* if CLI parameter is “-g [foler_name]"
** generates 100 files in a specified folder, named from 001.txt to 100.txt
** each file contains 10,000 text lines
** each line is a space separated list of random 10 integers
** each integer contains 8 digits
** prints file generation timing statistics
*** per file
*** total
第二步
* if CLI parameter is “-s [foler_name]"
** reads 10 files from a specified folder, named from 01.txt to 10.txt and
prints out time it took to finish reading all files
** puts all the numbers into a map, with file name being the key
** uses fork/join paradigm to map/reduce this map in order to sort all the
numbers in the shortest possible time
** outputs results into a single file, with the same line structure, named
res.txt in the same folder
** prints how long it took to
*** read the files
*** sort the numbers
*** write the file
我没有java multithread 或者java concurrency的经验。
所以这句“uses fork/join paradigm to map/reduce this map”不是很懂。
第二步是不是有个Hashmap> map, 然后用Fork把每个
value -- arrayList 的integer排序?
Join的时候,再merge所有的ArrayList? 再写到file里
这个具体的fork/join咋整的。是用 java 7 的fork/join framework 吗? http://homes.cs.washington.edu/~djg/teachingMaterials/spac/grossmanSPAC_forkJoinFramework.html
http://fahdshariff.blogspot.com/2012/08/java-7-forkjoin-framewo
求指导?
还有我理解的有偏差不?
还有linux 下fork明明是create child process
咋到了java fork/join 里就是multithread 呢?
谢谢。 |
j**********3 发帖数: 3211 | |
p*********g 发帖数: 116 | |
b*****n 发帖数: 618 | 4 我觉得就是你说的那样。
用Java的forkjoin framework,
input size大就继续fork,然后merge结果返回上一层。
一个JVM只有一个process,concurrency只能通过multithread实现。
fork到底是什么不重要吧。对你解决问题有什么影响么。。 |
w********p 发帖数: 948 | 5 非常谢谢。
【在 j**********3 的大作中提到】 : 菜鸟不会,帮你把帖子顶起来哈
|
w********p 发帖数: 948 | 6 非常谢谢。
【在 p*********g 的大作中提到】 : 有趣 mark 下。
|
w********p 发帖数: 948 | 7 其实这题是merge sort 的 java concurrency 版本
目前打算用 java 8 stream 和 java.nio来做。不过很多细节还是不了解怎么处理。
【在 b*****n 的大作中提到】 : 我觉得就是你说的那样。 : 用Java的forkjoin framework, : input size大就继续fork,然后merge结果返回上一层。 : 一个JVM只有一个process,concurrency只能通过multithread实现。 : fork到底是什么不重要吧。对你解决问题有什么影响么。。
|
b*****n 发帖数: 618 | 8 Why do you need stream and nio for this problem?
你写的大概就是stream怎么搞map reduce的一种实现方式。
nio你需要用来做什么?aynch同时处理多个文件?感觉不是这道题目考查的地方。
如果不用forkjoin的话应该是可以的,但是貌似这里说了一定要forkjoin,所以你可能
想太多了。
【在 w********p 的大作中提到】 : 其实这题是merge sort 的 java concurrency 版本 : 目前打算用 java 8 stream 和 java.nio来做。不过很多细节还是不了解怎么处理。
|
w********p 发帖数: 948 | 9 就是指定一定要用forkjoin。 不是想太多。
这道题考的就是同时处理多个文件。这个是经典的hadoop的考题,说白了,是模
拟hadoop 的程序。不是简单的java刷题算法。
如果您懂Java8, nio还请指教。我要如何同时handle多个文件的处理。给个链接啊,
关键词啥的都好。
我找了好多links,都没有发现到底怎么整。
多谢了。
【在 b*****n 的大作中提到】 : Why do you need stream and nio for this problem? : 你写的大概就是stream怎么搞map reduce的一种实现方式。 : nio你需要用来做什么?aynch同时处理多个文件?感觉不是这道题目考查的地方。 : 如果不用forkjoin的话应该是可以的,但是貌似这里说了一定要forkjoin,所以你可能 : 想太多了。
|
b*****n 发帖数: 618 | 10 You are totally on the wrong track.
nio只是为了提供channel做IO读写,根本不是这个题目考察的地方。
一个thread写一个file不行么?nio跟hadoop有什么必然联系?
建议你先把一些基本概念理清楚了再说。
【在 w********p 的大作中提到】 : 就是指定一定要用forkjoin。 不是想太多。 : 这道题考的就是同时处理多个文件。这个是经典的hadoop的考题,说白了,是模 : 拟hadoop 的程序。不是简单的java刷题算法。 : 如果您懂Java8, nio还请指教。我要如何同时handle多个文件的处理。给个链接啊, : 关键词啥的都好。 : 我找了好多links,都没有发现到底怎么整。 : 多谢了。
|
|
|
A*******e 发帖数: 2419 | 11 楼主在编程版说这是作业。合着顶着面试题名义来骗答案的。
【在 w********p 的大作中提到】 : 就是指定一定要用forkjoin。 不是想太多。 : 这道题考的就是同时处理多个文件。这个是经典的hadoop的考题,说白了,是模 : 拟hadoop 的程序。不是简单的java刷题算法。 : 如果您懂Java8, nio还请指教。我要如何同时handle多个文件的处理。给个链接啊, : 关键词啥的都好。 : 我找了好多links,都没有发现到底怎么整。 : 多谢了。
|
w********p 发帖数: 948 | 12 这个是面试,拿回家的写的作业啊。
我还查了下字典。作业是什么意思?
“教师给学生布置的功课;
部队给士兵布置的训练性的军事活动;
生产单位给工人或工作人员布置的生产活动:课外 ~│野外~│~计划。”
如果是上课的作业,自然有老师,同学和TA,没有必要在这里骗啊。
这种题,本来出现的就少,应该鼓励才是啊。
【在 A*******e 的大作中提到】 : 楼主在编程版说这是作业。合着顶着面试题名义来骗答案的。
|
w********p 发帖数: 948 | 13 我想用nio是因为,我想用Stream API (parallel streams use common fork-join
thread pool)
不过fork-join 和Parallel stream 哪个更快,是有争议的。
参看:From Imperative Programming to Fork/Join to Parallel Streams in Java 8
http://www.infoq.com/articles/forkjoin-to-parallel-streams
Fork/Join Framework vs. Parallel Streams vs. ExecutorService: The Ultimate
Fork/Join Benchmark
http://blog.takipi.com/forkjoin-framework-vs-parallel-streams-v
这题并不是要在hadoop上写,而是借用了map reduce 的概念。参看forkjoin 和Stream
的其他reference.
【在 b*****n 的大作中提到】 : You are totally on the wrong track. : nio只是为了提供channel做IO读写,根本不是这个题目考察的地方。 : 一个thread写一个file不行么?nio跟hadoop有什么必然联系? : 建议你先把一些基本概念理清楚了再说。
|
p*********g 发帖数: 116 | 14 不是当场做,回家做的就叫homework
【在 A*******e 的大作中提到】 : 楼主在编程版说这是作业。合着顶着面试题名义来骗答案的。
|
w********p 发帖数: 948 | 15 现在明白了。nio 和Stream没有必然的关系。
没有nio的基本概率的说。
谢谢你的耐心。估计之前看我的回复会着急上火。呵呵。
【在 b*****n 的大作中提到】 : You are totally on the wrong track. : nio只是为了提供channel做IO读写,根本不是这个题目考察的地方。 : 一个thread写一个file不行么?nio跟hadoop有什么必然联系? : 建议你先把一些基本概念理清楚了再说。
|
b*****n 发帖数: 618 | 16 赞,不用这么客气,问题解决了就好。
【在 w********p 的大作中提到】 : 现在明白了。nio 和Stream没有必然的关系。 : 没有nio的基本概率的说。 : 谢谢你的耐心。估计之前看我的回复会着急上火。呵呵。
|
S**********5 发帖数: 896 | |
w********p 发帖数: 948 | 18 程序终于吭哧吭哧写完了。
公司说要和我面聊suggestion. 头疼。不知道要建议个啥。
恳请大牛们批评指教。与其被别人challenge, 不如在这预先知道的说。一定发包子感
谢的说。
https://github.com/selinaGit/SortNFiles
为了搏眼球,牺牲下隐私。貌似无盐,切勿下载哦, 否则是小猪🐷
还有主要的reference 是下面这个link. 照葫芦画瓢的说。
http://www.oracle.com/technetwork/articles/java/fork-join-42260
我想请教下在上面的link里为什么要用static method return new object.
而不是 用非static method "public Document fromFile(File file)" 然后 new
WordCounter obj
调用obj.Document fromFile(File file)
没有concurrency 的经验。问题有点傻。求教的说。
我的理解是这样的话,fork之前,file就read到list里了,file reading不会
是多线程一起run。
class Document {
private final List lines;
Document(List lines) {
this.lines = lines;
}
List getLines() {
return this.lines;
}
static Document fromFile(File file) throws IOException {
List lines = new LinkedList<>();
try(BufferedReader reader = new BufferedReader(new FileReader(file))
) {
String line = reader.readLine();
while (line != null) {
lines.add(line);
line = reader.readLine();
}
}
return new Document(lines);
}
} |