自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

苍茫的天涯是我的爱

苍茫的天涯是我的爱 绵绵的青山脚下花正开

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

原创 使用数字签名实现数据库记录防篡改(Java实现)

文章目录一、提出问题二、数字签名三、实现步骤第一部分:生成密钥并存储第二部分:进行数字签名第三部分:进行签名验证四、参考代码五、后记六、参考资料:一、提出问题最近在做一个项目,需要对一个现成的产品的数据库进行操作,增加额外的功能。为此,需要对该产品对数据库有什么操作进行研究(至于怎么监控一个产品的操作会引发什么数据库操作,以后会详细解说)。本来已经对数据库的操作了如指掌的,无意中发现数据库表里的每条记录都会有这样一个字段:这感觉不妙了,字段名叫signature,顾名思义,就是签名的意思呀。难道数据库

2020-12-29 09:37:39 1367

原创 springboot+LogBack日志整合(部分源码及应用详解)

springboot+LogBack日志整合(部分源码及应用详解)文章目录springboot+LogBack日志整合(部分源码及应用详解)springboot整合logback的误区下面开始介绍logback的使用logback-spring.xml配置文件介绍springboot整合logback的误区好多人在做springbott+logback整合的时候做了如下的引用<dependency> <groupId>org.slf4j</groupId>

2020-12-25 11:20:01 549

原创 redisson--分布式锁

1.依赖引入<dependency> <groupId>org.redisson</groupId> <artifactId>redisson</artifactId> <version>3.8.2</version></dependency>2.获取RedisClientpackage com.example.demo.lock;import org.redisson.Re

2020-07-23 15:16:19 167

原创 activeMq的使用

引入依赖<!--ActiveMq--><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-activemq</artifactId> <version>1.5.0.RELEASE</version></dependency><!--消息.

2020-07-23 15:09:35 188

原创 guava与redisson的BloomFilter

引入依赖<!--jedis--><dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version></dependency><!--guava--><dependency> <groupId&

2020-07-23 14:59:25 503

原创 Sentinel简介与使用

一、什么是Sentinel:Sentinel是阿里开源的项目,提供了流量控制、熔断降级、系统负载保护等多个维度来保障服务之间的稳定性。官网:https://github.com/alibaba/Sentinel/wikiSentinel主要特性:Sentinel与Hystrix的区别关于Sentinel与Hystrix的区别见:https://yq.aliyun.com/articles/633786/总体来说:Hystrix常用的线程池隔离会造成线程上下切换的overhead比较大;Hyst

2020-05-29 14:03:32 7676

原创 Mybatis-association-collection-discriminator

使用mybatis,在写映射文件mapping.xml 中的resultMap时,出现元素类型为 “resultMap” 的内容必须匹配 “(constructor?,id*,result*,association*,collection*,discriminator?)”的错误,检查发现resultMap中元素的顺序应按照括号中内容的顺序,也就是id、result、association、co...

2019-12-27 10:59:39 217 1

原创 [总结]Mybatis入参占位符#遇到的问题

SQL片段<select id="selectBuildingInfoByQueryMap" resultType="java.util.Map"> SELECT t1.building_id buildingId,t1.building_name building,t1.community_name community,t1.la...

2019-09-29 10:24:03 605

原创 多线程入门

一:进程与线程的区别每个正在系统上运行的程序都是一个进程。每个进程包含一到多个线程。线程是一组指令的集合,或者是程序的特殊段,它可以在程序里独立执行。也可以把它理解为代码运行的上下文。所以线程基本上是轻量级的进程,它负责在单个程序里执行多任务。通常由操作系统负责多个线程的调度和执行。使用线程可以把占据时间长的程序中的任务放到后台去处理,程序的运行速度可能加快,在一些等待的任务实现上如用户输入、...

2019-08-08 17:30:29 103

原创 多线程同步

一.什么是线程安全1.1为什么会有线程安全当多个线程同时共享,同一个全局变量或静态变量,做写的操作时,可能会发生数据冲突问题,也就是线程安全问题。但是做读操作是不会发生数据冲突问题。二.案例需求现在有100张火车票,有两个窗口同时抢火车票,请使用多线程模拟抢票效果。二.线程不安全的情况/** * @description 线程不安全 * @date 2019/8/5 13:37 ...

2019-08-08 09:39:18 64

原创 两款好用的IDEA插件

Alibaba Java Coding Guidelines 阿里巴巴代码规范Translation 谷歌的翻译插件

2019-07-31 18:23:57 73

原创 解决百度网盘限速问题

效果图:安装说明本软件需要安装浏览器插件和客户端下载地址微云:https://share.weiyun.com/2d1d66fb70779a7ee6938c102f25798f 密码:7vtB9P客户端安装在上面这个链接里有谷歌浏览器扩展插件和360等其他浏览器等扩展插件,以及Mac版和Windows版的客户端压缩包。Mac:解压正常安装。安装客户端时若出现【身份不明】弹窗,参考h...

2019-07-31 16:05:41 1959

原创 非JAVAWEB项目提供Http接口调用实现

package httptest;import com.google.gson.Gson;import com.google.gson.reflect.TypeToken;import com.sun.net.httpserver.HttpExchange;import com.sun.net.httpserver.HttpHandler;import com.sun.net.http...

2019-07-07 02:28:25 2011

原创 JAVA异步

很多时候我们都希望能够最大的利用资源,比如在进行IO操作的时候尽可能的避免同步阻塞的等待,因为这会浪费CPU的资源。如果在有可读的数据的时候能够通知程序执行读操作甚至由操作系统内核帮助我们完成数据的拷贝,这再好不过了。从NIO到CompletableFuture、Lambda、Fork/Join,java一直在努力让程序尽可能变的异步甚至拥有更高的并行度,这一点一些函数式语言做的比较好,因此jav...

2019-07-03 09:31:40 2574 1

原创 JAVA实现Excel的导入导出

一.概述1.excel读写技术2.区别二.jxl读写基础代码1.从数据库将数据导出到excel表格public class JxlExcel {public static void main(String[] args) { //创建Excel文件 String[] title= {"姓名","课程名","分数"}; File file=new File("f:/sheet1...

2019-06-25 16:00:19 115

原创 Excel中取出的日期数字更改为日期

如果excel中的日期是2016-8-23,取出的值是42606,此数字是距离1900年1月1日的天数,以下是转换成2016-8-23格式代码Calendar c = new GregorianCalendar(1900,0,-1); Date d = c.getTime(); System.out.println(d.toLocaleString()); Date _d = ...

2019-06-25 13:40:09 516

原创 Redis缓存击穿

什么是缓存击穿在谈论缓存击穿之前,我们先来回忆下从缓存中加载数据的逻辑,如下图所示因此,如果黑客每次故意查询一个在缓存内必然不存在的数据,导致每次请求都要去存储层去查询,这样缓存就失去了意义。如果在大流量下数据库可能挂掉。这就是缓存击穿。我们正常人在登录首页的时候,都是根据userID来命中数据,然而黑客的目的是破坏你的系统,黑客可以随机生成一堆userID,然后将这些请求怼到你的服务器上...

2019-06-03 11:41:03 273

原创 RPC实现

1.目录整体结构如下1.服务端定义接口为HelloServicepackage cn.rpc.demo.service;/** * @author insulators * @date 2019/5/27 14:29 **/public interface HelloService { public void sayHello(String info);}2.在服...

2019-05-28 10:54:34 102

原创 ftp文件服务器搭建

查询系统是否已经开启ftp服务rpm -q vsftpd 安装vsftpd yum -y install vsftpd # -y表示不用输入确定,直接一路安装到底设置开机启动ftp systemctl enable vsftpd启动ftpsystemctl start vsftpd.service查看ftp是否已经启动ps -e |grep ftp...

2019-05-15 11:40:23 250

原创 Lunix FTP服务器搭建

检查安装vsftpd服务器以root进入终端后(其他账户进入终端的可以用su root 输入密码后进入root 模式)之后,在终端命令窗口输入以下命令进行验证:# rpm –qa | grep vsftpd。如果结果显示为“vsftpd-1.1.3-8”,则说明系统已经安装vsftpd服务器。若没有回复,即系统中没有安装。安装方式 2.1 安装方式一2.1.1rhel版本的系统光盘中带...

2019-05-14 13:55:44 264

原创 Mybatis中关于大于小于符号的转义写法

原因:xml解析错误具体写法:方式一:<<=>>=&’"<<=>>=&'"num &gt;= #{num}方式二<![CDATA[ sql语句 ]]>示例:num <![CDATA[ >= ]]> #{num}...

2019-05-08 11:50:57 139

原创 JAVA8新特性流式处理

1.流式处理简介及过程java8的流式处理极大的简化了对于集合的操作,实际上不光是集合,包括数组、文件等,只要是可以转换成流,我们都可以借助流式处理,类似于我们写SQL语句一样对其进行操作。java8通过内部迭代来实现对流的处理,一个流式处理可以分为三个部分:转换成流、中间操作、终端操作。如下图:以集合为例,一个流式处理的操作我们首先需要调用stream()函数将其转换成流,然后再调用相应的...

2019-04-23 11:20:43 259

原创 JAVA8数据流式处理Lambda表达式

Java 8新增的Lambda表达式,我们可以很方便地并行操作大集合,刚刚接触java8,Lambda还是挺好用的,目前接触的也不多,给大家举几个例子(后续有关于Lambda的补充也会继续更新此篇博客)废话不多说,咱们直接进入例子1、利用stream().forEach()循环处理List;List<String> list = Lists.newArrayList();//新...

2019-04-23 10:52:26 535

原创 Http协议简介

HTTP简介HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它...

2019-04-18 16:34:25 113

转载 Spring的时间和监听器

Application下抽象子类ApplicationContextEvent的下面有4个已经实现好的事件ContextClosedEvent(容器关闭时) ContextRefreshedEvent(容器刷新是) ContextStartedEvent(容器启动时候) ContextStoppedEvent(容器停止的时候) 同样,这四个事件都继承了ApplicationEvent,...

2019-04-09 14:27:33 284

原创 JAVA监听器Listener

什么是监听器监听器用于监听Web应用中某些对象的创建、销毁、增加,修改,删除等动作的发生,然后作出相应的响应处理。当监听范围的对象的状态发生变化的时候,服务器自动调用监听器对象中的方法。监听器的常用场景常用于统计网站在线人数、系统加载时进行信息初始化、统计网站的访问量等等。监听器的分类按监听的对象划分ServletContext对象的监听器HttpSession对象的监...

2019-04-09 14:15:29 219

转载 JAVA23种设计模式

一、什么是设计模式设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中都有相应...

2019-04-04 14:11:02 77

转载 动态代理机制

在学习Spring的时候,我们知道Spring主要有两大思想,一个是IoC,另一个就是AOP,对于IoC,依赖注入就不用多说了,而对于Spring的核心AOP来说,我们不但要知道怎么通过AOP来满足的我们的功能,我们更需要学习的是其底层是怎么样的一个原理,而AOP的原理就是java的动态代理机制,所以本篇随笔就是对java的动态机制进行一个回顾。在java的动态代理机制中,有两个重要的类或接口,...

2019-04-02 09:31:36 80

转载 JAVA反射

主要介绍以下几方面内容理解 Class 类理解 Java 的类加载机制学会使用 ClassLoader 进行类加载理解反射的机制掌握 Constructor、Method、Field 类的用法理解并掌握动态代理1.理解Class类  –对象照镜子后可以得到的信息:某个类的数据成员名、方法和构造器、某个类到底实现了哪些接口。对于每个类而言,JRE 都为其保留一个不变的 Class 类...

2019-04-01 11:08:53 115

转载 Spring AOP详解

AOPAOP(Aspect Oriented Programming),即面向切面编程,可以说是OOP(Object Oriented Programming,面向对象编程)的补充和完善。OOP引入封装、继承、多态等概念来建立一种对象层次结构,用于模拟公共行为的一个集合。不过OOP允许开发者定义纵向的关系,但并不适合定义横向的关系,例如日志功能。日志代码往往横向地散布在所有对象层次中,而与它...

2019-03-29 15:09:01 58

转载 java集合框架-List集合ArrayList和LinkedList详解

底层是基于数组,(数组在内存中分配连续的内存空间)是对数组的升级,长度是动态的。数组默认长度是10,当添加数据超越当前数组长度时,就会进行扩容,扩容长度是之前的1.5倍,要对之前的数组对象进行复制,所以只有每次扩容时相对性能开销大一些。源码(jdk 1.8):1.非指定位置添加元素// 1. 添加元素 public boolean add(E e) { ensureC...

2019-03-27 09:54:36 131

原创 Redis的7个应用场景

一:缓存——热数据热点数据(经常会被查询,但是不经常被修改或者删除的数据),首选是使用redis缓存,毕竟强大到冒泡的QPS和极强的稳定性不是所有类似工具都有的,而且相比于memcached还提供了丰富的数据类型可以使用,另外,内存中的数据也提供了AOF和RDB等持久化机制可以选择,要冷、热的还是忽冷忽热的都可选。结合具体应用需要注意一下:很多人用spring的AOP来构建redis缓存的自动...

2019-03-26 17:22:08 228

转载 Spring中定时器的实现

在一些工作需要使用到定时器,Spring很好的集成了定时器的功能!在Spring 中使用Quartz,本文介绍Spring3.0以后自主开发的定时任务工具,spring task,可以将它比作一个轻量级的Quartz,而且使用起来很简单,除spring相关的包外不需要额外的包,下面介绍两种方式实现Spring定时器功能,一种是基于xml配置方式,另外一种是基于注解的方式,大家根据自己的项目选择适...

2019-03-26 14:04:08 131

转载 MySQL分区和分表

一、概念1.为什么要分表和分区?日常开发中我们经常会遇到大表的情况,所谓的大表是指存储了百万级乃至千万级条记录的表。这样的表过于庞大,导致数据库在查询和插入的时候耗时太长,性能低下,如果涉及联合查询的情况,性能会更加糟糕。分表和表分区的目的就是减少数据库的负担,提高数据库的效率,通常点来讲就是提高表的增删改查效率。2.什么是分表?分表是将一个大表按照一定的规则分解成多张具有独立存储空间的实...

2019-03-22 10:03:09 54

转载 MYSQL优化(索引创建规则)

一、SQL语句优化(1)使用limit对查询结果的记录进行限定(2)避免select *,将需要查找的字段列出来(3)使用连接(join)来代替子查询(4)拆分大的delete或insert语句二、选择合适的数据类型(1)使用可存下数据的最小的数据类型,整型 < date,time < char,varchar < blob(2)使用简单的数据类型,整型比字符处理开...

2019-03-22 09:13:18 78

转载 MySQL慢查询(一) - 开启慢查询

一、简介开启慢查询日志,可以让MySQL记录下查询超过指定时间的语句,通过定位分析性能的瓶颈,才能更好的优化数据库系统的性能。二、参数说明slow_query_log 慢查询开启状态slow_query_log_file 慢查询日志存放的位置(这个目录需要MySQL的运行帐号的可写权限,一般设置为MySQL的数据存放目录)long_query_time 查询超过多少秒才记录三、设置步骤...

2019-03-22 09:04:30 48

转载 如何正确的建立MySQL索引

1、较频繁地作为查询条件的字段这个都知道。什么是教频繁呢?分析你执行的所有SQL语句。最好将他们一个个都列出来。然后分析,发现其中有些字段在大部分的SQL语句查询时候都会用到,那么就果断为他建立索引。2、唯一性太差的字段不适合建立索引什么是唯一性太差的字段。如状态字段、类型字段。那些只存储固定几个值的字段,例如用户登录状态、消息的status等。这个涉及到了索引扫描的特性。例如:通过索引查找...

2019-03-22 08:43:03 82

转载 redis的过期时间和过期删除机制

一:设置过期时间redis有四种命令可以用于设置键的生存时间和过期时间: EXPIRE <KEY> <TTL> : 将键的生存时间设为 ttl 秒 PEXPIRE <KEY> <TTL> :将键的生存时间设为 ttl 毫秒 EXPIREAT <KEY> <timestamp> :将键的过期时间设为 ti...

2019-03-21 08:49:27 471

转载 Mybatis入参问题

单个参数public List<XXBean> getXXBeanList(String xxCode); <select id="getXXXBeanList" parameterType="java.lang.String" resultType="XXBean">  select t.* from tableName t where t.id= #{i...

2019-03-20 11:28:41 113

转载 MYSQL性能优化的最佳20+条经验

为查询缓存优化你的查询大多数的MySQL服务器都开启了查询缓存。这是提高性最有效的方法之一,而且这是被MySQL的数据库引擎处理的。当有很多相同的查询被执行了多次的时候,这些查询结果会被放到一个缓存中,这样,后续的相同的查询就不用操作表而直接访问缓存结果了。这里最主要的问题是,对于程序员来说,这个事情是很容易被忽略的。因为,我们某些查询语句会让MySQL不使用缓存。请看下面的示例:// ...

2019-03-20 09:02:30 80

空空如也

空空如也

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

TA关注的人

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