自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

rhwayfun专栏

在等待的日子里,刻苦读书,谦卑做人,养得深根,日后才能枝叶茂盛!

原创 Spring Boot学习案例开源项目

为了更好的学习并使用springboot进行开发,维护了一个springboot学习案例开源项目,涉及springboot从基础开发到企业实战,涵盖不同场景的开发案例。公司内部所有的服务都基于springboot进行开发以完成服务化。下面是本开源项目的部分截图:涉及的内容包括但不限于: web开发...

2017-09-10 23:50:38 18888 9

原创 写在2019年后的蚂蚁、头条、拼多多的面试总结

写在2019年后的蚂蚁、头条、拼多多的面试总结 原文:https://github.com/rhwayfun/interview 不想听我BB直接进入面试分享: 准备过程 蚂蚁金服面试分享 拼多多面试分享 字节跳动面试分享 总结 说起来开始进行面试是年前倒数第二周,上午9点,我还在去公司的公交...

2019-03-25 10:25:22 4232 3

原创 体系化认识微服务之四:服务注册发现机制

服务调用者要在众多的微服务中调用具体的服务提供者,必然涉及到负载均衡的问题,根据负载均衡的实现可以分为集中式LB、进程内LB和独立进程LB。 集中式LB LB上有所有的服务地址配置,当服务消费者调用某个服务的时候,LB会根据负载均衡策略(随机、轮询等)将请求转发到具体的服务上。此外,服务调...

2018-06-02 14:49:14 1825 0

原创 体系化认识微服务之三:微服务总体技术架构

体系化认识微服务之三:微服务总体技术架构 这篇文章,介绍下微服务的总体架构体系,微服务拆分后涉及的服务众多,我们从一个全局的视角看下微服务架构涉及哪些方面。从上层到下层依次分为:接入层、网关、业务服务层、支撑服务层、平台服务层、基础设施层 技术构架总览: 接入层 接入层是入口,比如支付...

2018-05-20 13:07:28 3541 0

原创 体系化认识微服务之二:如何实施微服务架构

微服务作为一种架构风格,其主要特点是由很多小的服务组成,且每个服务都是可独立部署的,任何 一个服务的升级部署都不会影响其他的服务。那么在企业中如何实施 微服务这种架构呢? 按业务组织团队 康威法则:设计系统的组织,其产生的架构设计等价于族之间的沟通架构。 在以往传统的软件架构中,所有的功...

2018-05-12 17:07:04 779 0

原创 体系化认识微服务之一:什么是微服务

什么是微服务 微服务作为一种架构风格,是从单体应用演化过来的。微服务真正让大家关注源于Martin·Fowler的一篇博客Microservices,文章对微服务定义如下: In short, the microservice architectural style is an appr...

2018-05-06 13:34:32 1268 0

原创 MySQL规范整理

基础规范 版本 MySQL 5.7 存储引擎 InnoDB 字符集 utf8 必要时候使用utf8mb4 (1)utf8通用,无乱码风险,汉字3字节,英文1字节 (2)utf8mb4是utf8的超集,有存储4字节例如表情符号时,使用它 禁用存储过程、...

2018-04-06 21:48:01 888 0

原创 重构:从方法论到实践

重构:从方法论到实践 最近部门内部组织了一次大型重构,刚好借着这个机会学习了重构相关的内容,重构可以说代码优化利器,可以很好改善代码结构和开发效率。个人觉得重构应该是随时进行的,开发阶段、测试阶段、上线后,任何时候你觉得代码写得不够好或者有bug都应该重构。 什么是重构 通俗讲就是不影响...

2018-03-17 15:43:33 2224 0

原创 程序员练级:究上究下(持续更新中)

究上:学习优秀的设计和思路 看源码:jdk 8、spring、mybatis、dubbo、rocketmq jdk 8:Map(HashMap/ConcurrentHashMap)、Collection(ArrayList/LinkedList/BlockingQueue) spring:b...

2018-03-01 09:18:19 912 0

原创 回顾2017:谈谈过去一年的成长

2017过去了,回顾2017希望能够看清楚现在的自己,在2018遇见更好的自己。前不久支付宝的年度账单刷屏朋友圈,作为一名程序员,我也来晒晒我的2017年度技术“账单”。 2017年度成长“账单” Github:89 stars, 37 forks spring-boot-learni...

2018-01-07 22:54:09 4842 4

原创 使用Spring Boot Starter开发RocketMQ

RocketMQ最早是阿里巴巴开源的MQ中间件,在阿里集团被广泛应用在订单,交易,充值,流计算,消息推送,日志流式处理,binglog分发等场景。现已捐献给Apache,目前是Apache下的顶级项目。捐献后的最新版本是4.1.0-incubating。在实际场景中使用MQ打交道最多的是发送消息和...

2017-12-24 13:23:39 15531 2

原创 Dubbo Hessian2序列化问题

问题定义了一个接口,返回值为Map<String, Byte>,consumer收到结果后,使用Byte value = map.get(key)获取结果,抛出了如下类型转换异常: 如下: java.lang.ClassCastException: java.lang.Integer...

2017-12-22 17:35:00 6722 0

原创 Sharding-JDBC读写分离探秘

前段时间写了篇如何使用Sharding-JDBC进行分库分表的例子,相信能够感受到Sharding-JDBC的强大了,而且使用配置都非常干净。官方支持的功能还包括读写分离、分布式主键、强制路由等。这里再介绍下如何在分库分表的基础上集成读写分离的功能。读写分离的概念 就是为了缓解数据库压力,将写...

2017-11-19 19:10:28 7942 3

原创 Sharding-JDBC分库分表使用实例

Sharding-JDBC是当当开源的用于分库分表的基础类库。定位轻量级java框架,可以通过客户端直接连接数据库,只需要在增加额外的数据源配置就可以轻松实现完整的分库分表功能。 Sharding-JDBC是一个开源的适用于微服务的分布式数据访问基础类库,它始终以云原生的基础开发套件为目标。 ...

2017-10-28 12:33:48 10058 3

原创 【开源】大型网站架构技能图谱

之前在博客发布了一份大型网站架构技能图谱,陆陆续续有小伙伴希望有一份xmind源文件,我打算把这个图谱作为开源项目维护,有利于统一维护,同时也希望能够与大家相互提高。目前的想法是把源文件放在Github,同时把图片形式作为一个链接可以直接查看。目前已经维护在GitHub,java-skill-gr...

2017-10-12 23:33:33 990 0

翻译 【译】Scheduling Tasks

原文:Scheduling Tasks 开始使用定时任务本指南将一步步引导您如何在Spring中使用定时任务。完成什么构建一个应用,实现的功能为每5秒打印出当前时间。这点可以通过Spring注解@Scheduled完成。准备什么 大约需要15分钟 一个您喜爱的文本编辑器或者IDE(集成开发工具) ...

2017-10-11 21:32:13 608 0

原创 Spring bean id相同引发的故障

最近因为同事bean配置的问题导致生产环境往错误的redis实例写入大量的数据,差点搞挂redis。经过快速的问题定位,发现是同事新增一个redis配置文件,并且配置的RedisSentinelConfiguration的id是一样的,然后在使用@Autowired注入bean的时候因为sprin...

2017-09-23 23:02:40 4959 1

原创 重试框架Spring retry实践

spring retry是从spring batch独立出来的一个能功能,主要实现了重试和熔断。对于重试室友场景限制的,不是什么场景都适合重试,比如参数校验不合法、写操作等(要考虑写是否幂等)都不适合重试。远程调用超时、网络突然中断可以重试。在微服务治理框架中,通常都有自己的重试与超时配置,比如d...

2017-09-03 17:16:19 29096 2

原创 Spring Security实战

spring security是一个多方面的安全认证框架,提供了基于JavaEE规范的完整的安全认证解决方案。并且可以很好与目前主流的认证框架(如CAS,中央授权系统)集成。使用spring security的初衷是解决不同用户登录不同应用程序的权限问题,说到权限包括两部分:认证和授权。认证是告诉...

2017-08-20 13:19:00 2602 1

原创 Spring定时任务源码分析

之前在深入浅出spring task详细介绍了spring task的用法与使用示例,这篇文章更近一步,我们从源码的角度看看内部的实现机制。之所以写这篇文章是因为最近因为spring task的误用引发了一次线上的故障。本着一探究竟的精神,源码撸起。先还原下spring task是如何误用的,示例...

2017-08-13 00:21:33 4319 1

原创 Kafka术语解释

前一篇文章介绍了如何使用kafka收发消息,但是对于kafka的核心概念并没有详细介绍,这里将会对包括kafka基本架构以及消费者、生产者API涉及的术语进行说明。了解这些术语有助于更深入理解kafka。 broker topic stream partition offset producer ...

2017-07-31 23:04:50 2199 0

原创 Kafka消费者生产者实例

为了更为直观展示Kafka的消息生产消费的过程,我会从基于Console和基于Application两个方面介绍使用实例。Kafka是一个分布式流处理平台,具体来说有三层含义: 它允许发布和订阅记录流,类似于消息队列或企业消息传递系统。 它可以容错的方式存储记录流。 它可以处理记录发生时的流。 由...

2017-07-30 18:22:56 26089 2

原创 Hibernate Validator参数校验

日常开发中经常会遇到需要参数校验的情况,比如某个字段不能为空、长度不能超过5等都属于参数校验的范围。对于简单的参数校验通过写几个if-else判断语句就搞定,但是对于复杂的多个参数校验的情况,就不是那么简单了,通常是各种循环嵌套+一堆if-else语句。一个字,丑!所以,这就需要引进本文的主人公—...

2017-07-29 19:37:48 2862 0

原创 redis事务浅析

事务可以简单理解为:把多件事当做一件事情处理,要么一起成功,要么一起失败。在Spring中可以配置一个事务管理器,然后在要进行事务处理的方法上添加@Transactional注解就可以了。对于redis事务,无外乎如此,有时候为了同时处理多个结构,会向redis发送多个redis命令。使用redi...

2017-07-23 12:16:42 2061 0

原创 缓存前置实践

说到缓存,可能最熟悉的是缓存的使用和更新策略。使用缓存的好处很多,可以提高响应速度,减轻数据库等存储的读写压力。关键是变“快”了。使用缓存有很多注意的地方,比如何时使用缓存,什么数据适合缓存,缓存什么时候失效。缓存是提高程序性能的“银弹”,不过这里不是将如何使用缓存,而是介绍缓存前置的思路和一些实...

2017-07-09 20:32:14 1693 0

原创 Disconf实践指南:改造篇

上一篇文章Disconf实践指南:使用篇介绍了如何在项目中应用disconf,虽然实现了分布式配置的实时刷新,但是我们希望能够去除所有的配置文件,把配置都交给disconf管理,本地只需要实现配置监听接口就好了。改造包括: 统一配置到disconf 自定义配置解析实现 公共配置 #...

2017-06-18 13:50:07 2731 0

原创 Disconf实践指南:使用篇

在上一篇文章Disconf实践指南:安装篇介绍了如何在本地搭建Disconf环境,下面我们介绍如何在项目中使用Disconf。由于某些功能特性对源码做了修改,所以在官方文档并没有提及。 环境基于macOS Sirerra。Windows建议安装Linux虚拟机 首先打开disconf控制台:h...

2017-06-18 11:10:39 18273 5

原创 Disconf实践指南:安装篇

Disconf是百度开源出来的一款基于Zookeeper的分布式配置管理软件。目前很多公司都在使用,包括滴滴、百度、网易、顺丰等公司。通过简单的界面操作就可以动态修改配置属性,还是很方便的。使用Disconf后发现的一大好处是省却应用很多配置,而且配置可以自动load,实时生效。Disconf优点...

2017-06-17 23:50:35 6731 8

原创 缺少Log4j依赖导致应用启动失败的教训

最近,公司在做版本升级,所有对aaa(指代某个内部依赖)有依赖的应用需要排除掉。从这点看,几乎不会有什么问题,因为仅仅是排除一些maven依赖而已嘛。但是,一位同学在排除依赖的时候,仅仅是把aaa排除了,而没有在测试环境进行测试,在线上发布的时候,日志报dubbo服务注册失败(抛异常和dubbo ...

2017-04-03 10:51:57 2884 3

原创 AspectJ切面执行两次原因分析

背景 转眼之间,发现博客已经将近半年没更新了,甚是惭愧。话不多说,正如标题所言,最近在使用AspectJ的时候,发现拦截器(AOP切面)执行了两次了。我们知道,AspectJ是AOP的一种解决方案,本质上是通过代理类在目标方法执行通知(Advice),然后由代理类再去调用目标方法。所以,从这点讲...

2017-03-19 16:01:06 7020 2

原创 深入浅出Spring task定时任务

深入浅出Spring task定时任务在工作中有用到spring task作为定时任务的处理,spring通过接口TaskExecutor和TaskScheduler这两个接口的方式为异步定时任务提供了一种抽象。这就意味着spring容许你使用其他的定时任务框架,当然spring自身也提供了一种定...

2016-09-12 21:03:40 56553 15

原创 大型网站架构技能图谱(Java版)

在大型网站技术架构中,涉及到许多的技术,这些技术是具备大型网站架构设计能力的前提和基础。因为笔者对Java比较熟悉,所以下面的技术图谱都是围绕Java后端工程师展开的。如有不正确或者不完善的地方,欢迎补充。 ...

2016-09-05 19:37:46 14428 43

原创 大型网站架构演变史(含技术栈与价值观)

这篇文章是参考李智慧的《大型网站技术架构:核心原理与案例分析》和现蘑菇街CTO曽宪杰的《大型网站系统与Java中间件实践》写的一篇读书笔记。前言何谓大型网站?大型网站的特点是什么?大型网站架构发生演变的源动力是什么?大型网站的架构演变经历了哪些阶段?在演变的某个具体阶段使用到常用技术有哪些,为什么...

2016-09-03 21:25:04 5576 4

原创 Ehcache缓存入门实战(附源码)

Ehcache缓存入门实战(附源码)Ehcache是一个强大、成熟的Java缓存框架,可以非常容易与其他库和框架集成。官网声称Ehcache可以作为TB级别的数据缓存,并且具有高扩展性。目前Ehcache的最新版本是3.1。本文不会深究缓存背后的原理,只是作为一个使用Ehcache的例子,由于最近...

2016-08-11 16:49:45 4925 2

原创 Google Protocol Buffer序列化入门实战(附源码)

Google Protocol Buffer入门实战(附源码)Google Protocol Buffer(后面简称PB)是Google开源的一款二进制序列化工具,占用空间小,传输效率高。最近由于项目中使用到了PB,所以特地学习了PB,这篇文章也是自己学习PB的一些小结。根据官方定义,PB是一个语...

2016-08-09 15:38:17 3573 4

原创 Zookeeper入门实战(注册中心)

Zookeeper入门实战(注册中心)Zookeeper是一个高性能的分布式协调服务,根据官方对Zookeeper(以后简称zk)的介绍,zk主要支持以下特性: 管理配置信息,可以作为管理配置信息的中央服务器 命名服务 分布式锁 分组服务,也就是leader选举 在之前Dubbo分布式服务框架入门...

2016-08-09 12:05:04 4974 0

原创 Redis入门实战(附源码)

Redis入门实战(附源码)近期由于需要对Redis进行改造,所以顺便学习了下Redis。这篇文章是自己学习Redis写的小实例,简单易懂,超适合入门。 在网上看了很多Redis的入门文章,要么写的太深入,要么写的Level太高。总之,没有找到真正适合初学者的Redis入门文章。 在此之前,对...

2016-08-08 19:19:23 6693 0

原创 Dubbo分布式服务框架入门实战(附源码)

Dubbo分布式服务框架入门实战首先,有必要清楚Dubbo是什么。官方文档的定义如下: DUBBO是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提供3,000,000,000+次访问量支持,并被广泛应用...

2016-08-05 17:49:32 7340 4

原创 支付宝Sofa框架简明笔记

Sofa框架概述SOFA是Service Oriented Fabric Architecture是一种分布式架构解决方案,是一个应用中间件,包含了RPC、消息、监控和服务治理。开发框架的组成 一个标准的sofa工程从上到下可以分为测试层、展现层、业务层、核心领域层和通用层,并且从测试层到通用层是...

2016-07-28 20:20:12 30850 3

转载 如何在三个月内获得三年的工作经验

只要方法正确,3个月能做的事很多,并且,最重要的是:不仅要学,而且要习,那样才能真正有用。很多职场新人都谈到了工作经验的问题,似乎招聘公司不给你机会,你就没办法获得必要的工作经验,其实并不一定。很多资料在网上都是可以找到的,只是看你具备不具备足够的信息收集与处理能力,而这个收集与处理信息的过程,也...

2016-07-11 19:26:18 3246 0

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