自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

xiajie的专栏

程序人生的精彩需要坚持不懈地积累!

原创 面试题1:Redis的内存淘汰机制

问题引入: 我们知道redis的内存是有限的,但是如果当redis的内存使用超过上限,该如何定制淘汰算法?

2020-06-28 23:28:03 16 0

原创 maven相关问题4:正确的集成命令-U -B -X -e 等

参考命令:mvn -U clean deploy -Dmaven.test.skip=true -Dmaven.compile.fork=true 不要忘了clean:clean能够保证上一次构建的输出不会影响到本次构建。 使用deploy而不是install:构建的SNAPSHO...

2020-02-28 10:49:48 71 0

原创 maven相关问题3: install package deploy 这三个命令的区别 和常见命令

1. 易混淆的命令 maven package:打包到本项目,一般是在项目target目录下。 maven install:打包会安装到本地仓库。 maven deploy:将打包的文件发布到远程仓库(私服),提供其他人员进行下载依赖。==》这个在本地仓库也会生成 2.常用命令 【1】...

2020-02-28 10:42:17 55 0

原创 maven相关问题 2:maven的生命周期

Maven有三套相互独立的生命周期,分别是: ①Clean Lifecycle 在进行真正的构建之前进行一些清理工作。 ②Default Lifecycle 构建的核心部分,编译、测试、打包、安装、部署等等。 ③Site Lifecycle 生成项目报告,站点,发布站点。 ...

2020-02-28 10:27:13 61 0

原创 maven相关问题(1):maven中依赖的范围

1.依赖的范围 ①从项目结构角度理解compile和test的区别 compile范围依赖 对主程序是否有效:有效 对测试程序是否有效:有效 是否参与打包:参与 是否参与部署:参与 典型例子:spring-core test范围依赖 对主程序是否有效:无效 对测试程序是否有效:有效...

2020-02-27 11:09:10 39 0

原创 Effective Java 5.避免创建重复的对象

1.重用不可变对象 如果对象是不可变的,那么它就始终可以被重用。对于同时提供了静态工厂方法和构造方法的不可变类,通常使用静态工厂方法而不是构造方法,以避免创建不必要的对象,尽管同时提供两种方法的场景不太多。例如静态工厂方法Boolean.valueOf(String)几乎总是优于构造方法Boole...

2019-05-26 18:29:05 118 0

原创 Effective Java 4.通过私有构造器强化不可实例化的能力

当创建一个工具类的时候,一般是无需实例化的,类里面都是静态域和静态方法,这种情况下我们尽量保证工具类不能被实例化。可以定义一个私有的构造器,如下: public class Tools { // 不可被实例化的类 private Tools() { throw ...

2019-05-26 17:40:36 84 0

原创 LeetCode9:回文数

判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 示例 1: 输入: 121 输出: true 示例2: 输入: -121 输出: false 解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。 示...

2019-03-21 21:01:57 103 0

原创 Leetcode01:两数之和

链接:https://leetcode-cn.com/problems/two-sum/solution/ 我的提交:暴力解法 class Solution { public int[] twoSum(int[] nums, int target) { int[] re...

2019-03-11 17:26:21 150 0

原创 实现一个最基础版的RPC

RPC的实现原理 RPC主要是为了解决的两个问题: 解决分布式系统中,服务之间的调用问题。 远程调用时,要能够像本地调用一样方便,让调用者感知不到远程调用的逻辑。 还是以计算器Calculator为例,如果实现类CalculatorImpl是放在本地的,那么直接调用即可:   现在系...

2019-02-24 21:49:48 127 0

转载 日志输出性能优化-缓存、异步

笔者负责的一个集成接口平台的应用,其业务功能并不复杂,但是要重点考虑接口的性能。 在进行过异步数据库写入、第三方代码调优、报文解析调优后,基本上已经无可优化性能的代码了。但是在JProfiler的监控里面又发现了logback日志的可优化空间。 问题描述: 下图中可看出logback的日志输出占...

2019-02-18 20:46:35 376 0

原创 JVM内存溢出时 Dump内存分析

1.JVM参数-XX:+HeapDumpOnOutOfMemoryError 设置 堆内存溢出时,保存内存快照 参数说明 (1)-XX:+HeapDumpOnOutOfMemoryError参数表示当JVM发生OOM时,自动生成DUMP文件。 (2)-XX:HeapDumpPath=${目...

2019-02-12 21:01:14 1517 0

原创 GcLog 日志:GC(Allocation Failure)

日前查看某个程序的日志,发现一直在报GC相关的信息,不确定这样的信息是代表正确还是不正确,所以正好借此机会再复习下GC相关的内容: 以其中一行为例来解读下日志信息: [GC (Allocation Failure) [ParNew: 367523K->1293K(410432...

2019-01-30 15:44:29 1335 0

原创 JVM 参数

-X、-XX区别 -X:非标准选项 以 -X 开头的这些选项是非标准选项,是特定于 Java HotSpot 虚拟机的通用选项,不保证所有 JVM 的实现都支持它们,而且还会发生变化。 -X:非标准选项 以 -XX 开头的选项是高级选项,高级选项不建议随意使用。这些是开发人员用于调优 Ja...

2019-01-29 21:24:21 72 0

原创 JVM在新版本的改进更新以及相关知识

1.JVM在新版本的改进更新 图中可以看到运行时常量池是放在方法区的   1.1对比:     JDK 1.7 及以往的 JDK 版本中,Java 类信息、常量池、静态变量都存储在 Perm(永久代)里。类的元数据和静态变量在类加载的时候分配到 Perm,当类被卸载的时候垃圾收集器从 Per...

2019-01-29 16:16:05 402 0

转载 MQ发送事务消息

MQ事务消息交互流程如下: 发送事务消息包含以下两个步骤: 发送半消息及执行本地事务 package com.alibaba.webx.TryHsf.app1; import com.aliyun.openservices.ons.api.Message; import com....

2018-09-18 20:57:25 613 0

原创 Dubbo源码分析:Dubbo自己实现的IOC

  在创建自适应实例时,都会调用ExtensionLoader的injectExtension方法: @SuppressWarnings("unchecked") private T createAdaptiveExtension() { tr...

2018-09-16 21:25:12 401 0

原创 微服务架构下的数据一致性保证(二):可靠事件模式

第一篇分享中讲到实现可靠事件模式的关键在于:可靠事件投递和避免事件重复消费,其中避免事件重复消费需要微服务满足幂等性。那么又该如何实现可靠事件投递?又该如何保证服务满足幂等性? 转载本文需注明出处:EAII企业架构创新研究院,违者必究。如需加入微信群参与微课堂、架构设计与讨论直播请直接回复公众号...

2018-09-07 11:55:33 240 0

原创 微服务架构下的数据一致性保证(一)

大家好,今天我给大家分享的题目是微服务架构下的数据一致性保证。 今天分享第一篇,主要内容包括:   1.传统使用本地事务和分布式事务保证一致性。 2.传统分布式事务不是微服务中一致性的最佳选择。 3.微服务架构中应满足数据最终一致性原则。 4.微服务架构实现最终一致性的三种模式...

2018-09-07 11:54:41 211 0

转载 微服务架构下的数据一致性保证(三):补偿模式

在微服务架构下,一个典型的业务操作往往由一系列自治的微服务步骤组成,如果某个步骤发生了业务异常(比如支付时账户余额不足等)时就出现了数据不一致。我们采用补偿模式来撤销已经完成的步骤,从而实现最终一致性。     今天分享的还是关于微服务架构下的数据一致性保证的话题,是数据一致性系列分享的第三...

2018-09-07 11:52:32 248 0

原创 Dubbo的SPI扩展机制剖析

我们都是知道一个合格的开源框架对于扩展的支持都要是相当弹性的,Dubbo 也不例外。Dubbo采用微内核+插件体系,使得设计优雅,扩展性强。Dubbo的扩展机制是基于SPI思想来实现的,但是并没有采用JDK中原生的SPI机制。 1.什么是SPI java spi的具体约定为:当服务的提供者,提...

2018-09-04 23:02:32 278 0

原创 Buidler建造者模式

1.Builder模式介绍         Builder模式是一种一步一步创建一个复杂对象的设计模式,我认为这种设计模式的精髓就主要有两点:其一,用户使用简单,并且可以在不需要知道内部构建细节的情况下,就可以构建出复杂的对象模型;其二,对于设计者来说,这是一个解耦的过程,这种设计模式可以将构建...

2018-08-26 16:31:11 136 0

原创 java 异常处理 Throwable Error 和Exception

Java异常类层次结构图 什么是异常 异常的英文单词是exception,字面翻译就是“意外、例外”的意思,也就是非正常情况。事实上,异常本质上是程序上的错误,包括程序逻辑错误和系统错误。比如使用空的引用、数组下标越界、内存溢出错误等,这些都是意外的情况,背离我们程序本身的意图。错误在我们...

2018-08-12 16:03:03 121 0

原创 匿名内部类

  public class Test { public static void main(String[] args) { //4.匿名内部类 //主要是针对那些不能直接创建对象的抽象类和接口而来的 Student stu=new St...

2018-08-10 21:21:38 178 0

原创 Repository模式

最近开发的MVC项目使用了Repository模式。啥是Repository模式?从图看,有一个仓库接口,一个实现了这个仓库接口的基类;然后在使用方,一方面,要声明一个继承于仓库接口的子接口,另一方面,编写一个数据库操作类,继承仓库基类,并实现这个子接口。继承仓库基类容易理解,为啥还要搞一个子接口...

2018-06-16 11:27:24 6148 1

原创 Netty学习(3): 客户端和服务端的例子

服务端:package com.server; import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.Channel; import io.netty.channel.ChannelFuture; import io...

2018-05-15 21:32:25 330 0

原创 java的回调机制

简单的解释      你到一个商店买东西,刚好你要的东西没有货,于是你在店员那里留下了你的电话,过了几天店里有货了,店员就打了你的电话,然后你接到电话后就到店里去取了货。在这个例子里,你的电话号码就叫回调函数,你把电话留给店员就叫登记回调函数,店里后来有货了叫做触发了回调关联的事件,店员给你打电话...

2018-05-12 16:28:15 268 0

原创 Netty学习(1):Channel的概念

1. ChannelChannel是Netty的核心概念之一,它是Netty网络通信的主体,由它负责同对端进行网络通信、注册和数据操作等功能。1.1 工作原理如上图所示:一旦用户端连接成功,将新建一个channel同该用户端进行绑定channel从EventLoopGroup获得一个EventLo...

2018-04-17 16:53:04 932 2

原创 Netty学习(2): protobuf序列化框架学习

1. protobuf是什么    protobuf是google旗下的产品,用于序列化与反序列化数据结构,但是比xml更小、更快、更简单,而且能跨语言、跨平台。你可以把你的数据按你的要求结构化,然后可以转化成多种数据流,同时其他语言可以通过不同的流转化成自己熟悉的语言的数据格式。如C++语言开发...

2018-04-14 16:03:23 303 0

原创 基础知识概念(1):Socket 长连接和短连接的概念

1.短连接连接->传输数据->关闭连接    HTTP是无状态的,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束后就中断连接。短连接是指SOCKET建立连接后 ,发送后或接收完数据后,就马上断开连接。2.长连接连接->传输数据-&...

2018-03-22 20:33:56 410 0

转载 Java通过URLClassLoader让程序支持插件扩展

插件(Plugin)是什么不用多说。常用的软件,例如Eclipse、Photoshop、VisualStudio,都支持插件扩展。插件可以动态给软件添加一些功能,也可以随时删除,这样的好处是任何人都可以给这个软件进行功能上的扩展,而不用去改软件本身的代码。为什么使用插件模式 使用插件模式实现某些功...

2018-03-12 16:28:46 283 0

转载 阿里巴巴十年Java架构师分享,会了这个知识点的人都去BAT了

1.源码分析专题详细介绍源码中所用到的经典设计思想,看看大牛是如何写代码的,提升技术审美、提高核心竞争力。帮助大家寻找分析源码的切入点,在思想上来一次巨大的升华。知其然,并知其所以然。把知识变成自己的2.分布式架构互联网时代,系统架构如何迎接高并发流量的挑战。而作为技术开发者,如何去应对技术变革带...

2018-03-12 16:04:37 535 0

转载 通过netty和Zookeeper实现dubboRPC框架

2018-03-10 13:55:31 1315 1

转载 Git(二):Git分支管理策略

如果你严肃对待编程,就必定会使用"版本管理系统"(Version Control System)。 眼下最流行的"版本管理系统",非Git莫属。 相比同类软件,Git有很多优点。其中很显著的一点,就是版本的分支(branch)和合并(me...

2017-11-07 22:28:29 1342 0

原创 Git(一):git基本的工作流程

1.git基本的工作流程

2017-11-07 19:43:17 387 0

转载 ThreadLocal的使用

ThreadLocal的定义和用途的概述(我的理解): 它是一个线程级别变量,在并发模式下是绝对安全的变量,也是线程封闭的一种标准用法(除了局部变量外),即使你将它定义为static,它也是线程安全的。   ThreadLocal能做什么呢? 这个一句话不好说,我们不如来看看实际项目中遇到...

2017-11-01 10:55:30 661 0

原创 单进程单线程的Redis如何能够高并发,redis是个单线程的程序,为什么会这么快呢?

弄清楚 Redis 为什么是单线程单进程,为什么单线程能保证这么快的速度

2017-10-30 17:08:57 3399 0

原创 Redis实现分布式

一.使用分布式锁的条件 系统是一个分布式系统(关键是分布式,单机的可以使用ReentrantLock或者synchronized代码块来实现)共享资源(各个系统访问同一个资源,资源的载体可能是传统关系型数据库或者NoSQL)同步访问(即有很多个进程同事访问同一个共享资源。没有同步访问,谁管你资...

2017-10-30 16:48:27 2095 0

转载 支付宝防并发方案之"一锁二判三更新"

每年支付宝在双11和双12的活动中,都展示了绝佳的技术能力。这个能力不但体现在处理高TPS量的访问,更体现在几乎不会出错,不会出现重复支付的情况,那这个是怎么做到的呢? 诚然,为了实现在高并发下仍不会出错的技术目标,支付宝下了很多功夫,比如幂等性的处理,分布式事务的使用等等,但是个人觉得其中...

2017-10-27 20:36:55 694 0

原创 MyCat学习(一):MyCat中基本概念和功能

一、基本概念 1.垂直分片 水平分片 2.分表 分库 注:第一种在同一个数据库内分表,不经常采用,因为这种方式无法分担IO,IO和处理能力全部压在一台机器上,无法进行Join等复杂操作,经常采用的是分库第二种形式 3.逻辑表 逻辑库 逻辑库和逻辑表不是实际存在的一个表,一个逻辑库可以...

2017-10-24 15:39:22 1448 0

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