木之陽兮 卿云烂兮

0%

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

Read more »

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

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

Read more »

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

一:接触内存模型

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

Read more »

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

Read more »

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

对比实验

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

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

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

操作系统 MongoDB版本
Windows 10 3.2.8

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

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

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

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

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 »

抛出异常: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 »