- 博客(110)
- 资源 (4)
- 收藏
- 关注

原创 Zookeeper的分布式注册中心详解
目录概述:注册中心的功能:架构图:Dubbo与ZK:阿里著名的开源项目Dubbo 是一个基于JAVA的RCP框架,其中必不可少的注册中心可基于多种第三方组件实现,但其官方推荐的还是Zookeeper做为注册中心服务作为注册中心的zk存储结构:节点说明: 类别 属性 说明 Root...
2020-05-07 18:38:33
449
1

原创 RabbitMQ 的几种模式和应用场景
一:点对点模式:(P 指消息的生产者 producer C 指消息的 消费者 consumer) public class SimpleTest { //模拟生产者将消息放入队列 @Test public void send() throws Exception{ /*1 创建连接工厂 * 2 配置共创config ...
2019-02-18 09:54:32
5023
2

原创 消息队列的应用场景以及各种队列产品的比对
一、概述:消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题实现高性能,高可用,可伸缩和最终一致性架构使用较多的消息队列有ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ二、消息队列应用场景场景一 异步处理场景说明:用户注册后,需要发注册邮件和注册短信。传统的做法有两种 1.串行的方式;2.并行方式...
2018-12-19 13:43:26
276

原创 权限系统的设计模式 ACL RBAC ABAC
ACL(Access Control List):访问权限列表 如: user1-->AC1user1-->AC2user2-->AC1 此时权限汇总成一个列表这种设计最常见的应用就是文件系统的权限设计,如微软的NTFS对权限控制比较分散,不便于管理,比如无法简单地将一组文件设置统一的权限开放给指定的一群用户RBAC(Role Base A...
2018-11-02 11:17:22
21970
1

原创 Alibaba - 开发规范和插件
《阿里巴巴Java开发手册》 以及各种开发工具[eclipse,idea等]的规范插件在阿里的git 上都有 https://github.com/alibaba/p3c 下面是eclipse的 安装使用 1.eclipse 安装该插件 Help >> Install New Software then enter this upda...
2018-09-13 17:46:42
836
2
转载 Nginx配置详细解读
#运行用户user nobody;#启动进程,通常设置成和cpu的数量相等worker_processes 1;#全局错误日志及PID文件#error_log logs/error.log;#error_log logs/error.log notice;#error_log logs/error.log info;#pid logs/nginx.pid;#工作模式及连接数上限events { #epoll是多路复用IO(I/O Multiple.
2022-04-25 16:47:48
308
原创 Java诊断工具 Arthas
是什么Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱。在线排查问题,无需重启;动态跟踪Java代码;实时监控JVM状态。可以解决如下常见问题: 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception? 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了? 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗? 线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!...
2021-07-29 11:03:18
234
2
转载 排序算法动图演示
0.1 算法分类十种常见排序算法可以分为两大类:比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。 非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间非比较类排序。0.2 算法复杂度0.3 相关概念稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面。 不稳定:如果a原本在b的前面,而a=b,排序之后 a 可能会出现在 b 的后面。 .
2021-03-09 21:33:56
154
原创 分布式ID 生成方案
ID是数据的唯一标识,传统的做法是利用UUID和数据库的自增ID,在互联网企业中,大部分公司使用的都是Mysql,并且因为需要事务支持,所以通常会使用Innodb存储引擎,UUID太长以及无序,所以并不适合在Innodb中来作为主键,自增ID比较合适,但是随着公司的业务发展,数据量将越来越大,需要对数据进行分表,而分表后,每个表中的数据都会按自己的节奏进行自增,很有可能出现ID冲突。这时就需要一个单独的机制来负责生成唯一ID,生成出来的ID也可以叫做分布式ID,或全局ID。下面来分析各个生成分布式ID的机制
2020-05-22 15:54:59
255
原创 分布式锁-超卖问题案例分析
我们先来看一个业务场景:系统A是一个电商系统,目前是一台机器部署,系统中有一个用户下订单的接口,但是用户下订单之前一定要去检查一下库存,确保库存足够了才会给用户下单。由于系统有一定的并发,所以会预先将商品的库存保存在redis中,用户下单的时候会更新redis的库存。假如某个时刻,redis里面的某个商品库存为1,此时两个请求同时到来,其中一个请求执行到上图的第3步,更新数据库的库存为0,但是第4步还没有执行。而另外一个请求执行到了第2步,发现库存还是1,就继续执行第3步。这样的结果.
2020-05-22 15:34:58
745
原创 LSM树 Log-Structured Merge Tree
代表数据库:nessDB、leveldb、hbase、InfluxDB等核心思想的核心就是放弃部分读能力,换取写入的最大化能力。LSM Tree ,这个概念就是结构化合并树的意思,它的核心思路其实非常简单,就是假定内存足够大,因此不需要每次有数据更新就必须将数据写入到磁盘中,而可以先将最新的数据驻留在内存中,等到积累到最后多之后,再使用归并排序的方式将内存内的数据合并追加到磁盘队尾(因为所有待排序的树都是有序的,可以通过合并排序的方式快速合并到一起)。日志结构的合并树(LSM-tree)是一种基于硬
2020-05-22 14:19:15
708
原创 并发中的三大特性详解
前言:Java并发编程的三大特性:原子性、可见性、有序性。要保证并发代码的安全性则必须满足这三大特性原子性:一个或者多个操作,要么全部执行(执行的过程是不会被打断的)、要么全部不执行。案例分析:http://www.51testing.com/html/87/300987-814461.html...
2020-05-21 22:57:04
5274
1
原创 GC 时间过长的优化一般思路
JVM 的调优首要任务就是缩短GC 时stop working 的时间。下面是GC分析、调优的一般思路。发现分析的过程:用户、运维反映、XX页面卡顿->前端人员分析页面代码没问题。->继续分析XX数据接口相应的时间太长->反映给后台开发->后台开发本地测试-> 相应时间正常-> 测试线上的接口-> 相应时间过长-> 分析一般系统日志->发现SQL查询时间正常、但是相关的业务代码执行时间过长。此时怀疑GC时间过长导致程序停顿->通过在
2020-05-20 19:12:13
6588
原创 常见OutOfMemoryError 分析与解决
java.lang.OutOfMemoryError:Javaheap space当堆内存(Heap Space)没有足够空间存放新创建的对象时,就会抛出 java.lang.OutOfMemoryError:Javaheap space 错误(根据实际生产经验,可以对程序日志中的 OutOfMemoryError 配置关键字告警,一经发现,立即处理)原因分析:Javaheap space 错误产生的常见原因可以分为以下几类:1、请求创建一个超大对象,通常是一个大数组。2、超出预期的访.
2020-05-20 17:35:24
1891
原创 Springboot 自动装配源码分析
点击去之后可以看到 核心注解springbootApplication 包含了三个注解@SpringBootConfiguration :实现配置功能@EnableAutoConfiguration :实现自动配置功能@ComponentScan:spring组件扫描再看一下最最主要的注解@EnableAutoConfiguration,点进去分析一下AutoConfigurationImportSelector内部实现 @Overridepublic String[] sel...
2020-05-13 11:29:39
335
转载 Spring中的设计模式
第一种:简单工厂又叫做静态工厂方法(StaticFactory Method)模式,但不属于23种GOF设计模式之一。 简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类。 spring中的BeanFactory就是简单工厂模式的体现,根据传入一个唯一的标识来获得bean对象,但是否是在传入参数后创建还是传入参数前创建这个要根据具体情况来定。 如下配...
2020-05-08 16:35:20
207
原创 redis pipeline的使用
背景:在某些业务场景中 会对redis 产生频繁的读写操作。这样会导致系统延时过高,吞吐量低下,无法满足目标;其中,redis pipeline(管道机制)的应用是一个解决手段。Redis普通请求-处理模型:Redis pipeline请求-处理模型:从两个图的对比中可看出,普通的请求模型是同步的,每次请求对应一次IO操作等待;而Pipeline 化之后所有的请求合并...
2020-05-08 16:04:02
526
原创 Redis 常见的错误(坑)
从redis 的设计规范、命令的使用、分布式场景的使用、集群 等角度来说说常见的坑。目录Bigkey问题:bigkey是指某个key所对应的值过大,如string 应该控制在10kb,hash、list、set、zset元素不要超过2000个防止在高并发场景下查询流量过大导致慢查询、占用网卡流量、导致redis 阻塞。若确实存在bigkey要注意:不要使用del删除,使用hsc...
2020-05-08 15:54:14
1940
转载 Java 函数优雅之道
https://blog.youkuaiyun.com/yunqiinsight/article/details/99826098
2020-05-07 20:57:21
126
原创 ZK集群搭建、选举机制、数据同步机制笔记
http://note.youdao.com/noteshare?id=12d57ace129e721b8f4c241951251324
2020-05-07 20:29:25
185
原创 zookeeper基概
zookeeper 中节点叫znode存储结构上跟文件系统类似,以树级结构进行存储。不同之外在于znode没有目录的概念,不能执行类似cd之类的命令。znode结构包含如下:path:唯一路径childNode:子节点stat:状态属性type:节点类型节点类型 类型 描述 PERSISTENT 持久节点 ...
2020-05-07 20:19:56
183
转载 三种实现分布式锁的方案
https://blog.youkuaiyun.com/wuzhiwei549/article/details/80692278
2020-05-07 20:07:38
150
原创 基于Zookeeper实现分布式锁
锁的基概锁:通过锁可以实现在多个线程或多个进程间在争抢资源时,能够合理的分配置资源的所有权。在单体应用中我们可以通过 synchronized 或ReentrantLock 来实现锁分布式锁:但在分布式系统中,仅仅是加synchronized 是不够的,需要借助第三组件来实现。比如一些简单的做法是使用 关系型数据行级锁来实现不同进程之间的互斥,但大型分布式系统的性能瓶颈往往集中在数据库...
2020-05-07 19:55:58
164
原创 基于ZK的分布式集群管理
分布式集群管理常见的需求主动查看线上服务节点 查看服务节点资源使用情况 服务离线通知 服务资源(CPU、内存、硬盘)超出阀值通知架构设计节点结构root-manger // 根节点 server00001 :<json> //服务节点 1 server00002 :<json>//服务节点 2 server........n :<js...
2020-05-07 18:30:38
467
原创 分布式会话(session)
基概:Session 即服务器与客户端保持整个通讯的会话基本信息客户端在第一次访问服务端的时候,服务端会响应一个sessionId并且将它存入到本地cookie中,在之后的访问会将cookie中的sessionId放入到请求头中去访问服务器,如果通过这个sessionid没有找到对应的数据那么服务器会创建一个新的sessionid并且响应给客户端问题:如图 在单机环境时session是存储...
2020-05-07 15:04:29
432
原创 Web 应用系统安全性
一、SQL注入概述:解决:二、跨站脚本XSS概述:解决:三、跨站请求伪造(CSRF)概述:解决:四、失效的认证和会话管理概述:解决:五、失效的访问控制概述:解决:六、敏感信息泄漏概述:解决:...
2020-05-06 11:26:31
718
原创 Redis 缓存穿透、击穿、雪崩
一、缓存穿透概念:查询一个缓存不存在的数据、导致每次请求都要落到数据库层去查询,这样就失去缓存层保护数据库层的本意。原因:自身业务代码或者数据出现问题。一些恶意攻击、 爬虫等造成大量空命中。解决:1、缓存空对象:将空的也放进redis中缓存。2、BloomFilter二、缓存雪崩概念:通常是互联网场景下、大并发导致redis宕掉(通常是超过了10万+,如常见的秒杀、促销活动)。...
2020-05-06 11:19:00
136
原创 优雅处理API统一返回
概述:API:application program-interface 应用编程接口。在web应用中常见的是前端开发工程师与后端开发工程师沟通的桥梁,是重要的规范文档。良好的API可以提高前后端协调的效率。如何设计良好的API:1.命名风格统一如列表相关接口统一用ListXXXXX,获取详情接口getXXX,删除delXXX2.返回格式统一以返回json 格式为例:{ #...
2020-05-06 10:44:56
637
转载 Redis面试专题
https://mp.weixin.qq.com/s?__biz=MzUzMTA2NTU2Ng==&mid=2247489218&idx=1&sn=257c50dcbe33d73b6851c905ab3db47b&key=c4b88884b2a4ca588b583ae73bddf43f737f384accbc589fd1e74eda7655f95cb9c070845...
2020-03-25 19:20:42
174
原创 JVM相关概念总结
目录1.jvm内存结构2.对象分配规则3、解释内存中的栈(stack)、堆(heap)和静态区(static area)的用法4、Perm Space中保存什么数据?会引起OutOfMemory吗?5、什么是类的加载6、如何⾃定义⼀个类加载器?你使⽤过哪些或者你在什么场景下需要⼀个⾃ 定义的类加载器吗?7、描述一下JVM加载class文件的原理机制?8、Java...
2020-03-25 19:15:41
678
1
转载 Hashmap的结构
https://blog.youkuaiyun.com/lovezhaohaimig/article/details/86595113
2020-03-23 16:59:03
159
原创 面向对象设计原则
单一职责:1.一个类的功能只描述该类本身,若做了无相关的事则违背了单一职责原则public class SysUser extends BaseEntity{ private Long userId; private String loginName; private String userName; private String email;...
2020-03-23 09:46:40
172
转载 JVM内存分配担保机制
JVM内存分配担保机制https://cloud.tencent.com/developer/article/1082730
2020-03-20 16:50:27
320
转载 OOM分析与常见OOM 类型
1)什么是OOM?OOM,全称“Out Of Memory”,翻译成中文就是“内存用完了”,来源于java.lang.OutOfMemoryError。看下关于的官方说明:Thrown when the Java Virtual Machine cannot allocate an object because it is out of memory, and no more memory c...
2020-03-19 16:02:44
1768
一线互联网面题(某宝).docx
2020-03-25
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人