自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(58)
  • 收藏
  • 关注

原创 浅析JavaBean继承后重写父类属性和lombok注解带来的问题和解决方案

目录背景问题分析解决总结背景一个用于接收http request参数的JavaBean:SkuPrimeModifyDto,有些属性上validation的条件,使用hibernate作为校验实现类。现在新增一个JavaBean:SkuPrimeModifyV2Dto,继承SkuPrimeModifyDto,并在SkuPrimeModifyV2Dto的属性中添加一个和SkuPrimeModifyDto一样的变量: barcode, 同时新增一个校验:@Pattern(regexp = “^([A-Z

2020-05-27 18:46:42 1832

原创 Java并发编程3---锁和同步工具类(未完成)

Java并发编程3—锁和同步工具类文章目录Java并发编程3---锁和同步工具类锁的意义并发、并行与同步锁的特性原子性/互斥性可见性锁的分类乐观锁悲观锁/互斥锁自旋锁可重入锁读写锁数据库中的锁事务的ACID特性事务隔离级别脏读、不可重复读、幻读的含义锁分类MVCCInnoDB的MVCC实现方式内置锁SynchronizedJava对象的内存布局一个字(Word)对应多少字节(byte)?同步方法...

2019-12-29 22:50:51 328

原创 Float.isNaN(float v)方法初探

Float.isNaN(float v)方法初探背景今天在翻看之前的博客Java容器类浅析二-----HashMap的存取原理,发现了HashMap的全参构造器中有这样一句代码if (loadFactor <= 0 || Float.isNaN(loadFactor)),当时对这个Float.isNaN(float v)方法产生了兴趣,于是翻看了一下这个方法的源码,方法体很简单就一句话...

2019-12-17 20:49:59 766

原创 《Linux就该这么学》学习笔记

文章目录一、 部署虚拟环境安装Linux系统1. 安装VMware和Linux系统2. 重置root管理员密码3. RPM:红帽软件管理器常用命令4. Yum软件仓库常用命令5. systemd初始化进程系统启动过程系统目标系统管理服务二、简单命令查看帮助文档常用系统工作1. echo命令2. date命令3. poweroff/shutdown命令4. wget命令5. ps命令6. top命令...

2019-07-05 11:59:33 1311

原创 大批量数据Excel导出经验总结

文章目录背景方案效果实现主线程任务生产者消费者SQL愿景参考文献背景目前系统中有一些接口做数据的导出,一开始数据量很小,所以在设计的时候性能什么的都没考虑到;随着数据量的不断增加,逐渐出现了一些问题:耗时增加;SQL执行时间过长,占用数据库连接;内存占用过高,导致FullGC频繁。以及老版POI接口的问题:Excel写入过慢;每个Sheet仅支持65536条数据;容易导致O...

2019-06-27 13:52:19 9107 10

原创 记一次SpringBoot返回数据乱码引发的思考

记一次SpringBoot返回数据乱码引发的思考文章目录记一次SpringBoot返回数据乱码引发的思考问题背景解决过程解决方案:源码分析HttpMessageConverters的初始化过程HttpMessageConverters解析过程遗留问题问题背景使用SpringBoot的starter构建了一个demo项目,添加了一个Get接口,返回一段字符串,有中文、数字和英文,接口一直正常...

2019-05-16 17:25:27 5932

原创 线上服务502问题排查---Linux OOM Killer导致的进程消失现象

线上服务502问题排查文章目录线上服务502问题排查问题背景排查过程解决方案复盘总结知识盘点问题背景线上运营平台有两台2C4G的机器组成了集群,其中服务器A上同时还部署了PDF打印等服务,很明显4G内存吃紧,一直担心服务会出现问题,不过运行小半年时间也没遇到,就不再关心此事了。有天值班时,运营人员反馈:运营平台抽风了,时好时坏,严重影响了他们的工作。这事儿可不小,得赶紧排查修复啊!...

2019-03-21 17:56:01 517

原创 记一次ViewResolver引起的问题 javax.servlet.ServletException: Could not resolve view with name

记一次ViewResolver引起的问题文章目录记一次ViewResolver引起的问题问题背景解决过程查找原因其他的解决方案源码分析Spring初始化过程ViewResolver的初始化过程InternalResourceViewResolver的视图解析过程知识盘点遗留问题问题背景公司的项目基于SpringBoot开发,基本上所有接口都是Restful风格的,接收json参数,返回js...

2019-03-15 19:21:41 6938

原创 MySQL事务死锁排查: Lock wait timeout exceeded; try restarting transaction

问题背景某天测试功能时,发现有些功能一直在loading,查看日志后发现,涉及到sample_express表的所有DML语句都执行不了,然后在一段时间后抛出异常:Lock wait timeout exceeded; try restarting transaction。排查过程首先查看information_schema.INNODB_TRX表,查看当前事务和状态,是否有长时间执...

2019-03-06 18:35:43 1429

原创 Java并发编程---Java内存模型

Java并发编程—Java内存模型文章目录Java并发编程---Java内存模型前言什么是JMMJMM抽象结构为什么要有JMM顺序一致性模型重排序JMM提供的保障同步和内存屏障Happens-Before规则as-if-serial语义同步原语的内存语义Volatile基本概念内存语义JMM的实现底层实现Synchronized基本概念内存语义(相对于JUC的Lock接口而言)底层原理Final...

2018-11-20 22:50:44 460

原创 IDEA和Git的恩怨情仇之"Could not read from remote repository"

前言脑喷公司的各种编译器数不胜数,其中对于Java开发来说,IDEA真的不能不说是个神器。用了三年多Eclipse的我一开始听到使用IDEA其实是拒绝的,因为不能你让我换个IDE我就马上去换,第一我要看一下这个IDE不加特效的情况下,撸代码是不是“Duang,Duang,Duang”地飞快。。。问题出现今天在GitHub上新建了一个项目,在使用IDEA进行Clone时,报了个错误:cl...

2018-11-07 10:52:07 1374

原创 Java并发编程---基础知识

Java多线程—基础知识文章目录Java多线程---基础知识什么是线程线程和进程线程的状态和切换线程的创建线程的启动和执行线程的结束线程的中断守护线程(Daemon线程)线程安全和线程不安全多线程优缺点线程间通信线程相关的常用方法什么是线程线程是操作系统调度的最小单元,多个线程同时执行,能够提高程序的性能。线程和进程现代操作系统在运行一个程序时,会为其启动一个进程;在一个进程里可以...

2018-10-25 00:32:21 284

原创 SpringBoot中文乱码总结

SpringBoot中文乱码总结背景解决问题总结背景最近在进行SpringBoot的实战训练,使用 Spring_Strart创建了一个SpringBoot程序,在默认配置文件(application.properties)中使用中文属性时,无论是读取设置到属性上,还是在控制台打印,抑或是通过HTTP请求返回,得到的都是乱码。解决问题查找两篇博客介绍如下:SpringBoot | ...

2018-10-01 13:11:26 3459

原创 时间戳和MySQL的DateTime带来的线上BUG

时间戳和MySQL的DateTime带来的线上BUG问题背景BUG复现BUG定位BUG修复问题背景团队规定:服务端对外接口无论是接收还是返回,对于时间都是要时间戳,且毫秒格式,内部数据库存储建议BIGINT,而有人用了DateTime,导致了线上一个对接业务出现了时间戳校验失败的BUG。BUG复现外部接口首先请求接口A(实现了幂等),传了一个毫秒级别的时间戳和其他业务参数,如1538...

2018-09-30 13:24:37 1809

原创 接口补偿机制需求分析&方案设计

接口补偿机制需求分析&amp;amp;amp;amp;amp;方案设计接口补偿机制需求分析&amp;amp;amp;amp;amp;方案设计需求分析背景解决方案业务示例注意事项示例业务Controller实现重试信息类&amp;amp;amp;amp;amp;数据处理入库接口重试的主要方法需求分析背景业务系统逐渐开始与多个第三方系统进行对接,在对接时,需要调用外部系统接口进行数据的交换,如果在接口请求的过

2018-08-07 17:28:09 3691 1

原创 SpringMVC框架中利用Filter实现请求日志打印

SpringMVC框架中利用Filter实现请求日志打印 之前利用HttpServletRequest.getInputStream()和RequestWrapper实现了请求的requestBody获取,现在提出将一个请求的RequestBody和ResponseBody都提出来并打印日志&amp;落入数据库,以便统计和查找问题。查找资料后确定两种技术方案: 1. 使用AOP对...

2018-07-10 18:42:20 5972 2

原创 Token机制改造过程中踩坑记录

Token机制改造过程中踩坑记录 上个月为了修改系统的认证方式为Token机制,编码两天,修BUG修了一整周,天天加班到深夜,踩坑无数,终于爬上来了,现记录如下。问题背景系统原有登录认证机制为手机号+验证码登录并保持Cookie,由前端调用CheckLogin接口判断登录信息是否还存在,后端通过Cookie里的userId来关联用户信息;此种认证方案在我接手后就提出优...

2018-07-06 17:59:52 1660

原创 微信公众号用户认证机制升级方案

微信公众号用户认证机制升级方案微信公众号用户认证机制升级方案背景解决方案:Token机制认证流程:具体实现:附录背景原认证机制为 cookie方式,缺点如下: 不通用,cookie方式仅限于H5或 PC访问,对于APP的访问比较局限;不安全,cookie在请求中可以轻易获取,从而伪造真实请求;不灵活,无法面向第三方接口调用。2.目前需要设...

2018-07-06 15:38:03 1416

原创 Redis小结

Redis基础一简介二数据类型三Redis命令高级特性一持久化主从复制持久化主从复制读写分离二Redis集群哨兵三事务分布式锁Redis事务利用Redis实现分布式锁四其他Redis基础一、简介Redis是一个完全开源免费的高性能key-value数据库Redis支持将数据持久化到硬盘上,在重启时可以再次加载使用,不像Memcached断电后数据丢失;Redis的数据类型

2017-09-14 19:04:35 306

原创 Dubbo框架简介

前言: 今年三月份换了一份工作,在新公司使用阿里开源的Dubbo作为RPC服务框架,其使用方法和原VIP的Venus框架略有不同,在看过框架介绍后发现,其原理都是相似而共通的,现简记如下。 参考文档:阿里巴巴Duboo官网

2017-08-29 00:37:47 10315

原创 VIP_OSP--基于Thrift的RPC框架的基本原理

公司(VIP)从2015年开始在内部推动Venus框架的使用,这是一款基于Apache Thrift远程调用框架二次开发的高性能、高可扩展的、服务治理的RPC框架。服务端使用IDL进行服务的定义,客户端集成服务的SDK即可调用服务端的服务,开发简单,大部分的公共功能都在Proxy代理层工作,减轻了开发者的负担,使其只需要关注业务部分。下面是对该框架的基本原理的简单介绍。

2017-02-28 18:50:08 5823 5

原创 《Java虚拟机》学习简记

开始学习 Java虚拟机的原理,参考《深入理解Java虚拟机 第二版》周志明一书和“chjttony”博友所总结的简版学习笔记《深入理解java虚拟机》学习笔记,边学习边记忆,由于自己的记忆力愈来愈差,只好使用博客来帮助记忆了。

2017-02-27 18:08:55 509

原创 Java-NIO学习小结

一、Java NIO概述Java NIO由如下三个核心部分组成: Channels 管道;负责连接TCP、UDP、File等进行数据的读写;管道每次读写数据都需要经过BuffersBuffers 缓冲区;负责接收管道读取的数据/向管道传输数据;Selectors 选择器;负责注册的管道,并监听管道的数据流动;调用select方法,会阻塞到管道中事件发生,返回后可以对这个事件进行处理

2017-02-16 21:09:39 532

原创 Spring3学习笔记

Spring3学习笔记Spring3学习笔记一Spring简介二IOC详解三DI

2017-02-16 11:43:32 470

原创 ThreadLocal应用之一-----利用拦截器或过滤器设置请求上下文

之前一直使用ThreadLocal进行请求上下文的设置,只知道ThreadLocal是线程安全的每个线程获取的是本线程所对应的值,没有去深入了解ThreadLocal的具体实现,现在翻看转载的博客并参照源码,彻底明白了其原理,记录如下。

2017-02-15 16:49:32 4670

原创 Serlvet知新

Servlet是JavaWEB的基础API,位于javax.servlet包,定义了基本的WEB请求处理方法,如: init(ServletConfig config) 用于加载各种配置项,SpringMVC通过重写该方法的模板方法onRefresh(ApplicationContext context)来加载WEB上下文和初始化HandlerMapping、HandlerAdapter、Be

2017-02-10 18:06:53 265

原创 Tomcat如何解析URL的请求参数(追踪HttpServletRequest对于请求参数的解析过程)

想起了前两个月同事问我:我发出的请求里如果有”a=f&a=g”,那么在Servlet里获取到的a的值是一个字符串”f,g”,这是怎么回事儿? 当时我就猜测是SpringMVC做的处理,然后启动了一个测试工程,并进行了Debug追踪,最终查询到了Tomcat的源码里,发现居然是它做的解析。

2017-02-09 15:54:15 5227

原创 Linux上Web服务器搭建(JDK+nginx+https)

最近接手一个新项目,于是所有的一切都需要自己从头开始,代码搭建完成后,就要开始搭建一个开放测试服务器了。现将搭建过程记录下来,以备后续之需。

2016-12-29 15:36:48 1791

原创 算法学习之一—乱序数组

一、背景昨日看到一个算法题: 有一个乱序数组,例如:[ 3,1,4,8,2,10,6 ],您能不能删除最少的数字,让剩下的数字使升序的?请输出删除最少的数字的数量。 样例如下: 输入:3 1 4 8 2 10 6 输出:3

2016-12-21 14:55:56 1597

原创 SpringAOP原理之---Java动态代理

前言: 前两天在学习Spring的AOP时,看到Spring默认使用JDK动态代理来实现AOP,于是对Java的动态代理原理产生了疑惑和兴趣,便查找了一些资料来解惑。现将理解记录如下。 参考资料: 1. Java 动态代理机制分析及扩展,第 1 部分 2. 使用ProxyGenerator类生成字节码 3. 说说 cglib 动态代理 4. ProxyGener

2016-11-17 18:51:40 515

原创 反射应用之二---Mock工具

前言:写完通用的toString方法后,对Java的反射有了进一步的了解,想到了之前在项目中写的一个数据模拟功能,于是想趁热打铁再改进一下。用了三天时间来规划、编码和测试,目前已完成,下面说明一下这个工具的功能、局限性以及使用说明。

2016-10-28 16:09:28 2453

原创 反射应用之一---编写通用的toString()方法

上一节总结了Java反射机制里涉及到的几个类和其用法,本节就应用这些类和方法实现一个通用的toString()方法。要将一个对象toString,我们需要考虑到哪些方面呢?

2016-10-12 15:03:01 2184

原创 Java反射总结

能够分析类能力的程序成为反射(reflective),反射机制可以用来: 1. 在运行中分析类的能力 2. 在运行中查看对象 3. 实现通用的数组操作代码 4. 利用Method对象。一、 Class类 在程序运行期间,Java运行时系统(JRE)始终为所有的对象维护一个被称为运行时的类型标识。这个信息跟踪着每个对象所属的类,虚拟机利用运行时类型信息选择相应的方法执行。 可以通过专

2016-10-09 18:02:35 448

原创 [珠玑拾遗]之一------通俗易懂解读位向量和Java实现

前序 昨夜晚归,兴之所至,翻阅旧书,《编程珠玑》,薄尘轻蒙,遂感慨无数,静心而读。忽遇难解之习题,问诸西洋必应者,得一文曰[珠玑之椟]位向量/位图的定义和应用,其思明,其言简,然不得其意,研习良久,终顿开茅塞,于今日作拙,欲通俗易懂见诸Java矣。

2016-09-23 22:12:10 3572

原创 Java冷知识

Java语言中没有goto关键字,虽然goto作为了其保留字。如果要实现goto的效果,可使用 “break {tag};”的方式;数组拷贝:Arrays.copyOf(),两块内存,相同内容的数组;访问器方法在返回可变对象的引用时,需要使用clone()方法,这样才不会破坏封装性;(对于此建议,我不是很赞同)final 关键字最好是修饰基本类型或不可变对象,如int,String,当修饰可变

2016-09-21 12:08:21 1828

原创 Java多态性浅析

前言 今天我们要讲的是 Java的三大特性之一—多态性,而讲到多态,就不能不提与之息息相关的另一个概念—动态绑定。我们先看一下定义:一个对象变量可以指示多种实际类型的对象被称为多态(polymorphism)。在运行时能够自动地选择调用哪个方法的现象称为动态绑定(dynamic binding)。动态绑定是多态的技术实现。

2016-09-21 12:05:35 584

原创 Servlet和SpringMVC的初始化及请求处理过程浅析

Servlet接口分析继承图: 首先看一下Servlet的类结构public interface Servlet { public void init(ServletConfig config) throws ServletException; public ServletConfig getServletConfig(); public void service(Servl

2016-09-02 18:57:31 10452

原创 反向代理和正向代理

参考图解代理一、正向代理先不说正向代理的概念,举个栗子:VPN中的代理服务器。 我们作为客户端,首先要设置一个代理服务器,指定代理服务器的IP和端口(用户名密码),这时就可以访问本来访问不了的Google就可以访问了,这是什么原理呢?看图:正向代理原理图用户A不能直接访问服务器B,有可能是DNS解析不了,也有可能是被墙了。这时用户A想了个办法,它去联系代理服务Z,告诉Z,我想访问服务器B,Z说好

2016-09-01 20:50:56 2092

原创 Java的参数传递到底是引用传递还是值传递

首先看一段代码:public static void main(String[] args) { Person a = new Person(23, "a"); Person b = new Person(22,"b"); System.out.println("改变前a:"+a+"\nb:"+b); changeValue(a,b); System.out.

2016-08-30 17:14:55 4895

原创 Java容器类浅析四----ArrayList和LinkedList的存取原理

一、概述数组和列表是Java容器类中最经常使用的一类。 顺序列表的底层存储数据结构是Object的数组,数组是静态的,而列表的长度是可以动态增长的,可以称之为“动态数组”。顺序列表长度的动态增长,是在add时检查当前元素个数是否达到了数组的边界,如果达到了,则创建一个长度为当前数组长度1.5倍的新数组,并将之前的数据copy到新的数组中;copy时调用Native Method—System.ar

2016-06-17 18:14:08 491

空空如也

空空如也

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

TA关注的人

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