自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Exception与Error简单解析

Exception与Error的异同Exception与Error都继承了Throwable类Exception是程序正常运行中,可以预料的意外情况,可能并且应该捕获,并进行相应的处理Error是在正常情况下不太可能出现的情况,绝大部分Error都会导致程序处于非正常的、不可恢复状态,是不便于也不需要进行捕获。例如,当 JVM 不再有继续执行操作所需的内存资源时,将出现 OutOfMem...

2019-04-28 20:54:21 601

原创 为什么需要Lock,而不是直接用synchronized

构建Lock的理由在解决死锁的时候提出了一个方案是:破坏不可抢占条件,但是这个方案 synchronized 没有办法解决。原因是 synchronized 申请资源的时候,如果申请不到,线程直接进入阻塞状态了,而线程进入阻塞状态,啥都干不了,也释放不了线程已经占有的资源(锁),也就会造成死锁。但是我们希望的是:对于“不可抢占”这个条件,占用部分资源的线程进一步申请其他资源时,如果申请不到...

2019-04-28 15:40:03 1097

原创 JVM内存结构、Java内存模型、Java对象模型之间的区别

平时我们比较容易搞混的JVM内存结构、Java内存模型之间的概念,以为JVM内存结构、Java内存模型是一样的,其实这两者有着很大的区别。JVM内存结构Java代码是要运行在虚拟机上的,而虚拟机在执行Java程序的过程中会把所管理的内存划分为若干个不同的数据区域,这些区域都有各自的用途。有些区域是线程共享的,有些区域是线程独占的,因线程启动而建立,因线程结束而销毁。JVM运行时内存区域结构如下...

2019-04-28 13:39:02 526

原创 基于SpringBoot的javax.validation.Validation的参数校验方法

问题描述当要对用户输入的参数进行校验时,可以用javax.validation.Validation包下的注解进行验证,实现简单,并且是基于JSR-303标准的。添加pom.xml依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId&gt...

2019-04-15 15:54:56 8109

原创 秒杀系统优化以及解决超卖问题

问题描述在众多抢购活动中,在有限的商品数量的限制下如何保证抢购到商品的用户数不能大于商品数量,也就是不能出现超卖的问题;还有就是抢购时会出现大量用户的访问,如何提高用户体验效果也是一个问题,也就是要解决秒杀系统的性能问题。解决超卖的方案每一个用户只能抢购一件商品的限制;在数据库减库存时加上库存数量判断,库存数量为0时阻止秒杀订单的生成。数据库加唯一索引:防止用户重复购买SQL加库存数量...

2019-04-15 13:31:22 11331 3

原创 安装RabbitMQ

安装erlang安装依赖: yum install ncurses-devl下载安装包:http://www.erlang.org/downloads/进入解压后的安装包,执行./configure --prefix=/usr/local/erlang/ --without-javac编译安装:make && make install安装 RabbitMQ安装Py...

2019-04-14 17:38:40 1705

原创 设计模式---待补齐

代理模式代理模式就是给某一个对象创建一个代理对象,由这个代理对象控制对原对象的引用,而创建代理对象后可以在调用原对象是增加一些额外的操作。代理模式的结构: Subject:抽象主题,被代理类以及代理类都要实现的接口,可以由多个接口组成; ProxySubject:代理类,除了实现抽象主题定义的接口外,还必须持有被代理类的引用; RealSubject:被代理类,就是目标对象。策略...

2019-03-13 21:24:24 246

转载 hashMap详解

转发:学习两篇文章足够了:https://juejin.im/post/5ac83fa35188255c5668afd0https://tech.meituan.com/2016/06/24/java-hashmap.html概述线程不安全。最多只允许一条记录的键为null,允许多条记录的值为null。读数据速度最快为O(1),最慢为O(lgn)。存储数据是无序的。底层存储数...

2019-03-08 16:34:46 104

原创 SpringMVC构建全局异常处理器

异常处理器SpringMVC提供全局异常处理器进行统一的异常处理,一个系统只能有一个异常处理器。系统的dao、service、controller层出现异常的时候都throws Exception向上抛,最后由SpringMVC前端控制器交由异常处理器进行异常处理(对异常进行包装处理)。如下如所示:为什么需要全局异常处理器如上图所示,如果没有全局异常处理器,不管是dao层、Serv...

2019-03-05 18:27:23 649 1

原创 Redis缓存实现单点登录

单点登录原理实现简单的同域名下的单点登录,适合分布式系统下使用,因为在分布式系统中,用户的请求可能被不同的服务器处理,而不同的服务器自动生成的cookie–JSESSIONID是不一致的,不能通过这个cookie去定位用户的登录状态,因此需要一个自定义的cookie注入到用户浏览器,不管用户的请求被哪个服务器处理,均能通过该cookie定位用户的信息是否存在缓存中;用户首次访问网页时,需要验证登...

2019-03-04 18:41:00 2954 1

转载 该了解的HTTP信息

请求报文和响应报文的头部信息与正文信息之间需要一个空行分割; HTTP状态码 服务器返回的响应报文中第一行为状态行,包含了状态码以及原因短语,用来告知客户端请求的结果。状态码 类别 原因短语 1XX Informational(信息性状态码) 接收的请求正在处理 2XX Success(成功状态码) 请求正常处理完毕 3XX...

2019-03-03 21:53:38 431

原创 TCP流量控制与拥塞控制

TCP流量控制所谓的流量控制就是让发送方的发送速率不要太快,让接收方来得及接受。利用滑动窗口机制可以很方便的在TCP连接上实现对发送方的流量控制。TCP的窗口单位是字节,不是报文段,发送方的发送窗口不能超过接收方给出的接收窗口的数值。在 TCP 中,滑动窗口是为了实现流量控制。如果对方发送数据过快,接收方就来不及接收,接收方就需要通告对方,减慢数据的发送流量控制出现的死锁问题:B向A发...

2019-03-03 21:42:04 1837

转载 Redis 持久化

转自ITDragon龙.Redis 持久化方案Redis是内存型数据库,为了防止断电或是重启时数据丢失,需要将内存中的数据持久化到硬盘中。Redis 持久化方案分为两种:RDB (Redis DataBase)和 AOF (Append Only File)。RDBRDB 是 Redis 默认的持久化方案。在指定的时间间隔内,执行的写操作达到指定次数时,则会触发快照生成,将内存中的数据写...

2019-03-03 21:39:06 133

转载 Redis 数据类型和应用场景

Redis 特性Redis具有速度快、持久化、多钟数据结构、支持多种编程语言、功能丰富、简单、主从复制、高可用、分布式等特性,广泛用于缓存系统、排行版、计数器、社交网络、消息队列系统、实时系统、持久化数据等场景。Redis 数据类型Redis 是速度非常快的非关系型(NoSQL)内存键值数据库,可以存储键和五种不同类型的值之间的映射。键的类型只能为字符串,值支持五种数据类型:字符串、列表、...

2019-03-03 20:13:13 137

原创 redis分布式锁原理与实现

分布式锁原理使用setnx、getset、expire、del这4个redis命令实现setnx 是『SET if Not eXists』(如果不存在,则 SET)的简写。 命令格式:SETNX key value;使用:只在键 key 不存在的情况下,将键 key 的值设置为 value 。若键 key 已经存在, 则 SETNX 命令不做任何动作。返回值:命令在设置成功时返回 1 ,设...

2019-03-03 14:55:33 42621 33

原创 虚拟机类加载机制

类加载机制类生命周期初始化时机不能触发初始化的时机加载阶段验证阶段准备阶段解析阶段初始化阶段类加载整体过程类加载器1.类与类加载器2. 双亲委派模型类生命周期类从加载到虚拟机内存开始,到卸载出内存为止,整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载7个阶段。解析阶段在某些情况下可以在初始化之后再开始,这是为了支持Java语言的动态绑定。初始化时机虚拟机严格规定有且仅有以下5种...

2019-02-28 23:01:56 127

原创 虚拟机方法执行

栈帧虚拟机栈中存储的是一个个栈帧,每个栈帧代表一个方法体,一个栈帧的进栈与出栈对应着一个方法的调用开始和结束。每一个栈帧都包含局部变量表、操作数栈、动态链接、方法返回地址和一些额外的附加信息,局部变量表和操作数栈所需要多大空间已经在编译器确定下来;执行引擎只会处理位于栈顶的栈帧,这个栈帧称为当前栈帧。局部变量表存放方法参数和方法内的局部变量最小单位为Slot,除了lo...

2019-02-28 23:01:46 179

原创 JDK 命令行工具

1、JPS(JVM Process Status Tool)描述: 虚拟机进程状态管理工具;其他工具在使用时需要通过该工具来获取LVMID; 列举正在运行的虚拟机进程; 进程本地虚拟机唯一ID(Local Virtaul Machine IdentiferLVMID) 显示虚拟机执行主类(main()方法所在的类)的名称2 、Jstat (JVM Statistics Monitori...

2019-02-28 23:01:29 74

原创 垃圾收集器与内存分配策略

1. 垃圾收集器(GC)要完成的3件事:哪些内存需要回收 什么时候回收 如何回收2. 哪些内存需要回收程序计数器、虚拟机栈、本地方法栈这3个区域不需要回收,因为这3个区域是线程私有的,会随着线程而生,随线程而灭; Java堆和方法区这2两个区域需要回收,因为只有在程序处于运行期时才能知道会创建哪些对象,这部分内存的分配和回收是动态的。3.什么时候回收当判断对象已死的时候就可以...

2019-02-25 21:41:55 204

原创 Java内存区域与内存溢出异常

 1.运行时数据区域分布 1.1 程序计数器线程私有 计数器记录的是正在执行的虚拟机字节码指令的地址,如果是Native方法,计数器值为空(Undefined) Java虚拟机的多线程是通过线程轮转切换并分配处理器执行时间的方式实现的,线程切换后能够恢复到正确的位置就是依靠每个线程独立的程序计数器1.2 Java虚拟机栈线程私有 虚拟机栈描述的是Java方法执行的内存模型:...

2019-02-22 20:26:03 138

原创 TCP三次握手与四次挥手

TCP首部格式 序号 seq :用于对字节流进行编号,例如序号为 301,表示第一个字节的编号为 301,如果携带的数据长度为 100 字节,那么下一个报文段的序号应为 401。[301,400]为序号301的数据长度,下一个则为401 确认号 ack :期望收到的下一个报文段的序号。例如 B 正确收到 A 发送来的一个报文段,序号为 501,携带的数据长度为 200 字节,因此 B...

2019-01-10 16:28:44 139

空空如也

空空如也

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

TA关注的人

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