设计模式之工厂模式(简单工厂模式+工厂方法模式)

需要增加UML
需要增加UML
需要增加UML

开发中通常使用new产生一个对象的实例

无模式

//生产Audi
public class Audi{
    public Audi(){
        System.out.println("制造 audi.....");
    }
}
//生产Benz
public class Benz {
    public Benz(){
        System.out.println("制造Benz....");
    }
}
//客户使用new生产一辆车
public class Customer{
    public static void main(String[] args) {
        Audi audi = new Audi();
        Benz benz = new Benz();
    }
}

简单工厂(SimpleFactory)模式

- 阅读全文 -

设计模式: 单例模式(懒汉模式和饿汉模式)

单例模式即只有一个实例,实现分为懒汉模式和饿汉模式。

饿汉模式

/**
 * 单例模式_饿汉模式
 * 类加载的时候完成初始化,因此加载速度相对较慢,但运行是获取对象的速度相对较快
 * 线程安全
 * Created by zhangguoli on 09-18-018.
 * YXV0aG9yOiB6aGFuZ2d1b2xpLmNu
 */
public class SingletonHungry {

    //① 构造方法私有化,外部不可以直接创建对象
    private SingletonHungry() {

    }

    //② 创建类的唯一实例,使用private static修饰
    private static SingletonHungry instance = new SingletonHungry();

    //③ 提供统一对外获取实例的方法
    public static SingletonHungry getInstance() {
        return instance;
    }
}

懒汉模式

- 阅读全文 -

Java程序员开发中常用Linux命令

样式需要修改,命令顺序需要调整
样式需要修改,命令顺序需要调整
样式需要修改,命令顺序需要调整

##.当前目录
..上一级目录
/根目录

1、mv /opt/tomcat-7.0.69 /opt/tomcat7

修改文件(夹)名字: mv 修改前文件(夹)名 修改后文件(夹)名

2、ps -ef | grep tomcat

ps是Process Status的意思,用来列出系统中当前运行的进程

grep是Global Regular Expression Print,正则表达式

3、kill -9 -pid

-pid是线程ID,-9是强制执行

4、find . -name 're\*' [-type d]

find 位置 参数

.代表当前目录及子目录, /根目录

re*代表以re开头的文件名,属于正则表达式的内容

- 阅读全文 -

Java实现二分查找:递归和非递归

二分查找的前提是数组已经是排好序的了

递归方式

 /**
     * 二分查找_递归
     *
     * @param array 排序好的数组
     * @param low   数组下标
     * @param high  数组下标
     * @param key   要查找的值
     * @return 返回数组下标, 找不到返回-1
     */
    static int binarySearchRecursion(int array[], int low, int high, int key) {
        if (low > high)
            return -1;
        int mid = (low + high) / 2;
        if (array[mid] > key)
            return binarySearchRecursion(array, low, mid - 1, key);
        if (array[mid] < key)
            return binarySearchRecursion(array, mid + 1, high, key);
        return mid;
    }

非递归方式

- 阅读全文 -

实现线程的四种方式

实现Runnable接口

public class FirstThread implements Runnable {

    @Override
    public void run() {
        System.out.println("first thread run...");
    }
}

new Thread(new FirstThread().start())

继承Thread类

Thread类本身就是实现的Runnable接口: Thread implements Runnable

public class SecondThread extends Thread {

    @Override
    public void run() {
        System.out.println("second thread run...");
    }
}
new Thread(new SecondThread().start())

实现Callable接口来创建Thread线程

- 阅读全文 -

String.indexOf实现

package cn.gl.work;

/**
 * Created by guoli on 2017/9/9 0009.
 * YXV0aG9yOiB6aGFuZ2d1b2xpLmNu
 */
public class StringIndexOf {

    public int IndexOf(String source, String target) {
        char[] sources = source.toCharArray();
        char[] targets = target.toCharArray();
        int sourceCount = sources.length;
        int targetCount = targets.length;
        char first = targets[0];
        int max = sourceCount - targetCount;
        for (int i = 0; i <= max; i++) {
            //1. 第一个字符相等
            if (sources[i] != first) {
                while (++i < max && sources[i] != first) {
                    ;
                }
            }
            //2、匹配2到子串
            if (i < max) {//未到最后
                int j = i + 1;
                int end = j + targetCount - 1;
                for (int k = 1; j < end && sources[j] == targets[k]; j++, k++) {
                    ;//子串和原串截取的部分在循环对比
                }
                if (j == end) {//找到了
                    return i;
                }
            }
        }
        return -1;
    }
}

CentOS安装MySQL,设置外网访问

本文内容有误,不建议参考。

操作环境:CentOS 6.5MySQL 5.*

1、查看是否安装MySQL

yum list installed | grep mysql

2、卸载自带MySQL

一般的Linux发行版会自带MySQL,但是主机服务商提供的Linux发行版不带MySQL,如果主机上没有安装MySQL则忽略此处

yum -y remove mysql-libs.x86_64

如果存在多个依赖文件也一并卸载

3、安装MySQL

yum -y install mysql-server mysql mysql-devel

如果提示No package *** available不可用,则增加MySQL repo

vim /etc/yum.repos.d/mysql-community.repo

增加如下内容:

# Enable to use MySQL 5.6
[mysql56-community]
name=MySQL 5.6 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.6-community/el/6/$basearch/
enabled=1
gpgcheck=1
gpgkey=

重新安装MySQL

- 阅读全文 -

说走就走的旅行: 重庆--济南

    计划总是赶不上变化。

    8.15日晚,一本正经的计划着去西安,后来又看了到济南的机票,纠结了一下,最终买了往返的机票。简单的收拾了一下,8.16日凌晨一点多才躺下,半夜又醒了好几次,太鸡冻了。

    八点半的飞机,五点的闹钟,迷迷糊糊醒来才知道今天要去济南了,一次说走就走的旅行!

重庆-张国利博客

- 阅读全文 -

Spring的切点表达式

execution(returnType package.class.method(param)

1、returnType

返回类型: public String、private int

2、package.class.method

包.类.方法均可用*代替,例如: *.class.methodpackage.class.**

3、 param:

()匹配了一个不接受任何参数的方法
(..)零或者更多个任意类型参数的方法
(*)一个任意类型的参数方法

- 阅读全文 -

Spring AOP 中处理通知中的参数(注解方式)

演员演出需要记录每个演员的演出次数

1. Performance接口和Actor类

package aop;

/**
 * Created by guoli on 2017/7/28 0028.
 * YXV0aG9yOiB6aGFuZ2d1b2xpLmNu
 */
public interface Performance {

    /**
     * @param number 演员编号
     */
    public void playTrack(String number);
}
package aop;

import org.springframework.stereotype.Component;

/**
 * Created by guoli on 2017/7/28 0028.
 * YXV0aG9yOiB6aGFuZ2d1b2xpLmNu
 */
@Component
public class Actor implements Performance {

    @Override
    public void playTrack(String number) {
        System.out.println(number + " number actor");
    }
}

- 阅读全文 -