自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 容器化部署技术Docker

在生产环境中,Docker 容器可以实现应用程序的快速部署和升级,并且可以保证应用程序的稳定性和可靠性。Docker 是一种容器化技术,可以在同一个操作系统中运行多个独立的容器,每个容器都包含一个应用程序及其所需的所有依赖项。Docker 的基本概念包括镜像、容器、仓库和服务。镜像是打包应用程序及其所有依赖项的静态文件,容器是运行镜像的实例,仓库是存储和分享镜像的地方,服务是由多个容器组成的应用程序。隔离性:Docker 容器之间是相互隔离的,一个容器的问题不会影响其他容器,使应用程序更加稳定和可靠。

2023-12-05 10:10:31 183 1

原创 代码管理工具Git

仓库 (Repository): Git是基于仓库的,每个项目都有一个Git仓库,其中包含了所有的版本历史以及代码。Git仓库可以是本地的,也可以是远程的。分支 (Branches): 分支是Git的核心概念之一,每个分支都是一个相互独立的代码版本。提交 (Commit): 提交是指向仓库中添加代码变更的操作,每个提交都有一个唯一的哈希值,可以通过哈希值查看该提交的详细信息。合并 (Merge): 合并是指将两个或多个分支合并成一个新的分支,这个操作可以将一个分支上的代码变更应用到另一个分支上。

2023-12-05 10:09:00 246

原创 数大雁(暴力解法)

1.大雅发出的完整叫声为”quack“,因为有多只大雁同一时间嘎嘎作响,所以字符串中可能会混合多个”quack”* 一群大雁往南飞,给定一个字符串记录地面上的游客听到的大雁叫声,请给出叫声最少由几只大雁发出。* 3.如果字符串不是由'q,u',a',c,k字符组合而成,或者没有找到一只大雁,请返回-1.* 2.大雁会依次完整发出”quack”,即字符串中'q,u,a,c,k这5个字母按顺序完整存。* 在才能计数为一只大雁如果不完整或者没有按顺序则不予计数。

2023-08-09 09:59:47 545

原创 客户机操作系统已禁用 CPU。请关闭或重置虚拟机。解决方法

今天在用VMware安装CentOS7报了这个错误,在网上找半天都没解决,最后换一个地址下的镜像就能正常安装了。

2023-06-28 17:12:54 1555

原创 Spring Boot中自定义注解

Retention(RetentionPolicy.RUNTIME)表示这个注解在运行时仍然可用,@Documented表示这个注解将被包含在JavaDoc中,@Target(ElementType.METHOD)表示这个注解只能应用在方法上。首先,我们需要定义一个注解,可以通过Java中的@Target、@Retention和@Documented注解来定义注解。上面的代码表示获取MyClass类中的myMethod方法,并且获取这个方法上的@MyAnnotation注解,然后获取注解中传入的参数值。

2023-05-10 17:49:06 671

原创 Redis持久化策略RDB&AOF

Redis是一款高性能的内存数据库,它的数据存储在内存中,因此具有快速读写的特点。但是,由于内存的易失性,如果Redis发生宕机或者重启,内存中的数据将会丢失。为了解决这个问题,Redis提供了持久化功能,将内存中的数据保存到磁盘中,以便在Redis重启后恢复数据。AOF持久化是将Redis的写操作记录保存到磁盘中,以便在Redis重启后重新执行这些写操作来恢复数据。AOF持久化的优点是数据持久性更好,可以避免丢失数据。RDB持久化和AOF持久化各有优缺点,可以根据实际情况选择适合的持久化方式。

2023-04-27 08:45:28 351

原创 Java开发中请求第三方接口并解析返回的数据

在Java实际开发中,我们经常需要访问第三方平台的接口,例如支付接口、短信接口、地图接口等,并解析返回的数据。

2023-04-16 20:00:23 2850

原创 Nacos使用教程

其中,Nacos是一个新兴的服务发现和配置管理组件,可以帮助开发人员轻松地管理微服务的注册、发现和配置。然后启动应用程序,应用程序将自动注册到Nacos服务器,并可以通过Nacos的管理界面进行查看和管理。它提供了一系列的功能和特性,包括服务注册、服务发现、配置管理、动态路由、流量管理等,可以帮助开发人员轻松地构建和管理微服务应用程序。在Spring Cloud中使用Nacos非常简单,只需要在pom.xml文件中添加相应的依赖,然后在配置文件中配置Nacos的服务地址和应用程序的配置信息即可。

2023-04-14 16:27:20 2860

原创 Redis实现分布式锁及其应用场景

Redis实现分布式锁的原理是通过在Redis中创建一个key-value对,其中key为锁的名称,value为锁的值。当一个进程或线程需要获取锁时,它会向Redis发送一个SETNX命令,如果该命令返回1,则表示获取锁成功,否则获取锁失败。当一个用户下单时,它会尝试获取库存锁,如果获取成功,则可以继续下单,否则需要等待其他用户完成下单后再尝试获取锁。当一个任务开始执行时,它会尝试获取任务锁,如果获取成功,则可以执行任务,否则跳过任务。当任务执行完成后,会释放锁,其他任务就可以获取锁并执行。

2023-04-13 15:49:18 2800

原创 System.out.println()影响系统运行效率!!!

当程序中存在大量的System.out.println()语句时,代码会变得冗长而难以维护,同时也会降低代码的可读性。首先,System.out.println()的输出操作需要占用CPU和内存资源,因为它会将数据写入缓存区中,然后再输出到控制台。在Java开发中,System.out.println()是一种常用的输出方式,可以将字符串输出到控制台。System.out.println()虽然是一种方便的输出方式,但在实际开发中需要注意其对系统运行效率的影响,合理使用输出语句,避免程序运行效率降低。

2023-04-12 09:36:56 3237

原创 微信常见错误码及解决方案

这个错误代码和第一个错误代码类似,表示您的访问令牌已过期或者不正确,需要重新获取。openid是微信公众号中用户的唯一标识符,如果您输入的openid有误,则会出现这个错误。微信公众平台对接口调用次数有一定限制,如果您的应用程序超过了限制,就会出现这个错误。这个错误代码表示用户设置了消息免打扰或者拒收某些类型的消息,导致无法发送或接收消息。49003:用户未授权该api。在使用某些API时,需要用户进行授权,如果用户未授权,就会出现这个错误。如果您的应用程序没有授权相应的API功能,则会出现这个错误。

2023-04-06 10:28:04 6864

原创 微信模板消息的发送

1. 配置微信公众号信息 在项目中添加微信公众号的信息,包括APPID和APPSECRET等。2. 获取access_token 向微信服务器发送HTTP请求,获取access_token,access_token是调用微信接口的凭证。以上就是在项目中实现微信模板消息发送的基本流程,具体的实现方式可能会因为开发场景的不同而有所不同,但大部分的步骤都是类似的。3. 定义模板消息 定义需要发送的模板消息,包括模板ID、接收者、模板数据等。4. 发送模板消息 调用微信接口,发送模板消息给指定的用户。

2023-04-03 19:47:49 808

原创 MYSQL中的事务

简单来说,MySQL事务就是一组数据库操作语句的执行序列,这些语句要么全部执行成功,要么全部回滚执行前的状态,保证数据的一致性和完整性。比如,在一个人员管理系统中,你删除一个人员,你既需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务。

2023-04-02 20:13:28 317

原创 SA-Token实现登录功能

SA-Token 是一款基于 Java 的轻量级权限认证框架,它提供了一种简单易用、高效可靠的权限认证方案,能够帮助我们快速实现登录功能。

2023-03-25 23:14:03 1312

原创 Java开发中实现excel的导入和导出

在实际开发中,经常需要对Excel文件进行导入导出操作。

2023-03-24 16:43:01 444

原创 spring AOP的使用方法

Spring AOP是一个基于Java的AOP框架,它是Spring框架的一部分。Spring AOP支持的通知类型包括前置通知、后置通知、环绕通知、引发异常通知和最终通知。可以使用Spring AOP来定义切面、切入点和通知,并配置Spring AOP,在执行前和执行后输出一些消息。在上面的例子中,我们定义了一个LoggingAspect类,它包含了两个通知方法:logBefore()和logAfter()。现在我们已经定义了一个切面类,并且配置了Spring AOP,我们可以测试它是否工作。

2023-03-23 15:46:34 1612 1

原创 springboot整合websocket教程

在上面的代码中,我们实现了TextWebSocketHandler类,并覆盖了afterConnectionEstablished()、handleTextMessage()和afterConnectionClosed()方法。在上面的代码中,我们创建了一个WebSocket对象并使用onopen、onmessage和onclose事件处理程序来处理WebSocket连接的不同状态。在本教程中,我们在Spring Boot应用程序中使用Websocket,创建了一个简单的聊天应用程序。

2023-03-22 14:18:18 1595

原创 开发中RO,VO,DO,DTO,PO, BO, TO, CO, AO, SO的区别

随着软件开发的不断发展,越来越多的概念被引入到开发中,其中就包括了RO、VO、DO、DTO、PO、BO、TO、CO、AO、SO等概念,这些概念都是为了更好地组织代码、提高代码的可读性和可维护性而设计的。综上所述,RO、VO、DO、DTO、PO、BO、TO、CO、AO、SO等概念都是为了更好地组织代码、提高代码的可读性和可维护性而设计的,开发者可以根据具体的业务需求选择合适的对象来进行开发。VO(Value Object):值对象,表示一个值的数据类型,通常用于表示业务逻辑中的值,如日期、金额等。

2023-03-21 11:23:53 5166

原创 String工具类的常用方法

字符串比较:equals()、equalsIgnoreCase()、compareTo()、compareToIgnoreCase()等方法,用于比较两个字符串是否相等。除了以上常用的方法外,String工具类还提供了许多其他有用的方法,如trim()方法用于去除字符串两端的空格,concat()方法用于将两个字符串连接起来等等。字符串查找:indexOf()、lastIndexOf()、startsWith()、endsWith()等方法,用于查找字符串中的子串。

2023-03-20 17:23:56 568

原创 Stream流式编程

Stream流式编程的核心思想是将数据处理的过程分解成一系列的操作,每个操作都可以独立地进行处理,从而实现高效的数据处理。在上面的代码中,我们首先将一个整数列表转换成一个Stream流,然后对流进行过滤,只保留偶数,接着将每个偶数乘以2,最后求和。而在Stream流式编程中,数据被视为一系列的流,每个流都可以进行一系列的操作,例如过滤、映射、排序等。总而言之,Stream流式编程是一种非常优秀的编程方式,它可以使代码更加简洁、易读、易维护,并且可以提高代码的效率。

2023-03-16 17:16:37 404

原创 mybatis二级缓存

其中 PerpetualCache 是默认的缓存实现方式,它是一个永久缓存,即一旦缓存了数据,就会一直保存在内存中,直到应用程序关闭。它的作用是缓存 Mapper 执行的结果,避免频繁地访问数据库,提高系统的性能。MyBatis 的二级缓存是一种优秀的缓存机制,它可以提高系统的性能,减少对数据库的访问次数。但是,在使用二级缓存时需要注意缓存的生命周期、缓存的大小、缓存的更新等问题,以保证缓存的正确性和有效性。对于查询结果中的关联数据,如果缓存的是对象,则需要将关联对象也进行缓存,否则会导致关联查询失效。

2023-03-06 14:58:50 1093

原创 mybatis动态SQL

这个例子中,我们使用#{name}占位符来表示查询条件中的用户名,然后在运行时将其替换为一个问号,并将对应的值保存在PreparedStatement中。MyBatis动态SQL是一种非常强大的技术,它可以让我们在运行时动态地生成SQL语句,从而满足不同的查询需求。这个例子中,我们使用${name}占位符来表示查询条件中的用户名,然后在运行时将其替换为具体的值。总之,MyBatis动态SQL是一种非常强大的技术,可以帮助我们在运行时动态地生成SQL语句,从而满足不同的查询需求。

2023-03-06 09:46:28 912

原创 Linux防火墙操作命令

关闭指定端口(firewall-cmd --zone=public --remove-port=8080/tcp --permanent)开放指定端口(firewall-cmd --zone=public --add-port=8080/tcp --permanent)查看防火墙状态(systemctl status firewalld、 firewall-cmd --state)查看开放的端口(firewall-cmd --zone=public --list-ports)

2023-02-24 18:00:00 306

原创 二分查找思想以及实现代码

想要运用二分查找首先得保证所需查找的数组是有序的,二分查找是折半查找,首先确定出所需查找数组的头尾下标min,max,根据下表算出中位数下标mid,将所查找的目标值与中位数进行比较,若中位数小于目标值,则将头下标变为mid+1,若中位数大于目标值,则尾下标变为mid-1,然后进入下一轮循环,计算出新的中位数下标mid,直至找到target。

2023-02-24 11:51:13 349

原创 Docker常用命令

v /mydata/mysql/data:/var/lib/mysql -------->将数据文件夹挂载到主机。-v /mydata/mysql/log:/var/log/mysql -------->将日志文件夹挂载到主机。-v /mydata/mysql/conf:/etc/mysql -------->将配置文件夹挂载到主机。-d mysql:5.7-------->以后台方式运行。--name mysql -------->给容器起名。Docker restart 应用名。

2023-02-24 01:30:00 184

原创 快速排序实现思路以及代码

3、在走的过程中,如果end遇到小于key的数,则停下,begin开始走,直到begin遇到一个大于key的数时,将begin和right的内容交换,end再次开始走,如此进行下去,直到begin和end最终相遇,此时将相遇点的内容与key交换即可。(需要注意的是:若选择最左边的数据作为key,则需要end先走;5.将key左边部分和右边部分再次进行这种单趟排序,如此反复操作下去,begin大于end时,便停止操作。4.此时key的左边都是小于key的数,key的右边都是大于key的数。

2023-02-23 21:02:28 81

原创 Java集合框架

Java集合是由Collection和Map两个顶级父接口派生出来的。List代表了有序可重复集合,可直接根据元素的索引来访问。Set代表无序不可重复集合,只能根据元素本身来访问。因此Java集合大致也可分成。Queue是队列集合。

2023-02-18 20:21:04 79

原创 SpringMVC怎么样处理一个请求

执行方法前,会解析方法的各个参数,比如一个参数的前面如果加了@RequestParam注解,那就从请求的parameters中取出对应的值传给方法,从而执行方法,得到方法的返回值,然后解析返回值,看有没有加@ResponseBody注解,如果加了直接把方法返回值返回给浏览器,如果没有加则根据方法返回值找到页面并进行渲染后返回给浏览器。

2023-02-18 14:49:36 58

原创 BIO&NIO模型

在JDK1.4出来之前,建立网络连接的时候采用BIO模式,也就是阻塞式连接,需要先在服务端启动一个ServerSocket,然后在客户端启动Socket来和服务端进行通信,默认情况下服务端需要等待请求,而客户端发送请求,建立连接后,服务端也需要等待客户端发送数据,完成通信。也就是说,这个时候,已经不是一个连接就要对应一个处理线程了,而是有效的请求,对应一个线程,当连接没有数据时,是没有工作线程来处理的。NIO也就是非阻塞式连接,它的出现解决了客户端需要等待客户端连接,占用CPU的弊端。

2023-02-17 19:14:58 142

原创 AQS如何实现可重入锁?

--在AQS中,维护了一个信号量state和一个线程组成的双向链表队列。其中,这个线程队列就是用来给线程排队的,而state就像是一个红绿灯,用来控制线程排队或者放行的。在不同的场景下,有不同的意义。在可重入锁这个场景下,state就用来表示加锁的次数。0标识无锁,每加一次锁state就加一,释放锁state就减一。---AQS是Java的一个线程同步的框架,是JDK中很多锁工具的核心实现框架。

2023-02-16 16:27:33 266

原创 JAVA线程锁机制是怎样的?偏向锁、轻量级锁、重量级锁有什么区别?锁机制是如何升级的?三、线程锁机制是怎样的?偏向锁、轻量级锁、重量级锁有什么区别?锁机制是如何升级的?

1.Java的锁就是在对象的Markword中记录一个锁状态,无锁、偏向锁、轻量级锁、重量级锁对应不同的锁的状态。2.偏向锁、轻量级锁都是由JVM进行管理的,重量级锁是由操作系统进行管理的。3.Java的锁机制就是根据资源竞争的激烈程度不断进行锁升级的过程。

2023-02-16 15:44:24 122

原创 Volatile和Synchronized有什么区别?Volatile能不能保证线程安全?DCL(Double Check Lock)单例为什么要加Volatile?

指令重排就是原本我们new对象时按照1->2->3的顺序进行的,在进行编译时顺序就可能变成1->3->2,这种情况下在单线程模式下一般不会出现问题,但在多线程情况下可能在进行完1->3时另一个线程出现使用这个还未初始化的对象,这样就会出现线程安全问题。1.Synchronized关键字是用来加锁的,Volatile只是保持变量的线程可见性,通常适用于一个线程写,多个线程读的场景。2.Volatile关键字不能保证线程安全,因为volatile只能保证线程的可见性,不能保证原子性。3.建立指针对应关系。

2023-02-16 14:42:31 231

原创 Java如何开启线程?怎么保证线程安全?

线程和进程的区别:进程是操作系统进行资源分配的最小单元,线程是操作系统进行任务分配的最小单元,线程隶属于进程。3.实现Callable接口,实现call方法,通过FutureTask创建一个线程,获取到线程的返回值。1.使用JVM提供的锁,也就是Synchronized关键字。2.实现Runnable接口,实现run方法。1.继承Thread类,重写run方法。2.JDK提供的各种锁Lock。4.通过线程池来开启线程。那么如何开启线程呢?

2023-02-16 14:07:21 266

原创 select * 效率低的原因

索引并不是越多越好的,表格中数据量较小,列不经常被利用当作条件,列经常用(频繁的修改)的时候不建议创建索引,索引本身是有空间和存储消耗的。首先这是一条SQL查询语句,sql语句都是从客户端发给服务端的,select * 就会引发一些问题。2.增加了IO读写的消耗,包括了不用的数据,甚至是大文本数据,用*作为条件会查询出大量不需要的数据。5.如果使用*会屏蔽索引的使用,借助不到索引,性能自然也就会慢。1.解析sql性能慢,增加的服务器解析sql的成本。辅助索引:存储的是列信息-----引用。

2023-02-16 13:48:35 780

空空如也

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

TA关注的人

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