自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 深入理解java虚拟机(全章节完整)

走近JavaJDK、JRE与JVM之间的关系:JDK全程为Java SE Development Kit(Java开发工具),提供了编译和运行Java程序所需的各种资源和工具,包括:JRE+java开发工具。JRE全称为Java runtime environment(Java运行环境),包括:虚拟机+java的核心类库。JVM是运行Java程序的核心虚拟机。内存溢出的问题及解决p...

2019-04-27 10:35:41 84906 23

原创 分布式锁的三种实现方式

分布式系统高并发下的问题有一个电商抢购的场景:为了避免超卖的问题,在单服务器环境下,可用通过JVM的锁解决。@RequestMapping("/deduct_stock")public String deductStock() { synchronized (this) { // 从Redis中取出当前库存 int stock = Integer.parseInt(stringRedisTemplate.opsForValue().get("stock"));

2020-06-04 23:51:39 1450 1

原创 常用的分布式一致性协议

文章目录分布式一致性Base理论2PC3PCPaxos算法复制状态机强一致性PaxiosMulti PaxosRaft协议ZAB协议分布式一致性在分布式系统中,为了保证数据的高可用,通常,我们会将数据保留多个副本(replica),这些副本会放置在不同的物理的机器上。为了对用户提供正确的增\删\改\差等语义,我们需要保证这些放置在不同物理机器上的副本是一致的。分布式一致性又分为强一致性和弱一致性:弱一致性:最终一致性:DNS、Gossip协议等强一致性:同步PaxosRaftZAB

2020-06-02 23:42:32 3456

原创 手写Netty实现的网络服务

文章目录TCP服务DemoHTTP服务器Demo群聊聊天室DemoWebSocket长连接Demo自定义编解码器Demo手写一个RPCTCP服务Demo服务端:public class NettyServer { public static void main(String[] args) throws Exception { //创建BossGroup和WorkerGroup //BossGroup只是处理连接请求,真正的和客户端业务处理会交给WorkerG

2020-06-01 17:04:21 575

原创 MyBatis从原理到实战

文章目录持久层技术解决方案MyBatis入门环境搭建SqlMapConfig.xml配置文件查询操作基于注解开发自定义查询方法应用的设计模式自定义MyBatisResourse配置类SqlSessionFactoryBuilderSqlSessionFactorySqlSessionHandler类MyBatis的crud操作保存操作更新操作删除操作模糊查询聚合函数OGNL表达式返回值对象封装Dao方式的Mybatis连接池UNPOOLEDPOOLED事务动态SQLif标签where标签foreach标签多

2020-05-29 10:10:34 488

原创 Elasticsearch的核心技术

文章目录Elasticsearch介绍利用数据库做搜索全文检索与倒排索引什么是ElasticsearchElasticsearch的功能Elasticsearch的核心概念Elasticsearch操作入门Document数据格式查看集群信息文档的增删改查五种搜索方式query string searchquery DSLquery filterfull-text searchphrase search聚合分析Elasticsearch的分布式透明隐藏特性shard&replica机制ES的容错机制

2020-05-26 11:56:44 810

原创 SpringMVC实战与源码分析

文章目录SpringMVC的基本概念MVC模型SpringMVC介绍SpringMVC与Struts2比较入门Demo准备配置Controller总结RequestMapping注解出现位置属性请求参数绑定绑定实体类型解决中文乱码绑定集合类型自定义类型转换器获取Servlet原生API常用注解RequestParamRequestBodyPathVariablerestful风格PathVariable注解RequestHeaderCookieValueModelAttributeSeesionAttrib

2020-05-20 15:51:59 451

原创 深入理解Redis

文章目录为什么要用RedisRedis的线程模型redis 和 memcached 的区别多路I/O复用(epoll)单线程模型单线程高效原因Redis的五种数据结构各种数据结构及使用场景Redis的底层数据结构Redis五大数据类型的实现原理Redis的过期策略过期删除内存淘汰机制LRU的简易实现Redis的高并发与高可用读写分离主从复制哨兵模式数据丢失的问题异步复制导致的丢失脑裂导致的丢失Redis cluster集群模式Redis cluster介绍一致性哈希算法Hash slotgossip协议通信

2020-05-19 00:27:33 2080 2

原创 手写一个简易跳表(Java版)

跳表概述跳表是由William Pugh于1990年发明,他在论文中给出了跳表的描述:Skip lists are a data structure that can be used in place of balanced trees. Skip lists use probabilistic balancing rather than strictly enforced balancing and as a result the algorithms for insertion and deleti

2020-05-15 11:53:04 957

原创 从IO-BIO-NIO-AIO-到Netty

文章目录IO操作系统层面IO的多路复用epollBIONIONIO单线程模型NIO-reactor模式AIONetty同步-异步-阻塞-非阻塞IO操作系统层面一个应用程序进行IO时,需要系统内核的参与,发送syscall指令产生中断。发生中断意味着需要操作系统介入,开展管理工作。由于操作系统的管理工作(比如切换线程、分配I/O设备等),需要使用特权指令,因此CPU要从用户态转为核心态。中断可以使CPU从用户态转化为核心态,使操作系统获得计算机的控制权,有了中断才能实现多道程序并发执行。应用程序通过

2020-05-14 11:00:41 445

原创 NoSQL数据库之Redis

NoSQL为什么用NoSQLNoSQL(NoSQL = Not Only SQL),意即“不仅仅是SQL”,泛指非关系型的数据库。随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题,包括超大规模数据的存储。谷歌或Facebook每

2020-05-12 22:56:20 451

原创 Spring的注解驱动开发

文章目录Java的注解注解的概念自定义注解元注解注解解析Spring中的注解组件注册生命周期属性赋值自动装配环境搭建AOP的原理AOP的使用AOP的源码Spring的事务控制声明式事务源码分析拓展原理Java的注解注解的概念注释:用文字描述程序,给程序员看的;注解:说明程序的,给计算机看的。注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个...

2020-05-03 23:00:27 1479 1

原创 MySQL的高可用

MySQL的主从复制主从复制概述在我们日常的数据库运维中,经常会因为各种原因需要停止数据库,比如MySQL版本升级,服务器硬件升级等,如果没有备份的话很容易造成数据丢失,且可用性降低。MySQL的主备可以提高数据库的可用性。MySQL几乎所有的高可用架构,都直接依赖于binlog。虽然这些高可用架构已经呈现出越来越复杂的趋势,但都是从最基本的一主一备演化过来的。主从复制原理主要涉及三个线...

2020-04-23 22:02:41 795

原创 JVM调优方法

调优前的规划基础概念什么是调优:根据需求进行JVM规划和预调优优化运行JVM运行环境(慢、卡顿)解决JVM运行过程中出现的各种问题(OOM)调优的目的:吞吐量优先:用户代码时间 /(用户代码执行时间 + 垃圾回收时间);响应时间优先:STW越短,响应时间越短。所谓调优,首先确定追求的什么,是吞吐量优先,还是响应时间优先?还是在满足一定的响应时间的情况下,要求达到多大的吞吐...

2020-04-20 10:08:22 1297

原创 Java并发容器及其实现原理

不安全集合类ArrayListArrayList是线程不安全类,多线程写入会发生并发修改异常:/** * 集合类不安全问题 * ArrayList */public class ContainerNotSafeDemo { public static void main(String[] args) { notSafe(); } /** ...

2020-04-20 10:00:14 320

原创 MySQL的锁问题

文章目录表锁创建表锁表共享读锁查询写操作读其它表解锁表独占写锁表锁定分析MDL总结行锁创建行锁行锁定索引失效导致行锁升级为表锁间隙锁的危害锁定单行行锁分析总结优化建议全局锁锁是计算机协调多个进程或线程并发访问某一资源的机制。锁的分类:从对数据操作的类型来分:读锁(共享锁)和写锁(排它锁)读锁:针对同一份数据,多个读操作可以同时进行而不会相互影响;写锁:当前写操作没有完成前,它会阻断其他...

2020-04-14 11:16:55 271

原创 MySQL索引及优化

文章目录索引什么是索引索引的优缺点索引分类基本语法创建索引删除索引查看索引其他创建索引的方式索引的结构建立索引与否的具体情况需建立索引的情况不需要创建索引的情况B-Tree和B+TreeB-树B+树聚簇索引辅助索引MyISAMInnoDB覆盖索引复合索引性能调优explain的作用explain包含的信息idselect_typetypesystemconsteq_refrefrangeindex...

2020-04-14 11:14:07 365

原创 Java中的锁及AQS实现原理

本文整个体系和内容参考了《Java并发编程的艺术》和JDK8的JUC源码,JUC源码的注解写的还是很详细的。Lock接口锁是用来控制多个线程访问共享资源的方式,一般来说,一个锁能够防止多个线程同时访问共享资源(但是有些锁可以允许多个线程并发的访问共享资源,比如读写锁)。在Lock接口出现之前,Java程序是靠synchronized关键字实现锁功能的,而Java 5之后,并发包中新增了Lock...

2020-04-06 16:23:41 2472 1

原创 Java并发机制的底层实现

文章目录Java内存模型主内存与工作内存内存间交互操作超线程cache line对象的内存布局happens-beforesychronized实现原理锁升级的过程偏向锁轻量级锁重量级锁cxq与EntryList偏向锁、轻量级锁的状态转换自旋锁锁消除锁粗化Sychronized的底层实现Synchronized与Lock的对比volatile关键字volatile的特性可见性不保证原子性禁止指令...

2020-04-03 14:49:49 819

原创 Spring从原理到实战

文章目录Spring概述Spring的发展历程spring的优势Spring的体系结构核心容器数据访问/集成Web其他程序的耦合工厂模式解耦控制反转使用spring的IOC解决程序耦合环境准备----引入依赖配置xml文件获取对象基于XML的IOCspring中工厂的类结构图:ApplicationContext 接口的实现类核心容器的两个接口创建Bean的三种方式bean的作用范围bean对象的...

2020-03-29 00:04:30 1662

原创 G1垃圾收集器详解

关于G1垃圾收集器网上的文章很多,但很多都是对垃圾收集过程进行了简化,没有体现出G1的真正优势,只有掌握G1的整个垃圾处理流程才能真正明白G1的优势,由于本人水平有限,本文必然有许多错误,欢迎指正。从CMS开始CMS垃圾收集的流程CMS收集器(Concurrent Mark Sweep:并发标记清除)是一种以获取最短回收停顿时间为目标的收集器。适合在互联网站或者B/S系统的服务器上,这类应...

2020-03-26 11:15:05 826

原创 JVM调优基础

JVM参数调整标配参数各版本之间很稳定,没有变化。-version-helpjava -showversionX参数HotSpot VM 默认为混合模式-Xint:解释执行-Xcomp:第一次使用就编译成本地代码-Xmixed:混合模式XX参数Boolean类型-XX:+或-某个属性值+表示开启 -表示关闭Case:是否打印GC收集细节: -XX:+PrintGCD...

2020-03-25 15:46:44 1334

原创 ActiveMQ高级原理

ActiveMQ传输协议概述activemq传输协议的官方文档:http://activemq.apache.org/configuring-version-5-transports.htmlActiveMQ支持的client-broker通讯协议有:TVP、NIO、UDP、SSL、Http(s)、VM。协议的配置文件为:%activeMQ安装目录%/conf/activemq.xml&...

2020-03-22 15:33:30 485

原创 消息中间件ActiveMQ实战

消息中间件概述MQ = 消息队列消息中间件利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。分布式系统的问题微服务分布式架构后,链式调用是我们在写程序时候的一般流程,为了完成一个整体功能会将其拆分成多个函数(或子模块),比如模块A调用模块B、模块B调用模块C、模块C调用模块D。但在大型分布式应用中,系统间的RPC交互繁杂,耦合性很大。面对大流量并发时...

2020-03-20 14:56:38 737

原创 多线程之线程池

文章目录常用接口准备Executor接口ExecutorService接口Callable接口线程池概述线程池的创建线程池参数及原理七个参数底层原理拒绝策略自定义线程池合理配置线程数特殊线程池ScheduledPoolForkJoinPoolWorkStealingPool应用案例NASA并行计算从MongoDB向MySQL同步数据CDN分发常用接口准备Executor接口是线程池的最顶层接...

2020-03-18 14:17:56 1069

原创 Java高并发编程案例

文章目录synchronized关键字对象加锁修饰方法锁定静态方法同步和非同步方法同时调用脏读可重入锁异常释放锁同步监视器变化volatile线程之间的可见性对比synchronizedAtomXXX淘宝面试题Reentrantlock生产者--消费者使用wait+notify使用Lock+ConditionThreadLocal同步容器ConcurrentMapCopyOnWriteArrayL...

2020-03-16 21:27:05 1289

原创 Java的四种引用详解与使用案例

Java有四种引用:强引用、软引用、弱引用和虚引用整体结构java.lang.ref包下强引用:Reference软引用:SoftReference弱引用:WeakReference虚引用:PhantomReference引用队列:ReferenceQueue强引用当内存不足时,JVM开始垃圾回收,对于强引用的对象,就算是出现了OOM也不会对该对象进行回...

2020-03-15 15:37:44 665

原创 Java中关于包、导包、jar包的问题详解

在我们日常的开发中,一般使用编译器进行代码编写和管理,利用Maven进行依赖(jar包)的管理,不需要自己对包进行管理,因此对包的概念并不十分清晰。掌握关于包(package)、import(导包)和jar包的详细关系对理解maven和部署程序等有很大的意义。classpath理解包的概念前,我们首先需要知道jre会去哪个路径找到类文件,这里就引入了classpath的概念。编译、运行Jav...

2020-03-12 16:56:58 2066

原创 Docker探赜索隐

文章目录Docker简介Docker的出现容器对比虚拟机Docker基础架构Docker安装Docker的常用命令帮助命令镜像命令容器命令Docker镜像分层结构镜像的特点镜像Commit容器数据卷数据卷直接命令添加Dockerfile添加数据卷容器Dockerfile概念Dockerfile构建解析过程Dockerfile保留字指令案例一:封装CentOS案例二:自定义TomcatDocker...

2020-03-12 10:00:07 3332 2

原创 Scala初探

Scala概述Scala是把面向对象与函数式编程结合在一起的高级语言。Scala combines object-oriented and functional programming in one concise, high-level language. Scala’s static types help avoid bugs in complex applications, and it...

2020-02-18 14:47:37 199

原创 常用Linux命令

整机:toptop与ps命令很相似。它们通常都用来显示正在执行的进程。top与ps最大的不同之处在于top在执行一段时间后可以更新正在运行的进程。load average: 0.63 0.42 0.17 — load average后面的三个数分别是1分钟、5分钟、15分钟的负载情况。若三个值的平均值大于0.6,说明系统负载过大。CPU:vmstat一般vmstat工具的使用是通过两个参...

2019-08-30 00:27:19 218

原创 LinkedList源码分析

文章目录概述继承体系源码分析双向链表查找遍历插入删除概述LinkedList是Java集合框架中一个重要的实现,其底层采用的双向链表结构。和ArrayList一样,LinkedList也支持空值和重复值。由于LinkedList基于链表实现,存储元素过程中,无需像ArrayList那样进行扩容。但有得必有失,LinkedList 存储元素的节点需要额外的空间存储前驱和后继的引用。另一方面,Li...

2019-08-20 19:15:23 194

原创 ArrayList源码分析

文章目录ArrayList简介ArrayList源码分析构造方法插入元素扩容机制删除元素遍历System.arraycopy()和Arrays.copyOf()方法两者联系与区别ArrayList核心源码 ArrayList经典DemoArrayList简介ArrayList的底层是数组队列,相当于动态数组。与Java中的数组相比,它的容量能动态增长。在添加大量元素前,应用程序可以使用ensu...

2019-08-20 19:14:43 340

原创 HashMap源码分析

文章目录概述原理源码分析构造方法初始容量、负载因子、阈值节点查找遍历插入扩容机制(重点)newCap和newThr计算过程节点重新映射链表树化红黑树拆分红黑树链化删除总结概述HashMap最早出现在JDK 1.2中,底层基于散列算法实现。HashMap允许null键和null值,在计算键的哈希值时,null键哈希值为0。HashMap并不保证键值对的顺序,这意味着在进行某些操作后,键值对的顺序...

2019-08-20 19:13:59 205

原创 Java的反射机制

文章目录反射的概述Class类的API获取Class对象的三种方式通过反射获取构造方法获取成员变量获取成员方法反射main方法利用配置文件反射通过反射穿越泛型检查反射的概述JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。要想解剖一个类...

2019-08-20 13:00:24 222

原创 设计模式之结构型模式

适配器(Adapter)Intent把一个类接口转换成另一个用户需要的接口。 Class Diagram Implementation鸭子(Duck)和火鸡(Turkey)拥有不同的叫声,Duck 的叫声调用 quack() 方法,而 Turkey 调用 gobble() 方法。要求将 Turkey 的 gobble() 方法适配成 Duck 的 quack() 方法,从而让...

2019-08-17 19:01:31 197

原创 设计模式之行为型模式

责任链(Chain Of Responsibility)Intent使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链发送该请求,直到有一个对象处理它为止。Class Diagram发出请求的客户端并不知道当中哪个对象会最终处理这个请求,对于一个具体的处理者(handler),如果可以处理该请求,则处理之,否则就将该请求转发给它的后继...

2019-08-17 17:38:07 186

原创 计算机操作系统--文件管理

文章目录文件的逻辑结构无结构文件有结构文件顺序文件索引文件索引顺序文件文件目录文件控制块目录结构单级目录结构两级目录结构多级目录结构无环图目录结构索引节点文件管理功能文件共享文件保护口令保护加密保护访问控制文件磁盘块管理文件的物理结构连续分配链接分配索引分配文件的储存空间管理空闲表法空闲链表法位式图法磁盘磁盘结构磁盘调度算法先来先服务最短寻道时间优先电梯算法文件的定义:一组有意义的信息的集合。...

2019-08-14 21:12:30 1606

原创 计算机操作系统--内存管理

文章目录内存内存基础内存管理的概念覆盖与交换技术连续分配管理方式单一连续分配固定分区分配动态分区分配非连续分配管理方式基本分页存储具有快表的地址变换机构两级页表基本分段存储段页式存储虚拟存储技术请求分页管理页面置换算法最佳置换算法最近最久未使用最近未使用先进先出第二次机会算法时钟内存内存基础内存是用于存放数据的硬件。程序执行前需要先放在内存中才能被CPU处理。逻辑地址 vs 物理地址程序...

2019-08-13 16:42:50 915

原创 计算机操作系统--进程

文章目录进程与线程进程概念进程的组织进程的状态与转换进程控制进程通信共享存储管道通信消息传递线程进程调度调度的概念进程调度的时机调度算法批处理系统交互式系统进程同步进程互斥的软件实现方法进程互斥的硬件实现方法信号量机制整形信号量记录型信号量信号量机制实现同步经典问题生产者消费者问题吸烟者问题多生产者多消费者问题读者问题哲学家进餐问题管程死锁预防死锁避免死锁死锁的检验消除死锁进程与线程进程概念...

2019-08-12 11:07:38 480

空空如也

空空如也

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

TA关注的人

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