
分布式
文章平均质量分 88
xy29981
学习进阶技术,成就高薪
展开
-
实战:10 种实现延迟任务的方法,附代码!
顾明思议,我们把需要延迟执行的任务叫做延迟任务。延迟任务的使用场景有以下这些:红包 24 小时未被查收,需要延迟执退还业务;每个月账单日,需要给用户发送当月的对账单;订单下单之后 30 分钟后,用户如果没有付钱,系统需要自动取消订单。等事件都需要使用延迟任务。本文讲了延迟任务的使用场景,以及延迟任务的 10 种实现方式:手动无线循环;DelayQueue;Redis zset 数据判断的方式;Redis 键空间通知的方式;Netty 提供的 HashedWheelTimer 工具类;...原创 2022-08-04 14:26:23 · 535 阅读 · 1 评论 -
面试官:为什么数据库连接很消耗资源,资源都消耗在哪里?
本文主要想探究一下连接数据库的细节,尤其是在应用中要使用数据库来连接池,以免每次发送一次请求就重新建立一次连接。对于这个问题,答案都是一致的,建立数据库连接很耗时,但是这个耗时是都多少呢,又是分别在哪些方面产生的耗时呢?本文以连接数据库为例,因为数据库是开源的,其通信协议是公开的,所以我们能够详细分析建立连接的整个过程。首先先看一下连接数据库的代码,如下:然后通过「Wireshark」 分析整个连接的建立过程,如下:Wireshark抓包在上图中显示的连接过程中,可以看出的通信协议是基于传输协议的,而原创 2022-06-27 17:31:52 · 232 阅读 · 0 评论 -
4年工作经验,多线程间的5种通信方式都说不出来,你敢信?
问题一、使用 volatile 关键字二、使用 Object 类的 wait()/notify()三、使用JUC工具类 CountDownLatch四、使用 ReentrantLock 结合 Condition五、基本 LockSupport 实现线程间的阻塞和唤醒有两个线程,A 线程向一个集合里面依次添加元素“abc”字符串,一共添加十次,当添加到第五次的时候,希望 B 线程能够收到 A 线程的通知,然后 B 线程执行相关的业务操作。线程间通信的模型有两种:共享内存和消息传递,以下方式都是基本这两种模型来原创 2022-06-27 17:30:22 · 136 阅读 · 0 评论 -
OPPO面试整理,真正的八股文,狂虐面试官
最近有粉丝私信说被 oppo 的后端面试问麻了,所以今天给大家推荐一篇整理了 16 道 oppo 面试真题答案的文章。希望对大家有帮助哈,一起学习,一起进步。聊聊你印象最深刻的项目,或者做了什么优化。你项目提到分布式锁,你们是怎么使用分布式锁的?常见分布式事务解决方案你们的接口幂等是如何保证的?你们的 MySQL 架构是怎样的?常见的索引结构有?哈希表结构属于哪种场景?给你 ab,ac,abc 字段,你是如何加索引的?数据库隔离级别是否了解?你们的数据库默认隔离级别是?为什么选它?RR 隔离级别实现原理,它原创 2022-06-11 16:58:12 · 801 阅读 · 0 评论 -
面试官:大量请求 Redis 不存在的数据,从而打倒数据库,你有什么方案?
大家都知道,在计算机中,IO一直是一个瓶颈,很多框架以及技术甚至硬件都是为了降低IO操作而生,今天聊一聊过滤器,先说一个场景:我们业务后端涉及数据库,当请求消息查询某些信息时,可能先检查缓存中是否有相关信息,有的话返回,如果没有的话可能就要去数据库里面查询,这时候有一个问题,如果很多请求是在请求数据库根本不存在的数据,那么数据库就要频繁响应这种不必要的IO查询,如果再多一些,数据库大多数IO都在响应这种毫无意义的请求操作。那么如何将这些请求阻挡在外呢?过滤器由此诞生!布隆过滤器(Bloom Filter)大原创 2022-06-02 14:40:29 · 229 阅读 · 0 评论 -
Kafka 万亿级消息实践之资源组流量掉零故障排查分析
一、Kafka集群部署架构为了让读者能与小编在后续的问题分析中有更好的共鸣,小编先与各位读者朋友对齐一下我们 Kafka 集群的部署架构及服务接入Kafka集群的流程。为了避免超大集群我们按照业务维度将整个每天负责十万亿级消息的 Kafka 集群拆分成了多个 Kafka 集群。拆分粒度太粗会导致单一集群过大,容易由于流量突变、资源隔离、限速等原因导致集群稳定性和可用性受到影响,拆分粒度太细又会因为集群太多不易维护,集群内资源较少应对突发情况的抗风险能力较弱。由于 Kafka 数...原创 2022-05-27 17:53:10 · 142 阅读 · 0 评论 -
一线大厂面试:你知道SpringBoot+RabbitMQ 死信队列?
前言 环境准备配置 队列达到最大长度 消息 TTL 过期 拒绝消息 前言死信:无法被消费的消息,称为死信。如果死信一直留在队列中,会导致一直被消费,却从不消费成功。所以我们专门开辟了一个来存放死信的队列,叫死信队列(DLX,dead-letter-exchange)。死信的几种来源: 消息 TTL 过期(time to live,存活时间,可以用在限时支付消息) 队列达到最大长度(队列满了,无法路由到该队列) 消息被拒..原创 2022-05-27 13:48:44 · 200 阅读 · 0 评论 -
小米面试官:听你说精通注册中心,我们来聊 3 天 3 夜
对于注册中心,在写这篇文章前,我其实只对ETCD有比较深入的了解,但是对于Zookeeper和其它的注册中心了解甚少,甚至都没有考虑过ETCD和Zookeeper是否适合作为注册中心。经过近2周的学习,原来注册中心除了ETCD和Zookeeper,常用的还有Eureka、Nacos、Consul,下面我们就对这些常用的注册中心,初探它们的异同,便于后续技术选型。全文接近8千字,有点长,建议先收藏,再慢慢看,下面是文章目录:注册中心基本概念什么是注册中心?注册中心主要有三种角色:.原创 2022-05-27 11:49:15 · 325 阅读 · 0 评论 -
从5秒优化到1秒,系统飞起来了...
前言 优化背景和目标 通过压缩让耗时急剧减少 并行获取数据,响应飞快 缓存分类,进一步加速 MySQL 索引的优化 JVM 优化 其他优化 总结 前言性能优化,有时候看起来是一个比较虚的技术需求。除非代码慢的已经让人无法忍受,否则,很少有公司会有觉悟投入资源去做这些工作。即使你有了性能指标数据,也很难说服领导做一个由耗时 300ms 降低到 150ms 的改进,因为它没有业务价值。这很让人伤心,但这是悲催..原创 2022-05-27 11:38:07 · 369 阅读 · 0 评论 -
面试官:你来说说RocketMQ的消费的启动过程?
今天周五,来聊聊 RocketMQ 中一个关键的知识点:消费者的启动过程。多数消息队列中,消费者和 Broker 通信的方式有两种,PUSH 模式和 PULL 模式: PUSH 模式:Broker 主动把消息推送给订阅的消费者; PULL模式:消费者主动从 Broker 拉取消息。 注意,RocketMQ 并没有真正实现 PUSH 模式, RocketMQ 中的 PUSH 模式,本质上也是 PULL 模式,只是消费端封装了轮询过程,相当于开启一个定时线程不停地从 Broker 拉取消原创 2022-05-27 09:20:07 · 332 阅读 · 0 评论 -
大厂面试:ThreadLocal夺命11连问,你能过几问?
前言前一段时间,有同事使用ThreadLocal踩坑了,正好引起了我的兴趣。所以近期,我抽空把ThreadLocal的源码再研究了一下,越看越有意思,发现里面的东西还真不少。我把精华浓缩了一下,汇集成了下面11个问题,看看你能顶住第几个?1. 为什么要用ThreadLocal?并发编程是一项非常重要的技术,它让我们的程序变得更加高效。但在并发的场景中,如果有多个线程同时修改公共变量,可能会出现线程安全问题,即该变量最终结果可能出现异常。为了解决线程安全问题,JDK出现了很多技原创 2022-05-16 17:38:13 · 533 阅读 · 0 评论 -
几分钟处理完30亿个数据...牛叉大了
目录 场景说明 模拟数据 场景分析 读取数据 处理数据 遇到的问题 场景说明现有一个 10G 文件的数据,里面包含了 18-70 之间的整数,分别表示 18-70 岁的人群数量统计,假设年龄范围分布均匀,分别表示系统中所有用户的年龄数,找出重复次数最多的那个数,现有一台内存为 4G、2 核 CPU 的电脑,请写一个算法实现。23,31,42,19,60,30,36,........模拟数据Java 中...原创 2022-05-16 15:03:23 · 140 阅读 · 0 评论 -
京东白条技术架构进化分享,这篇总算是讲清楚了 ~
相信大家都听说过单体和我服务,那么,单体到微服务架构的数据是如何演进的呢?这是个有意思的话题。今天,我们一起来看看,希望大家都有收获和启发。京东白条的快速发展满足了当前人们日益增长的消费需求。在京东商城上用京东白条来支付,已经成为一大批用户的消费习惯,更是在某种意义上成为了京东对外的『标签』。而作为一家互联网金融消费平台,京东白条的后台技术团队更是不容忽视的存在。而其也正是支撑京东白条自 2014 年初上线伊始,至今服务数亿用户的最终根源所在。正是京东白条技术团队多年的努力,才造就了当前京东白条原创 2022-05-16 14:44:22 · 1058 阅读 · 0 评论 -
Kubernetes 架构核心点总结
一个目标:容器操作 两地三中心 四层服务发现 五种Pod共享资源 六个CNI常用插件 七层负载均衡 八种隔离维度 九个网络模型原则 十类IP地址 一个目标:容器操作;两地三中心;四层服务发现;五种Pod共享资源;六个CNI常用插件;七层负载均衡;八种隔离维度;九个网络模型原则;十类IP地址;百级产品线;千级物理机;万级容器;相如无亿,K8s有亿:亿级日服务人次。一个目标:容器操作Kubernetes(k8s)..原创 2022-05-14 13:55:34 · 116 阅读 · 0 评论 -
RocketMQ超全指南,写得也太好了
1.为什么要使用消息队列呢?消息队列主要有三大用途,我们拿一个电商系统的下单举例: 解耦:引入消息队列之前,下单完成之后,需要订单服务去调用库存服务减库存,调用营销服务加营销数据……引入消息队列之后,可以把订单完成的消息丢进队列里,下游服务自己去调用就行了,这样就完成了订单服务和其它服务的解耦合。 消息队列解耦 异步:订单支付之后,我们要扣减库存、增加积分、发送消息等等,这样一来这个链路就长了,链路一长,响应时间就变长了。引入消息队列,除了更新订单状态,其它的都可以异步去做,这转载 2022-05-13 13:20:25 · 1644 阅读 · 2 评论 -
分享2022最新字节大数据开发面经
1.MySQL 引擎是什么,常用的是哪个,知道原理吗常用的是 InnoDB。大部分情况下选择 InnoDB,除非需要用到某些InnoDB不具备的特性,并且没有其他办法可以替代,否则都应该优先选择 InnoDB 引擎。 MyISAM: 用途:访问的速度快,以 SELECT、INSERT 为主的应用 索引:B tree,FullText,R-tree 锁:表锁 事务:不支持事务 其他:不支持外键。每个 MyISAM 在磁盘上存储原创 2022-05-12 10:19:11 · 496 阅读 · 0 评论 -
大厂面试冲刺,Java“实战”问题三连,你碰到了哪个?
Java“实战”面试题1:如果用mybatis批量插入数据时需要返回主键,你是怎么做的? Java“实战”面试题2:在微服务中你是如何实现不同服务间session 共享的? Java“实战”面试题3:你了解分库分表么?分库分表一般出现在哪些场景下?面试题1:如果用mybatis批量插入数据时需要返回主键,你是怎么做的?需要在Mapper.xml的中标签中配置useGeneratedKeys和keyProperty两个属性,就可以在批量插入时返回主键。比如有个表t_user,里面有 us原创 2022-05-12 09:50:52 · 116 阅读 · 0 评论 -
面试官问:消息队列该怎么选择?Kafka、RocketMQ 、RabbitMQ 和 ActiveMQ
今天来聊消息队列。消息队列中间件重要吗?面试必问问题之一,你说重不重要。我有时会问同事,为啥你用 RabbitMQ,不用 Kafka,或者 RocketMQ 呢,他给我的回答 “因为公司用的就是这个,大家都这么用”,如果你去面试,直接就被 Pass,今天这篇文章,告诉你如何回答。这篇文章,我重点突出消息队列选型,弱化每种队列内部的实现细节,精华提炼,可读性更强!常用的消息队列主要这 4 种,分别为 Kafka、RabbitMQ、RocketMQ 和 ActiveMQ,主要介绍前三,上思维导图!原创 2022-05-11 09:07:06 · 717 阅读 · 0 评论 -
如何写出一手好 SQL ?很有必要
背景最近频繁出现慢SQL告警,执行时间最长的竟然高达5分钟。导出日志后分析,主要原因竟然是没有命中索引和没有分页处理。其实这是非常低级的错误,我不禁后背一凉,团队成员的技术水平亟待提高啊。改造这些SQL的过程中,总结了一些经验分享给大家,如果有错误欢迎批评指正。MySQL性能最大数据量抛开数据量和并发数,谈性能都是耍流氓。MySQL没有限制单表最大记录数,它取决于操作系统对文件大小的限制。文件系统 单文件大小限制 FAT32 最大4G NTFS 最大64..原创 2022-05-10 16:25:08 · 144 阅读 · 0 评论 -
面试官:说说 MyBatis 二级缓存?关联刷新实现?我懵B了
1、MyBatis缓存介绍Mybatis提供对缓存的支持,但是在没有配置的默认情况下,它只开启一级缓存,二级缓存需要手动开启。一级缓存只是相对于同一个SqlSession而言。也就是针对于同一事务,多次执行同一Mapper的相同查询方法,第一查询后,MyBatis会将查询结果放入缓存,在中间不涉及相应Mapper的数据更新(Insert,Update和Delete)操作的情况下,后续的查询将会从缓存中获取,而不会查询数据库。二级缓存是针对于应用级别的缓存,也就是针对不同的SqlSession做.原创 2022-05-10 11:45:59 · 307 阅读 · 0 评论 -
两个通宵熬出来的Java互联网大厂最新面试题收集整理1000道
最近接触到很多面试相关的内容,所以就专门整理了一下,内容涵盖:Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、Redis、MySQL、Spring、Spring Boot、Spring Cloud、RabbitMQ、Kafka、Linux 等技术栈。后续会出专门的面试视频专题,欢迎关注。1.MyBatis专题1、什么是Mybatis? 1、Mybatis 是一个半 ORM( 对象关系映射)框架,它内部封装了 JDBC,开发时只需要关原创 2022-05-10 09:38:42 · 891 阅读 · 0 评论 -
一周面了20多场,新鲜面经奉上
大家看到这篇文章的时候,应该是我在新公司的第一天,很不幸,周六去打羽毛球的时候脚崴了,得瘸着腿去公司了,周末在家给大家码码面经吧先给大家看下我的面试记录吧我的面试感受先说一个字 是真的「累」。。。。。安排的太满的后果可能就是经常一天只吃一顿饭,一直奔波在路上不扯这个了,给大家说说面试吧,Moon 工作大概两年多的时间,大家可以参考下在整个面试过程中,问的最多的几个问题 1.Java 本地锁到分布式锁,各种锁的场景,为什么要用,以及不同锁实现方式的底层,优缺点,还有 voli原创 2022-05-10 09:26:50 · 193 阅读 · 0 评论 -
面试官:Java 实现线程安全的三种方式
关于线程安全是面试中比较高频的问题,强烈建议大家掌握下。一个程序在运行起来的时候会转换成进程,通常含有多个线程。通常情况下,一个进程中的比较耗时的操作(如长循环、文件上传下载、网络资源获取等),往往会采用多线程来解决。比如显示生活中,银行取钱问题、火车票多个售票窗口的问题,通常会涉及到并发的问题,从而需要多线程的技术。当进程中有多个并发线程进入一个重要数据的代码块时,在修改数据的过程中,很有可能引发线程安全问题,从而造成数据异常。例如,正常逻辑下,同一个编号的火车票只能售出一次,却由于线程安原创 2022-05-09 22:39:19 · 287 阅读 · 0 评论 -
行云集团高级java工程师面试,25k-50k工资水平真不错
下面是正文。由于没怎么准备,先去市场看看现在的面试行情,大部分知识都是以前积累的行云集团-高级 Java 工程师岗位薪资范围:25k~50k ,3~5年经验 Java 高级开发工程师一面(60min) 介绍项目(20min):面试官往死里抠你的职责,项目上下游,项目架构,你如何做的服务拆分? Spring Bean 的生命周期?这部分我主要根据自己写的一个小框架回答了,因为这个小框架拦截了BeanPostProcessor,所以在 Spring 容器在启动的时候会..原创 2022-05-09 22:34:00 · 588 阅读 · 1 评论 -
腾讯二面:引入RabbitMQ后,你如何保证全链路数据100%不丢失 ?
我们都知道,消息从生产端到消费端消费要经过3个步骤: 生产端发送消息到RabbitMQ; RabbitMQ发送消息到消费端; 消费端消费这条消息; 这3个步骤中的每一步都有可能导致消息丢失,消息丢失不可怕,可怕的是丢失了我们还不知道,所以要有一些措施来保证系统的可靠性。这里的可靠并不是一定就100%不丢失了,磁盘损坏,机房爆炸等等都能导致数据丢失,当然这种都是极小概率发生,能做到99.999999%消息不丢失,就是可靠的了。下面来具体分析一下问题以及解决方案。原创 2022-05-09 09:54:53 · 137 阅读 · 0 评论 -
大厂面试官问:说说并发编程的12种业务场景,怎么去操作
前言并发编程是一项非常重要的技术,无论在面试,还是工作中出现的频率非常高。并发编程说白了就是多线程编程,但多线程一定比单线程效率更高?答:不一定,要看具体业务场景。毕竟如果使用了多线程,那么线程之间的竞争和抢占cpu资源,线程的上下文切换,也是相对来说比较耗时的操作。下面这几个问题在面试中,你必定遇到过: 你在哪来业务场景中使用过多线程? 怎么用的? 踩过哪些坑? 今天聊聊我之前在项目中用并发编程的12种业务场景,给有需要的朋友一个参考。1. 简原创 2022-05-09 09:11:58 · 448 阅读 · 0 评论 -
面试官问:如何用Elasticsearch实现Word、PDF,TXT文件的全文内容检索?
Elasticsearch简介 开发环境 核心问题 文件上传 关键字查询 编码 导入依赖 文件上传 文件查询 多文件测试 还存在的一些问题 简单介绍一下需求 能支持文件的上传,下载 要能根据关键字,搜索出文件,要求要能搜索到文件里的文字,文件类型要支持word,pdf,txt 文件上传,下载比较简单,要能检索到文件里的文字,并且要尽量精确,这种情..原创 2022-05-08 23:44:45 · 325 阅读 · 0 评论 -
面试官问:你真的了解 Synchronized 吗?
前言Synchronized想必大家在工作中一定有接触过,它算是Java并发场景下实现多线程安全一种比较直接的操作。有人会说它慢,确实。在JDK1.6之前,它有另一个名称叫做:重量级锁。但是从1.6版本起,它就在不断被优化。现如今已经是很成熟的并发安全技术;所以关于Synchronized的考察也常常成为面试官青睐的话题。本文我们会使用图解的方式解析Synchronized的使用和原理,让我们开始吧~对象锁和类锁什么是Synchronized?Synchronized是Java中的一个关原创 2022-05-08 11:04:52 · 181 阅读 · 0 评论 -
堪称神级的阿里巴巴“高并发”教程《基础+实战+源码+面试+架构》
一、关于高并发高并发是指在同一个时间点,有很多用户同时访问URL地址,比如:淘宝的双11、双12,就会产生高并发。又如贴吧的爆吧,就是恶意的高并发请求,也就是DDOS攻击。1 高并发会来带的后果服务端:导致站点服务器/DB服务器资源被占满崩溃,数据的存储和更新结果和理想的设计是不一样的,比如:出现重复的数据记录,多次添加了用户积分等。 用户角度:网站打不开 服务器雪崩:2 并发下的数据处理通过表设计,如:记录表添加唯一约束,数据处理逻辑使用事物防止并发下的数据错乱问题。通过服务端锁进程原创 2022-05-07 10:41:18 · 716 阅读 · 0 评论 -
Kubernetes 架构核心点总结
目录: 一个目标:容器操作 两地三中心 四层服务发现 五种Pod共享资源 六个CNI常用插件 七层负载均衡 八种隔离维度 九个网络模型原则 一个目标:容器操作;两地三中心;四层服务发现;五种Pod共享资源;六个CNI常用插件;七层负载均衡;八种隔离维度;九个网络模型原则;十类IP地址;百级产品线;千级物理机;万级容器;相如无亿,K8s有亿:亿级日服务人次。一个目标:容器操作Kubernetes(k8s)是自动化..原创 2022-05-07 10:30:30 · 148 阅读 · 0 评论 -
Zookeeper的选举机制和同步机制超详细讲解
前言zookeeper相信大家都不陌生,很多分布式中间件都利用zk来提供分布式一致性协调的特性。dubbo官方推荐使用zk作为注册中心,zk也是hadoop和Hbase的重要组件。其他知名的开源中间件中也都出现了zk的身影。有很多童鞋认识zk很久了,知道其基本理念,知道如何使用。但当面试时问到集群zk之间的选举和数据同步机制时,就陷入了盲区。其实很多的分布式中间件的选举和同步,都和zk有异曲同工之妙。这篇文章我就来重点聊下关于zk集群之间的选举和同步机制。ZK集群的部署首先我们来看下半数原创 2022-05-07 10:22:05 · 1496 阅读 · 0 评论 -
大厂后端二面,关于分布式事务灵魂十连质问,你能回答多少?
一、前言事务(Transaction):一般是指要做的或所做的事情,由事务开始(begin transaction)和事务结束(end transaction)之间执行的全体操作组成。简单地讲就是:要么全部被执行,要么就全部失败。那分布式事务,自然就是运行在分布式系统中的事务,是由多个不同的机器上的事务组合而成的。同上,只有分布式系统中所有事务执行了才能是成功,否则失败。事务的基本特征ACID:原子性(Atomicity):一个事务是一个不可分割的工作单位,事务中包括的诸操作要...原创 2022-05-06 13:47:04 · 137 阅读 · 0 评论 -
5月最新:字节跳动2面、美团2面Java面试真题总结
前言宅在家里快两个月的在家办公模式基本告一段落。企业复工,大家的工作生活终于可以回归正轨,相信不少朋友已经走出家门,迎战跳槽季了。一些动作快的朋友可能已经拿到一两个 Offer 了。那么,对于Java开发岗来说,到底该如何准备技术面呢?其实,除了表达能力和面试技巧外,无非就从这几个方面进行准备:源码阅读、JVM、高并发,分布式、集群、中间件,微服务架构等。下面是最新的字节跳动和美团的Java面试题,希望对大家面试有帮助!字节跳动一面:1.看过Spring的源码吗,开局暴.原创 2022-05-06 11:48:39 · 328 阅读 · 0 评论 -
虎牙技术二面:详细说说Kafka拉消息的过程?
副本机制是Kafka实现数据高可靠性的基础:同一个分区下的多个副本分散在不同的Broker机器上,它们保存相同的消息数据以实现高可靠性。那如何确保所有副本上的数据一致性呢?最常见方案当属Leader/Follower备份机制(Leader/Follower Replication)。Kafka分区的:某个副本会被指定为Leader,负责响应客户端的读、写请求 其他副本自动成为Follower,被动同步Leader副本中的数据被动同步:Follower副本不断向Leader副本发送读取请求,以获取Lea原创 2022-05-06 09:45:22 · 389 阅读 · 0 评论 -
美团Java二面惜败,我的面经复盘(附学习笔记+面试整理)
面试时间将近两个小时(期间等待二面面试官来面我的时候等了半个多小时)面试官问的东西很多,还挖了好几个坑,一个技术点套着一个技术点的问,一定要做好万全的准备。问了一些基本层面上的技术点都答出来了,稍微问深一点我就有点懵了(实战经验还是不足)。回来之后把这些题目做了一个分类并整理出答案(每次去面试的时候面试官问的问题面试结束后我都会做笔记)分为Spring+逻辑算法+MySQL+Java+Redis+并发编程+JVM+RabbitMQ等,接下来分享一下我的这次蚂蚁二面面经+一些我的学习笔记。注意注意:原创 2022-05-06 09:42:02 · 519 阅读 · 0 评论 -
美团二面:为什么要分库分表?
前言在高并发系统当中,分库分表是必不可少的技术手段之一,同时也是BAT等大厂面试时,经常考的热门考题。你知道我们为什么要做分库分表吗?这个问题要从两条线说起:垂直方向和水平方向。1 垂直方向垂直方向主要针对的是业务,下面聊聊业务的发展跟分库分表有什么关系。1.1 单库在系统初期,业务功能相对来说比较简单,系统模块较少。为了快速满足迭代需求,减少一些不必要的依赖。更重要的是减少系统的复杂度,保证开发速度,我们通常会使用单库来保存数据。系统初期的数据库架构如下:..原创 2022-05-05 23:51:55 · 587 阅读 · 0 评论 -
阿里二面:为什么MySQL选择Repeatable Read作为默认隔离级别?
我们知道, ANSI/ISO SQL定义的标准隔离级别有四种,从高到底依次为:可序列化(Serializable)、可重复读(Repeatable Reads)、提交读(Read Committed)、未提交读(Read Uncommitted)。RU隔离级别下,可能发生脏读、幻读、不可重复读等问题。RC隔离级别下,解决了脏读的问题,存在幻读、不可重复读的问题。RR隔离级别下,解决了脏读、不可重复读的问题,存在幻读的问题。Serializable隔离级别下,解决了脏读、幻读、不可重复读的问题。原创 2022-05-05 23:48:42 · 685 阅读 · 1 评论 -
大厂java面试必备:聊聊分布式锁的多种实现方式
前言今天跟大家探讨一下分布式锁的设计与实现。希望对大家有帮助,如果有不正确的地方,欢迎指出,一起学习,一起进步哈~ 分布式锁概述 数据库分布式锁 Redis分布式锁 Zookeeper分布式锁 三种分布式锁对比 1. 分布式锁概述我们的系统都是分布式部署的,日常开发中,秒杀下单、抢购商品等等业务场景,为了防⽌库存超卖,都需要用到分布式锁。分布式锁其实就是,控制分布式系统不同进程共同访问共享资源的一种锁的实现。如果不同的系统或同一个系统的不同主机原创 2022-05-05 16:34:53 · 313 阅读 · 0 评论 -
Maven 最全教程,看了必懂, 程序员面试必问
一、为什么使用Maven这样的构建工具【why】 二、maven是什么【what】 三、安装maven 四、第一个maven 五、仓库和坐标 六、依赖 七、生命周期 八、Eclipse中使用maven 九、maven工程的依赖高级特性 十、build配置 图片前言:目前所有的项目都在使用maven,可是一直没有时间去整理学习,这两天正好有时间,好好的整理一下。一、为什么使用Maven这样的构建工具【..原创 2022-05-05 15:44:08 · 298 阅读 · 0 评论 -
提高 3000% 性能,只加一行代码
我们公司运维着 15 个 Web 应用,主要的工作就是按需交付基于数据驱动的 Web 应用程序,用于支撑实时决策的制定。这些应用的预期是在高负载下依然保持高可用。其中的主 Web 应用是一个历史遗留的大型多服务系统。系统中的大部分服务都有超过 15 年的历史并且经过了好几代人的重构。试想一下,负责编写系统代码的人现在可能已经离职或已经调整到其他岗位了。过去几年我们团队的主要目标是就是针对这些服务进行性能优化。本次我将和你分享在性能优化的过程中,我们的一些主要经验总结和当时决定这么做的原因。原创 2022-05-05 09:03:17 · 163 阅读 · 0 评论