自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(59)
  • 收藏
  • 关注

原创 Java 8 Optional 类用法

1、Optional 用法/** * Optional 用法 * * @author xuweizhi * @since 2019-08-20 */public class OptionTest { /** * Optional.of() Optional.ofNullAble() Optional.empty() */ @Test p...

2019-08-20 09:54:08 140

原创 5、Linux ElasticSearch 集群配置

写在前面:为什么要用ElasticSearch?我们的应用经常需要添加检索功能,开源的Elastic Search是目前全文检索引擎的首选。它可以快速的存储、搜索和分析海量数据。ElasticSearch是一个分布式搜索框架,提供RestfulAPI,底层基于Lucene,采用多shard(分片)的方式保证数据安全,并且提供自动resharding的功能。Elasticsearch: 权威指南(...

2019-04-27 21:28:09 794

原创 4、Linux Mysql 主从数据库配置

Mysql主从配置大型网站为了软解大量的并发访问,除了在网站实现分布式负载均衡,远远不够。到了数据业务层、数据访问层,如果还是传统的数据结构,或者只是单单靠一台服务器扛,如此多的数据库连接操作,数据库必然会崩溃,数据丢失的话,后果更是不堪设想。这时候,我们会考虑如何减少数据库的联接,一方面采用优秀的代码框架,进行代码的优化,采用优秀的数据缓存技术如:memcached,如果资金丰厚的话,必然会想...

2019-04-27 21:25:24 333

原创 3、Linux 安装 git

1. 准备工作更新 yum 源yum -y update查看 git 版本git --version 卸载 gityum remove git安装wget,下载软件yum -y install wget2. 安装依赖软件yum -y install curl-devel expat-devel gettext-devel openssl-devel zlib-devel ...

2019-04-27 21:17:03 140

原创 2、 Linux 安装 Docker、JDK、Mysql 8.0.12

1. Linux 安装Docker安装命令行自动补全,Tab键yum -y install bash-completionDocker 镜像搜索网站,索性不用翻墙也可以用…https://hub.docker.com/search?q=redis&type=image1.1 yum install dockeryum install docker 安装dockersyst...

2019-04-27 21:16:44 243

原创 1、 Linux 基础命令

1. 文件相关ls -al # 查看当前目录所有文件夹包含隐藏文件并格式化ls # 查看当前目录文件rm # 删除文件pwd # 查看当前目录路径2. Linux 创建文件,并进行输入,修改,移动文件操作创建hello.txttouch hello.txt打开hello.txtvi hello.txt # 进入并修改文件i ...

2019-04-27 21:16:20 113

原创 0、Linux 安装命令行管理工具

On My Zsh1.安装zshyum install -y zsh装完之后验证一下最后一行有/bin/zshcat /etc/shells切换shell为zsh再重进登录一下终端就可以用了chsh -s /bin/zsh2.安装oh-my-zshwget https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/i...

2019-04-27 21:15:53 447

转载 Java与设计模式(十四)创建型--原型模式

一、原型模式概述在使用原型模式时,我们需要首先创建一个原型对象,再通过复制这个原型对象来创建更多同类型的对象。试想,如果连孙悟空的模样都不知道,怎么拔毛变小猴子呢?原型模式的定义如下: 原型模式(Prototype Pattern):使用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。原型模式是一种对象创建型模式。用的比较少,了解即可原型模式的工作原理很简单:将一个原型对象传给那...

2019-04-19 15:30:23 79

转载 Java与设计模式(十三)创建型--建造者模式

没有人买车会只买一个轮胎或者方向盘,大家买的都是一辆包含轮胎、方向盘和发动机等多个部件的完整汽车。如何将这些部件组装成一辆完整的汽车并返回给用户,这是建造者模式需要解决的问题。建造者模式又称为生成器模式,它是一种较为复杂、使用频率也相对较低的创建型模式。建造者模式为客户端返回的不是一个简单的产品,而是一个由多个部件组成的复杂产品。大概了解一下这个模型就行。一、建造者模式概述建造者模式是较为复杂...

2019-04-19 15:24:05 112

转载 Java与设计模式(十二)创建型--单例模式

1. 一、单例模式的动机对于一个软件系统的某些类而言,我们无须创建多个实例。举个大家都熟知的例子——Windows任务管理器,我们可以做一个这样的尝试,在Windows的“任务栏”的右键弹出菜单上多次点击“启动任务管理器”,看能否打开多个任务管理器窗口?通常情况下,无论我们启动任务管理多少次,Windows系统始终只能弹出一个任务管理器窗口,也就是说在一个Windows系统中,任务管理器存在唯一...

2019-04-19 15:11:21 77

转载 Java与设计模式(十一)创建型--抽象工厂模式

工厂方法模式通过引入工厂等级结构,解决了简单工厂模式中工厂类职责太重的问题,但由于工厂方法模式中的每个工厂只生产一类产品,可能会导致系统中存在大量的工厂类,势必会增加系统的开销。此时,我们可以考虑将一些相关的产品组成一个“产品族”,由同一个工厂来统一生产。一、需求比如开发一套界面皮肤库,可以对Java桌面软件进行界面美化。为了保护版权,该皮肤库源代码不打算公开,而只向用户提供已打包为jar文件...

2019-04-19 15:10:50 124

转载 Java与设计模式(十)创建型--工厂方法模式

简单工厂模式虽然简单,但存在一个很严重的问题。当系统中需要引入新产品时,由于静态工厂方法通过所传入参数的不同来创建不同的产品,这必定要修改工厂类的源代码,将违背“开闭原则”,如何实现增加新产品而不影响已有代码?一、需求比如开发一个系统运行日志记录器(Logger),该记录器可以通过多种途径保存系统的运行日志,如通过文件记录或数据库记录,用户可以通过修改配置文件灵活地更换日志记录方式。在设计各类...

2019-04-16 12:51:36 162

转载 Java与设计模式(九)创建型--简单工厂模式

一、需求比如我想开发一套图表库,该图表库可以为应用系统提供各种不同外观的图表,例如柱状图、饼状图、折线图等,那我们可以这样写。代码如下:public class Chart { private String type; // 图表类型 public Chart(String type) { this.type = type; if (type...

2019-04-16 12:15:56 175

转载 Java与设计模式(八)设计原则--开闭原则

一、定义开闭原则是面向对象的可复用设计的第一块基石,它是最重要的面向对象设计原则。开闭原则由Bertrand Meyer于1988年提出,其定义如下:开闭原则(Open-Closed Principle, OCP):一个软件实体应当对扩展开放,对修改关闭。即软件实体应尽量在不修改原有代码的情况下进行扩展。在开闭原则的定义中,软件实体可以指一个软件模块、一个由多个类组成的局部结构或一个独立的类...

2019-04-16 11:41:30 87

转载 Java与设计模式(七)迪米特法则(最少知道原则)

一、定义迪米特法则来自于1987年美国东北大学(Northeastern University)一个名为“Demeter”的研究项目。迪米特法则又称为最少知识原则(LeastKnowledge Principle, LKP),其定义如下:迪米特法则(Law of Demeter, LoD):一个软件实体应当尽可能少地与其他实体发生相互作用。如果一个系统符合迪米特法则,那么当其中某一个模块发生...

2019-04-16 11:35:19 175

转载 Java与设计模式(六)设计原则--接口隔离原则

一、定义接口隔离原则定义如下: 接口隔离原则(Interface Segregation Principle, ISP):使用多个专门的接口,而不使用单一的总接口,即客户端不应该依赖那些它不需要的接口。根据接口隔离原则,当一个接口太大时,我们需要将它分割成一些更细小的接口,使用该接口的客户端仅需知道与之相关的方法即可。每一个接口应该承担一种相对独立的角色,不干不该干的事,该干的事都要干...

2019-04-16 11:18:25 87

转载 Java与设计模式(五)设计原则--依赖倒置原则

一定义一、定义如果说开闭原则是面向对象设计的目标的话,那么依赖倒转原则就是面向对象设计的主要实现机制之一,它是系统抽象化的具体实现。依赖倒转原则是Robert C. Martin在1996年为“C++Reporter”所写的专栏Engineering Notebook的第三篇,后来加入到他在2002年出版的经典著作“Agile Software Development, Pri...

2019-04-16 10:58:13 90

转载 Java与设计模式(四)设计原则--里氏代换原则

一定义一、定义里氏代换原则由2008年图灵奖得主、美国第一位计算机科学女博士Barbara Liskov教授和卡内基·梅隆大学Jeannette Wing教授于1994年提出。其严格表述如下:如果对每一个类型为S的对象o1,都有类型为T的对象o2,使得以T定义的所有程序P在所有的对象o1代换o2时,程序P的行为没有变化,那么类型S是类型T的子类型。这个定义比较拗口且难以理解,因此...

2019-04-16 10:40:13 134

转载 Java与设计模式(三)设计原则--单一职责原则

一定义二单一职责优点一、定义单一职责原则是最简单的面向对象设计原则,它用于控制类的粒度大小。单一职责原则定义如下: 单一职责原则(Single Responsibility Principle, SRP):一个类只负责一个功能领域中的相应职责,或者可以定义为:就一个类而言,应该只有一个引起它变化的原因。单一职责原则告诉我们:一个类不能太“累”!在软件系统中,一个类(大到模块...

2019-04-16 10:37:19 83

转载 Java与设计模式(二)类之间的关系

概述一依赖关系Dependence二关联关系Association三聚合Aggregation四组合Composition五继承Generalization六实现Implementation七总结概述1) 类(Class)封装了数据和行为,是面向对象的重要组成部分,它是具有相同属性、操作、关系的对象集合的总称。2) 在系统中,每个类具有一定的职责,职责指的是类...

2019-04-16 10:28:25 372

转载 Java与设计模式(一)设计模式概述

一设计模式的由来设计模式从何而来软件工程中的设计模式二设计模式是什么what三为什么用设计模式why四怎样学习设计模式how一、设计模式的由来设计模式从何而来在介绍设计模式的起源之前,我们先要了解一下模式的诞生与发展。与很多软件工程技术一样,模式起源于建筑领域,毕竟与只有几十年历史的软件工程相比,已经拥有几千年沉淀的建筑工程有太多值得学习和借鉴的地方。 那么模式...

2019-04-16 10:24:16 104

转载 关于HTTP协议,一篇就够了

HTTP简介HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。...

2019-04-09 15:00:13 358

转载 Java 内存模型(五)——锁

锁的释放 - 获取建立的 happens before 关系锁是 java 并发编程中最重要的同步机制。锁除了让临界区互斥执行外,还可以让释放锁的线程向获取同一个锁的线程发送消息。下面是锁释放 - 获取的示例代码:class MonitorExample { int a = 0;public synchronized void writer() { //1 a++; ...

2019-03-26 11:15:14 103

转载 Java 内存模型(四)——volatile

volatile 的特性当我们声明共享变量为 volatile 后,对这个变量的读 / 写将会很特别。理解 volatile 特性的一个好方法是:把对 volatile 变量的单个读 / 写,看成是使用同一个监视器锁对这些单个读 / 写操作做了同步。下面我们通过具体的示例来说明,请看下面的示例代码:class VolatileFeaturesExample { volatile lon...

2019-03-26 11:10:33 165

转载 Java 内存模型(三)——顺序一致性

数据竞争与顺序一致性保证当程序未正确同步时,就会存在数据竞争。java 内存模型规范对数据竞争的定义如下:在一个线程中写一个变量, 在另一个线程读同一个变量, 而且写和读没有通过同步来排序。当代码中包含数据竞争时,程序的执行往往产生违反直觉的结果(前一章的示例正是如此)。如果一个多线程程序能正确同步,这个程序将是一个没有数据竞争的程序。JMM 对正确同步的多线程程序的内存一...

2019-03-26 11:10:08 70

转载 Java 内存模型(二)——重排序

数据依赖性如果两个操作访问同一个变量,且这两个操作中有一个为写操作,此时这两个操作之间就存在数据依赖性。数据依赖分下列三种类型:名称 代码示例 说明 写后读 a = 1;b = a; 写一个变量之后,再读这个位置。 写后写 a = 1;a = ...

2019-03-26 11:09:19 83

转载 Java 内存模型(一)——基础

并发编程模型的分类在并发编程中,我们需要处理两个关键问题:线程之间如何通信及线程之间如何同步(这里的线程是指并发执行的活动实体)。通信是指线程之间以何种机制来交换信息。在命令式编程中,线程之间的通信机制有两种:共享内存和消息传递。在共享内存的并发模型里,线程之间共享程序的公共状态,线程之间通过写 - 读内存中的公共状态来隐式进行通信。在消息传递的并发模型里,线程之间没有公共状态,线程之间必须通...

2019-03-26 11:08:37 95

原创 Linux安装

主要是Linux配置网络,安装详情查看其它博客Linux 中安装Docker,使用Docker安装Tomcat,Mysql,Redis,RabbitMqLinux安装MySql8.0Linux安装最新版本git

2019-03-26 11:06:22 99

转载 Linux-- aliyun docker 加速

sudo mkdir -p /etc/dockersudo tee /etc/docker/daemon.json <<-‘EOF’{“registry-mirrors”: [“https://ixbgv285.mirror.aliyuncs.com”]}EOFsudo systemctl daemon-reloadsudo systemctl restart docke...

2019-03-26 11:01:10 266

转载 Linux更新内核

升级 CentOS 内核参考资料 2 通过 /proc 虚拟文件系统读取或配置内核 Linux 内核官网 CentOS 官网1. 关于 Linux 内核Linux 内核分两种:官方内核(通常是内核开发人员用)和各大 Linux 发行版内核(一般用户常用)。1.1 官方内核在使用 Docker 时,发现其对 Linux 内核版本的最低要求是 3.10(这也刚好是 CentOS 7.2...

2019-03-26 11:00:44 4071 1

原创 linux 安装 git (二)

1.查看git版本,卸载旧版本(如果没有安装git请直接到下一步)git --versionyum remove git2. 安装依赖软件yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel asciidocyum install gcc perl-ExtUtils-MakeMaker3...

2019-03-26 10:57:56 79

原创 Linux基本命令(一)

查看目录ls -al 产看所有目录结构rm 删除文件pwd 查看当前目录Linux 创建文件,并进行输入,修改,移动文件操作创建hello.txttouch hello.txt打开hello.txtvi hello.txti 修改hello.txt文件内容esc :wq保存并退出文件cat hello.txt 查看文件cp hello.txt hello2.tx...

2019-03-26 10:56:45 584 1

转载 (十四)垃圾收集器

前言Garbage First(G1)是垃圾收集领域的最新成果,同时也是HotSpot在JVM上力推的垃圾收集器,并赋予取代CMS的使命。如果使用Java 8/9,那么有很大可能希望对G1收集器进行评估。本文详细首先对JVM其他的垃圾收集器进行总结,并与G1进行了简单的对比;然后通过G1的内存模型、G1的活动周期,对G1的工作机制进行了介绍;同时还在介绍过程中,描述了可能需要引起注意的优化点。...

2019-03-10 23:34:34 104

原创 (十三)垃圾收集器与内存分配策略

1.概述其实当我们在讨论垃圾回收的时候,我们常常要思考垃圾收集(Garbage Collection)需要完成的三件事情:哪些内存需要回收?什么时候回收?如何回收?1.1 哪些内存需要回收Java内存运行时区域的各个部分,其中程序计数器,虚拟机栈、本地方法栈3个区域随线程而生,随线程而灭;栈中的栈帧随着方法的进入和退出有条不紊地执行着出栈和入栈操作。每一个栈帧中分配多少内存基本上...

2019-03-10 23:08:01 145

翻译 (十二)JVM内存空间划分与作用详解

1.JVM内存空间虚拟机栈:Stack Frame 栈帧程序计数器本地方法栈:主要处理本地方法堆(Heap):栈中引用指向堆内村对象地址,对象分为两部分对象本身真正拥有的实例数据,对象所属的类型(元数据信息,只拥有一部分),储存在方法区(堆内)。这样方式在垃圾回收的时候,指针的移动的频率相当高。第一种方式:栈中引用不是指向对象本身,堆中对象拥有真正实例数据的指针和元数据指针,实例数据...

2019-03-08 17:10:12 432

转载 (七)Java Class文件格式、常量池项目的类型、表的结构

* u1、u2、u4分别代表1字节、2字节、4字节1.Class文件格式magic:魔数,值为0xcafe baby,表示这是一个可以被虚拟机接收的class文件。很多文件存储标准都使用魔数进行身份识别,比如gif,jpeg。使用魔数而不是文件后缀名的是因为后缀名可以随意改动,使用魔数比较安全。major_version:主版本号,52对应JDK1.8&amp;n...

2019-03-04 10:47:25 459

原创 (六)JVM字节码文件

一. 初识字节码文件1. 编写Java测试类package com.java.jvm.bytecode;/** * @author xuweizhi * @date 2019/03/03 12:57 * * */public class ByteCode1 { private int a = 1; public int getA() { re...

2019-03-04 10:44:57 311

原创 (二)SPI解决方案

package com.java.jvm.order;import java.sql.Connection;import java.sql.Driver;import java.sql.DriverManager;import java.sql.SQLException;import java.util.Iterator;import java.util.ServiceLoader;...

2019-03-01 15:47:19 486

转载 6.上下文类加载器

1. 方法调用方法调用不同于方法执行,调用阶段主要确定方法调用者的版本,方法调用的目标方法在Class文件都是常量池中的符号引用。而在方法表的code属性中有对应调用该方法的字节码指令。那么在解析阶段,会把一部分符号引用转化成直接引用,那么是哪一部分呢?解析调用能在解析阶段将方法的符号引用转化成直接引用的的方法,必须在方法运行前就确定一个可调用的版本,并且这个版本在运行阶段是不可改变的。就是...

2019-02-28 15:12:22 190

转载 7.虚拟机字节码执行引擎

运行时栈帧结构栈帧是用于支持虚拟机进行方法调用和方法执行的数据结构。栈帧存储了方法的局部变量表,操作数栈,动态连接和方法返回地址等信息前面说到class文件的方法表集合,每一个方法表后面都可以有一个code属性,存放方法体里面的代码翻译过来的字节码指令,code属性的参数有最大操作数栈深度,局部变量表的大小,这些都是在编译期间确定的。那么在执行引擎运行字节码文件时,调用一个方法就会在虚拟机栈生...

2019-02-28 14:45:19 105

空空如也

空空如也

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

TA关注的人

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