
JAVA相关笔记
文章平均质量分 73
忙里偷闲得几回
用代码创造价值
展开
-
浅析JavaBean继承后重写父类属性和lombok注解带来的问题和解决方案
目录背景问题分析解决总结背景一个用于接收http request参数的JavaBean:SkuPrimeModifyDto,有些属性上validation的条件,使用hibernate作为校验实现类。现在新增一个JavaBean:SkuPrimeModifyV2Dto,继承SkuPrimeModifyDto,并在SkuPrimeModifyV2Dto的属性中添加一个和SkuPrimeModifyDto一样的变量: barcode, 同时新增一个校验:@Pattern(regexp = “^([A-Z原创 2020-05-27 18:46:42 · 1941 阅读 · 0 评论 -
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 · 850 阅读 · 0 评论 -
VIP_OSP--基于Thrift的RPC框架的基本原理
公司(VIP)从2015年开始在内部推动Venus框架的使用,这是一款基于Apache Thrift远程调用框架二次开发的高性能、高可扩展的、服务治理的RPC框架。服务端使用IDL进行服务的定义,客户端集成服务的SDK即可调用服务端的服务,开发简单,大部分的公共功能都在Proxy代理层工作,减轻了开发者的负担,使其只需要关注业务部分。下面是对该框架的基本原理的简单介绍。原创 2017-02-28 18:50:08 · 5950 阅读 · 5 评论 -
Java-NIO学习小结
一、Java NIO概述Java NIO由如下三个核心部分组成: Channels 管道;负责连接TCP、UDP、File等进行数据的读写;管道每次读写数据都需要经过BuffersBuffers 缓冲区;负责接收管道读取的数据/向管道传输数据;Selectors 选择器;负责注册的管道,并监听管道的数据流动;调用select方法,会阻塞到管道中事件发生,返回后可以对这个事件进行处理原创 2017-02-16 21:09:39 · 563 阅读 · 0 评论 -
[珠玑拾遗]之一------通俗易懂解读位向量和Java实现
前序 昨夜晚归,兴之所至,翻阅旧书,《编程珠玑》,薄尘轻蒙,遂感慨无数,静心而读。忽遇难解之习题,问诸西洋必应者,得一文曰[珠玑之椟]位向量/位图的定义和应用,其思明,其言简,然不得其意,研习良久,终顿开茅塞,于今日作拙,欲通俗易懂见诸Java矣。原创 2016-09-23 22:12:10 · 3635 阅读 · 0 评论 -
SpringAOP原理之---Java动态代理
前言: 前两天在学习Spring的AOP时,看到Spring默认使用JDK动态代理来实现AOP,于是对Java的动态代理原理产生了疑惑和兴趣,便查找了一些资料来解惑。现将理解记录如下。 参考资料: 1. Java 动态代理机制分析及扩展,第 1 部分 2. 使用ProxyGenerator类生成字节码 3. 说说 cglib 动态代理 4. ProxyGener原创 2016-11-17 18:51:40 · 549 阅读 · 0 评论 -
反射应用之一---编写通用的toString()方法
上一节总结了Java反射机制里涉及到的几个类和其用法,本节就应用这些类和方法实现一个通用的toString()方法。要将一个对象toString,我们需要考虑到哪些方面呢?原创 2016-10-12 15:03:01 · 2231 阅读 · 0 评论 -
反射应用之二---Mock工具
前言:写完通用的toString方法后,对Java的反射有了进一步的了解,想到了之前在项目中写的一个数据模拟功能,于是想趁热打铁再改进一下。用了三天时间来规划、编码和测试,目前已完成,下面说明一下这个工具的功能、局限性以及使用说明。原创 2016-10-28 16:09:28 · 2557 阅读 · 0 评论 -
《Java虚拟机》学习简记
开始学习 Java虚拟机的原理,参考《深入理解Java虚拟机 第二版》周志明一书和“chjttony”博友所总结的简版学习笔记《深入理解java虚拟机》学习笔记,边学习边记忆,由于自己的记忆力愈来愈差,只好使用博客来帮助记忆了。原创 2017-02-27 18:08:55 · 552 阅读 · 0 评论 -
Dubbo框架简介
前言: 今年三月份换了一份工作,在新公司使用阿里开源的Dubbo作为RPC服务框架,其使用方法和原VIP的Venus框架略有不同,在看过框架介绍后发现,其原理都是相似而共通的,现简记如下。 参考文档:阿里巴巴Duboo官网原创 2017-08-29 00:37:47 · 10517 阅读 · 0 评论 -
JAVA CAS简述
va 中的synchronized关键字是悲观锁 也叫独占锁 所谓悲观锁就是某一线程独占资源,其他线程只能干等着,这种锁在高并发中性能很差 还有一种实现锁的方式是乐观锁 乐观锁实际上并不加锁,当计算遇到冲突或者说前后不一致时会重试 直到成功 乐观锁采用的机制叫CAS compare and swap CAS有3个操作数 内存值V 要跟内存值做比较的值A 和 新值 B转载 2015-01-07 15:01:29 · 401 阅读 · 0 评论 -
SpringMVC框架中利用Filter实现请求日志打印
SpringMVC框架中利用Filter实现请求日志打印 之前利用HttpServletRequest.getInputStream()和RequestWrapper实现了请求的requestBody获取,现在提出将一个请求的RequestBody和ResponseBody都提出来并打印日志&落入数据库,以便统计和查找问题。查找资料后确定两种技术方案: 1. 使用AOP对...原创 2018-07-10 18:42:20 · 6278 阅读 · 2 评论 -
微信公众号用户认证机制升级方案
微信公众号用户认证机制升级方案微信公众号用户认证机制升级方案背景解决方案:Token机制认证流程:具体实现:附录背景原认证机制为 cookie方式,缺点如下: 不通用,cookie方式仅限于H5或 PC访问,对于APP的访问比较局限;不安全,cookie在请求中可以轻易获取,从而伪造真实请求;不灵活,无法面向第三方接口调用。2.目前需要设...原创 2018-07-06 15:38:03 · 1514 阅读 · 0 评论 -
Token机制改造过程中踩坑记录
Token机制改造过程中踩坑记录 上个月为了修改系统的认证方式为Token机制,编码两天,修BUG修了一整周,天天加班到深夜,踩坑无数,终于爬上来了,现记录如下。问题背景系统原有登录认证机制为手机号+验证码登录并保持Cookie,由前端调用CheckLogin接口判断登录信息是否还存在,后端通过Cookie里的userId来关联用户信息;此种认证方案在我接手后就提出优...原创 2018-07-06 17:59:52 · 1726 阅读 · 0 评论 -
接口补偿机制需求分析&方案设计
接口补偿机制需求分析&amp;amp;amp;amp;方案设计接口补偿机制需求分析&amp;amp;amp;amp;方案设计需求分析背景解决方案业务示例注意事项示例业务Controller实现重试信息类&amp;amp;amp;amp;数据处理入库接口重试的主要方法需求分析背景业务系统逐渐开始与多个第三方系统进行对接,在对接时,需要调用外部系统接口进行数据的交换,如果在接口请求的过原创 2018-08-07 17:28:09 · 4124 阅读 · 1 评论 -
记一次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 · 7193 阅读 · 0 评论 -
记一次SpringBoot返回数据乱码引发的思考
记一次SpringBoot返回数据乱码引发的思考文章目录记一次SpringBoot返回数据乱码引发的思考问题背景解决过程解决方案:源码分析HttpMessageConverters的初始化过程HttpMessageConverters解析过程遗留问题问题背景使用SpringBoot的starter构建了一个demo项目,添加了一个Get接口,返回一段字符串,有中文、数字和英文,接口一直正常...原创 2019-05-16 17:25:27 · 6041 阅读 · 0 评论 -
大批量数据Excel导出经验总结
文章目录背景方案效果实现主线程任务生产者消费者SQL愿景参考文献背景目前系统中有一些接口做数据的导出,一开始数据量很小,所以在设计的时候性能什么的都没考虑到;随着数据量的不断增加,逐渐出现了一些问题:耗时增加;SQL执行时间过长,占用数据库连接;内存占用过高,导致FullGC频繁。以及老版POI接口的问题:Excel写入过慢;每个Sheet仅支持65536条数据;容易导致O...原创 2019-06-27 13:52:19 · 9520 阅读 · 10 评论 -
Java冷知识
Java语言中没有goto关键字,虽然goto作为了其保留字。如果要实现goto的效果,可使用 “break {tag};”的方式;数组拷贝:Arrays.copyOf(),两块内存,相同内容的数组;访问器方法在返回可变对象的引用时,需要使用clone()方法,这样才不会破坏封装性;(对于此建议,我不是很赞同)final 关键字最好是修饰基本类型或不可变对象,如int,String,当修饰可变原创 2016-09-21 12:08:21 · 1872 阅读 · 0 评论 -
Java多态性浅析
前言 今天我们要讲的是 Java的三大特性之一—多态性,而讲到多态,就不能不提与之息息相关的另一个概念—动态绑定。我们先看一下定义:一个对象变量可以指示多种实际类型的对象被称为多态(polymorphism)。在运行时能够自动地选择调用哪个方法的现象称为动态绑定(dynamic binding)。动态绑定是多态的技术实现。原创 2016-09-21 12:05:35 · 614 阅读 · 0 评论 -
ThreadLocal类详解及用途
原文地址:http://www.iteye.com/topic/103804首先,ThreadLocal 不是用来解决共享对象的多线程访问问题的,一般情况下,通过ThreadLocal.set() 到线程中的对象是该线程自己使用的对象,其他线程是不需要访问的,也访问不到的。各个线程中访问的是不同的对象。 另外,说ThreadLocal使得各线程能够保持各自独立的一个对象,并不是通过Th转载 2015-01-07 10:23:42 · 676 阅读 · 0 评论 -
Java线程的5种状态及切换(透彻讲解)
原文地址:http://blog.youkuaiyun.com/yaolingrui/article/details/7522372Java中的线程的生命周期大体可分为5种状态。①NEW:这种情况指的是,通过New关键字创建了Thread类(或其子类)的对象②RUNNABLE:这种情况指的是Thread类的对象调用了start()方法,这时的线程就等待时间片轮转到自己这,以转载 2015-01-06 17:01:37 · 398 阅读 · 0 评论 -
java 数据库操作使用批处理
本文章在参考前人作品的基础上完成:原创 2014-08-18 09:32:36 · 593 阅读 · 0 评论 -
Apache DBUtils使用总结
DBUtils是个小巧的JDBC轻量级封装的工具包,其最核心的特性是结果集的封装,可以直接将查询出来的结果集封装成JavaBean,这就为我们做了最枯燥乏味、最容易出错的一大部分工作。 在使用DBUtils之前,应该注意一些问题: 1、DBUtils是JDBC的简单封装,可以和JDBC混合使用。 2、DBUtils对结果集自动封装为JavaBean是转载 2014-08-18 09:26:16 · 463 阅读 · 0 评论 -
PreparedStatement的用法
一.PreparedStatement 概述在数据库的操作过程中,PreparedStatement 对象是一个很不起眼但是记为重要的接口对象,它继承 于Statement,并与之在两方面有所不同:1)PreparedStatement 实例包含已编译的 SQL 语句。这就是使语句“准备好”。包含于 PreparedStatement 对象中的 SQL 语句可具有一个或多个 IN转载 2014-08-18 09:23:09 · 470 阅读 · 0 评论 -
maven 教程一 入门
Maven是一个采用纯Java编写的开源项目管理工具。Maven采用了一种被称之为project object model (POM)概念来管理项目,所有的项目配置信息都被定义在一个叫做POM.xml的文件中,通过该文件,Maven可以管理项目的整个声明周期,包括编 译,构建,测试,发布,报告等等。目前Apache下绝大多数项目都已经采用Maven进行管理。而Maven本身还支持多种插件,可以方便转载 2014-08-28 17:21:13 · 362 阅读 · 0 评论 -
JAVA实现常用的正则表达式
/* * Copyright (c) 2013-2014, thinkjoy Inc. All Rights Reserved. * * Project Name: Jiaxiao * $Id: RegularUtil.java 2014-8-20 上午10:49:13 $ */package com.jlusoft.banbantong.common;import java.转载 2014-08-21 17:44:28 · 389 阅读 · 0 评论 -
Maven简介和使用说明
原文地址:http://www.oracle.com/technetwork/cn/community/java/apache-maven-getting-started-1-406235-zhs.html写这个 maven 的入门篇是因为之前在一个开发者会的动手实验中发现挺多人对于 maven 不是那么了解,所以就有了这个想法。这个入门篇分上下两篇。本文着重动手,用 maven转载 2015-01-08 10:18:53 · 352 阅读 · 0 评论 -
java序列化和反序列化总结
序列化:将java对象转换为字节序列的过程叫做序列化反序列化:将字节对象转换为java对象的过程叫做反序列化通常情况下,序列化有两种用途:、1) 把对象的字节序列永久的保存在硬盘中2)在网络上传输对象的字节序列相应的API java.io.ObjectOutputStream writeObject(Object obj) java.io.Ob转载 2015-01-13 13:27:54 · 305 阅读 · 0 评论 -
Java反射总结
能够分析类能力的程序成为反射(reflective),反射机制可以用来: 1. 在运行中分析类的能力 2. 在运行中查看对象 3. 实现通用的数组操作代码 4. 利用Method对象。一、 Class类 在程序运行期间,Java运行时系统(JRE)始终为所有的对象维护一个被称为运行时的类型标识。这个信息跟踪着每个对象所属的类,虚拟机利用运行时类型信息选择相应的方法执行。 可以通过专原创 2016-10-09 18:02:35 · 479 阅读 · 0 评论 -
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 · 4983 阅读 · 0 评论 -
Java容器类浅析四----ArrayList和LinkedList的存取原理
一、概述数组和列表是Java容器类中最经常使用的一类。 顺序列表的底层存储数据结构是Object的数组,数组是静态的,而列表的长度是可以动态增长的,可以称之为“动态数组”。顺序列表长度的动态增长,是在add时检查当前元素个数是否达到了数组的边界,如果达到了,则创建一个长度为当前数组长度1.5倍的新数组,并将之前的数据copy到新的数组中;copy时调用Native Method—System.ar原创 2016-06-17 18:14:08 · 531 阅读 · 0 评论 -
开发中的小陷阱
1.HashMap会导致排序的数据乱序,使用LinkedHashMap可解决该问题 Java容器类浅析三-----保证插入顺序的HashMap--LinkedHashMap的存取原理。2.在对Integer、Long、Double等封装类型与拆箱类型(int,long, double)数据进行==测试时,一定要先判断其值是否为空(可使用三元运算符),否则会出现NPE;因为==测试时,编译...原创 2016-04-21 17:13:17 · 324 阅读 · 0 评论 -
强软弱虚---强引用、软引用、弱引用、虚引用
博客出自:http://blog.youkuaiyun.com/liuxian131831、概述 在JDK1.2以前的版本中,当一个对象不被任何变量引用,那么程序就无法再使用这个对象。也就是说,只有对象处于可触及状态,程序才能使用它。这 就像在日常生活中,从商店购买了某样物品后,如果有用,就一直保留它,否则就把它扔到垃圾箱,由清洁工人收走。一般说来,如果物品已经转载 2015-06-23 14:35:41 · 21232 阅读 · 2 评论 -
Java关键字final、static使用总结
原文地址:http://lavasoft.blog.51cto.com/62575/18771/一、final 根据程序上下文环境,Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类、非抽象类成员方法和变量。你可能出于两种理解而需要阻止改变:设计或效率。 final类不能被继承,没有子类,final类中的方法默认是fi转载 2014-12-30 17:38:50 · 265 阅读 · 0 评论 -
<jsp:include page=""/>和<%@include file=""%>-----JSP中两种页面引入方式的区别
我们都知道在jsp中include有两种形式,分别是 前者是指令元素、后者是行为元素。具体它们将在何处用?如何用及它们有什么区别?这应该是很多人看到它都会想到的问题。下面一起来看看吧。 通常当应用程序中所有的页面的某些部分(例如标题、页脚和导航栏)都相同的时候,我们就可以考虑用include。具体在哪些时候用,哪些时候用.这种形式。首先要明白的是它们之间的区别。只有了解转载 2014-07-28 19:11:53 · 6722 阅读 · 0 评论