自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 JVM总结(二)

9. JDK 中有几种引用类型?分别的特点是什么强引用:如果一个对象具有强引用,那垃圾回收器绝不会回收它。当内存空间不足,Jvm宁愿抛出OutOfMemoryError错误,使程序异常终止软引用:内存空间足够,垃圾回收器就不会回收它;如果内存空间不足了,就会回收这些对象的内存。只要垃圾回收器没有回收它,该对象就可以被程序使用。软引用可用来实现内存敏感的高速缓存 ===>软引用可以和一个引用队列(ReferenceQueue)联合使用弱引用:弱引用的对象拥有更短暂的生命周期。在垃圾回收器..

2022-05-26 08:45:00 189

原创 JVM总结(一)

1. 运行时数据区中包含哪些区域?哪些线程共享?哪些线程独享?线程共享:方法区,堆 线程独享: 栈,本地方法栈,程序计数器。2. 方法区和永久代的关系在JDK8之前, 我们称之为永久代, 但是两者之间并不是等价的,只是在HotSpot设计团队, 把使用永久代来实现方法区而已, 这样就可以像管理堆一样管理方法区。 但BEA, JRockit, IBM J9等来说, 是不存在永久代概念的。 到jdk8时, 把字符串常量池,静态变量, 类型信息等全部移到元空间,采用本地内存实现的元空间3. Jav

2022-05-25 08:15:00 228

原创 Dubbo进阶

一. SPISPI 全称为 (Service Provider Interface) ,是JDK内置的一种服务提供发现机制。作用:做服务的扩展,使用SPI机制的优势是实现解耦,使得第三方服务模块的装配控制逻辑与调用者的业务代码分离简介: 破坏双亲委派模型之一, 在JNDI标准服务中,它存在的目的是对资源进行查找和集中管理,它需要(SPI)代码, 但是类加载器不可能认识它们?即Java团队, 设计了一个线程上下文类加载器【通过Thread类中setContext-ClassLoader()设置

2022-05-24 09:00:00 213

原创 Dubbo学习

一. 项目的演变由于互联网的发展,用户群体的逐渐壮大,网站流量的成倍增长,常规的单体架构无法满足请求压力的暴增,业务的快速迭代, 架构的演变是必须的。单体架构所有模块和功能都集中在一个项目中 ,部署时也是将项目所有功能部整体署到服务器中。优点:小项目开发块,成本低,架构简单,易于测试部署缺点: 大项目模块耦合性高,新增业务麻烦,核心业务与边缘业务混合垂直架构根据业务把项目垂直拆分多个项目,互不影响优点:系统拆分实现了流量分担,解决了并发问题可以对不同系统进行优化

2022-05-23 16:55:08 155

原创 经典的垃圾收集器

一. 垃圾收集器与垃圾回收算法:垃圾回收算法分为俩类:一类判断对象是否死亡==> 【引用计数法】,【可达分析算法】 ;二类收集死亡对象方 ==> 【标记-清除算法】【标记-复制算法】【标记整理算法】一般采用分代的垃圾回收算法, 而垃圾收集器就是算法的落地实现, 和垃圾回收算法一样, 根据不同的场景选择最合适的收集器, 进行分代收集新生代垃圾收集器:Serial 、 ParNew 、Parallel Scavenge老年代垃圾收集器:Serial Old 、 Para...

2022-04-27 15:39:37 124

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

对象已死?垃圾收集器在对堆进行垃圾回收时, 第一件事情就是确定这些对象那些还存活着, 那些已经死去。引用计数算法: 每当有一个引用, 计数器值就加一,反之减一。 任何时刻计数器为零的对象时不可能在被使用的, 效率高, 原理简单。(java并没有采用)问题: 不能解决循环依赖问题, 实际上a和b是不能被访问了, 但是应为相互依赖, 导致不能被垃圾回收。可达性分析算法:基本思路通过一系列的 GC Roots 的根对象作为起始节点集, 根据引用关系, 向下收缩, 走过的路径称为引用链, 如果某

2022-04-25 09:38:30 196

原创 Java的内存区域

程序计数器1. 在Java的虚拟机模型里, 字节码解释器工作时就是通过改变这个计数器的值来选取下一个需要执行的指令。(分支,循环, 跳转, 异常处理, 线程恢复)2. 在多线程的情况下, 一个处理器只能执行一条线程, 那么每个线程是轮流切换, 通过分配处理器执行时间的方式实现, 即在线程切换的时候, 每个线程需要自己记录自己的程序计数器, 所有是线程私有的, 各个线程之间互不干扰Java虚拟机栈1. 栈也是线程私有的, 在Java方法执行的时候, 会创建一个栈帧, 用于存储局部变量表,

2022-04-23 15:59:21 377

原创 分布式理论

一、什么是分布式系统?指一个硬件或软件, 分布在不同的网络计算机中, 彼此之间仅仅通过消息传递进行通信协调的系统。通俗来说, 一个业务拆分成多个子业务, 分布在不同的服务节点,共同构成了分布式系统。二、分布式与集群的关系集群: 指多个服务器做同一件事分布式:指多个服务器做不一样的事分布式系统特性:1. 分布性2. 对等性 ==> 指没有主从之分3. 并发性4. 缺乏全局时钟 ==> 每个计算机之间依赖于消息进行通信, 很难判断先后序, 缺乏全局时钟控制序列

2022-04-11 13:19:05 310 1

原创 Redis持久化

为什么需要持久化?Redis是内存数据库, 宕机后, 数据会消失, 使其能够快速恢复数据, 提供俩种持久化操作,RDB和AOF, 注意Redis持久化不能保证数据的完整性, 当作为DB使用时, 一定要有完整的数据源(文件、mysql)RDB快照的方式持久化, 只关心当前数据, 不关注过程!触发快照的方式:1. 符合自定义配置的快照规则2. 执行 save 或 basave命令3. 执行flushall命令4. 执行主从复制命令(第一次)配置参数定期执行快照: 漏斗设计

2022-04-07 22:45:12 545

原创 缓存原理&设计(Redis)

缓存的使用场景:1.DB缓存,减轻服务器压力 指优先访问缓存, 没有命中找DB2. 提高系统响应 解决频繁IO而无法响应3. 做Session分离, 多个服务器共享Session信息4. 做分布式锁, 控制多个进程并发下产生的问题,以及控制时序性,使用Redis实现的setNX5. 做乐观锁,Redis可以实现乐观锁 watch + incr缓存的读写模式:1.Cache Aside Pattern(常用)Cache Aside Pattern(旁路缓存),是最经典...

2022-04-06 14:19:37 1967

原创 redis知识

NoSQL应海量用户高并发而生, 例如春运购买车票。 这种场景, 仅仅只靠关系型数据库是不行的, (redo日志, 会频繁的进行刷盘操作) , 那么其一:磁盘IO就是我们的性能瓶颈; 其二:数据关系复杂, 扩展性差, 不便于大规模集群; 即有了NoSQL...什么是NoSQL?NoSQL指 Not-Only SQL (泛指非关系型数据库), 作为关系型数据库的补充! 表达存储数据不仅仅可以用SQL!作用:应对基于海量用户和海量数据前提下的数据处理问题。Redis概念:Redis (REmot

2022-04-05 23:18:16 1807

原创 MySQL的事务和锁

一. ACID特性在关系型数据库管理系统中,一个逻辑工作单元要成为事务,必须满足这 4 个特性,即所谓的 ACID:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。1.1 原子性指事务的操作是原子性的, 要么修改成功, 要么失败!a. 事务提交了,如果此时Buffer Pool的脏页没有刷盘,如何保证修改的数据生效? Redob. 如果事务没提交,但是Buffer Pool的脏页刷盘了,如何保证不该存

2022-04-01 18:49:20 346

原创 MySQL索引原理

分页查询的优化, 慢查询优化, 索引的分析与优化, 聚簇索引和辅助索引, B+Tree

2022-03-31 19:38:45 143

原创 MySQL架构原理

一. MySQL体系结构MySQL Server架构自顶向下大致可以分网络连接层、服务层、存储引擎层和系统文件层。1. 网络连接层:提供与MySQL服务器建立的支持, 我们可以通过服务端编程技术与MySQL建立连接如:Java, CPython等2. 服务层:服务层是MySQL的核心, 包含系统管理和控制工具, 连接池, SQL接口, 解析器, 查询优化器, 缓存六个部分连接池: 负责存储和管理客服端连接, 一个线程负责管理一个连接系统管理和控制工具:例如备份

2022-03-30 20:27:10 2171

原创 Spring原理及源码简单版解剖.

Spring的优势:1. 解耦合, 简化开发2. AOP编程的支持3. 声明式事务的支持4. 方便程序的测试5. 方便集成各种优秀框架Spring的核心结构:web模块, 数据访问与集成,Test模块,AOP模块, Core Container模块核心思想:什么是IOC?Inversion of Control 是技术思想问题:创建A对象, 而A对象依赖与B对象, 这时候如果B对象的实例类发生了改变, 那么A对象的代码也需要改变, 显然, A和B耦合在一起!C

2022-03-29 16:50:29 502

原创 锁的优化及注意事项

1. 减少锁持有时间指使用锁进行并发控制时, 在锁竞争过程中, 单个线程对持锁的时间与系统时间有着直接关系。100个人填写报告, 只有一支笔, 怎么处理? 下面用代码演示:当只有mutextMethod方法需要加锁时, 不推荐这样写:public synchronized void syncMethod() { test01(); mutextMethod() ; test02() ; }推荐加锁方式:public void syncMethod2

2022-03-27 12:33:47 1085 1

原创 基于Netty的WebSocket开发网页版聊天室

WebSocket与HTTP的区别:HTTP协议是用在应用层的, 基于TCP协议的基础上,是单向的。 HTTP协议也需要建立三次握手才能够才能发送消息, HTTP连接分为短,长连接, 短连接每次请求都需要三次握手才能发送消息。长连接是在一定的期限内保持连接。保持TCP连接不断开。 客服端与服务端进行通信必须由客服端先发起, 客服端想要实时获取服务端信息就得不断发送长连接。WebSocket实现了多路复用, 他是全双工通信。 服务端和客服端可以同时发送消息, 并且建立连接后服务端可以主动推送消息到客服

2022-03-26 11:49:41 1050 2

原创 netty核心API

一. ChannelHandler:开发中需要自定义一个 Handler 类去实现 ChannelHandle接口或其子接口或其实现类1.public void channelActive(ChannelHandlerContext ctx),通道就绪事件 就是客服端和服务端成功建立连接2.public void channelRead(ChannelHandlerContext ctx, Object msg),通道读取数据事件 就是在这个方法中可以获取服务端发送过来的消息3.p...

2022-03-25 12:29:50 740

原创 HTTPS工作原理

HTTPS是身披SSL/TLS外壳的HTTP

2022-03-25 11:28:04 3519

原创 netty入门(二)

基于NIO实现的netty框架, 前面讲了NIO的Selector, ServerSocketChannel, SocketChannel, ByteBuffer, 本章节升华以netty框架实现的client-server间的交互。netty的优点:零拷贝, 可拓展事件模型, 支持TCP, UDP, HTTP, WebSocket等协议, 支持安全传输, 压缩, 大文件传输, 编解码等!1. 设计优雅, 提供阻塞和非阻塞的socket, 提供灵活可拓展的事件模型, 提供高度可定制的线程模型。

2022-03-24 14:38:55 625

原创 线程池的使用

概念:解决了频繁的创建和销毁线程,在线程池中总有几个活跃的线程, 当我们需要使用时,拿走池子里的空闲线程即可, 用完后还给池子!线程池工厂类:Excutors我们可以根据工厂类得到不同工作特性的线程池1. newFixedThreadPool(): 该方法可以得到固定线程数据的线程池2. newSingleThreadPool(): 该方法返回只有一个线程的线程池3. newCachedThreadPool(): 该方法返回一个根据实际情况调成线程数量的线程池4. newSingle

2022-03-24 10:07:27 96

原创 netty入门(一)

socket: 套接字就是两台主机逻辑连接的端点。 我们先看一下HTTP以及TCP,HTTP协议作为应用层协议主要解决如何包装数据, TCP/IP协议集处理传输层数据如何传输。而socket是通信的基石, 是支持TCP协议的网络通信的基本操作单元 。它具备了网络传输必须的5种信息, 之前讲过TCP连接前的TCB传输控制块中就有socket信息。1. 连接使用的协议 2. 源IP 3. 源端口 4. 目的端口 5. 目的IP我们网络的传输通过不同的IO模型构建的通道,性能肯定是不一样的。BIO N

2022-03-23 16:13:44 1207

原创 Http2的新特性

http2最大的特点, 在于没有改动http的语义,等核心概念下, 致力于突破上一代的性能限制,改进传输性能, 实现低延迟高吞吐。 在于新增了二进制分帧层。一. 二进制帧把以往的明文传输, 增强为二进制帧的形式, 首部放在headers帧, body部分放在Data帧, 帧为传输的最小单位。我们所有的请求都可以在一个连接上完成。 因为在通信传输中,大部分HTTP连接处于突发,短时间的, 所有我们共享一个连接, 但是这个连接上承载了多个传输流(stream), 它们是任意双向数据流, 以message

2022-03-23 10:47:55 3922

原创 重入锁比同步锁增强在哪里?

一. ReentrantLock:1. 开发人员手动指定, 何时上锁, 何时释放锁, 更加的灵活!2. re-entrant-lock 翻译为重入锁, 在同步锁的时候, 我们一个对象不可能在没释放的前提下wait()两次,但是重入锁可以,注意:加了多少把锁,要释放对应的锁!3. 中断响应:在之前的同步锁中, 一个线程等待了, 只会有俩种情况 a. 获取到锁继续前行 b. 继续等待。 但是在重入锁中不会,(lock.lockInterruptibly()响应中断申请)在出现相互争夺资源时,这时t1

2022-03-23 10:08:09 150

原创 HTTP协议、TCP/IP协议集

HTTP协议:指客户端和服务器之间进行通讯时,需要的http报文, 这是一些列通讯的规范以及编码解码的格式定义,报文分为,请求报文和响应报文, 格式分为起始行、首部、主体。在早期的http1.1中采用ASCLL编码进行明文传输, 到HTTP/2的二进制帧传输。Http通讯是需要TCP/IP进行承载的, 在通讯之间必要要建立tcp连接。tcp连接:在连接之前, 首先需要准备工作TCB传输控制块, 包含了数据发送双方的socket信息以及装载数据的缓存区, 接着就是三次握手。三次握手:重要的是控制位

2022-03-22 15:06:45 3867

原创 多线程基础知识

多线程基础知识

2022-03-22 13:18:04 264

原创 JMM概念

JMM的关键技术点在多线程的原子性,可见性,有序性。

2022-03-22 12:03:02 64

原创 多线程相关概念

同步方法:调用一旦开始,调用者就必须等到方法调用完成。异步方法:更像是消息传递,你可以下发很多的消息,不会阻塞调用者。并发:指系统只有一个cpu,就算是多线程或者多进程,操作系统也只是不断切换多个任务而已,造成并行的错觉并行:真实的并行存在与多个cpu。临界区:指一种公共资源,可以被多个线程使用, 如果当前临界区被占用,其他线程等待(当然后续有变动)阻塞:指多线程之间的相互影响,当一个线程占用了临界区,其他线程必须等待它释放资源。非阻塞:它强调没有一个线程可以妨碍其他线程,大家都可以

2022-03-22 11:14:48 265

空空如也

空空如也

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

TA关注的人

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