2. [译]多线程的优点
本文翻译自Java Concurrency / Multithreading Benefits
尽管多线程给程序实现带来了挑战,但由于多线程的一些优点我们仍然在使用它,其中的一些优点如下:
- 更好的资源利用
- 在某些场景可以简化程序设计
- 提高程序响应
本文翻译自Java Concurrency / Multithreading Benefits
尽管多线程给程序实现带来了挑战,但由于多线程的一些优点我们仍然在使用它,其中的一些优点如下:
本文翻译自Java Concurrency / Multithreading Tutorial
最开始一台电脑只有单个CPU,只能一次运行一个任务,之后出现的多任务处理则意味着计算机在同一时间可以处理多个程序(也可以称之为任务或进程),虽然它们并不是真正的并发。由于单个CPU被不同的程序共用,操作系统需要在程序运行过程中不停地切换CPU,在短暂的执行一个程序后就立即切换到下一个程序。
多任务处理给软件开发人员提出了新的挑战,程序不能再假定拥有CPU所有的可用时间、内存和其它计算机资源,一个好的程序应该及时释放所有不需要使用的资源,以便其它程序可以使用它们。 之后出现的多线程则意味着可以在同一个程序里面执行多个线程,每一个执行的线程可以被认为是CPU在执行当前程序,当在同一个程序里面执行多个线程时,看起来像是拥有多个CPU在执行该程序。
在学习Golang
时,自己最开始用的是Eclipse
中的goclipse插件来进行Golang
编程,但其对Golang
的支持不是太好,如代码格式化、自动导入引用包等都无法直接在Eclipse
中使用,并且其自动提示功能也没有像Java
那么强,于是转用Intellij IDEA安装Golang插件来替代使用,安装完插件后的Intellij IDEA对Golang
的支持在各方面都很令人满意,唯独引入本地包的支持不太好用。经过一阵摸索自己找出了解决方案,先记录下。
之前面试时遇到一个算法题:
假定两个矩形各条边都是平行于坐标轴,已知k、l、m、n分别为其中一个矩形左下角和右上角x轴、y轴坐标,p、q、r、s分别为另一个矩形的左下角和右上角x轴、y轴坐标,求这两个矩形的总面积,当矩形相交时要减去相交的面积。
此题利用常规的枚举法很复杂,但利用排除法和归纳法却能很快解决,故先记录下。
由于项目需要,最近使用了在html5
中播放视频的功能,期间遇到了几个坑,先简单记录下。
变量交换是编程中经常使用的功能,本文记录几种不通过不添加第三方变量来交换两个变量的实现方式。
在利用 MyBatis进行多条数据插入时,为了提高性能我们可能会使用批量插入的功能来实现。示例代码如下:
SQL配置文件:
<insert id="addAuthorityRoleBatch" parameterType="List">
INSERT INTO system_authority_role(role_id,authority_id)
VALUES
<foreach collection="list" item="authRole" separator=",">
(#{authRole.roleId},#{authRole.authorityId})
</foreach>
</insert>
文件的上传和下载是Web系统中的一个很普通的功能,实现的方式也有很多种,如利用 java.io下面的各种IO类自己实现,或者利用 Commons IO包中的FileUtils
、 IOUtils
类中封装好的方法直接调用。由于目前我所开发的系统采用了 SpringMVC来作为项目的MVC实现,所以很自然的采用 SpringMVC内置的API进行文件的下载,但在实际使用过程中发现其对大文件的下载支持不太好,现把解决方案记录如下:
在进行Java程序开发时,我们偶尔会被要求使用JUnit进行单元测试来确保我们所写的程序逻辑是正确的。一个良好的单元测试应该具备 覆盖度高
,可重复执行
,单一性
等特点。本文主要关注可重复执行
,在Web开发中,大部分方法都会使数据库的记录发生变化,为了能够重复执行,必须利用数据库事务来进行回滚
从而达到重复执行的目的。最原始的方法是利用 java.sql.Connection类的 commit()
或 rollback()
方法来在每个单元测试方法中手动的进行提交或回滚,此种方式使得单元测试代码嵌入了与实际业务逻辑无关的数据库操作事务控制代码。利用Spring和JUnit通过注解的方式我们可以很容易的对单元测试中的数据库操作进行事务控制。
利用Spring Security来管理我们的web程序时,通常需要在UserDetailsService
接口中的loadUserByUsername
方法中来初始化权限信息,但UserDetailsService
一般用于登录验证,这也意味着用户的权限在登录过程中就会被计算出来。通常情况下由于用户的权限很少发生变化,在登录过程中计算出用户权限是合理的,但有些情况下,我们需要在中途来动态的改变用户的权限,此时我们可以利用Spring Security提供的API来实现。