自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 力扣No.15——求三数之和

文章目录题目示例解题步骤:核心逻辑:特殊值判断:代码展示1.排序+双指针(最优解)2.排序+双指针(初版,未优化,可通过)3. 将正数和负数分开(暴力破解,超时)题目给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。示例示例 1:输入:nums = [-1,0,1,2,-1,-4]输出:[[-1,-1,2],[-1,0,1]]示例 2:输

2021-10-21 15:58:59 13

原创 快速排序详解

文章目录介绍基准元素的选择快排实现方式Java代码实现方法一:两向循环解题步骤图解代码实现方法二:单向循坏解题步骤图解代码实现方法三:使用栈替代递归解题步骤图解代码实现介绍同冒泡排序一样,快排也是一种交换排序。通过元素之间的比较和交换位置来达到排序的目的。冒泡排序是在每一轮只把一个元素移到数列的一端,而快排是找到一个基准元素,比它小的元素移到一遍,比它大的元素移到另一边。这种思路叫做分治法。好处:假如给一个有8个数字的数列,冒泡排序需要比较7轮,每一轮把一个元素移到一端,时间复杂度为O(n^2)

2021-10-13 20:42:04 24

原创 RabbitMQ项目实战(持续更新)

RabbitMq项目实战实战一:使用延迟队列和备份队列实现考试信息定时存储需求分析:在线考试系统:考生考试——随机生成试卷——考生规定时间内答卷——提交试卷——计算分数——考生每道题目入库分析:假如考试时间为2个小时,考生生成试卷后,如果遇到掉线或者其他情况未能在规定时间内交卷的,系统默认交卷并计算成绩和题目入库。并通过微信告诉学生,您的试卷已经自动提交。实现方式一(不推荐):通过死信队列实现延迟队列将过期消息入死信队列,消费死信队列。创建交换机和队列package marchsof

2021-09-30 16:32:40 34

原创 项目跳转之免登录

文章介绍项目A跳转至项目B,项目A在以登录的情况下,登录项目B时还需要输入项目B的帐号,用户体验不好。因此需要将两个项目绑定,项目A登陆后向项目B跳转时可直接登录。本项目是维护别人的老系统,是使用jsp开发的,虽然用的技术比较老,但是整个流程的思想还是挺不错的。业务流程分析项目A向项目B跳转时,携带ticket项目B获取到ticket后,解析出用户信息根据用户信息判断数据库中是否存在该用户,若存在,返回前端可直接登录项目B状态。不存则插入,错误则返回前端不可直接登录项目B状态使用session

2021-09-26 08:26:11 41

原创 uiniapp实现微信授权登录

文章介绍最近开发了一个在线考试系统,因项目需求,需要集成微信授权登陆。在此总结一下整个授权登陆流程。本篇介绍包含前端和后端整个开发流程。业务需求每个用户都拥有学号,需进行学号及密码与微信授权的绑定。第一次登陆时,将用户的学号和微信号进行绑定。之后登录时,凡是进行微信绑定过的用户可以直接登陆,不需要再进行学号和密码的验证。登录成功后,昵称和头像,手机号都使用微信设置的。页面展示授权页面绑定账号页面我的页面授权流程调用wx.login获取code(服务端通过code等其他信息获取op

2021-09-12 22:50:48 230

原创 根据登陆次数,提供验证码服务。

判断是否需要进行验证码校验 /** * @param userId * @param authUser * @return java.util.Map<java.lang.String, java.lang.Object> * @description: 验证码校验 * @date: 2021/8/29 19:03 * @author: zhq* */ public Map<String, Objec.

2021-08-29 20:06:37 30

原创 hashCode()剖析

文章目录写作缘由HashSet的底层实现引出问题1.HashCode是什么HashCode和对象的物理地址区别HashCode特性HashCode作用2. 为什么对象的比较要先比较HashCode值,再通过equals()比较?3. 同为引用类型,为什么包装类和字符串HashSet会自动去重,而对象就不可以了呢?HashCode设计原则总结参考博文写作缘由在使用Set集合时,我们知道,Set存的数据都是不重复的,但是我们又发现,为什么我们存基本类型的数据可以实现去重,但是存引用类型的数据时(String

2021-07-15 15:50:12 25

原创 公共接口安全设计方案

文章目录写作缘由公共接口安全设计:无约定约定加密算法推荐博文写作缘由当我们与其他系统进行数据同步时,此时,别人的系统会请求我们的系统。此时,最重要的一个问题肯定就是安全问题了。因为他们直接请求我们的接口,所以我们必须释放我们接口的权限。但是如果我们完全释放,什么都不做约定,我们的接口很容易被非法网路操作者利用,从而获取我们的信息。我们面临的安全问题有以下三种:请求来源(身份)是否合法?请求参数被篡改?请求的唯一性(不可复制)公共接口安全设计:无约定客户端:传递参数 http://lo

2021-07-14 16:27:01 30

原创 Java中方法的传参问题----传值

创作缘由方法的传参相信是每个程序员都必了解的问题,也是最基本的一个知识点。但是,学习编程近两年的我今天竟然跪在了Java的参数传递上。具体问题见下:问题在学习数据结构时,我写了一个数组的缩容的操作,即当数组数据量量减少一遍时,那么相应的数组的长度也减少一半。我的想法很简单,当删除方法内元素时,进行一次数组内容量的判断,如果小于一半,则调用缩容的方法。缩容的方法进行了封装,以便于我之后复用。我的代码: //删除数组的最后一个元素 public void removeLast() {

2021-07-14 15:06:45 53

原创 常用集合操作(待完善)

将包含id的字符串转换成set集合 public Set<Long> transformLongSet(String ids){ System.out.println("string转换"); List<String> a = Arrays.asList(ids.split(",")); Set<Long> idList = a.stream().map(item -> Long

2021-05-23 17:36:51 27

原创 Java操作Excel——导入/读取/修改/导出(不完善)

获取文件 //校验数据 String fileName = "C:\\Users\\DELL\\Desktop\\xf-suer.xlsx";// ExcelReader reader = ExcelUtil.getReader(fileName); //写入文件 ExcelWriter writer = ExcelUtil.getWriter(fileName); //获取工作视图 Workbook wo

2021-05-09 15:02:19 91

原创 项目部署0.0.

项目快速部署步骤连接远程服务器输入用户名密码我们登陆进去后,默认进入linux系统的home目录如果是普通用户,进入系统目录的home目录,如果是root用户,进入系统目录的root目录(也就是root的home目录)[root@VM-4-2-centos ~]: 后面~表示当前在home目录中ls: 展开目录ls-l(ll简写): 除文件名称外,亦将文件型态、权限、拥有者、文件大小等资讯详细列出pwd: 查看当前所在目录cd: 进入某个目录cd:~ 表示进入home目录加

2021-05-02 20:09:56 234

权限系统设计方案

权限系统设计目的:对不同的人访问资源进行权限的控制,避免因权限控制缺失或操作不当引发的风险问题,如操作错误,隐私数据泄露等问题。权限模型RBAC 模型, 基于角色的访问控制(Role-Based Access Control)角色:角色起到了桥梁的作用, 连接了用户和权限的关系, 每个角色可以关联多个权限, 同时一个用户关联多个角色, 那么这个用户就有了多个角色的多个权限。问题:为什么不直接把用户和权限关联针对于小型系统,这样做是完全没有问题,但是对于大型系统,因用户数量过多,管理员一个个分

2021-04-11 14:04:48 54

原创 Mybatis-Plus项目中使用注意

更新传入值为null的属性,数据库不更新使用MP提供的更新接口时,我们传入某个属性为空的对象,进行数据库数据更新时,我们发现当前字段并没有更新。Entity@Data@EqualsAndHashCode(callSuper = true)@Accessors(chain = true)@TableName("mnt_app")@ApiModel(value="App对象", description="")public class App extends BasicModel<App&.

2021-03-24 17:19:12 158 2

原创 myabtis二级缓存整合Redis

文章目录mybatis二级缓存mybatis二级缓存源码阅读通过redis实现mybatis分布式缓存实现步骤:1. 创建RedisCache类,实现Cache接口。2. < cache /> type指向rediscache的实现3. 测试rediscache中需要的内容。所有方法空实现直接运行测试。4. 测试一下缓存的执行流程。我们打印set和get里面的key和value5. 使用redisRemplate来进行redis缓存,创建获取redisTemplate的工具类6. RedisCo

2021-03-24 16:55:34 43

原创 Spring Cache整合Redis

文章介绍继myabtis二级缓存整合redis之后,利用课余时间又研究了一下Spring Cache整合redis。原本是计划将这两篇文章和redis的介绍整合成一篇文章,但是。。。手贱的我在整合过程中不小心点击了刷新,导致新写的内容被清空了。花了我两天的宝贵时间啊。。。。。。额额额,这一篇是继删除之后,根据回忆,又重写了一篇。虽然原文档丢了,但是还好,参考的blog,笔记浏览器里面还保存着,不至于让我太过难受,好了。拿重点。本篇主要从原生spring cache实现缓存操作,背后源码浅析,再到re

2021-03-24 16:47:04 536

原创 SpringBoot整合Redis

SpringBoot Data Redis 简介Spring Boot Data(数据)Redis 中提供了RedisTemplate和StringRedisTemplate,其中StringRedisTemplate是RedisTemplate的子类,两个方法基本一致,不同之处主要体现在操作的数据类型不同,RedisTemplate中的两个泛型都是object,意味着存储的key和value都可以是一个对象,而SstringRedisTemplatc的两个泛型都是String,意味着StringRedi

2021-03-21 13:30:17 193

原创 Mybatis-Plus模糊分页查询及关联查询(全注解实现)

文章目录Mybatis-Plus分页插件解读分页查询条件准备分页查询5要素MP提供的分页条件类案例一:使用MP提供的mapper进行分页查询案例二:使用MP提供的mapper进行模糊分页查询案例三:自定义Mapper模糊分页查询Mybatis-Plus分页插件解读引入分页插件(官方推荐的最新引入方式): @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { //DbType 数据库类型

2021-03-13 10:23:37 882

原创 switch语句中使用枚举注意事项

文章介绍项目中,我们通常会使用枚举保存一些对象的状态值。比如项目的四种状态(0,开发)(1,完成)(2,维护)(3,暂停)现在我有一个这样的需求,我要获取人员A参与的所有项目,并按照项目的状态未其分类。我通过Map集合,以状态为键,以相应的项目列表为值,来进行存储。枚举存储信息public enum AppStatusEnum { /** * 项目状态 */ //没有参与过项目的人 ONGOING_APP(0, "开发中的项目"),

2021-02-21 13:51:41 302

原创 MapStruct使用方法

文章目录本文介绍基本使用Student和StudentDTO转换使用流程源码分析进阶使用MapStruct提供的一些处理器选项配置使用Spring依赖属性名称不一致属性类型不一致多个source映射一个target日期转换/固定值封装使用性能对比注解介绍参考blog:本文介绍MapStruct 可以将某几种类型的对象映射为另外一种类型,如将多个 DO(业务实体对象) 对象转换为 DTO(数据传输对象)。除了MapStruct,我们之前还使用过set/get,BeanUtils,当然还有其他的方式,他们

2021-02-07 13:57:49 504

原创 Swagger配置详解--教你玩转Swagger

1、引入依赖<!-- swagger--> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.9.2</version> </dependency> <depe

2021-01-31 11:12:13 791

原创 Git操作全过程(不完整,持续完善)

文章目录负责人篇情况一:本地已有Project远端建库操作(码云为例)本地上传操作常见问题汇总问题一:**为什么第四步要拉一下远端仓库代码。**问题二:**推送被拒绝的解决措施,对应问题一**负责人篇情况一:本地已有Project本地已经创建好了项目,想把本地的仓库链接到远程仓库。步骤:远端建库操作(码云为例)本地上传操作打开项目所在文件夹。 git bash here初始化本地仓库。 git init添加远程仓库地址。 git remote add origin 远

2021-01-19 10:59:22 59

原创 redis序列化原因及各种序列化情况划分

序列化序列化基本默认使用的是jdk序列化 会使字符串转义在实际开发中,当我们要往redis中存对象时,都要进行序列化的。当然,如果我们把对象给转换json字符串,此时存储的相当于是字符串。不序列化并不影响正常运行但是,通常我们都要把我们创建的对象给序列化。假如我们不序列化,存储对象在实际开发中我们可能使用json去转换,我们还不想使用jdk序列化(默认的是jdk序列化) 。 此时我们就需要使用配置类了。我们创建一个redisTemplate对象,覆盖bean容器中原有的redi

2021-01-17 12:14:10 293

原创 SpringBoot过滤器中异常处理无效解决方案

问题过滤器中抛出异常,未经过全局异常处理器,前端未接收到异常信息。问题分析过滤器Filter和过滤器Interceptor拦截器的使用总是后端开发不可避免的一部分,有时候我们需要在过滤器或拦截器中进行逻辑处理,抛出异常,那么这里抛出的异常可以被@ControllerAdvice注释的异常处理类捕获吗?答案是Filter不会,而Interceptor可以,Filter是基于Servlet框架编写的,Interceptor是基于SpringMVC框架的,SpingMVC不会对Filter中的异常统一处理,

2020-12-20 11:41:33 951 2

原创 docker 创建mysql容器的闪退问题解决

问题描述使用docker创建mysql容器运行时,出现闪退问题。指令:docker ps内容:无指令:docker ps -a内容:可以看出我们刚运行容器,容器就关闭了。问题分析我们通过日志输出,看一下问题出在哪里我们可以看出,这里说chown: changing ownership of ‘/var/lib/mysql/’: Permission denied查阅资料后,发现Centos7安全Selinux禁止了一些安全权限,导致mysql和mariadb在进行挂载/var/li

2020-11-08 22:58:36 206

原创 Vue项目开发规范(精简版)

简介本文介绍了项目中最基本的开发规范,这些都是最基本要求,当然,开发中,还应根据项目具体要求的规范进行开发。后续规范将会持续更新中。代码风格缩进[强制] 使用 4 个空格做为一个缩进层级,不允许使用 2 个空格或 tab 字符单行最长限制,每行不得超过 120 个字符模块书写顺序 [建议] template -> script -> styletemplate根节点:template 根节点只允许包含一个直接子节点,以下情况都是不允许的:根结点为空;根结点是文字;根

2020-10-22 13:02:14 308

原创 java.lang.NoSuchMethodException: com.example.springboot.mapper.EmployeeMapper.<init>()

错误提示java.lang.NoSuchMethodException: com.example.springboot.mapper.EmployeeMapper.()没有这样的方法异常:指向的是一个.EmployeeMapper错误原因<select id="getEmpById" resultType="com.example.springboot.mapper.EmployeeMapper"> select * from employee where id=#{id

2020-09-16 13:01:12 471

原创 VMware关闭打开/重启虚拟机后需要重新安装操作系统问题

问题使用VMware或者其他虚拟机时,当我们关闭虚拟机后,重新打开需要重新linux。解决方案更改链接方式,我们第一次安装linux系统时,通常采用的时使用ISO映像文件。当我们安装成功后,下次启动要把这个链接方式更改为使用物理驱动器。...

2020-09-11 17:41:27 1608

原创 Exception in thread “main“ java.lang.ArrayStoreException: java.lang.Integer问题

错误信息Exception in thread “main” java.lang.ArrayStoreException: java.lang.Integer错误解决看看是否手误,导入了这个包,如果是,删除即可

2020-09-09 17:22:18 867 1

原创 Request processing failed; nested exception is com.sun.jersey.api.client.UniformInterfaceException问题

报错分析当我们使用SpringMVC跨服务上传文件时,产生Request processing failed; nested exception is com.sun.jersey.api.client.UniformInterfaceException原因很简单。这个错误其实是由tomcat服务器产生的。当我们不对tomcat服务器进行配置时,tomcat的readonly默认是只读的,不可进行上传,删除的操作。我们只需要进项修改即可。解决打开tomcat服务器文件-config-web.x

2020-08-28 16:11:22 103

原创 SpringMvc视图解析器扫描不到jsp文件

项目分析我写了一个小项目,浏览器向服务器发送一个请求,服务器接收后,跳转到success.jsp页面。问题资源的跳转路径等等都没有错误,但是却访问不到success.jsp的路径。解决将访问成功更改为success即可。@RequestMapping(path="/begin") public String begin(){ System.out.println("配置成功"); return "success"; }ok...

2020-08-26 09:18:55 469

原创 Maven如何配置阿里镜像及安装全步骤

安装环境配备jdk1.8及以上maven3.3.9安装工具Tomcat服务器安装步骤maven官方下载maven的zip文件(3.3.9版本下载路径)点击自动下载zip文件2.将下载好的文件解压到硬盘上(我的解压路径:E:\maven)解压之后:3.设置本地中央仓库。我们下载成功后,maven自动在c盘(C:\Users\DELL.m2\repository),创建了maven本地仓库。但是这个路径不好找,并且在c盘,所以我们要在其他地方创建一个maven本地仓库,并覆盖之前的仓

2020-08-11 10:00:03 1118 1

原创 cookie免登陆案例及cookie保存session

文章目录主要内容:思路及代码分析:小结问题:主要内容:假如我们在csdn上登陆账号,登陆之后,关闭浏览器。隔一段时间我们再次打开csdn时,我们会发现我们的账号已经被登陆了。那么这个是怎么实现的呢?接下来我们来实现一下。思路及代码分析:首先我们需要先登陆账号,登陆账号之后我们的用户信息用session存储起来。(用session存储的目的是为了之后你进行写blog或者收藏blog时,确定你是已经登陆了账号了)。 HttpSession session = request.getSessio

2020-08-05 17:14:11 337

原创 解决文件名下载中文名无法解析问题

问题:本地文件部署到服务器上时,如果文件的名字为中文,虽然文件能够从浏览器下载,但是文件的名字解析不出来。如:我要下载一个名字为球员的图片<a href="/Response/downLoad1?filename=球员.jpg">中文名称图片下载</a>解决措施:1.获取客户端使用的浏览器版本信息2.根据不同的浏览器版本信息,设置filename的编码格式不同public class DownLoadeUtilis { public static Strin

2020-07-18 11:56:04 406

原创 getClassLoader().getResource().getPath()系统找不到指定的路径问题

介绍:今天使用Java进行XML文件读取时,一直爆系统找不到指定的路径的问题,网上的方法看了个遍,都没有找到解决方案。最后发现我犯了一个非常简单的小错误。可能大家的错误都不一样,在看解决办法之前,望大家先看一下我犯的错误,如果我们犯的一样,那就很容易解决了我的错误:存储文件的文件夹的名称采用了中文命名。只需要把名称换成英文即可。大家如果跟我犯的一样,只需要改一下文件夹的名称就可以了。我的代码package jsoup;import org.jsoup.Jsoup;import org.j

2020-07-11 21:13:55 2569 5

原创 JDBC事务基本操作介绍

介绍假如A和B为同一个事务操作,A操作完成时,数据库等遇到一些异常,无法完成B操作,此时系统会自动删除已完成的操作,避免造成损失。保证数据库多个操作,要么全部成功,要么全部失败。举例问题:假如在一个银行管理系统中,A向B转钱,A刚转出去,此时遇到断电或者数据库崩溃,A转钱操作此时已经完成,但是B收钱操作未进行。这时候就会产生麻烦演示开启事务:con.setAutoCommit(false); true自动提交 false手动提交提交事务(手动提交):con.commit(); 开

2020-07-06 08:39:22 106

原创 数据库连接池(3)dbcp接池

dbcp下载网址http://commons.apache.org/proper/commons-dbcp/download_dbcp.cgi导入连接池右键Build Path操作步骤导入连接池插件,Commons Pool 和 Commons Logging插件定义数据源 private static BasicDataSource ds;定义数据源并在静态代码块里面初始化调用con = DBCPDateSource.getConnection();关闭finally {

2020-07-06 08:34:25 52

原创 数据库连接池(2)C3P0连接池

c3p0下载网址https://sourceforge.net/projects/c3p0/导入连接池因为c3p0还依赖一个mchange的一个jar包,所以也需要导入,不然会报错右键Build Path操作步骤导入两个jar包定义成员数据源 private static ComboPooledDataSource ds;在静态代码块中进行数据源初始化调用con = C3P0DateSource.getConnection();关闭finally { C3P0

2020-07-06 07:55:40 41

原创 数据库连接池(1) 自建连接池

简介之前每次进行数据库的增删改查的操作时,都会先建立一个Connection链接,用完之后关闭,如果成千上万的用户进行数据的添加修改,这样很浪费性能和开发时间,。其实完全可以用一个Connection进行链接和关闭,可以通过连接池来实现。连接池使用集合保存多个链接,后续使用时直接在链接池中取出链接使用,而不需要再重新创建,节约时间。创建//创建一个集合,这个集合里面用来存放Connection; private static ArrayList<Connection> conList

2020-07-05 21:55:05 97

原创 jdbc访问数据库封装步骤。

文章介绍jdbc链接数据库进行增删改查时,会出现许多冗余比较强,不够美观的代码。对代码进行合理的封装不仅利于查看,更对运行速度有很大的提升。本片文章以插入操作为例,简单介绍了数据库操作时一些简单的封装,如果大家有更好的意见或建议,欢迎在讨论区交流。插入封装**题目:**我要往员工表里面插入一名员工数据,这名员工有以下属性:name, idCard, gender, age, birth, profession, telephone, statePerson person = new Person

2020-07-05 17:04:37 178

空空如也

空空如也

空空如也

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

TA关注的人 TA的粉丝

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