- 博客(19)
- 收藏
- 关注
原创 SpringBoot自定义/error路径失效
背景最近使用SpringBoot做controller统一异常处理的时候,配置好映射路径(/error),使用SpringBoot自带的异常通知注解@ControllerAdvice配置好异常处理类,按理说在Controller发生异常的时候重定向到自定义错误页面(这里是重定向到SpringMVC的映射路径),可实际调试的时候却定向到了SpringBoot默认的错误页面。配置信息此处配置...
2020-01-03 10:24:30
4596
1
原创 每天进步一点点:ThreadLocal源码解读
ThreadLocalThreadLocal是在 JDK1.2 之后提供的一个类,为解决多线程程序的并发问题提供了一种新的思路。可以这么理解,ThreadLocal是与线程绑定的局部变量,即每个线程都对应一个ThreadLocal实例,各个线程互不干扰。我们可以利用ThreadLocal的特性编写出更加简洁优美的多线程程序。接下来让我们通过ThreadLocal的源码来解析ThreadLocal...
2019-12-21 18:53:24
441
原创 MyBatis代码生成器
写作前面关于MyBatis代码生成器,笔者接触过的有三个:MyBatis-Generator、通用Mapper、MyBatis-Plus。这三个插件或多或少都能简化基于MyBatis的开发过程。下面通过一个小案例演示一下这三款插件的基本使用。环境maven依赖<parent> <groupId>org.springframework.boot</gr...
2019-12-01 10:22:31
387
原创 SpringBoot实现自定义Redis序列化
问题在使用RedisTemplate存储对象时,如果采用JDK默认的序列化方式,数据会出现许多编码字符,辨析度不高。比如一个空的User对象,存储到redis后如下:这些使用JDK默认序列化方式序列化后的数据简直惨不忍睹,在使用命令行查询数据时会很头疼。如何使数据更容易辨别呢?一种办法是使用StringRedisTemplate,在存入redis前先将数据处理成字符串格式再存入redis,但...
2019-10-16 16:31:22
1050
原创 排序算法
前言在很多场景下都要对数据进行排序,在数据量很大的情况下对于算法性能的要求就会比较高,了解并掌握常用的排序算法及应用场景可以让我们编写出更高效的代码。这里通过一些的例子介绍一些常见的排序算法。排序模板以下所有排序都实现Example接口,该接口代码如下:/** * 排序算法模板类 * @author: Charviki * @create: 2019-09-05 21:44 **...
2019-10-16 10:26:03
176
原创 SpringBoot中Hibernate-validator的使用
前言Hibernate-validator可以让我们通过注解的方式在实体类中指定一些校验规则和默认的校验失败的错误信息。在SpringBoot中有两种方式可以实现Hibernate-validator校验实体类,一种是结合使用Srping的默认实现自动校验,一种是手动封装工具栏进行校验。下面的例子都是基于SpringBoot2.0.5版本。首先引入hibernate-validator的依...
2019-10-06 09:33:30
936
原创 OpenResty + Tomcat + Redis实现多级缓存
为什么要使用缓存?其实在大部分场景中都需要使用缓存,比如购物网站上商品详情页的信息。如果不使用缓存,用户每发起一起请求,都需要到服务端数据库查询,数据库的每一次操作都会涉及到磁盘IO,这样不仅增加服务端的压力,同时也降得了响应速度。而缓存存在于内存中,对缓存的操作比对磁盘的操作要快得多。但也不是什么数据都可以存入缓存中。首先内存大小有限,不可能将所有数据都存入内存中。其次对于那些更新比较频繁的数...
2019-10-04 08:45:43
468
原创 抛开公式谈KMP算法
在介绍KMP算法之前,先尝试解决一道题目:给出一个主串abcdabcba和模式串bcba,请确认模式串是主串的字串。在主串和模式串规模较小的情况下,我们可以很快看出模式串在主串的位置。但当转换成计算机语言,又该如何实现呢?现有主串和模式串如下:暴力匹配法一种最简单的思路就是依次按位比较,即我们所说的暴力匹配法。依次按位匹配,当出现不匹配项时:[外链图片转存失败,源站可能有防盗链机制,...
2019-09-26 23:39:14
128
原创 Spring-Session + Redis实现分布式Session管理
在传统的单tomcat容器中,用户访问服务器,tomcat会为该用户创建一个session,并将该session的sessionid通过cookie传送给用户,当用户再次访问时如果cookie中携带sessionid,则会到tomcat中寻找指定session。如下图所示:但是当tomcat容器不止一台时,这种模式下就会出现问题。在分布式环境下,后台服务器往往有多台,用户在访问后台资源时往往...
2019-09-26 23:38:13
233
原创 【LeetCode题解】141.环形链表
题目给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。可参考下图:解题思路有两种:哈希表和快慢指针。假设已有链表节点实现:class ListNode { int val; ListNode next; ListNode(int x...
2019-09-11 21:49:19
162
原创 使用ajax + jQuery-validate提交表单
今天在使用ajax+jQuery-validate往后台提交表单时遇到了点小问题,在提交表单时并未对表单数据进行校验。这里通过一个demo来演示遇到的问题。这个demo的代码如下:<!DOCTYPE html><html> <head> <meta charset="utf-8" /> <title>注册</tit...
2019-08-31 23:56:25
330
原创 union-find算法
前言 在介绍union-find算法前,先引入一个场景。输入有N个整数对,对于每一个整数对,判断p,q是否是同一个连通分量(直接或间接相连)。如果是,则不对该整数对做处理,进行下一个整数对的判断。如果不是,则使p,q所在的连通分量合并(即把p,q直接或间接相连)。可以参考下图,我们将直接或间接相连的元素组成的集合称为一个连通分量(如图中的0,5,6)。当输入为0和6,通过图我们可以看出0和6是...
2019-08-29 23:39:40
284
原创 Redis学习笔记
前言 关于NoSQL的介绍和为什么使用NoSQL,可以参考孙立先生写的文章《NoSQL 开篇——为什么要使用 NoSQL》。1. Redis概述1.1 什么是Redis? Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库,它能通过提供多种键值数据类型来适应不同场景下的存储需求。官方提供测试数据,50个并发执行100000个请求,读的速度是110000次/s...
2019-08-16 19:34:39
136
原创 多重for循环嵌套中语句的执行次数
实例代码for (int i = 0; i < n; i++) { for (int j = i + 1; j < n; j++) { for (int k = j + 1; k < n; k++) { count++; } }}以上代码中,求count++语句的执行次数。其实这段代码中求count++...
2019-08-11 20:13:23
11063
原创 关于通用mapper中的的insertList()方法
关于通用mapper中的的insertList()方法通用mapper中的insertList()方法有两个:1. tk.mybatis.mapper.common.special.InsertListMapper包下的insertList()方法: 使用该方法的实体类主键必须是自增的(需要在实体类中指出)。如果实体的主键名为’id’,同...
2019-07-21 20:13:59
17646
10
原创 SpringMVC中关于跨服务器的文件上传
SpringMVC中关于跨服务器的文件上传 文件上传服务器中controller层的部分代码如下: /** * springMVC 跨服务器上传 * @param upload * @return */ @RequestMapping("fileUpload3") ...
2019-06-28 07:36:09
421
7
原创 Spring基于注解的AOP配置中的事务控制
Spring基于注解的AOP配置中的事务控制 在Spring基于注解的AOP事务控制配置中,使用四个通知(前置、后置、异常、最终)进行事务控制是出现以下异常: 事务控制代码如下:package com....
2019-06-22 10:46:55
990
1
原创 eclipse连接8.0.11版mysql
eclipse连接mysql 我使用的是8.0.11版的mysql,安装教程可参考文档:http://www.cnblogs.com/xiongzaiqiren/p/8970203.html 对于eclipse连接mysql,从mysql6以后的连接方式就有一些不同了。笔者一开始使用的是mysql5.1...
2019-02-04 17:12:40
522
原创 JavaScript代码执行顺序
JS代码执行过程分为以下两个步骤: 1.预处理过程 2.代码执行 预处理过程主要是跳过执行语句,先按顺序处理声明语句。即使声明是在调
2019-01-22 17:48:51
432
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人