自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(51)
  • 问答 (1)
  • 收藏
  • 关注

利用递归算法并行化解决谜题框架

我们将谜题定义为:包含一个初始位置,一个目标位置,以及用于判断是否是有效移动的规则集。规则集包含两部分:计算从指定位置开始的所有合法移动,以及每次移动的结果位置。下面先给出表示谜题的抽象类,其中的类型参数P和M表示位置类和移动类。根据这个接口,我们可以写一个简单的串行求解程序,该程序将在谜题空间Puzzle Space中查找,直到找到一个解答或者找遍了整个空间都没有发现答案。注:一个移...

2013-04-30 13:00:00 409

《Java并发编程》之六:线程池的使用

8.1  在任务与执行策略之间的隐形耦合有些类型的任务需要明确指定执行策略,包括:依赖性任务、使用线程封闭机制的任务、对响应时间敏感的任务、使用ThreadLocal的任务。只有当任务都是同类型的并且相互独立时,线程池的性能才能达到最佳。 8.1.1  线程饥饿死锁public class ThreadDeadlock { ExecutorService ex...

2013-04-30 12:04:22 107

《Java并发编程》之五:取消和关闭线程

Java没有提供任何机制来安全地终止线程,虽然Thread.stop和suspend等方法提供了这样的机制,但是存在严重的缺陷,应该避免使用这些方法。但是Java提供了中断Interruption机制,这是一种协作机制,能够使一个线程终止另一个线程的当前工作。这种协作方式是必要的,我们很少希望某个任务线程或者服务立即停止,因为这种立即停止会时某个共享的数据结构处于不一致的状态。相反,在编写...

2013-04-29 11:13:25 214

《Java并发编程》之四:Executor框架

ExecutoreService增加了生命周期的管理,有三种状态:运行、关闭、已终止。public class LifecycleWebServer { private final ExecutorService exec = Executors.newCachedThreadPool(); public void start() throws IOExceptio...

2013-04-26 21:42:58 105

《Java并发编程》之三:基础构建模块

将线程安全性委托给现有的线程安全类,委托时创建线程安全类一个最有效的策略:只需让现有的线程安全类管理所有的状态即可。 5.1  同步容器类早起JDK的同步容器类包括Vector和Hashtable等,这些同步封装器类是由Collections.synchronizedXxx等工厂方法创建的。同步容器类的问题是,但有复合操作:迭代、跳转、条件运算的时候,如果有其他线程并发地修改容...

2013-04-21 12:01:04 88

《Java并发编程》之二:对象的组合

当对象下一个状态需要依赖当前状态时,这个操作必须是一个复合操作。并非所有操作都会在状态转换上施加限制,比如直接更新字段,以赋值形式,典型的就是javabean的get/set方法。如果在一个不变性条件中包含多个变量,那么在执行任何访问相关变量的操作时候,都必须持有保护这些变量的锁。 下面的PersonSet说明了如何通过实例封闭与加锁机制使一个可变对象或者线程不安全对象成为一个线程...

2013-04-20 17:03:03 86

原创 《Java并发编程》之一:对象的共享

====不可变对象定义:====1,对象创建后其状态不能修改2,对象所有域都是final的3,对象时正确创建的,在对象构造期间,this引用没有逸出 ====安全发布对象的含义:====确保使用对象的线程能够看到该对象处于已发布的状态,是对象的状态呈现一致性视图。安全发布对象的常用模式:可变对象必须通过安全的方式来发布,通常意味着发布和使用该对象的线程都必须使用...

2013-04-20 11:36:19 112

探索junit4核心

软件测试主要分成5类,范围从小到大分别为:单元测试->集成测试->功能测试->压力测试->验收测试。此系列中我们只讨论单元测试。>> 单元测试的3种类型:* 逻辑单元测试:主要针对一个单独的方法来检查代码,可以通过mock object或者stub来控制某个特定的测试方法的边界。* 集成单元测试:主要用来测试在真实环境或者真实环境的一部分中不同组...

2013-04-14 00:22:13 100

maven日记(十一):生成项目站点

最简单的站点,首先配置maven3的maven-site-plugin,这个在外层的parent的pom.xml中定义:<build> <pluginManagement> <plugins> <plugin> <groupId>org.a...

2013-04-14 00:19:12 153

maven日记(十):灵活的构建

问题1:典型的项目都会有开发环境、测试环境、生产环境,这些环境的配置不同,怎样在构建的时候识别这些环境并使用正确的配置问题2:有些集成测试运行起来非常耗时,不适合每次构建都运行,需要一种手段在特定时候才运行这些集成测试maven为了解决上面的难题,提供了三大特性,即:属性、Profile、资源过滤>> maven属性:通过定义<properties>&l...

2013-04-14 00:15:00 97

maven日记(九):使用Maven构建Web应用

>> 使用jetty-maven-plugin进行测试在进行web开发的时候,我们总是无法避免打开浏览器测试,但是需要编译,测试、打包、测试、部署等一系列环节,这个很浪费时间。而jetty-maven-plugin这个插件利用内置的jetty web容器,周期轮训代码更新,省去我们打包和部署步骤,大大缩减测试时间。另外,web测试应该仅限于跟前台密切相关的测试,页面测试等。而后...

2013-04-14 00:11:27 85

maven日记(八):使用Hudson进行持续集成

 一次完整的持续集成包括下面6个步骤:* 持续编译:所有正式代码提交到版本控制系统中后,持续集成服务器按一定频率检测源码控制系统,有新代码的时候就触发一次集成,服务器编译所有最新代码。* 持续数据库集成:每次发现新的sql脚本,自动清理集成环境的数据库,重新构建表结构,并插入预备数据* 持续测试:自动化单元测试,以及依赖于外部环境的集成测试* 持续审查:诸如Checksty...

2013-04-14 00:09:17 113

maven日记(七):使用maven进行测试

maven本身不是一个单元测试框架,java中主流的单元测试框架为JUnit和TestNG,maven所做的只是在构建执行到特定生命周期阶段的时候,通过插件来执行junit或者TestNG的测试用例,这一插件就是大名鼎鼎的maven-surefire-plugin。默认情况下,maven-surefire-plugin的test目标会自动执行测试源码路径下所有符合下列命名规约的测试类:...

2013-04-10 00:14:45 155

maven日记(六):使用Nexus创建私服

>> 安装Nexus:直接下载bundle版本,然后将其安装成服务后自启动。访问:http://localhost:8081/nexus/ 即可>> Nexus仓库分类的概念:maven可以直接从宿主仓库(hosted)下载构件;也可以从代理仓库(proxy)下载构件,而代理仓库会间接从远程仓库下载并缓存构件;最后,为了方便,Maven可以从仓库组(grou...

2013-04-10 00:12:51 121

maven日记(五):聚合与继承

maven的聚合特性能够把项目的各个模块聚合在一起构建,而maven的集成特性则能够帮助抽取各个模块相同的依赖和插件等配置,在简化POM的同时,还能够促进各个模块配置的一致性。>> 聚合的例子:<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3....

2013-04-10 00:10:43 95

maven日记(四):生命周期和插件

 maven的生命周期是抽象的,这意味着生命周期本身不做任何实际的工作,在maven的设计中,实际的任务(比如编译源代码)都交由插件去完成。这种设计思想与设计模式中的模板方法非常类似。public abstract class AbstractBuild { public void build() { initialize(); com...

2013-04-10 00:06:11 121

maven日记(三):仓库详解

 maven在某个统一的位置存储所有maven项目共享构件,这个统一位置就是仓库>> 仓库分类maven只有两种仓库:本地仓库和远程仓库。这里介绍一些特殊的远程仓库:* 中央仓库是maven核心自带的远程仓库,它包含了绝大部分开源构件。* 私服是另一种特殊的远程仓库,为了节省宽带和时间,应该在局域网架设一个私有仓库服务器,用其代理所有外部的远程仓库,内部的项...

2013-04-10 00:04:18 107

maven日记(二):坐标和依赖

>> maven坐标由5个元素组成:* groupId:定义当前maven项目隶属的实际项目maven项目和实际项目不一定是一对一关系,比如SpringFramework这一实际项目,其对应的maven项目会有很多,比如spring-core、spring-context等。这是由于maven中模块的概念,因此一个实际项目往往会被划分成很多模块。其次,groupId不应该对...

2013-04-09 21:57:52 169

maven日记(一):Maven使用入门

下载maven后,解压缩到一个目录,设置M2_HOME环境变量,Path执行路径加入,然后再设置下MAVEN_OPTS环境变量为-Xms256m -Xmx512m将M2_HOME/conf目录下的settings.xml复制到~/.m2/目录下,这个是针对特定用户的,而M2_HOME下的是全局的,最好不要去修改它。一个pom的简单例子:<?xml version="1...

2013-04-09 21:57:12 118

spring日记(十二):实战单元测试

>> 模拟利器Mockito:Mockito使用起来非常简单,学习成本低,而且有非常简单的API,测试代码可读性很高。官网地址:http://www.mockito.org/使用实例:public class MockitoSampleTest { //模拟接口 UserService mockUserService = mock(UserS...

2013-04-09 21:55:53 187

spring日记(十一):Spring MVC

注解驱动以及REST风格的Spring MVC是spring3.0最出彩的功能之一。先来定义spring MVC的主控Servlet:DispatcherServlet:<?xml version="1.0" encoding="UTF-8"?><web-app version="2.5" xmlns="http://java.sun.com/xml/ns...

2013-04-09 21:53:14 82

spring日记(十):任务调度和异步执行器

博客新地址:http://yidao620c.github.io >> 在spring中使用quartz创建JobDetailBean:<!-- 通过JobDetailBean实现 --><bean name="jobDetail" class="org.springframework.scheduling.quartz.JobDe...

2013-04-09 21:52:22 157

spring日记(九):整合其他ORM框架

>> 在spring中使用myBatismybatis没有特殊的事务策略,除了JDBC Connection外,也没有特殊的事务资源。它和spring JDBC事务管理方式完全一致,采用和spring JDBC相同的DataSourceTransactionManager事务管理器。第一种方式:先看一下myBatisConfig.xml配置文件:<?x...

2013-04-08 20:31:37 227

spring日记(八):使用Spring JDBC访问数据库

本人博客已搬家,新地址为:http://yidao620c.github.io/在xml中配置jdbcTemplate:<context:component-scan base-package="com.springzoo"/> <context:property-placeholder location="classpath:jdbc.pro...

2013-04-08 20:28:12 115

spring日记(七):声明式事务机制

数据库事务必须满足四个特性:*  原子性(Atomic):表示一个事务的多个数据库操作时一个整体,要么都成功提交,要么都撤销*  一致性(Consistency):事务操作成功后,数据库状态和它的业务状态一致,数据不会被破坏*  隔离性(Isolation):在并发数据操作时,不同事务拥有各自的数据空间,它们的操作彼此不影响。数据库有多种隔离级别,隔离级别越高,数据越安全*  ...

2013-04-08 20:24:38 83

spring日记(六):@AspectJ高级主题

>> 命名切点下面是一个命名切点定义类package com.springzoo.aspectj.advanced; import org.aspectj.lang.annotation.Pointcut; public class TestNamePointcut { @Pointcut("within(com.springzoo.*)"...

2013-04-08 20:23:10 80

spring日记(五):基于@AspectJ和Schema的AOP

JDK5.0注解基础知识:先定义一个简单的注解:package com.springzoo.anno;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import ...

2013-04-08 20:22:01 69

spring日记(四):AOP基础

AOP的实现者:AspectJ、JBoss AOP、Spring AOP,其中AspectJ提供语言级别的AOP实现,有一个专门的编译器生成遵守Java字节编码规范的Class文件。在Spring中,可以无缝集成Spring AOP、IoC、AspectJ。Spring AOP使用了两种代理机制:一种是基于JDK的动态代理,另一种是基于CGLib的动态代理,之所以需要两种代理机制,很大程度...

2013-04-07 20:55:12 84

spring日记(三):在Ioc中装配Bean

JavaBean允许大写字母起头的属性变量名,不过必须满足:变量的前两个字母要么全部大写,要么全部小写。比如IDCode,idCode是合法的,尽量用小写的。》通过构造函数注入:<!--构造函数注入:type --><bean id="car1" class="com.baobaotao.ditype.Car"> <constructor-...

2013-04-07 20:52:45 73

spring日记(二):Ioc容器

本人博客已搬家,新地址为:http://yidao620c.github.io/spring在DefaultSingletonBeanRegistry类提供了一个用于缓存单例Bean的缓存器,它是一个用HashMap实现的缓存器,单实例的Bean以beanName为键保存在这个HashMap中。在初始化BeanFactory的时候,必须为其指定一个日志框架,一般来讲使用Log4j或者lsf...

2013-04-07 20:51:09 84

spring日记(一):快速入门

spring声明式事务管理原理:在spring中装配Service,事务管理虽然不用出现在程序代码中,但我们必须以某种方式告诉spring哪些业务类需要工作于事务环境下以及事务的规则等内容,以便spring根据这些信息自动为目标事务类添加事务管理的功能。在pom文件中引入aop和tx的spring依赖jar,然后在applicationContext.xml文件中需要引入aop和tx两个依...

2013-04-07 20:48:38 92

memcached集中式缓存笔记

关于memcached的数据库同步,也就是数据一致性的疑惑,下面两句话可以解释:如果不是强一致性要求的话,可以自然过期如果要强一致性的话,在insert时,可删除对应的key即可在linux上面安装的时候,先安装libevent,然后再安装memcached,安装的时候可能会报错,下面可能解决:#./configure –prefix=/usr/local/memcached  -...

2013-04-07 20:47:01 167

优秀的开源框架收藏

==========Java Core========* JID简介:Java高效的序列化库项目主页:https://github.com/laforge49/JID * ReflectASM简介:Java高效的反射类库项目主页:https://code.google.com/p/reflectasm/ * JActor简介:JActor 是一个 J...

2013-04-06 09:55:30 194

企鹅日记(二十一):软件安装篇

建议将自己安装的软件放在/usr/local目录下,而源码(Tarball)则建议放在/usr/local/src目录下。以apache这个软件来讲:* /etc/httpd* /usr/lib* /usr/bin* /usr/share/man我们会发现软件的内容大致上摆在etc, lib, bin, man等目录中,分别代表配置文件、函数库、可执行文件、在线帮助文档...

2013-04-06 09:54:01 89

企鹅日记(二十):启动流程和模块管理

简单来说,linux的启动流程为:1,加载BIOS的硬件信息与进行自我测试,并依据设置取得第一个可启动的设备2,读取并执行第一个启动设备内MBR的boot loader(即grub或者spfdisk等)3,依据boot loader的设置加载kernel,kernel会开始检测硬件与加载驱动程序4,在硬件驱动成功后,kernel会主动调用init进程,而init会取得run-l...

2013-04-06 09:53:32 93

企鹅日记(十九):认识和分析日志文件

linux中常见的日志文件为:* /var/log/cron:例行工作排程的记录信息* /var/log/dmesg:系统开机时候内核检测过程产生的各项信息* /var/log/lastlog:所有帐号最近一次登录系统时候的相关信息* /var/log/maillog或/var/log/mail/*:记录邮件的往来信息,主要是记录sendmail(SMTP协议提供者)与dove...

2013-04-06 09:52:52 140

企鹅日记(十八):认识系统服务daemons

简单来讲,系统为了某些功能必须要提供一些服务(不论是系统本身还是网络方面),这个服务称为service,而实现这个service的程序就称为daemon,比如实现循环型工作调度服务的程序为crond这个daemon,这么说比较容易理解了吧。deamon可分为可独立启动的stand alone,与通过一个super deamon来统一管理的服务这两类。stand_alone:就是可独立启...

2013-04-05 00:17:12 90

原创 企鹅日记(十七):SELinux初探

其实SELinux是在进行程序、文件等权限设置依据的一个内核模块。由于启动网络服务的也是程序,因此刚好也是能够控制网络服务能否访问系统资源的一道关卡!传统的文件权限与帐号关系:自主访问控制 DAC。而以策略指定特定程序读取特定文件:强制访问控制,MAC。DAC的困扰是当用户取得程序后,他可以通过这个进程与自己默认权限来处理他自己的文件资源,万一这个用户对linux不熟,很可能会有资源误...

2013-04-05 00:16:37 148

原创 企鹅日记(十六):linux程序管理

在linux当中,触发任何一个事件时,系统都会将它定义成为一个进程,并且给予这个进程一个PID,同时依据触发这个进程的用户与相关属性关系,给予这个PID一组有效的权限设置,从此以后,这个PID就够在系统上进行的操作就与这个PID的权限有关了。进程衍生出来的其他进程在一般状态下,也会沿用这个进程的相关权限,比如登录bash这个进程,在bash中执行其他程序,产生的进程的权限就是这个bash的权限...

2013-04-05 00:12:57 100

原创 企鹅日记(十五):例行性工作排程crontab

linux系统常见的例行性任务有:× 进行日志文件的论替(log rotate)× 日志文件分析logwatch的任务× 新建locate的数据库× whatis 数据库的建立× RPM软件日志文件的新建× 删除临时文件,通过tmpwatch命令来删除这些临时文件× 与网络服务有关的分析行为====仅执行一次的工作调度at====先要启动atd这个服务:...

2013-04-05 00:12:16 112

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除