自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

JingHaiRoad Coder

Every step in a thousand miles, no small stream, no river.

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

原创 Docker入门

一、Docker简介Docker是一个开放源代码软件项目,让应用程序部署在软件货柜下的工作可以自动化进行,借此在Linux操作系统上,提供一个额外的软件抽象层,以及操作系统层虚拟化的自动管理机制。二、Docker Ubuntu安装在Ubuntu终端中输入安装Docker命令,安装最新版本的Dockersudo apt-get install docker-ce docker...

2019-12-01 16:46:09 264

原创 浅谈JAVA线程的生命周期,以及实现线程创建的八种方式

一、java线程的生命周期1.新生状态实现Runnable接口和继承Thread可以得到一个线程类,new一个实例出来,线程就进入了新生状态。2.运行状态:运行中状态2.1 就绪状态新生状态调用线程的start()方法,此线程进入就绪状态;等待CPU分配时间片进入运行状态,所有就绪态线程都在就绪队列中。2.2 运行状态正在执行的线程,当时间片的时间用完或...

2019-11-29 11:15:11 463

原创 JAVA使用脚本引擎执行JS代码

public class JsMainDemo { /** * @param jsStr js脚本内容 * @param function 要调用的js方法名 * @param args 调用js方法时传入的参数 * @return */ public static Object jsObjFunc(String ...

2019-11-26 18:16:15 290

原创 Mysql ERROR 1820 (HY000)异常的解决

手动更新密码:alter user 'root'@'localhost' identified by 'Hand2019!';最后记得刷新权限:flush privileges;

2019-11-22 19:59:36 494

原创 Spring Cloud Config 分布式配置中心与动态刷新

分布式配置中心 在微服务系统中,由于服务众多,在更新配置文件的时候如果一个一个的去修改无疑大大的浪费时间,降低效率,降低系统的可用性。所以这里就需要一个统一的配置文件中心,所有的服务都可以从中读取、更新配置文件。在Spring Cloud 中有分布式配置中心组件:spring cloud config,它支持将配置文件放在本地,也支持放在一个远程Git仓库中,它分为两个部分,一个是服务端...

2019-11-22 17:30:12 341

原创 Java8的新特性

一、Lambda表达式二、函数式接口三、接口的默认方法和静态方法四、方法引用五、Stream流六、Date Time API一、Lambda表达式Lambda参数 -> Lambda主体Lambda表达式是一个由参数列表、箭头、函数主体、返回值类型组成的一个匿名函数,Lambda表达式可以让我们更为简洁地表示可传递的匿名函数,Lambda表达式允许我们...

2019-11-20 09:19:24 160

原创 SpingCloud(一):注册中心Eureka

Eureka是Netflix开源的一款提供服务注册和发现的产品,它提供了完整的Service Registry和Service Discovery实现。也是springcloud体系中最重要最核心的组件之一。

2019-11-17 22:02:43 102

原创 单向链表的基本操作

定义节点package com.hand.linkedlist;/** * 节点Node */public class HeroNode { /** * 序号 */ public int no; /** * 姓名 */ public String name; /** * 下个节点 ...

2019-11-17 22:02:35 132

原创 Jvm技术栈思维导图

2019-11-17 22:02:13 221

原创 Redis技术入门

一、安装Redis及Redis Desktop Manager二、Redis命令目录三、框架操作Redis一、安装Redis及Redis Desktop Manager1、Windows下安装RedisRedis官网下载地址:http://redis.io/download打开命令窗口,指向redis目录。执行命令:redis-server redis.windows...

2019-11-17 22:01:45 147

原创 Spring核心面试必备知识点汇总整理

IOC和DI的含义Inversion of control 控制反转 不是一种技术,而是一种设计理念。意味着将设计好的对象交给容器起来进行管理和控制,而不是传统的在对象内部进行直接的控制。原来是应用程序本身是老大,需要什么资源都是主动出击,比如new xxx 的方式来获取,有了IOC之后就变成被动的了,被动等待容器来创建并注入其需要的资源对象。Dependency Injection 依赖...

2019-11-17 22:00:27 239

原创 软件设计模式——命令模式

一、定义命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。二、作用将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化。在软件系统中,行为请求者与行为实现者通常是一种紧耦合的关系,但某些场合,比如需要对行为进行...

2019-11-17 21:55:55 290

原创 软件设计模式——责任链模式

一、定义责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。二、作用避免请求发送者与接收者耦合在一起,让多...

2019-11-17 21:47:38 384

原创 软件设计模式——享元模式

一、定义享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式。二、作用运用共享技术有效地支持大量细粒度的对象。在有大量对象时,有可能会造成内存溢出,我们把其中共同的部分抽象出来,如果有相同的业务请求,直接返回在内存中已有的对象,避免重新创建。需要解决...

2019-11-13 21:40:58 238

原创 软件设计模式——外观模式

一、定义外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。二、作用为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易...

2019-11-13 21:22:18 353

原创 软件设计模式——装饰器模式

一、定义装饰器模式是为已有的模式动态地添加额外的功能的一种模式。允许向一个现有的对象添加新的功能,但是不影响其结构。作为现有对象的一个包装。这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。二、设计类图三、作用一般的,我们为了扩展一个类经常使用继承方式实现,由于继承为类引入静态特征,并且随着扩展功能的增多,子类会很膨胀。动态地给一个...

2019-11-13 21:04:21 217

原创 软件设计模式——原型模式

一、定义原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。例如,一个对象需要在一个高代价的数据库操作之后被创建。我们可以缓存该对象,在下一个请求时返回它的克隆,在需要的时候更新数据库,以此...

2019-11-11 21:30:58 422

原创 软件设计模式——单例模式

一、定义单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。注意:单例类只能有一个实例 单例类必须自己创建自己的唯一实例 单例类...

2019-11-10 20:17:47 174

原创 软件设计模式——抽象工厂模式

一、定义抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。二、解决的问题如果想创建其他类型的产品,比如除了可以生产鼠标、还可以生...

2019-11-10 19:32:20 321

原创 软件设计模式——工厂模式

一、定义工厂模式是为了解决简单工厂模式中,工厂判断方法的日渐复杂而衍生出来的模式。如果后面需要创建的“产品”越来越多,那么这个简单工厂类会包含越来越多的if-else判断类。这样维护起来会非常的麻烦。同样也违反了开闭原则。二、设计类图工厂模式也就是鼠标工厂是个父类,有生产鼠标这个接口。戴尔鼠标工厂,惠普鼠标工厂继承它,可以分别生产戴尔鼠标,惠普鼠标。生产哪种鼠标不再由参数决定,而是...

2019-11-10 17:57:38 198

原创 软件设计模式——适配器模式

一、设计类图二、意图将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。三、解决的问题主要解决在软件系统中,常常要将一些"现存的对象"放到新的环境中,而新环境要求的接口是现对象不能满足的。四、使用场景系统需要使用现有的类,而此类的接口不符合系统的需要。 想要建立一个可以重复使用的类,用于与一些彼此之间没有太大...

2019-11-10 11:41:08 209

原创 分布式文件存储数据库MongoDB技术学习总结

一、MongoDB速探含义:MongoDB是由C++语言编写的、基于分布式文件存储的非关系型数据库。在大数据量下承载性能好。MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。优点:MongoDB为什么在大数据量下有较高的查询性能?相对于关系型数据库而言,不...

2019-10-30 21:33:17 645

原创 基于数组实现队列结构

一次性队列的实现package com.hand.deque;/** * * 基于数组实现的一次性队列 */public class ArrayQueue { /** * 数组的最大容量 */ private int maxSize; /** * 队列头 */ private int front;...

2019-10-14 20:56:31 145

原创 二维数组和稀疏数组的转换

package com.hand.sparseArray;public class SparseArrayTest { public static void main(String[] args) { /** * 二维数组转稀疏数组的思路 */ //遍历原始的二维数组得到有效的数据个数sum ...

2019-10-14 17:11:23 121

原创 Web部署Tomcat启动参数参考配置

JAVA_OPTS="-Xms1024m -Xmx1024m -Xss512K -XX:PermSize=128M -XX:MaxPermSize=256m -XX:NewSize=256m -XX:MaxNewSize=512m"-X:非标准参数-Xms:初始Heap大小 使用中的最小内存 建议给整个堆内存的1/2-Xmx:Heap最大值 使用中的最大内存 建议和初始Heap保持一...

2019-09-27 19:33:18 794

原创 Oracle12c静默安装步骤总结

--关闭防火墙systemctl stop firewalld.service-- 禁止防火墙开机启动systemctl disable firewalld.service-- 关闭selinuxsetenforce 0vim /etc/selinux/config文件中设置SELINUX=disabled-- 添加必要依赖yum install binutils co...

2019-09-20 09:52:33 412

原创 To prevent a memory leak, the JDBC Driver has been forcibly unregistered.异常处理

异常信息:5-Feb-2019 11:03:11.635 严重 [RMI TCP Connection(2)-127.0.0.1] org.apache.catalina.core.StandardContext.startInternal Context [] startup failed due to previous errors15-Feb-2019 11:03:11.743 警...

2019-05-16 15:01:51 15325

原创 区块链技术系列学习——基本概念&原理

BTC 区块链 比特币 挖矿含义https://www.bilibili.com/video/av45247943?from=search&seid=3447882836102787264https://www.bilibili.com/video/av45597148?from=search&seid=16275641914668619464区块链的定义:比特币...

2019-05-12 09:56:03 804

原创 Java并发编程总结图谱(超详细)

2019-05-10 16:07:36 592

转载 IntelliJ IDEA For Mac的使用——提升开发效率

Mac键盘符号和修饰键说明⌘Command ⇧Shift ⌥Option ⌃Control ↩︎Return/Enter ⌫Delete ⌦向前删除键(Fn+Delete) ↑上箭头 ↓下箭头 ←左箭头 →右箭头 ⇞Page Up(Fn+↑) ⇟Page Down(Fn+↓) HomeFn + ← EndFn + → ⇥右制表符(T...

2019-04-30 10:25:45 573

原创 Java并发编程系列学习_volatile关键字

一、volatile的简介通过Java内存模型,我们可以知道各个线程会将共享变量从主内存中拷贝到工作内存,然后执行引擎会基于工作内存中的数据进行操作处理。线程在工作内存进行操作后何时会写到主内存中。这个时机对普通变量是没有规定的,而针对volatile修饰的变量给Java虚拟机特殊的约定,线程对volatile变量的修改会立刻被其他线程所感知,即不会出现数据脏读的现象,从而保证数据的“可见性”...

2019-04-09 15:49:07 153

原创 Java并发编程系列学习_原子操作类Atomic

一、原子操作类介绍 在并发编程中很容易出现并发安全的问题,有一个很简单的例子就是多线程更新变量i=1,比如多个线程执行i++操作,就有可能获取不到正确的值,而这个问题,最常用的方法是通过Synchronized进行控制来达到线程安全的目的。但是由于synchronized是采用的是悲观锁策略,并不是特别高效的一种解决方案。实际上,在J.U.C下的atomic包提供了一系列的操作简...

2019-04-09 13:56:31 203 1

原创 Java并发编程系列学习_并发容器ThreadLocal

ThreadLocal简介 在多线程编程中通常解决线程安全的问题我们会利用synchronzed或者lock控制线程对临界区资源的同步顺序从而解决线程安全的问题,但是这种加锁的方式会让未获取到锁的线程进行阻塞等待,很显然这种方式的时间效率并不是很好。线程安全问题的核心在于多个线程会对同一个临界区共享资源进行操作,那么,如果每个线程都使用自己的“共享资源”,各自使用各自的,又互相不影...

2019-04-08 21:14:41 163

原创 Java并发编程系列学习_并发容器CopyOnWriteArrayList

一、ArrayList线程不安全的原因ArrayList很常用,但是该集合并不是一个线程安全的集合,首先我们来看下这个集合的内部构造成员:public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java....

2019-04-08 14:10:30 180

原创 基于Xtrabackup的mysql数据库备份与还原实践

在生产环境中,除了保证项目的基本业务功能外,还有一个很重要的就是数据了。想想如果在项目上碰到以下几个场景:客户:我昨天录的xxx单子怎么不见了。。? 相关技术:xxx表的数据怎么不见了。。? 相关技术:服务器怎么崩了。。?所以,如何提高系统的高可用性和灾难恢复性,在数据崩溃时,以最小代价重新恢复数据就非常重要了?关于备份备份原因在实际应用中,可能会因为各种意外情况导致数据异常:...

2019-04-08 09:35:06 311

原创 Java并发编程系列学习_invokeAny()方法与invokeAll()方法

一、invokeAny()方法作用:取得第一个完成任务的结果值,当第一个任务执行完成后,会调用interrupt方法将其他的任务中断。在这里会出现两种情况:无 Thread.currentThread().isInterrupted() 的判断,则已经获得第一个运行的结果的值后,其他线程继续运行; 有 Thread.currentThread().isInterrupted() 的判...

2019-04-07 22:01:02 1637

原创 Java并发编程系列学习_Future和Callable接口的使用

线程Thread对象不具有返回值的功能,如果需要取得返回值是极其不方便的。在Java1.5的并发包中使用Future与Callable使得线程支持获取执行的返回的结果。接下来我们就通过几个例子来说明这点:接口Callable与Runnable接口的区别:1)Callable接口的call方法可以有返回值,但是Runnable的接口Run方法没有返回值。在call方法执行完毕,是通过Futu...

2019-04-07 15:13:40 204

原创 记一次对Mysql非空字段的默认值的误解经历

先看下表设计和插入的sql语句:插入时报错:究其原因,实际上:1.mysql字段默认的含义:在插入时不指定该字段和该字段的值,那么此时才会走默认值;2.以mybatis举例,如果是插入实体,那么为空的字段就会插入空;3.如果不想mybatis等持久化工具插入空,可以尝试insertSelective方式进行,这样为空字段会被剔除(预先进行判空处理)不为空才拼接该字...

2019-04-05 13:41:12 2220

原创 Java并发编程系列学习_CountDownLatch倒计时器&CyclicBarrier循环栅栏

一、倒计时器CountDownLatch在多线程协作完成业务功能时,有时候需要等待其他多个线程完成任务之后,主线程才能继续往下执行业务功能,在这种的业务场景下,通常可以使用Thread类的join方法,让主线程等待被join的线程执行完之后,主线程才能继续往下执行。当然,使用线程间消息通信机制也可以完成。其实,java并发工具类中为我们提供了类似“倒计时”这样的工具类,可以十分方便的完成所说的...

2019-04-01 11:32:28 175

原创 Java并发编程系列学习_Semaphore并发控制器&Exchanger数据交换器

Semaphore并发资源控制器的使用场景Semaphore可以理解为信号量,用于控制资源能够被并发访问的线程数量,以保证多个线程能够合理的使用特定资源。Semaphore就相当于一个许可证,线程需要先通过acquire方法获取该许可证,该线程才能继续往下执行,否则只能在该方法出阻塞等待。当执行完业务功能后,需要通过release()方法将许可证归还,以便其他线程能够获得许可证继续执行。S...

2019-03-29 17:00:46 178

mybatis自定义插件源码

mybatis自定义插件源码,实现了在插入数据记录时自动添加自定义字段值,sql拦截和改造。

2018-08-19

Mycat数据库中间件技术总结

mycat数据库中间件、支持分库分表。本文档对数据库的水平拆分配置、环境搭建、分片规则等做了详细描述。

2018-08-19

Dubbo monitor监控程序

支持linux、windows等多种操作系统运行;支持动态配置运行端口;可以轻松实现对dubbo的producer以及consumer的运行实例监控管理。

2018-07-28

redis技术实践

redis入门实践资料非常详细,是我们自己的实践总结!!

2018-05-23

javaweb基础技术总结

JAVAWEB开发技术的必备知识点总结。

2016-04-24

空空如也

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

TA关注的人

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