多线程面试题
一份多线程面试题及参考答案
华为机试:HJ49,多线程
华为机试:HJ49,多线程
华为机试:HJ49多线程windows版本答案
你用过线程池吗?
如何实现多线程无锁同步
多机数据处理
有 10 台机器,每台机器上保存着 10 亿个 64-bit 整数(不一定刚好 10 亿个,可能有上下几千万的浮动),一共约 100 亿个整数(其实一共也就 80GB 数据,不算大,选这个量级是考虑了 VPS 虚拟机的容量,便于实验)。编程求出:
- 这些数的平均数。
- 这些数的中位数。
- 出现次数最多的 100 万个数。
- (附加题)对这 100 亿个整数排序,结果顺序存放到这 10 台机器上。
- (附加健壮性要求)你的程序应该能正确应对输入数据的各种分布(均匀、正态、Zipf)。
- (附加伸缩性要求)你的程序应该能平滑扩展到更多的机器,支持更大的数据量。比如 20 台机器、一共 200 亿个整数,或者 50 台机器、一共 500 亿个整数。
N-皇后问题的多机并行求解。
利用多台机器求出 N-皇后问题有多少个解。(注意目前的世界纪录是 N = 26,A000170 - OEIS )
- 8 皇后问题在单机上的运算时间是毫秒级,有 92 个解,编程实现之。
- 研究 N-皇后问题的并行算法,写一个单机多线程程序,争取达到线性加速比(以 CPU 核数计)。再设法将算法扩展到多机并行。
- 用 10 台 8 核的机器(一共 80 个 CPU cores),求解 19-皇后和 20-皇后问题,看看分别需要多少运行时间。你的方案能否平滑扩展到更多的机器?
- (附加题)如果这 10 台机器的型号不一,有 8 核也有 16 核,有旧 CPU 也有更快的新 CPU,你该采用何种负载均衡策略,以求缩短求解问题的时间(至少比 plain round-robin 算法要好)?。
如何学习多线程
1.先学操作系统
重点学习并发和同步这两章。
操作系统:学堂在线慕课(MOOC)平台
英文不是很好,打算学这个。
Udacity的Advanced OS公开课:Advanced Operating Systems from Udacity
在本课程中,学习最先进的操作系统,涵盖了各种平台——手机、多核、并行系统、分布式系统和云计算。
MIT的操作系统公开课以及该课程的youtube视频
2.然后学习pthreads
POSIX Thread Programming或者book:Programming with POSIX Threads
《win32多线程程序设计》
The C++ Standard Library 2nd介绍了C++11中添加的并发特性
《Windows核心编程》更是介绍多线程编程的好书
《C++ Concurrency in Action》中文版《C++并发编程》
3.分布式进阶
《Linux多线程服务端编程》
斯坦福:CS224b
MIT:6.824
参考文献:
C++多线程编程资料清单
《win32多线程程序设计》读书笔记