`
文章列表
The only unchangeable thing is change.    前面讲了如何搭建一个基于Git协议的Local repository。实现了之前的用户需求,现在用户来了一个新需求:   “我希望在Windows的机器上也可以使用local repository” 首先分解这个需求:    1、在Windows下安装Git,或者Git支持工具。    2、验证之前的上篇提到的所有功能都能在Windows下工作    3、如果有改动git server的设置,Mac的所有功能也需要重新验证。 实现过程:    1、在Windows下安装Git,目前比较流行是msysgit ...
需求:使用闲置机器搭建一个项目组内部的Git Repository,以供项目组内部管理一些自己的小项目。 需求分解: 1、项目组成员可以通过clone,pull,push获取到服务器上的最新的代码。 2、项目组成员可以把本地的repository的代码推送到服务器上。 3、可以通过网页查看git本地库的状态。 实现过程: 1、在服务器上创建Git仓库。 mkdir git_repo/test.git cd git_repo/test.git git init –bare 创建完之后,test.git 下得到如下目录:         本例中使用git协议(其他三种为local,ssl ...
    接上篇,接下来练习通过AIO实现一个简单的TCP server。熟悉NIO的朋友应该都了解ServerSocket,在AIO中与之对应的就是AsynchronousServerSocketChannel,查看其API文档,介绍如下”An asynchronous channel for stream-oriented listening sockets. “,就是一个异步的数据流监听Socket。其主要函数有如下几个: accept(): 接受一个连接,返回一个Future,可通过Future获取到Socket的状态,和数据。 accept(A attachment, Completi ...
   随着JDK7的发布,Java的AIO正式支持版本也出炉了,就像当年发布NIO特性支持时,基本上所有的Java服务器都重写了自己的网络框架以通过NIO来提高服务器的性能。AIO的发布势必也会引起Java界的一次重写风潮,现在很多的网络框架(如Mina),大型软件(如Oracle DB)都宣布自己已经在新版本中支持了AIO的特性以提高性能。下面就来看一下aio的基本原理,以及如何使用JDK7的AIO特性。     所谓AIO,异步IO,其主要是针对进程在调用IO获取外部数据时,是否阻塞调用进程而言的。一个进程的IO调用步骤大致如下:     1、进程向操作系统请求数据     2、操作系统把外 ...

从Maven到Gradle

1、安装     Gradle安装和Maven一样方便,只需要,下载(http://www.gradle.org/downloads )==》解压==》配置环境变量(GRADLE_HOME & PATH),配置好环境变量之后记得使用 source命令使新的环境变量生效。配置成功之后,可以在命令行通过 “gradle -v"验证是否安装成功。 2、Gradle编译Maven风格的java项目     首先,在项目根目录创建"build.gradle"文件,编译java项目需要使用gradle的java插件apply plugin: 'java',因为要集成m ...
1、Cucumber是什么      Cucumber是一个在敏捷团队十分流行的自动化的功能测试工具,但是其不仅仅是一个测试工具,它能够为我们建立一个易读的,可执行的特性文档。 2、Cucumber的特点 (1)、易于安装,使用。无论是在Ruby平台,.Net平台,Java平台安装都很容易。 (2)、集成度高,对开发环境没有破坏,并和多种Web开发框架集成。 (3)、易于理解,Cucumber的特性文档都是采用近似于普通文本的语法写成,很容易读懂和编写,甚至是非技术人员都可以编写。 (4)、易于维护,因Cucumber是从用户的业务逻辑出发去写测试,不涉及到具体的技术框架,和内部业务流程,因 ...
      最近在学习Ruby的时候,看到Martin Fowler的文章有说,Ruby流行的一个很重要原因是它非常适合用来编写内部领域特定语言(Internal DSL),当时对DSL这个新鲜的名词非常不解,适逢公司有精于此道的大佛,万幸求得了一次非常有收获的Session,讲解了 何为DSL? DSL为什么会诞生? 1、知识漏斗(Knowledge Funnel) 人在学习一个新知识的时侯都会经历3个阶段,Mysterious(神秘);Heuristic(启发式);Algorithm(算法化)。以下逐步浅析: Mysterious:在刚开始接触一类新的知识的时候,它对我们来说, ...
   最近开始接触Ruby和Rails的开发,个人是一个疯狂迷恋编写代码边format的编写方式,看到摆的凌乱的代码就会有一种无法言说的焦躁感,同样的习惯被我带到了Ruby的学习过程中,可是应该如何确定Ruby源文件的format呢? GitHub公布了他们的答案: Ruby Style Guide:https://github.com/bbatsov/ruby-style-guide 源代码布局方面: 1、所有源文件以UTF-8编码 2、使用2个空格的缩进 3、使用Unix风格的换行符(\n),windows(\r\n)。可使用git config --global core.autocr ...
   开篇:懒惰是程序员的优秀品质,他们无法容忍自己反复做同样的事情,无法容忍自己去做应该计算机做的事,无法容忍可以2个按键的操作却按了3个键来达到目的......   《Be Productive Programmer》就是这样一本教你如何变懒的 ...
   前2天听了熊老师的一个Session,关于List Process的,差点忘了总结,现记录如下: 从一个Story开始,现需求如下:(注:List中的每个元素都是都是整数) (1)、给定一个List,把List中的每个元素+1,返回新的List; (2)、给定一个List,把List中的每个元素*2,返回新的List; (3)、给定一个List,取出其中的偶数,返回新的List; 以TDD的思维开发,先写Testcasepublic class ListProcessTest { @Test public void test_every_element_in_lis ...

TDD step by step

   什么是TDD,字面很好理解,曾经的我以为就是先写测试,然后写实现,接着跑测试,通过,收工。今天厚着脸皮抓到高级敏捷咨询师力岩同学一起Pair,告诉我什么是真正的TDD,他以一个小Case的练习把我带进了TDD的大门,下面 ...
   找到jvm.dll之后呢?——加载。     也就是获取到应该加载的jvmPath之后,java.c接下来执行到263行:   if (!LoadJavaVM(jvmpath, &ifn)) { exit(6); },通过java_md.c的LoadJavaVM函数来加载整个JVM虚拟机,该方法有2个参数: 第 ...
对于Java程序来说,JVM是一台完整的机器,可是对于真正的机器或OS来说,JVM只是其中一个进程而已。作为一个进程,它又是如何启动的呢?如下来一步一步分析。(注,本文分析的JDK源代码是openjdk6,下载地址:http://download.java.net/openjdk/jdk6/)     JVM的进程入口是在...\jdk\src\share\bin\java.c。199行。该方法一开始初始化了一系列的指针并判断是否打开debug(通过set _JAVA_LAUNCHER_DEBUG=1打开).接下来就进入了CreateExecutionEnvironment函数,该函数主要作用 ...
其实,在代码执行到Main函数之前,需要加载初始化很多类。在初始化虚拟机的这段时间中,Bits类先于VM类初始化,即在VM还没有初始化完的时候,Bits类就已经开始初始化静态属性maxMemory,而通过反射拿到的值也是这个时候设置的 ...
开题从一个例子说起: public class NativeMemoryGC { @SuppressWarnings("restriction") public static void main(String[] args) throws SecurityException, NoSuchFieldException, ClassNotFoundException, IllegalArgumentException, IllegalAccessException, InterruptedException { System.out. ...
Global site tag (gtag.js) - Google Analytics