自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Nacos单机安装与配置

Nacos单机安装与配置Nacos下载Nacos官网地址:https://nacos.io/zh-cn/index.htmlNacos下载地址:https://github.com/alibaba/nacos/releasesNacos安装注:单机版Windows安装0. 下载好文件后进行解压,有以下几个文件:1. 首先要配置数据库源,一般都用MySQL:打开conf文件夹下的application.properties,修改数据库信息:再使用MySQL创建数据库,数据库名为nac

2020-09-07 17:20:18 5586

原创 Java设计模式 -- 门面模式

Java设计模式 – 门面模式概念外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。门面模式又称为外观模式,它是一种对象结构型模式。结构门面角色:客户端调用这个角色的方法。此角色知晓相关的子系统的功能和责任。正常情况下,本角色会将所有从客户端发来的请求委派到相应的子系统中去。子系统角色:可以同时有一个或者多个子系统。每个子系统都不是一个单独的类,而是一个类的集合。每一个子系统都可以被客户端

2020-09-01 10:18:52 466

原创 Java设计模式 -- 享元模式

Java设计模式 – 享元模式概念如果在一个系统中存在多个相同的对象,那么只需要共享一份对象的拷贝,而不必为每一次使用都创建新的对象。在享元模式中,由于需要构造和维护这些可以共享的对象,因此,常会出现一个工厂类,用于维护和创建对象。结构享元工厂:用于创建具体享元类,维护相同的享元对象。它保证相同的享元对象可以被系统共享。即,其内部使用了类似单例模式的方法,当请求对象已经存在时,直接返回对象,不存在时,在创建对象。抽象享元:定义需要共享的对象业务接口。享元类被创建出来总是为了实现某些特定的业务逻辑

2020-08-25 15:56:12 266

原创 TCP之流量控制和拥塞控制

TCP之流量控制和拥塞控制流量控制1. 什么是流量控制如果发送方把数据发送得过快,接收方可能会来不及接收,这就会造成数据的丢失。所谓流量控制就是让发送方的发送速率不要太快,要让接收方来得及接收。防止发送方发的太快,耗尽接收方的资源,从而使接收方来不及处理。2. 流量控制基本思想要想实现流量的控制,其基本思想可以包含一下三点:接收端抑制发送端发送的数据大小:通过接收端缓冲区的大小实现流量控制的目标是在于接受端,是怕接受端来不及处理数据流量控制的机制就是丢包3. 滑动窗口实现流量控制可

2020-08-24 14:29:41 1517

原创 垃圾回收器之CMS和G1

垃圾回收器之CMS和G11. 什么是垃圾在介绍垃圾回收器之前,我们现需要明白什么是垃圾?其实很简单,即在堆内存中,没有被引用的对象即是垃圾,当JVM发生GC时就会把这些垃圾给清除,释放堆内存空间。即内存中不再使用的对象。那么JVM是如何找到内存中不再使用的对象呢?一般JVM提供了两种方法:引用计数法:堆中每创建一个对象,就都会为该对象创建一个计数器,默认初始值为1。当有其他变量被赋值为该对象的引用时,数值加1。当一个对象实例的引用死亡或被赋值新值时,计数器减1。当计数值为0时,则表示该对象没有

2020-08-09 16:20:01 314

原创 Java多线程--什么是ThreadLocal

Java多线程–什么是ThreadLocal1. ThreadLocal是什么首先看看官方文档给出的对ThreadLocal定义:ThreadLocal类用来提供线程内部的局部变量。这种变量在多线程环境下访问(通过get和set方法访问)时能保证各个线程的变量相对独立于其他线程内的变量。ThreadLocal实例通常来说都是private static类型的,用于关联线程和线程上下文。官方文档给的定义相当明确:ThreadLocal的作用就是来提供线程内的局部变量,使得不同的线程之间不会相互干扰

2020-08-09 10:24:49 168

原创 理解Java的强引用、软引用、弱引用和虚引用

Java中的强引用、软引用、弱引用、虚引用前言学过Java的同学可定听说过Java中的强引用、软引用、弱引用、虚引用,那么这四种引用再Java开发中有什么作用呢?引用之间又有什么区别?正文1. 强引用(StrongReference)强引用是我们平常使用最多的引用,它的特性是如果一个对象具有强引用,那么垃圾回收器绝不会回收它。当内存空间不足时,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足的问题。Object o = n

2020-07-31 10:50:39 188

原创 什么是分布式事务?有哪些解决方案?

什么是分布式事务?有哪些解决方案?分布式事务提起事务,相信大家都还是有一定理解的,我们首先来看个简单的例子复习下我们常说的事务。相信大家都在网上购物过,那么我们购买物品时有那些流程呢:用户下单,查询库存是否充足,若充足则扣减库存生成订单列表用户付款后,扣减用户余额我们就拿上面这简化的流程来看看。如果在单机环境下,那么库存表、订单表、用户余额表都在一个数据库中,执行过程也在一个项目里,此时我们只需要加一个事务,就可以保证数据的一致性。(以下伪代码)@transactional // 加入事

2020-07-29 20:39:20 361

原创 适合Java初学者练习的项目

这里写自定义目录标题欢迎使用Markdown编辑器新的改变3. 学生管理系统4. 后台管理系统脚手架5. 仿小米商城6. 秒杀系统7. 小结欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。新的改变我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:全新的界

2020-07-10 15:41:24 34968 7

原创 MySQL浅析之自增主键是连续的吗(6)

MySQL浅析之自增主键是连续的吗1. 前言看了前面的博客,相信我们都知道了使用自增主键的好处:可以让主键索引尽量地保持递增顺序插入,避免页分裂。但是避免页分裂的前提是自增主键必须是连续性的。这时我们可能就有疑问了,难道自增主键还会出现不是连续的情况吗?没错,自增主键是不能保证连续递增。2. 自增值保存在哪?要想了解自增主键为什么不能保证连续,我们就先要明白自增值是保存在哪的。不妨我们直接看结论:对于MyISAM引擎的子增值是保存在数据文件中的;而对于InnoDB引擎的自增值,早期是保存在

2020-07-05 18:10:59 484

原创 MySQL浅析之count函数(5)

MySQL浅析之count函数1. 前言我们在日常开发中可能会经常需要计算一个表中的行数,而执行SQL语句也挺简单:select count(*) from table;但是当我们表中数据量过大时,不难发现,执行一次这个SQL语句,需要消耗大量时间。那么,MySQL是如何执行这个SQL语句的呢?2. count(*) 执行过程首先我们需要知道在MyISAM引擎中,它是把一个表的总行数存在了磁盘上,因此执行count(*)的时候会直接返回这个数,效率很高;而对于InnoDB引擎,它执行cou

2020-07-04 18:34:47 493

原创 MySQL浅析之空间回收(4)

MySQL浅析之空间回收1. 前言我们在日常使用MySQL中,可能会发现这么个问题:当我们数据库占用空间太大时,我们把一个最大的表的数据删了一半,可是表文件的大小还是没变。我们就来聊聊表的空间回收:(默认讨论使用的是InnoDB引擎)在一个表中包含两个部分,分别为表结构定义和数据。在MySQL 8.0版本以前,表结构是存在以.frm为后缀的文件里。而MySQL 8.0版本,则已经允许把表结构定义放在系统数据表中了。因为表结构定义占用的空间很小,所以我们主要是看表数据。2. 参数innodb_fi

2020-07-04 14:30:58 311

原创 IDEA快捷键汇总

IDEA快捷键汇总Mac 键盘符号说明⌘ == Command⇧ == Shift⇪ == Caps Lock⌥ == Option⌃ == Control↩ == Return/Enter⌫ == Delete⌦ == 向前删除键(Fn+Delete)↑ == 上箭头↓ == 下箭头← == 左箭头→ == 右箭头⇞ == Page Up(Fn+↑)⇟ == Page Down(Fn+↓)Home == Fn + ←End == Fn + →⇥ == 右制表符(Tab

2020-06-21 21:27:48 361

原创 操作系统 -- 内存管理(三)

操作系统 – 内存管理(三)1. 前言操作系统是我们计算机专业需要掌握的一门课程,由于操作系统较为难以理解,因此我将操作系统知识点进行整理。我主要将操作系统分为5个大知识点进行整理:计算机系统概述进程管理内存管理文件管理IO外设管理本篇博客就是对内存管理进行知识点解析。2. 内存管理 – 内存管理的概念什么是内存内存是计算机中重要的部件之一,它是与CPU进行沟通的桥梁。计算机中所有程序的运行都是在内存中进行的,因此内存的性能对计算机的影响非常大。内存(Memory)也被称为内存储

2020-06-02 17:24:49 365

原创 操作系统 -- 进程管理(二)

操作系统 – 进程管理(二)1. 前言操作系统是我们计算机专业需要掌握的一门课程,由于操作系统较为难以理解,因此我将操作系统知识点进行整理。我主要将操作系统分为5个大知识点进行整理:计算机系统概述进程管理内存管理文件管理IO外设管理本篇博客就是对进程管理进行知识点解析。2. 进程管理 – 进程定义、组成、状态、特征程序段、数据段、PCB三部分组成了进程实体(进程映像)。一般情况下,我们把进程实体就简称为进程。例如,所谓创建进程,实质上是创建进程实体中的PCB。而撤销进程,实质上是撤

2020-06-01 11:21:06 612

原创 操作系统 -- 计算机系统概述(一)

操作系统 – 计算机系统概述(一)1. 前言操作系统是我们计算机专业需要掌握的一门课程,由于操作系统较为难以理解,因此我将操作系统知识点进行整理。我主要将操作系统分为5个大知识点进行整理:计算机系统概述进程管理内存管理文件管理IO外设管理本篇博客就是对计算机系统概述进行知识点解析。2. 计算机系统概述 – OS特征OS特征主要分为四个:并发、共享、虚拟、异步。并发:指两个或多个事件再同一时间间隔发生。这些事件宏观上是同时发生的,但微观上时交替间隔发生的。我们与之容易混淆的并行:两

2020-05-26 17:21:03 263

原创 Netty入门之代码实例(四)

Netty入门之代码实例(四)1. 前言由上一篇博客我们了解了Netty个组件的作用,那么本篇通过使用Netty来完成群聊系统,心跳检测,WebSocket 编程实现服务器和客户端长连接这三个小案例,进一步理解Netty非阻塞网络编程机制。2. Netty应用实例 – 群聊系统2.1 实例要求编写一个 Netty 群聊系统,实现服务器端和客户端之间的数据简单通讯(非阻塞)实现多人群聊服务器端:可以监测用户上线,离线,并实现消息转发功能客户端:通过 channel 可以无阻塞发送消息给其它所

2020-05-17 12:57:09 337

原创 Netty入门之模块组件(三)

Netty入门之模块组件(三)1. 前言上一篇我们了解了Netty的基本使用,本篇我们来看看各组件的作用。Netty的核心组件包含:EventLoopGroup、NioEventLoopGroupBootstrap、ServerBootstrapFuture、ChannelFutureChannelSelectorChannelHandlerPipeline 、ChannelPipelineChannelHandlerContextChannelOptionUnpooled下

2020-05-11 21:31:31 353

原创 Netty入门之Netty模型(二)

Netty入门之Netty模型(二)1. 前言上一节我们了解了基础的IO线程模型,而Netty是对主从Reactor多线程模型的改进。不了解的可以看看这篇博客:Netty入门之IO线程模型(一)这一节,我们就来了解下Netty模型,并通过一段代码实现来了解Netty的基本使用。2. Netty模型 – 工作原理图说明:Netty抽象出两组线程池BossGroup和WorkerGroup,其中BossGroup用来负责客户端的连接,而WorkerGroup用来负责网路的读写BossG

2020-05-11 13:05:20 268

原创 Netty入门之IO线程模型(一)

Netty入门之IO线程模型(一)1. 前言在我们了解Netty时,首先我们需要了解Netty线程模式。而在了解Netty线程模型时,我们更需要了解线程模型有哪些,只有这样我们才能理解Netty线程模型的优越性。目前存在的线程模型有:传统阻塞IO服务模型Reactor模式而根据Reactor的数量和处理资源的线程池数量不同,又分为3种具体的IO线程模型:单Reactor单线程单Reactor多线程主从Reactor多线程而我们所说的Netty线程模式主要基于主从Reactor多

2020-05-09 20:43:49 482

原创 Java -- 什么是NIO

Java – 什么是NIO1. Java NIO 基本介绍Java NIO 全称 java non-blocking IO,是指 JDK 提供的新 API。从 JDK1.4 开始,Java 提供了一系列改进的输入/输出的新特性,被统称为 NIO(即 New IO),是同步非阻塞的。NIO 相关类都被放在 java.nio 包及子包下,并且对原 java.io 包中的很多类进行改写。NIO...

2020-05-07 17:40:36 816

原创 Java -- 什么是BIO

Java – 什么是BIO1. Java BIO 基本介绍Java BIO 就是传统的java io编程, 其相关的类和接口在java.io。BIO:同步阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,可以通过线程池机制改善(实现多个客户连接服务器)。BIO 方式适用于连接数目比较小且固定的架...

2020-05-04 18:06:17 2130

原创 MySQL浅析之事务(3)

MySQL浅析之事务1. 事务定义首先我们需要明白什么是事务。简单来说,事务就是要保证一组数据库操作,要么全部成功,要么全部失败。在MySQL中,事务支持是在引擎层实现的。你现在知道,MySQL是一个支持多引擎的系统,但并不是所有的引擎都支持事务。比如MySQL原生的MyISAM引擎就不支持事务,这也是MyISAM被InnoDB取代的重要原因之一。2. 事务的特性原子性(A):事务是最...

2020-04-20 12:11:35 179

原创 Java设计模式 -- 观察者设计模式

观察者设计模式概念观察者模式(Observer),又叫发布-订阅模式(Publish/Subscribe),定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并自动更新。应用场景相信很多人都用过拼多多,最近拼多多一直推送9.9抢购商品。当我们点击订阅后,在开始抢购的前10分钟,拼多多就会提醒你去抢购。你也可以点击取消订阅,那么拼多多将不会提醒你。这...

2020-04-18 17:40:06 137

原创 Java设计模式 -- 建造者设计模式

建造者设计模式概念将一个复杂的对象的构造与它的表示分离,使得同样的构造过程可以创建不同的表示。在用户不知道对象的建造过程和细节的情况下就可以直接创建复杂的对象。用户只需要给出指定复杂对象的类型和内容,建造者设计模式负责按顺序创建对象(把内部的建造过程和细节隐藏起来)应用场景需要生成的产品对象有负责的内部结构,这些产品对象具备共性。隔离复杂对象的创建和使用,并使得相同的创建过程可以创...

2020-04-14 21:04:00 164

原创 SpringMVC请求流程

SpringMVC请求流程1. 流程步骤客户端请求被DispatcherServlet接收。DispatcherServlet将请求映射到Handler。生成Handler以及HandlerInterceptor。返回HandlerExecutionChain(Handler + HandlerInterceptor)。DispatcherServlet通过HandlerAdapte...

2020-04-11 19:49:15 306

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

TCP三次握手和四次挥手0. TCP包含的三个阶段TCP运输连接有三个阶段:连接建立、数据传输、连接释放。1. TCP三次握手TCP三次握手属于第一阶段,即连接建立阶段。此时客户端与服务端需要进行三次报文交互,如上图所示,因此我们通常称为TCP的三次握手。连接建立过程:首先客户端向服务端发送连接报文,之后状态由CLOSED状态转变为SYN-SENT状态,即同步-已发送状态。服务...

2020-04-11 17:14:58 381

原创 Java类的加载过程

Java类的加载过程JVM类的加载过程分为五个部分:加载、验证、准备、解析、初始化。1. 加载加载是类加载过程中的一个阶段,这个阶段会在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的入口。注意这里不一定非得要从一个Class文件获取,这里既可以从ZIP包中读取(比如从jar包和war包中读取),也可以在运行时计算生成(动态代理),也可以由其它文...

2020-04-11 10:16:21 250

原创 MySQL浅析之索引(2)

MySQL浅析之索引1. 前言如果我们用到数据库,那么不可比避免的就会提到索引。我们都知道,它类似于一本书的目录,能够加快我们的访问,使查找变得迅速。但是索引到底是什么,它又是如何工作的呢,我们今天就需要来了解了解。2. 常见的几种索引模型说到索引,说白了就是提高查询速率,那么是如何提高的呢?思考下,我们应该能够兵败一个概念,它的底层肯定是通过某些算法和数据结构来实现它的功能的,这...

2020-03-26 11:57:54 140

原创 MySQL浅析之日志模块(1)

MySQL浅析之日志模块1. 前言我们都知道在MySQL中有一个重要的模块 – 日志模块。其实在MySQL中,日志模块分为两种。一种是记录Server层的日志,称为binlog。一种是记录引擎层的日志,称为redo log ,这个日志是InnoDB引擎独有的。2. 什么是redo log假设我们要对一条数据进行修改,InnoDB是把数据从磁盘读取到内存的缓冲池上进行修改。这时,...

2020-03-23 21:14:51 177

原创 Java多线程 -- ReentrantLock原理

Java多线程 – ReentrantLock原理前因:学习黑马整理笔记所得1. 非公平锁实现原理加锁解锁流程先从构造器开始看,默认为非公平锁实现public ReentrantLock() { sync = new NonfairSync();}NonfairSync 继承自 AQS没有竞争时第一个竞争出现时Thread-1 执行了CAS 尝试将 state 由...

2020-03-15 11:44:07 320

原创 Java线程的生命周期

Java线程的生命周期起因当想了解Java生命周期时,发现网上有的博客介绍的是五种状态,有的介绍的是六种状态。因此,翻阅资料了解了下Java线程的生命周期Java线程生命周期那么Java线程的生命周期到底是分为五种还是六种呢?其实出现此情况的原因是根据不同的层面看,就有不同的结果。一般是分为操作系统和Java Api两个层面来分析Java线程生命周期。基于操作系统划分线程生命周期...

2020-03-12 21:20:24 279

原创 JVM相关知识点总结

JVM相关知识点总结1. JVM内存结构和管理机制程序计数器:每个线程拥有一个PC寄存器,在线程创建时创建。指向下一条指令的地址。执行本地方法时,PC值为undefined。方法区:保存装载类的信息;类型的常量池;字段,方法信息;方法字节码。堆内存:new的对象都保存在Java堆中;所有的线程共享Java堆;对分代GC来说,堆也是分代的;GC管理的主要区域。栈内存:线程私有,生命周期和...

2020-03-12 11:57:40 201

原创 Java多线程 -- 带你了解Java线程synchronized

带你了解Java线程synchronized0. 前言:Java对象头与Monitor概念0.1 首先了解下Java对象头:32位虚拟机普通对象Object Header (64 bits)Mark Word (32 bits) | Klass Word (32 bits)数组对象O...

2020-03-05 17:17:06 503

原创 Java多线程 -- 线程池参数和方法

Java线程池参数和方法1. 线程池状态ThreadPoolExecutor 使用 int 的高 3 位来表示线程池状态,低 29 位表示线程数量状态名高 3 位接收新任务处理阻塞队列任务说明RUNNING111YYSHUTDOWN000NY不会接收新任务,但会处理阻塞队列剩余 任务STOP001NN会中断正在执行的任务,并抛弃阻...

2020-03-03 21:54:53 281

原创 Java牛客 -- 专项练习(8)

前因:记录在牛客上刷题的错题记事本1. 以下哪项陈述是正确的?A : 垃圾回收线程的优先级很高,以保证不再 使用的内存将被及时回收B : 垃圾收集允许程序开发者明确指定释放 哪一个对象C : 垃圾回收机制保证了JAVA程序不会出现 内存溢出D : 进入”Dead”状态的线程将被垃圾回收器回收E : 以上都不对答案选 E,A : 垃圾回收在jvm中优先级相当相当低。B:垃圾...

2020-02-29 11:47:34 808

原创 Java8新特性 -- Stream流

Java8新特性 – Stream流1. 什么是Stream流?Java 8 中的 Stream 是对集合(Collection)对象功能的增强,它专注于对集合对象进行各种非常便利、高效的聚合操作,或者大批量数据操作 。Stream API 借助于同样新出现的 Lambda 表达式,极大的提高编程效率和程序可读性.2. Stream流的基本使用前提:学习Stream流需要了解Lambda表...

2020-02-26 19:28:44 921

原创 Java多线程 -- 动手实现线程池

Java自定义线程池1. 什么是线程池线程池就是提前创建若干个线程,如果有任务需要处理,线程池里的线程就会处理任务,处理完之后线程并不会被销毁,而是等待下一个任务。由于创建和销毁线程都是消耗系统资源的,所以当你想要频繁的创建和销毁线程的时候就可以考虑使用线程池来提升系统的性能。2. 线程池原理图Thread Pool : 存放线程的集合Blocking Queue : 任务队列3.手...

2020-02-23 11:15:58 725

原创 Java牛客 -- 专项练习(7)

前因:记录在牛客上刷题的错题记事本1. 以下JAVA程序代码的输出是public static void main(String args[]) { System.out.println(14^3);}A : 2744B : 13C : 17D : 11答案选C。与(&) 两个操作数中位都为1,结果才为1,否则结果为0 1010 &...

2020-02-21 10:53:50 318

原创 Java牛客 -- 专项练习(6)

前因:记录在牛客上刷题的错题记事本1. 下面关于volatile的功能说法正确的是哪个A : 原子性B : 有序性C : 可见性D : 持久性答案B,C。 synchronized保证三大性,原子性,有序性,可见性,volatile保证有序性,可见性,不能保证原子性。2. 下面哪些类可以被继承? Java.lang.Thread、java.lang.Number、java.lan...

2020-02-18 20:39:02 613

空空如也

空空如也

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

TA关注的人

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