自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(23)
  • 收藏
  • 关注

原创 微服务架构下静态数据通用缓存机制

在分布式系统中,特别是最近很火的微服务架构下,有没有或者能不能总结出一个业务静态数据的通用缓存处理机制或方案,这篇文章将结合一些实际的研发经验,尝试理清其中存在的关键问题以及探寻通用的解决之道。什么是静态数据这里静态数据是指不经常发生变化或者变化频率比较低的数据,比如车型库、用户基本信息、车辆基本信息等,车型库这种可能每个月会更新一次,用户和车辆基本信息的变化来源于用户注册、修改,这个操作的频...

2018-10-29 20:56:08 228

原创 写好JavaScript条件语句的5个技巧

1、使用Array.includes处理多种条件让我们来看一下的例子:// conditionfunction test(fruit) {if (fruit == ‘apple’ || fruit == ‘strawberry’) {console.log(‘red’);}}一眼看去,以上的例子貌似没有什么问题。但是,如果我们加入更多的红色水果,比如车厘子(cherry)和蔓越橘(cr...

2018-10-29 14:01:03 167

原创 Java性能问题定位

一句话总结:从问题现象为入口,归结为3类问题进行定位分析:内存满、CPU高、线程阻塞。首先先介绍下jvisualvm这款jdk自带的性能工具。通常我们要定位哪块代码性能差,耗时久,最原始的办法就是在各个方法前后日志打印时间戳并计算耗时,这种方法很繁琐,通常要加很多日志多次部署才能定位到,我一开始也是这么搞的。而使用jvisualvm工具则可以直接查看整个业务代码调用链中各个方法的耗时及占比,直接...

2018-10-27 14:01:03 780

原创 高性能消息中间件——NATS

前 言这段时间我的主要工作内容是将公司系统中使用的RabbitMQ替换成NATS,而此之前我对Nats一无所知。经过一段时间紧张的学习和开发之后我顺利的完成了任务,并对消息中间件有了更深的了解。在此感谢同事钟亮在此过程中对我的帮助。NATS属于比较小众的一款中间件产品,中文资料基本上是没有的,故写以记之,为想学习Nats的同学提供一点帮助。在介绍NATS之前先了解下什么是分布式系统和消息中间件...

2018-10-26 21:22:27 2646

原创 Java并发--- 简单聊聊JDK中的七大阻塞队列

JDK中除了上文提到的各种并发容器,还提供了丰富的阻塞队列。阻塞队列统一实现了BlockingQueue接口,BlockingQueue接口在java.util包Queue接口的基础上提供了put(e)以及take()两个阻塞方法。他的主要使用场景就是多线程下的生产者消费者模式,生产者线程通过put(e)方法将生产元素,消费者线程通过take()消费元素。除了阻塞功能,BlockingQueue接...

2018-10-26 14:27:48 476

原创 阿里「Java架构师」 所需要的知识 、评级P6!

选择的范围太广,可以读的书太多,往往容易无所适从。我想就我自己读过的技术书籍中挑选出来一些,按照学习的先后顺序,推荐给大家,特别是那些想不断提高自己技术水平的Java程序员们。图片描述一、Java编程入门类对于没有Java编程经验的程序员要入门,随便读什么入门书籍都一样,这个阶段需要你快速的掌握Java基础语法和基本用法,宗旨就是“囫囵吞枣不求甚解”,先对Java熟悉起来再说。用很短的时间快...

2018-10-23 22:22:51 361

原创 SpringBoot自动配置

本篇介绍下,如何通过springboot的自动配置,将公司项目内的依赖jar,不需要扫描路径,依赖jar的情况下,就能将jar内配置了@configuration注解的类,创建到IOC里面介绍下开发环境JDK版本1.8springboot版本是1.5.2开发工具为 intellij idea(2018.2)开发环境为 15款MacBook Pro前言很多时候,我们在公司用spring...

2018-10-23 16:03:56 138

原创 Redisson分布式锁实现

1. 基本用法 org.redisson redisson 3.8.2Config config = new Config();config.useClusterServers() .setScanInterval(2000) // cluster state scan interval in milliseconds .addNodeAddress...

2018-10-22 17:50:45 394

原创 Ribbon 框架简介及搭建(没有与SpringCloud整合,独立使用)

Ribbon简介负载均衡框架,支持可插拔式的负载均衡规则支持多种协议,如HTTP、UDP等提供负载均衡客户端Ribbon子模块ribbon-core(ribbon的核心,主要包含负载均衡器、负载均衡接口、客户端接口、内置负载均衡实现API)ribbon-eureka(为eureka客户端提供的客户端实现类)ribbon-httpclient(为负载均衡提供...

2018-10-18 20:58:37 1548

原创 Java并发(9)- 从同步容器到并发容器

引言容器是Java基础类库中使用频率最高的一部分,Java集合包中提供了大量的容器类来帮组我们简化开发,我前面的文章中对Java集合包中的关键容器进行过一个系列的分析,但这些集合类都是非线程安全的,即在多线程的环境下,都需要其他额外的手段来保证数据的正确性,最简单的就是通过synchronized关键字将所有使用到非线程安全的容器代码全部同步执行。这种方式虽然可以达到线程安全的目的,但存在几个明...

2018-10-17 15:31:24 119

原创 什么是架构模式和架构风格

本文探讨如下几个问题:架构模式和架构风格有区别吗?什么是架构模式?什么是架构风格?架构模式和架构风格的区别是什么?有哪些架构模式?有哪些架构风格?架构模式=架构风格?**如果你搜索「架构模式和架构风格的区别」,你会发现答案千差万别:有的观点认为架构模式和架构风格是一个东西,只是叫法不同有的观点认为架构风格是架构模式的外在表现有的观点认为架构模式和架构风格是不同的两个概念(具体...

2018-10-16 16:11:49 522

原创 Nginx可以做什么?看完这篇你就懂了

本文只针对Nginx在不加载第三方模块的情况能处理哪些事情,由于第三方模块太多所以也介绍不完,当然本文本身也可能介绍的不完整,毕竟只是我个人使用过和了解到过得,欢迎留言交流。Nginx能做什么——反向代理——负载均衡——HTTP服务器(动静分离)——正向代理以上就是我了解到的Nginx在不依赖第三方模块能处理的事情,下面详细说明每种功能怎么做。反向代理反向代理应该是Nginx做的最...

2018-10-15 22:36:27 222

原创 利用VisualVm和JMX远程监控Java进程

自Java 6开始,Java程序启动时都会在JVM内部启动一个JMX agent,JMX agent会启动一个MBean server组件,把MBeans(Java平台标准的MBean + 你自己创建的MBean)注册到它里面,然后暴露给JMX client管理。简单来说就是每个Java程序都可以通过JMX来被JMX client管理,而且这一切都是自动发生的。而VisualVm就是一个JMX C...

2018-10-12 20:52:29 4695

原创 JVM系列2:HotSpot虚拟机对象

1.对象创建过程:①.类加载检查:当java虚拟机遇到一条new指令时,首先会去检查该指令的参数能否在常量池中定位到这个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析、初始化过,如果没有,则必须先执行相应的类加载过程。②.分配内存:类加载检查完成后,虚拟机将为新对象分配内存空间,且对象所需内存空间大小在其完成类加载检查后即可确定,该过程其实就是在堆中划分一小部分的确定大小的空间...

2018-10-10 19:25:34 87

原创 J2Cache 和普通缓存框架有何不同,它解决了什么问题?

不少人看到 J2Cache 第一眼时,会认为这就是一个普普通通的缓存框架,和例如 Ehcache、Caffeine 、Spring Cache 之类的项目没什么区别,无非是造了一个新的轮子而已。事实上完全不是一回事!目前缓存的解决方案一般有两种:内存缓存(如 Ehcache) —— 速度快,进程内可用集中式缓存(如 Redis)—— 可同时为多节点提供服务现有的缓存框架已经非常成熟而且优秀...

2018-10-10 15:15:58 1193

原创 分布式锁与实现(一)基于Redis实现

目前几乎很多大型网站及应用都是分布式部署的,分布式场景中的数据一致性问题一直是一个比较重要的话题。分布式的CAP理论告诉我们“任何一个分布式系统都无法同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance),最多只能同时满足两项。”所以,很多系统在设计之初就要对这三者做出取舍。在互联网领域的绝大多数的场景中,都需要牺牲强一致...

2018-10-09 14:20:56 122

原创 分布式系统关注点——仅需这一篇,吃透「负载均衡」妥妥的

一、「负载均衡」是什么正如题图所示的这样,由一个独立的统一入口来收敛流量,再做二次分发的过程就是「负载均衡」,它的本质和「分布式系统」一样,是「分治」。 如果大家习惯了开车的时候用一些导航软件,我们会发现,导航软件的推荐路线方案会有一个数量的上限,比如3条、5条。因此,其实本质上它也起到了一个类似「负载均衡」的作用,因为如果只能取Top3的通畅路线,自然拥堵严重的路线就无法推荐给你了,使...

2018-10-08 19:58:47 153

原创 分布式系统关注点——初识「高可用」

本篇的要点主要是明确「高可用」的定义,以及了解在分布式系统下哪些环节要做「高可用」,为后续要讲的策略、方式方案打下基础。如有1年以上的分布式系统实战经验可酌情选择跳过本篇。Tips:「高XX」中的“高”其实是相对的,越满足期望值,就越是“高”的。一、「高可用」的作用?首先,统一下对「高可用」的认知。 做个通俗一点的类比:独生子女时代的子女就是“单体应用”,如果出意外了,父母就「失独」...

2018-10-08 14:14:51 134

原创 关于JVM的逃逸分析

何谓“逃逸”?我们都知道Java中的对象默认是分配到堆上的,垃圾回收机制也会回收堆中不再使用的对象,但在此之前需要筛选可回收的对象,因此会造成,回收对象还有整理内存,都比较耗时间,开销也是非常之大。而此也是Java语言被疯狂吐槽的一地方,就是Java不支持栈上分配对象。而在我们日常开发中,内存,时间都是相当的宝贵,如何优化成为在开发中一个不可或缺的环节。逃逸分析(Escape Analysis...

2018-10-07 21:14:26 1637

原创 RabbitMQ使用

说明  在企业应用系统领域,会面对不同系统之间的通信、集成与整合,尤其当面临异构系统时,这种分布式的调用与通信变得越发重要。其次,系统中一般会有很多对实时性要求不高的但是执行起来比较较耗时的地方,比如发送短信,邮件提醒,更新文章阅读计数,记录用户操作日志等等,如果实时处理的话,在用户访问量比较大的情况下,对系统压力比较大。面对这些问题,我们一般会将这些请求,放在消息队列MQ中处理;异构系统...

2018-10-05 21:50:13 146

原创 JVM自定义类加载器加载指定classPath下的所有class及jar

一、JVM中的类加载器类型  从Java虚拟机的角度讲,只有两种不同的类加载器:启动类加载器和其他类加载器。  1.启动类加载器(Boostrap ClassLoader):这个是由c++实现的,主要负责JAVA_HOME/lib目录下的核心 api 或 -Xbootclasspath 选项指定的jar包装入工作。  2.其他类加载器:由java实现,可以在方法区找到其Class对象。这里又...

2018-10-04 22:05:13 6009

原创 Java并发编程-CountDownLatch

1、 应用场景CountDownLatch是并发包中用来控制一个或者多个线程等待其他线程完成操作的并发工具类。现以工作中的一个场景来描述下CountDownLatch的应用,代码如下:/*模拟工作中的一个需求场景:用户会选择多个算法来计算费用,最后会将所有算法计算出的费用做一个加权求平均数,这个平均数是最终的费用。每个算法的复杂度都不一样,打算每个线程负责一个算法的实现,所有的线程执行完成...

2018-10-03 22:38:05 207

原创 高性能MySQL之创建高性能的索引

首先我们要认识到索引的各种类型;并在认识的基础上进行对比;B-Tree索引;存储引擎的不同,会用到不同的技术;MyISAM使用前缀压缩技术使得索引更小;InnoDB则按照数据格式进行存储;MyISAM索引通过数据的物理位置引用被索引的行;InnoDB根据主键引用被索引的行;对于B-Tree索引的自我总结和概括:简单地说呢,就相当于我们的书本目录一样了,而InnoDB的索引就是根据...

2018-10-02 18:13:18 107

空空如也

空空如也

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

TA关注的人

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