自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 JDK1.8源码之LinkedList

LinkedList采用双链表的数据结构,可以用作列表做存储,也可以用做双端队列。部分属性与Node结构 //指向列表的第一个元素 transient Node<E> first; //指向列表的最后一个元素 transient Node<E> last; //Node节点 private static class Node<E&gt...

2019-09-23 20:10:34 209

原创 设计模式之简单工厂模式

简单工厂模式or静态工厂方法模式:由一个工厂对象决定创建出哪一种产品类的实例。一个简单的例子需求场景:A应用需要向不同应用请求不同的数据构建请求产品public interface Request { Object sendRequest(Object object);}请求产品工厂public class RequestFactory { public Requ...

2019-09-22 22:01:16 178

原创 JDK1.8源码之ArrayList

部分重要属性 //存放元素的数组 transient Object[] elementData; //大小,非elementData的length,存入元素的总个数 private int size;add方法 public boolean add(E e) { //保证数组不溢出,否则进行扩容操作 ensureCapacityIn...

2019-09-22 19:44:27 180

原创 设计模式之单例模式

单例模式:一个类有且仅有一个实例,并且自行实例化向整个系统提供。线程安全式实现方式饿汉式实现(非静态代码块)public class Singleton { private static Singleton singleton = new Singleton(); private Singleton(){ } public static Singleton...

2019-09-21 19:03:31 147

原创 JDK1.8源码之ConcurrentHashMap(三)table初始化及扩容机制

table初始化方法initTable() private final Node<K,V>[] initTable() { Node<K,V>[] tab; int sc; while ((tab = table) == null || tab.length == 0) { if ((sc = sizeCtl)...

2019-09-21 15:05:06 415

原创 JDK1.8源码之ConcurrentHashMap(二)

put方法final V putVal(K key, V value, boolean onlyIfAbsent) { //key和value不能为空 if (key == null || value == null) throw new NullPointerException(); int hash = spread(key.hashCo...

2019-09-13 13:55:11 129

原创 JDK1.8源码之ConcurrentHashMap(一)

部分重要属性 //存放key,value数据 transient volatile Node<K,V>[] table; //为了扩容操作时,不影响读操作而设立,因此不保证读写实时一致性 private transient volatile Node<K,V>[] nextTable; //基础计数,使用CAS操作更新 private tran...

2019-09-13 13:24:08 142

原创 JDK源码之HashMap

部分重要属性 //存放key,value的数组 transient Node<K,V>[] table; //存放Entry的set transient Set<Map.Entry<K,V>> entrySet; //hashMap的大小 默认16 transient int size; //修改次数 ...

2019-09-03 16:39:29 136

原创 非volatile变量读写在多线程环境中解释运行和编译运行的不同结果

基本知识Java程序默认采用混合执行模式,即既有解释运行,也有JIT编译运行。Java程序运行期间,先解释运行,在一定条件下触发JIT编译运行。JIT编译器编译判决条件基于方法调用计数器和方法中的循环回边计数器。循环的回边计数器超过阈值,循环可以被编译,这种编译称作OSR编译(栈上替换)。计数器会周期性减少,这意味着计数器只是方法或循坏最新热度的度量。测试目的查看非volati...

2019-08-25 23:29:14 259

原创 微服务springCloud概述

微服务简单的说,微服务是系统架构上的一种设计风格,它的主旨是将一个原本独立的系统拆分成多个小型服务,这些小型服务都在各自独立的进程中运行,服务之间通过基于HTTP的RESTful API进行通信协作。摘自:Spring Cloud微服务实战翟永超(著)springCloud的组件服务治理Eureka1.服务注册,客户端服务启动向注册中心登记自己提供的服务,包括主机号,端口号,版本号,通信协...

2019-08-25 01:04:34 168

原创 Docker

什么是dockerDocker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。windows下docker的下...

2019-08-21 15:24:51 145

原创 JavaNIO之初识Netty

Netty是一个高性能的NIO框架,它支持TCP粘包分包,在Netty4中对ByteBuf进行池化(即对内存加以管理,内存池化加以复用),采用堆外内存,可以减少不必要的对象创建,对GC更友好。Netty的核心组件ByteBuf:保存socket读写数据,如果是堆外内存,直接与TCP发送和接收缓冲区交互Channel:可以注册到EventLoop上ChannelHandler:可以定义编码解...

2019-08-12 22:59:26 168

原创 Java多线程之synchronized关键字

作用synchronized保证多线程中只有一个线程能获取到资源的锁,并且获取到资源的锁的线程才会执行同步代码,执行完毕后会释放资源锁。synchronized用在类方法上(锁住的资源为当前class对象,即调用该类方法时需获取class对象锁)普通方法上(锁住的资源为当前对象,即调用该普通方法时,需获取当前对象锁)对象(普通对象,class对象)(锁住的资源为对象,获取锁才能进入代码块...

2019-08-12 02:43:54 139

原创 Java多线程之测试volatile关键字

volatile的两个作用阻止指令重排序内存可见性(即每次变量的读取都从主存中读取,不从cpu高速缓存读取)volatile变量自增与线程安全性的测试static volatile int count = 0; public static void main(String[] args) { final long next = System.currentTimeM...

2019-08-10 01:45:11 320

原创 JVM学习之JVM参数

查看Windows下的JVM参数:Windows下默认classpath上的JVM参数获取CMD上输入:java -XX:+PrintCommandLineFlags -version//JDK1.8//初始堆-XX:InitialHeapSize=265937728 //最大堆-XX:MaxHeapSize=4255003648 -XX:+PrintCommandLineFla...

2019-08-09 17:31:32 386

原创 JVM学习之内存模型与GC算法

Java程序无需对内存进行分配和释放,内存的分配与释放由JVM来完成JVM内存模型线程独占:栈区,本地方法栈,程序计数器线程共享:堆,方法区java声明的变量内存存放位置:1.new出来的对象及数组存放在堆区,对字符串JVM进行了特殊处理,1.7以后首次在堆中创建,会将字符串的引用存放在方法区的字符串常量池中2.函数中变量的声明存放于栈中,如果是对象引用,栈中保存的是指向堆区的引用地址...

2019-08-08 19:20:23 249

原创 redis学习

redis采用C语言实现,基于key-value的内存模型;redis提供的接口操作起来大都是O(1)的时间内完成,非常快。redis支持的数据类型字符串String:SET key value ,GET key哈希表Hash :HSET key field value,HGET key field 类似Java的hashMap集合Set :SADD key member1,SMEMBE...

2019-08-08 17:17:56 122

原创 JVM学习之编译与类加载

Java文件通过Javac编译器编译成class文件,编译后的class文件交由JVM平台加载运行,即Java需要经过编译期和运行期编译期优化指的是Javac编译器将Java文件转化为字节码即class文件的优化过程;运行期优化指的是JIT编译器将热点代码编译成与平台相关的机器码,并进行多层次的优化,可以理解为对多个指令操作后得到同一结果合并为单个指令操作或者无用指令去除等;编译过程(Jav...

2019-08-07 23:41:49 327

原创 spring boot学习之注解

注解从jdk5之后提供了支持,注解是代码中的特殊标记,可以作用于源码阶段,编译阶段以及运行阶段,由元注解@Retention来决定元注解@Retention:指定注解有效期,取值包括RetentionPolicy.SOURCE,RetentionPolicy.CLASS,RetentionPolicy.RUNTIME@Documented:指定可以加载到Javadoc中@Target:指定...

2019-08-07 20:02:39 128

原创 spring boot学习之用户class文件扫描总结

用户class文件扫描触发方法spring boot相当于在spring的基础上进行了扩展,与spring扫描配置文件不相同的地方在于由AbstractApplicationContext中的invokeBeanFactoryPostProcessors(beanFactory)方法过程中添加了触发扫描class文件的功能即触发ConfigurationClassPostProcessor...

2019-08-05 23:12:38 751

原创 spring boot学习之tomcat与spring boot

tomcat是Servlet容器,spring boot是开发框架,可开发基于Servlet规范的应用即spring boot应用需要放在Servlet容器上运行而spring boot可以使用内置Servlet容器启动,也可以发布在外置Servlet容器容器上内置tomcat之tomcat启动1.容器构建时期ServletWebServerApplicationContext的onRef...

2019-08-04 00:38:36 3667

原创 基于JavaNIO和线程池实现简单的TCP服务器

学习笔记一: 基于JavaNIO和线程池实现简单的TCP服务器概念(个人的理解):OIO/BIO:阻塞式同步IO,程序向操作系统发出IO指令,程序等待操作系统返回数据,面向流的编程模式NIO:非阻塞式同步IO,程序向操作系统发出IO请求,操作系统将请求注册,将就绪的IO指令注册在链表上,程序通过系统调用轮询链表,面向channel和buffer的编程模式AIO:非阻塞异步IO,程序向操作系...

2019-07-26 23:02:08 601

空空如也

空空如也

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

TA关注的人

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