自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(37)
  • 资源 (1)
  • 收藏
  • 关注

原创 当 Kafka 分区不可用且 leader 副本被损坏时,如何尽量减少数据的丢失?

经过上次 Kafka 日志集群某节点重启失败导致某个主题分区不可用的事故之后,这篇文章专门对分区不可用进行故障重现,并给出我的一些骚操作来尽量减少数据的丢失。故障重现下面我用一个例子重现现分区不可用且 leader 副本被损坏的例子:使用 unclean.leader.election.enable = false 参数启动 broker0; 使用 unclean.leader.el...

2020-03-31 22:37:07 536

原创 架构师内功心法,23种设计模式中最为复杂的访问者模式详解

访问者模式(Visitor Pattern)是一种将数据结构和数据操作分离的设计模式。是指封装一些作用于某种数据结构中的各种元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作。访问者模式被称为最复杂的设计模式,并且使用频率不高,设计模式的作者也评价为:大多情况下,你不需要使用访问者模式,但是一旦需要使用它时,那就真的需要使用了。访问者模式的基本思想是,针对系统中拥有固定类型...

2020-03-31 21:57:29 335

原创 分布式事务浅析及简单实现

在分布式系统中,为了保证数据的高可用,通常,我们会将数据保留多个副本(replica),这些副本会放置在不同的物理的机器上。为了对用户提供正确的 CRUD 等语义,我们需要保证这些放置在不同物理机器上的副本是一致的。分布式事务在现在遍地都是分布式部署的系统中几乎是必要的。我们先聊一下啥是事务?分布式事务、事务隔离级别、ACID我相信大家这些东西都耳熟能详了,那什么是事务呢?概念:一...

2020-03-31 17:59:49 127

原创 五分钟学后端技术:如何学习Java工程师必须要会的RPC

什么是RPCRPC(Remote Procedure Call):远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的思想。RPC 是一种技术思想而非一种规范或协议,常见 RPC 技术和框架有:应用级的服务框架:阿里的 Dubbo/Dubbox、Google gRPC、Spring Boot/Spring Cloud。 远程通信协议:RMI、Soc...

2020-03-30 22:37:05 191

原创 阿里云面试官:如果是MySQL引起的CPU消耗过大,你会如何优化?

谁在消耗cpu?用户+系统+IO等待+软硬中断+空闲祸首是谁?用户用户空间CPU消耗,各种逻辑运算正在进行大量tps函数/排序/类型转化/逻辑IO访问…用户空间消耗大量cpu,产生的系统调用是什么?那些函数使用了cpu周期?IO等待等待IO请求的完成此时CPU实际上空闲如vmstat中的wa 很高。但IO等待增加,wa也不一定会上...

2020-03-30 15:10:36 102

原创 【Springboot】用Prometheus+Grafana监控Springboot应用

1 简介项目越做越发觉得,任何一个系统上线,运维监控都太重要了。关于Springboot微服务的监控,之前写过【Springboot】用Springboot Admin监控你的微服务应用,这个方案可以实时监控并提供告警提醒功能,但不能记录历史数据,无法查看过去1小时或过去1天等运维情况。本文介绍Prometheus + Grafana的方法监控Springboot 2.X,实现美观漂亮的数据可...

2020-03-28 22:54:19 540

原创 面试官再问我如何保证 RocketMQ 不丢失消息,这回我笑了!

最近看了@JavaGuide发布的一篇『面试官问我如何保证Kafka不丢失消息?我哭了!』,这篇文章承接这个主题,来聊聊如何保证 RocketMQ 不丢失消息。0x00. 消息的发送流程一条消息从生产到被消费,将会经历三个阶段:生产阶段,Producer 新建消息,然后通过网络将消息投递给 MQ Broker 存储阶段,消息将会存储在 Broker 端磁盘中 消息阶段, C...

2020-03-28 22:52:04 228

原创 一个三年工作经验和月薪16k的java程序员应该要具备什么样的技能?

欢迎大家在下方评论区进行讨论!!!

2020-03-28 22:34:08 318

转载 mysql技能梳理

事务不管是什么数据库,事务都是要考虑的。 一般情况下开发注重的是隔离性,如幻读,脏读,不可重复读。然后就是MySQL是怎么实现的。知道事务的基本概念,那么就该知道数据库锁是什么个意思,然后有些时候死锁,数据库的卡顿,长时间没有响应都是因什么而起索引和查询MySQL 设计思想是”如果内存够,就要多利用内存,尽量减少磁盘访问“,而B+树就是能拥有高效查询减少磁盘访问次数的存储结构。...

2020-03-27 22:21:44 169

原创 阿里架构师整理史上最全的Spring全家桶,看了其实也没想的那么难

Spring系列入门到精通Spring框架是由于软件开发的复杂性而创建的。Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅仅限于服务器端的开发。从简单性、可测试性和松耦合性角度而言,绝大部分Java应用都可以从Spring中受益。目的:解决企业应用开发的复杂性 功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能...

2020-03-27 22:19:41 828

原创 亚马逊资深架构师带你解密:“从分布式到微服务”,值得一读

前言“微服务”架构在这几年被广泛传播,变得非常火热,以至于关于微服务架构相关的开源框架和工具都变得越来越活跃,比如: Netlix OSS、Dubbo、Apache Thrift等。Spring Cloud也因为Spring社区在企业应用领域的广泛知名度和强大影响力,受到了广大架构师与开发者的高度关注。内容简介分布式架构与微服务平台是当今IT界的关键技术,也是资深软件工程师和系统架构师...

2020-03-27 22:17:21 642

原创 浅谈微服务架构

微服务来源单体应用微服务是相对于单体应用的,在介绍微服务之前,先简单介绍一下单体应用:通常是由三个重要部分组成:客户端界面(由HTML、JavaScript组成)、数据库(由许多的表组件构成一个通用的、相互关联的数据管理系统)、服务端应用。服务端应用处理客户端的HTTP请求、执行逻辑、检索并更新数据库中的数据、然后将处理后的数据返回给客户端。一个单体应用被构建成一个系统时,业务中所有请...

2020-03-26 22:27:59 262

转载 开源 | 爱奇艺网络流量分析引擎QNSM及其应用

导读一定业务规模的互联网公司的基础设施的网络边界通常都呈现一定程度的复杂多分区的情况,如何进行有效的安全防护和控制会成为安全体系建设的重点和难点。面对这一挑战,爱奇艺安全团队自研了网络流量分析引擎QNSM,并将其用在各种基于流量分析的跨区安全检测和控制场景中,成为了爱奇艺安全防御体系的关键基础引擎。互联网企业边界复杂性上图是典型的中大型互联网公司的网络架构,通常分为:办公网络,...

2020-03-26 22:11:15 1160

原创 阿里架构师强烈推荐《Netty、Redis、ZooKeeper高并发实战》文档,带你剖析底层原理

前言移动时代、5G时代、物联网时代的大幕已经开启,它们对于高性能、高并发的开发知识和技术的要求,抬升了Java工程师的学习台阶和面试门门槛。大公司的面试题从某个侧面映射出生产场景中对专项技术的要求。高并发的面试题以前基本是BAT等大公司的专利,现在几乎蔓延至与Java项目相关的整个行业。例如,与JavaNI0、Reactor模式、高性能通信、分布式锁、分布式ID、分布式缓存、高并发架构等技...

2020-03-26 17:58:53 3867 14

原创 一线大厂架构实战文档:Spring Boot+Spring Cloud+MyBatis+Nginx

前言微服务架构(Microservice Architecture)是一种架构概念,旨在通过将功能分解到各个离散的服务中以实现对解决方案的解耦。你可以将其看作是在架构层次而非获取服务的类上应用很多SOLID原则。微服务架构是个很有趣的概念,它的主要作用是将功能分解到离散的各个服务当中,从而降低系统的耦合性,并提供更加灵活的服务支持。现在,下面这些实战文档就是由某大厂一线架构师来手撕分布式微...

2020-03-25 22:03:43 287 2

原创 如何提升springboot服务吞吐量

背景生产环境偶尔会有一些慢请求导致系统性能下降,吞吐量下降,下面介绍几种优化建议。方案1、undertow替换tomcat电子商务类型网站大多都是短请求,一般响应时间都在100ms,这时可以将web容器从tomcat替换为undertow,下面介绍下步骤: 1、增加pom配置<dependency> <groupid>org.s...

2020-03-25 22:01:27 195

原创 从零开始入门 K8s | Kubernetes API 编程范式

导读:在 Kubernetes 里面, API 编程范式也就是 Custom Resources Definition(CRD)。我们常讲的 CRD,其实指的就是用户自定义资源。为什么会存在用户自定义资源问题呢?本文将会从其需求来源出发,对此概念进行逐步深入的讲解。一、需求来源首先我们先来看一下 API 编程范式的需求来源。在 Kubernetes 里面, API 编程范式也就是 Cu...

2020-03-25 21:25:38 386

原创 没想到MySQL还会问这些...

前言文本已收录至我的GitHub精选文章,欢迎Star:github.com/ZhongFuChen…在前一阵子,大哥问过我:”你知道MySQL的原子性是怎么保证的吗“。我懵逼了,MySQL怎么保证原子性?我不会啊。谁都知道在事务里边原子性的意思:”一个事务包含多个操作,这些操作要么全部执行,要么全都不执行“于是大哥就给我讲:”用的就是 undo log 啊“。我:”卧槽,...

2020-03-24 22:11:09 98

原创 基于Spring Security Oauth2的SSO单点登录+JWT权限控制实践

概 述在前文《基于Spring Security和 JWT的权限系统设计》之中已经讨论过基于Spring Security和JWT的权限系统用法和实践,本文则进一步实践一下基于Spring Security Oauth2实现的多系统单点登录(SSO)和JWT权限控制功能,毕竟这个需求也还是蛮普遍的。代码已开源,放在文尾,需要自取理论知识在此之前需要学习和了解一些前置知识...

2020-03-24 17:18:30 479

转载 RocketMQ 整合 DLedger(多副本)即主从切换实现平滑升级的设计技巧

源码分析 RocketMQ DLedger 多副本系列已经进行到第 8 篇了,前面的章节主要是介绍了基于 raft 协议的选主与日志复制,从本篇开始将开始关注如何将 DLedger 应用到 RocketMQ中。> 摘要:详细分析了RocketMQ DLedger 多副本(主从切换) 是如何整合到 RocketMQ中,本文的行文思路首先结合已掌握的DLedger 多副本相关的知识初步思考其...

2020-03-24 16:42:11 440 1

原创 为什么我们要面向接口编程?!

到底面向?编程面向过程编程(Procedure Oriented、简称PO)和面向对象编程(Object Oriented、简称OO)我们一定听过,然而实际企业级开发里受用更多的一种编程思想那就是:面向接口编程(Interface-Oriented)!接口这个概念我们一定不陌生,实际生活中最常见的例子就是:插座!我们只需要事先定义好插座的接口标准,各大插座厂商只要按这个接口标准生...

2020-03-21 22:16:22 81

原创 深入浅出Mybatis:从原理到实践,阿里大牛整理文档等来你收藏

我们在使用MyBatis的时候,会在xml中编写sql语句。如图:那么,MyBatis底层是如何构造sql,写了接口为啥就能执行sql?下面带着这个疑问我们一步步分析。梳理MyBatis的设计思路创建SqlSessionFactory实例 实例化过程中,加载配置文件创建configuration对象 通过factory创建SqlSession 通过SqlSessio...

2020-03-19 21:49:25 291

原创 消息中间件之ActiveMQ

一、为什么需要MQ?主要原因是由于在高并发环境下,由于来不及同步处理,请求往往会发生堵塞,比如说,大量的insert,update之类的请求同时到达MySQL,直接导致无数的行锁表锁,甚至最后请求会堆积过多,从而触发too many connections错误。通过使用消息队列,我们可以异步处理请求,从而缓解系统的压力。RPC和消息中间件的不同很大程度上就是“依赖性”和“同步性”。RPC方...

2020-03-19 21:47:20 218

原创 RabbitMQ在分布式系统的应用

由于之前做的项目中需要在多个节点之间可靠地通信,所以废弃了之前使用的Redis pub/sub(因为集群有单点问题,且有诸多限制),改用了RabbitMQ。使用期间得到不少收获,也踩了不少坑,所以在此分享下心得。怎么保证可靠性的?RabbitMQ提供了几种特性,牺牲了一点性能代价,提供了可靠性的保证。持久化当RabbitMQ退出时,默认会将消息和队列都清除,所以需要在第一次声明队列和发送消息时...

2020-03-19 21:36:48 197

原创 数据结构之二叉树

概念:二叉树是一种特殊的树,其每个节点最多只能有两个子节点。其左子树和右子树是有顺序的,顺序不能颠倒。即使只有一个节点,也要区分左右子树。斜树:二叉树中每个节点只有相同方向,全部节点只有左子节点的称为左斜树,只有右子节点的称为右斜树。满二叉树:所有的分支节点都具有左子树和右子树,所有的叶子节点都在同一层上,满二叉树追求树的平衡。满二叉树具备一下特点:叶子节点只能...

2020-03-18 21:41:27 165

转载 程序的一生:从源程序到进程的辛苦历程

摘要:一个程序的一生,从源程序到进程的辛苦历程!本文不深入研究编译原理、操作系统原理,主要聚焦于程序的加载和链接。一、前言作为计算机专业的人,最遗憾的就是在学习编译原理的那个学期被别的老师拉去干活了,而对一个程序怎么就从源代码变成了一个在内存里活灵活现的进程,一直也心怀好奇。这种好奇驱使我要找个机会深入了解一下,所以便有了本文,来督促自己深入研究程序的一生。不过,本文没有深入研究编译原理、...

2020-03-18 21:39:05 448

原创 JVM内存模型

Java内存模型Java内存模型是共享内存的并发模型,线程之间主要通过读-写共享变量(堆内存中的实例域,静态域和数组元素)来完成隐式通信。Java 内存模型(JMM)控制 Java 线程之间的通信,决定一个线程对共享变量的写入何时对另一个线程可见。计算机高速缓存和缓存一致性计算机在高速的 CPU 和相对低速的存储设备之间使用高速缓存,作为内存和处理器之间的缓...

2020-03-18 21:36:46 988

转载 使用JDBC调用存储过程和函数

1 CallableStatement接口CallableStatement接口用于调用存储过程和函数。通过使用存储过程和函数,我们可以在数据库上编写业务逻辑,这将使性能更好,因为它们是预编译的。2 存储过程和函数的区别?3 获取CallableStatement对象Connection接口的prepareCall() 方法返回CallableStatement对象。语法如...

2020-03-18 21:34:47 213

原创 分布式系统中如何优雅地追踪日志(原理篇)

分布式系统中日志追踪需要考虑的几个点?需要一个全服务唯一的id,即traceId,如何保证? traceId如何在服务间传递? traceId如何在服务内部传递? traceId如何在多线程中传递?我们一一来解答:全服务唯一的traceId,可以使用uuid生成,正常来说不会出现重复的; 关于服务间传递,对于调用者,在协议头加上traceId,对于被调用者,通过前置拦截器或者过滤...

2020-03-16 23:06:49 371

原创 Java 8系列之重新认识HashMap

摘要HashMap是Java程序员使用频率最高的用于映射(键值对)处理的数据类型。随着JDK(Java Developmet Kit)版本的更新,JDK1.8对HashMap底层的实现进行了优化,例如引入红黑树的数据结构和扩容的优化等。本文结合JDK1.7和JDK1.8的区别,深入探讨HashMap的结构实现和功能原理。简介Java为数据结构中的映射定义了一个接口java.util.M...

2020-03-14 21:36:36 85

转载 Spring Cloud Alibaba:Sentinel实现熔断与限流

一、什么是SentinelSentinel,中文翻译为哨兵,是为微服务提供流量控制、熔断降级的功能,它和Hystrix提供的功能一样,可以有效的解决微服务调用产生的“雪崩效应”,为微服务系统提供了稳定性的解决方案。随着Hystrix进入了维护期,不再提供新功能,Sentinel是一个不错的替代方案。通常情况下,Hystrix采用线程池对服务的调用进行隔离,Sentinel采用了用户线程对接口进...

2020-03-14 21:33:00 377

原创 想成为顶尖 Java 程序员?先过了下面这些问题!

一、数据结构与算法基础说一下几种常见的排序算法和分别的复杂度。 用Java写一个冒泡排序算法 描述一下链式存储结构。 如何遍历一棵二叉树? 倒排一个LinkedList。 用Java写一个递归遍历目录下面的所有文件。二、Java基础接口与抽象类的区别? Java中的异常有哪几类?分别怎么使用? 常用的集合类有哪些?比如List如何排序? ArrayList和LinkedL...

2020-03-11 22:41:29 109

原创 从头撸到脚,SpringBoot 就一篇全搞定!

一、Hello Spring Boot1、Spring Boot 简介简化Spring应用开发的一个框架; 整个Spring技术栈的一个大整合; J2EE开发的一站式解决方案;2、微服务微服务:架构风格(服务微化) 一个应用应该是一组小型服务;可以通过HTTP的方式进行互通; 单体应用:ALL IN ONE 微服务:每一个功能元素最终都是一个可独立替换和独立升级的软件单元;...

2020-03-10 20:57:43 924 2

原创 Spring Cloud Alibaba:Sentinel实现熔断与限流

一、什么是SentinelSentinel,中文翻译为哨兵,是为微服务提供流量控制、熔断降级的功能,它和Hystrix提供的功能一样,可以有效的解决微服务调用产生的“雪崩效应”,为微服务系统提供了稳定性的解决方案。随着Hystrix进入了维护期,不再提供新功能,Sentinel是一个不错的替代方案。通常情况下,Hystrix采用线程池对服务的调用进行隔离,Sentinel采用了用户线程对接口进...

2020-03-09 21:45:01 207

转载 一线大厂的分布式唯一ID生成方案是什么样的?

一、前言分布式系统中我们会对一些数据量大的业务进行分拆,如:用户表,订单表。因为数据量巨大一张表无法承接,就会对其进行分库分表。但一旦涉及到分库分表,就会引申出分布式系统中唯一主键ID的生成问题,永不迁移数据和避免热点的文章中要求需要唯一ID的特性: 整个系统ID唯一 ID是数字类型,而且是趋势递增的 ID简短,查询效率快 什么是递增?如:第一次生成的ID为1...

2020-03-09 21:38:57 136

原创 金三银四,没想到竟然收到了3个offer,就靠这一份PDF文档面试BAT

这份PDF面经知识点包括了五个大部分,26个知识点:Java部分:Java基础,集合,并发,多线程,JVM,设计模式 数据结构算法:Java算法,数据结构 开源框架部分:Spring,MyBatis,MVC,netty,tomcat 分布式部分:架构设计,Redis缓存,Zookeeper,kafka,RabbitMQ,负载均衡等 微服务部分:SpringBoot,Sprin...

2020-03-09 17:32:06 170

转载 阿里云面试官:如果是MySQL引起的CPU消耗过大,你会如何优化?

谁在消耗cpu?用户+系统+IO等待+软硬中断+空闲祸首是谁?用户用户空间CPU消耗,各种逻辑运算正在进行大量tps函数/排序/类型转化/逻辑IO访问…用户空间消耗大量cpu,产生的系统调用是什么?那些函数使用了cpu周期?IO等待等待IO请求的完成此时CPU实际上空闲如vmstat中的wa 很高。但IO等待增加,wa也不一定会上...

2020-03-08 22:55:45 369

c++ 面试题库.pdf

一、C 和C++的特点与区别? 参考答案: 答:(1) C语言特点: 1)作为- 种面向过程的结构化语言,易于调试和维护; 2)表现能力和处理能力极强,可以直接访问内存的物理地址; 3)C语言实现了对硬件的编程操作,也适合于应用软件的开发; 4) C语言还具有效率高,可移植性强等特点。 (2) C++语言特点: 1) 在C语言的基础上进行扩充和完善,使C+t兼容了C语言的面向过程特点,又成为了一种面向对象的程序设计语言; 2)可以使用抽象数据类型进行基于对象的编程; 3)可以使用多继承、多态进行面向对象的编程; 4)可以担负起以模版为特征的泛型化编程。

2020-03-21

空空如也

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

TA关注的人

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