自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

她的坏机器人

你好,AI

  • 博客(138)
  • 资源 (1)
  • 收藏
  • 关注

原创 欧几里得算法

欧几里得算法又称辗转相除法,是指用于计算两个非负整数a,b的最大公约数。

2023-04-05 15:17:20 207 1

原创 MySQL查询表中指定条件下的最新记录

场景:一个运单,如果可以多次入库,就会有多条入库记录的日志需求:现在需要获取最新的那一条入库记录的日志1、在WHERE条件后面使用子查询的模式这样的话,这些条件就直接放在子查询中就可以,然后精确的返回指定的最新id,在外层令用id过滤出一条数据如果是id自增,就用MAX(id),如果不是id自增,那么就需要用MAX(create_time)之类的字段来取出一条最新的记录SELECT *FROM tms_waybill_log logWHERE log.id = ( SELECT M

2021-12-10 17:25:12 2869

原创 使用 GROUP_CONCAT 进行一对多查询,拼接结果(实例解析)

场景:一个订单,包含多个商品要求:查订单的时候,将这个订单包含的所有商品都查出来,放到goodsNames字段中,用逗号分割结果例如:goodsNames: “苹果, 香蕉, 螃蟹”子查询语句( SELECT GROUP_CONCAT( DISTINCT goods_name ORDER BY create_time SEPARATOR ',' ) FROM t_goods_detail WHERE order_id = order.id ) as goodsNames,解析:GROUP_C

2021-09-15 15:11:08 1799

原创 Cause: java.sql.SQLException: SQL String cannot be empty 解决方案

异常信息:Cause: java.sql.SQLException: SQL String cannot be empty产生原因:在批量进行SQL更新(或插入)时,有的时候会报错,有的时候不会报错异常分析:因为批量的参数一定是一个集合,那么当集合中有元素的时候,批量更新会成功当集合为空的时候,就会抛出这个异常解决方法:在进行批量更新的时候,先判断一下入参的集合是否为空如果集合不为空,则进行更新如果集合为空,则根据自己的需求进行处理...

2021-08-05 19:45:38 8194

原创 TCP报文段,关于确认号的相关问题解析

TCP报文段主机 A 向主机 B 连续发送了两个 TCP 报文段,其序号分别为 70 和 100。试问:(1) 第一个报文段携带了多少个字节的数据?(2) 主机 B 收到第一个报文段后发回的确认中的确认号应当是多少?(3) 如果主机 B 收到第二个报文段后发回的确认中的确认号是 180,试问 A 发送的第二个报文段中 的数据有多少字节?(4) 如果 A 发送的第一个报文段丢失了,但第二个报文段到达了 B。B 在第二个报文段到达后向 A 发送确认。试问这个确认号应为多少【答】第一个报文的数据序

2021-07-31 10:39:39 6026

原创 JavaScript中==和===的区别,以及在工作中使用localStorage进行比较时遇到的坑

== 和 === 的区别"=="会先将两个值转换成同一类型后进行比较"==="会直接先判断两个类型是否相同,如果类型不同,则直接不等实际问题localStorage中只支持string类型,存储其它类型的数据到localStorage中,也会变成string类型所以,在拿localStorage中数据与其它数据进行比较的时候,尽量使用双等(除非明确要比较的对象是string类型),如果使用三等号且要比较的数据不是string类型,即使两个值相等,也会被判定为不等。if (localStora

2021-07-28 15:18:30 115

原创 Spring中的Cron表达式(精简版)

Java中的Cron表达式[秒] [分] [时] [日] [月] [周] [年]一共7位,1为周日,2为周一…7为周六,年是非必填项*代表全部/代表每隔多少,例如0/2就是从第0秒开始, 每隔2秒执行一次-代表范围,例如1-2就是1号到2号,代表取多个值,例如1,2,3就是1号2号和3号1、每5分钟执行一次,(0/5表示从第0分钟开始,每5分钟执行一次)0 0/5 * * * ? 2、每天上午8点到10点,每5分钟统计一次,(?表示不关心是周几)0 0/5 8-10 * * ?

2021-07-27 09:38:21 400

原创 【Spring Cloud Alibaba】Nacos的安装、配置与使用

Nacos安装官网:https://nacos.io/zh-cn/docs/quick-start.html下载压缩包,解压nacos压缩包,并进入到bin目录下启动sh startup.sh -m standalonetail -f /root/nacos/nacos/logs/start.out需要JDK1.8的环境浏览器访问,默认用户名和密码为nacoshttp://192.168.229.129:8848/nacos/Java使用1、创建一个父工程,导入依赖<p

2021-07-15 20:22:05 217 1

原创 Elasticsearch的原理、安装、使用与封装好的Java工具类

Elasticsearch介绍Elasticsearch是一个使用Java语言并且基于Lucene编写的搜索引擎框架,它提供了分布式的全文搜索功能,还提供了统一的基于RESTful风格的web接口,客户端也提供了相应的API。倒排索引Elasticsearch将存储的数据以一定的方式进行分词,然后将分词的内容存放到一个分词库中,当用户查询数据的时候,会先将用户输入的关键字进行分词,然后去分词库中匹配内容,最终得到数据的标识,最后拿着这个标识,去存放数据的位置,找到指定的数据。Elasticsearc

2021-07-10 15:46:22 883 2

原创 使用命令和工具,对 Java GC 进行分析

使用 jstat 命令查看GC信息命令格式:jstat -gc <pid> [间隔] [数量]示例查看pid为21856的进程GC信息,每100毫秒打印一次,共打印10次pid可以使用 jps -l 命令查看当前Java进程的pid说明名称说明(单位:KB)S0CSurvivor区中的To区容量S1CSurvivor区中的From区容量S0USurvivor区中的To区目前已使用的空间S1USurvivor区中的From区目前已使

2021-07-09 15:46:36 168

原创 MultipartFile转为File的工具类

/** * MultipartFile转为File(没有删除临时文件,需要用完File之后在指定位置删除)。 * * @param multipartFile MultipartFile * @param path 临时文件路径 * @return File */public static File multipartFileToFile(MultipartFile multipartFile, String path) { File file = new File(path, "te

2021-05-08 12:04:13 238

原创 JDK1.8,新时间API,封装时间处理工具类

将指定时间格式化为LocalDateTimeLocalDateTime localDateTime = LocalDateTime.parse("2021-03-29 00:00:00", DateTimeFormatter.ofPattern(format));获取当前时间的LocalDateTimeLocalDateTime now = LocalDateTime.now();获取当前时间String now = LocalDateTime.now().format(DateTimeFor

2021-04-21 16:42:14 166

原创 Java封装CSV常用工具类

逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据。CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。通常,所有记录都有完全相同的字段序列。通常都是纯文本文件。建议使用WORDPAD或是记事本来开启,再则先另存新档后用EXCEL开启,也是方法之

2021-01-19 10:04:27 1244

原创 分布式锁的原理,使用Redis和Zookeeper实现分布式锁

传统的Synchronized以及Lock锁都是基于JVM的,由于在分布式系统中,会有多个Web容器同时运行,导致多个Web容器内部的传统锁已经不存在互斥性了Zookeeper实现分布式锁的原理Zookeeper是一种分布式协调服务,Zookeeper实现分布式锁的原理就是利用临时有序结点客户端在指定结点下创建临时有序结点如果当前临时有序结点的序号是最小的,则获取锁成功如果当前临时有序结点的序号不是最小的,则它监听比它小一号的结点当它监听的结点被修改或删除时,那么它自己就会重新判断自己是不是最

2020-12-12 11:22:59 262

原创 微服务架构中的四种登录实现方式以及原理解析

单点登录:就是指在多个服务中,用户只需要登录,一次就可以访问所有相互信任的服务,用户只需要退出登录一次,就可以退出所有的服务多端登录:当用户登录之后,如果再换一个设备进行登录的话,可以设计将原来的那个设备上的账号踢掉线,或者两个设备上的账号同时登录,一同操作同一个用户的数据、业务等信息实现方案一:JWT使用JWT的方式,将用户的信息存储到token中,用户只需要在登录服务器登录一次,就可以生成一个token,将用户的相关信息存储到token中,然后将token存储到cookie中,之后再去访问其它相互

2020-12-09 23:03:48 3985

原创 zookeeper的基本使用与常用配置

Zookeeper安装安装zookeeperversion: "3.1"services: zk: image: daocloud.io/daocloud/zookeeper:latest # 其实是3.4.6版本的Zookeeper container_name: zk ports: - 2181:2181进入到zookeeper容器内部,打开客户端docker exec -it zk bashcd bin./zkCli.shZookeep

2020-12-07 19:23:34 214

原创 RabbitMQ的介绍与使用,以及消息可靠性的解决方法

RabbitMQ介绍只有在分布式项目中,才需要用到RabbitMQ在分布式项目中,一个功能可能需要调用多个服务,而当其中一个服务宕机时,则可能导致整个功能都不可用,多个服务之间的调用,采用传统的同步方式去请求,请求时间会很长为了解决这些问题,就可以使用RabbitMQ,实现服务之间的异步调用,并且可以实现限流操作举个栗子:一个下订单的功能,需要调用创建订单的服务创建订单,然后调用商品服务修改商品销售的数量和库存等,再调用日志服务记录日志,等等,这样一系列的调用,如果其中某个服务执行的时间很长,

2020-11-27 20:32:44 404

原创 【SpringBoot】SpringBoot整合MyBatis,以及配置PageHelper分页插件

SpringBoot整合MyBatis首先创建一个SpringBoot工程1、导入依赖此处MySQL使用的版本是8.0.22,也是SpringBoot中默认版本如果是MySQL5.7,则在依赖上手动指明版本<version>5.7</version><dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artif

2020-11-18 09:23:16 526

原创 【SpringBoot】SpringBoot整合Redis(Lettuce)

Jedis和Lettuce的区别Lettuce 和 Jedis 的都是连接Redis Server的客户端Jedis是直接连接Redis Server,在多线程环境下是非线程安全的,只有使用连接池Lettuce是基于Netty实现,是线程安全的在SpringBoot 1.5.x版本默认的Redis客户端是Jedis实现的,SpringBoot 2.x版本默认客户端是用lettuce实现的以下步骤为SpringBoot整合Lettuce版的Redis1、导入依赖<dependency&

2020-11-17 14:56:23 4004 1

原创 【SpringMVC】上传多个文件,并响应JSON数据到前端

1、导入依赖<dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.8.0</version></dependency><dependency> <groupId>commons-fileupload</groupId&gt

2020-10-25 21:32:41 208 1

原创 【SpringMVC】搭建SpringMVC的环境,SpringMVC整合Spring

最终结果的整体项目结构先搭建SpringMVC的环境还是先搭建Spring的环境都是可以的SpringMVC属于Spring中的一个独立的模块,如果不配置Spring,只配置SpringMVC也是可以的搭建SpringMVC的环境1、创建一个Maven工程2、导入依赖手动添加<packaging>war</packaging>,将此项目变成一个web项目<?xml version="1.0" encoding="UTF-8"?><project

2020-10-14 10:46:10 134 1

原创 【Spring框架】事务的相关概念,以及在Spring中如何配置事务

ACID1、原子性(Atomicity):事务被作为一个整体执行,一个事务中的所有操作,要么都执行,要么都不执行2、一致性(Consistency):确保数据库的状态从一个一致状态转到另一个一致状态3、隔离性(Isolation):多个事务并发执行时,一个事务的执行不影响其它事务4、持久性(Durability):当一个事务提交之后,被提交的事务应当永久保存在数据库中,不可被回滚隔离级别InnoDB默认的隔离级别是REPEATABLE READ名称描述read-uncomm

2020-10-13 20:33:36 126

原创 【Spring框架】Spring整合MyBatis的步骤

整体项目结构如下1、导入依赖导入Spring及MyBatis的相关依赖<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.2.9.RELEASE</version></dependency><dependency&g

2020-10-09 19:59:42 146 1

原创 【Spring框架】AOP切面编程的理解与实现

AOP的概念AOP(Aspect Oriented Programming),即面向切面编程,利用一种称为"横切"的技术,剖开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其命名为"Aspect",即切面。所谓"切面",简单说就是那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块之间的耦合度,并有利于未来的可操作性和可维护性。AOP开发术语连接点(Joinpoint):连接点是程序类中客观存在的方法,可被Spring拦截并切入内容。

2020-10-08 17:55:16 176

原创 【Spring框架】Spring底层的两种代理模式:JDK动态代理与cglib动态代理的区别和实现

代理设计模式将核心功能与辅助功能(事务、日志、性能监控代码)分离,达到核心业务功能更纯粹、辅助业务功能可复用。Spring中的AOP代理,可以是JDK动态代理,也可以是CGLIB代理JDK动态代理JDK动态代理是通过java.lang.reflect.Proxy类来实现的,我们可以调用Proxy类的newProxyInstance()方法来创建代理对象1、创建Service层的接口和实现类,实现两个方法public interface UserService { int insertU

2020-09-30 08:38:37 522

原创 【Spring框架】bean的作用域与生命周期(XML配置与注解方式)

Bean的作用域singleton单例模式:使用此作用域时,Spring只会创建一个共享的bean实例,是Spring容器默认的作用域prototype多例模式:使用此作用域时,Spring会为每个bean的请求都创建一个实例singleton和prototype是Spring常用的两个作用域,可以通过scope来指定作用域<bean id="myFactory" class="com.robot.factory.MyFactory" scope="prototype"></b

2020-09-29 13:09:53 224

原创 【Spring框架】IOC控制反转与DI依赖注入,实例分析与测试

IOC控制反转什么是IOC?IOC(Inverse Of Controll),意为控制反转,也就是将创建对象的权限交给Spring工厂,让Spring工厂来创建对象,解决了具有依赖关系的组件之间的强耦合,使得项目形态更加稳健IOC容器Spring 提供了两种 IOC 容器,分别为 BeanFactory 和 ApplicationContextBeanFactoryBeanFactory 是基础类型的 IoC 容器,它由 org.springframework.beans.facytory.Be

2020-09-27 17:49:40 198

原创 Git的基本使用与常用命令,以及上传文件到GitHub仓库

1、Git环境配置查看配置git config -l查看全局配置git config --global --list所有的配置文件都保存在本地系统级配置文件:gitconfig 目录:Git\etc\gitconfig全局配置文件:.getcongig 目录:C:\Users\Administrator.getconfig配置全局配置文件:用户名和密码(必须配,可任意) git config --global user.name "robot" git config --glo

2020-09-24 21:52:08 133

原创 解决css不渲染页面问题:Resource interpreted as Stylesheet but transferred with MIME type text/html

使用Tomcat启动后,打开页面后加载css文件失败,在Network中可以看到请求成功了css文件,而且直接访问也可以访问到,但是页面就是没有css样式在Console中查看显示:Resource interpreted as Stylesheet but transferred with MIME type text/html(资源解释为样式表,但使用MIME类型text/html传输)说明是加载了CSS文件,但是是以html的格式加载出来的,所以没有渲染页面在Sources中查看源码,发现是引

2020-09-15 10:54:08 1488

原创 实例分析AJAX跨域的三种解决方案

AJAX跨域方案一:CORS当发送ajax请求时,服务器会返回一个响应头,相当于服务器指定了可以访问该接口的白名单,通常,只对于那些公开的非隐私的数据接口,才会使用CORS只需要在服务器端设置响应头部信息即可,*代表所有都可访问response.setHeader("Access-Control-Allow-Origin", "*");AJAX跨域方案二:jsonpjsonp是json的一种使用模式,可以让网页从别的域名那里获取数据// 当输入框中内容改变时,会触发事件$("#searchI

2020-09-13 14:08:11 665

原创 AJAX与JSON的基本使用,以及两个小案例:传输JSON数据,实现页面的局部刷新

AJAXAJAX概述AJAX:Asynchronous JavaScript and XML无需重新加载整个页面的情况下,能够更新部分网页的技术AJAX使用步骤1、创建XMLHttpRequest对象var xhr = new XMLHttpRequest();2、打开连接可以设置get或post两种请求方式url为服务器地址async:是否异步,默认是异步truexhr.open("get", "${pageContext.request.contextPath}/ajax

2020-09-10 19:20:02 850

原创 JavaScript的基本使用,使用一个小案例快速入门JavaScript

JavaScript常用语法声明变量var a = 10;var b = "hello";var c = true;var array = [1, 2, 3];var student = {id:1, name:"张三", age=21};变量符var a = true;var b = false;a === b // 判断两个变量的值和类型是否相等a == b // 判断两个变量的值是否相等a && b // 逻辑与a || b // 逻辑或a ! // 逻辑

2020-09-08 20:30:08 235

原创 Servlet+JSP 实现文件的上传与下载功能(限制条件与散列存储)

实现:JavaEE实现浏览器上传文件到服务器端,下载文件到客户端文件上传文件上传的步骤创建文件上传表单编写服务器程序接收文件注意:文件上传表单提交方式:post表单提交类型:multipart/form-data代码演示先创建一个前端页面的form表单:upload.jsp<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head> &lt

2020-09-06 13:07:03 405

原创 Servlet+JSP 实现分页查询的功能

创建一个存储分页信息的工具类package com.robot.utils;import java.util.List;/** * 存储页面的相关信息。 * * @author 张宝旭 */public class PageBean<T> { /** * 当前页面 */ private int curPage; /** * 每页大小 */ private int pageSize; /**

2020-09-05 09:12:59 708

原创 JavaWeb使用Token令牌,解决表单重复提交问题

一个小例子,模拟银行转账,在转账的页面,点击转账,就可以向对方账户进行转账但是转账成功之后,如果刷新页面,就会弹出一条提示,如果点击继续,就会重复提交,再转账一次,不断刷新,也就会不断转账,那么如何解决表单重复提交的问题呢?可以使用一个标志,在服务器端存储一个标志(令牌),然后在客户端也存储一个,通过匹配两个令牌,来判断是否可以转账在第一次请求转账页面的时候会创建令牌,然后在转账后(无论成功与否)删除服务器端的令牌,这样下次刷新后再请求转账,就会出现令牌不匹配的情况,也就无法再次转账了,这样就解决

2020-09-04 21:33:22 526

原创 JavaWeb实现登录验证码功能

先在Web目录下的lib目录中导入jar包:ValidateCode.jar然后创建一个Servlet类来创建验证码:ValidateCodeServlet.java创建验证码将验证码存储到session中,用于在浏览器中输入时进行对比将验证码以图片的形式发给浏览器,这样页面中的图片路径就可以直接加载这个验证码了package com.robot.servlet;import cn.dsna.util.images.ValidateCode;import javax.servlet.S

2020-09-03 08:25:13 5111 19

原创 JSP相关技术的使用与分析

JSP概述JSP:简化Servlet设计,在HTML标签中嵌入Java代码,用来高效开发Web应用的动态网页JSP文件在容器中会转换成Servlet执行,JSP是对Servlet的一种高级封装,本质还是ServletTomcat会将JSP文件转换成Java代码,进而编译成.class文件运行,最终将执行结果通过response响应给客户端JSP的使用创建JSP在web目录下,新建hello.jsp文件普通脚本直接在HTML代码中嵌入Java语句<% out.p

2020-09-02 21:49:16 280

原创 Servlet相关技术的使用与分析

Servlet概述Servlet是Server Applet的简称,是服务器端的程序可交互式的处理客户端发送到服务器端的请求,并完成响应操作动态网页技术JavaWeb程序开发的基础,JavaEE规范的一个组成部分作用接收客户端请求,完成操作动态生成网页将包含操作结果的动态网页响应给客户端开发步骤将Servlet相关jar包配置到classpath中部署将生成的.class文件放在WEB-INF/classes文件中配置编写项目配置文件web.xmlHTTP协

2020-09-01 21:16:09 195

原创 Tomcat服务器的基本配置与使用

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta项目中的一个核心项目免费开源、并支持Servlet和JSP规范。目前Tomcat最新版本为10.0。Tomcat目录结构文件夹说明备注bin可执行脚本startup.bat启动,shutdown停止conf配置文件server.xml配置整个服务器的信息,web.xml项目部署描述符文件lib存放Tomcat运行时所需的jar文件logs存

2020-08-28 08:27:59 395

原创 使用Apache提供的Commons-DbUtils来简化JDBC的封装

Commons DbUtils是Apache组织提供的一个对JDBC进行简单封装的开源工具类库,使用它能够简化JDBC应用程序的开发,同时也不会影响程序的性能作用小巧、简单、实用对数据表的查询操作,可以把结果转换为List、Array、Set等集合对数据表的DML操作,只需要写SQL语句核心内容DbUtils类:启动类ResultSetHandler接口:转换类型接口QueryRunner类:执行SQL语句的类使用需要导入两个包先创建配置文件druid.properties

2020-08-27 21:19:01 278

JDBC全套jar包.zip

mysql-connector-java-8.0.20.jar mysql-connector-java-5.1.49.jar druid-1.1.5.jar commons-dbutils-1.7.jar commons-logging-1.2.jar

2020-08-27

空空如也

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

TA关注的人

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