木陽

木之陽兮 卿云烂兮

  • <i class="menu-item-icon fa fa-fw fa-home"></i> <br/>Home
  • <i class="menu-item-icon fa fa-fw fa-tags"></i> <br/>Tags
  • <i class="menu-item-icon fa fa-fw fa-th"></i> <br/>Categories
  • <i class="menu-item-icon fa fa-fw fa-archive"></i> <br/>Archives
<svg width="80" height="80" viewBox="0 0 250 250" style="fill: #222; color: #fff; position: absolute; top: 0; border: 0; right: 0;" aria-hidden="true"><path d="M0,0 L115,115 L130,115 L142,142 L250,250 L250,0 Z"></path><path d="M128.3,109.0 C113.8,99.7 119.0,89.6 119.0,89.6 C122.0,82.7 120.5,78.6 120.5,78.6 C119.2,72.0 123.4,76.3 123.4,76.3 C127.3,80.9 125.5,87.3 125.5,87.3 C122.9,97.6 130.6,101.9 134.4,103.2" fill="currentColor" style="transform-origin: 130px 106px;" class="octo-arm"></path><path d="M115.0,115.0 C114.9,115.1 118.7,116.5 119.8,115.4 L133.7,101.6 C136.9,99.2 139.9,98.4 142.2,98.6 C133.8,88.0 127.5,74.4 143.8,58.0 C148.5,53.4 154.0,51.2 159.7,51.0 C160.3,49.4 163.2,43.6 171.4,40.1 C171.4,40.1 176.1,42.5 178.8,56.2 C183.1,58.6 187.2,61.8 190.9,65.4 C194.5,69.0 197.7,73.2 200.1,77.6 C213.8,80.2 216.3,84.9 216.3,84.9 C212.7,93.1 206.9,96.0 205.4,96.6 C205.1,102.4 203.0,107.8 198.3,112.5 C181.9,128.9 168.3,122.5 157.7,114.1 C157.9,116.9 156.7,120.9 152.7,124.9 L141.0,136.5 C139.8,137.7 141.6,141.9 141.8,141.8 Z" fill="currentColor" class="octo-body"></path></svg>

使用NIO的内存映射计算超大文件的MD5

Posted on 2017-05-16 | In Java

在最近的开发及原有方案的改良中,一个feture就是加快对GB级大文件的读取和计算MD5的速度。这是一个IO密集和CPU密集的耗时操作,
在无法硬性提高CPU的条件下,我考虑从IO上如何提高速率。

  1. 超大文件的MD5计算,需要分段将文件中的内存更新到MessageDigest中。(注:MessageDigest的实例不能共享,CSDN等博客上介绍MD5计算的demo,将MessageDigest设置为单例模式,单线程计算一个文件的MD5不会出错,多线程计算就会出问题了。)
  2. Java的NIO中提供了内存映射,通过将文件的一部分映射到内存中,可以一定程度地提高IO速率,从提高整体的效率。使用NIO的内存映射需要注意
    内存的释放(之前未释放内存,在100GB级的文件测试中,抛出了OOM错误)。
    Read more »

RX-Java中,life操作内部实现的优雅之处

Posted on 2016-11-23 | In Java

RX-* 系列的库是一款开源的并发流程控制的框架,有多种语言的实现[1]。用户可以通过它使用流式的编程风格,写出高可读性的并发流程控制代码。以下是针对RX-Java中,observable的各种变换(如map、flatmap)的内部实现的分析。

Read more »

实习结束一个月感悟

Posted on 2016-11-17 | In 随笔

从公司回来,到明天的毕业图像采集,差不多满满一个月了。

从南昌火车站下车,坐232回到麦庐,再从菊圃路口懒洋洋地走到学校后门,如此熟悉的小路,如此熟悉的灯光,也许后面的日子里,我能重复走过的次数屈指可数了。
麦庐后门
本来从北京回来时就想写一些东西,然而一直在折腾Linux环境之类的东西拖到了现在。这一个月里,脑海中频频地回荡着在京城的三个月时光。七月中旬到GeneDock实习,十月中旬返校,这期间经历了许许多多的事情,在学习、在心智、在眼界,都有不小的收获。

Read more »

从理解volatile的内存语义实现到Java的锁实现的思考

Posted on 2016-11-11 | In Java

volatile关键字: 使用volatile关键字修饰的的变量,总能“看到”任意线程对它最后的写入,即总能保证任意线程在读写volatile修饰的变量时,总是从内存中读取最新的值。以下是volatile在内存中的语义实现及同步的原理。

一:接触内存模型

Java中的实例、静态变量以及数组都存储在堆内存中,可在线程之间共享。而Java进程间通信由Java内存模型(JMM)控制,JMM可以决定共享变量的写入何时对另一个线程可见。(从JDK5开始,Java使用JSR-133内存模型,从该规定开始,即使是在32位的机器上,一个64位的double/long的读操作也必须满足原子性)

Read more »

使用Docker+Nginx模拟负载均衡

Posted on 2016-10-12 | In Docker , Nginx

一直听说Nginx的强大,它不仅可以作为Web服务器,按照调度规则实现动态、静态页面的分离;还可以作为反向代理服务器,构建服务集群,按轮询、权重等多种方式对后端服务器做负载均衡。以及自动剔除因故障负载均衡列表中宕机的服务器。这两天折腾了一下Nginx的安装、配置,并通过Docker模拟出Nginx在多服务器提供服务的状态下的负载均衡。

Read more »

Python中单线程、多线程与多进程的效率对比实验

Posted on 2016-09-30 | In Python

Python是运行在解释器中的语言,查找资料知道,python中有一个全局锁(GIL),在使用多进程(Thread)的情况下,不能发挥多核的优势。而使用多进程(Multiprocess),则可以发挥多核的优势真正地提高效率。

对比实验

资料显示,如果多线程的进程是CPU密集型的,那多线程并不能有多少效率上的提升,相反还可能会因为线程的频繁切换,导致效率下降,推荐使用多进程;如果是IO密集型,多线程进程可以利用IO阻塞等待时的空闲时间执行其他线程,提升效率。所以我们根据实验对比不同场景的效率

操作系统 CPU 内存 硬盘
Windows 10 双核 8GB 机械硬盘
Read more »

Windows下安装MongoDB服务并配置用户权限

Posted on 2016-08-12 | In MongoDB

Mongo在安装好之后,默认是不需要用户验证就可以操作数据库的。所以在安装Mongo后我们需要手动配置MongoDB服务的用户权限

操作系统 MongoDB版本
Windows 10 3.2.8

MongoDB服务的安装非常简单,只有简单的三步骤:

  • 下载并安装MongoDB
  • 将MongoDB的安装目录下的bin目录添加到系统环境变量Path下: “installPath“/bin
  • 使用管理者权限打开CMD,安装服务
    Read more »

关于在使用Java的SWT开发UI时UI总是发生卡死的情况及解决办法

Posted on 2016-08-09 | In Java

[问题描述]最近在尝试重构一个用SWT写的图形客户端,这个过程中遇到很多问题,其中最显著的就是SWT的客户端经常发生卡死。所谓成也萧何,败也萧何。避免UI失去响应的关键就在于下面这段代码

1
2
3
4
5
while (!shell.isDisposed()) {
if (!Display.getDefault().readAndDispatch()) {
Display.getDefault().sleep();
}
}
Read more »

Spring的R、S、C三层代理模式的思考 [附]注入方式 Hibernate事务

Posted on 2016-06-12 | In Spring , Java

Spring的repository、service、controller三层之间的交互,应该使用代理模式为佳。以service和controller通信为例:

  • 定义UService接口
  • UServiceImpl类实现Service接口,并使用@Service/@Service(“name”) 注解将ServiceImpl声明为Spring的service类
  • Controller中注入UService,通过UService中的方法调用UServiceImpl中的业务逻辑

以上,使用代理模式,更进一步地实现层与层之间解耦和

  • 面向接口的编程
  • UServiceImpl中的其它接口不一定要和UService中一致,只需经过UserService将Controller的意图转发给UServiceImpl ,再通过UServiceImpl中维护的URepository对象,将UService的意图转发到Repository层。
Read more »

Spring的InvalidDataAccessApiUsageException异常解决办法

Posted on 2016-05-16 | In Spring , Java

抛出异常:org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read-only mode (FlushMode.NEVER/MANUAL): Turn your Session into FlushMode.COMMIT/AUTO or remove ‘readOnly’ marker from transaction definition.

在使用SpringMVC + hibernate开发项目时,使用hibernate进行写操作时抛出InvalidDataAccessApiUsageException的异常,在网上搜索了很多资料,多是以下解决方案,然而没有解决我的问题:

Read more »
123
木陽

木陽

木之陽兮 卿云烂兮
27 posts
13 categories
43 tags
<i class="fa fa-fw fa-github"></i>GitHub <i class="fa fa-fw fa-envelope"></i>E-Mail
赣ICPG16004083O-1 © 2016 – 2019 木陽
Powered by Hexo v3.9.0
|
Theme – NexT.Mist v7.0.1