- 博客(110)
- 收藏
- 关注
原创 Docker 一、基础篇
1)为什么会有docker出现假设你现在使用的是一台笔记本电脑而且你的开发环境具有特定的配置,其他开发人员身处的环境配置也各有不同。您正在开发的应用依赖于您当前的配置且还要依赖于某些配置文件,此外您的企业还拥有标准化的测试和生产环境,且具有自身的配置和一系列支持文件。您希望尽可能多在本地模拟这些环境而不产生重新创建服务器环境的开销。并且在部署过程中不出现令人头疼的版本、配置问题,也无法重新编写代码和进行故障修复。
2025-06-04 00:15:57
426
原创 RocketMQ 二、核心概念
同⼀类Consumer的集合,这类Consumer通常消费同⼀类消息且消费逻辑⼀致。⽤于保证⽣产者的⾼可⽤,⽐如在事务消息中回查本地事务状态,需要⽣产者具备⾼可⽤的特性,才能完成整个任务。普通顺序消费模式下,消费者通过同⼀个消费队列收到的消息是有顺序的,不同消息队列收到的消息则可能是⽆顺序的。负责⽣产消息,⼀般由业务系统负责⽣产消息。消息系统所传输信息的物理载体,⽣产和消费数据的最⼩单位,每条消息必须属于⼀个主题。表示⼀类消息的集合,每个主题包含若⼲条消息,每条消息只能属于⼀个主题,是RocketMQ。
2025-06-02 02:50:43
494
原创 linux安装JDK8
下载好安装包之后,在linux服务器下的 usr/local/ 目录下创建 java目录。一般是 rz 命令上传,zip包解压使用 unzip,tar包解压需要自行查询以下。Oracle 提供了下载,但需要登录 Oracle 账号才能下载。然后在该目录下上传下载好的 zip包或者tar包。:该仓库提供了 JDK 1.8.0_144 的直接下载资源。
2025-05-20 18:31:49
275
原创 RocketMQ 一、基础与应用
使⽤异步的通信⽅式对模块间的调⽤进⾏解耦,可以快速的提升系统的吞吐量。通过消息队列,屏蔽底层的通信协议,使得解藕和并⾏消费得以实现。随着使⽤中队列和虚拟主题的增加,阿⾥巴巴团队使⽤的ActiveMQ IO 模块达到了瓶颈。⽐如以电商订单系统为例,如果各服务之间使⽤同步通信,不仅耗时较久,且过程中受到⽹络波动的影响,不能保证⾼成功率。因此,使⽤异步的通信⽅式对架构进⾏改造。在这种情况下,决定发明⼀种新的消息传递引擎来处理更⼴泛的⽤例,从传统的发布/消息队列解决的不是存放消息的队列的⽬的,解决的是通信问题。
2025-05-19 18:41:49
897
原创 ReentrantLock、ReentrantReadWriteLock、StampedLock讲解
ReentrantReadWriteLock实现了读写分离,但是一旦读操作比较多的时候,想要获取写锁就变得比较困难了,假如当前1000个线程,999个读,1个写,有可能999个读取线程长时间抢到了锁,那1个写线程就悲剧了因为当前有可能会一直存在读锁,而无法获得写锁,根本没机会写。ReentrantReadWriteLock读的过程中不允许写,只有等待线程都释放了读锁,当前线程才能获取写锁,也就是写入必须等待,这是一种悲观的读锁,人家还在读着那,你先别去写,省的数据乱。所以,需要释放所有读锁,才可获取写锁。
2025-05-18 19:32:18
237
原创 AbstractQueuedSynchronizer之AQS
公平锁和非公平锁: 公平锁:锁被释放以后,先申请的线程先得到锁。性能较差一些,因为公平锁为了保证时间上的绝对顺序,上下文切换更频繁 非公平锁:锁被释放以后,后申请的线程可能会先获取到锁,是随机或者按照其他优先级排序的。性能更好,但可能会导致某些线程永远无法获取到锁 可重入锁: 也叫做递归锁,指的是线程可以再次获取自己的内部锁,比如一个线程获取到了对象锁,此时这个对象锁还没有释放,当其想再次获取这个对象锁的时候还是可以获取的,如果不可重入的话,会导
2025-05-13 21:17:25
214
原创 Java对象内存布局和对象头
对象需要存储的运行时数据很多,其实已经超出了32、64位Bitmap结构所能记录的最大限度,但对象头里的信息是与对象自身定义的数据无关的额外存储成本,考虑到虚拟机的空间效 率,Mark Word被设计成一个有着动态定义的数据结构,以便在极小的空间内存储尽量多的数据,根据对象的状态复用自己的存储空间。可以看到一共占用了16个字节,对象头占8个字节,类型指针占4个字节,数组长度4个字节,总共16字节。(在64位系统中,Mark Word占了8个字节,类型指针占了8个字节,一共是16个字节)
2025-05-11 12:07:59
321
原创 ThreadLocal
5个销售买房子,集团只关心销售总量的准确统计数,按照总销售额统计,方便集团公司给部分发送奖金--------群雄逐鹿起纷争------为了数据安全只能加锁/*** 需求:5个销售卖房子,集团只关心销售总量的精确统计数*/i <= 5;j++) {try {System.out.println(Thread.currentThread().getName() + "\t" + "共计卖出多少套: " + house.saleCount);/**
2025-05-09 18:21:55
217
原创 CAS与原子类
就是说多线程环境操作时,第一步先将主内存中的值读取到工作内存中,这个工作内存中的值就是旧的预期值,主内存中的值就是内存值,在自己的工作区执行完之后,比如说在工作内存中进行了 i++ 操作,然后执行完操作之后,会将工作内存中的值跟主内存中的值进行对比,如果一致则进行重写操作,如果不一致则本次操作作废,重新进行读取然后操作。CAS是实现自旋锁的基础,CAS利用CPU指令保证了操作的原子性,以达到锁的效果,至于自旋呢,看字面意思也很明白,自己旋转。原子类靠的是CAS思想,CAS思想实现靠的是Unsafe类。
2025-04-27 19:59:29
586
原创 Java内存模型JMM与volatile关键字
1、你知道什么是Java内存模型JMM吗?2、JMM和volatile他们两个之间的关系?3、JMM没有那些特征或者它的三大特征是什么?4、为什么要有JMM,它为什么出现?作用和功能是什么?5、happens-before先行并发原则你有了解过吗?
2025-04-23 21:36:50
213
原创 Java中的锁
乐观锁: 认为自己在使用数据的时候不会有别的线程修改数据或资源,不会添加锁,Java中使用无锁编程来实现,只是在更新的时候去判断,之前有没有别的线程更新了这个数据,如果这个数据没有被更新,当前线程将自己修改的数据成功写入,如果已经被其他线程更新,则根据不同的实现方式执行不同的操作,比如:放弃修改、重试抢锁等等。-----适合读操作多的场景,不加锁的特性能够使其读操作的性能大幅提升,乐观锁则直接去操作同步资源,是一种无锁算法,得之我幸不得我命---佛系锁。
2025-04-20 22:49:21
360
原创 CompletableFuture
举例:比如主线程让一个子线程去执行任务,子线程可能比较耗时,启动子线程开始执行任务后,主线程就去做其他事情了,忙完其他事情或者先执行完,过了一会再才去获取子任务的执行结果或变更的任务状态(老师上课时间想喝水,他继续讲课不结束上课这个主线程,让学生去小卖部帮老师买水完成这个耗时和费力的任务)。Future接口(FutureTask实现类)定义了操作异步任务执行一些方法,如获取异步任务的执行结果、取消异步任务的执行、判断任务是否被取消、判断任务执行是否完毕等。
2025-04-16 18:25:07
112
原创 JUC并发编程
Monitor其实是一种同步机制,它的义务是保证(同一时间)只有一个线程可以访问被保护的数据和代码,JVM中同步是基于进入和退出监视器(Monitor管程对象)来实现的,每个对象实例都会有一个Monitor对象,Monitor对象和Java对象一同创建并销毁,底层由C++语言实现。是一种特殊的线程为其他线程服务的,在后台默默地完成一些系统性的任务,比如垃圾回收线程就是最典型的例子。是在不同实体上的多个事件,是在多台处理器上同时处理多个任务,同一时刻,大家都在做事情,你做你的,我做我的,各干各的。
2025-04-16 16:09:22
957
原创 设计模式 四、行为设计模式(2)
状态设计模式是一种行为型设计模式,它允许对象在其内部状态发生时改变其行为,这种模式可以消除大量的条件语句,并将每个状态的行为封装到单独的类中。状态模式的主要组成部分如下:1)上下文(Context):上下文通常包含一个具体状态的引用,用于维护当前状态,上下文委托给当前对象处理状态相关行为。2)抽象状态(State):定义一个接口,用于封装与上下文的特定状态相关的行为。3)具体状态(Concrete State):实现抽象状态接口,为具体状态定义行为。每个具体状态类对应一个状态。
2025-04-11 15:10:45
990
原创 设计模式 四、行为设计模式(1)
观察者模式是一种行为设计模式,允许对象间存在一对多的依赖关系当一个对象的状态发生改变时,所有依赖它的对象都会得到通知并自动更新,在这种设计模式种,发生状态改变的对象被称为“主题”(Subject),依赖它的对象成为“观察者”(Observer)。观察者模式(Observer Design Pattern)也被称为发布订阅模式(Publish-Subscribe Design Pattern)。
2025-04-07 17:38:07
785
原创 设计模式 三、结构型设计模式
通过前面几个案例,大致了解了静态代理的使用方式,其大致流程如下:1.创建一个接口,定义代理类和被代理类共同实现的方法。2.创建被代理类,实现这个接口,并且在其中定义实现方法。3.创建代理类,也要实现这个接口,同时在其中定义一个被代理类的对象作为成员变量。4.在代理类中实现接口中的方法,方法中调用被代理类中的对应方法。5.通过创建代理对象,并调用其方法,方法增强。这样,被代理类的方法就会被代理类所覆盖,实现了对被代理类的增强或修改。
2025-04-01 16:09:18
1164
原创 设计模式 二、创建型设计模式
他们合作编写了一本非常著名的关于设计模式的书籍《Design Patterns: Elements of Reusable Object-Oriented Software》(设计模式:可复用的面向对象软件元素)。在系统中,我们只有一个配置文件,当配置文件被加载到内存之后,应该被映射为一个唯一的【配置实例】,此时就可以使用单例,当然也可以不用。若计数器不唯一,很有可能产生统计无效,ID重复等。,这种设计模式就叫单例设计模式,简称单例模式。这类模式主要关注对象的创建过程。这类模式主要关注对象之间的通信。
2025-03-17 14:22:56
634
原创 设计模式 一、软件设计原则
所以我们可以先写一个粗粒度的类,满足业务需求,随着业务的发展,如果粗粒度的类越来越大,代码越来越多,这个时候我们就可以将这个粗粒度的类,拆分成几个更细粒度的类,这就是所谓的持续重构。单一职责原则的定义非常简单,一个类只负责完成一个职责或者功能,也就是说,不要设计大而全的类,要设计粒度小、功能单一的类,换个角度来讲,就是一个类包含了两个或者以上业务不相干的功能,那我们就说它职责不够单一,应该将它拆分成多个功能更加单一,粒度更细的类。1.1 如何理解单一职责原则(SRP)1.2 如何判断类的职责是否单一。
2025-03-09 20:19:15
284
原创 EasyExcel的应用
这里我们可以使用最新的。版本,也可以选择之前的稳定版本,大致相同,新的版本也会向前兼容(可能在高版本被废弃),关于。版本适配问题,具体可参考。
2025-01-17 18:26:17
1110
原创 四、CSS3
CSS3 是 CSS2 的升级版本,他在CSS2的基础上,新增了很多强大的新功能,从而解决一些实际面临的问题。CSS3的新特性如下:1、新增了更加实用的选择器,例如:动态伪类选择器、目标伪类选择器、伪元素选择器等等。2、新增了更好的视觉效果,例如:圆角、阴影、渐变等。3、新增了丰富的背景效果,例如:支持多个背景图片,同时新增了若干个背景相关的属性。4、新增了全新的布局方案——弹性盒子。5、新增了Web字体,可以显示用户电脑上没有安装的字体。6、增强了颜色,例如:HSL。
2024-12-17 18:19:35
653
原创 二、HTML5
HTML5 是新一代的 HTML 标准,2014年10月由万维网联盟(W3C)完成标准制定。官网地址:W3C提供:WHATWGHTML5在侠义上是指新一代的HTML标准,在广义上是指:整个前端2、HTML5 优势1、针对JavaScript,新增了很多可操作的接口。2、新增了一些语义化标签、全局属性3、新增了多媒体标签,可以很好的替代 flash。4、更加侧重语义化,对于SEO 更友好。5、可移植性好,可以大量应用在移动设备上。
2024-12-16 11:05:51
1186
原创 三、CSS2
CSS全称为:层叠样式表(Cascading Style Sheets)。CSS 也是一种标记语言,用于给HTML结构设计样式,例如:文字大小、颜色、元素宽高等等。css可以美化HTML,让HTML更漂亮HTML搭建结构,CSS添加样式,实现了,结构与样式的分离。
2024-11-19 19:32:17
1024
原创 一、HTML
内核是浏览器的核心,用于处理浏览器所得到的各种资源。例如,服务器发送图片、视频、音频的资源,浏览器就需要使用内核来进行处理这些资源。内核处理完这些资源之后,我们才能看到页面。这五大浏览器都有自己的内核。五大浏览器,四大内核。不在这五个之中的统称为其他浏览器。其他浏览器就是在上述的内核的基础上,加上了一些精美的UI界面,实用的小功能等等。
2024-11-11 18:30:31
949
原创 二、SSM框架制作CRM系统案例
虽然上述配置都可以在springconfig中进行配置,但其实 datasource 数据源的配置和 mappers 映射文件的配置,通常会配置在 spring 的配置文件中。Spring 的核心功能之一是通过 IoC(控制反转)容器来管理对象。4、添加 mybatis-config.xml 配置文件。映射文件配置,我们放到spring的配置文件中去。1、首先创建下面的目录结构。中定义 Bean 是最常见的操作。暂时没用到先不进行配置。
2024-11-08 19:26:02
382
1
原创 一、使用配置类简易SpringMVC项目
MVC全称Model View Controller,是一种设计创建Web应用程序的模式。这三个单词分别代表Web应用程序的三个部分:指数据模型。用于存储数据以及处理用户请求的业务逻辑。在Web应用中,JavaBean对象,业务模型等都属于Model。用于展示模型中的数据的,一般为jsp或html文件。是应用程序中处理用户交互的部分。接受视图提出的请求,将数据交给模型处理,并将处理后的结果交给视图显示。
2024-10-28 18:45:07
1111
原创 HTTP 四、HttpClient的使用
HttpClient是Apache Jakarta Common下的子项目,用来提供高效的、最新的、功能丰富的支持HTTP协议的客户端编程工具包,并且它支持HTTP协议最新的版本和建议。HttpClient已经应用在很多的项目中,比如Apache Jakarta上很著名的另外两个开源项目Cactus和HTMLUnit都使用了HttpClient。HTTP和浏览器有点像,但却不是浏览器。
2024-09-10 18:53:39
899
原创 HTTP 二、进阶
HTTPS为 HTTP 增加了四大安全特性。HTTPS 其实是一个“非常简单”的协议,RFC 文档很小,只有短短的 7 页,里面规定了新的协议名“https”,默认端口号 443,至于其他的什么请求 - 应答模式、报文结构、请求方法、URI、头字段、连接管理等等都完全沿用 HTTP,没有任何新的东西。
2024-09-04 14:36:27
2531
原创 HTTP 一、基础知识
HTTP(Hyper Text Transfer Protocol): 全称超文本传输协议,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。HTTP 是一种应用层协议,是基于 TCP/IP 通信协议来传递数据的,其中 HTTP1.0、HTTP1.1、HTTP2.0 均为 TCP 实现,HTTP3.0 基于 UDP 实现。现主流使用 HTTP1.0 和 HTTP3.0。
2024-09-03 11:36:17
3439
原创 MyBatis-Plus 三、(进阶使用)
typeHandler 实现类例如当我们 某个字段存储的类型为List或者Map时,我们可以自定义一个TypeHandler,以 list 为例,我们想存储一个字段类型为 list ,在数据库中的存储的格式是 多条数据以逗号分割,当查询时会自动根据逗号分割成列表格式。需要实现@Override@Override@Override@Override@MappedJdbcTypes:表示SQL语句中查出来的类型;@MappedTypes:表示要转成 Java 对象的类型;
2024-08-23 15:58:03
3407
原创 MyBatis-Plus 一、(基础应用)
MybatisPlus可以节省大量时间,所有的CRUD代码都可以自动化完成MyBatis-Plus是一个MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。特性:无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求。
2024-08-19 18:36:45
1437
原创 Mybatis - 应用篇 (二、进阶应用)
是一次性把全部数据查询加载进内存 ,然后再进行分页。这样优点是减少IO次数,适合频繁访问、数据量少的情况。缺点是不适合大数据量,容易造成内存溢出。如果我们要实现分页逻辑,一般前端会传 pageNum(第几页) , pageSize(多少条数据)。我们需要自己计算分页逻辑。是利用limit语法在数据库中进行分页。他的优点是适合分页大数据量数据。缺点是频繁查询数据库,消耗性能。这种方式缺点是比较麻烦,要自己计算分页数据和封装Page类。mapper接口中:意思就是 从第几行开始拿多少条数据。
2024-08-09 18:30:19
513
原创 Mybatis - 应用篇 (一、基础应用)
MyBatis 本是apache的一个开源项目iBatis,2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis。2013年11月迁移到Github。MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注SQL本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。
2024-08-05 18:36:18
1062
原创 JDBC 二、进阶篇
而我们Java是面向对象的,一个表对应的是一个类,一行数据就对应的是Java中的一个对象,一个列对应的是对象的属性,所以我们要把数据存储在一个载体里,这个载体就是实体类!在数据中,执行新增操作时,主键列为自动增长,可以在表中直观的看到,但是在Java程序中,我们执行完新增后,只能得到受影响行数,无法得知当前新增数据的主键值。,作用是在编程中,把面向对象的概念跟数据库中表的概念对应起来,以面向对象的角度操作数据库中的数据,即一张表对应一个类,一行数据对应一个对象,一个列对应一个属性!
2024-07-24 17:42:05
836
原创 JDBC 一、基础篇
注册驱动【依赖的驱动类,进行安装】获取连接【Connection建立连接】创建发送SQL语句对象【Connection创建发送SQL语句的Statement】发送SQL语句,并获取返回结果【Statement 发送sql语句到数据库并且取得返回结果】结果集解析【结果集解析,将查询结果解析出来】资源关闭【释放ResultSet、Statement 、Connection】
2024-07-24 16:14:45
597
原创 MYSQL 七、mysql 日志与备份
中继日志只在主从服务器架构的从服务器上存在。从服务器为了与主服务器保持一致,要从主服务器读取二进制日志的内容,并且把读取到的信息写入本地的日志文件中,这个从服务器本地的日志文件就叫中继日志。然后,从服务器读取中继日志,并根据中继日志的内容对从服务器的数据进行更新,完成主 从服务器的 数据同步。搭建好主从服务器之后,中继日志默认会保存在从服务器的数据目录下。从服务器名 -relay-bin.序号。从服务器名 -relaybin.index,用来定位当前正在使用的中继日志。在实际工作中,我们常常将。
2024-07-22 19:19:58
1232
原创 MYSQL 六、mysql锁 2(多版本并发控制)
MVCC (Multiversion Concurrency Control),多版本并发控制。顾名思义,MVCC 是通过数据行的多个版本管理来实现数据库的并发控制。这项技术使得在InnoDB的事务隔离级别下执行一致性读操作有了保证。换言之,就是为了查询一些正在被另一个事务更新的行,并且可以看到它们被更新之前的值,这样 在做查询的时候就不用等待另一个事务释放锁。MVCC没有正式的标准,在不同的DBMS中MVCC的实现方式可能是不同的,也不是普遍使用的(大家可以参考相关的DBMS文档)。
2024-07-21 21:54:21
708
原创 MYSQL 六、mysql锁 1
在数据库中,除传统的计算资源(如CPU、RAM、I/O等)的争用以外,数据也是一种供许多用户共享的 资源。为保证数据的一致性,需要对并发操作进行控制,因此产生了锁。同时锁机制也为实现MySQL 的各个隔离级别提供了保证。锁冲突也是影响数据库并发访问性能的一个重要因素。所以锁对数据库而言显得尤其重要,也更加复杂。
2024-07-19 12:40:12
1113
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人