java
文章平均质量分 93
awesome_go
这个作者很懒,什么都没留下…
展开
-
java 并行化 处理-2
1.前言想必热爱游戏的同学小时候,都幻想过要是自己要是能像鸣人那样会多重影分身之术,就能一边打游戏一边上课了,可惜漫画就是漫画,现实中并没有这个技术,你要么只有老老实实的上课,要么就只有逃课去打游戏了。虽然在现实中我们无法实现多重影分身这样的技术,但是我们可以在计算机世界中实现我们这样的愿望。2.计算机中的分身术计算机中的分身术不是天生就有了。在1971年,1971年,英特尔推出的全球第一颗通用型微处理器4004,由2300个晶体管构成。当时,公司的联合创始人之一戈登摩尔就提出大名鼎鼎的“摩尔定原创 2020-09-08 11:35:31 · 751 阅读 · 0 评论 -
spring 怎么实现并行化 查询代码
让我们先看个图, Taobao的PDP(Product Detail Page)页.打开Chrome Network面板, 让我们来看taobao是怎么加载这个页面数据的. 根据经验, 一般是异步加载的, 要么是XHR,要么就是js(jsonp), 你应该很快可以找到还能看到这个接口的性能神奇的是, taobao竟然在一次请求中拉下了整个PDP页的完整数据, 而且服务端处理耗时不到125ms首先, 这么做有什么好处?前后端开发对接简单 在...原创 2020-09-08 10:53:53 · 659 阅读 · 0 评论 -
Java 内存泄漏与内存溢出详解
内存泄漏指你用malloc或new申请了一块内存,但是没有通过free或delete将内存释放,导致这块内存一直处于占用状态。内存溢出指你申请了10个字节的空间,但是你在这个空间写入11或以上字节的数据,就是溢出。内存泄露是指程序中间动态分配了内存,但在程序结束时没有释放这部分内存,从而造成那部分内存不可用的情况,重启计算机可以解决,但也有可能再次发生内存泄露,内存泄露和硬件没有关系,...原创 2020-03-24 16:41:33 · 2198 阅读 · 0 评论 -
JVM故障分析及性能优化系列之七:使用MAT的Histogram和Dominator Tree定位溢出源
JVM故障分析及性能优化系列文章JVM故障分析及性能优化系列之一:使用jstack定位线程堆栈信息JVM故障分析及性能优化系列之二:jstack生成的Thread Dump日志结构解析JVM故障分析及性能优化系列之三:jstat命令的使用及VM Thread分析JVM故障分析及性能优化系列之四:jstack生成的Thread Dump日志线程状态JVM故障分析及性能优化系列之五:常见的Thre...原创 2020-02-28 14:10:25 · 344 阅读 · 0 评论 -
Java多线程中ReentrantLock与Condition详解
一、ReentrantLock类1.1什么是reentrantlockjava.util.concurrent.lock中的Lock框架是锁定的一个抽象,它允许把锁定的实现作为Java类,而不是作为语言的特性来实现。这就为Lock的多种实现留下了空间,各种实现可能有不同的调度算法、性能特性或者锁定语义。ReentrantLock类实现了Lock,它拥有与synchronized相同的并发性...原创 2019-11-19 14:00:05 · 1619 阅读 · 0 评论 -
XStream进行XML与对象的互相转换时 特殊字符下划线 遇到的坑
在与运营商调试接口时遇到了这个坑,对象中有个字段名为other_order_no在使用XStram转化为XML字符串后神奇的变成了other__order__no导致鉴权失败,几番调试之后才发现这个问题,虽没有浪费太多时间,但也着实让人着急了一把。于是很自然的使用aliasField接口更改字段名xStream.aliasField("other_order_no",XXXX.class,...原创 2019-11-15 10:54:47 · 1256 阅读 · 1 评论 -
jpush 极光推送教程
一. 极光推送代码1. maven依赖<!--极光推送--><dependency> <groupId>cn.jpush.api</groupId> <artifactId>jpush-client</artifactId> <version>3.2.9</version&...原创 2019-10-31 14:25:29 · 800 阅读 · 0 评论 -
redo undo 和 binlog 有什么作用
MySQL中有六种日志文件,分别是:重做日志(redo log)、回滚日志(undo log)、二进制日志(binlog)、错误日志(errorlog)、慢查询日志(slow query log)、一般查询日志(general log),中继日志(relay log)。其中重做日志和回滚日志与事务操作息息相关,二进制日志也与事务操作有一定的关系,这三种日志,对理解MySQL中的事务操作有着重要...原创 2019-09-20 15:35:54 · 488 阅读 · 0 评论 -
ab命令 - 网站性能压力测试
Apache 的httpd 工具包中提供了apachebench,可以简单的做网站性能压力测试。ab的选项主要有如下:-A auth-username:password:指定连接服务器的基本的认证凭据;-c:并发请求数,默认的并发数是1个;-C cookie-name=value:添加cookie,参数通常是一个名称 = 值对的形式,此字段可重复。-g gnuplot-file:...原创 2019-09-26 16:10:25 · 236 阅读 · 0 评论 -
ab cookie 压力测试接口
ab是apache自带的压力测试工具,近期需要压测一个接口,涉及使用post请求,并在其中带cookie。方法总结如下:1. 发送cookie方法1-C key1=value1;key2=value2...1例:ab -n 1 -C "name=ball;age=99;sex=male" "http://wc.sogou.com/worldcup2018/test.php"1服...原创 2019-09-26 16:13:02 · 1770 阅读 · 0 评论 -
HashMap 在 JDK 1.8 后新增的红黑树结构
点击查看 Java 集合框架深入理解 系列 - - 乾杯传统 HashMap 的缺点HashMap 在 JDK 18 中新增的数据结构 红黑树HashMap 中关于红黑树的三个关键参数HashMap 在 JDK 18 中新增的操作桶的树形化 treeifyBinHashMap 在 JDK 18 中新增的操作 红黑树中添加元素 putTreeValHashMap 在 JDK 18 中新增...原创 2019-09-28 10:17:22 · 217 阅读 · 0 评论 -
rabbitmq消息发送的可靠性机制
1.消息发送时确认送达exchange, 可以使用事物机制,或者是消息确认机制2.消息送达exchange后, 设置mandatory为true,确保消息从exchange送达queue3.exchange, queue, 消息都要做持久化4.确保消息被消费者成功处理, 消费者需要设置autoAck为false(如果为true,只要消费端不抛出异常则被ack, 如果消费端接受消息后宕掉...原创 2019-09-29 16:25:02 · 370 阅读 · 0 评论 -
RabbitMQ confirm 模式之异步确认
channel 的 confirm 模式是 RabbitMQ 为保障消息的可靠性投递,所实现的一种机制。关于channel 的 confirm 模式以及 RabbitMQ 如何保障消息的可靠性投递,请参考 RabbitMQ 之消息的可靠性投递这里只介绍 confirm 模式中的异步确认异步确认异步确认是 confirm 模式的一种使用方式,由于它是异步、非阻塞的,因此性能比较好...原创 2019-09-29 17:50:21 · 4352 阅读 · 3 评论 -
RabbitMQ之消息确认机制
11_RabbitMQ之消息确认机制更多干货分布式实战(干货)spring cloud 实战(干货)mybatis 实战(干货)spring boot 实战(干货)React 入门实战(干货)构建中小型互联网企业架构(干货)python 学习持续更新例子代码地址https://github.com/csy512889371/learndemo/tree/master/ctoed...原创 2019-09-30 08:51:04 · 133 阅读 · 0 评论 -
MQ消息可达性+幂等性+延时性架构设计
前篇《无限容量数据库架构设计》收到网友好评: 系统性,全局性看问题体会更深刻 简单易懂 本文再做总结,体系化介绍MQ的一些架构技术。一、总起文章:《究竟什么时候使用MQ》内容: 什么典型场景不应该使用MQ 什么典型场景应该使用MQ 二、消息可达性文章:《MQ,如何做到消息必达》内容: MQ系统架构 MQ消...转载 2019-09-30 08:55:46 · 169 阅读 · 0 评论 -
1_rabbitmq消息中间件概述
一、RabbitMQ 概述MQ 为Message Queue,消息队列是应用程序和应用程序之间的通信方法。RabbitMQ是一个开源的,在AMQP基础上完整的,可复用的企业消息系统支持主流的操作系统:linux、windows、macOX等多种开发语言支持,java、pytyhon、Ruby、.Net、 php、c/c++、node.js等开发语言:Erlang – 面向并发的编...原创 2019-09-30 16:20:59 · 143 阅读 · 0 评论 -
idea 自动代码补全指令
IDEA 有个很牛逼的功能,那就是后缀补全(不是自动补全),很多人竟然不知道这个操作,还在手动敲代码。这个功能可以使用代码补全来模板式地补全语句,如遍历循环语句(for、foreach)、使用 String.format() 包裹一个字符串、使用类型转化包裹一个表达式、根据判(非)空或者其它判别语句生成 if 语句、用 instanceOf 生成分支判断语句等。使用的方式也很简...原创 2019-09-18 16:41:09 · 7221 阅读 · 1 评论 -
springAOP 和 aspectJ 有什么区别
介绍如今有多个可用的AOP库,这些组件需要回答一系列的问题:是否与我现有的应用兼容? 我在哪实现AOP? 集成到我的应用是否很快? 性能开销是多少?本文中,我们将会着重回答这些问题,并介绍两款Java最流行的AOP框架:Spring AOP 和 AspectJ。AOP概念在我们开始之前,让我们对术语和核心概念做一个快速,高水平的回顾:Aspect切面:一个分布在应用程序...原创 2019-09-18 14:17:26 · 1389 阅读 · 0 评论 -
spring ioc容器的原理
1. IoC理论的背景我们都知道,在采用面向对象方法设计的软件系统中,它的底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最终实现系统的业务逻辑。图1:软件系统中耦合的对象如果我们打开机械式手表的后盖,就会看到与上面类似的情形,各个齿轮分别带动时针、分针和秒针顺时针旋转,从而在表盘上产生正确的时间。图1中描述的就是这样的一个齿轮组,它拥有多个独立的齿轮,这些齿轮相互啮合在一起,协...原创 2019-09-18 13:49:43 · 196 阅读 · 0 评论 -
linux 配置jdk 安装
安装准备:下载jdk1.8的安装包。我下载的是 :jdk-8u131-linux-x64.tar.gz 当然也可以在官网中选择其他版本的如果服务器已经联网,也可以进入/usr/local/目录后,执行以下命令:如果是直接在网络上下载的,放到服务器对应位置后就可以进行下面的步骤了,我把jdk安装在了/usr/local/下,所以在/usr/local/解压安装包,执行以下命令:tar ...原创 2018-11-30 15:44:37 · 114 阅读 · 0 评论 -
阿里排查java 问题工具单
平时的工作中经常碰到很多疑难问题的处理,在解决问题的同时,有一些工具起到了相当大的作用,在此书写下来,一是作为笔记,可以让自己后续忘记了可快速翻阅,二是分享,希望看到此文的同学们可以拿出自己日常觉得帮助很大的工具,大家一起进步。闲话不多说,开搞。Linux命令类tail最常用的tail -ftail -300f shopbase.log #倒数300行并进入实时监听文...转载 2018-12-04 09:32:26 · 191 阅读 · 0 评论 -
35个可以提高千倍效率的Java代码小技巧
01前沿代码优化 ,一个很重要的课题。可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用,但是,吃的小虾米一多之后,鲸鱼就被喂饱了。代码优化也是一样,如果项目着眼于尽快无BUG上线,那么此时可以抓大放小,代码的细节可以不精打细磨;但是如果有足够的时间开发、维护代码,这时候就必须...原创 2019-05-16 15:25:55 · 487 阅读 · 0 评论 -
算法总结
今天和大家讲讲,在做算法题时常用的一些技巧。对于平时没用过这些技巧的人,或许你可以考虑试着去看看在实践中能否用的上这些技巧来优化问题的解,相信一定会让你有所收获,不然你看我。1. 巧用数组下标数组的下标是一个隐含的很有用的数组,特别是在统计一些数字,或者判断一些整型数是否出现过的时候。例如,给你一串字母,让你判断这些字母出现的次数时,我们就可以把这些字母作为下标,在遍历的时候,如果字母a遍...转载 2019-05-13 16:20:11 · 147 阅读 · 0 评论 -
合理选择Filter、Interceptor、Aspect?
前言小伙伴们应该听说过过滤器、拦截器、切面,印象上都能够起到截断拦截的作用,在做一些业务需求时,不知道如何选择,今天老顾就来介绍一下他们之间的区别。Filter过滤器过滤器可以拦截到方法的请求和响应(ServletRequest request, ServletResponse response),并对请求响应做出过滤操作。过滤器依赖于servlet容器。在实现上,基于函数回调,...原创 2019-08-30 10:10:06 · 126 阅读 · 0 评论 -
如何优化代码中的 if else
前段时间在阅读别人所写的代码的时候 , 发现其中一些业务相关的方法体内 , 出现了比较多的if-else语句多层嵌套的情况 . 首先我个人不是不提倡写if-else语句 , 不得不说 , 很多时候 , 在写某些逻辑 使用if-else 去做判断 , 代码看起来还是十分直观的 , 但是如果滥用if-else , 形成多层嵌套或者形成, 其中每个case 还包含了大量的逻辑 , 此时从可读性来说 , ...原创 2019-08-30 10:18:53 · 806 阅读 · 0 评论 -
java8 の新的语法特性-Lambda表达式
前言Lambda表达式是Java8的一个特性,而Java8是2014发布的,那时候我刚上大学,还没认识Java呢。过了很长一段时间才学习了Lambda表达式,但是一直没怎么用过,已经忘了差不多了,所以现在特地复习一下。学一个东西我们得知道它是什么,有什么用,怎么用。是什么从不同角度上来说,Lambda表达式是一个语法糖,也可以说是匿名函数。语法糖何谓语法糖,我的理解是语法糖就是方...原创 2019-08-30 17:14:42 · 135 阅读 · 0 评论 -
Java8特性之接口默认方法
是什么Java8中新增了接口的默认方法,简单来说就是让接口可以自己有实现方法,不许要实现类去实现。有什么用想象一种情况,你定义了一个接口A,假如里面有几个抽象方法。然后什么B,C,D,E…一大堆类去实现了A接口里面的几个抽象方法。那么现在问题来了,如果要在A中新加一个抽象方法,那么所有的实现类都要去实现这个抽象方法,不是很麻烦吗?这个时候默认方法就派上用场了,只需要再A中自己实现这个新添加...原创 2019-08-30 17:33:29 · 243 阅读 · 0 评论 -
什么是Java动态代理,如何实现一个动态代理例子
Java动态代理一、概述1. 什么是代理我们大家都知道微商代理,简单地说就是代替厂家卖商品,厂家“委托”代理为其销售商品。关于微商代理,首先我们从他们那里买东西时通常不知道背后的厂家究竟是谁,也就是说,“委托者”对我们来说是不可见的;其次,微商代理主要以朋友圈的人为目标客户,这就相当于为厂家做了一次对客户群体的“过滤”。我们把微商代理和厂家进一步抽象,前者可抽象为代理类,后者可抽象为委...原创 2019-09-04 11:07:03 · 4155 阅读 · 0 评论 -
Spring 创建定时任务
我们在编写Spring Boot应用中经常会遇到这样的场景,比如:我需要定时地发送一些短信、邮件之类的操作,也可能会定时地检查和监控一些标志、参数等。创建定时任务在Spring Boot中编写定时任务是非常简单的事,下面通过实例介绍如何在Spring Boot中创建定时任务,实现每过5秒输出一下当前时间。在Spring Boot的主类中加入@EnableScheduling注解,启用定...原创 2019-09-12 11:27:43 · 636 阅读 · 0 评论 -
如何实现延时触发/定时器
问题微信公众平台后台有一个功能即定时群发消息,如明晚的20:00群发一条图文消息。那么这种延时触发的逻辑如何实现呢?方案一每隔一定的时间扫描所有超时的事件这是最容易想到的一种方案。此方案最关键的两点是轮训的频率以及如何高效地获取超时任务。如果可以允许一秒左右的误差,每隔一秒轮训一次即可。 采用红黑树或者最小堆存储触发任务,按照触发时间戳排序。如此,每次扫描能够很快地获取超时的...原创 2019-09-17 12:09:34 · 3105 阅读 · 0 评论 -
rabbitmq实现向各服务广播消息
广播fanout主要是将一个消息,分发到绑定了它的队列上,而这些队列如消费者自己去建立和绑定!对生产者是解耦的生产者不需要关心消费者有多少,消费者如果需要这种消息,只需要把队列绑定到exchange上即可流程打开rabbitmq的ui 建立两个队列fanout1,fanout2 打开exchange里的amqp.fanout类型 绑定上面的两个队列 向exchange里...原创 2019-09-17 16:37:04 · 557 阅读 · 0 评论 -
rabbitmq实现向各服务广播消息
广播fanout主要是将一个消息,分发到绑定了它的队列上,而这些队列如消费者自己去建立和绑定!对生产者是解耦的生产者不需要关心消费者有多少,消费者如果需要这种消息,只需要把队列绑定到exchange上即可流程打开rabbitmq的ui 建立两个队列fanout1,fanout2 打开exchange里的amqp.fanout类型 绑定上面的两个队列 向exchange里...原创 2019-09-17 16:37:37 · 703 阅读 · 0 评论 -
Java8中的Stream,让集合操作酸爽起来
简介java8也出来好久了,接口默认方法,lambda表达式,函数式接口,Date API等特性还是有必要去了解一下。比如在项目中经常用到集合,遍历集合可以试下lambda表达式,经常还要对集合进行过滤和排序,Stream就派上用场了。用习惯了,不得不说真的很好用。Stream作为java8的新特性,基于lambda表达式,是对集合对象功能的增强,它专注于对集合对象进行各种高效、便利的聚合...原创 2019-09-18 09:28:42 · 108 阅读 · 0 评论 -
twitter自增长 分布式id 雪花算法
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移到Cassandra,因为Cassandra没有顺序ID生...转载 2018-05-23 14:35:32 · 340 阅读 · 0 评论