自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

初念初恋的博客

你知道的越多,你不知道的就越多。

  • 博客(136)
  • 收藏
  • 关注

原创 SpringBoot集成flyway

Flyway 是一款开源的数据库版本管理工具,它更倾向于规约优于配置的方式。Flyway 可以独立于应用实现管理并跟踪数据库变更,支持数据库版本自动升级,并且有一套默认的规约,不需要复杂的配置,Migrations 可以写成 SQL 脚本,也可以写在 Java 代码中,不仅支持 Command Line 和 Java API,还支持 Build 构建工具和 Spring Boot 等,同时在分布式环境下能够安全可靠地升级数据库,同时也支持失败恢复等。

2024-03-14 14:04:08 952 1

原创 SpringBoot集成MQTT协议

MQTT 可以被解释为一种低开销,低带宽占用的即时通讯协议,可以用较少的代码和带宽为远程设备连接提供实时可靠的消息服务,它适用于硬件性能低下的远程设备以及网络状况糟糕的环境下,因此 MQTT 协议在 IoT(Internet of things,物联网),小型设备应用,移动应用等方面有较广泛的应用。优点:代码量少,开销低,带宽占用小,即时通讯协议。

2024-01-03 11:30:35 655

原创 【JAVA基础】DeferredResult使用详解

Servlet3.0提供了基于servlet的异步处理api,Spring MVC只是将这些api进行了一系列的封装,从而实现了DeferredResult。DeferredResult字面意思是"延迟结果",它允许Spring MVC收到请求后,立即释放(归还)容器线程,以便容器可以接收更多的外部请求,提升吞吐量,与此同时,DeferredResult将陷入阻塞,直到我们主动将结果set到DeferredResult,最后,DeferredResult会重新申请容器线程,并将本次请求返回给客户端。

2023-12-21 19:16:57 916

原创 【Docker】基于jib插件,实现Docker部署springboot项目

在工作中,作为一名后端开发人员,项目部署运维的事我们可能都要同时干,今天想跟大家聊聊关于springboot项目使用docker部署相关操作。后期还会跟大家分享docker-compose部署微服务相关的知识。我在工作中,是通过jib插件将springboot项目打成镜像tar包,然后load进docker里进行使用的。

2023-07-01 08:51:24 673

原创 springboot定时任务详解

在我们开发项目过程中,经常需要定时任务来帮助我们来做一些内容, Spring Boot 默认已经帮我们实行了,只需要添加相应的注解就可以实现。

2023-06-30 16:38:11 6379

原创 使用 ArrayList 应当避免的坑

高性能应用都是从小细节一点点堆砌起来的,就如这里提到的ArrayList的坑一样,日常使用没啥大问题,一旦数据量起来所有的小问题都会成为大问题。使用 ArrayList 时如果能提前预测到数据量大小,比较大时一定要指定其长度。尽可能避免使用api,会导致复制数组,降低效率。再额外提一点,我们常用的另一个Map容器HashMap也是推荐要初始化长度从而避免扩容。

2023-06-29 15:16:47 210

原创 java中避免空指针的几个方法介绍

Java 编程中哪个异常是你印象最深刻的,那 NullPointerException空指针可以说是臭名昭著的。不要说初级程序员会碰到,即使是中级,专家级程序员稍不留神,就会掉入这个坑里。

2023-06-29 15:12:02 1008

原创 面试必备:nginx知识梳理(收藏版)

Nginx 是一个高性能的 HTTP 和反向代理服务。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好。Nginx 专为性能优化而开发,性能是其最重要的考量指标,实现上非常注重效率,能经受住高负载的考验,有报告表明能支持高达50000个并发连接数。

2023-06-28 21:34:06 285

原创 【JAVA基础】== 与 equals区别

它的作用是判断两个对象的地址是不是相等。即,判断两个对象是不是同一个对象(基本数据类型比较的是值,引用数据类型比较的是内存地址)。基本数据类型他们之间的比较,应用双等号(==),比较的是他们的值。引用数据类型:当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址(确切的说,是堆内存地址)。//基本数据类型 int ii = 100;//基本数据类型 Integer j = 100;//引用类型 Integer jj = 100;

2023-06-28 19:56:49 234

原创 【JAVA基础】一文了解forEach循环

相信大家肯定都看过阿里巴巴开发手册,而在阿里巴巴开发手册中明确的指出,不要再foreach循环里面进行元素的add和remove,如果你非要进行remove元素,那么请使用Iterator方式,如果存在并发,那么你一定要选择加锁。for-each循环不仅适用于遍历集合和数组,而且能让你遍历任何实现Iterator接口的对象;最最关键的是它还没有性能损失。而对数组或集合进行修改(添加删除操作),就要用迭代器循环。所以循环遍历所有数据的时候,能用它的时候还是选择它吧。

2023-06-28 09:45:12 283

原创 一文了解HTTP协议

我们在打开一个网页的时候通常都会注意到网址的前面有一个统一的标识http://(或https://),这代表的就是本次访问使用 HTTP 协议进行通信。那么问题来了:为什么我们在通信的时候要用到这个协议呢?简单来讲,所谓协议其实就是一个规范、一个标准,大家共同遵守。通信双方通过使用统一的规范,能够有效地将信息结构化,让相应的信息各归其位,正是“上帝的归上帝,凯撒的归凯撒”。这样一来就可以大大地降低信息传输的成本。

2023-06-27 08:23:46 141

原创 FTP协议详解

FTP是一个客户/服务器系统。用户通过一个客户机程序连接至在远程计算机上运行的服务器程序。依照 FTP 协议提供服务,进行文件传送的计算机就是 FTP服务器,而连接FTP服务器,遵循FTP协议与服务器传送文件的电脑就是FTP客户端。用户要连上FTP 服务器,就要用到 FTP 的客户端软件,通常 Windows自带“ftp”命令,这是一个命令行的 FTP客户程序,另外常用的 FTP 客户程序还有FileZilla、 CuteFTP、Ws_FTP、Flashfxp、LeapFTP 等。

2023-06-27 08:21:14 752

原创 TCP/IP 协议详解

TCP/IP传输协议,即传输控制/网络协议,也叫作网络通讯协议。它是在网络的使用中的最基本的通信协议。TCP/IP传输协议对互联网中各部分进行通信的标准和方法进行了规定。并且,TCP/IP传输协议是保证网络数据信息及时、完整传输的两个重要的协议。TCP/IP传输协议是严格来说是一个四层的体系结构,应用层、传输层、网络层和网络接口层都包含其中。

2023-06-26 12:12:30 1545

原创 UDP协议详解

UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,IETF RFC 768是UDP的正式规范。UDP在IP报文的协议号是17。UDP协议全称是用户数据报协议,在网络中它与TCP协议一样用于处理数据包,是一种无连接的协议。在OSI模型中,在第四层——传输层,处于IP协议的上一层。

2023-06-26 08:21:58 8419

原创 【Docker】Docker Compose详解

Compose项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。从功能上看,跟OpenStack中的Heat十分类似。其代码目前在上开源。通过前面文章的介绍,我们知道使用一个Dockerfile模板文件,可以让用户很方便的定义一个单独的应用容器。然而,在日常工作中,经常会碰到需要多个容器相互配合来完成某项任务的情况。例如要实现一个 Web 项目,除了 Web 服务容器本身,往往还需要再加上后端的数据库服务容器,甚至还包括负载均衡容器等。

2023-06-25 13:46:05 6834 2

原创 工作中,如何解决跨域问题?

跨域,是指浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对JavaScript实施的安全限制。所谓同源指的是:协议、域名、端口号都相同,只要有一个不相同,那么都是非同源。同源策略它是由 Netscape 提出的一个安全策略,它是浏览器最核心也是最基本的安全功能,如果缺少同源策略,则浏览器的正常功能可能都会受到影响,现在所有支持JavaScript的浏览器都会使用这个策略。

2023-06-25 10:15:26 163

原创 【Docker】一文了解DockerFile

卷可以容器间共享和重用容器并不一定要和其它容器共享卷修改卷后会立即生效对卷的修改不会对镜像产生影响卷会一直存在,直到没有任何容器在使用它VOLUME 让我们可以将源代码、数据或其它内容添加到镜像中,而又不并提交到镜像中,并使我们可以多个容器间共享这些内容。

2023-06-24 16:54:10 1273 1

原创 【Docker】Docker常用命令总结

在开发过程中,经常涉及到 docker 的相关操作,本文对常用的指令进行汇总。

2023-06-24 08:29:17 1296 1

原创 【程序员】工作中,如何提升自己的编程能力?

其实,作为一名程序员,我们都希望能写出高质量的代码,我自己也在朝这个方向努力。既然选择了做IT,就要明白,程序员从来不适合语言上的巨人,行动上的小人。只有真正地付出实践,从问题中复盘经验,才能使自己的编程水平不断提高。

2023-06-23 19:24:20 435

原创 【Docker】一文了解Docker

Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker,就不用担心环境问题。总体来说,Docker 的接口相当简单,用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。

2023-06-23 17:49:42 374

原创 一文弄懂git原理及相关操作

对于一个刚入行的程序员或者是大学生,我建议大家还是好好的把git学学,因为在现在大部分企业代码的管理工具都是使用Git,其实Git很简单,无非就是一些命令,我们平常多去用它,就能熟能生巧。我觉得你们可以自己去创建Gitee和GitHub账号,把自己的代码托管上去,进行管理。

2023-06-22 21:43:41 315

原创 【MYSQL篇】mysql性能优化总结

说到MYSQL性能调优,大部分时候想要实现的目标是让我们的查询更快。一个查询的动作又是由很多个环节组成的,每个环节都会消耗时间,我们要减少查询所消耗的时间,就要从每一个环节入手。

2023-06-22 20:38:41 1036

原创 【MYSQL篇】mysql中相关锁和MVCC详解

数据库的锁是在多线程高并发的情况下用来保证数据稳定性和一致性的一种机制。MySQL 根据底层存储引擎的不同,锁的支持粒度和实现机制也不同。MyISAM 只支持表锁,InnoDB 支持行锁和表锁。目前 MySQL 默认的存储引擎是 InnoDB,这里主要介绍 InnoDB 的锁。

2023-06-21 21:55:33 627

原创 【MYSQL篇】一文了解mysql事务

以上就是关于 MySQL 数据库事务相关的知识点,关于事务的隔离性,在 InnoDB 中,MVCC 和锁是协同使用的来实现隔离性的,这两种方案并不是互斥的。下一篇文章,我们来聊聊 MySQL 锁相关的知识,锁又是怎么实现读一致性的呢?

2023-06-21 15:46:01 198

原创 【MYSQL篇】一文弄懂mysql中redo log、binlog

redo log:InnoDB 存储引擎层方面的日志,所以如果你使用的存储引擎不是 InnoDB 的话,那就根本谈不上 redo log。binlog: MySQL Server 层记录的日志,所以不管是用的什么存储引擎,只要是 MySQL 都是会有 binlog 的存在,在做 MySQL 主从复制的时候,利用的就是 binlog。

2023-06-20 22:41:02 767

原创 【MYSQL篇】mysql不同存储引擎中索引是如何实现的?

每 张 InnoDB 的 表 有 两 个 文 件 ( .frm 和 .ibd ),MyISAM 的 表 有 三 个 文 件 (.frm、.MYD、.MYI)。有一个是相同的文件,.frm。.frm是 MySQL 里面表结构定义的文件,不管你建表的时候选用任何一个存储引擎都会生成,我们就不看了。我们主要看一下其他两个文件是怎么实现 MySQL 不同的存储引擎的索引的。我们先来看下 MyISAM。通过以上的分析,我们知道在 MyISAM 和 InnoDB 这两大存储引擎中,索引的具体落地形式是怎么样的。

2023-06-20 08:25:20 393

原创 【MYSQL篇】一文弄懂mysql索引原理

数据库索引,是数据库管理系统(DBMS)中一个排序的数据结构,以协助快速查询、更新数据库表中数据。数据是以文件的形式存放在磁盘上面的,每一行数据都有它的磁盘地址。如果没有索引的话,我们要从 500 万行数据里面检索一条数据,只能依次遍历这张表的全部数据,直到找到这条数据。但是我们有了索引之后,只需要在索引里面去检索这条数据就行了,因为它是一种特殊的专门用来快速检索的数据结构,我们找到数据存放的磁盘地址以后,就可以拿到数据了。

2023-06-20 06:21:33 474 1

原创 【MYSQL篇】Update语句原理详解

本篇文章我们来聊聊 MySQL更新语句的执行原理。更新流程和查询流程有什么不同呢?基本流程也是一致的,也就是说,它也要经过解析器、优化器的处理,最后交给执行器。区别就在于拿到符合条件的数据之后的操作。

2023-06-19 09:04:30 4215

原创 【MySQL篇】Select语句原理详解

在关系型数据库里面,数据是放在表 Table 里面的。我们可以把这个表理解成 Excel 电子表格的形式。所以我们的表在存储数据的同时,还要组织数据的存储结构,这个存储结构就是由我们的存储引擎决定的,所以我们也可以把存储引擎叫做表类型。在 MySQL 里面,支持多种存储引擎,他们是可以替换的,所以叫做插件式的存储引擎。为什么要支持这么多存储引擎呢?一种还不够用吗?在 MySQL 里面,每一张表都可以指定它的存储引擎,而不是一个数据库只能使用一个存储引擎。

2023-06-19 08:22:22 550

原创 一文带你弄懂【时间复杂度】

算法(Algorithm)是求解一个问题需要遵循的,被清楚指定的简单指令的集合。一个算法的评价主要从时间复杂度和空间复杂度来考虑。而时间复杂度是一个函数,定性描述该算法的运行时间,通常用大O符号表示。

2023-06-18 10:52:01 761 1

原创 改善Java程序的20个实用建议

对于我们的例子来说,Client类在编译时字节码中就写上了"150",这个常量,而不是一个地址引用,因此无论你后续怎么修改常量类,只要不重新编译Client类,输出还是照旧。把参与运算的值扩大100倍,并转为整型,然后在展现时再缩小100倍,这样处理的好处是计算简单,准确,一般在非金融行业(如零售行业)应用较多。最近细读了秦小波老师的《编写高质量代码改善Jaav程序的151个建议》,要说是151个建议,其实更合适的说是避免Java的一些冷门的坑,下面整理了20个比较有趣的建议重新学习了一遍。

2023-06-18 08:44:51 274

原创 【JAVA集合篇】CopyOnWriteArrayList详解

CopyOnWriteArrayList是ArrayList的线程安全版本,内部也是通过数组实现,每次对数组的修改都完全拷贝一份新的数组来修改,修改完了再替换掉老数组,这样保证了只阻塞写操作,不阻塞读操作,实现读写分离。CopyOnWriteArrayList使用重入锁加锁,保证线程安全;CopyOnWriteArrayList的写操作都要先拷贝一份新数组,在新数组中做修改,修改完了再用新数组替换老数组,所以空间复杂度是O(n),性能比较低下;

2023-06-17 15:29:47 1593

原创 【JAVA集合篇】LinkedList详解

LinkedList和ArrayList数据结构是完全不一样的,ArrayList 底层是数组的结构,而 LinkedList 的底层则是链表的结构, 它可以进行高效的插入和移除的操作,它基于的是一个双向链表的结构。

2023-06-17 10:27:08 746

原创 【JAVA集合篇】ArrayList源码详解

ArrayList是一种以数组实现的List,与数组相比,它具有动态扩展的能力,因此也可称之为动态数组。在ArrayList集合里面可以存储任何类型的数据, 而且它是一个顺序容器,存放的数据顺序就是和我们放入的顺序是一致的,而且它还允许我们放入null元素。

2023-06-16 11:07:54 517

原创 【JVM系列】java类加载机制详解

将二进制文件的静态存储结构转化为方法区的运行时数据结构,并利用二进制流文件创建一个Class对象,存储在 Java 堆中用于对方法区的数据结构引用的入口;而且此时类变量是赋值为零值,即 int 类型的零值为 0,引用类型零值为 null,而不是代码中显示赋值的数值。在准备阶段,类变量已经被赋过默认初始值,而在初始化阶段,类变量将被赋值为代码期望赋的值。第 6 行表示调用 Test02父类 Object 的无参构造,我们知道每个对象在实例化的时候都会默认先实例化其父类对象,并且默认调用父类的无参构造。

2023-06-16 08:25:20 317

原创 【JVM系列】内存分配与回收策略详解

当我们new一个对象实例时,首先是存入堆中新生代中的伊甸园区,如果伊甸园区空间满了,就会进行YGC,本篇文章就讲述一下对象的分配过程是如何的…什么时候进行GC呢?当伊甸园区满的时候才会进行GC,幸存区满的时候不会进行GC,只有当伊甸园区满的时候,幸存区才会被动进行GC。关于幸存者S0和S1区:复制之后有交换,谁空谁是To;对于垃圾回收:频繁在新生区进行回收,很少在老年区收集,几乎不在永久区/元空间收集。

2023-06-15 08:37:31 596

原创 【JVM系列】垃圾收集器介绍

初始标记仅仅只是标记一下GC Roots能直接关联到的对象,速度很快,并发标记阶段就是进行GC Roots Tracing的过程,而重新标记阶段则是为了修正并发标记期间,因用户程序继续运作而导致标记产生变动的那一部分对象的标记记录,这个阶段的停顿时间一般会比初始标记阶段稍长一些,但远比并发标记的时间短。Remark, 再标记,会有短暂停顿(STW)。由于整个过程中耗时最长的并发标记和并发清除过程中,收集器线程都可以与用户线程一起工作,所以总体上来说,CMS收集器的内存回收过程是与用户线程一起并发地执行。

2023-06-15 08:28:31 443

原创 【JVM系列】GC算法介绍

垃圾收集 Garbage Collection 通常被称为“GC”,它诞生于1960年 MIT 的 Lisp 语言,经过半个多世纪,目前已经十分成熟了。jvm 中,程序计数器、虚拟机栈、本地方法栈都是随线程而生随线程而灭,栈帧随着方法的进入和退出做入栈和出栈操作,实现了自动的内存清理,因此,我们的内存垃圾回收主要集中于 java 堆和方法区中,在程序运行期间,这部分内存的分配和使用都是动态的。

2023-06-14 14:37:40 718

原创 【JVM系列】jvm内存结构详解

我们为什么要学习JVM?面试的需要中高级程序员的必备技能(项目管理、调优的需要)极客精神( 比如:垃圾算法回收、JIT、底层原理)HotSpot历史最初由一加名为"Longview Technologies"的小公司设计。1997年,此公司被Sun收购;2009年,Sun公司被甲骨文收购。JDK1.3时,HotSpot VM称为默认虚拟机。目前HotSpot占有绝对的时长地位,称霸武林。不管是现在仍在广泛使用的JDK6,还是使用比例较多的JDK8中,默认的虚拟机都是HotSpot。

2023-06-14 08:30:03 662

原创 java设计模式之:外观模式

外观模式是一种使用频率非常高的结构型设计模式,它通过引入一个外观角色来简化客户端与子系统之间的交互,为复杂的子系统调用提供一个统一的入口,降低子系统与客户端的耦合度,且客户端调用非常方便。外观模式结构图:(1) Facade(外观角色):在客户端可以调用它的方法,在外观角色中可以知道相关的(一个或者多个)子系统的功能和责任;在正常情况下,它将所有从客户端发来的请求委派到相应的子系统去,传递给相应的子系统对象处理。

2023-06-13 22:15:35 900

空空如也

空空如也

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

TA关注的人

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