自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

littleAusna的博客

记录一些点滴积累的技术问题

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

原创 一些我推荐的学习资料网站

几个开源的git项目1.CSNote :Leetcode 题解、后端面试、Java 面试、春招、秋招、操作系统、计算机网络、系统设计,一名大佬整理的非常全的基础资料,非常值得查漏补缺和学习基础知识。https://github.com/CyC2018/CS-Notes2.advanced-java:互联网 Java 工程师进阶知识完全扫盲,涵盖了一些缓存分库分表,可用框架以及队列,涵盖高并发...

2019-05-25 21:14:47 1795

原创 朋友的大厂面经

SlagCake的鹅厂之旅1.了解哈希嘛?说说哈希在密码学中的应用。2.哈希什么情况下会发生碰撞,怎么样选取哈希的方式能让碰撞几率降低。3.说说平时用的排序算法的时间复杂度和空间复杂度。4.写一个快排给我看。5.进程间通信方式都有哪些?各自的优缺点是什么?6.平时都写过用到这些方式的代码嘛?7.进程有几种状态,怎么转换的。8.进程什么情况下会死锁,怎么避免。9.说说TCP,UDP...

2019-03-16 23:51:26 1928

转载 git commit 错误怎么办~

修复了我错误commit的问题,转载记录一下~划重点,使用git reset –hard(此参数有毒)之前一定要git commit 或者 git add 或者 git stash或者。。。假如你这些操作都没有执行的话,博主还有一个找了多年的方法能挽救。。。那是一个风雨交加的夜晚,博主头顶十米长的避雷针,一声惊雷下来,哇咔咔!博主穿越到还没rest之前的时空!!哈哈哈哈天无绝人之路啊!!!...

2019-06-21 15:01:06 8467 1

原创 如何保证 Redis 高并发、高可用?Redis 的主从复制原理能介绍一下么?Redis 的哨兵原理能介绍一下么?

本系列内容转载自git项目advancejava面试题如何保证 redis 的高并发和高可用?redis 的主从复制原理能介绍一下么?redis 的哨兵原理能介绍一下么?面试题剖析如果你用 redis 缓存技术的话,肯定要考虑如何用 redis 来加多台机器,保证 redis 是高并发的,还有就是如何让 redis 保证自己不是挂掉以后就直接死掉了,即 redis 高可用。由于此节内容较...

2019-05-28 22:34:44 575

原创 Redis 的过期策略都有哪些?

本系列内容转载自git项目advancejava面试题redis 的过期策略都有哪些?内存淘汰机制都有哪些?手写一下 LRU 代码实现?常见的有两个问题:• 往 redis 写入的数据怎么没了?可能有同学会遇到,在生产环境的 redis 经常会丢掉一些数据,写进去了,过一会儿可能就没了。我的天,同学,你问这个问题就说明 redis 你就没用对啊。redis 是缓存,你给当存储了是吧?啥...

2019-05-28 22:32:57 19271 2

原创 Redis 都有哪些数据类型?分别在哪些场景下使用比较合适?

本系列内容转载自git项目advancejavaredis 主要有以下几种数据类型:• string• hash• list• set• sorted setstring这是最简单的类型,就是普通的 set 和 get,做简单的 KV 缓存。set college szuhash这个是类似 map 的一种结构,这个一般就是可以将结构化的数据,比如一个对象(前提是这个对象没嵌...

2019-05-28 22:30:24 1309

原创 Redis 和 Memcached 有什么区别?Redis 的线程模型是什么?为什么单线程的 Redis 比多线程的 Memcached 效率要高得多?

本系列内容转载自git项目advancejavaredis 和 memcached 有啥区别?redis 支持复杂的数据结构redis 相比 memcached 来说,拥有更多的数据结构,能支持更丰富的数据操作。如果需要缓存能够支持更复杂的结构和操作, redis 会是不错的选择。redis 原生支持集群模式在 redis3.x 版本中,便能支持 cluster 模式,而 memcach...

2019-05-28 22:23:22 1176

原创 项目中缓存是如何使用的?缓存如果使用不当会造成什么后果?

本系列内容转载自git项目advancejava面试题剖析项目中缓存是如何使用的?这个,需要结合自己项目的业务来。为什么要用缓存?用缓存,主要有两个用途:高性能、高并发。高性能假设这么个场景,你有个操作,一个请求过来,吭哧吭哧你各种乱七八糟操作 mysql,半天查出来一个结果,耗时 600ms。但是这个结果可能接下来几个小时都不会变了,或者变了也可以不用立即反馈给用户。那么此时咋办?...

2019-05-28 22:18:43 1292

原创 如果让你写一个消息队列,该如何进行架构设计啊?

本系列内容转载自git项目advancejava面试题剖析其实回答这类问题,说白了,不求你看过那技术的源码,起码你要大概知道那个技术的基本原理、核心组成部分、基本架构构成,然后参照一些开源的技术把一个系统设计出来的思路说一下就好。比如说这个消息队列系统,我们从以下几个角度来考虑一下:• 首先这个 mq 得支持可伸缩性吧,就是需要的时候快速扩容,就可以增加吞吐量和容量设计个分布式的系统呗,...

2019-05-28 22:14:55 611

原创 如何解决消息队列的延时以及过期失效问题?消息队列满了以后该怎么处理?有几百万消息持续积压几小时,说说怎么解决?

本系列内容转载自git项目advancejava面试题剖析关于这个事儿,我们一个一个来梳理吧,先假设一个场景,我们现在消费端出故障了,然后大量消息在 mq 里积压,现在出事故了,慌了。大量消息在 mq 里积压了几个小时了还没解决几千万条数据在 MQ 里积压了七八个小时,从下午 4 点多,积压到了晚上 11 点多。这个是我们真实遇到过的一个场景,确实是线上故障了,这个时候要不然就是修复 co...

2019-05-28 21:58:32 1561

原创 如何保证消息的顺序性?

本系列内容转载自git项目advancejava面试题剖析我举个例子,我们以前做过一个 mysql binlog 同步的系统,压力还是非常大的,日同步数据要达到上亿,就是说数据从一个 mysql 库原封不动地同步到另一个 mysql 库里面去(mysql -> mysql)。常见的一点在于说比如大数据 team,就需要同步一个 mysql 库过来,对公司的业务系统的数据做各种复杂的操作。...

2019-05-28 21:47:24 894

原创 如何保证消息的可靠性传输?(如何处理消息丢失的问题)

本系列内容转载自git项目advancejava面试题剖析数据的丢失问题,可能出现在生产者、MQ、消费者中,咱们从 RabbitMQ 和 Kafka 分别来分析一下吧。RabbitMQ生产者弄丢了数据生产者将数据发送到 RabbitMQ 的时候,可能数据就在半路给搞丢了,因为网络问题啥的,都有可能。此时可以选择用 RabbitMQ 提供的事务功能,就是生产者发送数据之前开启 Rabb...

2019-05-28 21:43:35 976

原创 如何保证消息不被重复消费?(如何保证消息消费的幂等性)

本系列内容转载自git项目advancejava面试题剖析回答这个问题,首先你别听到重复消息这个事儿,就一无所知吧,你先大概说一说可能会有哪些重复消费的问题。首先,比如 RabbitMQ、RocketMQ、Kafka,都有可能会出现消息重复消费的问题,正常。因为这问题通常不是 MQ 自己保证的,是由我们开发来保证的。挑一个 Kafka 来举个例子,说说怎么重复消费吧。Kafka 实际上有个...

2019-05-28 21:34:34 991

原创 如何保证消息队列的高可用?

面试题剖析这个问题这么问是很好的,因为不能问你 Kafka 的高可用性怎么保证?ActiveMQ 的高可用性怎么保证?一个面试官要是这么问就显得很没水平,人家可能用的就是 RabbitMQ,没用过 Kafka,你上来问人家 Kafka 干什么?这不是摆明了刁难人么。所以有水平的面试官,问的是 MQ 的高可用性怎么保证?这样就是你用过哪个 MQ,你就说说你对那个 MQ 的高可用性的理解。Rab...

2019-05-28 17:54:57 320

原创 为什么使用消息队列?消息队列有什么优点和缺点?Kafka、ActiveMQ、RabbitMQ、RocketMQ 都有什么优点和缺点?

本系列内容转载自git项目advancejava为什么使用消息队列其实就是问问你消息队列都有哪些使用场景,然后你项目里具体是什么场景,说说你在这个场景里用消息队列是什么?面试官问你这个问题,期望的一个回答是说,你们公司有个什么业务场景,这个业务场景有个什么技术挑战,如果不用 MQ 可能会很麻烦,但是你现在用了 MQ 之后带给了你很多的好处。先说一下消息队列常见的使用场景吧,其实场景有很多,...

2019-05-28 17:32:36 2887

原创 基于 timeout 机制为服务接口调用超时提供安全保护

本系列内容转载自git项目advancejavaTimeoutMilliseconds在 Hystrix 中,我们可以手动设置 timeout 时长,如果一个 command 运行时间超过了设定的时长,那么就被认为是 timeout,然后 Hystrix command 标识为 timeout,同时执行 fallback 降级逻辑。TimeoutMilliseconds 默认值是 1000,...

2019-05-28 11:28:50 535

原创 深入 Hystrix 断路器执行原理

本系列内容转载自git项目advancejavaRequestVolumeThresholdHystrixCommandProperties.Setter().withCircuitBreakerRequestVolumeThreshold(int)表示在滑动窗口中,至少有多少个请求,才可能触发断路。Hystrix 经过断路器的流量超过了一定的阈值,才有可能触发断路。比如说,要求在 10...

2019-05-28 11:11:20 860

原创 基于本地缓存的 fallback 降级机制

Hystrix 出现以下四种情况,都会去调用 fallback 降级机制:• 断路器处于打开的状态。• 资源池已满(线程池+队列 / 信号量)。• Hystrix 调用各种接口,或者访问外部依赖,比如 MySQL、Redis、Zookeeper、Kafka 等等,出现了任何异常的情况。• 访问外部依赖的时候,访问时间过长,报了 TimeoutException 异常。两种最经典的降级机制...

2019-05-28 10:32:39 956 1

原创 基于 request cache 请求缓存技术优化批量商品数据查询接口

本系列内容转载自git项目advancejavaHystrix command 执行时 8 大步骤第三步,就是检查 Request cache 是否有缓存。首先,有一个概念,叫做 Request Context 请求上下文,一般来说,在一个 web 应用中,如果我们用到了 Hystrix,我们会在一个 filter 里面,对每一个请求都施加一个请求上下文。就是说,每一次请求,就是一次请求上下文...

2019-05-28 10:23:58 1039

原创 深入 Hystrix 执行时内部原理

Hystrix 最基本的支持高可用的技术:资源隔离 + 限流。• 创建 command;• 执行这个 command;• 配置这个 command 对应的 group 和线程池。这里,我们要讲一下,你开始执行这个 command,调用了这个 command 的 execute() 方法之后,Hystrix 底层的执行流程和步骤以及原理是什么。在讲解这个流程的过程中,我会带出来 Hystr...

2019-05-28 09:58:17 1170

原创 Hystrix 隔离策略细粒度控制

本系列内容转载自git项目advancejavaHystrix 实现资源隔离,有两种策略:• 线程池隔离• 信号量隔离对资源隔离这一块东西,其实可以做一定细粒度的一些控制。execution.isolation.strategy指定了 HystrixCommand.run() 的资源隔离策略:THREAD or SEMAPHORE,一种基于线程池,一种基于信号量。// to use ...

2019-05-28 09:42:01 363

原创 Hystrix 信号量机制实现资源隔离

本系列内容转载自git项目advancejava信号量机制信号量的资源隔离只是起到一个开关的作用,比如,服务 A 的信号量大小为 10,那么就是说它同时只允许有 10 个 tomcat 线程来访问服务 A,其它的请求都会被拒绝,从而达到资源隔离和限流保护的作用。线程池与信号量区别线程池隔离技术,并不是说去控制类似 tomcat 这种 web 容器的线程。更加严格的意义上来说,Hystrix...

2019-05-28 09:26:34 2912

原创 Hystrix 线程池技术实现资源隔离

基于 Hystrix 线程池技术实现资源隔离上一讲提到,如果从 Nginx 开始,缓存都失效了,Nginx 会直接通过缓存服务调用商品服务获取最新商品数据(我们基于电商项目做个讨论),有可能出现调用延时而把缓存服务资源耗尽的情况。这里,我们就来说说,怎么通过 Hystrix 线程池技术实现资源隔离。资源隔离,就是说,你如果要把对某一个依赖服务的所有调用请求,全部隔离在同一份资源池内,不会去用其...

2019-05-28 09:23:49 499

原创 电商网站详情页系统架构

本系列内容转载自git项目advancejava小型电商网站的商品详情页系统架构小型电商网站的页面展示采用页面全量静态化的思想。数据库中存放了所有的商品信息,页面静态化系统,将数据填充进静态模板中,形成静态化页面,推入 Nginx 服务器。用户浏览网站页面时,取用一个已经静态化好的 html 页面,直接返回回去,不涉及任何的业务逻辑处理下面是页面模板的简单 Demo 。<html&...

2019-05-28 09:16:59 863

原创 用 Hystrix 构建高可用服务架构

本系列内容转载自git项目advancejavaHystrix 是什么?在分布式系统中,每个服务都可能会调用很多其他服务,被调用的那些服务就是依赖服务,有的时候某些依赖服务出现故障也是很正常的。Hystrix 可以让我们在分布式系统中对服务间的调用进行控制,加入一些调用延迟或者依赖故障的容错机制。Hystrix 通过将依赖服务进行资源隔离,进而阻止某个依赖服务出现故障时在整个系统所有的依赖...

2019-05-28 09:12:48 139

原创 集群部署时的分布式 Session 如何实现?

本博客转自git项目advancejava面试题剖析session 是啥?浏览器有个 cookie,在一段时间内这个 cookie 都存在,然后每次发请求过来都带上一个特殊的 jsessionid cookie,就根据这个东西,在服务端可以维护一个对应的 session 域,里面可以放点数据。一般只要你没关掉浏览器,cookie 还在,那么对应的那个 session 就在,但是如果 cook...

2019-05-27 21:20:45 275

原创 分布式事务了解吗?你们如何解决分布式事务问题的?TCC 如果出现网络连不通怎么办?XA 的一致性如何保证?

本博客转自git项目advancejava分布式事务的实现主要有以下 5 种方案:• XA 方案• TCC 方案• 本地消息表• 可靠消息最终一致性方案• 最大努力通知方案两阶段提交方案/XA方案所谓的 XA 方案,即:两阶段提交,有一个事务管理器的概念,负责协调多个数据库(资源管理器)的事务,事务管理器先问问各个数据库你准备好了吗?如果每个数据库都回复 ok,那么就正式提交事务,...

2019-05-27 21:17:33 515

原创 使用 Redis 如何设计分布式锁?使用 Zookeeper 来设计分布式锁可以吗?以上两种分布式锁的实现方式哪种效率比较高?

本博客转自git项目advancejavaredis 分布式锁官方叫做 RedLock 算法,是 redis 官方支持的分布式锁算法。这个分布式锁有 3 个重要的考量点:• 互斥(只能有一个客户端获取锁)• 不能死锁• 容错(只要大部分 redis 节点创建了这把锁就可以)redis 最普通的分布式锁第一个最普通的实现方式**,就是在 redis 里创建一个 key,这样就算加锁。...

2019-05-27 21:13:07 674

原创 Zookeeper 都有哪些应用场景?

本博客转自git项目advancejava大致来说,zookeeper 的使用场景如下,我就举几个简单的,大家能说几个就好了:• 分布式协调• 分布式锁• 元数据/配置信息管理• HA高可用性分布式协调这个其实是 zookeeper 很经典的一个用法,简单来说,就好比,你 A 系统发送个请求到 mq,然后 B 系统消息消费之后处理了。那 A 系统如何知道 B 系统的处理结果?用 zo...

2019-05-27 21:09:36 1375

原创 如何自己设计一个类似 Dubbo 的 RPC 框架?

本博客转自git项目advancejava面试题剖析其实问到你这问题,你起码不能认怂,因为是知识的扫盲,那我不可能给你深入讲解什么 kafka 源码剖析,dubbo 源码剖析,何况我就算讲了,你要真的消化理解和吸收,起码个把月以后了。所以我给大家一个建议,遇到这类问题,起码从你了解的类似框架的原理入手,自己说说参照 dubbo 的原理,你来设计一下,举个例子,dubbo 不是有那么多分层么?...

2019-05-27 21:04:56 270

原创 分布式服务接口请求的顺序性如何保证?

面试题剖析首先,一般来说,个人建议是,你们从业务逻辑上设计的这个系统最好是不需要这种顺序性的保证,因为一旦引入顺序性保障,比如使用分布式锁,会导致系统复杂度上升,而且会带来效率低下,热点数据压力过大等问题。下面我给个我们用过的方案吧,简单来说,首先你得用 dubbo 的一致性 hash 负载均衡策略,将比如某一个订单 id 对应的请求都给分发到某个机器上去,接着就是在那个机器上因为可能还是多线...

2019-05-27 21:03:26 346

原创 分布式服务接口的幂等性如何设计(比如不能重复扣款)?

本博客转自git项目advancejava面试官心理分析一个分布式系统中的某个接口,该如何保证幂等性?这个事儿其实是你做分布式系统的时候必须要考虑的一个生产环境的技术问题。啥意思呢?你看,假如你有个服务提供一个接口,结果这服务部署在了 5 台机器上,接着有个接口就是付款接口。然后人家用户在前端上操作的时候,不知道为啥,总之就是一个订单不小心发起了两次支付请求,然后这俩请求分散在了这个服务部署...

2019-05-27 21:01:41 312

原创 如何基于 Dubbo 进行服务治理、服务降级、失败重试以及超时重试?

本博客转自git项目advancejava服务治理1. 调用链路自动生成一个大型的分布式系统,或者说是用现在流行的微服务架构来说吧,分布式系统由大量的服务组成。那么这些服务之间互相是如何调用的?调用链路是啥?说实话,几乎到后面没人搞的清楚了,因为服务实在太多了,可能几百个甚至几千个服务。那就需要基于 dubbo 做的分布式系统中,对各个服务之间的调用自动记录下来,然后自动将各个服务之间的依...

2019-05-27 20:59:49 901

原创 Dubbo 的 spi 思想是什么?

本博客转自git项目advancejavaspi,简单来说,就是 service provider interface,说白了是什么意思呢,比如你有个接口,现在这个接口有 3 个实现类,那么在系统运行的时候对这个接口到底选择哪个实现类呢?这就需要 spi 了,需要根据指定的配置或者是默认的配置,去找到对应的实现类加载进来,然后用这个实现类的实例对象。举个栗子。你有一个接口A。A1/A2/A3...

2019-05-27 20:43:27 306

原创 Dubbo 负载均衡策略和集群容错策略都有哪些?动态代理策略呢?

dubbo 负载均衡策略random loadbalance默认情况下,dubbo 是 random load balance 随机调用实现负载均衡,可以对 provider 不同实例设置不同的权重,会按照权重来负载均衡,权重越大分配流量越高,一般就用这个默认的就可以了。roundrobin loadbalance这个的话默认就是均匀地将流量打到各个机器上去,但是如果各个机器的性能不一样,...

2019-05-27 20:38:13 145

原创 Dubbo 支持哪些序列化协议?说一下 Hessian 的数据结构?PB 知道吗?为什么 PB 的效率是最高的?

本博客转自git项目advancejava序列化,就是把数据结构或者是一些对象,转换为二进制串的过程,而反序列化是将在序列化过程中所生成的二进制串转换成数据结构或者对象的过程。dubbo 支持不同的通信协议• dubbo 协议默认就是走 dubbo 协议,单一长连接,进行的是 NIO 异步通信,基于 hessian 作为序列化协议。使用的场景是:传输数据量小(每次请求在 100kb 以内...

2019-05-27 20:35:05 977

原创 分布式服务框架

本博客转自git项目advancejavadubbo 工作原理• 第一层:service 层,接口层,给服务提供者和消费者来实现的• 第二层:config 层,配置层,主要是对 dubbo 进行各种配置的• 第三层:proxy 层,服务代理层,无论是 consumer 还是 provider,dubbo 都会给你生成代理,代理之间进行网络通信• 第四层:registry 层,服务注册层,...

2019-05-27 17:36:16 128

原创 系统拆分

本博客转自git项目advancejava为什么要将系统进行拆分?要是不拆分,一个大系统几十万行代码,20 个人维护一份代码,简直是悲剧啊。代码经常改着改着就冲突了,各种代码冲突和合并要处理,非常耗费时间;经常我改动了我的代码,你调用了我的,导致你的代码也得重新测试,麻烦的要死;然后每次发布都是几十万行代码的系统一起发布,大家得一起提心吊胆准备上线,几十万行代码的上线,可能每次上线都要做很多的...

2019-05-27 17:31:23 1208

原创 NIO和BIO

讲讲NIO传统的IO流是阻塞式的,会一直监听一个ServerSocket,在调用 read等方法时,他一直等到数据到来或者缓冲区已满时才返回,调用accept也是一直阻塞到有客户端连接才会返回,每个客户端接过来后,服务端都会启动一个线程去处理该客户端的请求。并且多线程处理多个连接,每个线程拥有自己的栈空间并且占用一些CPU时间,每个线程遇到外部未准备好的时候,都会阻塞掉。阻塞的结果就是会芾来大量...

2019-05-27 17:00:15 139

原创 异常

1、异常的分类在Java中,所有的异常都有一个共同的祖先java.lang包中的Throwable类。Throwable:有两个重要的子类:Exception (异常)和Error (错误),二者都是Java异常处理的重要子类,各自都包含大量子类。Error (错误):是程序无法处理的错误,表示运行应用程序中较严重问题。大多数错误与代码编写者执行的操作无关,而表示代码运行时jVM (Jav...

2019-05-27 15:45:21 113

空空如也

空空如也

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

TA关注的人

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