02 2021 档案

摘要:Kafka是高吞吐低延迟的高并发、高性能的消息中间件,在大数据领域有极为广泛的运用。配置良好的Kafka集群甚至可以做到每秒几十万、上百万的超高并发写入。 那么Kafka到底是如何做到这么高的吞吐量和性能的呢?这篇文章我们来一点一点说一下。 1、页缓存技术 + 磁盘顺序写 首先Kafka每次接收到数 阅读全文
posted @ 2021-02-26 16:02 姚春辉 阅读(556) 评论(0) 推荐(0)
摘要:首先简单说下先偏向锁、轻量级锁、重量级锁三者各自的应用场景: 偏向锁:只有一个线程进入临界区; 轻量级锁:多个线程交替进入临界区; 重量级锁:多个线程同时进入临界区。 锁膨胀过程: 上图跟下面这个解析基本相同: 偏向所锁、轻量级锁都是乐观锁,重量级锁是悲观锁。一个对象刚开始实例化的时候,没有任何线程 阅读全文
posted @ 2021-02-25 18:12 姚春辉 阅读(216) 评论(0) 推荐(0)
摘要:一、ArrayList的数据结构 ArrayList的底层数据结构就是一个数组,数组元素的类型为Object类型,对ArrayList的所有操作底层都是基于数组的。 二、ArrayList的线程安全性 对ArrayList进行添加元素的操作的时候是分两个步骤进行的,即第一步先在object[size 阅读全文
posted @ 2021-02-25 14:28 姚春辉 阅读(1820) 评论(0) 推荐(0)
摘要:两者区别: 1.首先synchronized是java内置关键字,在jvm层面,Lock是个java类; 2.synchronized无法判断是否获取锁的状态,Lock可以判断是否获取到锁; 3.synchronized会自动释放锁(a 线程执行完同步代码会释放锁 ;b 线程执行过程中发生异常会释放 阅读全文
posted @ 2021-02-25 14:26 姚春辉 阅读(214) 评论(0) 推荐(0)
摘要:1. volatile简介 在上一篇文章中我们深入理解了java关键字,我们知道在java中还有一大神器就是关键volatile,可以说是和synchronized各领风骚,其中奥妙,我们来共同探讨下。 通过上一篇的文章我们了解到synchronized是阻塞式同步,在线程竞争激烈的情况下会升级为重 阅读全文
posted @ 2021-02-25 14:06 姚春辉 阅读(217) 评论(0) 推荐(0)
摘要:Redis 集群模式的工作原理能说一下么?在集群模式下,Redis 的 key 是如何寻址的?分布式寻址都有哪些算法?了解一致性 hash 算法吗? 面试官心理分析 在前几年,Redis 如果要搞几个节点,每个节点存储一部分的数据,得借助一些中间件来实现,比如说有 codis ,或者 twempro 阅读全文
posted @ 2021-02-24 16:20 姚春辉 阅读(488) 评论(0) 推荐(0)
摘要:Redis 的持久化有哪几种方式?不同的持久化机制都有什么优缺点?持久化机制具体底层是如何实现的? 面试官心理分析 Redis 如果仅仅只是将数据缓存在内存里面,如果 Redis 宕机了再重启,内存里的数据就全部都弄丢了啊。你必须得用 Redis 的持久化机制,将数据写入内存的同时,异步的慢慢的将数 阅读全文
posted @ 2021-02-23 17:20 姚春辉 阅读(224) 评论(0) 推荐(0)
摘要:Redis 主从架构 单机的 Redis,能够承载的 QPS 大概就在上万到几万不等。对于缓存来说,一般都是用来支撑读高并发的。因此架构做成主从(master-slave)架构,一主多从,主负责写,并且将数据复制到其它的 slave 节点,从节点负责读。所有的读请求全部走从节点。这样也可以很轻松实现 阅读全文
posted @ 2021-02-23 14:55 姚春辉 阅读(150) 评论(0) 推荐(0)
摘要:如何保证 redis 的高并发和高可用?redis 的主从复制原理能介绍一下么?redis 的哨兵原理能介绍一下么? 面试官心理分析 其实问这个问题,主要是考考你,redis 单机能承载多高并发?如果单机扛不住如何扩容扛更多的并发?redis 会不会挂?既然 redis 会挂那怎么保证 redis 阅读全文
posted @ 2021-02-23 14:20 姚春辉 阅读(149) 评论(0) 推荐(0)
摘要:Redis 的过期策略都有哪些?内存淘汰机制都有哪些?手写一下 LRU 代码实现? 面试官心理分析 如果你连这个问题都不知道,上来就懵了,回答不出来,那线上你写代码的时候,想当然的认为写进 Redis 的数据就一定会存在,后面导致系统各种 bug,谁来负责? 常见的有两个问题: 往 Redis 写入 阅读全文
posted @ 2021-02-23 10:20 姚春辉 阅读(83) 评论(0) 推荐(0)
摘要:Redis 都有哪些数据类型?分别在哪些场景下使用比较合适? 面试官心理分析 除非是面试官感觉看你简历,是工作 3 年以内的比较初级的同学,可能对技术没有很深入的研究,面试官才会问这类问题。否则,在宝贵的面试时间里,面试官实在不想多问。 其实问这个问题,主要有两个原因: 看看你到底有没有全面的了解 阅读全文
posted @ 2021-02-23 10:04 姚春辉 阅读(216) 评论(0) 推荐(0)
摘要:Redis 和 Memcached 有什么区别?Redis 的线程模型是什么?为什么 Redis 单线程却能支撑高并发? 面试官心理分析 这个是问 Redis 的时候,最基本的问题吧,Redis 最基本的一个内部原理和特点,就是 Redis 实际上是个单线程工作模型,你要是这个都不知道,那后面玩儿 阅读全文
posted @ 2021-02-23 09:33 姚春辉 阅读(124) 评论(0) 推荐(0)
摘要:项目中缓存是如何使用的? 这个,需要结合自己项目的业务来。 为什么要用缓存? 用缓存,主要有两个用途:高性能、高并发。 高性能 假设这么个场景,你有个操作,一个请求过来,吭哧吭哧你各种乱七八糟操作 mysql,半天查出来一个结果,耗时 600ms。但是这个结果可能接下来几个小时都不会变了,或者变了也 阅读全文
posted @ 2021-02-22 19:43 姚春辉 阅读(724) 评论(0) 推荐(0)
摘要:EsClient.java public class EsClient { /** * 用集群名字,集群节点地址构建es client * 保证单例,不要new 多个client */ public TransportClient client; /** * 批量处理客户端 */ public Bu 阅读全文
posted @ 2021-02-22 18:00 姚春辉 阅读(320) 评论(0) 推荐(0)
摘要:ES 在数据量很大的情况下(数十亿级别)如何提高查询效率啊? 面试官心理分析 这个问题是肯定要问的,说白了,就是看你有没有实际干过 es,因为啥?其实 es 性能并没有你想象中那么好的。很多时候数据量大了,特别是有几亿条数据的时候,可能你会懵逼的发现,跑个搜索怎么一下 5~10s ,坑爹了。第一次搜 阅读全文
posted @ 2021-02-22 15:43 姚春辉 阅读(698) 评论(0) 推荐(0)
摘要:ES 写入数据的工作原理是什么啊?ES 查询数据的工作原理是什么啊?底层的 Lucene 介绍一下呗?倒排索引了解吗? 面试官心理分析 问这个,其实面试官就是要看看你了解不了解 es 的一些基本原理,因为用 es 无非就是写入数据,搜索数据。你要是不明白你发起一个写入和搜索请求的时候,es 在干什么 阅读全文
posted @ 2021-02-22 14:13 姚春辉 阅读(146) 评论(0) 推荐(0)
摘要:面试官心理分析 在搜索这块,lucene 是最流行的搜索库。几年前业内一般都问,你了解 lucene 吗?你知道倒排索引的原理吗?现在早已经 out 了,因为现在很多项目都是直接用基于 lucene 的分布式搜索引擎—— ElasticSearch,简称为 ES。 而现在分布式搜索基本已经成为大部分 阅读全文
posted @ 2021-02-22 14:11 姚春辉 阅读(185) 评论(0) 推荐(0)
摘要:如果让你写一个消息队列,该如何进行架构设计?说一下你的思路。 面试官心理分析 其实聊到这个问题,一般面试官要考察两块: 你有没有对某一个消息队列做过较为深入的原理的了解,或者从整体了解把握住一个消息队列的架构原理。 看看你的设计能力,给你一个常见的系统,就是消息队列系统,看看你能不能从全局把握一下整 阅读全文
posted @ 2021-02-22 11:23 姚春辉 阅读(190) 评论(0) 推荐(0)
摘要:面试题 如何解决消息队列的延时以及过期失效问题?消息队列满了以后该怎么处理?有几百万消息持续积压几小时,说说怎么解决? 面试官心理分析 你看这问法,其实本质针对的场景,都是说,可能你的消费端出了问题,不消费了;或者消费的速度极其慢。接着就坑爹了,可能你的消息队列集群的磁盘都快写满了,都没人消费,这个 阅读全文
posted @ 2021-02-22 10:11 姚春辉 阅读(524) 评论(0) 推荐(0)
摘要:面试官心理分析 其实这个也是用 MQ 的时候必问的话题,第一看看你了不了解顺序这个事儿?第二看看你有没有办法保证消息是有顺序的?这是生产系统中常见的问题。 面试题剖析 我举个例子,我们以前做过一个 mysql binlog 同步的系统,压力还是非常大的,日同步数据要达到上亿,就是说数据从一个 mys 阅读全文
posted @ 2021-02-20 16:49 姚春辉 阅读(290) 评论(0) 推荐(0)
摘要:1) 什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。程序员可以通过它进行多处理器编程,你可以使用多线程对 运算密集型任务提速。比如,如果一个线程完成一个任务要100毫秒,那么用十个线程完成改任务只需10毫秒。Java在语言层面对多线程提供了卓越的 阅读全文
posted @ 2021-02-19 14:45 姚春辉 阅读(101) 评论(0) 推荐(0)
摘要:http://c.biancheng.net/view/1393.html 阅读全文
posted @ 2021-02-19 14:28 姚春辉 阅读(53) 评论(0) 推荐(0)
摘要:https://blog.csdn.net/hanchao5272/category_9272628.html https://www.liaoxuefeng.com/wiki/1252599548343744/1306581182447650 阅读全文
posted @ 2021-02-19 14:27 姚春辉 阅读(47) 评论(0) 推荐(0)
摘要:https://jspang.com/ 阅读全文
posted @ 2021-02-19 14:26 姚春辉 阅读(137) 评论(0) 推荐(0)
摘要:https://blog.csdn.net/hz_940611/category_9440075.html 领域模型的落地问题,研究了github上几个开源案例(https://github.com/ddd-by-examples/library.git,https://github.com/agi 阅读全文
posted @ 2021-02-19 14:24 姚春辉 阅读(733) 评论(0) 推荐(0)
摘要:1. 技术领域拓展 从视频相关领域,到CV工程及边缘侧软硬件一体化产品的开发,陆续完成了视频平台、暴力操作识别、智能安检机等系统、功能和产品的建设,把自己的技术领域从Java等扩展到音视频、算法及硬件相关领域,了解了SIP、RTP/RTCP、RTMP、RTST、WS_FLV、FLV、HLS、WebR 阅读全文
posted @ 2021-02-19 10:00 姚春辉 阅读(390) 评论(0) 推荐(0)
摘要:面试官心理分析 这个是肯定的,用 MQ 有个基本原则,就是数据不能多一条,也不能少一条,不能多,就是前面说的重复消费和幂等性问题。不能少,就是说这数据别搞丢了。那这个问题你必须得考虑一下。 如果说你这个是用 MQ 来传递非常核心的消息,比如说计费、扣费的一些消息,那必须确保这个 MQ 传递过程中绝对 阅读全文
posted @ 2021-02-18 17:45 姚春辉 阅读(118) 评论(0) 推荐(0)
摘要:面试官心理分析 其实这是很常见的一个问题,这俩问题基本可以连起来问。既然是消费消息,那肯定要考虑会不会重复消费?能不能避免重复消费?或者重复消费了也别造成系统异常可以吗?这个是 MQ 领域的基本问题,其实本质上还是问你使用消息队列如何保证幂等性,这个是你架构里要考虑的一个问题。 面试题剖析 回答这个 阅读全文
posted @ 2021-02-18 16:05 姚春辉 阅读(184) 评论(0) 推荐(0)
摘要:如果有人问到你 MQ 的知识,高可用是必问的。上一讲提到,MQ 会导致系统可用性降低。所以只要你用了 MQ,接下来问的一些要点肯定就是围绕着 MQ 的那些缺点怎么来解决了。 要是你傻乎乎的就干用了一个 MQ,各种问题从来没考虑过,那你就杯具了,面试官对你的感觉就是,只会简单使用一些技术,没任何思考, 阅读全文
posted @ 2021-02-18 14:17 姚春辉 阅读(146) 评论(0) 推荐(0)
摘要:其实就是问问你消息队列都有哪些使用场景,然后你项目里具体是什么场景,说说你在这个场景里用消息队列是什么? 面试官问你这个问题,期望的一个回答是说,你们公司有个什么业务场景,这个业务场景有个什么技术挑战,如果不用 MQ 可能会很麻烦,但是你现在用了 MQ 之后带给了你很多的好处。 先说一下消息队列常见 阅读全文
posted @ 2021-02-09 17:43 姚春辉 阅读(94) 评论(0) 推荐(0)
摘要:我的理解:2PC、3PC还有TCC都蛮相似的。3PC大致是把2PC的第一阶段拆分成了两个阶段,而TCC我感觉是把2PC的第二阶段拆分成了两个阶段。 一、概念 1、概念 TCC又称补偿事务。其核心思想是:"针对每个操作都要注册一个与其对应的确认和补偿(撤销操作)"。它分为三个操作: 1、Try阶段:主 阅读全文
posted @ 2021-02-09 17:41 姚春辉 阅读(389) 评论(0) 推荐(0)
摘要:分布式事物基本理论:基本遵循CPA理论,采用柔性事物特征,软状态或者最终一致性特点保证分布式事物一致性问题。 分布式事物常见解决方案: 2PC两段提交协议 3PC三段提交协议(弥补两端提交协议缺点) TCC或者GTS(阿里) 消息中间件最终一致性 使用LCN解决分布式事物,理念“LCN并不生产事务, 阅读全文
posted @ 2021-02-09 14:53 姚春辉 阅读(544) 评论(0) 推荐(0)
摘要:简述 什么时候没用 1.有or必全有索引;2.复合索引未用左列字段;3.like以%开头;4.需要类型转换;5.where中索引列有运算;6.where中索引列使用了函数;7.如果mysql觉得全表扫描更快时(数据少); 什么时没必要用 1.唯一性差;2.频繁更新的字段不用(更新索引消耗);3.wh 阅读全文
posted @ 2021-02-09 11:12 姚春辉 阅读(2700) 评论(0) 推荐(0)
摘要:创建表 create table test( a int , b int, c int, d int, key index_abc(a,b,c) )engine=InnoDB default charset=utf8; 插入 10000 条数据 DROP PROCEDURE IF EXISTS pr 阅读全文
posted @ 2021-02-09 10:57 姚春辉 阅读(561) 评论(0) 推荐(0)
摘要:事务定义及四大特性 事务是什么? 就是用户定义的一系列数据库操作,这些操作可以视为一个完成的逻辑处理工作单元,要么全部执行,要么全部不执行,是不可分割的工作单元。 事务的四大特性(简称ACID): 原子性(Atomicity):一个事务是一个不可分割的工作单位,事务中包括的操作要么都做,要么都不做。 阅读全文
posted @ 2021-02-07 16:45 姚春辉 阅读(213) 评论(0) 推荐(0)
摘要:引言 好久没写文章了,今天回来重操旧业。毕竟现在对后端开发的要求越来越高,大家要做好各种准备。因此,大家有可能遇到如下问题 为什么Mysql中Innodb的索引结构采取B+树? 回答这个问题时,给自己留一条后路,不要把B树喷的一文不值。因为网上有些答案是说,B树不适合做文件存储系统的索引结构。如果按 阅读全文
posted @ 2021-02-07 14:33 姚春辉 阅读(136) 评论(0) 推荐(0)
摘要:一天,朱斯参加了一场code Review研讨会。会上的一群人正在讨论着如何对祖传代码进行变更,大家你一言,我一语,场面十分热闹! 突然,只见人群中的一个人满面愁容,说道:"昨天在项目中看到下面这样一段代码,分支太多了!维护起来很烦啊!" if(day == "周一"){ System.out.pr 阅读全文
posted @ 2021-02-07 11:06 姚春辉 阅读(358) 评论(0) 推荐(0)
摘要:引言 讲了几天的数据库系列的文章,大家一定看烦了,其实还没讲完。。。(以下省略一万字)。今天我们换换口味,来写redis方面的内容,谈谈热key问题如何解决。其实热key问题说来也很简单,就是瞬间有几十万的请求去访问redis上某个固定的key,从而压垮缓存服务的情情况。其实生活中也是有不少这样的例 阅读全文
posted @ 2021-02-07 10:36 姚春辉 阅读(318) 评论(0) 推荐(0)
摘要:导读:在 Redis 中,热key指的是那些在一段时间内访问频次比较高的键值,具体到业务上,商品的限时抢购、瞬时的新闻热点或某个全局性的资源,都极有可能产生热点key。如何应对热点Key也是解决高并发的必备技能,本文作者条分缕析为你解答这个问题。 背景 在 Redis 中,热 key 指的是那些在一 阅读全文
posted @ 2021-02-05 18:02 姚春辉 阅读(718) 评论(0) 推荐(0)
摘要:技术选型理由 Etcd Zookeeper 和Etcd 都是业界优秀的分布式协调系统,解决了分布式系统协调和元数据存储。etcd 参考了 ZooKeeper 的设计和实现经验,并从 Zookeeper 中汲取的经验教训用于优化自身架构,从而帮助其支持 Kubernetes 等大型系统。 解决服务发现 阅读全文
posted @ 2021-02-05 17:04 姚春辉 阅读(1890) 评论(0) 推荐(0)
摘要:最新版本支持热点读的自动发现并触发客户端自动缓存,可有效保护服务端不被热点打穿,大幅提升缓存整体可用性,目前已经在线上稳定运行半年时间,欢迎大家使用。 热key的问题 秒杀、促销活动或突发的热点事件可能导致瞬间大量的请求去访问某个key。如此大的压力打到一个实例上,会导致该实例CPU飙升,响应变慢, 阅读全文
posted @ 2021-02-05 10:12 姚春辉 阅读(371) 评论(1) 推荐(0)
摘要:一.HashMap的内部结构(线程不安全,基于jdk1.7): hashmap是无序的,因为每次根据 key 的 hashcode 映射到 Entry 数组上,所以遍历出来的顺序并不是写入的顺序 HashMap 底层是基于数组和链表实现的,如图所示,其中两个重要的参数:容量和负载因子;容量的默认大小 阅读全文
posted @ 2021-02-03 20:30 姚春辉 阅读(454) 评论(0) 推荐(0)
摘要:原理参考:https://blog.csdn.net/striveb/article/details/84657326 总结: 为什么当桶中键值对数量大于8才转换成红黑树,数量小于6才转换成链表? 参考:https://blog.csdn.net/xingfei_work/article/detai 阅读全文
posted @ 2021-02-03 15:56 姚春辉 阅读(796) 评论(0) 推荐(0)
摘要:二叉查找树 二叉查找树,也称有序二叉树(ordered binary tree),或已排序二叉树(sorted binary tree),是指一棵空树或者具有下列性质的二叉树: 若任意节点的左子树不空,则左子树上所有结点的值均小于它的根结点的值;若任意节点的右子树不空,则右子树上所有结点的值均大于它 阅读全文
posted @ 2021-02-03 15:53 姚春辉 阅读(1993) 评论(0) 推荐(0)
摘要:当在10亿数据进行不到30次比较就能查找到目标时,不禁感叹编程之魅力!人类之伟大呀! —— 学红黑树有感。 阅读本文你需具备知识点: 二叉查找树 完美平衡二叉树 红黑树也是二叉查找树,我们知道,二叉查找树这一数据结构并不难,而红黑树之所以难是难在它是自平衡的二叉查找树,在进行插入和删除等可能会破坏树 阅读全文
posted @ 2021-02-03 10:33 姚春辉 阅读(214) 评论(0) 推荐(0)
摘要:近期正在参与的项目采用了前后端分离方式部署,恰巧遇到跨域问题。下面我对这个问题出现的原因及解决办法进行总结一下,希望大家拍砖。 问题原因 跨域出现的原因是因为前后端部署在非同域后,浏览器进行了安全限制。 例如: 前端应用:http://frontend.local/index.html 后端应用:h 阅读全文
posted @ 2021-02-03 10:04 姚春辉 阅读(708) 评论(0) 推荐(0)
摘要:B树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right); 2.所有结点存储一个关键字; 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树; 如: B树的搜索,从根结点开始,如果查询的关键字与结点的关键字相等,那么就命中; 否则,如果查询关键字比结点 阅读全文
posted @ 2021-02-02 16:19 姚春辉 阅读(4125) 评论(0) 推荐(0)