自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 单例模式

一 为什么用单例模式单例模式是设计模式中使用最为普便的模式之一。它是一种对象创建模式,用于产生一个对象的具体实例,它可以确保系统中一个类只产生一个实例。在java中,这样的行为能带来量大好处:1、对于频繁使用的对象,可以省略new操作花费的时间;2、由于new操作的次数减少,因而对系统内存的使用频率也会降低,这将减轻gc压力,缩短gc停顿时间;二 单例模式的实现方式2.1 饿汉...

2018-09-02 23:12:52 241

原创 jdk- 线程不安全的 SimpleDateFormat

一 测试 demo我们先来写一个测试 demopublic class SimpleDateFormatTest { private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); static class ParseDate implements Runn...

2018-08-29 21:48:58 343

原创 zk- 事件注册/通知详解

 

2018-08-29 10:16:58 596

原创 zk- 注册/通知

 

2018-08-29 10:14:40 357

原创 zk- 使用场景

 

2018-08-29 10:12:38 354

原创 zk-acl 权限控制

 

2018-08-29 10:09:24 542

原创 zk- 数据模型

 

2018-08-29 10:04:55 236

原创 redis- 分布式锁

一 设计思路1. 本地锁:本地多线程并发时,保证只有一个线程在竞争 redis 锁;2. redis 锁(setNX):分布式部署多个服务器之间并发时,保证只有一个服务器可以竞争到 redis 锁;3. 本地多线程并发时,先获取本地锁成功,然后再去尝试获取 redis 锁;redis  锁的实现原理 setNX:redis 的 setNX 操作在设置同一个 key 时,只会有一个...

2018-08-27 21:09:02 328

原创 jdk-juc.Executor接口与js对比理解

 

2018-08-23 21:03:06 155

原创 jdk-juc.atomic 类图理解

 

2018-08-23 21:03:01 202

原创 jdk-ReentrantLock 理解

一 类定义(re entrant lock:重入锁)public class ReentrantLock implements Lock, java.io.Serializable二 理解 

2018-08-23 21:02:55 146

原创 jdk-juc.locks 类图

 

2018-08-23 21:02:48 267

原创 jdk-java.util.function包理解

 

2018-08-23 21:02:43 272

原创 jdk-Collectors 收集器方法理解

 

2018-08-23 21:02:37 154

原创 jdk-Stream 流操作示意图

 

2018-08-23 21:02:27 221

原创 jdk-juc 类图

 

2018-08-20 10:36:55 577

原创 jdk-BlockingQueue 理解

一 类定义public interface BlockingQueue<E> extends Queue<E> 二 理解 

2018-08-20 10:33:57 168

原创 jdk-AbstractQueue 理解

一 类定义public abstract class AbstractQueue<E> extends AbstractCollection<E> implements Queue<E>二 理解 

2018-08-20 10:31:39 568

原创 jdk-Collection 理解

一 类定义public interface Collection<E> extends Iterable<E>二 理解 

2018-08-20 10:29:35 173

原创 jdk-Queue 理解

一 类定义public interface Queue<E> extends Collection<E>二 理解  

2018-08-20 10:25:05 264

原创 jdk-Iterator 理解

 

2018-08-20 10:23:36 147

原创 jdk-wait/notify(notifyAll)时序图理解

 

2018-08-20 10:21:16 320

原创 jdk-线程状态转换(public enum State)

 一 源码public enum State { /** * Thread state for a thread which has not yet started. */ NEW, /** * Thread state for a runnable thread. A thread i...

2018-08-20 10:05:25 692

原创 jdk-线程调度相关方法

 

2018-08-20 10:02:57 147

原创 jdk-LocalDate 理解

一 类定义public final class LocalDate implements Temporal, TemporalAdjuster, ChronoLocalDate, Serializable二 理解 

2018-08-20 10:00:07 334

原创 RabbitmMQ安装

rabbitmq这个demo由Spring Boot 搭建的 rabbitmq的简单测试。存在两个分支,master分支是接收RESTful接口请求数据,并将接收到的数据发送到指定的消息队列(hello队列和test队列)。receiver分支是监听消息队列(hello和test队列),并将队列内的消息消费掉。在启动项目前你需要安装RabbitMQ server,因为RabbitMQ是用ErLang

2018-03-01 15:55:37 395

原创 Java定时器Timer

定时器的实现原理就是新开一个子线程执行定时任务。一、一次执行定时器。一次执行定时器的时间如果在当前时间以前会立即执行任务,如果在未来时间,则会到指定的未来时间再执行任务。示例代码:public static void main(String[] args) { try{ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM

2018-03-01 15:53:16 225

原创 ReentrantLock结合Condition唤醒指定线程

关键字synchronized与notify()/notifyAll()方法相结合可以实现等待/通知模式,类ReentrantLock也可以实现同样的功能,但需要借助于Condition对象。在使用notify()/notifyAll()方法进行通知时,被通知的线程却是由JVM随机选择的。但使用ReentrantLock结合Condition类是可以实现“选择性通知”,这个功能是非常重要的,而且在C

2018-02-25 11:12:04 2767

原创 从单实例部署到负载均衡的演变

还记得刚开始学java ee的时候跑个tomcat然后可以访问就已经很开心和满足了。但是真实的项目部署都是业务服务器多实例部署,通过nginx反向代理,然后代理服务器nginx还需要做主备容灾预防。今天我们就来看一看这其中的演变过程。一、单实例部署单实例的时候我们对用户登录管理一般采用的都是session,毕竟所有用户的登录及其后续操作全部都是在一个实例上,所以他们的session也就在这个实例内

2018-02-25 11:09:52 349

原创 web开发者不可不知的网络知识

作为一名java EE开发者,我们最常用到的可能就是http协议了,但是我们对http协议及其之下的各层协议真的清楚嘛。现在我们就来大概的了解一下。 一、应用层-HTTP 二、传输层-TCP 三、网络层-IP一、应用层-HTTP一个http请求包含三个组成部分: 1. 方法-统一资源标识符(uri)-协议/版本 2. 请求的头部 3. 主体内容以下是一个http

2018-02-25 11:08:33 140

原创 Docker常用命令

Docker常用命令复制镜像 docker tag imageName:latest newName移除镜像 docker rmi imageName查看全部镜像 docker images启动某个镜像 docker run --name containerName -d -p 暴露端口:镜像端口 imageName查看全部容器 ...

2018-02-25 11:06:38 111

原创 Lock接口的使用

在java多线程中,可以使用synchronized关键字来实现线程之间同步互斥,但在jdk1.5中新增加了ReentrantLock类也能达到同样的效果,并且在扩张功能上也更加强大,使用上也比synchronized更加的灵活。示例代码:// class Service01public class Service01 { private Lock lock = new Reentrant

2018-02-25 11:04:03 166

原创 Tomcat工作原理

tomcat就是一个tcp服务器socketServer,一直在监听着指定的端口port。 一个tomcat内可以部署多个项目(app),每一个项目都有自身的应用上下文(context)。 一个上下文容器(Context)代表一个web应用,每一个上下文包括多个包装器(Wrapper),每个包装器代表一个Servlet。tomcat内存在一个process连接池,有请求过来会去连接池内获取pro

2018-02-25 10:59:45 331

原创 NodeJs模块机制

一、CommonJs规范讲到nodejs的模块化就不得不讲CommonJs规范了,在以前的文章里也有讲过CommonJs相关使用,具体使用可以到JavaScript类别下查看,这里就不放传送门了。在这里就不多做赘述了,下面就说一下基本的用法。导出模块 module.exports:// DateUtil.jsclass DateUtil { static getDate() {

2018-02-25 10:58:00 1870

原创 NodeJs异步IO

一、异步的应用对于前端开发人员来说,异步编程再普遍不过了(ajax)。对于服务端(java)开发人员来说,也存在异步编程,相关编写可参见Java分类下的“java编写异步处理方法提升系统性能”该篇文章,这里也就不放传送门了。对于移动端所有的触发事件也都是异步的,相关开发人员应该也都是很熟悉的。二、异步和同步的比较在java中如果需要发起网络请求,假设我们已经封装好了一个方法,如下:Log.log("

2018-02-25 10:57:15 777

原创 阅读历程

专业相关阅读已读《TCP/IP原理》《Java多线程编程核心技术》《深入剖析TOMCAT》《白帽子讲web安全》《RabbitMQ实战 高效部署分布式消息队列》《第一行代码》《redis的设计与实现》《JavaScript高级程序设计》《深入分析java web技术内幕》《深入理解 JVM》《大型网站系统架构与java中间件》《深入浅出NodeJs》《高性...

2018-02-25 10:56:24 204

原创 V8垃圾回收机制

一、NodeJs执行环境我们都知道在chrome浏览器内JavaScript是在v8上解释执行的,NodeJs就是基于JavaScript环境和语言编写的,它的执行环境也就离不开v8了。放张图来说明一下浏览器和NodeJs执行环境的对比。上图可用看到,在浏览器中因为需要渲染UI界面(HTML,CSS),所以多出来了浏览器的WebKit内核以及底层也会调用到显卡来显示渲染界面。而NodeJs的使用场景

2018-02-25 10:55:42 1288

原创 thymeleaf模块取消HTML5强校验

一、pom.xml添加以下依赖<dependency> <groupId>net.sourceforge.nekohtml</groupId> <artifactId>nekohtml</artifactId> <version>1.9.22</version> </dependency> 二、spring配置文件添加以下配置信息spring

2018-02-24 13:47:17 2057

原创 electron 提供SDK接口注入到远端页面使用

一、加载远端页面在main.js内通过 BrowserWindow 对象加载远端页面,如下所示:'use strict';const electron = require('electron')const globalShortcut = electron.globalShortcut;// Module to control application life.const app = elec

2018-02-24 13:46:33 7679 1

原创 JS Object静态方法讲解

一、Object.assign()将多个对象的可枚举属性拷贝到目标对象上,并且返回赋值后的目标对象。 Object.assign(target, …sources)target:目标对象…sources:源对象测试如下:var source1 = { name1: 'source1', age1: 18};var source2 = { name2: 'source2',

2018-02-24 13:46:00 1402

空空如也

空空如也

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

TA关注的人

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