分类目录: 编程基础

一道有趣的并发编程试题

今天看到《如何优雅的让3个线程打印ABC》这篇文章,就像文章里讲到的,3个线程顺序打印ABC确实没有必要,很浪费,单纯考察多线程的控制机制,面稍微有点窄,也是挺鸡肋的。实际上,既要多线程并发执行,又要输出结果有序,这样的场景还真有,类似于存储系统里面的单个文件顺序存储,但是又要支持多个客户端并发写,即:多个线程并发提交IO,由一个类似于总线的机制排序,打包,按包写盘,完成后同时通知各个等待响应的客户端。这里不打算介绍复杂的IO逻辑,想拿一个简单的模型来实例解读一下。

在之前公司经常给面试者出一道题:计算 [10亿, 12亿) 范围内的质数,要求:

  • 使用多线程并发计算
  • 边计算边输出,按照从小到大排序输出
  • 内存使用量越小越优,已知的可用内存量不足以存储所有计算结果
  • 耗时越短越优

同上面的题目一样,没有华丽的算法,简单考察应试者对多线程的理解和编码能力。但这道题比上面题目要更注重实用,并不是为了多线程而多线程,并且多线程能真正起到性能提升的效果,上面的ABC只是借锁来串行化了任务执行过程,严格意义上讲,不能算是实用的多线程实例。

下面给出思路,质数计算有一定的工作量,并且随着数字越大计算量越大,题目要求的计算范围很广,因此可以简单的以数字为单位分给多个线程去运算。

尝试写了一版,发现结果队列中的记录积压严重,调整线程池的大小也无济于事。这个并发模型用得不对,用LinkedBlockingQueue仅仅解决两个线程之间的同步,可能太浪费了。take调用的开销应该太大了。

阅读全文 »

| 1 分2 分3 分4 分5 分 (5.00- 1票) Loading ... Loading ... | 同时归档在:Java, 多线程编程, 语言基础 | 标签: , , |

近期技术文章搜藏

阅读全文 »

| 1 分2 分3 分4 分5 分 (5.00- 1票) Loading ... Loading ... | 同时归档在:IO编程, Java, WEB网络, 存储技术, 数据库, 算法数据结构, 语言基础 | 标签: , , , , |

网传清华学子斩获6个互联网大厂Offer的面试题汇总

看到这些题目忍不住转过来,觉得能把这些都完整解答,功力不是一般深厚了。有具体的coding、大量算法还有一些常用的基础知识和原理等。

转自微信公众号:程序猿石头,PC版链接:羡慕,又一清华学弟斩获 6 个大厂 SSP Offer | 面经分享

清华学子斩获 6 个大厂 SSP Offer

阅读全文 »

| 1 分2 分3 分4 分5 分 (5.00- 1票) Loading ... Loading ... | 同时归档在:WEB网络, 多线程编程, 数据库, 算法数据结构, 语言基础 | 标签: , , |

一些Git的基本概念和用法(rebase、HEAD、reset、master、remote、pull、push、force等)

由于之前在一个相对封闭且各方面的IT流程都相对完善的公司工作,公司内部总是习惯使用非常成熟的IT工具,不会很快引入外部的新的更高效的生产工具,因此对一些业界已经普及使用的IT工具接触总是会慢很多。除了工作时间,也没有太多机会接触外部的东西,对git的了解比较晚。本人也是从完全不懂Git(只会从github下载master分支的zip包来看源码^_^),到会用pull、push,再后面也会一些稍微高级一点的用法,如rebase、reset、合并或者修改已有commits等。在这个边学边用的过程中也遇到过一些困惑和曲解,这里系统的整理一下一些常用方法和涉及的概念,希望对新接触这个的Coder能有所帮助。

阅读全文 »

| 1 分2 分3 分4 分5 分 (5.00- 1票) Loading ... Loading ... | 同时归档在:软件技术 | 标签: , |
返回顶部