java
文章平均质量分 63
匆匆那谢年
开发工程师
展开
-
Java-Type体系
1.ParameterizedType参数化类型,既泛型,例如List<T>, Set<T>等1.1 getActualTypeArguments获取泛型中的实际类型,可能会存在多个泛型,例如Map<K,V>,所以会返回Type[]数组;注意:无论<>中有几层嵌套(List<Map<String,Integer>),get...原创 2018-08-20 08:41:47 · 236 阅读 · 0 评论 -
进行性能测试工具:JMH 的使用
首先, 添加依赖:<dependencies> <!-- https://mvnrepository.com/artifact/org.openjdk.jmh/jmh-core --> <dependency> <groupId>org.openjdk.jmh</groupId> ...转载 2018-07-03 22:07:34 · 685 阅读 · 0 评论 -
内联(inlining)
JVM JIT编译器优化技术有近100中,其中最最重要的方式就是内联(inlining)。方法内联可以省掉方法栈帧的创建,方法内联还使让JIT编译器更多更深入的优化变成可能。Inlining相关的启动参数jvm可以通过两个启动参数来控制字节码大小为多少的方法可以被内联:-XX:MaxInlineSize:能被内联的方法的最大字节码大小,默认值为35B,这种方法不需要频繁的调用...转载 2018-07-03 22:06:38 · 1023 阅读 · 0 评论 -
spring mvc 中 请求处理过程
spring mvc 中 请求处理过程 url初始化过程: org.springframework.web.servlet.handler.AbstractDetectingUrlHandlerMapping.initApplicationContext() throws ApplicationContextException (初始化从这里开始 ) org.springframewor...原创 2018-07-03 22:05:48 · 243 阅读 · 0 评论 -
linux命令:
linux命令:tail -n 10 test.log 查询日志尾部最后10行的日志;tail -n +10 test.log 查询10行之后的所有日志;head -n 10 test.log 查询日志文件中的头10行日志;head -n -10 test.log 查询日志文件除了最后10行的其他所有日志; 通过关键字查找日志的方法: 首先,cat -n tes...原创 2018-07-03 22:05:22 · 119 阅读 · 0 评论 -
redis3.0部署
Redis集群部署文档(centos6系统)(要让集群正常工作至少需要3个主节点,在这里我们要创建6个redis节点,其中三个为主节点,三个为从节点,对应的redis节点的ip和端口对应关系如下)127.0.0.1:7000127.0.0.1:7001127.0.0.1:7002127.0.0.1:7003127.0.0.1:7004127.0.0.1:7005 1:下载redis。官网下载3.0...原创 2018-07-03 22:04:56 · 184 阅读 · 0 评论 -
2014-twitter-meetup-netty
1. No Pipelining Optimizationpublic class HttpHandler extends SimpleChannelInboundHandler<HttpRequest> { @Override public void channelRead(ChannelHandlerContext ctx, HttpRequest req) { Chan...转载 2018-07-03 22:03:53 · 242 阅读 · 0 评论 -
netty
一、基础1.核心对象的对应关系: Socket--channel--ChannelPipeline--ChannelHandlers(多个ChannelHandler) 即一个socket对应一个channel,一个channel对应一个channelPipeline,一个channelPipeline包会含多个channelHandler。2.channelHandler2.1 由于channe...原创 2018-07-03 22:03:16 · 145 阅读 · 0 评论 -
activiti与spring结合时的 初始化过程
// 工作流引擎的配置< bean id= "processEngineConfiguration" class= "org.activiti.spring.SpringProcessEngineConfiguration" > <property name ="dataSource" ref="dataSource" /> &am原创 2018-07-04 09:12:22 · 697 阅读 · 0 评论 -
分布式锁
分布式锁一、zookeeper1、实现原理:基于zookeeper瞬时有序节点实现的分布式锁,其主要逻辑如下(该图来自于IBM网站)。大致思想即为:每个客户端对某个功能加锁时,在zookeeper上的与该功能对应的指定节点的目录下,生成一个唯一的瞬时有序节点。判断是否获取锁的方式很简单,只需要判断有序节点中序号最小的一个。当释放锁的时候,只需将这个瞬时节点删除即可。同时,其可以避免服务宕机导致的锁...转载 2018-07-03 21:59:52 · 412 阅读 · 0 评论 -
压缩算法的比较
压缩算法的比较以下是Google几年前发布的一组测试数据(数据有些老了,有人近期做过测试的话希望能共享出来):Algorithm% remainingEncodingDecodingGZIP13.4%21 MB/s118 MB/sLZO20.5%135 MB/s410 MB/sZippy/Snappy22.2%172 MB/s409 MB/s 注:来自《HBase: The Definiti...转载 2018-07-03 22:00:06 · 2890 阅读 · 0 评论 -
文件上传-base64处理:
文件上传-base64处理:1. Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryc3BMO1CxMBoySN3S增加标签boundary,以区分不同的数据段,具体提交参数例如:------WebKitFormBoundaryc3BMO1CxMBoySN3SContent-Disposition: form-data...原创 2018-07-03 22:00:18 · 1283 阅读 · 0 评论 -
条件表达式
1Object o1 = true? newInteger(1) : newDouble(2.0);bu同于:123456Object o2; if(true) o2原创 2014-11-21 09:15:25 · 530 阅读 · 0 评论 -
<编写高质量改善java程序的151个建议>----笔记
1.显示申明serialVersionUID可以避免对象不一致。因为在jvm反序列化时,会比较数据流中的serialVersionUID与类的serialVersionUID是否相同,若相同则认为类没有发生变化,可以把数据流load为实例对象;若不同,则抛异常InnalidClassException. 2.避免用序列化类在构造函数中为final变量赋值。反序列化时final变量在以下情况不会原创 2014-05-27 18:26:56 · 429 阅读 · 0 评论 -
线程的状态
1.sleep和wait其中最本质的原创 2014-05-27 17:05:24 · 406 阅读 · 0 评论 -
System.getProperty()方法小结
System.out.println("java版本号:" + System.getProperty("java.version")); // java版本号 System.out.println("Java提供商名称:" + System.getProperty("java.vendor")); // Java提供商名称 System.out.原创 2014-05-13 10:50:32 · 482 阅读 · 0 评论 -
CyclicBarrier及CountDownLatch
.CyclicBarrier当每个线程await之后,就会等待其他线程都执行到达await时,才继续执行。即用于多线程之间的等待。例如:id:1id:2id:4id:0id:3线程组执行结束线程组任务3结束,其他任务继续线程组任务1结束,其他任务继续线程组任务4结束,其他任务继续线程组任务0结束,其他任务继续线程组任务2结束,其他任务继续2.CountDownLatch每当线程countDown之...原创 2018-07-02 22:05:47 · 93 阅读 · 0 评论 -
获取泛型类型
1. public Type getGenericSuperclass()用来返回表示当前Class 所表示的实体(类、接口、基本类型或 void)的直接超类的Type。如果这个直接超类是参数化类型的,则返回的Type对象必须明确反映在源代码中声明时使用的类型。2.public Type[] getGenericInterfaces()与上面那个方法类似,只不过Java的类可以实现多个接口,所以返...原创 2018-07-02 22:07:12 · 1643 阅读 · 0 评论 -
构建高可用的缓存集群的开源解决方案
很多应用都通过使用缓存来避免所有的请求都查询数据库,以加快系统的响应速度,Memcached是常用的缓存服务器(现在比较流行的还有Redis),它一个高性能的分布式内存对象缓存系统,旨在通过缓存数据库查询结果,减少数据库的访问次数。但是在运行多个Memcached服务器时,往往还需要考虑其它的问题,比如缓存一致性、缓存失效等,缓存一致性是指要保证多个Memcached服务器中数据的一致,缓存失效的...转载 2018-07-02 22:13:57 · 460 阅读 · 0 评论 -
redis 命令
redis命令1.批量删除特定key: ./redis-cli keys corebaseuserno_* | xargs ./redis-cli del原创 2018-07-02 22:13:21 · 105 阅读 · 0 评论 -
java最佳实践
1. Never Swallow InterruptedExceptionLet's check the following code snippet:public class Task implements Runnable { private final BlockingQueue<String> queue = ...; @Override public void run(...转载 2018-07-02 22:12:52 · 337 阅读 · 0 评论 -
Activiti笔记-命令模式
Activiti笔记-命令模式Context 环境,容器CommandContext 命令容器,环境 ---命令执行者CommandContextInterceptor 命令容器拦截器Command 命令接口ContectCommand 具体命令RestController--命令发起者1.Context中定义了ThreadLocal变量,方便公共变量对象的存取和传递2.CommandCon...原创 2018-07-02 22:11:41 · 691 阅读 · 0 评论 -
spring 事务小记
1.PROPAGATION_REQUIRES_NEW: 不管是不是已经在外面的事务中,都会创建一个新的事物,该新事物拥有自己的隔离范围、锁等等,既是一个完整的不依赖外部事务的新事务;同时当内部新事务开始执行时,外面的事务会被挂起,直到内部新事务执行完毕。2.PROPAGATION_NESTED:创建一个嵌套事务,是外部事务的一部分,只有外部事务结束后该嵌套事物才会被提交。以上二者的区别: PROP...原创 2018-07-02 22:10:56 · 96 阅读 · 0 评论 -
Java 理论与实践: 处理 InterruptedException
捕捉到它,然后怎么处理它?很多 Java™ 语言方法,例如 Thread.sleep() 和 Object.wait(),都可以抛出InterruptedException。您不能忽略这个异常,因为它是一个检查异常(checked exception)。但是应该如何处理它呢?在本月的 Java 理论与实践中,并发专家 Brian Goetz 将解释 InterruptedException 的含义...转载 2018-07-02 22:10:02 · 125 阅读 · 0 评论 -
统一处理异常:
1.@ControllerAdvice 注解定义全局异常处理类@ControllerAdvicepublic class GlobalExceptionHandler {}2.@ExceptionHandler 注解声明异常处理方法,注解的方法的参数列表里,还可以声明很多种类型的参数@ControllerAdvicepublic class GlobalExceptionHandler { ...原创 2018-07-02 22:09:26 · 129 阅读 · 0 评论 -
阿里云Redis开发规范
阿里云Redis开发规范 云栖社区58分钟前 · 阿里云云栖社区官方头条号摘要: 本文介绍了在使用阿里云Redis的开发规范,从键值设计、命令使用、客户端使用、相关工具等方面进行说明,通过本文的介绍可以减少使用Redis过程带来的问题。一、键值设计1. key名设计(1)【建议】: 可读性和可管理性以业务名(或数据库名)为前缀(防止key冲突),用冒号分隔,比如业务名:表名:idugc:vide...转载 2018-07-02 22:08:38 · 260 阅读 · 0 评论 -
字符串优化
基础类型转化成String在程序中你可能时常会需要将别的类型转化成String,有时候可能是一些基础类型的值。在拼接字符串的时候,如果你有两个或者多个基础类型的值需要放到前面,你需要显式的将第一个值转化成String(不然的话像System.out.println(1+'a')会输出98,而不是"1a")。当然了,有一组String.valueOf方法可以完成这个(或者是基础类型对应的包装转载 2014-03-24 09:07:22 · 462 阅读 · 0 评论