自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(48)
  • 问答 (2)
  • 收藏
  • 关注

原创 个人对于秒杀超卖的理解记录

这样一看其实没有问题,但是问题的关键在于,这个可是秒杀,意味着有着大量的并发流量!这段代码是有着线程安全的问题的!一旦线程安全被打破,很容易出现超卖。

2025-07-27 15:15:28 337

原创 报错 :Get “https://registry-1.docker.io/v2/“: net/http: request canceled while waiting for connection

【代码】报错 :Get “https://registry-1.docker.io/v2/“: net/http: request canceled while waiting for connection。

2024-10-08 23:14:36 1541 2

原创 ScrapeGraphAl AI爬虫

代码参考的官网示例,比较好用,不过3.5经常会因为文章超长而报错,即使我提示词中写明了超过14000则总结也经常出错,因此用4o是个不错的选择,牺牲小部分速度,换来高准度。

2024-09-27 15:28:12 1175

原创 批量发送邮件解决方案

然后写定时任务(其实也就是刚刚创建一个新的 Artisan 命令类,laravel定时器我是通过这个命令类+crontab结合实现的)我两种方式都采用了得,不过我得场景用数据库表更为恰当舒适,我就仅贴数据库表+定时器得实现代码了。那就是新开一个线程异步得一直发送,主线程则直接返回一个结果给用户即可(描述不精准勿怪)还有一种我没有尝试,不过我个人感觉可能不太好,如果有大佬希望可以指点一二。首先批量发邮件肯定不能是循环得让用户等待发送完毕。我有两种实现,其实说白了本质都是一样得。我是用laravel实现的。

2024-08-30 18:35:33 729 1

原创 苹果登录和谷歌登录

直接贴代码,其实就只是需要封装两个工具类,直接用就没问题了。直接拿着用就没问题了。

2024-08-30 17:53:25 564

原创 通过ip获取用户位置信息以及地区时间

项目需要获取用户得位置信息以及地区时间,因为第一次搞,以防还有下次,特此记录原理:客户端想要跟服务端交互,必然经历三次握手,因此必然会告诉服务端自己得ip。再从服务端说起,如果服务器直接把IP暴漏出去,那么request.getRemoteAddr()就能拿到客户端ip。但目前流行的架构中,基本上服务器都不会直接把自己的ip暴漏出去,一般前面还有一层或多层反向代理,常见的nginx居多。

2024-07-04 20:51:21 1669

原创 mybatis多数据源操作

com.exam.mapper.aiexam包下的mapper都采用得AIExamDataSourceConfig 这个配置,com.exam.mapper.exam则采用的ExamDataSourceConfig。最近项目,一个后端代码被两个前端页面调用,代码数据库都冗余了,写着很难受感觉跟吃狗屎一样。我把第二个配置,也就是exam当作了默认配置源,因此需要在配置类上面每个方法中都需要加入。想把数据库分开其实就只是需要实现多数据源操作,我考虑得不多,因此实现起来也比较简单。配置写好后就开始写配置。

2024-07-02 11:37:34 378

原创 数据库字段不区分大小写

如果你的数据库也是这个排序规则,那么就没法区分大小写。常用的是这样的建表语句。它的collate已经声明为ci(不区分大小写)这个时候你Cao和cao当作条件去查询其实作用是一样的,查出来的东西一模一样。想要区分也很简单,只是需要更改你想要区分大小写字段的排序规则就好。更改之后我的users表中的username就可以区分大小写了!

2024-06-26 14:47:22 509

原创 springboot整合chatgpt,并且让其可以记录上下文

整合很简单,不过需要几个小条件1.必须要有openai官方的key2.国内需要有代理服务器或者国外的服务器把项目部署出去也没问题我没有使用spring的springAI,听说很方便,日后有机会去体验体验,我今天用了两种方式整合了gpt1.这个巨巨巨方便,整合gpt,可以跟着官网的快速入门走,一下就解决了先导入maven依赖然后我直接写接口xxxxxxxxxxxxxxx自己替换成自己的key哈。结束,到这里就可以直接使用gpt了,自己去postman测试一下就行。2.直接给官网api发请求。

2024-05-22 21:17:28 1297

原创 Certbot免费证书的安装,使用,自动续期

但是下载可能还是会出毛病,没法下载epel-release,可以自己去官网下,然后放到linux进行安装。可以走到3就结束,1如果wget没法就直接访问后面的官网,去下载rpm文件,上传到linux中也行。首先你得先确认你得linux是那个操作系统,可以用这几个命令试一下。两个弄证书的方式有一丢丢小区别,自己都看一下。把这个1改成0就可以关闭了。然后跟着这两走就没什么问题了。

2024-05-09 15:23:29 1053

原创 springboot整合s3,用ImageIO进行图片格式转换

这一句根据你不同得web容器可能会有不一样得效果,一般是tomcat没什么大毛病,但是我这次用的undertow ,就有一点小坑。原因是ImageIO.wite方法在中调用的私有方法getWriter寻找合适的ImageWriter时不仅与formatName相关,还是输入的原图有关,造成getWriter方法找不到对应的ImageWriter。但是我想要改装一下,把图片格式都变成jpg,我使用的是java得imageIO类来处理。上次用laravel进行了一些s3得整合,可以看出来其实蛮简单得。

2024-05-09 14:57:13 994

原创 springboot发送邮件

指定发件人得时候,可以给发件人改成自己想要的字符串,类似于,将xxx替换成自己想要的字符串。这里不指定properties.mail.smtp.port的话在windons下面可以直接发送,但是到我linux上面就没法了,我猜测不写的话可能就会默认到25号端口,但是我linux又没法连上25号端口,只能 连上587,因此我手动指定。很久之前就想写一个总结的,一直没写,今天刚好又碰见了发送邮箱验证码的需求,刚好记录一波。大家可以自己测试一下,否则java是抓异常得一直等到超时才会抓到,很浪费时间!

2024-04-12 16:48:19 378

原创 博客评论回复03

其中ancestorId和case语句里面的toid对应的参数16,其实就是对应的顶层id。至于为什么要把toId等于顶层id的username和avatar变成null,是因为如果回复的顶层id就不需要显示成回复谁的形式,直接放null前端方便些。接着之前写的,之前返回的数据集按道理来说渲染出来还是丑丑的,因此这次我看着抖音的评论样子,自己瞎写了一通,不过也算是模仿出来了虽然肯定没有抖音写的好。第一个,根据作品id,查询出某个作品对应的最顶层评论以及评论的数量。因此其实就对应了两个sql的查询。

2024-04-07 11:03:39 308

原创 springboot通过threadLocal+参数解析器实现保存当前用户登录信息

首先先介绍一下threadLocal。

2024-03-29 16:38:57 2281

原创 springboot实现文件上传

我本地运行出来确实是我项目的根目录,但是上到服务器,打出来的就是/,也就是linux的根目录,因此我决定以"/home/ec2-user/www/wwwroot/online_exam" 这种定值的方式取代System.getProperty("user.dir"),否则我的fileStorage目录就会建立在/这个目录下面,然后根据url访问就失效了。第三点是我添加了一个附件表,防止重复照片的存入消耗内存,毕竟不是存在三方文件系统上,自己买的系统还是省着点,而且还可以提升一丢丢的效率。

2024-03-22 15:49:23 4556

原创 npm i 报错 npm ERR! code CERT_HAS_EXPIRED npm ERR! errno CERT_HAS_EXPIRED

npm淘宝的镜像https过期了,取消掉严格https验证就行。

2024-01-31 09:34:57 547 1

原创 请求时设置了Header请求和token可是后台接收不到,然后一直报跨域错误

最近项目出了一个疑难杂症,恶心死我。请求方法为 GET、POST、HEAD,请求头header中无自定义的请求头信息,请求类型Content-Type 为 text/plain、multipart/form-data、application/x-www-form-urlencoded 的请求都是简单请求。浏览器根据这些请求方法和请求类型将请求划分为简单请求和非简单请求。请求方法为 PUT、DELETE 的 AJAX 请求、发送 JSON 格式的 AJAX 请求、带自定义头的 AJAX 请求都是非简单请求。

2024-01-29 11:44:33 2480

原创 博客评论回复02

至于为什么vo不返回Long而是String,是因为我JPA的BaseEntity的id生成器,生成的id超过Long的范围了,如果直接Long返回出去会发生精度缺失被迫只能返回String了。当然,这种方法需要前端配合你才可以做到,在查询的时候传入顶层的父评论id,然后存入数据库才可以。上次那个递归评论始终不如前端的愿,只能另寻他路,于是想到了一个比较低端的做法,任然还是记录一下。其中findFather和findson。传入的dto对象就类似于这种。然后就是返给前端的vo。最后就是贴出数据格式。

2024-01-26 12:24:35 476 1

原创 博客评论回复01

然后代码我只给一个service的代码,因为其实controller也就单纯调用了service中的getAllComments方法,看明白service中的方法就没啥大毛病了。考虑到回复都是递归进行的,因此我们有必要给java entity类创建一个自定义字段children。代码是gitee上面一位大佬的示例项目,感兴趣可以拉下来研究研究。今天看node项目,发现短视频应用居然没有评论回复功能?我就自己去了解了一下,不过实现方式用的java。最后,希望大家可以根据代码写出自己的业务逻辑。

2023-12-13 17:36:36 439

原创 使用nvm中遇到的各种奇葩问题

其次安装好了,我们会下载对应的node版本,这个nvm会自带帮我们下载好对于的npm版本,但是这里需要注意,他下载的很可能不是匹配的版本,比如我下的18.8.0,他给我下的npm版本是8.几来着,我搞忘了。1.其中需要注意的是node_global和node_cache包的位置一定不要搞错了,需要在你自己的nodejs目录下面,配置环境变量也是需要在其下面!4.其中,NVM有关的目录一般是装好nvm就自己配置好了,主要是关于node的一些设置需要没问题!npm需要设置淘宝源,之后下东西就会快很多。

2023-12-07 10:00:05 523 1

原创 Maven

- 定义属性值 -->-- 引用属性值 -->如果properties在父工程中定义,那么在子工程可直接引用-- 引用属性值 -->

2023-11-26 17:10:18 878

原创 php始终无法接收到axios的数据

axios 可以设置默认配置,可以设置每次请求之前对数据进行处理,字段是 axios.defaults.transformRequest 接收的是数组。因为 axios 发送数据时不是以 formData 的形式发送的,而 php 接收的是以 formData 形式的数据。用php+vue做项目的时候,发现了一个问题,就是我vue表单数据,没法传给php后端。这里我们用到一个工具 qs 只需要 qs.stringfy(data) 即可。你可以在每次请求时都手动 stringfy 一次,但是这样麻烦。

2023-11-15 16:18:40 466

原创 动态sql

最近,使用若依框架进行开发的时候,发现若依使用了大量的动态sql,我自己又习惯用mybatis-plus,导致我动态sql基本上全都忘却了,借此机会复习巩固一下动态 SQL 是 MyBatis 的强大特性之一。如果你使用过 JDBC 或其它类似的框架,你应该能理解根据不同条件拼接 SQL 语句有多痛苦,例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列表最后一个列名的逗号。利用动态 SQL,可以彻底摆脱这种痛苦。

2023-10-16 14:40:22 303

原创 You have an error in your SQL syntax; check the manual that corresponds to your MySQL

其中列名分别是nowtime和data(这里用反单引号),写入数据库的值是current_time和字符A(这里用单引号)。java中键值用(‘)单引号,列名(`)反单引号。insertData就是负责执行这句SQL语句的,他最后返回受影响的条数,这个不用管。但是以上都是基于sql没有写错来纠正的,所以确保sql没问题再看看自己有没有以上错误。第一种写法从语法将没问题,但是就是报错,直到我写到了第二种才发现问题。最近做项目又给报错了,找了一会感觉错误非常巴卡,还是记录一下比较好。3.待执行语句不能分开写!

2023-10-05 10:25:34 2912

原创 centos7 网卡重启失败

和 NetworkManager 服务有冲突,这个好解决,直接关闭 NetworkManger 服务就好了, service NetworkManager stop,并且禁止开机启动 chkconfig NetworkManager off。See "systemctl status network.service" and "journalctl -xe" for details. [失败]书写是否正确,以及个别单词的大小写以及拼错字母等原因。首先最基本的就是先检查一下自己网卡配置是否写错。

2023-09-15 15:55:33 2743

原创 idea2022 copy configuration修改端口号

点击Modify options --> Program argments。但是由于idea2022做了比较大的改变所以,操作会略有改变。依然是点击copy configucation进入后。然后就会出现一个输入框,在里面填写端口信息就行了。

2023-09-13 11:45:54 1607

原创 java.sql.SQLException: Access denied for user ‘root‘@‘localhost‘ (using password: YES)

首先第一步,先把密码和用户名删除重新写入,因为可能其中参杂一些空格或者特殊字符,眼睛看不出来,但是可能就是会一直存在。目前不清楚具体原因为什么加上双引号就可以连接了,不过如果碰见这个问题也可以试试!碰见这个问题两次了,一直报sql异常,去检查yml,发现密码和用户名是正确的。然后启动访问端口发现正确了。

2023-09-13 10:25:58 230

原创 Java -IO流复习回顾

2.如何文件续写:使用FileOutputStream(String name,boolean append)构造方法,构造方法中第二个参数传递true,则在文件末尾继续写数据。write(byte[] arr,int index,int len) 写字节数组的一部分。1.如何写换行:调用write()方法,写出”\r\n”.getBytes()即可。write(int b) 一次写一个字节数据。如果操作的是二进制文件,优先使用字节流。如果不确定,则优先使用字节流。

2023-08-25 10:49:41 93

原创 mybatis的批量插入

看网上知道了有大概三种方法优势:JDBC 中的 PreparedStatement 有预编译功能,预编译之后会缓存起来。之后SQL执行会比较快,且 JDBC可以开启批处理,这个批处理执行非常给力。劣势:这种方式插入大量数据时,效率非常底下,不推荐。很多时候我们的 SQL 服务器和应用服务器可能并不是同一台,所以必须要考虑网络 IO。如果网络 IO 比较费时间的话,那么可能会拖慢 SQL 执行的速度。

2023-08-19 18:29:23 1602

原创 maven依赖冲突问题

但是有些包,版本变化大没法去做向下兼容,高版本删了低版本的某些类或者某些方法,那么这个时候就不能一股脑的去选择高版本,但也不能选择低版本。一般我们在解决依赖冲突的时候,都会选择保留jar高的版本,因为大部分jar在升级的时候都会做到向下兼容,所以只要保留高的版本就不会有什么问题。我们发现最终的版本最终已经变成3.17版本,现在再启动就不会报错了,成功解决依赖冲突问题。依赖冲突是指项目依赖的某一个jar包,有多个不同的版本,因而造成了包版本冲突。需要注意的是,声明exclusion的时候只需要。

2023-08-18 16:41:55 396 1

原创 springboot项目打war包部署到本地tomcat

8.找到并打开"D:\tomcat - 01\apache-tomcat-8.5.68\conf\server.xml"3.添加tomcat依赖,或者添加servlet-api依赖,二者用其一,我使用是添加tomcat依赖。7.将打好的war包移动到你本地tomcat的webapps目录下。1.修改打包方式,默认是jar包,加了才是war包。6.打好的包在自己的target目录下面。2.排除内置的tomcat。9.启动tomcat即可。5.用maven开始打包。

2023-08-16 11:55:35 240 1

原创 lombok常用注解

lombok是一个插件,用途是使用注解给你类里面的字段,自动的加上属性,构造器,ToString方法,Equals方法等等,比较方便的一点是,你在更改字段的时候,lombok会立即发生改变以保持和你代码的一致性。@Data这个是非常常用的注解,这个注解其实是五个注解的合体:(提供类的get、set、EqualsAndHashCode、toString方法)(5).它默认不调用父类的方法,只使用本类定义的属性进行操作,可以使用callSuper=true来解决,会在@Data中进行讲解。

2023-08-15 10:18:11 190 1

原创 在springboot中用easyexcel实现execl的导入导出功能

TableName,@TableField则是mybatisplus的注解,@TableField是为了实现自动填充。4.由于是用的mybatisplus,并且业务需求不复杂,实现dao层。5.service和serviceimpl层。6.controller层,导出导入都在里面。@Data是Lombook的注解。先看数据,由于是学习数据量很小。最后给大家看一下我的目录结构。1.导入maven依赖。

2023-08-15 09:51:07 346 1

原创 Swagger

Swagger能够自动生成完善的RESTful API文档,同时并根据后台代码的修改同步更新,同时提供完整的测试页面来调试API。说白了就是可以让我们清楚得看见每个controller下的接口,并且可以进行测试。最后访问:http://localhost:8080/swagger-ui.html即可。Swagger提供了一系列注解来描述接口,包括接口说明,请求方法,请求参数....

2023-08-05 09:15:14 103 1

原创 springboot热部署

热部署配置完成,之后可以直接修改直接去接口测试了,不用每次都stop and return 了。每次改了controller都需要重新运行一下boot项目,还得去刷新浏览器,太麻烦了。去网上看了一下,热部署可以很好解决。

2023-08-04 15:31:17 84 1

原创 springboot中版本不对

然后查了一下,发现原来springboot版本高了,不和我老古董jdk适配,浅浅的改一下吧。什么鬼居然还有问题,可恶啊可恶啊。后面经过查询才知道是版本对不上。创建项目碰到了个这种问题。

2023-08-04 15:21:48 202 1

原创 面试补漏1

一级缓存,就是一个sqlsession级别的缓存,因为每个用户查询数据的时候都会执行sqlsession。二级缓存,是为了解决跨sqlsession的问题,二级缓存就是在executor前加一个修饰器cachiexecutor,mybatis查询数据会先经过这个修饰器查询二级缓存,二级缓存是全局缓存,就是有一个sqlsession只要给二级缓存存入了数据,所有sqlsession都可以共享二级缓存,二级缓存的粒度达到了namespace。因此,#{}是可以预防SQL注入的,因为是带有的单引号。

2023-08-01 21:27:41 74 1

原创 基于多线程的并发服务器的实现

客户端代码在之前博客里面有写。

2023-06-14 11:34:35 113

原创 客户端与服务端雏形

【代码】客户端与服务端雏形。

2023-06-09 16:01:11 117 1

原创 socket网络通信

字节序,顾名思义字节的顺序,就是大于一个字节类型的数据在内存中的存放顺序,也就是说对于单字符来说是没有字节序问题的,字符串是单字符的集合,因此字符串也没有字节序问题。如果有 N 个客户端和服务器建立了新的连接,通信的文件描述符就有 N 个,每个客户端和服务器都对应一个通信的文件描述符。数据的低位字节存储到内存的低地址位 , 数据的高位字节存储到内存的高地址位。TCP 是一个面向连接的,安全的,流式传输协议,这个协议是一个传输层协议。据的低位字节存储到内存的高地址位 , 数据的高位字节存储到内存的低地址位。

2023-06-09 15:48:58 121

空空如也

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

TA关注的人

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