自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(159)
  • 问答 (2)
  • 收藏
  • 关注

原创 架构师-金句100

CDN 解决的最重要的问题是:网络延迟(缓存、回源)解释:CDN 旨在解决的最重要的问题是什么,我们称之为网络延迟;例如淘宝的图片访问,有98%的流量都走了CDN缓存。只有2%会回源到源站,节省了大量的服务器资源。浏览器缓存:当服务接入了 CDN 之后,浏览器本地缓存的资源过期之后,浏览器不是直接向源服务器请求资源,而是转而向 CDN 边缘节点请求资源。CDN 边缘节点中将用户的数据缓存起来,如果 CDN 中的缓存也过期了,CDN 边缘节点会向源服务器发出回源请求,从而来获取最新资源。

2021-12-21 15:49:30 940 1

原创 一文搞懂Netty中Handler的执行顺序

看了很多讲解Netty中InboundHandler、OutboundHandler执行顺序的文章,很少有一篇能完全讲的全的、对的、没有歧义的,在此根据所学、亲自验证得出的结论给大家举例:netty服务端是这个添加顺序链表中的顺序为head->in1->in2->out1->out2->tail1、如果在InboundHandler2中执行的是ctx.channel().writeAndFlush,执行顺序是:结果证明:执行完InboundHandler1、InboundHandler2之后,由

2019-12-17 18:30:45 7124 10

原创 分布式系统设计

高可用分布式系统应该要考虑以下几个大点和一些小点,大点与小点之间其实有包含、有交集,只是为了方便分点论述才分类。四个大点:容错能力(服务隔离、异步调用、请求幂等性、分布式锁) 可伸缩性(有 / 无状态的服务) 一致性(补偿事务、重试) 应对大流量的能力(熔断、降级)两个小点:解耦(MQ) 线程池四个大点论述:1、容错能力(服务隔离、异步调用、请求幂等性、分布式锁)......

2018-07-16 22:32:55 9092 1

原创 Java不重启服务 扩展新支付功能demo

那我们如何能做到不重启服务,就能扩展新功能呢?本文给一个简单的demo示例,以支付扩展为例。MyClasslLoader是自定义的类加载,用于根据类的全路径加载已有的类、或新增的类。将AliPay编译成AliPay.class文件,放入到CLASS_PATH目录下。重点看PayFactory获取对应支付方式的getPay。上面一直执行的线程会加载支付宝支付,输出支付宝支付成功。这个类是关键,实现不重启动态加载的核心。main方法,启动一个线程执行。

2023-08-30 21:07:20 163

原创 TCP/IP协议

三次握手,四次握手,TCP/IP,websocket,http

2023-03-13 17:59:05 248

原创 排障命令-汇总

定义:(global regular expression) 命令用于查找文件里符合条件的字符串或正则表达式。定义:查看当前进程的打开文件详情(list open files)定义:查询系统负载、CPU、内存使用情况。定义:可用于显示系统资源的设置。定义:查询JVM内存对象信息。定义:打印进程的堆栈信息。定义:查看内存使用情况。定义:用于显示网络状态。jps常用命令:jps。定义:压缩文件中查找。定义:查询进程号相关。

2023-02-28 20:32:21 713

原创 Paxos与Raft比较

Paxos:Paxos算法是一种基于消息传递且具有高度容错特性的一致性算法。用于解决在多个节点间确定一个值。Paxos算法实现多个节点间达成共识的过程分为两个阶段:准备阶段、接受阶段准备阶段:Acceptor的响应规则总结:如果Acceptor之前没有响应任何提案,返回一个尚无提案的响应;如果准备请求的提案编号,小于等于Acceptor已经响应过的准备请求的提案编号,那么将承诺不响应这个准备请求 如果接受请求的提案编号,小于Acceptor已经响应的准备请求的提案编号,那么

2022-05-08 15:45:38 1350

原创 OAuth 2.0

OAuth 2.0详解

2022-04-03 15:10:10 854

原创 ES使用调研

Elasticsearch

2021-12-07 16:09:39 1190

转载 Java中9种常见的CMS GC问题分析与解决

原文链接:https://mp.weixin.qq.com/s/RFwXYdzeRkTG5uaebVoLQw

2021-11-15 09:26:48 115

原创 算法实现思路

怎么查询一个单向链表的倒数第五个节点:定义一个nodeA,然后遍历链表,nodeA与当前遍历的node相差五个节点即可 判断链表是否成环:定义两个node,一个每次next、一个每次next两次,如果相遇,则成环 在无序数组中找最大的K个数:快速排序\建立一个K个元素的大根堆 给定n个数,寻找第k小的数,同时给出时间复杂度:快速排序\建立一个K个元素的大根堆 10w行数据,每行一个单词,统计出现次数出现最多的前100:哈希分治法 - 统计海量数据中出现次数最多的前10个IP - 简...

2021-11-07 14:31:41 237

原创 IO多路复用的三种机制Select,Poll,Epoll

定义:I/O多路复用(multiplexing)的本质是通过一种机制(系统内核缓冲I/O数据),让单个进程可以监视多个文件描述符,一旦某个描述符就绪(一般是读就绪或写就绪),能够通知程序进行相应的读写操作在介绍select、poll、epoll之前,首先介绍一下Linux操作系统中基础的概念:用户空间 / 内核空间 现在操作系统都是采用虚拟存储器,那么对32位操作系统而言,它的寻址空间(虚拟存储空间)为4G(2的32次方)。 操作系统的核心是内核,独立于普通的应用程序,可以访问受保护的内存空间,

2021-10-28 19:30:36 231

原创 分布式系统理论

1、一致性hash算法:深入一致性哈希(Consistent Hashing)算法原理一致性Hashing在分布式系统中经常会被用到,用于尽可能地降低节点变动带来的数据迁移开销hash算法缺陷:先来简单理解下Hash是解决什么问题。假设一个分布式任务调度系统,执行任务的节点有n台机器,现有m个job在这n台机器上运行,这m个Job需要逐一映射到n个节点中一个,这时候可以选择一种简单的Hash算法来让m个Job可以均匀分布到n个节点中,比如 hash(Job)%n ,看上去很完美,但考虑如下两种...

2021-10-18 20:49:34 278

原创 MySql相关

1 索引数据结构:B+树联合索引(a, b),第一个和第二个触发条件,where a=会触发嘛,where b=会嘛,为什么?CREATE TABLE E (e1 INT, e2 VARCHAR(9), e3 INT, PRIMARY KEY(e1, e3));这样就建立了一个联合索引:e1,e3触发联合索引是有条件的:偏左原理1、使用联合索引的全部索引键,可触发索引的使用。例如:SELECT E.* FROM E WHERE E.e1=1 AND E.e3=22、使用联合索引的前.

2021-10-18 20:47:56 103

原创 Redis相关

1分布式锁的几种实现(1)zookeeper分布式锁,基于自增节点(2)redis分布式锁,基于setnx命令;2 分布式锁的基本功能(1)同一时刻只能存在一个锁(2)需要解决意外死锁问题,也就是锁能超时自动释放;(3)支持主动释放锁(3)分布式锁解决什么问题:多进程并发执行任务时,需要保证任务的有序性或者唯一性3缓存被“击穿”问题:(1)概念:缓存在某个时间点过期的时候,恰好在这个时间点对这个Key有大量的并发请求过来,这些请求发现缓存过期一 般都会从后端DB加载数据并回设到.

2021-10-18 20:44:40 177

原创 Kafka相关

1 为什么要使用 MQ 消息中间件:解耦,要做到系统解耦; 面对大流量并发时容易被冲垮;设置流量缓冲池,可以让后端系统按照自身吞吐能力进行消费,不被冲垮 存在性能问题(RPC接口基本上是同步调用)即整体的服务性能遵循“木桶理论”,即链路中最慢的那个接口;2 如何保证高吞吐量和消息的可靠传输:说明:一个集群,为什么需要多个Broker(kafka实例),多实例保证一个broker挂了,整个集群还能继续使用,高可用一个topic,为什么要有多个part:为了方便多个生产者忘多个part并发

2021-10-18 20:40:52 155

原创 Zookeeper相关

Zookeeper有四种类型的znode:PERSISTENT-持久化目录节点:客户端与zookeeper断开连接后,该节点依旧存在 PERSISTENT_SEQUENTIAL-持久化顺序编号目录节点:客户端与zookeeper断开连接后,该节点依旧存在,只是Zookeeper给该节点名称进行顺序编号 EPHEMERAL-临时目录节点:客户端与zookeeper断开连接后,该节点被删除 EPHEMERAL_SEQUENTIAL-临时顺序编号目录节点:客户端与zookeeper断开连...

2021-10-18 20:38:39 108

原创 Netty相关

1 channel结构图通过上图我们可以看到, 一个 Channel 包含了一个 ChannelPipeline, 而 ChannelPipeline 中又维护了一个由 ChannelHandlerContext 组成的双向链表. 这个链表的头是 HeadContext, 链表的尾是 TailContext, 并且每个 ChannelHandlerContext 中又关联着一个 ChannelHandler。2 传播机制Inbound 事件传播方法有:(head -> custom.

2021-10-18 20:36:27 206

原创 JVM相关

1 System.gc()这个方法执行后是立即回收内存吗?答:程序员可以手动执行System.gc(),通知GC运行,但是Java语言规范并不保证GC一定会执行;因为这个命令只是建议JVM安排GC运行, 还有可能完全被拒绝。 GC本身是会周期性的自动运行的,由JVM决定运行的时机,而且现在的版本有多种更智能的模式可以选择,还会根据运行的机器自动去做选择,就算真的有性能上的需求,也应该去对GC的运行机制进行微调,而不是通过使用这个命令来实现性能的优化2强引用、软引用3 堆外内存1. 堆内..

2021-10-18 20:21:39 181

原创 Hbase

目录架构图Hbase写流程Hbase读流程RowKey设计Hbase-client操作架构图核心概念解释:HLog:Hbase写数据先写到Mem Store(JVM内存存储),为了防止机器挂了数据丢失,写到Mem Store之前先记录操作日志到HLog。Mem Store中的数据在符合特定条件下,再写入到StoreFile,写入后删除HLog中的记录; Mem Store:记录最新写入的value,支持随机修改(Hbase中DataNode中的数据是不支持随

2021-09-30 16:43:19 327

原创 Hadoop

目录优点HDFS架构概述YARN架构概述优点高可靠性:Hadoop底层维护多个数据副本,所以即使Hadoop某个计算元素或存储出现故障,也不会导致数据的丢失。 高扩展性:能在廉价机器组成的集群间分配任务数据,可方便的扩展数以干计的节点。 高效性:在MapReduce的思想下,Hadoop是并行工作的,以加快任务处理速度。 高容错性:能够自动将失败的任务重新分配。 HDFS架构概述HDFS集群由单个NameNode,和多个datanode构成。Nam...

2021-09-29 23:45:25 151

原创 Selector空轮询

JDK NIO的BUG,例如臭名昭著的epoll bug,它会导致Selector空轮询,最终导致CPU 100%。官方声称在JDK1.6版本的update18修复了该问题,但是直到JDK1.7版本该问题仍旧存在,只不过该BUG发生概率降低了一些而已,它并没有被根本解决。该BUG以及与该BUG相关的问题单可以参见以下链接内容。https://bugs.java.com/bugdatabase/view_bug.do?bug_id=2147719https://bugs.java.com/bugdat

2020-06-03 22:31:32 1871

原创 Netty优点

BIO的缺点:public static void main(String[] args) throws FileNotFoundException { try { ServerSocket server = new ServerSocket(5555); while (true) { Socket socket = server.accept(); //这是阻塞的,没有客户端到来,一直停在这里 System

2020-05-28 00:32:35 433

原创 图解http

说明:基于http/1.1版本TCP协议定义:传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议HTTP协议:即超文本传送协议(HypertextTransferProtocol),是Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种应用七层模型 :亦称OSI(...

2020-03-28 21:47:46 356

原创 Kafka 事务处理

目录Kafka中的幂等与事务Kafka中的事务实现Kafka中的幂等与事务原文链接:Kafka科普系列 | Kafka中的事务是什么样子的?在说Kafka的事务之前,先要说一下Kafka中幂等的实现。幂等和事务是Kafka 0.11.0.0版本引入的两个特性,以此来实现EOS(exactly once semantics,精确一次处理语义)。幂等,简单地说就是对接口的...

2020-03-14 22:38:33 1031 1

原创 Kafka最佳实践

消息对象:import lombok.Data;@Datapublic class PersonInfo { private long createTime; private String idAccount; private String clientAddress; private String serverAddress;}生产者:import com.al...

2020-03-10 23:07:18 300

原创 微服务面试题

1、什么是微服务?微服务架构是一种架构模式或者说是一种架构风格,它提倡将单一应用程序划分成一组小的服务,每个服务运行在其独立的自己的进程中,服务之间互相协调、互相配合,为用户提供最终价值。服务之间采用轻量级的通信机制互相沟通(通常是基于HTTP的RESTful API)。每个服务都围绕着具体业务进行构建,并且能够被独立地部署到生产环境、类生产环境等。另外,应尽量避免统一的...

2020-03-08 23:27:48 2806

原创 Netty、Kafka中的零拷贝技术到底有多牛

零拷贝,从字面意思理解就是数据不需要来回的拷贝,大大提升了系统的性能。我们也经常在 Java NIO,Netty,Kafka,RocketMQ 等框架中听到零拷贝,它经常作为其提升性能的一大亮点;下面从 I/O 的几个概念开始,进而再分析零拷贝。I/O 概念:缓冲区:缓冲区是所有 I/O 的基础,I/O 讲的无非就是把数据移进或移出缓冲区;进程执行 I/O 操作,就是向操作系统发出请求,让...

2020-02-26 20:55:40 1530

原创 温习设计模式

OO基础:抽象 封装 多态 继承OO设计特性:可复用 可扩充 可维护设计原则:封装变化:把会变化的部分取出并“封装”起来,好让其他部分不会受到影响(找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起) 针对接口编程,而不是针对实现编程 多用组合,少用继承 为了交互对象之间的松耦合设计而努力 类应该对扩展开放,对修改封闭设计...

2020-02-16 15:24:12 660

原创 使用阿里云aliyun-oss-java-sdk的 getObject方法返回的输入流未主动释放 导致http连接泄漏的线上问题排查

项目功能:基于netty的数据传输服务,接收客户端数据,存在本地磁盘;定时任务,定时处理本地的文件,并上传到阿里云OSS线上问题:运维监控发现过去半个小时都没有记录写入到DB(因为我们每上传到OSS一次会DB记一条记录)问题排查过程:1、运维将实时的进程的dump文件拷贝出来2、使用mat工具分析dump文件(mat介绍:https://www.cnblogs.com/trust-free...

2019-12-03 16:50:36 2627

原创 mac下 内存分析工具mat安装,使用mat分析:内存溢出、内存泄漏,结合jstat、jmap等命令的使用

分析前提:mat的安装详情:https://blog.csdn.net/qq_34599254/article/details/82685110 https://www.cnblogs.com/trust-freedom/p/6744948.html 安装后,再具体使用过程中,发现我dump的文件有4个G,而mat默认的配置是1个G,...

2019-11-11 19:12:49 6119 2

原创 架构学习过程

2019年10月11日 redis作为分布式锁只能保证AP 分析:redis作为分布式锁在大多数情况下是没问题的,但是我们知道CAP原理,一致性,可用性,分区容错性在redis分布式架构中,我们其实保证的是AP模型,也就是尽可能的保证了redis的可用性,这在一般系统中当然是没问题的,哪怕有时候一致性有点问题(实际读到的数据不正确,或已经写入没读到)毕竟是作为缓存的存在,一定延迟可以接受...

2019-10-11 22:12:35 401

原创 Spring Cloud 微服务实战

服务治理:Spring Cloud Euraka第一步,搭建服务注册中心(如果用zk作为注册中心,类似安装配置启动zk) 注册中心,我们部署两套,避免单点(小集群)/** * @EnableEurekaServer注解启动一个服务注册中心提供给其他应用进行对话 */@SpringBootApplication@EnableEurekaServerpublic class Ap...

2019-09-11 23:44:04 916

原创 mysql的in和not in等的用法(特别注意not in结果集中不能有null)、表分区

mysql的not in的用法(特别注意not in结果集中不能有null,如果not in结果集中有Null,则查询结果直接为Null) select * from user where name not in ('科比', '乔丹');假如DB有100条数据(包含'科比', '乔丹'),则这条sql返回剩余98条记录select * from user where name not ...

2019-09-02 18:51:03 10268 2

原创 Java8 Lambda 表达式、Stream

为什么要学习Java8?我想根据我做项目的亲身体会来说下:性能问题:项目中涉及到矩阵等相关数学计算的过程中(20万条测试数据),jdk8:4秒,jdk7:40+秒 跳槽后,接手新公司的项目,发现大量使用Java8的新特性,导致我花费更多的时间去熟悉项目 未来的面试需要首先说下最吸引人的Lambda 表达式:Lambda 表达式,也可称为闭包,lambda表达式替换匿名类,它是推动 J...

2019-08-21 21:14:54 1181

原创 Spring全家桶 ~ 你应该知道的知识点

InitializingBean接口 package org.springframework.beans.factory;public interface InitializingBean { void afterPropertiesSet() throws Exception;} 这个接口就这一个方法,这个接口在一些中间件中肯定会涉及到,因为它独特的魅力,首先看它bean实例化执行的...

2019-08-14 22:57:59 450

原创 Java 逃逸分析

什么是逃逸分析?逃逸分析的基本行为就是分析对象动态作用域:当一个对象在方法中被定义后,它可能被外部方法所引用,例如作为调用参数传递到其他地方中,称为方法逃逸。例如以下代码:public static StringBuffer craeteStringBuffer(String s1, String s2) { StringBuffer sb = new StringBuffe...

2019-07-23 22:16:51 1504

原创 如何设计一个分布式定时任务系统

以前在美团有crane可用,现在得自己考虑以下两种场景了:1、定时任务指定集群中的一台机器执行2、如何修改cron参数,且修改永久有效当然直接用quartz来实现肯定最棒,但设计的配置太多,小公司没那个需求;关于第1个,我开始选择得做法是:读取zk固定节点path的值:若值为空,当前机器A写入自己的ip到path下,并获得执行资格;若值不为空,且值==A的ip,获得执行资格...

2019-06-04 14:34:00 6257 1

原创 获取并分析dump文件

本地获取dump文件:1、JDK8之前-XX:PermSize=3m -XX:MaxPermSize=3m -XX:+HeapDumpOnOutOfMemoryError2、JDK8以及之后(没有永久代了,改成元空间Metaspace了)-XX:MetaspaceSize=3M -XX:MaxMetaspaceSize=3M -XX:+HeapDumpOnOutOfMem...

2019-03-04 20:20:43 2257

原创 java基础相关

目录1、JDK对象与数据结构1.1 HashMap:1.2 Hashtable、StringBuffer等是如何做到安全的1.3 finalize方法1.4 红黑树1.5 B-树(B树,不能读B减树)1.​6B+树1.7transient 关键字1.8threadlocal关键字2、序列化3、MySql数据库3.1 索引数据结构:B+树3....

2019-02-26 16:51:25 3309

空空如也

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

TA关注的人

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