自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

qq_41965731的博客

此技无它,唯手熟尔

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

原创 Mysql Mybatis 批量修改数据

Mysql Mybatis 批量修改数据MapperInteger updateListPO(List<ProjectQuotationItemPO> upateList);方法一:<update id="updateListPO"> <foreach collection="list" separator=";" item="item"> UPDATE project_quotation_item SET

2022-03-22 10:49:07 9206 2

原创 在不修改源码的前提下扩展自己的需求

前天禅道上给了我一个BUG,我最终找到了原因但是 需要修改原有框架里面的东西,修改的东西不多,但是如何去修改呢?第一时间我想到的就是先将框架的jar包进行反编译修改完之后在进行打包,在放到仓库里面。于是在网上搜集这样的工具,网上也有很多反编译的工具,但是我看下来有一个问题,每一个工具都不能原模原样的把源码里面的东西进行复原,并且由于不同的解析语法,可能解析出来的代码格式也不一致,比如有的解析支持Java8的lamdam表达式和stream流,有的却不支持。于是就暂时举步维艰,今天早上来问了下老大,人家给

2022-01-27 14:54:24 1136

原创 Excel的模板导出+背景水印

1. 模板导出当遇到比较复杂的表的时候,可以第一时间想到模板,当然简单的表也是可以很快的生成,可以简化开发的效率,不必我们在一个一个画Cell,并且需要修改各种样式,而利用模板就可以制造好模板并且可以给上对应的样式。前几天给我了个需求,需要改造原有的一个Excel导出的功能,那个表比较复杂,一共有三个Sheet页大致的导出样式就是如此吧如果要做这样的表,一个一个画是真的难顶,所有让我改造的时候我先看了下他原有的逻辑,有一点难懂,我就想着直接用模板进行改造,于是我就想了之前使用过的 EasyP

2022-01-06 22:49:06 13144 1

原创 在非Spring环境下获取Bean

今天在完成一个业务逻辑的需求,需要在非spring环境下面获取 spring 的 bean ,我就想到了之前在看开源项目若依里面有个SpringUtils 的工具类,可以完成这样的需求。实现方式有两种:方法一:实现BeanFactoryPostProcessor接口方法二:实现ApplicationContextAware接口若依里面是两种方式都进行了杂糅/** * spring工具类 方便在非spring管理环境中获取bean */@Componentpublic final class

2021-04-20 21:53:14 771

原创 mall 收获与总结

一、自定义校验器jdk 和 hibernate-validator 定义了很多校验的注解,但是毕竟这些都是提前定义好的,有时候并不能满足我们的校验需求,所以我们可以自定义校验注解和校验规则1、jdk所提供的校验规则2、hibernate-validator所提供的校验规则校验注解/** * @Description : 自定义生日检验注解 * @Date: 2021/4/10 00:23 * @Author : tiankun */@Documented@Retention(R

2021-04-13 14:32:40 234

原创 SecurityContextHolder.getContext().getAuthentication() 线程安全吗?

今天想到昨天 token 的一个问题,如果 token 失效,我们需要生成新的 token 那必然需要一些登录用户的信息去构建我们的 jwt token , 我当时的想法是虽然 token 失效但是在 springSecurity 的上下文对象中存储着用户已经 登录认证过的 Authentication ,通过 Authentication 可以获取 UserDetials 信息,但是我今天早上起来想到,这只是在我单用户那必然是可以获取到我已经认证的 Authentication ,但在 web环境下,如.

2021-04-13 12:45:08 2394 1

原创 前后端分离如何给用户无感应式的 token 的刷新

基于传统的Session认证1. 认证方式我们知道,http协议本身是一种无状态的协议,而这就意味着如果用户向我们的应用提供了用户名和密码来进行用户认证,那么下一次请求时,用户还要再一次进行用户认证才行,因为根据http协议,我们并不能知道是哪个用户发出的请求,所以为了让我们的应用能识别是哪个用户发出的请求,我们只能在服务器存储一份用户登录的信息,这份登录信息会在响应时传递给浏览器,告诉其保存为cookie,以便下次请求时发送给我们的应用,这样我们的应用就能识别请求来自哪个用户了,这就是传统的基于ses

2021-04-12 17:38:14 972

原创 自定义校验器 Validator

jdk 和 hibernate-validator 定义了很多校验的注解,但是毕竟这些都是提前定义好的,有时候并不能满足我们的校验需求,所以我们可以自定义校验注解和校验规则1、jdk所提供的校验规则2、hibernate-validator所提供的校验规则校验注解/** * @Description : 自定义生日检验注解 * @Date: 2021/4/10 00:23 * @Author : tiankun */@Documented@Retention(RetentionP.

2021-04-10 09:16:34 495

原创 跨域问题的解决

1、@CrossOrigin 注解2、SpringBoot 不结合网关Gateway跨域配置@Configurationpublic class WebMvcConfig implements WebMvcConfigurer { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") // 针对所有的请求 .allow

2021-04-01 12:34:23 991

原创 RuoYi-Vue 分离版 收获与总结

一、常量的定义以下是阿里编码规约二、图片的 base64 编码 概述博客三、在项目启动时将一些数据提交加载到缓存中1.利用@PostConstruct注解,当类被初始化时执行 init 方法,将数据库中的数据提前加载到缓存中,避免第一次访问的用户等待时间过长。 /** * 项目启动时,初始化参数到缓存 */ @PostConstruct public void init() { // 在数据库中查出配置信息集合

2021-03-26 13:58:38 1786 1

原创 Spring 的 BeanUtils 工具类

场景:前端通过POST提交一个JSON格式的字符串,比如里面的数据设计到的表有多个,我们需要创建一个实体类对涉及这多个表属性去进行接收。接收到以后,我们又需要通过这个对象获取相对应的值分别赋值到实体类中,对于大部分患有懒癌晚期程序员来说这是不可容忍的,所以我们就可以通过一些工具类来完成。选择: Apache 的 BeanUtils 工具类 和 Spring 的 BeanUtils 工具类。在https://www.jianshu.com/p/f52f00f949b7这篇博客中提到。Apache的 .

2021-02-01 23:12:22 653

原创 利用Redis实现分布式锁

实现 Redis 完成分布式锁 所用到的指令 : setnx : 如果key值不存在进行设置并返回 1,如果 key值存在不进行任何操作并返回 0 expire : 给key 值设置过期时间 del : 删除所对应的 key思路:1 . 在执行具体的买票业务之前先通过 setnx 的指令去获取其返回值,如果设置成功(返回值为1) 说明获取到了锁,没有设置成功(返回值为0),则说明没有获取到锁,继续循环执行2. 抢到锁的线程先给key 设置过期时间,这一步主要是为了避免...

2021-01-20 20:48:55 91

原创 获取插入数据自动生成的id的值的三种方法

场景:当我们添加一个检查组,并且我们需要给这个检查组中添加多个检测项,我们应该先创建检查组,然后根据检查组的ID和检查项的id 将俩者关系添加到第三个表中,但是我们所插入的检查组的ID值是数据库自动生成的,我们怎么才能在插入数据后获取当前插入数据的ID呢?9.1 方法一:使用mybaits的 <selectKey>标签 <!--新增--> <insert id="add" parameterType="com.tk.domain.CheckGroup

2020-12-29 21:06:31 5650

原创 数据源:你TM管杀不管埋?

24-Dec-2020 18:54:22.615 严重 [http-nio-8080-exec-3] org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for servlet [com.tk.controller.UserController] in context with path [] threw exception org.apache.ibatis.exceptions.PersistenceExcep.

2020-12-24 19:11:53 280 3

原创 1093 - You can‘t specify target table ‘person‘ for update in FROM clause

翻译成人话: 您不能在FROM子句中指定目标表“person”进行更新今天在做 letcode 题遇到了 You can't specify target table 'person' for update in FROM clause,我原先写的代码 DELETE FROM person WHERE Id NOT IN ( SELECT min( Id ) FROM person GROUP BY Email );在网上搜罗了一...

2020-12-09 12:36:57 240

转载 javaweb路径分析

https://www.cnblogs.com/fnz0/p/5595546.html

2020-11-28 19:19:54 81

原创 Java 形参改变,实参是否发生改变

基本数据类型:形参发生改变,实参不会改变引用数据类型:形参发生改变,实参不会改变被final修饰的引用数据类型:形参发生改变,实参不会发生改变引用类型改变引用:形参发生改变,实参不会发生改变package day01;/** * #Description : * #Date: 2020/11/14 17:09 * @author : tiankun */public class ArgsTest { public static void main(St...

2020-11-14 17:33:17 680

原创 Lombok基本使用

一、Lombok是什么官网:https://projectlombok.org/Project Lombok is a java library that automatically plugs into your editor and build tools, spicing up your java.Never write another getter or equals method again, with one annotation your class has a fully fea

2020-11-11 14:38:27 628

原创 HashMap JDK7 扩容机制 和 ConcurrentmodificationException 异常

JDK7扩容机制HashMap扩容的目的:让链表缩短在往hashmap里面 put 数据时,hashmap会根据自己内部的逻辑进行扩容当map中元素的个数 size 大于他的阈值( capacity * LoadFacter => 数组大小 * 负载系数 ),并且当前索引所在位置不为null 才进行扩容 ,扩容是成二倍扩容 void addEntry(int hash, K key, V value, int bucketIndex) { if ((size..

2020-11-09 01:10:38 304

原创 HashMap——通过位运算来求出 hashcode 的所在的索引

JDK7 中的 HashMap的数据结构是 数组+链表,所以,我们需要通过一些计算尽可能平均的算出数据所在的索引(0-数组长度-1)HashMap中的源码 /** * Returns index for hash code h. */ static int indexFor(int h, int length) { // assert Integer.bitCount(length) == 1 : "length must be a non-zer

2020-11-08 19:58:45 547

原创 原码、反码、补码 和 位运算

原码反码补码前言 : 计算机中的数据,都是以二进制补码的形式在运算,而补码则是通过反码和原码推算出来的原码 :(可直观看出数据大小)就是二进制定点表示法,即最高位为符号位,【0】表示正,【1】表示负,其余位表示数值的大小。通过一个字节表示+7和-7,代码:byte b1 = 7; byte b2 = -7;一个字节等于8个比特位,也就是8个二进制位0(符号位) 00001111(符号位) 0000111反码 : 正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。

2020-11-08 18:28:40 578

原创 Integer 的 Integer.highestOneBit方法源码解读

今天在学习JDK7 HashMap源码时,它在创建数组容量大小的时候用到了Integer.highestOneBit方法 HashMap中的源码 private static int roundUpToPowerOf2(int number) { // assert number >= 0 : "number must be non-negative"; return number >= MAXIMUM_CAPACITY ..

2020-11-08 17:55:43 262

原创 功能:页面分页 以及 模仿百度的页面按钮功能

这几天在做JavaWeb项目,涉及到了页面分页和模仿百度的页面按钮功能,感觉是一种很套路编码格式,但是这么在以后的web功能是必然是不可缺少的,所以,做完项目后我就准备把这个功能记在博客中,一来是加深自己对分页功能的理解,二来是为了做笔记,忘记了某些代码可以回头来复习以我做的项目为例来阐述我的代码收藏排行榜功能 功能描述: 点击收藏排行榜,按照我们所规定的每页显示数据的数的格式,在数据库中查询所有的旅游路线并按照收藏次数的进行排序,并可以实现模糊查询 和 查询符合选定金额的旅游路...

2020-11-07 10:55:01 549

原创 BaseServlet的抽取——》优化Servlet

在我所写的web项目中,每次写一个功能,我都要去创建一个Servlet去实现它的功能,即便是对同一事物进行增删改查的功能操作,随着功能的越来越多,Servlet所创建的数量也就越来越来,这对我编=程序来说,看到一大堆的Servlet是很头疼的,所以,我们需要去对一些对相同事物进行操作的servlet进行优化。BaseServlet的提取。我们优化的目的:减少Servlet的数量,现在是一个功能一个Servlet,将其优化为一个模块一个Servlet,相当于在数据库中一张表对应一个Servlet,在S

2020-11-04 00:09:25 699

原创

根据尚硅谷的韩顺平老师的数据结构视频总结的笔记观看视频的网址一、二叉树1、为什么需要树这种数据结构1)数组存储方式的分析优点:通过下标方式访问元素,速度快。对于有序数组,还可使用二分查找提高检索速度。缺点:如果要检索具体某个值,或者插入值(按一定顺序)会整体移动,效率较低 [示意图]2)链式存储方式的分析优点:在一定程度上对数组存储方式有优化(比如:插入一个数值节点,只需要将插入节点,链接到链表中即可, 删除效率也很好)。缺点:在进行检索时,效率仍然较低,比如(.

2020-10-13 19:53:52 207

原创 哈希表

根据尚硅谷的韩顺平老师的数据结构视频总结的笔记观看视频的网址一、哈希表(散列)-Google上机题看一个实际需求,google公司的一个上机题:有一个公司,当有新的员工来报道时,要求将该员工的信息加入(id,性别,年龄,住址..),当输入该员工的id时,要求查找到该员工的 所有信息.要求: 不使用数据库,尽量节省内存,速度越快越好=>哈希表(散列)二、哈希表的基本介绍散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的..

2020-10-11 23:36:40 98

原创 查找算法

根据尚硅谷的韩顺平老师的数据结构视频总结的笔记观看视频的网址在java中,我们常用的查找有四种:1) 顺序(线性)查找2) 二分查找/折半查找3) 插值查找4) 斐波那契查找一、线性(顺序)查找该查询算法很简单,循环查询就可以代码实现:package search;/** * @description: 顺序(线性)查找 * @auther:田坤 * @date 2020/10/9 9:22 **/public class SequenceSeac.

2020-10-09 19:58:54 109

原创 排序算法

根据尚硅谷的韩顺平老师的数据结构视频总结的笔记观看视频的网址一、排序算法的介绍排序也称排序算法 (Sort Algorithm),排序是将一 组数据,依指定的顺序进行排列的过程。二、排序的分类1) 内部排序:指将需要处理的所有数据都加载 到内部存储器中进行排序。2) 外部排序法:数据量过大,无法全部加载到内 存中,需要借助外部存储进行排序。3) 常见的排序算法分类(见下图):三、算法的时间复杂度1、度量一个程序(算法)执行时间的两种方法1...

2020-10-08 08:55:47 457

原创 递归

根据尚硅谷的韩顺平老师的数据结构视频总结的笔记观看视频的网址一、递归的应用场景看个实际应用场景,迷宫问题(回溯), 递归(Recursion)二、递归的概念简单的说: 递归就是方法自己调用自己,每次调用时传入不同的变量.递归有助于编程者解决复杂的问题,同时可以让代码变得简洁。三、递归的调用机制1、打印问题2、阶乘问题package recursion;/** * @description: 阶乘解决的俩个问题 * @auther:田坤 * @d.

2020-10-07 18:35:01 154

原创

根据尚硅谷的韩顺平老师的数据结构视频总结的笔记观看视频的网址栈的实际需求请输入一个表达式计算式:[7*2*2-5+1-5+3-3] 点击计算【如下图】请问: 计算机底层是如何运算得到结果的? 注意不是简单的把算式列出运算,因为我们看这个算式 7 * 2 * 2 - 5, 但是计算机怎么理解这个算式的(对计算机而言,它接收到的就是一个字符串),我们讨论的是这个问题。-> 栈一、栈的介绍1)栈的英文为(stack)2)栈是一个先入后出(FILO-First ..

2020-10-07 14:51:50 92

原创 链表

根据尚硅谷的韩顺平老师的数据结构视频总结的笔记观看视频的网址一、链表的介绍链表是有序的列表,但是它在内存中是存储如下链表是以节点的方式来存储,是链式存储 每个节点包含 data 域, next 域:指向下一个节点. 如图:发现链表的各个节点不一定是连续存储. 链表分带头节点的链表和没有头节点的链表,根据实际的需求来确定二、单链表1、单链表介绍单链表(带头节点)逻辑结构如下图:2、单链表的应用实例使用带head头的单向链表实现 –水浒英雄排行榜管理 ..

2020-10-04 09:21:11 418 1

原创 队列

根据尚硅谷的韩顺平老师的数据结构视频总结的笔记观看视频的网址1、队列的使用场景2、队列介绍队列是一个有序列表,可以用数组或者链表来实现 遵循先入先出原则,即:先存入队列的数据,要先取出,后存入的要后取出 示意图:(用数组模拟队列示意图) 3、数组模仿队列的思路队列本身是有序列表,若使用数组的结构来存储队列的数据,则队列数组的声明如下图, 其中 maxSize 是该队列的最大容量。因为队列的输出、输入是分别从前后端来处理,因此需要两个变量 front及...

2020-10-02 22:59:32 123

原创 不使用中间变量交换俩个数

正常来说,我们交换俩个数需要一个中间变量。用来暂存交换时的数。比如:public static void main(String[] args) { int[] arr = {11,22,33,44,55,66}; NormalTraversal(arr); for (int i = 0; i < arr.length; i++) { System.out.println(arr[i]); } }

2020-09-30 12:31:15 93

原创 稀疏数组

根据尚硅谷的韩顺平老师的数据结构视频总结的笔记观看视频的网址1.看下实际的需求编写的五子棋程序中,有存盘退出和续上盘的功能分析问题:因为该二维数组的很多值的默认值为0,因此记录了很多没有意义的数据——》稀疏数组2.基本介绍当一个数组中大部分的元素为0,或者为同一个值数组时,可以使用稀疏数组来保存该数组。稀疏数组的处理方法是:1)记录数组一共有几行几列,有多少个不同的值2)把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序规模举例:.

2020-09-28 23:46:58 88

原创 IO

流的分类第一类 输入流:数据源到程序(InputStream、Reader读进来) 输出流:程序到目的地(OutputStream、Writer写出去) 第二类 节点流:可以直接从数据源或目的地读写数据 处理流(包装流):不直接连接到数据源或目的地,是其他流进行封装。 目的主要是简化操作和提高性能。 节点流和处理流的关系: 节点流处于io操作的第一线,所有操作必须通过...

2020-09-28 23:20:41 88

原创 JavaScript:给遍历元素加事件出现在问题

//获取所有的a标签var allA = document.getElementsByTagName("a");for(var i = 0 ;i <allA.length ; i++){ alert("循环正在执行"+i); allA[i].onclick = function(){ alert("响应函数正在执行"+i); return false; };}上面这一行代码,我相继给获取到的allA里面添加时间,但是当.

2020-09-27 09:31:15 125

原创 解决图片底部默认空隙的问题

<!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8"> <title></title></head><style> .tudou{ border: 1px solid red; }</style><body> <div class="tudou...

2020-09-18 20:20:07 126

原创 CSS画三角

在网页中我我们会遇到这种三角,我们可以通过css来实现<!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8"> <title></title></head><link rel="stylesheet" href="css/iconfont.css"><script src="js/iconfont.js...

2020-09-18 17:47:35 94

原创 CSS属性书写的顺序

1、布局定位的属性display / position / float / clear / visibility / overflow (建议display第一个写,关系到模式)2、自身属性wihtd / height / margin / padding / border / background ...3、文本属性color / font / text-decoration / text-align / vertical-align / white-space / break-wo.

2020-09-18 08:23:02 118

原创 前端Emmet的使用

一、Emmet的作用emmet可以快速的生成我们需要的一些代码,使得我们编写代码更加轻便。二、Emmet的使用emmet语法不是说可以直接在前端软件中运用,Emmet是一种插件,大部分编辑器都支持。注释:在输入代码后按 tab 键运行。且代码间不可以加入空格。emmet语法名称 操作符 Child(子标签) > Sibling (兄弟标签) + Climb-up(上级元素) ^ Grouping(分组) () Mu...

2020-09-16 20:43:19 193

空空如也

空空如也

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

TA关注的人

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