- 博客(60)
- 资源 (1)
- 收藏
- 关注
原创 Mysql 既要加密存储,又要支持模糊搜索,该怎么办?
我们存储用户信息等敏感数据的时候, 出于安全考虑通常需要加密存储,可是在用户信息统计的时候,难免又要支持模糊搜索,这时候该怎么办呢。AES_ENCRYPT函数和AES_DECRYPT,需要注意的是,加密后的字段需要用blob做存储,如果用varchar存储会报1366错误。如果你的数据库是mysql的话比较容易解决,mysql自带函数可以加解密并且支持模糊搜索。
2023-08-22 16:01:59
428
原创 bug记录: 本地idea运行没有问题,打包后出现ClassNotFoundException: org.apache.flink.util.OptionalFailure。
本地idea运行没有问题,打包后出现ClassNotFoundException:org.apache.flink.util.OptionalFailure
2022-03-12 12:03:28
3591
原创 大型项目改造实践经验篇----分布式事务之本地事务表
分布式系统中,分布式事务是避不开的问题。理论知识不再过多赘述,CAP,BASE理论,这些都是面试避不开的话题,下面说一下自己的一些经验。其实无论是单机事务,还是分布式事务,核心都是一个词,事务。在java语言的落地过程中,事务封装在Connection对象中,正常提交是commit(),异常回滚是rollback()。最好的解决方案就是去掉分布式事务,接口粗化,避免分布式事务,数据一致性要求不高,甚至可以不用考虑,等应用场景多了之后,可以针对这些数据库应用做一个数据清洗程序,定时清洗即可。但
2020-11-22 21:53:00
557
原创 redis源码环境搭建
好久没有写博客了,开始搞起。redis源码搭建,搞了一个星期,各种问题。感谢前辈的博文https://www.cnblogs.com/grey-wolf/p/12637730.html按照步骤来,我还是报错。( CMake no longer defines WIN32 on Cygwin!)于是重装了mingw,由于系统用户名是中文,还是报错,调整系统用户名为英文后,安装成功。但是编译redis源码报错,少了很多文件。所以还是只能用cygwin64。最终解决方案是,全部卸载重...
2020-10-23 10:53:43
375
原创 记录一次spring的事务管理器mybatis一级缓存的坑
原因: 一个@Transactional注解的方法中,连续查询了两次sql,参数一致,两次查询过后再update未加事务时,一切正常。加上事务后,导致两次查询结果不一致,debug后发现加入注解后,两次的sqlSessionProxy对象一致,导致一级缓存生效。下面是未加事务时,sqlSessionProxy对象下面是加上注解后,sqlSessionProxy对...
2020-04-27 17:09:50
363
原创 记一次内存泄漏误诊
问题场景:压测时产生大量日志文件,导致free -m命令中的free参数指标飙升。只有删除该日志文件,free参数恢复正常。项目中使用logback作为日志框架,操作系统是SUSE SP12版本,最开始误以为是logback日志在该系统下存在内存泄漏,观察堆栈信息,都没有发现任何异常,发现free所占内存并非java应用所持有。所以从linux内核找原因,深入了解了一下fr...
2019-09-02 14:43:21
672
原创 一次jvm调优经历-idea启动优化
受《深入理解JVM》这本书的启发,准备针对idea进行一次优化。首先放一下效果图优化前: 系统启动并且运行了几个小时后的idea,多次启动后取的平均时间23秒,优化后:时长19秒左右。提升了四分之一的启动时间,并且在后续loadingClass的时间也明显提升。1 准备工作 1 为了记录idea启动时间,需要安装一个idea的插件,这里我去idea的插件官网...
2019-06-20 18:03:34
531
原创 线上故障排查-mysql
报表系统运行sql,执行出错。问题描述: 别的sql报表都没问题,只有一个报表sql有问题,一执行,mysql立马宕机,sql大概有300行左右。首先监控系统状态,执行sql后发现cpu总利用率位置在50左右,内存利用率在70左右,并没有达到极限。其次怀疑max_connections和buffer_size设置小了,调大重启后无果。打开错误日志,看到如下报错信息。发现应该inno...
2019-06-18 15:56:33
493
原创 惊心动魄的一天--mysql
今天的任务应该是把开发库的数据同步到测试库上,弄了一天,一直报错。question 1: 同步数据失败数据量也不是很大,加一起就几个g的sql文件。报错Table ‘xxx’ is full,原本以为是数据库虚拟内存不够,去my.cnf里面修改配置文件 。先运行的这两条命令试了试set global max_allowed_packet = 2000 * 1024 * 1024;发...
2019-01-17 17:53:01
242
原创 2018年总结
回顾2018年,从bd到社会,感悟还是很多的。技术方面,2018年的成长远远超过我的预期。这要感谢一年来努力的自己。1 在6月份的时候,凭着自己对框架的理解,手写了一套SSM框架,发布在java知音公众号上和自己的博客上,获得了很多技术朋友的认可,我将项目发布到github上,最多的时候有30多颗小星星。但是目前就剩22颗了,可能好久没有更新的缘故吧。地址是这个,有兴趣的朋友可以去瞧一瞧。...
2019-01-13 11:39:42
190
1
原创 记录一次ssm转springboot项目过程
其实这个项目是springboot的项目,但是不知道为什么,里面的配置几乎都是xml的形式配置的,包括spring-web的配置。不过,既然咱接手了这怎么能受得了。于是将所有的标签转成springboot的。百度上对这方面几乎没有资料。也是,springboot的架子里面用springmvc配置这种事,还是少见的....1 xml的bean标签,对应springboot的@Bean2 xm...
2018-12-18 11:45:08
7201
原创 由浅入深--探究Tomcat9.0之--入门篇3
再次强调一下,Tomcat系列全部文章基于9.0.12版本。 入门篇3 Tomcat的启动(一)二:start()方法 在BootStrap类中的核心代码是这几行。String command = "start";else if (command.equals("start")) { d...
2018-10-29 00:41:07
263
原创 由浅入深--探究Tomcat9.0之--入门篇2
再次强调一下,Tomcat系列全部文章基于9.0.12版本。 入门篇2 Tomcat的启动(一) 所有的java项目,程序启动入口其实都是main方法,tomcat也不例外,Tomcat的启动入口在Bootstrap.java中的main方法中。那么,我们的启动流程就由此开始啦。debug模式,走起~ 其实启动过程大体...
2018-10-27 23:20:39
285
原创 由浅入深--探究Tomcat9.0---入门篇1
好几个月没写博客了,一是在筹备转型事宜,二是一直在研究tomcat,现在总算有一些眉目了。现在将自己这几个月的研究成果给各位看官奉上,希望大家喜欢。本次源码分析预计分为五大专题第一部分是Tomcat入门篇(组件介绍,启动流程分析)第二部分是手写tomcat实现。第三部分是Tomcat的设计模式总结第四部分是源码深入探究,第五部分是Tomcat的优化专题。 很多人说看不...
2018-10-26 17:23:25
779
原创 记录一次类似于内存泄漏,定位问题的经历
1 问题原因是一个接口返回数据大约有240w,查询时间有30s,导致cpu利用率达到了百分之百。2 解决方案有几种,在windows7环境下面,第一种是先打开jconsole,在jdk的bin目录下,可以看堆栈和线程的信息。 确认是堆栈信息猛涨之后,1 粗略看一下 可以利用 jmap -histo -pid|more 的命令打开查看当前-histo[:live] 打印每个c...
2018-08-30 20:19:58
253
原创 手写spring+springmvc+mybatis框架篇——Mybatis
整合Mybatis是本项目中的一个难点。实现功能:1 动态绑定用户输入参数2 Mybatis的resultType动态绑定返回实体类。3 在spring中的接口注入4 xml版本的mapper注入。 关于Mybatis的优秀文章给大家推荐两个1 手写简化版mybatis https://my.oschina.net/liughDevelop/blog/1631006...
2018-07-09 22:44:23
711
原创 手写spring+springmvc+mybatis框架篇——springmvc
先放一张网上的很好的一张原理图图片出自,这篇博客原理也写的很清晰明了。我的实现也是借鉴了这张图https://www.cnblogs.com/xiaoxi/p/6164383.html先说一下我的实现思路:1. 在MyDispatcherServlet中的servlet初始化的时候,绑定标有@MyController注解类下面的@MyRequestMappign的value值和对应的方法。绑定的方...
2018-07-09 21:52:00
626
原创 手写spring+springmvc+mybatis框架篇——springIOC容器
启动IOC容器为initBean方法。下面贴一下这两个类的关系图 首先是applicationContext其次是InitBean XmlApplicationContext :为解析xml文件的类,在spring源码中Resouce接口是用来解析多种文件格式的xml文件的接口,可能参数时inputStream,也可能是byteArray等,但是我们这里比较简单,直接用new File()传...
2018-07-09 20:48:20
931
原创 手写spring+springmvc+mybatis框架篇——开篇
我们平日开发时所用的SSM框架,可是你真的了解它吗?技术革新,换代应接不暇,只有理解了源码才能保证在技术快速更迭的时代中真正站稳脚跟。本系列文章抽丝剥茧,源码分析百度有很多,在这里只列举几个我收录的优秀的博客推荐给大家,本文不过多的分析源码,更注重将代码理解后的实现。 话不多说,开启正题。(强调一下,本人是小白) 此项目是在手写SSM框架的基础上实现的简单的登录功能。 首先是...
2018-07-09 16:38:53
2450
3
原创 2018最新常用的正则表达式
都是根据最新情况总结出来的,欢迎收藏var XLphoneReg = /^1(3[0-9]|4[4-9]|5[012356789]|66|7[0-8]|8[0-9]|9[89])[0-9]{8}$/; //手机号正则 var XLqqReg =/^\d{4,10}$/;//QQ号正则,4-6位数字var XLemailReg =/^\w+@\w+\.\w+(\.\w+)*$/ ; //匹配邮箱 格...
2018-06-15 11:19:09
1097
原创 小白模仿bootstrap-table写的分页插件
好久不写前端了,作为一个前端的菜鸟,还是要多加练习才行。这个分页插件用的是jquery,同时借鉴了bootstrap的表格和分页样式。下面先上效果图使用方法也比较简单。首先引入依赖 <link rel="stylesheet" href="/css/XLtable.css"> <script type="text/javascript" src="/js/jquery-3.2....
2018-06-14 20:17:46
351
原创 springboot的自定义Listener
springboot中启动监听器Listener的两种方式第一种是基于servlet的第二种是基于spring的第一种注意还需要在启动类加上@ServletComponentScan注解,这里用抽象方法主要是考虑到适配器设计模式,用另一个listener继承来实现@WebListener@Slf4jpublic abstract class BaseListener implements Se...
2018-06-12 10:37:31
2185
原创 秒杀系统设计架构与实现
最近做了一个点餐的平台,其中涉及到一个很重要的问题,活动期间的秒杀系统的实现。抢购/秒杀是如今很常见的一个应用场景,是高并发编程的一个挑战,在网上也找了一些资料,大部分都是理论,关于java的实现也是很少,就算有也是很简单的demo,为此,决定将此次实现的秒杀系统整理一番,发布出来。架构思路Question1: 由于要承受高并发,mysql在高并发情况下的性能下降尤其严重,下图为Mysql性能瓶颈...
2018-06-11 21:55:28
35815
20
原创 接口中写成员变量
今天又看到了一种新的写法,在接口中写成员变量相当于在类中用public final static 来定义。interface中默认的成员变量修饰是public final static
2018-06-06 09:15:43
1127
1
转载 IO-NIO 区别
一、概念 NIO即New IO,这个库是在JDK1.4中才引入的。NIO和IO有相同的作用和目的,但实现方式不同,NIO主要用到的是块,所以NIO的效率要比IO高很多。在Java API中提供了两套NIO,一套是针对标准输入输出NIO,另一套就是网络编程NIO。二、NIO和IO的主要区别下表总结了Java IO和NIO之间的主要区别:IONIO面向流面向缓冲阻塞IO非阻塞IO无选择器 ...
2018-05-31 13:07:58
239
原创 IO-NIO 你真的理解IO吗?
我们知道IO一般有两种用途,一种是磁盘读写,一种是网络socket传输。下图是IO的体系此图很明显的看出,IO设计存在对称性。即 Reader和Writer对称,InputStream和OutputStream对称。很重的一点,面试经常问道。使用了两个设计模式,即装饰模式和适配器模式。装饰器模式1.装饰器模式定义:装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通...
2018-05-31 12:28:30
367
转载 什么是DMA
DMA(Direct Memory Access),即直接存储器存取,是一种快速传送数据的机制。数据传递可以从适配卡到内存,从内存到适配卡或从一段内存到另一段内存。 利用它进行数据传送时不需要CPU的参与。每台电脑主机板上都有DMA控制器,通常计算机对其编程,并用一个适配器上的ROM(如软盘驱动控制器上的ROM)来储存程序,这些程序控制DMA传送数据。一旦控制器初始化完成,数据开始传送,DM...
2018-05-31 07:56:44
950
原创 linux修改ip地址的问题
修改了好几个小时,一直没成功,好多问题。记录一下这个是我的解决办法。https://www.landui.com/help/show-3889.html?iurcfa=0s8cy2除了这个之外,还要注意name=ifconfig中查询出来的前缀也要匹配。...
2018-05-30 09:15:35
240
原创 jdk8之深入理解 stream --lamdba
随着学习的深入,jdk8的改变和强大远超出我的理解。由lamdba表达式引起的再一次思考,先贴出来这一块的代码 List<CartDTO> cartDTOList = orderDTO.getOrderDetailList().stream().map((e) -> new CartDTO(e.getProductId(),e.getProduct...
2018-05-29 22:14:58
515
原创 HashMap之第n次回顾理解...
这次主要针对容量初始化问题进行回顾。一步一步看1.首先看一下构造方法 public HashMap(int initialCapacity) { this(initialCapacity, DEFAULT_LOAD_FACTOR);//第一个为用户输入的初始容量,第二个为默认的扩容因子,0.75f }2.一步一步往上看,作用很简单,保证用户输入的初始值在最大容量范围内 pu...
2018-05-29 09:21:39
180
原创 多线程读取数据库300万数据,写入到redis
先说一下业务场景。mysql单表300w条的数据,需要读取到rediis中。如果全部采用单线程的话效率过低,无法接受,因此考虑多线程并发处理。期间踩了好多坑。小伙伴们应该很好奇效率到底差多少,贴一下实验数据。/** * 单线程读取300w数据库时间为 15s 添加链表中总时长17s * 四线程读取300w数据库时间为 31ms左右 且添加链表总时长8s * ...
2018-05-27 19:23:33
9801
3
转载 Spring在代码中获取bean的几种方式
Spring在代码中获取bean的几种方式方法一:在初始化时保存ApplicationContext对象 方法二:通过Spring提供的utils类获取ApplicationContext对象 方法三:继承自抽象类ApplicationObjectSupport 方法四:继承自抽象类WebApplicationObjectSupport 方法五:实现接口ApplicationContextAwar...
2018-05-13 19:35:34
180
转载 mybatis逆向工程生成文件的解析
请观看此文,对增删改查的demo进行了比较详细的解释https://blog.csdn.net/biandous/article/details/65630783
2018-05-13 11:55:45
225
原创 excel的坑
将excel的内容导入数据库的时候,一直报空指针异常。原因是getLastRowNum的值大于实际行数,经过分析,后来发现excel中有一些只删除了数据,但是实际并没有删除表的结构,换句话说就是在excel工作表中该行依然存在,只不过数据为空。下面记录一下返回行数的apigetLastRowNum 如果sheet中一行数据都没有则返回-1,只有第一行有数据则返回0,最后有数据的行是第n行...
2018-05-11 10:24:42
490
原创 多线程实现资源共享的问题学习与总结
先来一句总结。因为一个线程只能启动一次,通过Thread实现线程时,线程和线程所要执行的任务是捆绑在一起的。也就使得一个任务只能启动一个线程,不同的线程执行的任务是不相同的,所以没有必要,也不能让两个线程共享彼此任务中的资源。一个任务可以启动多个线程,通过Runnable方式实现的线程,实际是开辟一个线程,将任务传递进去,由此线程执行。可以实例化多个 Thread对象,将同一任务传递进去,也就是一...
2018-05-09 15:47:56
492
原创 匿名内部类以及Lambda表达式的理解
首先,我的理解是匿名内部类和lambda的主要作用是简化代码。而且匿名内部类可以实现类似多重继承的作用。那么如何创建匿名内部类的对象呢。比较一下如下代码这段代码输出456 123第一次a指向匿名内部类,匿名内部类重写了test方法,所以输出456,第二次指向类A,所以输出123那么如何创建内部类的对象呢比如有如下所示的内部类 class A{ public void test(){ S...
2018-05-08 12:12:12
1116
1
原创 泛型T和Object的区别
Object范围非常广,而T从一开始就会限定这个类型(包括它可以限定类型为Object)。Object由于它是所有类的父类,所以会强制类型转换,而T从一开始在编码时(注意是在写代码时)就限定了某种具体类型,所以它不用强制类型转换。(之所以要强调在写代码时是因为泛型在虚拟机中会被JVM擦除掉它的具体类型信息,这点可参考泛型,在这里不做引申)。@Testpublic void test123() {...
2018-04-23 16:46:14
5695
转载 mysql中的索引优化
一、MYSQL的索引索引(Index):帮助Mysql高效获取数据的一种数据结构。用于提高查找效率,可以比作字典。可以简单理解为排好序的快速查找的数据结构。索引的作用:便于查询和排序(所以添加索引会影响where 语句与 order by 排序语句)。在数据之外,数据库还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用数据。这样就可以在这些数据结构上实现高级查找算法。这些数据结构就是索...
2018-04-14 07:38:22
180
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人