首页
学习
活动
专区
工具
TVP
发布

xdecode

专栏作者
40
文章
64134
阅读量
33
订阅数
Java高并发之设计模式.
至于为什么要volatile关键字, 主要涉及到jdk指令重排, 详见之前的博文: Java内存模型与指令重排
用户1216491
2018-08-28
5140
Java高并发之线程池详解
例如线程, jdbc连接等等, 在高并发场景中, 如果可以复用之前销毁的对象, 那么系统效率将大大提升.
用户1216491
2018-08-01
6280
EasyMock set方法报错: java.lang.AssertionError
有返回值的方法没问题, 直接andReturn就行了. EasyMock.expect(info.getWebTitle()).andReturn(StringUtils.EMPTY).anyTimes(); 对于set方法没有返回值, 报错AssertionError, 需要如下处理. info.setSessionID(EasyMock.anyString());
用户1216491
2018-08-01
4690
图解Java常用数据结构(一)
最近在整理数据结构方面的知识, 系统化看了下Java中常用数据结构, 突发奇想用动画来绘制数据流转过程.
用户1216491
2018-07-25
4490
Java源码安全审查
最近业务需要出一份Java Web应用源码安全审查报告, 对比了市面上数种工具及其分析结果, 基于结果总结了一份规则库. 本文目录结构如下: 
用户1216491
2018-07-25
2.9K0
后端架构师技术图谱
转自: GitHub/architect-awesome , 大体结构如下(更新时间: 2018-06-22)
用户1216491
2018-07-25
4.8K0
Java高并发之锁优化
本文主要讲并行优化的几种方式, 其结构如下: 锁优化 减少锁的持有时间 例如避免给整个方法加锁 1 public synchronized void syncMethod(){ 2
用户1216491
2018-07-04
6790
Java高并发之无锁与Atomic源码分析
目录 CAS原理 AtomicInteger Unsafe AtomicReference AtomicStampedReference AtomicIntegerArray AtomicIntegerFieldUpdater 无锁的Vector 无锁即无障碍的运行, 所有线程都可以到达临界区, 接近于无等待. 无锁采用CAS(compare and swap)算法来处理线程冲突, 其原理如下 CAS原理 CAS包含3个参数CAS(V,E,N).V表示要更新的变量, E表示预期值, N表示新值. 仅当V值等
用户1216491
2018-05-28
5150
Java内存模型与指令重排
本文暂不讲JMM(Java Memory Model)中的主存, 工作内存以及数据如何在其中流转等等, 这些本身还牵扯到硬件内存架构, 直接上手容易绕晕, 先从以下几个点探索JMM 原子性 有序性 可见性 指令重排 CPU指令重排 编译器优化重排 Happen-Before规则 原子性 原子性是指一个操作是不可中断的. 即使是在多个线程一起执行的时候, 一个操作一旦开始,就不会被其它线程干扰. 例如CPU中的一些指令, 属于原子性的, 又或者变量直接赋值操作(i = 1),, 也是原子性的 即使有多个线程
用户1216491
2018-05-28
1.6K0
Protocol Buffer序列化对比Java序列化.
初识 Protocol Buff是谷歌推出的一种序列化协议. 而Java序列化协议也是一种协议. 两者的目的是, 将对象序列化成字节数组, 或者说是二进制数据, 那么他们之间有什么差异呢. proto对象 要使用PB, 我们需要定义一个proto对象, 其支持的数据类型如下: Protobuf定义了一套基本数据类型。几乎都可以映射到C++\Java等语言的基础数据类型. protobuf 数据类型 描述 打包 C++语言映射 bool 布尔类型 1字节
用户1216491
2018-01-24
2K0
利用Cglib实现AOP
前文讲了, 可以利用Spring, Guice等框架提供的容器实现AOP, 如果想绕过容器, 直接注入Class, 可以利用Cglib为对象加上动态代理,实现代码切入, 但是每次调用比较繁琐, 因此我们还需要给他加了一层语法糖, 使之更易用. Advice Spring带了一堆Advice, 我们只模拟实现环绕Advice, 以及增加了一个Clear切入的注解, 下面看具体实现. 1 /** 2 * 环绕Advie 3 * 4 * 可以加在类上, 或者方法上. 5 * 加在类上的话, 类中
用户1216491
2018-01-24
8220
使用Dagger2做静态注入, 对比Guice.
Dagger 依赖注入的诉求, 这边就不重复描述了, 在上文Spring以及Guice的IOC文档中都有提及, 既然有了Guice, Google为啥还要搞个Dagger2出来重复造轮子呢? 因为使用
用户1216491
2018-01-24
2.8K2
Guice之IOC教程
Guice 在上一篇博客中, 我们讲解了Spring中的IOC示例与实现, 本文着重介绍Guice注入以及与Spring中的差异. Guice是Google开发的, 一个轻量级的依赖注入框架, 跟Spring最大的区别在于脱离xml配置,  大量使用Annotation来实现注入, 支持属性, 构造器, setter等多种方式注入对象. Guice 3.0支持 jdk 1.6, 如果运行报错ClassNotFoundException: javax.inject.Provider, 则需要导入javax.i
用户1216491
2018-01-24
2K0
Java过滤XSS脚本, 可通过Appscan扫描
项目中有时会需要把一些报错或者解决方案直接返回给前端, 如果直接返回原字符串, 可能会被恶意传参来实现xss注入. 例如常规业务访问一个页面读取文件&file=sdf.cpt, 如果文件不存在, 则页面返回没有找到sdf.cpt的报错. 恶意传参即: &file=sdf.cpt<script>alert(123);</script>, 这样页面会alert出来123; 这时需要我们在后台对于一些报错进行去脚本话. 一开始是用的正则, 后来发现可以注入的脚本方式太多了, 用正则越来越长.  1 &file=/
用户1216491
2018-01-24
2.4K1
Java 对IP请求进行限流.
高并发系统下, 有三把利器 缓存 降级 限流. 缓存: 将常用数据缓存起来, 减少数据库或者磁盘IO 降级: 保护核心系统, 降低非核心业务请求响应 限流: 在某一个时间窗口内对请求进行限速, 保护系统  本文主要介绍限流, 常见限流算法中又分为计数器算法, 漏桶算法, 令牌桶算法. 计数器算法 比较简单, 直接用一个map + counter即可实现. 请求来了, 以IP为key, 查询下之前响应次数, 如果调用次数超出MAX_COUT, 返回失败, 属于简单粗暴型选手. 漏桶算法 请求全部进入漏桶, 漏
用户1216491
2018-01-24
3.2K0
Netty之二进制文件传输
传输会话简要 客户端发起一个文本请求给服务器端, 服务器端解析里面文本, 返回文件给客户端, 客户端解析文件 服务器端 因为示例文件比较小, 所以没有做分段传输, 而是直接一次性把整个文件byte[]
用户1216491
2018-01-24
2.3K0
PDFBox 打印带背景的文件速度慢
打印慢的原因 java的RasterPrinterJob会执行很多次printPage方法 他应该是按块填充的, 如果页面元素非常复杂, 那么printPage方法可能会执行十几次. 而如果你用了如下代码中流式打印的方式, 每页pdf单独实现Printable接口, 重写print方法. 1 private static class FinePrintableDemo implements Printable { 2 3 public FinePrintableDemo(PD
用户1216491
2018-01-24
2K0
Spring之AOP
之前在另外一篇博文里介绍过AOP的概念, 这边不在赘述, 可以参考 AOP与动态代理 本文主要介绍Spring中AOP的应用. 切入点: 具体实现类的方法 连接点: 接口中的方法 Advice 前置MethodBeforeAdvice 后置AfterReturnAdvice 环绕MethodInterceptor ThrowsAdvice 1 public class MyServiceBeforeAdvice implements MethodBeforeAdvice{ 2 @Ov
用户1216491
2018-01-24
4550
ASpectJ对AOP的实现
切入点表达式 基于注解 1 @Aspect // 表示当前类切面 2 public class MyAspect { 3 4 @Before("execution(* *..ISom
用户1216491
2018-01-24
6580
Java 代码质量
被滥用的instanceof instanceof滥用, 或者直接强转, 大都数情况可以用方法override, 而且应当避免使用isA(), isB()之类的写法; 比如sonA和sonB都继承自parent, 其中sonA和sonB想对parent里方法move()各自拥有独立的实现;  1 // 错误写法1 2 void test(parent p) { 3 if (p instanceof sonA) { 4 ((sonA) p).moveA(); 5 }
用户1216491
2018-01-24
7280
点击加载更多
社区活动
腾讯技术创作狂欢月
“码”上创作 21 天,分 10000 元奖品池!
Python精品学习库
代码在线跑,知识轻松学
博客搬家 | 分享价值百万资源包
自行/邀约他人一键搬运博客,速成社区影响力并领取好礼
技术创作特训营·精选知识专栏
往期视频·千货材料·成员作品 最新动态
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档