自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

跨过山和大海的博客

最新java资料分享 帮助有需要的朋友

  • 博客(176)
  • 收藏
  • 关注

原创 Kafka不停机,如何无感知迁移ZooKeeper集群?

Kafka 在 Yelp 的应用十分广泛,Yelp 每天通过各种集群发送数十亿条消息,在这背后,Kafka 使用 Zookeeper 完成各种分布式协调任务。因为Yelp 非常依赖 Kafka,那么问题来了,它是否可以在不引起 Kafka 及其他 Zookeeper 用户注意的情况下切换 Zookeeper 集群呢?本文将揭晓答案。Kafka 在 Yelp 的应用十分广泛。事实上,我们 每天...

2019-02-25 11:23:47 619 1

原创 面试题:2018最全Redis面试题整理

1、什么是Redis?Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。Redis 与其他 key - value 缓存产品有以下三个特点:Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。 Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储...

2019-02-23 11:43:07 2204 1

原创 大数据反欺诈技术架构

一年多以前,有朋友让我聊一下你们的大数据反欺诈架构是怎么实现的,以及我们途中踩了哪些坑,怎么做到从30min延迟优化到1s内完成实时反欺诈。当时呢第一是觉得不合适,第二也是觉得场景比较局限没什么分享的必要性。时间也过了很久了,最近看到圈里一些东西,发现当时的这套架构并未落伍,依然具有很大的参考价值,所以今天跟大伙聊聊关于大数据反欺诈体系怎么搭建,主要来源是来自于我工作的时候的实践,以及跟行业里...

2019-01-21 11:22:17 2191

原创 使用ApacheFlink和Kafka进行大数据流处理

Flink是一个开源流处理框架,注意它是一个处理计算框架,类似Spark框架,Flink在数据摄取方面非常准确,在保持状态的同时能轻松地从故障中恢复。Flink内置引擎是一个分布式流数据流引擎,支持 流处理和批处理 ,支持和使用现有存储和部署基础架构的能力,它支持多个特定于域的库,如用于机器学习的FLinkML、用于图形分析的Gelly、用于复杂事件处理的SQL和FlinkCEP。Flink的...

2018-09-11 16:34:11 8293

原创 公司项目里如何进行前后端接口联调

最近我的朋友Jack进入一家新的公司,正好公司项目采用的是前后端分离架构,技术栈是Jack非常熟悉的vue全家桶,后端用的是Java语言。在前后端开发人员碰面之后,协商确定好了前端需要的数据接口(扯那么多,其实也就是关于json数据的字段的定义),然后前后端程序猿就嗨皮地并线开发去了。欢迎学Java和大数据的朋友们加入java架构交流: 855835163群内提供免费的架构资料还有:Ja...

2018-08-13 16:38:41 30165 3

原创 SSM整合框架与之用户登录功能项目的实现

一.SSM框架的整合1:引入 spring 与 mybatis 各自的 jar 包2:引入 spring 与 mybatis 整合的包,(当有 jar 包冲突,保留高版本的 jar 包)3:在 spring 的配置文件 applicationContext.xml 中* 配置管理sqlSessionFactory* 配置管理数据源* 配置管理mapper对象引入...

2018-02-27 11:54:14 7033

原创 SpringBoot下自定义参数绑定步骤解析

正常情况下,前端传递来的参数都能直接被SpringMVC接收,但是也会遇到一些特殊情况,比如Date对象,当我的前端传来的一个日期时,就需要服务端自定义参数绑定,将前端的日期进行转换。自定义参数绑定也很简单,分两个步骤:1.自定义参数转换器自定义参数转换器实现Converter接口,如下:public class DateConverter implements Converter&l...

2018-02-27 11:04:03 896

原创 从 Spring Cloud 看一个微服务框架的「五脏六腑」

Spring Cloud 是一个基于 Spring Boot 实现的微服务框架,它包含了实现微服务架构所需的各种组件。注:Spring Boot 简单理解就是简化 Spring 项目的搭建、配置、组合的框架。因为与构建微服务本身没有直接关系,所以本文不对 Spring Boot 进行展开。另外本文有一些例子涉及到 Spring 和 Spring Boot,建议先了解一下 Spring 和 S...

2019-03-07 11:19:00 320

原创 Netty 防止内存泄漏措施

1. 背景1.1 直播平台内存泄漏问题某直播平台,一些网红的直播间在业务高峰期,会有 10W+ 的粉丝接入,如果瞬间发生大量客户端连接掉线、或者一些客户端网络比较慢,发现基于 Netty 构建的服务端内存会飙升,发生内存泄漏(OOM),导致直播卡顿、或者客户端接收不到服务端推送的消息,用户体验受到很大影响。1.2 问题分析首先对 GC 数据进行分析,发现老年代已满,发生多次 Ful...

2019-03-06 11:43:05 1258

原创 ActiveMQ的集群与高可用

一、ActiveMQ的高可用性ActiveMQ使用master-slave模式实现高可用性,提供两种实现主从模式的配置:shared nothing、shared storage(a relational database and a shared file system)1.shared nothing master-slave每一个broker(包括master和slave)都有自己...

2019-03-04 11:18:06 388

原创 处理Java异常的9个最佳实践

Java中的异常处理不是一个简单的主题。初学者发现它很难理解,甚至有经验的开发者也可以花几个小时讨论如何以及应该抛出或处理哪些异常。这就是为什么大多数开发团队都有自己的一套如何使用它们的规则。如果你是一个团队的新手,你可能会惊讶这些规则与你之前使用的规则有多么不同。尽管如此,大多数团队都使用了几种最佳实践。以下是帮助你入门或改进异常处理的9个最重要的内容。1.在finally块中清理资...

2019-03-02 15:54:39 204

原创 深入理解Java中的底层阻塞原理及实现

谈到阻塞,相信大家都不会陌生了。阻塞的应用场景真的多得不要不要的,比如 生产-消费模式,限流统计等等。什么 ArrayBlockingQueue、 LinkedBlockingQueue、DelayQueue 等等,都是阻塞队列的实现啊,多简单!阻塞,一般有两个特性很亮眼:1. 不耗 CPU 等待;2. 线程安全;额,要这么说也 OK 的。毕竟,我们遇到的问题,到这里就够解决了。但是有没有...

2019-03-02 11:33:19 268

原创 如何找到 Kafka 集群的吞吐量极限?

Kafka 是非常流行的分布式流式处理和大数据消息队列解决方案,在技术行业已经得到了广泛采用,在 Dropbox 也不例外。Kafka 在 Dropbox 的很多分布式系统数据结构中发挥着重要的作用:数据分析、机器学习、监控、搜索和流式处理,等等。在 Dropbox,Kafka 集群由 Jetstream 团队负责管理,他们的主要职责是提供高质量的 Kafka 服务。他们的一个主要目标是了解 Ka...

2019-03-01 17:46:37 1178

原创 Docker 加入裁员大军,关键时期 Docker 将何去何从?

上周,Docker 公司传出正在裁员,裁员比例为 10%。关于裁员,Docker 的发言人说比例达不到这个数,与此同时,Docker 还在招聘高管。Docker 现任 CEO Steve Singh 25 日表示,虽然最近 Docker 在裁员,但这是 Docker 聚焦业务增长的方式。Docker 还打算招更多的人,目标是在当前这一财年(截止到 2020 年 1 月 31 日)实现正现金流。...

2019-03-01 11:26:34 476

原创 Spring源码探究:容器

问题问题描述:项目中发现,自定义切面注解在 Controller 层正常工作,在 Service 层却无法正常工作。为了便于分析,去掉代码中的业务逻辑,只留下场景。自定义注解,打印时间 1 2 3 4 5 6 7 8 9 /** * Description: 自定义打印时间的注解 ...

2019-02-28 15:35:22 119

原创 分布式系统常见的事务处理机制

为保障系统的可用性、可靠性以及性能,在分布式系统中,往往会设置数据冗余,即对数据进行复制。举例来说,当一个数据库的副本被破环以后,那么系统只需要转换到其他数据副本就能继续运行下去。另外一个例子,当访问单一服务器管理的数据的进程数不断增加时,系统就需要对服务器的数量进行扩充,此时,对服务器进行复制,随后让它们分担工作负荷,就可以提高性能。但同时,如何保障多个数据节点之间数据的一致以及如何处理分布式事...

2019-02-28 11:07:26 174

原创 通过源码分析MyBatis的缓存

MyBatis缓存介绍MyBatis支持声明式数据缓存(declarative data caching)。当一条SQL语句被标记为“可缓存”后,首次执行它时从数据库获取的所有数据会被存储在一段高速缓存中,今后执行这条语句时就会从高速缓存中读取结果,而不是再次命中数据库。MyBatis提供了默认下基于Java HashMap的缓存实现,以及用于与OSCache、Ehcache、Hazelcas...

2019-02-27 15:38:27 182

原创 Spring Cloud构建微服务架构:分布式配置中心

最近正好想发一篇关于配置中心加密的细节内容,结果发现基础的加密解密居然漏了,所以在这个入门系列中补充一下。后面再更新一下,使用配置中心的一些经验和教训。在微服务架构中,我们通常都会采用DevOps的组织方式来降低因团队间沟通造成的巨大成本,以加速微服务应用的交付能力。这就使得原本由运维团队控制的线上信息将交由微服务所属组织的成员自行维护,其中将会包括大量的敏感信息,比如:数据库的账户与密码...

2019-02-27 11:40:57 138

原创 Dubbo源码解析 — 服务引用原理

前言经过上一篇dubbo源码解析-简单原理、与spring融合的铺垫,我们已经能简单的实现了dubbo的服务引用.其实上一篇中的代码,很多都是从dubbo源码中复制出来,甚至有些类名,变量名都没改.那请问,我为什么要这么做?我认为学习一个框架,无非就三个步骤. 掌握基本使用 看过源码,知道其中原理 临摹源码,自己仿写一个简易的框架 其实大家都清楚,编程这东西,...

2019-02-26 11:18:39 161

原创 消息中间件Kafka与RabbitMQ谁更胜一筹?

在 IM 这种讲究高并发、高消息吞吐的互联网场景下,MQ 消息中间件是个很重要的基础设施,它在 IM 系统的服务端架构中担当消息中转、消息削峰、消息交换异步化等角色。 当然,MQ 消息中间件的作用远不止于此,它的价值不仅仅存在于技术上,更重要的是改变了以往同步处理消息的思路。比如进行 IM 消息历史存储时,传统的信息系统作法可能是收到一条消息就马上同步存入数据库,这种作法在小并发量的情...

2019-02-25 17:06:54 377

原创 深入Spring Boot:快速集成Dubbo + Hystrix

背景Hystrix 旨在通过控制那些访问远程系统、服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。Hystrix具备拥有回退机制和断路器功能的线程和信号隔离,请求缓存和请求打包,以及监控和配置等功能。Dubbo是Alibaba开源的,目前国内最流行的java rpc框架。本文介绍在spring应用里,怎么把Dubbo和Hystrix结合起来使用。Spring Boot应...

2019-02-22 11:37:33 439

原创 Spring 中获取 request 的几种方法,及其线程安全性分析

概述在使用Spring MVC开发Web系统时,经常需要在处理请求时使用request对象,比如获取客户端ip地址、请求的url、header中的属性(如cookie、授权信息)、body中的数据等。由于在Spring MVC中,处理请求的Controller、Service等对象都是单例的,因此获取request对象时最需要注意的问题,便是request对象是否是线程安全的:当有大量并发请求...

2019-02-21 11:46:15 197

原创 基于 Kafka 实现分布式事件驱动

事件驱动是一种灵活的系统设计方法,在事件驱动的系统中,当数据发生变化时系统会产生、发布一个对应的事件,其它对这个事件感兴趣的部分会接收到通知,并进行相应的处理。事件驱动设计最大的好处在我看来有两点:一是它为系统提供了很好的扩展能力,比如我们可以对某类事件增加一个订阅者来对系统进行扩展,最主要的是我们并不需要修改任何已有的代码,它完全符合开闭原则;二是它实现了模块间的低偶合,系统间各个部分不是强依赖...

2019-02-20 16:21:31 1667

原创 分布式之数据库和缓存双写一致性方案解析

先做一个说明,从理论上来说,给缓存设置过期时间,是保证最终一致性的解决方案。这种方案下,我们可以对存入缓存的数据设置过期时间,所有的写操作以数据库为准,对缓存操作只是尽最大努力即可。也就是说如果数据库写成功,缓存更新失败,那么只要到达过期时间,则后面的读请求自然会从数据库中读取新值然后回填缓存。因此,接下来讨论的思路不依赖于给缓存设置过期时间这个方案。在这里,我们讨论三种更新策略:先更新数据...

2019-02-20 11:17:52 141

原创 Java魔法类——Unsafe应用解析

前言Unsafe是位于sun.misc包下的一个类,主要提供一些用于执行低级别、不安全操作的方法,如直接访问系统内存资源、自主管理内存资源等,这些方法在提升Java运行效率、增强Java语言底层资源操作能力方面起到了很大的作用。但由于Unsafe类使Java语言拥有了类似C语言指针一样操作内存空间的能力,这无疑也增加了程序发生相关指针问题的风险。在程序中过度、不正确使用Unsafe类会使得程序...

2019-02-19 11:16:37 165

原创 k8s 中定时任务的实现

k8s 中有许多优秀的包都可以在平时的开发中借鉴与使用,比如,任务的定时轮询、高可用的实现、日志处理、缓存使用等都是独立的包,可以直接引用。本篇文章会介绍 k8s 中定时任务的实现,k8s 中定时任务都是通过 wait 包实现的,wait 包在 k8s 的多个组件中都有用到,以下是 wait 包在 kubelet 中的几处使用:func run(s *options.KubeletServe...

2019-02-18 11:21:28 1994

原创 高效遍历Java容器

通过本文,你可以更深入的学习 Java 语言中 forEach 语法的知识,以及它和 C 语言形式的 for 循环、 Steam API 的对比。简介Java 程序员经常使用容器,比如 ArrayList 和 HashSet。Java 8 中的 lambda 语法和 steaming API 可以让我们更方便的使用容器。大部分情况下,我们仅仅处理几千个元素,也不会去考虑性能问题。但是,在一...

2019-02-17 11:27:18 135

原创 Java结合keytool实现非对称加密和解密

在Java安全体系中,签名属于JAAS模块,加解密属于JCE模块。keytool的使用keytool是JDK自带的一个密钥库管理工具。这里只用到了keytool的部分功能,包括生成密钥对,导出公钥等。keytool生成的公钥/私钥对存放到一个到了一个文件中,这个文件有密码保护,通称为keystore。生成密钥对 1 $ keytool -genkey -...

2019-02-15 11:16:53 311

原创 Java集合框架面试问题集锦

Java集合框架(例如基本的数据结构)里包含了最常见的Java常见面试问题。很好地理解集合框架,可以帮助你理解和利用Java的一些高级特性。下面是面试Java核心技术的一些很实用的问题。Q:最常见的数据结构有哪些,在哪些场景下应用它们?A. 大部分人都会遗漏树和图这两种数据结构。树和图都是很有用的数据结构。如果你在回答中提及到它们的话,面试者可能会对你进行进一步进行的考核。Q:你如何自...

2019-02-14 11:41:56 147

原创 构建高可用ZooKeeper集群

ZooKeeper 是 Apache 的一个顶级项目,为分布式应用提供高效、高可用的分布式协调服务,提供了诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知和分布式锁等分布式基础服务。由于 ZooKeeper 便捷的使用方式、卓越的性能和良好的稳定性,被广泛地应用于诸如 Hadoop、HBase、Kafka 和 Dubbo 等大型分布式系统中。本文的目标读者是对 ZooKeeper 有...

2019-02-13 11:24:40 108

原创 图解 kafka 的高可用机制

对于一个复杂的分布式系统,如果没有丰富的经验和牛逼的架构能力,很难把系统做得简单易维护,我们都知道,一个软件的生命周期中,后期维护占了70%,所以系统的可维护性是极其重要的, kafka 能成为大数据领域的事实标准,很大原因是因为运维起来很方便简单,今天我们来看下 kafka 是怎么来简化运维操作的。kafka 使用多副本来保证消息不丢失,多副本就涉及到kafka的复制机制,在一个超大规模的集...

2019-02-12 11:21:43 455 1

原创 Redis过期策略及实现原理

我们在使用redis时,一般会设置一个过期时间,当然也有不设置过期时间的,也就是永久不过期。当我们设置了过期时间,redis是如何判断是否过期,以及根据什么策略来进行删除的。redis设置过期时间:expire key time(以秒为单位)–这是最常用的方式setex(String key, int seconds, String value)–字符串独有的方式注:除了字...

2019-02-01 14:54:48 191

原创 大数据时代的数据存储,非关系型数据库MongoDB

爆炸式发展的NoSQL技术 在过去的很长一段时间中,关系型数据库(Relational Database Management System)一直是最主流的数据库解决方案,他运用真实世界中事物与关系来解释数据库中抽象的数据架构。然而,在信息技术爆炸式发展的今天,大数据已经成为了继云计算,物联网后新的技术革命,关系型数据库在处理大数据量时已经开始吃力,开发者只能通过不断地优化数据库来解决数据量的...

2019-01-31 11:04:47 551

原创 Kafka 最佳实践

Kafka 基本配置及性能优化这里主要是 Kafka 集群基本配置的相关内容。硬件要求Kafka 集群基本硬件的保证OS 调优 OS page cache:应当可以缓存所有活跃的 Segment(Kafka 中最基本的数据存储单位); fd 限制:100k+; 禁用 swapping:简单来说,swap 作用是当内存的使用达到一个临界值时就会将内存中的...

2019-01-30 16:21:11 841 1

原创 谈谈 Java 类加载机制

概述类加载器主要分为两类,一类是 JDK 默认提供的,一类是用户自定义的。 JDK 默认提供三种类加载器:Bootstrap ClassLoader 启动类加载器:每次执行 java 命令时都会使用该加载器为虚拟机加载核心类。该加载器是由 native code 实现,而不是 Java 代码,加载类的路径为 <JAVA_HOME>/jre/lib。特别的 <JAVA_...

2019-01-30 10:36:55 190

原创 Java并发之Condition的实现分析

一、Condition的概念介绍回忆 synchronized 关键字,它配合 Object 的 wait()、notify() 系列方法可以实现等待/通知模式。对于 Lock,通过 Condition 也可以实现等待/通知模式。Condition 是一个接口。Condition 接口的实现类是 Lock(AQS)中的 ConditionObject。Lock 接口中有个 ne...

2019-01-29 17:11:52 104

原创 Redis集群以及自动故障转移测试

在Redis中,与相比Sentinel(哨兵)实现的高可用,集群(cluster)更多的是强调数据的分片或者是节点的伸缩性,如果在集群的主节点上加入对应的从节点,集群还可以自动故障转移,因此相比Sentinel(哨兵)还是有不少优势的。以下简单测试Redis的集群(单机多实例的模式),来体验一下集群的自动故障转移功能,同时结合Python,来观察自动故障转移过程中应用程序端的表现。redi...

2019-01-29 11:28:54 297

原创 Java中的构造函数引用和方法引用

方法引用的一些背景如果你还不知道 Java 构造函数本身就是特殊的方法,那么阅读方法引用的基本示例将对读者有所帮助,通过了解这些内容,可以了解构造函数引用是什么。方法引用可以引用静态方法和实例方法,两者是通用的。方法引用是函数式接口的实例。虽然 Lambda 表达式允许你动态创建方法实现,但通常情况下,一个方法最终会调用 Lambda 表达式中的另一个方法来完成我们想要完成的工作。更直接的...

2019-01-28 11:50:40 856

原创 深入理解单例模式

ObjectInputStream对象的序列化过程通过ObjectOutputStream和ObjectInputputStream来实现的,那么带着刚刚的问题,分析一下ObjectInputputStream的readObject 方法执行情况到底是怎样的。为了节省篇幅,这里给出ObjectInputStream的readObject的调用栈:大家顺着此图的关系,去看readOb...

2019-01-27 15:26:42 178

原创 jvm垃圾回收算法

前言java相较于c、c++语言的优势之一是自带垃圾回收器,程序开发人员不用手动管理内存,内存的分配和释放完全由gc(Garbage Collector)来做,极大地提高了软件开发效率及程序健壮性(手动管理内存容易造成内存泄漏)。凡事皆有两面性,java gc在给我们带来内存管理便捷性的同时,也面临STW(Stop The World)影响程序吞吐的缺陷。作为java开发人员,只有深入理解jv...

2019-01-27 11:34:20 151

空空如也

空空如也

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

TA关注的人

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