自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

yun_ld的博客

岁月长衣裳薄

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

转载 MYSQL 索引长度的限制

myisam表,单列索引,最大长度不能超过 1000 bytes;innodb表,单列索引,最大长度不能超过 767 bytes;utf8 编码时 一个字符占三个字节varchar 型能建立索引的最大长度分别为myisam 1000/3 333innodb 767/3 255utf8mb4 编码时 一个字符占四个字节varchar 型能建立索引的最大长度分别为myisam 1000/4 250innodb 767/4...

2020-06-27 19:04:57 1035

原创 HotSpot中的OopMap、Safe Point和Safe Region

1.OopMap在正式的GC之前,要进行可达性分析来标记出将来可能要宣告死亡的对象。如果每次GC的时候都要遍历所有的引用,这样的工作量是非常大的。因为在可达性分析的时候要保证期间不发生引用关系的变化,所有执行线程要停顿等待,称为“Stop The World”,程序中的线程需要停止来配合可达性分析。所以,每次直接遍历整个引用链肯定是不现实的。 为了应对这种尴尬的问题,最早有保守式GC和后来的准确式GC。这里准确式GC就会提到一个OopMap,用来保存类型的映射表。保守式GC...

2020-05-22 19:01:19 427

原创 引用计数算法和可达性分析算法

引用计数算法:给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1;当引用失效时,计数器值就减1;任何时刻计数器为0的对象就是不可能再被使用的。引用计数算法(ReferenceCounting)的实现简单,判定效率也很高,但是在Java虚拟机里面没有选用引用计数算法来管理内存,其中最主要的原因是它很难解决对象之间相互循环引用的问题。比如俩个对象objA和objB都有字段i...

2020-04-06 15:28:38 835

原创 指针碰撞和空闲列表

虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,那必须先执行相应的类加载过程。在类加载检查通过后,接下来虚拟机将为新生对象分配内存。对象所需内存的大小在类加载完成后便可完全确定,为对象分配空间的任务等同于把一块确定大小的内存从Java堆中划分出来。假设Java堆中内存是绝对规整的,...

2020-03-25 20:07:24 5965 5

原创 使用SHA1withRSA算法进行签名和验签

package com.hhh.nnn.test;import org.apache.commons.codec.binary.Base64;import java.nio.charset.StandardCharsets;import java.security.KeyPair;import java.security.KeyPairGenerator;import java.s...

2020-02-21 10:35:32 3258 2

转载 CAS单点登录原理解析

1、基于Cookie的单点登录的回顾 基于Cookie的单点登录核心原理: 将用户名密码加密之后存于Cookie中,之后访问网站时在过滤器(filter)中校验用户权限,如果没有权限则从Cookie中取出用户名密码进行登录,让用户从某种意义上觉得只登录了一次。 该方式缺点就是多次传送用户名密码,增加被盗风险,以及不能跨域。同时www.qiandu.co...

2020-02-13 10:44:47 359

原创 时间格式 YYYY-MM-dd 的 bug

前一阵子,我们项目中遇到了一个 bug,时间格式的bug,2019-12-31那天显示成了2020-12-31,在网上一搜,也有其他人遇到了同样的 bug,这里就对这个问题记录一下。一直以来使用yyyy 和 YYYY 结果都一样,也就没有去研究它们之间的区别,但是这次遇到了这个 bug,所以就去研究了一下。那么产生这个 bug 的原因是什么呢?其实很简单,就是把 yyyy-MM-dd 写成了...

2020-01-17 21:04:56 688

原创 MD5 加密结果

MD5的典型应用是对一段信息(Message)产生信息摘要(Message-Digest),以防止被篡改。MD5加密是无法解密的,网上有一些在线工具解密,但这个解密并不是真正的解密,只是通过穷举法,明文密文对应查询数据库来达到解密的目的。MD5 加密后的位数有两种:16 位与 32 位。16 位实际上是从 32 位字符串中取中间的第 9 位到第 24 位的部分,用 Java 语言来说,即:...

2020-01-08 22:20:42 1978

转载 一个故事讲完 HTTPS

1 序言今天来聊一聊https 安全传输的原理。在开始之前,我们来虚构两个人物, 一个是位于中国的张大胖(怎么又是你?!), 还有一个是位于米国的Bill (怎么还是你?!)。这俩哥们隔着千山万水,通过网络联系上了, 两个人臭味相投,聊得火热。此时正值米国大选, 张大胖亲切地“致电”Bill, 对米国总统大选的情况表示强烈地关注。 Bill则回电说谢谢关心米国人的事情我们米国...

2019-12-14 13:54:07 413

转载 图解公钥与私钥

1. 鲍勃有两把钥匙,一把是公钥,另一把是私钥。2. 鲍勃把公钥送给他的朋友们----帕蒂、道格、苏珊----每人一把。3. 苏珊要给鲍勃写一封保密的信。她写完后用鲍勃的公钥加密,就可以达到保密的效果。4. 鲍勃收信后,用私钥解密,就看到了信件内容。这里要强调的是,只要鲍勃的私钥不泄露,这封信就是安全的,即使落在别人手里,也无法解密。5. 鲍勃给苏珊回信,决定采用"数字签名"。他写...

2019-12-14 13:39:40 307

原创 FastJson和Jackson对null的处理

一、fastJson1、fastJson在转换java对象为json的时候,默认是不序列化null值对应的key的。也就是说当对象里面的属性为空的时候,在转换成json时,不序列化那些为null值的属性。public static void main(String[] args) { Student student = new Student(); student.setName...

2019-12-11 20:08:56 1147 2

原创 Twitter雪花算法的java实现

概述SnowFlake算法是Twitter设计的一个可以在分布式系统中生成唯一的ID的算法,它可以满足Twitter每秒上万条消息ID分配的请求,这些消息ID是唯一的且有大致的递增顺序。原理SnowFlake算法产生的ID是一个64位的整型,结构如下(每一部分用“-”符号分隔):0 - 0000000000 0000000000 0000000000 0000000000 0...

2019-12-05 21:27:21 233 1

原创 @JsonInclude - jackSon注解

使用jackSon序列化时,默认情况下,如果字段status为null,则序列化结果就为:{...,"status": null,...}那如果有好几个字段都是null,那序列化的结果就会有很多这样的null,这样就不太好了,而使用@JsonInclude注解就可以解决这个问题。下面详细说明。普通Java类(pojo):@JsonInclude(JsonInclu...

2019-11-27 19:55:39 1172

原创 IDEA远程调试Tomcat

一、linux环境修改tomcat配置vi tomcat8/bin/catalina.sh # Example (all one line)# LOGGING_MANAGER="-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManage##...

2019-11-22 19:33:42 157

原创 nohup的执行jar包

Java springboot项目打包为jar包,在linux上部署方式跟war包不一样。我们使用下面的命令进行部署:一、下面的命令表示在当前ssh窗口,可按CTRL + C打断程序运行,或者直接关闭窗口,则程序直接退出java -jar XXX.jar二、下面的命令表示在当窗口关闭时,程序才会中止运行。&代表让该命令在后台执行。java -jar XXX.jar ...

2019-11-13 19:41:07 382

原创 @Scheduled注解-springMVC中的定时任务

在日常开发中,有时候需要用到定时任务,而spring提供了一个简单的方式让我们来实现定时任务,一个简单的注解@Scheduled即可实现。配置:要使用@Scheduled注解,我们需要在applicationContext.xml中配置如下:<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www...

2019-11-06 19:37:37 563

原创 linux定时任务-crontab

crond 是linux用来定期执行程序的命令。当安装完成操作系统之后,默认便会启动此 任务调度命令。crond命令每分钟会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。语法: *  *  *  *  *  command 分 时 日 月 周 命令(注意:日和周不要组合) 第1列表示分钟1~59 每分钟用*或者 */1表示 第2列表...

2019-10-30 19:12:13 116

原创 策略模式—设计模式

设计模式中的策略模式下面是某个市场人员接到单后的报价策略,报价策略很复杂,可以简单作如下分类:普通客户小批量,不打折普通客户大 批量,打9折老 客户小批量,打8.5折老 客户大批量,打8折我们通常可以适用条件语句进行处理,代码如下:public class Test { public double getPrice(String type ,double price )...

2019-10-24 22:43:49 87

转载 杂谈:我为什么开始写博客,我又不是什么大犇

杂谈:我为什么开始写博客,我又不是什么大犇?我写博客只是自己学习总结的一种方式首先我很多遇见的问题都是在很多博客中找到解决方案的,我想我在学习路上积累的东西也可以做个总结,我写的博客很多就是自己的学习总结,方便以后自己查阅。刚开始并没有给别人看的意思,写的很随意,自己看得懂就行。但渐渐的发现我写的东西有人评论了,访问量多了一点,我就觉得还是有人认真看的,我还是认真点吧,然后就开始用md写了...

2019-10-16 19:03:18 108

原创 适配器模式—设计模式

设计模式中的适配器模式适配器模式,把一个类接口变化成客户端所期待的另一个类的接口,使原来因接口不匹配而无法一起工作的类能够一起工作。Java源码中的例子:如Java IO中的java.io.InputStreamReader(InputStream) 和java.io.OutputStreamWriter(OutputStream)就是典型的适配器模式,通过InputStreamReader、...

2019-10-11 19:39:03 154

原创 mysql聚集索引与非聚集索引

聚集索引:InnoDB存储引擎表是索引组织表,即按照主键的顺序存储数据。聚集索引(clustered index)就是按照每张表的主键构造一棵B+树,树中的叶子节点存放着表中的行记录数据,因此,也将聚集索引的叶子节点称为数据页;非叶子节点中存放着仅仅是键值和指向叶子节点的偏移量。每个叶子节点(数据页)都通过一个双向链表进行连接。由于实际的数据页只能按照一棵B+树进行排序,因此数据库中每张...

2019-09-28 13:45:56 152

原创 Linux管道命令grep 和 wc

grep命令grep(global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。选项:-a 不要忽略二进制数据。-A<显示列数> 除了显示符合范本样式的那一行之外,并显示该行之后的内容。-b 在显示...

2019-09-25 19:27:19 2212

原创 >/dev/null 2>&1 与 2>&1 >/dev/null

1. 每个进程都有默认的三个文件描述符:标准输入 0标准输出 1标准错误 22. /dev/null/dev/null,可以称为黑洞,是一个只写文件,丢弃一切写入其中的数据。3. >/dev/null 2>&1前面省略了标准输出1,原型为 1>/dev/null 2>&1理解为:...

2019-09-22 10:43:40 194

原创 mybatis中一级缓存和二级缓存

MyBatis的缓存分为两种:一级缓存,一级缓存是SqlSession级别的缓存,对于相同的查询,会从缓存中返回结果而不是查询数据库 二级缓存,二级缓存是Mapper级别的缓存,定义在Mapper文件的<cache>标签中并需要开启此缓存,多个Mapper文件可以共用一个缓存,依赖<cache-ref>标签配置mybatis的一级缓存:  MyBatis会在表示会...

2019-09-18 22:52:12 215

原创 logback日志配置

logback.xml配置简单输出到控制台:<?xml version="1.0" encoding="UTF-8"?><configuration> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <!-- encoders are ass...

2019-09-15 15:38:38 753

原创 Nginx实现负载均衡

Nginx代理服务的配置说明1、下面的配置,当代理遇到状态码为404时,我们把404页面导向百度。error_page 404 https://www.baidu.com; #错误页然而这个配置并没有起作用。如果我们想让他起作用,我们必须配合着下面的配置一起使用。proxy_intercept_errors on; #如果被代理服务器返回的状态码为400或者大于400,设...

2019-09-11 19:09:14 125

原创 Nginx配置详解

一、Nginx常用功能1、Http代理,反向代理:作为web服务器最常用的功能之一,尤其是反向代理。这里我给来2张图,对正向代理与反响代理做个诠释,具体细节,大家可以翻阅下资料。Nginx在做反向代理时,提供性能稳定,并且能够提供配置灵活的转发功能。Nginx可以根据不同的正则匹配,采取不同的转发策略,比如图片文件结尾的走文件服务器,动态页面走web服务器,只要你正则写的没问题...

2019-09-07 15:51:58 186

原创 mysql主从数据库

一、主从数据库的区别从数据库(Slave)是主数据库的备份,当主数据库(Master)变化时从数据库要更新,这些数据库软件可以设计更新周期。这是提高信息安全的手段。主从数据库服务器不在一个地理位置上,当发生意外时数据库可以保存。(1) 主从分工其中Master负责写操作的负载,也就是说一切写的操作都在Master上进行,而读的操作则分摊到Slave上进行。这样一来的可以大大提高读取的效...

2019-09-07 08:54:20 186

原创 可重入锁

在JAVA中,内置锁都是可重入的,也就是说,如果某个线程试图获取一个已经由它自己持有的锁时,那么这个请求会立刻成功,并且会将这个锁的计数值加1,而当线程退出同步代码块时,计数器将会递减,当计数值等于0时,锁释放。new Thread() { @Override public void run() { // 第一次获得锁 synchroniz...

2019-09-03 19:32:57 159

原创 DDOS-分布式拒绝服务

DDOS 不是一种攻击,而是一大类攻击的总称。它有几十种类型,新的攻击方法还在不断发明出来。网站运行的各个环节,都可以是攻击目标。只要把一个环节攻破,使得整个流程跑不起来,拒绝任何类型服务,就达到了瘫痪服务的目的。其中,比较常见的一种攻击是 cc 攻击。它就是简单粗暴地送来大量正常的请求,超出服务器的最大承受量,导致宕机。什么是DOS和DDOS?要了解DDOS攻击是什么,首先要了...

2019-08-24 16:46:11 661

原创 XSS-跨站脚本攻击

跨站脚本攻击(Cross Site Scripting),缩写为XSS。恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。防御XSS攻击Servlet的方式1、继承HttpServletRequestWrapper,实现对请求参数的过滤/** * xss请求适配器 */pub...

2019-08-24 11:37:53 545 1

原创 CSRF的防御

上一篇文章介绍什么是CSRF,CSRF-跨站请求伪造【Java】。CSRF通常从第三方网站发起,被攻击的网站无法防止攻击发生,只能通过增强自己网站针对CSRF的防护能力来提升安全性。上文中讲了CSRF的两个特点: CSRF(通常)发生在第三方域名。 CSRF攻击者不能获取到Cookie等信息,只是使用。 针对这两点,我们可以专门制定防护策略,如下: 阻止不明...

2019-08-24 10:32:12 2032

原创 CSRF-跨站请求伪造

CSRF攻击全称为:Cross-site request forgery,直接翻译为:跨站请求伪造。直接看名称还是有点难以理解,容易跟XSS攻击搞混。在讲解如何防御之前,首先看看如何攻击,举个简单的攻击例子:小明的悲惨遭遇这一天,小明同学百无聊赖地刷着Gmail邮件。大部分都是没营养的通知、验证码、聊天记录之类。但有一封邮件引起了小明的注意:甩卖比特币,一个只要998!!聪...

2019-08-24 09:38:49 821

原创 fastJson的@JSONField和jackson的@JsonProperty

在开发当中经常用到fastJson或jackson进行序列化和反序列化。下面分别介绍jackson@JsonProperty注解和fastJson的@JSONField注解。一、jackson的@JsonProperty使用<dependency> <groupId>com.fasterxml.jackson.core</groupId> ...

2019-08-18 11:59:33 5014

原创 spring注解@Configuration

@Configuration的作用@Configuration用于定义配置类,可替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,并用于构建bean定义,初始化Spring容器。一、@Conf...

2019-08-18 09:43:29 1021

原创 Java线程池ThreadPoolExecutor

线程池的使用使用线程池管理线程可以最大程度的利用线程,节省资源消耗,它通过利用已有的线程多次循环执行多个任务从而提高系统的处理能力。我们可以通过java.util.concurrent.ThreadPoolExecutor类来创建线程池。但是除了使用ThreadPoolExecutor,还可以使用Executors中相应的便捷方法来创建线程池,比如Executors.newFixedThr...

2019-08-17 10:21:26 989

原创 观察者模式—设计模式

设计模式中的观察者模式观察者模式定义了一个一对多的依赖关系,让多个观察者对象同时监听同一个主题对象。当这个主题状态发生改变时,会通知所有观察者对象,让它们自动更新自己。模型结构:① 抽象主题角色(Subject): 把所有对观察者对象的引用保存在一个集合中,每个抽象主题角色都可以有任意数量的观察者。抽象主题提供一个接口,可以增加和删除观察者角色。一般用一个抽象类和接口来实现。② 具...

2019-08-14 21:56:49 850

原创 模板方法模式—设计模式

设计模式中的模板方法模式模板方法模式是类的行为模式。准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。这就是模板方法模式的用意。比如定义一个操作中的算法的骨架,将步骤延迟到子类中。模板方法使得子类能够不去改变一个算法的结构即可重定义算法的某些特定步骤。模...

2019-08-14 21:40:51 833

原创 代理模式—设计模式

设计模式中的代理模式为某个对象提供一个代理,从而控制这个代理的访问。代理类和委托类具有共同的父类或父接口,这样在任何使用委托类对象的地方都可以使用代理类对象替代。代理类负责请求的预处理、过滤、将请求分配给委托类处理、以及委托类处理完请求的后续处理。代理模式分为两种: ①.静态代理 ②.动态代理一、静态代理由程序员创建或工具生成代理类的源码,再编译代理类。...

2019-08-14 21:03:37 860

原创 装饰者模式—设计模式

设计模式中的装饰者模式装饰(Decorate)模式又称为包装(Wrapper)模式。可以动态的为一个对象增加新的功能。装饰模式是一种用于代替继承的技术,无须通过继承增加子类就能扩展对象的新功能。使用对象的关联关系代替继承关系,更加灵活,同时避免类型体系的快速膨胀。举一个简单的汽车例子,创造每一种功能的汽车都需要继承车的父类进行实现,那么当我们需要既能路上行驶又能水上行驶的车又得继续继承父类拓展...

2019-08-14 20:08:00 844

空空如也

空空如也

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

TA关注的人

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