
java
文章平均质量分 50
L.Y001
Shoot for the moon. Even if you miss, you'll land among the stars
展开
-
Lo4j2 重写日志,Lo4j2日志 脱敏思路
Lo4j2 重写日志,Lo4j2日志 脱敏思路原创 2022-07-30 12:50:45 · 1705 阅读 · 0 评论 -
微服务事务设计/问题
事务问题从单体应用迁移到微服务架构时,不得不面临的问题之一就是事务。在单体应用时代,所有业务共享同一个数据库,一次请求操作可放置在同一个数据库事务中;在微服务架构下,这件事变得非常困难。然而事务问题不可避免,非常关键。解决事务问题时,最先想到的解决方法通常是分布式事务。分布式事务在传统系统中应用的比较广泛,主要基于两阶段提交的方式实现。然而分布式事务在微服务架构中可行性并不高,主要基于这些考虑:分布原创 2017-03-22 14:18:14 · 829 阅读 · 0 评论 -
Thrift
Thrift是一个跨语言的服务部署框架,最初由Facebook于2007年开发,2008年进入Apache开源项目。Thrift通过一个中间语言(IDL, 接口定义语言)来定义RPC的接口和数据类型,然后通过一个编译器生成不同语言的代码(C++,Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk和OCaml),并由原创 2017-03-22 14:06:34 · 371 阅读 · 0 评论 -
springboot log4j2
1、pom.xml加入log4j2,并同时把spring boot默认的logging去掉<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId>原创 2017-03-21 17:39:33 · 984 阅读 · 0 评论 -
log4j2 vs logback
http://logging.apache.org/log4j/2.x/manual/async.html原创 2017-03-21 17:35:16 · 5953 阅读 · 0 评论 -
Logback 日记性能
Logback 日记性能 最近发现 Tomcat 的 tps 一直 上不去 原来是 Logback 日记的关系原创 2017-03-20 17:15:58 · 1028 阅读 · 0 评论 -
http_load
http_load 压力测试工具:http_load以并行复用的方式运行,用以测试web服务器的吞吐量与负载。但是它不同于大多数压力测试工具,它可以以一个单一的进程运行,一般不会把客户机搞死。还可以测试HTTPS类的网站请求。下载地址:http://soft.vpser.net/test/http_load/http_load-12mar2006.tar.gz 安装很简单tar zxvf ht原创 2017-03-20 16:56:52 · 378 阅读 · 0 评论 -
visualvm 性能调优工具
1、什么是VisualVMvisualvm是jdk自带的一款监控工具。它提供了一个可视界面,用于查看 Java 虚拟机上运行的基于 Java 技术的程序的详细信息。VisualVM 对 Java Development Kit (JDK) 工具所检索的 JVM 软件相关数据进行组织,并通过一种使您可以快速查看有关多个 Java 应用程序的数据的方式提供该信息。您可以查看本地应用程序以及远程主机上运行原创 2017-03-20 17:00:43 · 411 阅读 · 0 评论 -
性能调优 jstack
qmq是部署在tomcat中的应用名 ps -ef | grep qmq | grep -v grep拿到进程号, 例如上面对应的是3192第二步找出该进程内最耗费CPU的线程,可以使用ps -Lfp pid或者ps -mp pid -o THREAD, tid, time或者top -Hp pid 例如用第三个 top -Hp 3192Tasks: 123 total, 0 runn原创 2017-03-20 16:59:10 · 611 阅读 · 0 评论 -
Sharding-JDBC
Sharding-JDBC 当当的分库分表 插件。原创 2017-03-07 09:04:58 · 532 阅读 · 0 评论 -
Disruptor
//TODO 并发框架Disruptor浅析原创 2017-03-06 14:55:49 · 344 阅读 · 0 评论 -
Java8 时间类
转 :http://www.codeceo.com/article/java-8-20-datetime.html除了lambda表达式,stream以及几个小的改进之外,Java 8还引入了一套全新的时间日期API,在本篇教程中我们将通过几个简单的任务示例来学习如何使用Java 8的这套API。Java对日期,日历及时间的处理一直以来都饱受诟病,尤其是它决定将java.util.Date定义为可修转载 2017-03-26 15:14:50 · 1213 阅读 · 0 评论 -
vue搭建
http://www.jianshu.com/p/96751fcdaaabhttp://www.jianshu.com/p/5ba253651c3batom / webstorm 配置原创 2017-03-27 10:19:36 · 624 阅读 · 0 评论 -
API接口安全性设计
接口的安全性主要围绕Token、Timestamp和Sign三个机制展开设计,保证接口的数据不会被篡改和重复调用,下面具体来看:Token授权机制:用户使用用户名密码登录后服务器给客户端返回一个Token(通常是UUID),并将Token-UserId以键值对的形式存放在缓存服务器中。服务端接收到请求后进行Token验证,如果Token不存在,说明请求无效。时间戳超时机制:用户每次请求都带上当前时间原创 2017-04-08 15:46:09 · 7379 阅读 · 1 评论 -
Java 生产者 与 消费者 的实际运用
生产者与消费者模式的实际运用原创 2016-10-08 23:24:52 · 1825 阅读 · 0 评论 -
数据加密的一些理解
(一)加密算法分为: (1)对称加密算法: DES算法,3DES算法,TDEA算法,Blowfish算法,RC5算法,IDEA算法,AES算法。 (2)非对称加密算法 : RSA、Elgamal、背包算法、Rabin、D-H、ECC。 (3)哈希算法 : MD2、MD4、MD5 和 SHA-1(二) 区别及特点: 对称加密算法: 秘原创 2016-11-12 15:06:49 · 2285 阅读 · 0 评论 -
Android 6.0 权限的申请 与 封装
Android 6.0 以后最大的改变就是对于权限的管理这一块了,以前某个App 想使用什么权限 只要在 manifest 文件里面添加申请就可以了。 Android 6.0 以后不但要在manifest 里面添加运行的时候还会弹出一个对话框让用户选择是否赋予该权限。新的权限机制更好的保护了用户的隐私,Google将权限分为两类,一类是Normal Permissions,这类权限一般不涉及原创 2016-10-04 16:46:56 · 2132 阅读 · 0 评论 -
redis使用watch秒杀抢购思路
1、使用watch,采用乐观锁 2、不使用悲观锁,因为等待时间非常长,响应慢 3、不使用队列,因为并发量会让队列内存瞬间升高import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import redis.clients.jedis.Jedis;/** * redis测试抢购 *原创 2017-04-15 13:02:05 · 19774 阅读 · 12 评论 -
像@Transactional一样利用注解自定义aop切片
在spring中,利用@Transactional注解可以很轻松的利用aop技术进行事物管理。在实际项目中,直接利用自定义注解实现切片可以大大的提高我们的编码效率以及代码的简洁性。实现以上的目标,主要涉及两方面工作。自定义注解将注解声明为切片自定义注解介绍注解自定义的文章比较多,这里简要介绍一下以下面的代码为例。该代码要实现一个分布式锁的代码。首先利用@interface来声明该类为接口类,用@T转载 2017-04-23 11:18:38 · 1628 阅读 · 0 评论 -
基于 AOP 和 Redis 实现的分布式锁
思路是:获取锁使用 redis setnx key value 特性 :如果设置成功,返回 1 。 设置失败,返回 0 。 设置key 的过期时间用完了删除key采用 AOP 提高开发效率自定义注解 包含 过期时间,等待时间,key自定义注解/** * Created by linving on 2017/4/24. */@Target({ ElementType.METH原创 2017-05-11 16:56:22 · 2465 阅读 · 0 评论 -
spring could 微服务 跨域问题(CORS )
记 一坑 CORS 在微服务网关 zuul 和 底下的服务都设置 跨域 CorsFilter 导致 前段跨域失败 。@Configurationpublic class CorsConfig { @Bean public CorsFilter corsFilter() { final UrlBasedCorsConfigurationSource sourc原创 2017-07-03 22:45:38 · 15908 阅读 · 0 评论 -
HttpMessageConverter
Spring mvc HttpMessageConverter 可以对输出 输入的参数进行处理。原创 2017-07-07 16:32:09 · 659 阅读 · 0 评论 -
War包 打包成 Docker
<!-- docker 打包 插件 -->-<plugin><groupId>com.spotify</groupId><artifactId>docker-maven-plugin</artifactId><version>0.4.11</version>-<configuration><!-- 打包名称 --><imageName>${docker.image.prefix}/${p原创 2017-05-11 17:12:33 · 1820 阅读 · 0 评论 -
ThreadLocal
ThreadLocal的作用是提供线程内的局部变量,这种变量在线程的生命周期内起作用,减少同一个线程内多个函数或者组件之间一些公共变量的传递的复杂度。相信读者在网上也看了很多关于ThreadLocal的资料,很多博客都这样说:ThreadLocal为解决多线程程序的并发问题提供了一种新的思路;ThreadLocal的目的是为了解决多线程访问资源时的共享问题。如果你也这样认为的,清空之前对Thread原创 2017-02-27 14:15:46 · 409 阅读 · 0 评论 -
JVM内存系列
JVM内存原创 2017-03-18 17:28:10 · 321 阅读 · 0 评论 -
二叉树遍历(递归)
二叉树又称为红黑树,是一种常用的数据结构,而二叉树的遍历则是一种非常基本的操作。遍历二叉树的方式有两大类:递归和非递归。递归方式算法较为简便,并且更便于理解,非递归方式则需要对二叉树的遍历次序有较为深入的理解,并且非递归方式相较于递归方式除了前序,中序和后序递归以外还有一种广度优先遍历方式。二叉树又称为红黑树,是一种每个节点最多有两个子节点的数据结构,两个节点分别有左右之分,称为左子树和右子树,并且转载 2016-09-03 17:04:01 · 5996 阅读 · 0 评论 -
Butterknife 的简单模拟
Butterknife 是一款优秀的Android 开发框架。 主要用于 控件的初始化,监听事件绑定等,再不用写烦人的 findViewById().新的版本 还加入了 Resource 资源的绑定。 Butterknife 的官网,你可以了解更多。 http://jakewharton.github.io/butterknife/Butterknife 的原理 并不是通过反射 ,而是 A原创 2016-08-01 22:30:32 · 502 阅读 · 0 评论 -
AutoCompleteTextView 自动补全全部
public class MyAutoCompleteTextView extends AutoCompleteTextView{public MyAutoCompleteTextView(Context context) { super(context); }public MyAutoCompleteTextView(Context context, AttributeSet at原创 2016-08-15 17:21:24 · 306 阅读 · 0 评论 -
java 成神之路 (四)
为了实现AOP 这个功能 我们先得了解一下 java 的代理模式原创 2016-06-21 21:46:05 · 448 阅读 · 0 评论 -
java 成神之路 (三)
上次说到了,多线程境况下的问题,今天我们来简单处理一下这个问题。在spring 初始实例的时候会配置一个叫 scope 这个值,如果没有配置 默认是 Prototype。 spring scope 的值 有 Prototype ,Singleton….等 spring 中 Prototype 表示用到的地方 产生一个新的对象,并保存到 spring 容器中,下次从容器获取。同一个Class原创 2016-06-21 20:51:15 · 527 阅读 · 0 评论 -
java 成神之路 (二)
前一篇博客介绍了如何 通过注解反射来实例化一个对象。 先完成前面提出的一个优化建议。 上一版本,每个含有 @DAL 注解的变量都会 通过反射去得到实例化对象。 要是同一个工程里面 每次都对同一个类通过反射实例化一个 对象出来,这样太浪费资源了。 现在我们就模拟spring的 bean 工厂,把我们已经实例化的对象缓存起来,下次要用到直接拿出来用不用在通过反射实例化出来了。在做这个工作之前原创 2016-06-19 16:17:44 · 691 阅读 · 0 评论 -
java 成神之路 (一)
通注解和反射实例化一个对象适合对java反射有一点了解的人我们都知道 spring 在 变量前面加上 @autowired @component 等注解就可以实例化该变量。它是怎么做到的呢? 反射加Bean工厂,spring扫描这些注解后通过注解从bean工厂里面取出已实例化的对象,然后通过反射赋值到该变量上面,达到了实例化含有改注解的变量。今天我们来演示一下通过 反射加注解怎么实例化一个变量。原创 2016-06-19 12:38:22 · 2466 阅读 · 1 评论 -
Andoid 总线设计 (三)
我们来使用 一下我们 写的 EvenBusMainActivity 里面注册了两个事件 :@Subscriber(type = SubscriberType.SYNC) private void onEvent(Action action) { Log.d(TAG, “onEvent = ” + action.getMsg()); bt_post.se原创 2016-07-24 18:34:02 · 398 阅读 · 0 评论 -
Andoid 总线设计 (三)
具体的代码设计: 标记注解 用于执行方法上面 @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface Subscriber { SubscriberType type(); }标记执行类型 同步或者异步 public enum SubscriberType {原创 2016-07-24 18:09:23 · 394 阅读 · 0 评论 -
Andoid 总线设计 (二)
EvenBus 用的原理很简单 就是 java 的反射。 1. 扫描注册的类,获取有标记的方法,方法参数(Even),及标记(Annotation)里面的内容等相关 的一些信息,保存在内存变量里面。 2. 在调用Post的时候 ,遍历刚刚 扫描到的方法 根据 Post 的参数(Even) 获取 相应要执行的方法列表。 3. 获取到方法后 调用 Method.invoke(); 大致 思路就原创 2016-07-24 17:50:48 · 423 阅读 · 0 评论 -
Android DecorView浅析
Android DecorView浅析 一、DecorView为整个Window界面的最顶层View。二、DecorView只有一个子元素为LinearLayout。代表整个Window界面,包含通知栏,标题栏,内容显示栏三块区域。三、LinearLayout里有两个FrameLayout子元素。(20)为标题栏显示界面。只有一个TextView显示应用的名称。也可以自定义标题栏,载入后的自定义标原创 2016-09-04 21:41:29 · 346 阅读 · 0 评论 -
泛型擦除
泛型 只在编译期段有效。 我们可以在运行期把 泛型擦除。package test.proxy;import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.List;/** * Created原创 2016-09-18 15:35:56 · 303 阅读 · 0 评论 -
Java通过Executors提供四种线程池
Java通过Executors提供四种线程池,分别为: newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。 newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。 newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。 n原创 2017-03-08 16:05:14 · 442 阅读 · 0 评论 -
轻量级分布式文件系统fastDFS
fastDFS原创 2016-12-11 12:23:05 · 873 阅读 · 0 评论 -
CyclicBarrier And CountDownLatch
CountDownLatch和CyclicBarrier简单比较:CountDownLatchCyclicBarrier软件包java.util.concurrentjava.util.concurrent适用情景主线程等待多个工作线程结束多个线程之间互相等待,直到所有线程达到一个障碍点(Barrier point)主要方法CountDownLatch(int count) (主线程调用)初始化计数原创 2017-02-28 09:54:16 · 341 阅读 · 0 评论