java
forwardMyLife
只争朝夕
展开
-
利用注解将对象的字符串类型字段脱敏处理
利用注解将对象的字符串类型字段脱敏处理原创 2022-03-06 22:05:56 · 812 阅读 · 0 评论 -
java程序在发生异常后是如何能精准的定位到源码的行数
java程序在发生异常后是如何能精准的定位到源码的行数原创 2022-01-23 23:15:17 · 1679 阅读 · 1 评论 -
springboot动态调整日志级别
1.springboot使用log4j2springboot使用的common-logging,底层兼容各种日志框架如,log4j2,slf4,logback等,默认底层使用的是logback,我们可以去除logback的依赖,引入log4j2的starter,如下:2.指定日志配置文件和日志等级(此配置不限于log4j2,也适用于其他日志框架)在resources目录下加入log4j2的xml配置文件,默认spring-boot会加载classpath下面的名为log4j2.xml,或log4j原创 2021-10-10 22:43:52 · 5886 阅读 · 0 评论 -
java序列化工具 protoStuff的使用
1.前言在互联网快速发展的今天,互联网架构也在不断的升级。而数据的传输和存贮是互联网系统中不可或缺的一部分。举个简单的例子,目前微服务已经很普及了,就拿dubbo来说,不管用jdk自带的序列化,还是dubbo的序列化,效果都不尽然人意。市面上高性能的序列化工具也有例如kryo,pb。但是kryo虽然序列化出来的体积小,传输快,但是不支持前后兼容。(例如序列化前和序列化后,对象的字段必须是一样的,不能多也不能少,否则就会报错),pb整体都不错,体积小,传输快,前后兼容。但是要自己编写pb文件,使用门槛高。原创 2020-12-27 21:35:37 · 4298 阅读 · 4 评论 -
gson将json字符串转换成map对象,其中的整数变成了double类型
1.json的数据类型数字(整数,浮点数)字符串(用双引号包裹)布尔类型(true或者false)对象(用大括号包起来)数组(中括号包起来)NULL类型(null)在使用gson将json字符串转换成Map<String,Object> 对象时,我发现原先json字符串中的整形,取出来变成了double类型,当我取出对应的字段直接toString的时候,再转成Integer时,会抛异常,因为double类型的字符串是不能直接转成整数的。如下:Gson gson = ne原创 2020-10-25 17:34:31 · 2912 阅读 · 0 评论 -
http请求中对特殊字符的处理
1.http传参的特殊字符在使用http协议进行传参时,如果请求的参数带有一些特殊字符,如 +,%,=等,如果没有进行URL编码可能在发送请求的时候,后端例如Java的web的httpServletRequest会对取出来的参数自动进行URLDecode 操作,得到的值和我们的原本想传的参数不是同一个了,例如http的get请求,http://localhost:8080/urlTestV2?p=+123p参数中,带有+号,+号在http传参中属于特殊字符,所以在后端会被自动识别成空格。所以使用ge原创 2020-08-16 15:23:37 · 12911 阅读 · 0 评论 -
jdk8的日期类的使用
1.关于日期和时间的基本知识由于jdk8以前的时间日期类设计的不足,jdk8引入了java.time包来作为新的日期时间处理类。以前的Date类,Calendar类都可以被新的api取代,新的api的大多数类都是线程安全的,加减时间返回的都是一个新的实体,不会改变原来对象的属性。了解jdk8的时间类之前,先了解下时间的基本知识。关于时间的相关名词含义GMTGreenwi...原创 2020-03-01 15:46:50 · 1255 阅读 · 0 评论 -
java泛型通配符
1.边界边界,如果使用泛型没有设置其边界的,那么其默认边界就是Object(向上转型),由于java泛型的机制,那些边界为object的方法只能调用Object的方法,如果要想泛型做更多的事,就必须设置其边界。使其转为更具体的类型,从而表现更多的行为。1.1上界<? extends MyClass> 表示继承自myClass这个类的类型。?号表示某种特定的类型通配符,这个我们后...原创 2019-11-24 11:23:35 · 250 阅读 · 0 评论 -
java加解密算法的简单运用
互联网虽然用起来方便,但是很容易信息泄露,被些别有用心的人攻击,为了保护网络的安全,加解密算法例如DES,AES,信息摘要MD5,SHA应运而生。java在jdk的包中也支持相关的加解密算法,底层通过spi扩展机制,加载不同的provider。其中有几个比较关键的类KeyGenerator :提供对称密钥生成器的功能,支持各种算法SecretKey:责保存对称密钥Cipher:负责完成...原创 2019-11-18 00:00:13 · 198 阅读 · 0 评论 -
为什么byte变量要&0xFF
1.最近看到一些java加密的代码,意外中发现如下一段代码 /**将二进制转换成16进制 */ public static String parseByte2HexStr(byte buf[]) { StringBuffer sb = new StringBuffer(); for (int i = 0; i < buf.length; i++) {...原创 2019-11-17 18:32:04 · 456 阅读 · 0 评论 -
jdk8特性之方法引用
方法引用:当在使用lambda表达式书写时,如果只是调用一个方法,就可以用方法应用代替,可以使代码更加简洁package com.core;import lombok.Builder;import lombok.Data;import org.junit.Test;import java.util.ArrayList;import java.util.List;public c...原创 2019-10-25 23:29:50 · 196 阅读 · 0 评论 -
使用jdk8的stream
1.Steam在jdk8中,steam是增强对集合数据的处理,提供了对集合数据操作的很多方法,可以串行和并行处理集合数据,效率很高,在一定的场景下上减少了多线程代码的编写,steam 需要结合lambda表达式,和方法引用等新特性,写出简洁高效的代码。高效的分类聚合操作,有mapReduce的味道。steam可以来自数据结构,数组,generator function,IO channel,2...原创 2019-09-08 10:22:02 · 696 阅读 · 0 评论 -
spring aop使用注解实现记录操作日志
我们在日常编程中,应该保持高内聚,低耦合,函数功能单一,代码可复用性,可移植性性高。当涉及到日志,缓存等功能是,我们可以根据业务需求,利用spring aop面向切面编程,把核心的功能和附加功能剥离开来使代码达到高复用的效果,比如用注解记录操作日志。1.引入相关依赖,这里使用springboot引入aop依赖。org.springframework.bootspring-boot-sta...原创 2019-09-05 00:07:44 · 531 阅读 · 0 评论 -
tomcat8.5配置https
1.使用jdk工具制作证书证书获取有2种形式,向CA获取,自己制作(不被信任)。我们通过jdk工具制作证书在命令行输入如下:keytool -genkey -alias "tomcat" -keyalg "RSA" -keystore "H:\tomcat-8.5-https\ssl_key\tomcat.keystore"-alias:证书的名字-keyalg:证书签名算法-va...原创 2019-05-11 17:03:52 · 1675 阅读 · 0 评论 -
ehcache的xml配置和基本使用
前言ehcache是一个由java实现的轻量级的缓存工具包,提供内存和磁盘的存贮,支持分布式,多种淘汰算法,LRU,LFU,FIFO,可以与很多框架整合。依赖 <dependency> <groupId>net.sf.ehcache</groupId> <artifactId>ehcache-co...原创 2019-04-25 15:12:03 · 4829 阅读 · 0 评论 -
spring的IoC原理
1.IoC简介IoC:控制反转,即把对象交由spring容器进行统一的管理,不需要再手动的new,不仅降低了代码的耦合性,而且提高了程序的易扩展性和健壮性。2.spring IoC容器初始化原理2.1 BeanDefinitionRegistry和BeanFactoryspring的初始化过程可以简化为,获取资源定位,载入资源,解析资源(例如xml声明的bean和注解声明的),由相应的Be...原创 2019-04-09 21:08:08 · 595 阅读 · 0 评论 -
spring的AOP的介绍和使用
AOP简介AOP:面向切面编程。于oop一样是一种软件的编程思想。 在日常的软件开发中,比如一个方法处理在处理核心的业务逻辑时,可能还要考虑到日志,事物,安全认证等方面,如果我们把这些代码都杂糅到一个方法里面,或者方法调用方法,会显得代码过于臃肿,不利于复用。有人说我们可以利用继承和委托来解决这个问题,但是继承会导致一个脆弱的体系。而aop更能优雅的解决问题。我们将最核心的方法只需要实现自己...原创 2018-04-21 22:58:16 · 210 阅读 · 0 评论 -
log4j2的配置和使用
log4j2Apache Log4j 2是对Log4j的升级,Log4j 1提供了显著的改进。在Logback的架构中修复一些固有问题时,提供了许多可用的改进。包括更先进的过滤,重载配置,支持 Log4j 1.2, SLF4J, Commons Logging 。可以将以前旧版本的日志代码,通过更换jar的方式,轻松过渡到log4j2。日志等级trace<debug<...原创 2018-04-30 14:33:19 · 1401 阅读 · 0 评论 -
spring的事物运用(含AOP管理事物)
事物事物有四个特性:原子性,一致性,隔离性,持久性。在日常开发对数据库事物操作是非常常见的。如果我们手动写jdbc代码,需要手动调用Connection类的 con.setAutoCommit(false);设置其不自动提交,在try-catch块中显式的调用rollback()函数。spring对事物的支持 PROPAGATION_REQUIRED 如果存在已经一个事...原创 2018-04-22 23:25:12 · 251 阅读 · 0 评论 -
解决eclipse无法断点调试JDK源码的问题
最近换了新版的eclipse,在jdk源码里面,打断点发现无法进入源码调试,程序直接跳过,已查资料发现自己eclipse配置的是jre环境的。 此处要配成jdk目录才有效 打开preferences,点击java ,在点击installed JRES 选中jre的目录,我这里只有一个,是我jdk的安装目录, 将JRE home配置成jdk的目录, 点击Restore Defau原创 2017-12-10 15:57:02 · 2865 阅读 · 0 评论 -
ReentrantLock源码解析
ReentrantLock的概念ReentrantLock是一个可重入的独占锁,即允许同一个线程获取多次,但是不允许多个线程同时获取锁。即又是一个互斥锁。 ReentrantLock有公平锁和非公平锁两种模式, 主要控制锁和释放锁的方法都是有一个类型为sync的成员变量控制的, private final Sync sync; abstract static class Sync exte原创 2017-12-31 01:16:17 · 102 阅读 · 0 评论 -
java的内部类详细介绍
什么是内部类把一个类的定义在另一个类定义的内部,即叫内部类,内部类有几种类型,内部类可以访问外部的所有成员(因为内部类会保存一个外部类的引用,这是编译器帮我们做的事情) 内部类可以定义外部内中,与外部类成员变量同级,这是见得比较多的。也可以定义在方法中,你几乎可以在任意的位置中定义内部类,只是对内部类的可见性会有影响。这个后面我会举例具体说明。内部类种类普通内部类: 嵌套类: 匿名内部类为什么原创 2018-01-03 22:18:40 · 202 阅读 · 0 评论 -
java中Synchronized用法介绍
synchronized关键字介绍java提供关键字synchronized用来防止多个线程对同一临界区进行访问时,产生的资源冲突。要解决资源冲突就要引入一个锁的概念, 所有的对象都含有单一的锁,。 synchronized可以用来修饰非静态方法public synchronized void a(){ *******};修饰同步代码块public synchronized void原创 2017-12-28 21:25:12 · 511 阅读 · 0 评论 -
java的wait(),notify(),notifyAll()用法介绍
当多线程并发的去执行任务,在进入临界区时为了使线程之间互不干扰,我们可以采用锁来避免同时使用资源产生冲突,例如synchronized修饰的代码块或函数,但是当一个任务与另一个任务的协作时,我们可以采用Object类提供的wait(),notify(),notfiyAll(),方法配合synchronized使用来完成任务与任务之间的握手。(Java SE5以后还提供了reetrantlock,co原创 2017-12-29 16:27:46 · 407 阅读 · 0 评论 -
ServerSocketChannel实现多Selector高并发server
本文中的主要代码转载自http://www.cnblogs.com/yueweimian/p/6262211.html,涉及到日志处理相关代码稍有修改和包名有修改,其他代码全部出自转载自上述链接的作者。 原作者的博文开头如下: 参考hbase RpcServer,编写了一个简洁版多Selector server,对nio怎么用,Selector如何选择事件会有更深入的认识。转载 2018-01-13 17:05:19 · 2086 阅读 · 0 评论 -
java实现多线程断点续传
断点续传的关键这里只针对http协议。 1.http请求中可以设置RANGE属性,用来设置返回数据的其实位置和结束位置 2.每个线程对同一个文件,不同的位置进行写入。可用RandomAccessFile的seek(long pos)方法,设置文件读写的起始位置。 3当暂停下载时,需要保存每个线程下载的进度。写进中间文件。 4.继续下载时,读取上次下载的进度,继续下载。 本文代码部分复原创 2018-01-22 20:54:48 · 690 阅读 · 0 评论 -
JAVA注解详解
注解java的注解也称作元数据,可以在代码中以注解的形式添加一些信息,以便在别的地方可以获取这些信息来做一些事情,java注解是SE5引入的。java注解应用是很广泛的,例如在spring,mybatis,javax。。等框架中都有应用,注解是低入侵式的,很方便代码的维护,而且注解是受到编译器保护的,减少了代码运行时出错的可能。 我们看几个lang包的注解,都是很常见的。@Overr...原创 2018-03-07 10:21:20 · 215 阅读 · 0 评论 -
采用spring+mybatis整合 : invalid username/password; logon denied异常的解决方案
整合spring+mybatis的时候抛出如下错误 登陆被拒绝?什么鬼,用户名和密码不正确,我用plsql都能连上,配置如下 spring.xml<context:property-placeholder location="classpath:db.properties"/> <bean id="dataSource" class="org.apache.c...原创 2018-03-15 14:36:44 · 8759 阅读 · 1 评论 -
使用jedisCluster操作redis集群
启动redis集群搭建redis集群,搭建具体过程如下 http://blog.csdn.net/lucky_ly/article/details/78703102 启动redis集群。 测试集群搭建在虚拟机的Linux系统下,客户机访问采用的windows环境下。 默认情况下redis只允许本机进行访问的。但我们为了方便测试,将redis.conf的bind 改为对应的Linux...原创 2018-03-15 22:25:49 · 844 阅读 · 0 评论 -
Java泛型详解
Java泛型泛型是很多语言都有得特性,泛型让代码更加的泛化,增加代码的通用性。但是java的泛型并不是1.0引入的,而是jdk5才引入的。为了向上兼容以前的老代码,java的泛型并不像C++,或别的语言的泛型那样强大,java的泛型是利用“擦除”实现的。泛型的类型信息仅存在与编译期,编译器结束后,就找不到任何使用泛型的痕迹了。其原理是 在大多数使用泛型的地方,编译器进行了类型检查和插入转型代...原创 2018-03-02 10:08:34 · 147 阅读 · 0 评论 -
SpringMVC的java配置+xml配置
javaConfig配置SpringMVC环境为JDK1.8+tomact8 在web3.0以前我们开发web项目都需要在web.xml中配置servlet,filter,等,3.0以后web容器提供基于注解为主的和自动化扫描配置上下文需要的类。web程序员从繁琐的xml文件配置中解脱出来。springMVC也提供也javaConfig的配置, 1.web.xml 必须为3.0 2....原创 2018-03-10 09:43:56 · 3239 阅读 · 0 评论 -
使用Nginx+Tomcat8搭建负载均衡服务器
Nginxnginx是当下运用最广泛的开源的反向代理服务器。 反向代理:即把外部来的请求,转发给被代理的服务器,再将返回的结果通过nginx返回给客户端。下面搭建搭建一个负载均衡服务器。安装Nginx相关软件 nginx-1.12.0.tar.gz apache-tomcat-8.5.15.tar.gz安装Nginx相关依赖nginx需要依赖一些环境 安装gcc...原创 2018-03-17 18:41:04 · 2023 阅读 · 0 评论 -
spingMVC存取session
springMVC对session中数据的操作,也提供了自己的api。一般我们操作session的值都在控制器中, 往session存取值,主要依靠Model类的addAttribute(key,value)。如果是请求转发的话,可以不必再控制器中添加@SessionAttributes的注解,names为字符串数组,数组中的元素,即对应model的addAttribute中的key。如果是重定...原创 2018-03-11 22:41:49 · 241 阅读 · 0 评论 -
spring加载多个properties文件出现 Could not resolve placeholder
以前自己建些整合ssm或ssh的demo或项目都是习惯,将多数属性配置放在同意一个配置文件中,例如 而在实际项目中,spriing的xml配置和外部的属性文件配置,都是按功能分开的,易于后期维护。今天在开发中就把自己坑惨了。 例如我有一个spring-application.xml加载一个配置文件<context:property-placeholder location="...原创 2018-04-03 22:57:27 · 809 阅读 · 0 评论 -
JAVA的移位运算
java的移位运算在学习移位运算之前,移位只用于整数,我们首先应该知道计算机对数字是如何存贮的,在计算机中正数使用的原码存贮的,而负数则使用的是补码,补码等于原码取反(符号位不变)+1, java的移位运算符有三种:<<=左移操作符,低位补0,>>=右移操作符,是正数,则在高位补0,是负数则在高位补1,>>>无符号右移操作符,无论正符都在高位补0, 操作符的用法:操作符左边的值会移动由右边的值指原创 2017-11-19 18:38:06 · 287 阅读 · 0 评论