java
文章平均质量分 90
月下吴钩
路漫漫其修远兮,吾将上下而求索。
注:抵制CSDN上的无脑抄袭错误内容,坚持写正确的良心文章。
展开
-
告别恼人的NPE,日志分片,畅快的将日志信息埋入ES的设计方案
关于CAT和ES的相关知识本文不做具体展开,各位自行去查阅资料了解吧。1、问题场景待埋点的信息为一个复杂对象中的比较深层次的字段,不希望做太多的非空判断 处理的主流程为一条日志,主流程中会多次调用第三方服务,需要将调用信息埋点生成子的日志,并进行主流程日志和子的调用日志的串联。 日志埋点通过cat写入es。 支持同步or异步的埋点。 建立一套规范的错误码的体系,并能够自动防重(多人协同开发时候防止另一个人也建立了一个相同的错误码),并且能够自动生成错误码的映射关系提供给产品or业务,便于他们原创 2020-07-02 17:42:33 · 364 阅读 · 0 评论 -
JVM - 逃逸分析、栈上分配、标量替换、同步消除
1、先来个开胃菜(灵魂拷问):下面这两份代码哪个好,(从jvm层面考虑的话)好在哪?public StringBuffer createString1(String ... values){ StringBuffer stringBuffer = new StringBuffer(); for (String string : values) { stringBuffer.append(string+" "); } return stringBuff原创 2020-06-07 17:15:22 · 835 阅读 · 0 评论 -
jvm内存模型、jvm内存结构、Java内存结构、Java内存模型(JMM)、Java对象模型的区别(吐血研究整理)
jvm内存模型:JVM内存模型则是指JVM的内存分区。jvm内存结构:等同于Java内存结构,汉语虽然博大精深,但是也经常会因为命名很雷同让人懵逼或者混淆不清。Java内存结构:Java内存模型(JMM):java内存模型又称为JMM。为了解决Java多线程对共享数据的读写一致性问题,通过Happens-Before语义(延伸出了as-if-serial)定义了Java程序对数据的访问规则,修正之前由于读写冲突导致的Cache数据不一致的问题。具体到Hotspot VM的实现..原创 2020-06-06 19:30:39 · 1465 阅读 · 10 评论 -
程序员必知必会的Mock技能-结合spring的mock静态方法
一、痛点问题1.1、如何mock静态方法1.2、mock很容易造成代码覆盖率的下降,如何提升代码覆盖率二、准备工作2.1、技术选型:powerMock为何常见的Mockito不能mock静态方法?因为Mockito使用继承的方式实现mock的,用CGLIB生成mock对象代替真实的对象进行执行,为了mock实例的方法,你可以在subclass中覆盖它,而static方法是不...原创 2019-12-27 12:10:20 · 3255 阅读 · 0 评论 -
个人阅读的觉的比较好的文章收录
从分布式一致性谈到CAP理论、BASE理论http://www.cnblogs.com/szlbm/p/5588543.html事务的传播行为(讲得比较好)http://blog.sina.com.cn/s/blog_4b5bc0110100z7jr.htmlJava帝国之宫廷内斗(1)和(2)--- 很有趣味性http://blog.csdn.net/jian原创 2017-09-15 18:54:43 · 230 阅读 · 0 评论 -
关于合理地估算线程池大小的方案比较和误区分析
总所周知,在涉及多线程开发时不可避免的需要进行线程池大小估算的工作。常见三种处理的方式有:1,根据网上的估算公式来估算,但是往往会发现没什么用,因为你计算不出来准确值。2,按照经验先估算一个大小(具有一定随意的成分),然后用jmeter等压测工具去压测,然后逐渐修改已达到较为合理的值。3,自己去思考一下,整理出上限的各项指标,例如qps,程序处理性能等,然后用公式去推导出较为合理的大小。...原创 2018-04-17 22:59:07 · 835 阅读 · 0 评论 -
关于java反射包中的一些常见类和方法的理解 - 持续完善
一、Type:其是一个接口java.lang.reflect.Type,主要有5类: raw types: 就是一般类型,如String,Collections ,Math,Number等 parameterized types: 含泛型定义的类,如:List, Map, etc.. array types: 含泛型定义的数组,数组内可以是parameterized types或type va...原创 2018-06-12 21:32:14 · 901 阅读 · 0 评论 -
JAVA 对象的深拷贝
package com.ctrip.ibu.itinerary.common.util;import com.google.common.primitives.Primitives;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import sun.misc.Unsafe;import java.lang.reflect...原创 2018-06-07 22:10:59 · 958 阅读 · 1 评论 -
万能参数校验框架
简介:结合JSR380,Hibernate validation,生成代理(也可以用Spring AOP来替代)实现的一整套的请求参数校验的框架,后期优化可以实现做成一个服务化的jar包到处使用。本文中将参数校验的所有代码都和业务代码逻辑进行分离,完美契合单一性原则、低耦合等设计原则。全局启用注解:@Documented@Target({ElementType.TYPE, Elemen...原创 2018-07-26 15:06:05 · 1322 阅读 · 0 评论 -
JVM内功心法
基础 JVM运行时内存消耗包括哪些部分 通常包含如下几部分:Heap:我们常说的JVM运行时堆内存(通过-Xmx, -Xms参数控制) Thread Stack:Java的每一个线程最多会占用一个Thread Stack大小的内存(通过-Xss参数控制) Direct Memory:一些网络编程框架常会使用,如,Netty(通过-XX:MaxDirectMemorySize参数控...翻译 2018-07-26 15:04:13 · 269 阅读 · 0 评论 -
Spring boot下的携程的DAL事务和回滚实现原理
首先申明,吐槽我程框架仅仅是希望框架能够更好,不代表不热爱公司哈。其次,携程的DAL框架(类似MyBatis的orm框架)确实有点那个不太给力了,估计和以前都是C#语言为主的历史原因。DAL框架不给力的地方如下:1、不支持Spring事务,很多功能没法实现,例如在事务性的a()里想要执行一段非事务的逻辑;或者在事务性的a()里想要执行一段新起事务的逻辑,但是b的事务和a的事务互不干扰。这些...原创 2018-07-30 23:59:55 · 1147 阅读 · 0 评论 -
如何自己写一个无业务侵入的框架让别人使用
使用场景:SpringBoot框架里写的SDK代码中有一个XXXFilter拦截器,接入方依赖了这个sdk,想要使用这个拦截器必须要使用@ServletComponentScan(basePackageClasses = XXXFilter.class)才能生效。现在想去掉这句话,使得对接入方使用更加友好。代码使用:1、在client层的resources/META-INF/下新建一个...原创 2018-09-17 22:43:48 · 729 阅读 · 0 评论 -
java NIO分析之前世今生
本文目的:把握IO历史车轮的脉搏,知其然(了解NIO,NIO等),知其所以然(为啥会有NIO,为啥这么设计NIO,这么设计的好处是什么)。一、核心概念的理解1、Java I/O模型贯穿了整个java的各种IO的变革历史,各种方案其实本质上都是围绕着这个目的展开的。 同步I/O: 每个请求必须逐个地被处理,一个请求的处理会导致整个流程的暂时等待,这些事件无法并发地执行。用户线程...原创 2019-01-31 15:22:18 · 294 阅读 · 0 评论 -
Mysql事务和锁的深入研究(亲测权威版,看完后彻底搞懂)
本博文以思想指导实践来验证论点并加以总结归纳,切忌死记硬背。本博文的所有demo都很详细,各位可以自行在自己的数据库中做测试验证。1、入门准备工作1.1、#建表语句CREATE TABLE `student` ( `id` int(16) NOT NULL AUTO_INCREMENT COMMENT '自增ID', `sno` VARCHAR(16) DEFAULT...原创 2019-01-16 11:52:33 · 322 阅读 · 0 评论 -
查询数据库数据并写入到文件中的优化方案
有限制条件的大招:第一步:执行完以下sql,会自动的在mysql服务器对应的机器上生成所要的文件SELECT ... FROM TABLE_xxx where ... INTO OUTFILE "/tmp/xxx/xxx" FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '' LINES TERMINATED原创 2017-12-27 21:06:53 · 399 阅读 · 0 评论 -
数据库连接池
三大连接池:c3p0,dbcp与druid1)DBCP DBCP是一个依赖Jakarta commons-pool对象池机制的数据库连接池.DBCP可以直接的在应用程序中使用,Tomcat的数据源使用的就是DBCP。 2)c3p0 c3p0是一个开放源代码的JDBC连接池,它在lib目录中与Hibernate一起发布,包括了实现jdbc3和jdbc2扩展规范说明的Connection原创 2017-12-27 17:43:04 · 420 阅读 · 0 评论 -
RPC-client异步收发核心细节
要实施微服务,首先要搞定RPC框架,RPC框架分为客户端部分与服务端部分。RPC-client的部分又分为:(1)序列化反序列化的部分(上图中的1、4)(2)发送字节流与接收字节流的部分(上图中的2、3)前一篇文章讨论了序列化与范序列化的细节,这一篇文章将讨论发送字节流与接收字节流的部分。 客户端调用又分为同步调用与异步调用同步调用的代码片段为:Result = Add(Obj1, Obj2);//转载 2016-11-04 14:38:45 · 328 阅读 · 0 评论 -
mybatis参数传递的问题
mybatis参数传递的问题:如何传递一个参数并在xxxMapper.xml中拿到参数值用于sql操作?如何传递多个参数并在xxxMapper.xml中拿到参数值用于sql操作?1.基本数据类型只能传一个(int,String,Data等),通过#{参数名}即可获取传入值,参数名要严格一致。举例:接口代码:List selectPage1(String name);M原创 2016-10-26 15:07:21 · 1058 阅读 · 0 评论 -
java多线程与高并发的快速入门指南
并行世界的入门指南并行计算主要适用于:图像处理+服务端编程(主要是java)。性能翻倍的摩尔定律失效,软件开发为硬件设计者的无计可施所采取的多核cpu策略埋单。同步/异步:同步需要等待调用结束才可以执行下一步,异步无需等待,类似消息,发出去了就去干别的事情了。并发/并行:并发偏重多任务交替执行,并行是真正意义上的同时执行(必须多核CPU,因为一个CPU一次只能执行一条指令,操作系统原创 2016-11-08 14:56:44 · 670 阅读 · 1 评论 -
java后台将数据写入CSV文件的坑
java后台将数据写入CSV文件时踩过的坑:写入一些数据(例如我碰到过的:订单日期、联行行号、(收款)银行账号、金额)时候,由于数字比较多会导致显示成缩略形式或者科学计数法,例如下图: 解决方案是:在写入字段时候,在可能发生缩略的地方加上“\t”,代码如下: 改动代码后,文件内容变更为: 注:为了防止公司信息泄露,加了马赛克,还望见谅。原创 2016-10-27 21:07:42 · 5718 阅读 · 5 评论 -
Mybatis之多种数据类型的批量的更新数据库表
我想实现的效果是:更新cap_fo_order表的订单状态=待审核、时间=当前,更新条件是订单id在(id1,id2,id3等多个)范围中并且(订单状态 = “01” and 订单状态的描述 = “初始化”) 。这也就意味着我必须传递多个不同类型的参数。话不多说,上代码展示: //FoOrderRepository文件批量的更新数据库的表Integer updateMulity(@Param("o原创 2017-01-19 17:04:50 · 714 阅读 · 0 评论 -
java 写数据时候,插入到指定行的位置
应用场景举例:需要查数据库获取明细数据若干行,并且汇总得到一行汇总数据。现在需要将汇总数据写入文件第一行,然后将若干行(假设10w行)明细数据从第二行一直写到100001行。实现方式:方法一:(1)查询数据库:在数据库sql中做统计得到汇总行数据,写入文件中。(2)查询数据库:在数据库sql中直接的分页查询(不统计)得到若干行明细数据,并不停的将分页的明细数据追加写入到文件中。原创 2017-06-29 15:02:32 · 12239 阅读 · 3 评论 -
excel模板文件下载
方案一:以下demo主要采用的方案是在项目的resources/template文件夹下存放好限定了若干条件的excel文件,用流的方式下载,支持弹窗方式选定下载路径和后端指定路径的方式。首先需要制作一个限定了若干条件的excel(例如限定文本/日期/数字/分数等格式,设置批注,设置输入值的校验等),目的在于限制运维人员规范的填写文件数据,避免胡乱的填写excel并进行错误的文件导入。原创 2017-08-15 19:20:09 · 720 阅读 · 0 评论 -
POI读取并解析xlsx格式的excel文件
本文主要采用POI来解析excel文件。如果需要解析的是支持数据量更大的.xlsx后缀的格式,需要导入的jar包为poi-ooxml-3.15.jar;若是需要解析的是.xls后缀的格式,需要导入的是poi-3.17-beta.jar。jar版本建议采用公司maven库中的最新版。本文的demo中,解析的是xlsx后缀的excel文件。xls格式的类似,只需要将所有的XSSF开头的都改成HSS原创 2017-08-15 17:47:49 · 2934 阅读 · 0 评论 -
项目代码部署到Linux上并运行
举例:java项目为cap-cbs-mgr,准备部署到开发环境的linux机器上。1.本地项目的根目录下需要放入三个文件:package-upload.bat,PLINK.EXE,PSCP.EXE。package-upload.bat的shell脚本内容如下:(本文中涉及账号密码就不方便显示了)echo offset "PROJECT_NAME=xxx"set "HOST原创 2017-08-22 15:52:20 · 1379 阅读 · 0 评论 -
你所不知道的单例模式和多线程并发在单例模式中的影响
单例对象(Singleton)是一种常用的设计模式。在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在。这样的模式有几个好处:1、某些类创建比较频繁,对于一些大型的对象,这是一笔很大的系统开销。2、省去了new操作符,降低了系统内存的使用频率,减轻GC压力。 3、有些类如交易所的核心交易引擎,控制着交易流程,如果该类可以创建多个的话,系统完全乱了。(翻译 2017-09-11 15:18:11 · 364 阅读 · 0 评论 -
java注解实战
java注解的入门入门基础知识 自行百度了解,或者根据下图了解。 自定义注解的高阶实战1.下面是自定义注解类ApiElementpackage test;import java.lang.annotation.*;/** * <p>渠道api element 注解</p> * <pre> * author JasonGao * date原创 2017-12-11 16:54:09 · 413 阅读 · 0 评论 -
超大数据量的xlsx格式的excel文件的读取和解析,解决了POI方式的内存溢出和性能问题
在之前的博文《POI读取并解析xlsx格式的excel文件》中,在小数据量的情况下是可以轻松愉快的处理的,但是当excel文件的数据量达到百万级的时候,InputStream is = files[i].getInputStream(); XSSFWorkbook xssFWorkbook = new XSSFWorkbook(is); 在02处直接就会内存溢出了。无论怎么抢原创 2017-09-14 11:32:17 · 11713 阅读 · 21 评论 -
5分钟秒懂xml头文件
本着精简不罗嗦以及清晰理解的原则,直接上代码进行详解。 --命名空间,类似包名,因为xml的标签可自定义,需要命名空间来区分。起作用只是表示一个元素的范围,在一份XML文档中可能有多个元素相同,这时XMLns就显得非常重要了。xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" --web.xml遵循的xml标签规范。这个命名空原创 2016-11-03 15:37:45 · 608 阅读 · 0 评论