自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

微信公众号:一颗向上的草莓

微信公众号:一颗向上的草莓

  • 博客(42)
  • 资源 (2)
  • 收藏
  • 关注

原创 高并发场景下HttpClient的优化

1.背景我们有个业务,会调用其他部门提供的一个基于http的服务,日调用量在千万级别。使用了httpclient来完成业务。之前因为qps上不去,就看了一下业务代码,并做了一些优化,记录在这里。先对比前后:优化之前,平均执行时间是250ms;优化之后,平均执行时间是80ms,降低了三分之二的消耗,容器不再动不动就报警线程耗尽了,清爽~2.分析项目的原实现比较粗略,就是每次请求时初始...

2019-09-29 11:21:08 731

原创 自定义HttpClient重试策略

场景应用目前程序中涉及到需要callback操作,product需要被动的接收consume的处理状态,为了最大程度的能够callback成功因此consume在http调用出现问题(如:服务不可用、异常、超时)情况下需要进行重试(retry request)。1、针对异常的重试例如:connect timed out/read timed outHttpClientBuilde...

2019-09-29 11:11:44 790

原创 java实现HTTP请求的三种方式

目前JAVA实现HTTP请求的方法用的最多的有两种:一种是通过HTTPClient这种第三方的开源框架去实现。HTTPClient对HTTP的封装性比较不错,通过它基本上能够满足我们大部分的需求,HttpClient3.1 是 org.apache.commons.httpclient下操作远程 url的工具包,虽然已不再更新,但实现工作中使用httpClient3.1的代码还是很多,HttpCl...

2019-09-26 14:35:14 295

原创 HttpClient高并发下性能优化-http连接池

首先,明确两点:1.http连接池不是万能的,过多的长连接会占用服务器资源,导致其他服务受阻2.http连接池只适用于请求是经常访问同一主机(或同一个接口)的情况下3.并发数不高的情况下资源利用率低下那么,当你的业务符合上面3点,那么你可以考虑使用http连接池来提高服务器性能使用http连接池的优点:1.复用http连接,省去了tcp的3次握手和4次挥手的时间,极大降低请求响...

2019-09-26 14:22:57 1084

原创 采用合适的IO流提高文件读取效率

现在有网络传输文件的需求,需要先将文件写出到服务器本地磁盘(需求见:https://blog.csdn.net/u014532775/article/details/101306634),采用传统的IO流速度较慢,在这做一个总结,不同场景和文件大小可以使用不同的方式。1.传统的IO读取方式: /** * 最传统的方式 40M文件 byte字节1024时平均220ms ...

2019-09-26 14:03:23 971

原创 httpclient绕过证书调用https的解决方案

HttpClient直接调用https请求时会报错PKIX path building failed,这里采用一种绕过证书的方式解决。直接看代码:/***绕过验证**@return*@throwsNoSuchAlgorithmException*@throwsKeyManagementException*/publicsta...

2019-09-26 10:40:06 1267

原创 HttpClient重试策略

一、背景 由于工作上的业务本人经常与第三方系统交互,所以经常会使用HttpClient与第三方进行通信。对于交易类的接口,订单状态是至关重要的。 这就牵扯到一系列问题: HttpClient是否有默认的重试策略?重试策略原理?如何禁止重试? 接下来,本文将从源码中探讨这些问题。源码下载地址:http://hc.apache.org/downloads.cgi,版本是4.5....

2019-09-25 20:56:30 882

原创 将amr格式的文件转码成mp3格式存储在自己服务器上的解决方案

1、需求简介现在的需求是微信公众号内说一段话调用微信的上传接口上传至微信服务器,然后下载到我们本地,此时文件是amr格式,浏览器和很多播放器识别不了,需要转码成mp3格式,存储在我们的文件服务器上,现在在这里记录中间踩过的坑。2、几个有用的调试技巧微信上传语音文件的参考网址是:https://developers.weixin.qq.com/doc/offiaccount/OA_Web...

2019-09-24 19:31:45 946

原创 JVM内存垃圾回收方法

概要:why:为什么回收what:垃圾回收哪些内存(不可达对象的确定)when:何时执行GC(安全点、安全区域)how:如何回收(原理——垃圾回收算法、实现——垃圾收集器)1、垃圾回收哪些内存JVM运行时数据区中,线程私有的程序计数器、虚拟机栈、本地方法栈随线程的创建和退出而自动产生和销毁,不需要垃圾回收。JVM垃圾回收的是共享区域的内存,主要是方法区和Java堆内存的回...

2019-09-20 20:59:54 232

原创 JVM内存分配

总的来说,JVM管理的内存包括堆内存和非堆内存。堆就是Java代码可及的内存,是留给开发人员使用的;非堆就是JVM留给自己用的,所以方法区、JVM内部处理或优化所需的内存(如JIT编译后的代码缓存)、每个类结构(如运行时常数池、字段和方法数据)以及方法和构造方法的代码都在非堆内存中。因此这里所说的内存分配是指堆内存的分配,即我们程序中生成的对象的分配。以下所述针对的是HotSpot虚拟机。...

2019-09-20 20:57:56 164

原创 Java对象创建的过程及对象的内存布局与访问定位

这里以HotSpot为例,且所说的对象指普通的Java对象,不包括数组和Class对象等。1、对象创建的过程  1、类加载、解析、初始化:虚拟机遇到new时先检查此指令的参数是否能在常量池中找到类的符号引用,并检查符号引用代表的类是否被加载、解析、初始化,若没有则先进行类加载。  2、对象内存分配:类加载检查通过后,虚拟机为新生对象分配内存,对象所需内存大小在类加载完成后便可完全确定。...

2019-09-20 20:53:21 104

原创 Java虚拟机及运行时数据区

1、JVM定义Java虚拟机(Java Virtual Machine),简称JVM。当我们说起Java虚拟机时,可能指的是如下三种不同的东西:抽象的虚拟机规范 规范的具体实现 一个运行中的虚拟机实例Java虚拟机抽象规范仅仅是一个概念,在《The Java Virtual Machine Specification》中有详细的描述。该规范的实现,可能来自多个提供商,并存在于多个...

2019-09-20 20:52:04 96

原创 JVM内存模型

概要:Java引入内存模型是为了在各种硬件和OS下达到一致的内存访问效果,但它的引入也带来了并发下的一致性问题(因为主内存共享)。因此主要内容:一是内存模型的划分,二是解决并发(多线程)环境下操作的一致性问题,包括原子性、可见性、有序性。1、Java内存模型内存模型:在特定的操作协议下,对特定的内存或高速缓存进行读写访问的过程抽象。Java虚拟机规范定义了Java内存模型(Ja...

2019-09-20 20:47:39 270

原创 JDK工具(查看JVM参数、内存使用情况及分析等)

在JDK的bin目录下有很多命令行工具:  我们可以看到各个工具的体积基本上都稳定在27kb左右,这个不是JDK开发团队刻意为之的,而是因为这些工具大多数是jdk\lib\tools.jar类库的一层薄包装而已,他们的主要功能代码是在tools类库中实现的。命令行工具的好处是:当应用程序部署到生产环境后,无论是直接接触物理服务器还是远程telnet到服务器上都会受...

2019-09-20 20:43:13 363

原创 Java中的逃逸分析

在Java的编译体系中,一个Java的源代码文件变成计算机可执行的机器指令的过程中,需要经过两段编译,第一段是把.java文件转换成.class文件。第二段编译是把.class转换成机器指令的过程。第一段编译就是javac命令。在第二编译阶段,JVM 通过解释字节码将其翻译成对应的机器指令,逐条读入,逐条解释翻译。很显然,经过解释执行,其执行速度必然会比可执行的二进制字节码程序慢很多。这就...

2019-09-20 19:24:15 93

原创 Java中对象并不是都在堆上分配内存的

JIT编译除了具有缓存的功能外,还会对代码做各种优化,比如:逃逸分析、 锁消除、 锁膨胀、 方法内联、 空值检查消除、 类型检测消除、 公共子表达式消除等。JVM内存分配策略关于JVM的内存结构及内存分配方式,不是本文的重点,这里只做简单回顾。以下是我们知道的一些常识:1、根据Java虚拟机规范,Java虚拟机所管理的内存包括方法区、虚拟机栈、本地方法栈、堆、程序计数器等。2、我们...

2019-09-20 17:52:13 136

原创 MyBatis批量更新MySQL(updateBatch)

背景描述:通常如果需要一次更新多条数据有两个方式:(1)在业务代码中循环遍历逐条更新。(2)一次性更新所有数据(更准确的说是一条sql语句来更新所有数据,逐条更新的操作放到数据库端,在业务代码端展现的就是一次性更新所有数据)。两种方式各有利弊,下面将会对两种方式的利弊做简要分析,主要介绍第二种方式在mybatis中的实现。逐条更新  这种方式显然是最简单,也最不容易出错的,...

2019-09-20 16:04:58 854

转载 小于 K 的两数之和

题目描述题目来源于 LeetCode 上第 1099 号问题:小于 K 的两数之和。给你一个整数数组A和一个整数K,请在该数组中找出两个元素,使它们的和小于K但尽可能地接近K,返回这两个元素的和。如不存在这样的两个元素,请返回-1。示例 1:输入:A =[34,23,1,24,75,33,54,8], K = 60输出:58解释:34 和 24 相加得到 ...

2019-09-19 17:19:28 152

转载 深入理解JVM-内存模型(jmm)和GC

1 CPU和内存的交互了解jvm内存模型前,了解下cpu和计算机内存的交互情况。【因为Java虚拟机内存模型定义的访问操作与计算机十分相似】有篇很棒的文章,从cpu讲到内存模型:什么是java内存模型在计算机中,cpu和内存的交互最为频繁,相比内存,磁盘读写太慢,内存相当于高速的缓冲区。但是随着cpu的发展,内存的读写速度也远远赶不上cpu。因此cpu厂商在每颗cpu上加上高速缓存...

2019-09-18 21:01:03 227

原创 2019java面试(七)待补充答案

『熟悉消息中间件RocketMq的使用及其实现原理。』1.项目中使用过RocketMq,是什么场景使用的?不用的话能不能解决问题?比如订单完成之后,发送消息,通知CRM服务完成学生与班主任的绑定,通知分销系统计算渠道商的分成;再比如用户完成某节课程之后发送消息通知勋章服务,判断是否触发发勋章的条件给用户发送勋章。这些场景当然不用消息队列也能解决问题,通过服务间的调用就可以,但是用服务间的...

2019-09-17 22:22:49 186

原创 volatile详细解读

面试连环炮:volatile修饰的变量有什么特性?为什么不能保证原子性?volatile修饰的数组具有可见性吗?如何能够保证安全的操作数组?volatile与synchornized有什么异同?volatile是java虚拟机提供的轻量级的同步机制,保证了可见性,有序性,不保证原子性JMM(Java内存模型)是围绕着并发编程中原子性、可见性、有序性这三个特征来建立的,解释如下:一、...

2019-09-17 18:38:29 917

原创 说说你对threadlocal的理解?以及它的应用和如何解决hash冲突的

什么是散列散列表(hash table)我们平时也叫它哈希表或者Hash表,它用的是数组支持按照下标随机访问数据的特性,所以散列表其实就是数组的一种扩展,由数组演化而来。可以说,没有数组就没有散列表。比如我们有100件商品,编号没有规律的4位数字,现在我们想要通过编号快速获取商品信息,如何做呢?我们可以将这100件商品信息放到数组里,通过 商品编号%100这样的方式得到一个值,值为1的商品...

2019-09-16 22:25:42 3970 2

原创 java基础面试

1、有没有研究过hashmap的源码?说说你的理解2、了解Java的try-with-resources语法糖吗3、说说你对threadlocal的理解?以及它的应用和如何解决hash冲突的4、volatile修饰的变量有什么特性?为什么不能保证原子性?volatile修饰的数组具有可见性吗?如何能够保证安全的操作数组?volatile与synchornized有什么异同?...

2019-09-16 21:50:09 102

原创 hashmap源码的理解

ThreadLocalMap是使用开放地址法来解决冲突问题的,而我们今天的主角HashMap是采用了链表法来处理冲突的,什么是链表法呢?数据结构在散列表中,每个 “ 桶(bucket)” 或者 “ 槽(slot)” 会对应一条链表,所有散列值相同的元素我们都放到相同槽位对应的链表中。jdk8和jdk7不一样,jdk7中没有红黑树,数组中只挂载链表。而jdk8中在桶容量大于等于64且...

2019-09-16 21:49:24 166

原创 反转数组

定义一个函数reverse(int[] array, int begin, int end),实现反转begin和end中的元素,不能使用java现成的api,举例:数组{1,2,3,4,5,6},begin是1,end是4,则反转后的数组是:{1,5,4,3,2,6}。代码如下:public class ReverseArray { public static void ...

2019-09-16 18:49:14 1145

原创 java算法面试

1.手撕冒泡排序2.反转数组

2019-09-16 18:20:53 358

原创 Java实现冒泡排序

原理:每次比较两个相邻的元素,将较大的元素交换至右端。思路:每次冒泡排序操作都会将相邻的两个元素进行比较,看是否满足大小关系要求,如果不满足,就交换这两个相邻元素的次序,一次冒泡至少让一个元素移动到它应该排列的位置,重复N次,就完成了冒泡排序。通过一个图来简单理解一下一次冒泡的过程【注意:图中每一竖列是一次比较交换】:图中可以看出,经过一次冒泡,6这个当前数组中最大的元素飘到了最上...

2019-09-16 18:19:45 146

原创 maven面试题

1.Maven中 jar包冲突原理与解决办法

2019-09-16 17:55:27 482

转载 Maven中 jar包冲突原理与解决办法

Maven中jar包冲突是开发过程中比较常见而又令人头疼的问题,我们需要知道 jar包冲突的原理,才能更好的去解决jar包冲突的问题。本文将从jar包冲突的原理和解决两个方面阐述Maven中jar包冲突的解决办法。一、Maven中jar包冲突产生原因MAVEN项目运行中如果报如下错误:Caused by:java.lang.NoSuchMethodErrorCaused by: j...

2019-09-16 17:54:09 320

原创 分布式系统面试题:分布式事务解决方案

面试题分布式事务了解吗?你们是如何解决分布式事务问题的?面试题剖析一般来说,分布式事务的实现主要有以下 5 种方案:XA 方案 TCC 方案 本地消息表 可靠消息最终一致性方案 最大努力通知方案两阶段提交方案/XA方案所谓的 XA 方案,即:两阶段提交,有一个事务管理器的概念,负责协调多个数据库(资源管理器)的事务,事务管理器先问问各个数据库你准备好了吗?如果每个数据...

2019-09-14 17:59:46 513

原创 Redis:分布式寻址算法

redis分布式寻址算法有:hash 算法(大量缓存重建) 一致性 hash 算法(自动缓存迁移)+ 虚拟节点(自动负载均衡) redis cluster 的 hash slot 算法1. 前言在Redis 集群模式Cluster中,Redis采用的是分片Sharding的方式,也就是将数据采用一定的分区策略,分发到相应的集群节点中。但是我们使用上述HASH算法进行缓存时,会出现一些缺...

2019-09-14 17:58:19 1152

原创 分布式事务之如何基于RocketMQ的事务消息特性实现分布式系统的最终一致性

导读在之前的文章中我们介绍了如何基于RocketMQ搭建生产级消息集群,以及2PC、3PC和TCC等与分布式事务相关的基本概念(没有读过的读者详见推荐阅读)。在这篇文章中我们将介绍RocketMQ的事务消息相关的内容,并通过一些实践和大家一起来探索下事务消息如何解决分布式系统中的分布式事务问题。事务消息原理事务消息特性可以看作是两阶段协议的消息实现方式,用以确保在以消息中间件解耦的分布...

2019-09-14 17:08:59 612

原创 如何利用rocketMQ解决分布式事务

在rocketMQ中生产者有三种角色 NormalProducer(普通)、OrderProducer(顺序)、TransactionProducer(事务)根据名字大概可以看出各个代表着什么作用,我们这里用 TransactionProducer(事务)来解决问题。先举个列子来说明下我们解决方案的设计方式吧:最经典的莫过于银行转账了,网上到处都有,时序图如下我们的解决方案与这个大...

2019-09-14 17:04:54 233

原创 LinkedHashMap实现LRU缓存算法

LinkedHashMap的get()方法除了返回元素之外还可以把被访问的元素放到链表的底端,这样一来每次顶端的元素就是remove的元素。构造函数如下:publicLinkedHashMap(int initialCapacity, float loadFactor, boolean accessOrder);initialCapacity 初始容量loadFactor ...

2019-09-14 13:31:19 119

原创 ip用int类型存储

今天再看sql优化的时候,突然看到一点说建议ip在数据库里用int类型存储,试了一下,在这里记录一下/** * * (Ip转Integer) * 方法名:ipToInteger * @exception * @since 1.0.0 */ public static int ipToInteger(String ip){ String[] ips = ip...

2019-09-12 22:50:21 228

原创 Mysql多版本并发控制(MVCC)是指什么

我们知道,mysql的innodb采用的是行锁,而且采用了多版本并发控制来提高读操作的性能。什么是多版本并发控制呢 ?其实就是在每一行记录的后面增加两个隐藏列,记录创建版本号和删除版本号,而每一个事务在启动的时候,都有一个唯一的递增的版本号。1、在插入操作时 : 记录的创建版本号就是事务版本号。比如我插入一条记录, 事务id 假设是1 ,那么记录如下:也就是说,创建版本号就是事...

2019-09-10 19:29:41 282 1

原创 mysql索引篇之覆盖索引、前缀索引、索引下推

覆盖索引在之前《mysql索引初识》这篇文章中提到过,mysql的innodb引擎通过搜索树方式实现索引,索引类型分为主键索引和二级索引(非主键索引),主键索引树中,叶子结点保存着主键即对应行的全部数据;而二级索引树中,叶子结点保存着索引值和主键值,当使用二级索引进行查询时,需要进行回表操作。假如我们现在有如下表结构CREATE TABLE `user_table` ( `id` i...

2019-09-10 16:22:27 701

原创 当你在浏览器地址栏输入一个URL后回车,将会发生的事情

当我们在浏览器的地址栏输入www.cnblogs.com,然后回车,回车到看到页面到底发生了什么呢?域名解析 --> 发起TCP的3次握手 --> 建立TCP连接后发起http请求 --> 服务器响应http请求,浏览器得到html代码 --> 浏览器解析html代码,并请求html代码中的资源(如js、css、图片等) --> 浏览器对页面进行渲染呈现给用户...

2019-09-09 22:43:03 1016

原创 fastJson --JSONException syntax error, expect {, actual string, pos...

现在接收微信端返回的数据是:"{\"openId\":\"odGdO5WBDw-I88rJpY-FnAcJJBAM\",\"nickName\":\"尤其六月\",\"gender\":1,\"language\":\"zh_CN\",\"city\":\"Jilin\",\"province\":\"Jilin\",\"country\":\"China\",\"avatarUrl\":\...

2019-09-09 15:26:03 10742 1

原创 数据库面试

1.项目中有没有使用读写分离?如何实现读写分离?主从复制的原理是什么?如何解决主库和从库的时延问题?再补充一个在项目中碰到的例子:我这边的服务把数据写入主库之后,发送消息通知CRM做一些后续操作,此时CRM那边的开发人员查库发现没有这条数据,这就是因为从库还没有从主库中复制到这条数据,当时的解决方案,就是把CRM那边需要从从库中查的数据,直接在消息里面都传给他们了,不用他们再从数据库中查。...

2019-09-07 16:49:50 85

极客时间 趣谈网络协议(1-41讲)PDF资料

小说一样的网络协议入门课 网络协议是每个程序员入门的必修课,但是彻底掌握并应用网络协议知识却并非易事,比如常见的 TCP/IP、HTTP。网络协议的内容很基础,但基础知识不等于简单知识,更不等于不重要的知识。在网络协议的学习过程中,如果你也有过这样的感受: 协议知识琐碎又枯燥,一看书就头大; 协议内容很基础,但面试一问就“崩盘”; 工作遇到才去查书,现学却没法现卖; 协议知识太底层,不知道如何在热门领域应用。 那么,“趣谈网络协议”专栏就是为你量身定制的。

2018-11-15

shiro认证授权

shiro入门认证和授权的相关代码,博客地址:http://blog.csdn.net/u014532775/article/details/76620643

2017-08-03

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除