自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

llin-黎辰

虽然弱,却执着

  • 博客(836)
  • 资源 (5)
  • 收藏
  • 关注

原创 Java PathFinder(一) Java PathFinder基于Eclipse的安装配置及使用

前言在研究JPF时,发现存在两个版本的JPF,一个是在sourceforge上代码库,自2006后不再更新,但用svn签出;一个是NASA软件工程实验室自建的Mercurial版本库服务器上代码库,现在依然在开发更新,并且提供的完整的在线WIkI文档。我们使用的是NASA的.准备材料:eclipsejpf-corejdk 1.8或以上安装过程TortoiseHg官网如果要下载JPF的相关组

2016-05-14 13:13:49 7939 8

原创 Java 设计模式(十三) 接口隔离原则(ISP)

接口隔离原则(Interface Segregation Principle)ISP基本概念接口实例接口(Object Interface):一个类的实例对象是对一个类型的事物的描述,这时一种接口。类接口(Class Interface):Java中interface关键定义的接口,也是我们通常理解的狭义的接口ISP定义客户端(模块)不应该依赖它不需要的接口(接口的纯粹性) 一个模块应该

2016-05-11 15:08:07 7735

原创 Java 设计模式(十二) 依赖倒置原则(DIP)

依赖倒置原则(Dependence Inversion Principle)依赖倒置原则(DIP)的基本概念原始定义高层模块不应该依赖低层模块,两者都应该依赖其抽象抽象不应该依赖细节细节应该依赖抽象Java中的具体含义模块间的依赖通过抽象发生 实现类之间不发生直接的依赖关系其依赖关系通过接口或者抽象类产生 接口或抽象类不依赖于具体实现实现类依赖接口或抽象类依赖倒置(DIP)的好处

2016-05-09 20:03:14 4678

原创 Java 设计模式(十一) 里氏替换原则(LSP)

里氏替换原则(Liskov Substitution Principle)LSP的基本概念定义: 所有引用基类的地方必须能透明地使用其子类的对象只要父类能出现的地方子类就可出现,而且替换为子类也不会产生任何错误或异常,使用者可能根本就不需要知道是父类还是子类(封装造成的多态性)规范 子类必须完全实现父类的方法 在类中调用其他类时必然要使用父类或者接口,如果子类中不支持父类中的方法,自然就

2016-05-08 19:30:40 3339 1

原创 Java 设计模式(十) 单一职责原则(SRP)

单一职责原则(Single Responsibility Principle)SRP 基本概念单一职责原则定义:应该有且仅有一个原因引起类的变更,也就是接口或类和职责的关系是一一对应的。难点:职责的划分: 在不同情景和生产环境下我们对职责的细化是不同的(职责单一的相对性)单一职责原则提出的是一个评价接口是否优良的标准,但是职责和变化原因是不可度量的,因项目而异,因环境而异(不可度量性)优势

2016-05-08 17:55:41 5130 3

原创 Java 设计模式(九) Strategy(策略)模式及Spring引申

Strategy基本概念策略模式(Strategy Pattern):定义一组算法,将每个算法都封装起来,并且他们之间可以互换。使用面向对象的继承和多态机制实现Strategy中的角色:Context封装角色: 它叫做上下文角色,起承上启下的封装作用,屏蔽高层模块对策略、算法的直接访问,封装可能存在的变化。Strategy抽象策略角色: 策略,算法家族的抽象,通常为接口,定义每个策略或

2016-05-06 14:10:26 4232

原创 Java 设计模式(八) Proxy(代理)模式及Spring引申

Proxy基本概念代理模式(Proxy pattern)是一种使用率非常高的模式:为其他对象提供一种代理以控制对这个对象的访问代理模式也叫作委托模式,它是一项基本设计技巧Proxy中的角色Subject(抽象主题类):既可以是抽象类也可以是抽象的接口RealSubject(具体的主题角色):是被委托角色或者说是被代理角色Proxy(代理主题角色):是委托类或者代理类: 它负责对真实的角

2016-05-06 11:28:19 3885

原创 理解Tomcat(一) 利用Digester解析xml文件

Tomcat与Digester的关系我们利用Tomcat做服务器开发Web应用时,总会有一个配置文件web.xml,进行一些对象的实例化或是Servlet的映射的配置,所以要想理解Tomcat的一些配置问题,首先需要了解Tomcat是如何利用xml文件来进行配置的?答案就是利用开源的Digest进行XML的解析,然后构建响应的容器或者完成其他的配置,这些我会在单篇文章中具体深入讲解,作为这个专题的第

2016-05-01 09:34:29 7152 4

原创 Java设计模式(七) COR(责任链)模式及Tomcat引申

基本概念定义:使多个对象都有机会处理请求,从而避免了请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,知道有对象处理它为止。COR(责任链)模式的角色分工: Handler:抽象处理者,定义一个处理请求的接口Concrete Handler: 具体处理者,处理请求的具体类,或者传给”下家”。Requester:发出请求等待处理的类,它无需关注到底是哪个具体的

2016-04-26 18:57:10 7572

原创 Java设计模式(六) Command(命令模式)及Tomcat引申

基本概念Command命令模式是一个高内聚的模式(满足单一职责原则)概念:将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。命令模式在项目中频繁使用,封装性和拓展性都有很好的保障Command模式中的角色分工: Client:创建一个命令并决定接受者Command:命令接口,定义一个抽象方法Concrete Com

2016-04-26 13:08:35 6522

原创 Java设计模式(五) Observer(观察者)模式及Tomcat引申

基本概念Observer观察者模式(Observer Pattern)又称为发布订阅模式(Publish/subscribe)定义对象间的一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并且自动更新根据单一职责原则,每个类的职责是单一的,我们可以通过触发机制,形成一个触发链,把各个单一的职责串联成真实世界中的复杂的逻辑关系。观察者模式的角色分工(JDK中提供了

2016-04-25 19:38:03 6494 2

原创 Java设计模式(四) Facade(门面)模式及Tomcat引申

基本概念Facade的概念为子系统中的一组接口提供一个统一接口。Facade模式定义了一个更高层的接口,使子系统更加容易使用。我们需要以一种比原有方式更简单直接的办法与系统交互,对于讨论的复杂系统我们只有针对性地使用它的一个子集因为Facade模式可以封装多个子系统,可以减少客户必须处理的对象的数量要求一个子系统的外部与内部的通信必须通过一个统一的对象进行。也就是说Facade对象是外界对于子

2016-04-25 14:38:28 5702

原创 JVM基础(三) JVM内存管理

内存的划分本文所谈的内存是指的运行时数据区域,分为:共享的数据区: 堆(Heap)方法区(Method Area)线程隔离的数据区: 虚拟机栈(VM Stack)本地方法栈(Native Method Stack)程序计数器(Program Counter Register) Java线程栈的内存管理(隔离内存)线程隔离的性质意味着线程和栈是关联的,每个线程在创建时会创建自己的

2016-04-24 10:49:44 1326

原创 JVM基础(二) 实现自己的ClassLoader

为何要花时间实现自己的ClassLoader虽然人生的乐趣很大一部分来自于将时间花在有意思但是无意义的事情上,但是这件事绝对是有意思并且有意义的,有以下几个情景是值得我们花费时间实现自己的classLoader的:我们需要的类不一定存放在已经设置好的classPath下(有系统类加载器AppClassLoader加载的路径),对于自定义路径中的class类文件的加载,我们需要自己的ClassLoa

2016-04-20 16:37:51 3199

原创 JVM基础(一) ClassLoader的工作机制

对ClassLoader的理解顾名思义,Class loader 最基本的功能就是将Class加载到JVM中在加载过程中,Class loader 能够审查每个类应该由哪个class loader加载,采用双亲委派模型来实现除了加载外,class loader也负责将加载后的字节码重新解析成JVM同一要求的对象格式类加载器对于所加载类的影响每一个类加载器都有一个独立的命名空间独立的命名空

2016-04-19 22:59:11 6633

原创 Java设计模式(三) Visitor(访问者)模式及多分派场景应用

基本概念Visitor封装一些作用于数据结构中的各元素的操作,不同的操作可以借助新的visitor实现,降低了操作间的耦合性访问者可以将数据结构和对数据的操作解耦,使得增加对数据结构的操作不需要取修改数据结构,也不必去修改原有的操作,而执行时再定义新的Visitor时闲着就行了(在操作添加上易拓展)模式中角色分工Visitor:抽象访问者,在重载的visit函数中声明访问者可以访问的对象。

2016-04-14 15:32:41 8005

原创 Java设计模式(二) Decorator(装饰)模式及Java I/O引申

基本概念Decorator职能上: 动态地给一个对象添加一些额外的职责,就增加功能来说Decorator比从基类生成子类更灵活,而且能有效地控制子类的数量,防止子类爆炸(后面的特性会印证这个优势)。结构(工作原理)上: 可以创建始于Decorator对象(负责新功能的对象)终于原对象的一个对象链实现上: Decorator模式将Decrator对象(能够提供额外的功能)与这些对象的使用

2016-04-13 19:37:54 4673

原创 Java设计模式(一) Adapter(适配器)模式及I/O实例引申

基本概念适配器模式是一种补救模式,将一个类的接口转换成客户希望的另外一个接口。Adapter模式使原本由于接口不兼容而不能一起工作的类可以一起工作。是包装模式(对类或者对象进行包装)的一种,分为类适配器和对象适配器,是从实现层面上划分。这个模式中包含三种角色:Target目标角色:该角色定义我们要将原接口转化为何种接口,也就是我们期望得到的接口(方便多态地使用)Adaptee源角色:需要利用适配

2016-04-13 13:59:03 2641

原创 Java I/O(一) NIO概述

基本概念BIO:是阻塞I/O,不管是磁盘I/O,还是网络I/O,数据在写入OutputStream和InputStream都可能发生阻塞,一旦有阻塞,线程会失去CPU的使用权(阻塞)。NIO:简单的说就是非阻塞式I/O(单个I/O阻塞时不阻塞线程),一个线程可以负责多个I/O连接(利用serverSocketChannels来接收),取一个准备好接收数据的连接(注册到Selector轮询调度),

2016-04-12 23:01:19 3311

原创 Java并发容器(一) CocurrentHashMap的应用及实现

CocurrentHashMap的优势首先常用三种HashMap包括HashMap,HashTable和CocurrentHashMap:HashMap在并发编程过程中使用可能导致死循环,因为插入过程不是原子操作,每个HashEntry是一个链表节点,很可能在插入的过程中,已经设置了后节点,实际还未插入,最终反而插入在后节点之后,造成链中出现环,破坏了链表的性质,失去了尾节点,出现死循环。Has

2016-04-11 21:37:54 24401 8

原创 Spark大数据处理(一) Spark的Scala和python脚本环境搭建

环境准备spark-hadoopjdk1.8Scalapython(因为我使用的是 ubuntu x64 linux, python在系统安装就已经配置好)安装linux下的第三方软件应该安装在/opt目录下,约定优于配置,遵循这一原则是良好的环境配置习惯。进入tgz包所在的目录将tgz包复制到我们的安装路径sudo mv .... /opt/然后进入/opt,对我们的安装包进行解压:ta

2016-04-08 10:54:25 2828

原创 Maven项目管理(二) maven中心库映像替换解决墙的问题

Maven的线上仓库maven的线上仓库是maven正常执行的保障,因为国内的网络环境问题,maven的中心库可能会出现速度慢的现象,可以采取利用国内的镜像来替代中心库的方法解决这一问题Maven映像的配置我的环境是win10 首先maven - v 查找到maven的安装路径 找到路径后,根据这个路径找到目录下的conf文件夹下的settings.xml,最好用IDE打开,这样xml的树形

2016-04-07 18:47:29 1724

原创 Maven项目管理(一) IntelliJ Idea+Maven环境搭建与基于命令行的基本使用

MavenMAVEN是一个强大的构建工具,ItelliJ Idea 是个强大的IDE,帮他们联合起来使用,将会是多么美妙的事情。但是IDE中集成的Maven总使习惯使用命令行的我们头大,不想为了使用IDE重新学习如何使用怎么办,那么就通过配置环境兼容就好了。Maven的准备安装之前通过terminal输入java -version,查看是否已经安装JAVA的JDK和JRElinux下apt-ge

2016-04-06 21:29:46 16555 1

原创 软件测试(四) 路径覆盖

题目简介/******************************************************* * Finds and prints n prime integers * Jeff Offutt, Spring 2003 ******************************************************/

2016-03-29 21:54:26 4989 1

原创 软件测试(三) Junit和Eclemma的安装及使用

环境配置我使用的IDE是Eclipse Mars,安装后就自带Junit,所以没有Junit的安装过程。Eclemma的安装过程也可以直接通过Eclipse内嵌的插件市场进行安装。 进入Eclipse,菜单栏help>>Eclipse Market Place直接安装即可,重启eclipse之后就可以使用了方法类的编写一个判断三角形是否是等边的,是否是等腰的,是否是斜角三角形public

2016-03-18 11:49:45 1380

原创 codeforces 651B B. Beautiful Paintings(贪心JAVA代码)

题目链接:codeforces 651B题目描述:给出一组数,重新排列这组数,得到ai<ai+1a_i<a_{i+1}的最多次数,求取这个最多的次数的值。题目分析:最优解的情况一定我们找到最小的数,然后把比它大的最小的数放到它后面,然后重复的数字在后面按照上面的方法继续排列,知道数字用光为止。AC代码(JAVA代码)import java.util.ArrayList;import java.ut

2016-03-10 19:53:32 901

原创 软件测试(二) 第二次作业

知识点回顾基本定义 软件故障(software Fault):软件中的静态代码的缺陷软件错误(software Error):不正确的内部状态,该状态是故障的表现。软件失败(software Failure):与需求或期望的行为的描述有关德尔、外部的、不正确的行为找出一个失败的三个条件:程序中包含错误的位置必须找到(可达性,reachability)执行该位置后,程序的状态必须是不正确的

2016-03-08 20:51:17 1610

原创 软件测试(一) 近期的一次debug的经历

DEBUG利用Spring MVC的项目在新装的apache上跑报错,显示异常ClassNotFound,原来的是没有在apache的lib里添加相关第三方库,导致引用缺失造成的。在利用Kinect开发的过程中 因为sdk的更新,换用官方新发布的sdk,将旧版本的sdk卸载后新的sdk无法安装,后来在原本的安装路径发现有标志当前sdk版本的临时文件,导致安装无法正常进在开发中,向通过摄像头仰

2016-03-04 09:23:44 1451

原创 Kinect开发(二) 基于C# WPF的Kinect开发环境配置

准备工作软件准备 Visual studio Ultimate 2013Kinect for Windows SDKs 1.7Kinect for Windows SDKs Toolkit 1.7(用于测试sdk的驱动是否可用)Kinect WPF Viewers(一些封装好的基本的Kinect的控件,主要是方便测试)硬件准备 Kinect for WindowsPC(操作系统为wi

2016-01-26 22:35:20 5035 1

原创 Kinect开发(一) 环境配置

准备工作首先是给kinect设备下载合适的sdk,在一次次失败之后,还是选择用驱动精灵确定一下版本,安装好驱动精灵后,插上kinect,它会帮你识别版本,但是建议不要直接通过驱动精灵下载,它会下很多乱七八糟没用的东西,我检测到的版本是kinect for windows sdk 1.7,直接通过官网下载。 kinect for windows sdk 1.7 下载完之后,安装的路径是不允许修改的

2016-01-26 19:11:36 1084

原创 形式化方法(一) 逻辑部分概念梳理

逻辑部分概念梳理Logic 逻辑Logic is a normative and/or prescriptive science 逻辑是一门规范性的科学 deals with what entails or what follows from what 解决两者间的推导关系aims at determining which are the correct coclusions of a gi

2015-12-08 10:59:59 5173 2

原创 编译原理(十) SLR文法分析法(算法原理和C++实现)

前情提要因为SLR文法分析法就是对LR(0)的一种优化,它提供了一种解决冲突的方法,所以很多之前在LR(0)提及的东西,在此只提供一个引用。 LR(0)文法分析法算法描述SLR文法构造分析表的主要思想是:许多冲突性的动作都可能通过考察有关非终结符的FOLLOW集而获解决。 解决冲突的方法:解决冲突的方法是分析所有含A和B的句型,考察集合FOLLOW(A)和FOLLOW(B),如果这两个集合不相

2015-12-04 09:37:22 22961 2

原创 codeforces #334 div1 603C Lieges of Legendre(博弈)

题目链接:codeforces 603C题目大意:有两个人做游戏,游戏规则如下: 有n堆石子,每次可以对一堆石子进行操作,如果当前石子是偶数,那么可以选择将这2*x个石子分成k堆石子数为x的石子堆,还有一种没有前提的操作是取走当前堆的一个石子,问先手赢还是后手赢,先手和后手都足够聪明的情况下。题目分析:首先对于这种组合游戏的题目,很容易想到利用SG函数来解。我们对于游戏的局势进行分类讨论:当k是

2015-12-03 00:15:27 2431

原创 编译原理(九) LR(0)文法分析法(算法描述和C++代码实现)

概念梳理最左推导:每一步替换最左边的非终结符 最右推导:每一步替换最右边的非终结符,最右推导称为规范推导 短语:令G是一个文法,S是文法的开始符号,假定αβδ是文法G的一个句型,如果有 S⇒∗αAδ且A⇒+βS\Rightarrow^* \alpha A \delta 且 A \Rightarrow^+ \beta则称 β是相对于非终结符A的, 句型αβδ的短语。 直接短语:令G是一个文法,S

2015-12-02 19:58:45 27470 17

原创 codeforces #334 div1 B 603B Moodular Arithmetic(数论)

题目链接:codeforce 603B题目大意:给出f(kx mod p)≡kf(x) mod pf(kx\ mod\ p ) \equiv kf(x)\ mod \ p,求满足条件的f(x)的数量。题目分析:首先考虑两种特殊情况,即k=0和k=1的情况。当k = 0 时, {f(x)=0f(x)={0,⋯p−1},x=0,x>0\left\{\begin{aligned}&f(x) =

2015-12-02 11:07:04 2230 2

原创 编译原理(八) 算符优先分析法(分析过程的算法和C++实现)

前情提要算符优先分析法(构造算法优先关系表)算法描述算符优先关系主要用于界定右句型的句柄: <标记句柄的左端; =出现在句柄的内部; >标记句柄的右端。发现句柄的过程:从左端开始扫描串,直到遇到第一个>为止。向左扫描,跳过所有的=,直到遇到一个<为止。句柄包括从上一步遇到的<右部到第一个>左部之间的所有符号,包括介于期间或者两边的非终结符非终结符的处理: 因为非终结符不能

2015-11-30 10:49:45 16472 2

原创 编译原理(七) 算符优先分析法(构造算符优先关系表算法及C++实现)

概念简述移动归约分析法:自底向上的语法分析方法,也称为移动归约分析法。最易于实现的一种移动归约分析方法,叫做算符优先分析法,而更一般的移动归约分析方法叫做LR分析法,LR分析法可以用作许多自动的语法分析器的生成器。短语:文法G[S],αβδ是文法G的一个句型,S=>*αAδ且A=>+β则称β是句型αβδ相对于非终结符A的短语。 直接短语:若有A ⇒+\Rightarrow^+β则称β是句型α

2015-11-29 15:11:21 65229 8

原创 编译原理(六) LL(1)文法分析法(分析过程的C++实现)

前情了解快速通道算法分析预测分析程序的总控程序在任何时候都是按STACK栈顶符号X和当前的输入符号a行事的。如下图所示,对于任何(X,a),总控程序每次都执行下述三种可能的动作之一:若X = a = ‘#’,则宣布分析成功,停止分析过程。若X = a ≠‘#’,则把X从STACK栈顶弹出,让a指向下一个输入符号。若X是一个非终结符,则查看分析表M。 若M[X,a]中存放着关于X的一个产生式,

2015-11-28 21:38:45 12967 8

原创 编译原理(五) LL(1)文法分析法(预测分析表的构造算法C++实现)

基本定义FIRST(α):FIRST(\alpha): 令G是一个不含左递归的文法,对G的所有非终结符的每个候选α定义它的终结首符集FIRST(α)为: FIRST(α)={a | α=>*a…, a∈VT} 若α=>*ε,则规定ε∈FIRST(α)FIRST(α)是α的所有可能推导的开头终结符或可能的ε 如果非终结符A的所有候选首符集两两不相交,即A的任何两个不同候选αi和αj FI

2015-11-28 20:02:54 43740 7

原创 编译原理(四) 提取左因子法消除回溯

概念简述回溯:分析工作部分地或全部地退回到之前的一个阶段,在当前阶段采取与之前不同的决策重新推进工作 FIRST(α)FIRST(\alpha):令G是一个不含左递归的文法,对G的所有非终结符的每个候选α定义它的终结首符集FIRST(α)为:FIRST(α)={a | α=>*a…, a∈VT} 若α=>*ε,则规定ε∈FIRST(α)FIRST(α)是α的所有可能推导的开头终结符或可能的ε

2015-11-28 09:51:18 10903 3

Java PathFinder-jpf-core

一个基于符号执行的Java执行模型路径查找器

2016-05-14

apache-commons-logging

apache-commons-logging

2016-05-01

apache-commons-digester

2016-05-01

vim-配色方案

比较大众的配色方案,欢迎大家下载,如果不好用可以评论中指出,我会修改

2014-12-15

api-demos-source codes

适合初学者看,方便sdk中不带源码的人群

2014-12-13

空空如也

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

TA关注的人

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