![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
架构
文章平均质量分 86
Moonxiyue
这个作者很懒,什么都没留下…
展开
-
一图搞懂扫码登录的技术原理
现在扫码登录是一种很常见的登录方式。当用户需要登录某个网站时,网站会提供一种扫码登录的方式,用户打开相应的手机App,扫描网站上显示的二维码,然后在App中确认登录,网站监测到用户确认登录后,跳转到登录成功页面。从这个形式上看,扫码登录就是将用户在手机App中的登录状态同步到网站中,这篇文章就来一窥这个同步是如何发生的。假设有一款产品,这个产品通过手机端App和PC端应用为用户提供服务,为了方便用户在PC端上登录,产品提供了一个扫码登录的功能,即PC端应用上展示一个登录二维码,用户使用手机端App扫码并确认转载 2022-06-15 15:46:00 · 2618 阅读 · 2 评论 -
架构师成长路线图
Danist Soh@Unsplash软件架构师在软件开发团队中扮演着高级的角色,这一角色需要时间和经验的积累,需要跨职能的技能和知识。除了技术方面的挑战,还要求架构师具备良好的社交能力。在开始考虑成为软件架构师的计划之前,我们先来看看典型的软件架构师类型:我们可以进一步扩展这个列表,每个公司可能对某个特定职位有不同的名称。上述给定的软件架构职位的角色和职责可能因公司而异,但本质是相同的。请看下面的图表,以便更好的理解不同架构师角色在技术/业务技能和知识方面的关系。业务与技术关系图到目前为止,有一件事应该非原创 2022-06-15 15:43:36 · 1099 阅读 · 0 评论 -
架构师必备技能:教你画出一张合格的技术架构图
作者:三画 阿里技术当我们想用一张或几张图来描述我们的系统时,是不是经常遇到以下情况:如果有同样的困惑,本文将介绍一种画图的方法论,来让架构图更清晰。先厘清一些基础概念1、什么是架构?架构就是对系统中的实体以及实体之间的关系所进行的抽象描述,是一系列的决策。架构是结构和愿景。系统架构是概念的体现,是对物/信息的功能与形式元素之间的对应情况所做的分配,是对元素之间的关系以及元素同周边环境之间的关系所做的定义。做好架构是个复杂的任务,也是个很大的话题,本篇就不做深入了。有了架构之后,就需要让干系人理解、遵循相关原创 2022-06-12 20:59:24 · 1057 阅读 · 0 评论 -
以字节跳动内部 Data Catalog 架构升级为例聊业务系统的性能优化
字节跳动 Data Catalog 产品早期,是基于 LinkedIn Wherehows 进行二次改造,产品早期只支持 Hive 一种数据源。后续为了支持业务发展,做了很多修修补补的工作,系统的可维护性和扩展性变得不可忍受。比如为了支持数据血缘能力,引入了字节内部的图数据库 veGraph,写入时,需要业务层处理 MySQL、ElasticSearch 和 veGraph 三种存储,模型也需要同时理解关系型和图两种。更多的背景可以参照之前的文章。新版本保留了原有版本全量的产品能力,将存储层替换成了 Apa原创 2022-06-09 13:50:15 · 218 阅读 · 0 评论 -
分布式定时任务框架选型,写得太好了
我们先思考下面几个业务场景的解决方案:很多业务场景需要我们某一特定的时刻去做某件任务,定时任务解决的就是这种业务场景。一般来说,系统可以使用消息传递代替部分定时任务,两者有很多相似之处,可以相互替换场景。如,上面发货成功发短信通知客户的业务场景,我们可以在发货成功后发送MQ消息到队列,然后去消费mq消息,发送短信。但在某些场景下不能互换:单机分布项目背景及社区力量X-Job : 大众点评公司下员工许雪里、贡献者 3人; github有2470star、1015fork | QQ讨论群6个 | 有登记在使用的原创 2022-06-06 15:07:05 · 317 阅读 · 0 评论 -
Spring Boot 获取 bean 的 3 种方式 。还有谁不会?
PostConstruct 注释用于在依赖关系注入完成之后需要执行的方法上,以执行任何初始化。此方法必须在将类放入服务之前调用。支持依赖关系注入的所有类都必须支持此注释。即使类没有请求注入任何资源,用 PostConstruct 注释的方法也必须被调用。只有一个方法可以用此注释进行注释。应用 PostConstruct 注释的方法必须遵守以下所有标准:实现方式:在springboot的启动类中,定义static变量ApplicationContext,利用容器的getBean方法获得依赖对象。推荐一个 Sp原创 2022-06-02 16:30:35 · 403 阅读 · 0 评论 -
一文最全总结之Spring从入门到入土(上)
文章目录1.1 介绍2.1 什么是IoC2.2 IoC入门案例1(基础案例)2.3 IoC入门案例2(依赖注入)2.4 IoC入门案例3(面向接口编程)2.5 IoC入门案例4(整合JUnit4)3.1 Bean的创建3.2 依赖注入(DI)3.2.1 按照名称注入3.2.2 按照类型注入3.2.3 普通数据注入4.properties数据注入1.1 @Bean(工厂Bean)3.2.5 基本使用:类型注入3.2.6 基本使用:指定名称注入3.2.7 依赖注入:引用类型3.2.8 依赖注入:简单类型1.1原创 2022-06-02 14:42:34 · 177 阅读 · 0 评论 -
怎么画出好的架构图,架构师必备。。
你是否对大厂展示的五花八门,花花绿绿的架构设计图所深深吸引,当我们想用几张图来介绍下业务系统,是不是对着画布不知从何下手?作为技术扛把子的筒子们是不是需要一张图来描述系统,让系统各个参与方都能看的明白?如果有这样的困惑,本文将介绍一些画图的方法论,让技术图纸更加清晰。在TOGAF企业架构理论中, 架构是从公司战略层面,自顶向下的细化的一部分,从战略=> 业务架构=>应用/数据/技术架构,当然老板层关注的是战略与业务架构,我们搬砖的需要聚焦到应用/数据/技术架构这一层。系统架构图是为了抽象的表示软件系统的整体原创 2022-06-01 21:49:30 · 217 阅读 · 0 评论 -
为什么阿里巴巴不建议在for循环中使用”+”进行字符串拼接
作者:Hollis本文,也是对于Java中字符串相关知识的一个补充,主要来介绍一下字符串拼接相关的知识。本文基于jdk1.8.0_181。字符串拼接字符串拼接是我们在Java代码中比较经常要做的事情,就是把多个字符串拼接到一起。我们都知道,String是Java中一个不可变的类,所以他一旦被实例化就无法被修改。不可变类的实例一旦创建,其成员变量的值就不能被修改。这样设计有很多好处,比如可以缓存hashcode、使用更加便利以及更加安全等。但是,既然字符串是不可变的,那么字符串拼接原创 2022-05-31 19:57:20 · 151 阅读 · 0 评论 -
MySQL执行过程及执行顺序
一、MySQL执行过程MySQL整体的执行过程如下图所示11.1 连接器1.1.1连接器的主要职责1、负责与客户端的通信,是半双工模式,这就意味着某一固定时刻只能由客户端向服务器请求或者服务器向客户端发送数据,而不能同时进行,其中MySQL在与客户端连接TC/IP的。2、验证请求用户的账户和密码是否正确,如果账户和密码错误,会报错:Access denied for user 'root'@'localhost' (using password: YES)3、如果用户的账原创 2022-05-31 17:26:32 · 3713 阅读 · 1 评论 -
我说我精通字符串,面试官问我Java中的String有没有长度限制?
String是Java中很重要的一个数据类型,除了基本数据类型以外,String是被使用的最广泛的了,但是,关于String,其实还是有很多东西容易被忽略的。就如本文我们要讨论的问题:Java中的String有没有长度限制?这个问题要分两个阶段看,分别是编译期和运行期。不同的时期限制不一样。编译期首先,我们先来合理的推断一下,当我们在代码中使用String s = “”;的形式来定义String对象的时候,””中字符的个数有没有限制呢?既然是合理的推断,那就要要足够的依据,所以我们可以从原创 2022-05-31 17:12:29 · 53 阅读 · 0 评论 -
Java程序员应该学习的10大技术
对于Java开发人员来说,最近几年的时间中,Java生态诞生了很多东西。每6个月更新一次Java版本,以及发布很多流行的框架,如Spring 5、Spring Security 5和Spring Boot 2等,这些都给我们带来了很大的挑战。在2019年初,我认为Java 10还是比较新的,但是,在我学习完所有Java 10的特性之前,Java 11、Java 12、Java 12 已经接踵而至,对于工作繁忙的程序员们来说,大多数人都根本没有时间看这些。基本是都是了解一些有用的新特性而已。Java的原创 2022-05-31 17:04:02 · 1053 阅读 · 0 评论 -
JVM内存结构的面试题可以问的这么难?
作者:HollisJava作为一种面向对象的,跨平台语言,其对象、内存等一直是比较难的知识点,所以,即使是一个Java的初学者,也一定或多或少的对JVM有一些了解。可以说,关于JVM的相关知识,基本是每个Java开发者必学的知识点,也是面试的时候必考的知识点。在JVM的内存结构中,比较常见的两个区域就是堆内存和栈内存(如无特指,本文提到的栈均指的是虚拟机栈),关于堆和栈的区别,很多开发者也是如数家珍,有很多书籍,或者网上的文章大概都是这样介绍的:1、堆是线程共享的内存区域,栈是线程独享的内存区原创 2022-05-31 16:12:53 · 77 阅读 · 0 评论 -
关于解决并发问题,许多程序员都会忽略的一个重要方案
在并发编程的世界里,共享变量的线程安全问题永远是一个无法避免且不得不面对的问题,如果只有读的情况,那么永远也不会出现线程安全的问题,因为多线程读永远是线程安全的,但是多线程读写一定会存在线程安全的问题。那既然这么说是不是通过只读就能解决并发问题呢?其实最简单的办法就是让共享变量只有读操作,而没有写操作。这个办法如此重要,以至于被上升到了一种解决并发问题的设计模式:不变性(Immutability)模式。所谓不变性,简单来讲,就是对象一旦被创建之后,状态就不再发生变化。换句话说,就是变量一旦被赋值,就原创 2022-05-31 15:14:14 · 127 阅读 · 0 评论 -
为什么强烈禁止开发人员使用isSuccess作为变量名
在日常开发中,我们会经常要在类中定义布尔类型的变量,比如在给外部系统提供一个RPC接口的时候,我们一般会定义一个字段表示本次请求是否成功的。关于这个"本次请求是否成功"的字段的定义,其实是有很多种讲究和坑的,稍有不慎就会掉入坑里,作者在很久之前就遇到过类似的问题,本文就来围绕这个简单分析一下。到底该如何定一个布尔类型的成员变量。一般情况下,我们可以有以下四种方式来定义一个布尔类型的成员变量:boolean successboolean isSuccessBoolean successBo原创 2022-05-31 14:58:59 · 601 阅读 · 0 评论 -
30张图带你彻底理解红黑树
写在前面当在10亿数据中只需要进行10几次比较就能查找到目标时,不禁感叹编程之魅力!人类之伟大呀!—— 学红黑树有感。终于,在学习了几天的红黑树相关的知识后,我想把我所学所想和所感分享给大家。红黑树是一种比较难的数据结构,要完全搞懂非常耗时耗力,红黑树怎么自平衡?什么时候需要左旋或右旋?插入和删除破坏了树的平衡后怎么处理?等等一连串的问题在学习前困扰着我。如果你在学习过程中也会存在我的疑问,那么本文对你会有帮助,本文帮助你全面、彻底地理解红黑树!本文将通过图文的方式讲解红黑树的知识点,并且不会涉原创 2022-05-31 14:08:27 · 94 阅读 · 0 评论 -
开箱即用 , 看看人家的微服务权限解决方案,那叫一个优雅
前置知识我们将采用Nacos作为注册中心,Gateway作为网关,使用Sa-Token提供的微服务权限解决方案,此方案是基于之前的解决方案改造的应用架构还是和之前方案差不多的思路,认证服务负责登录处理,网关负责登录认证和权限认证,其他API服务负责处理自己的业务逻辑。为了能在多个服务中共享Sa-Token的Session,所有服务都需要集成Sa-Token和Redis。micro-sa-token-common:通用工具包,其他服务公用的用户类UserDTO和通用返回结果类Commo原创 2022-05-30 20:46:27 · 179 阅读 · 0 评论 -
为什么不建议在MySQL中使用 utf8?
MySQL 字符编码集中有两套 UTF-8 编码实现:utf8和utf8mb4。如果使用utf8的话,存储 emoji 符号和一些比较复杂的汉字、繁体字就会出错。为什么会这样呢?这篇文章可以从源头给你解答。何为字符集?字符是各种文字和符号的统称,包括各个国家文字、标点符号、表情、数字等等。字符集就是一系列字符的集合。字符集的种类较多,每个字符集可以表示的字符范围通常不同,就比如说有些字符集是无法表示汉字的。计算机只能存储二进制的数据,那英文、汉字、表情等字符应该如何存储呢?...原创 2022-05-30 20:43:57 · 143 阅读 · 0 评论 -
Redis 官方可视化工具,功能真强大
一、RedisInsight 简介RedisInsight 是一个直观高效的 Redis GUI 管理工具,它可以对 Redis 的内存、连接数、命中率以及正常运行时间进行监控,并且可以在界面上使用 CLI 和连接的 Redis 进行交互(RedisInsight 内置对 Redis 模块支持):https://docs.redis.com/latest/ri/RedisInsight 提供的功能:唯一支持 Redis Cluster 的 GUI 工具; 可以基于 Browser 的界原创 2022-05-30 20:41:27 · 125 阅读 · 0 评论 -
MySQL中的全表扫描和索引树扫描
引言在学习mysql时,我们经常会使用explain来查看sql查询的索引等优化手段的使用情况。在使用explain时,我们可以观察到,explain的输出有一个很关键的列,它就是type属性,type表示的是扫描方式,代表 MySQL 使用了哪种索引类型,不同的索引类型的查询效率是不一样的。在type这一列,有如下一些可能的选项:system:系统表,少量数据,往往不需要进行磁盘IO const:常量连接 eq_ref:主键索引(primary key)或者非空唯一索引(unique no原创 2022-05-30 20:16:18 · 2051 阅读 · 1 评论 -
10分钟详解Spring全家桶7大知识点
Spring框架自诞生以来一直备受开发者青睐,有人亲切的称之为:Spring 全家桶。它包括SpringMVC、SpringBoot、Spring Cloud、Spring Cloud Dataflow等解决方案。很多研发人员把spring看作心目中最好的java项目,没有之一。所以这是重点也是难点,工作中必须会,面试时肯定考。那么,今天花费10分钟,梳理Spring框架相关知识。Spring知识点-汇总spring系列包含非常多的项目,可以满足java开发中的方方面面。先来看常原创 2022-05-30 19:27:51 · 968 阅读 · 0 评论 -
MySQL字符串函数、日期时间函数
一、常见字符串函数:1、CHAR_LENGTH 获取长度(字符为单位) 2、FORMAT 格式化 3、INSERT 替换的方式插入 4、INSTR 获取位置 5、LEFT/RIGHT 取左、取右 6、LENGTH 获取长度(字节为单位) 7、LTRIM/RTRIM/TRIM 去空格(左/右/自定义) 8、STRCMP 字符串比较 9、CONCAT 字符串拼接 10、SUBSTRING 字符串截取1、CHAR_LENGTH:获取长度(字符为单位)CHAR_LE...原创 2022-05-30 16:27:10 · 1092 阅读 · 0 评论 -
玩转 Spring Boot 应用篇(序列号生成器服务实现)
在微服务盛行的当下,模块拆分粒度越来越细,若排查问题时,就需要一个能贯穿始终的全局唯一的 ID;在支付场景中的订单编号,银行流水号等生成均需要依赖序列号生成的工具。本次基于 Spring Boot+ Redis + Lua 来实现一个序列号生成器服务,并尝试包装成 Spring Boot Starter 进而彻底解决项目中序列号生成的难题。 技术栈:Spring Boot 2.6.3 + Redis + Lua 环境依赖:JDK 1.8 + Maven 3.6.3 1....原创 2022-05-30 15:08:21 · 1371 阅读 · 0 评论 -
在Docker中安装并修改MySQL中的 my.cnf 配置文件
前言前期经过MySQL主从复制之后,发现数据库的读写非常慢,而且经常发生MySQL连接数过小,导致整个数据库崩溃的情况。通过修改MySQL中的 my.cnf 配置文件参数,以达到MySQL关系型数据库最大性能的合理利用。本文共分为三个方面进行讲述:一、Docker安装MySQL查看mysql镜像 sudo docker search mysql 拉取mysql sudo docker pull mysql#默认最新版(可自定义5.7) 创建容器,并测原创 2022-05-29 19:13:04 · 11958 阅读 · 3 评论 -
你们有没有做 MySQL 读写分离?如何实现 MySQL 的读写分离?MySQL 主从复制原理的是啥?如何解决 MySQL 主从同步的延时问题?
面试题你们有没有做 MySQL 读写分离?如何实现 MySQL 的读写分离?MySQL 主从复制原理的是啥?如何解决 MySQL 主从同步的延时问题?面试官心理分析高并发这个阶段,肯定是需要做读写分离的,啥意思?因为实际上大部分的互联网公司,一些网站,或者是 app,其实都是读多写少。所以针对这个情况,就是写一个主库,但是主库挂多个从库,然后从多个从库来读,那不就可以支撑更高的读并发压力了吗?面试题剖析如何实现 MySQL 的读写分离?其实很简单,就是基于主从复制架构,简单来说,就搞原创 2022-05-29 15:38:45 · 73 阅读 · 0 评论 -
分布式事务框架Seata及EasyTransaction架构的比对思考
本文将会对比Seata与EasyTransaction两个分布式事务的一些高层设计,相信大家会有收获。Seata的概述Seata(曾用名Fescar,开源版本GTS)是阿里的开源分布式事务框架,其RoadMap中指出了其希望与社区合作重新构建出一个全面的分布式事务框架。关于Seata的相关介绍可以看这里,本文不再赘述。虽然其后续路线有所调整,但整体适用。https://github.com/seata/seata/wiki/%E6%A6%82%E8%A7%88学习了解Seata后我们可原创 2022-05-29 14:54:40 · 253 阅读 · 0 评论 -
死锁产生的原因有哪些?
死锁(Dead Lock)指的是两个或两个以上的运算单元(进程、线程或协程),都在等待对方释放资源,但没有一方提起释放资源,从而造成了一种阻塞的现象就称为死锁。比如线程 1 拥有了锁 A 的情况下试图获取锁 B,而线程 2 又在拥有了锁 B 的情况下试图获取锁 A,这样双方就进入相互阻塞等待的情况,如下图所示:死锁的代码实现如下:importjava.util.concurrent.TimeUnit;publicclassDeadLockTest{publicsta...原创 2022-05-29 14:37:33 · 2948 阅读 · 0 评论 -
加载、读取资源的方式
❀ 通过类加载器进行加载,通过流的方式进行读取,从而获取资源1、java的jdk内置的加载方式:通过线程Thread(lang包的)获取到类加载,然后以流的方式获取资源:InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("db.properties");/* 【使用输入流inputStream】 */private static Properties原创 2022-05-29 14:18:18 · 236 阅读 · 0 评论 -
反射机制(什么是反射、反射操作构造器、方法、字段、反射加载资源)
作者:一乐乐1、什么是反射:■ 问题1:1、对象有编译类型和运行类型Object obj = newjava.util.Date();编译类型:是声明时的类型,Object 类型运行类型:是new 的类型,实例化类型java.util.Date□ 需求:通过obj对象,调用java.util.Date类中的toLocaleString方法。直接 obj.toLocaleString(); 此时编译报错,编译时会检查编译类型中是否存在toLocaleString方法。..原创 2022-05-29 14:10:12 · 115 阅读 · 0 评论 -
SpringBoot多线程环境下,如何解决多个定时器冲突问题?
战术分析实际开发项目中一定不止一个定时器,很多场景都需要用到,而多个定时器带来的问题 : 就是如何避免多个定时器的互相冲突。使用场景我们的订单服务,一般会有一个待支付订单,而这个待支付订单是有时间限制的,比如阿里巴巴的订单是五天,淘宝订单是一天,拼多多订单是一天,美团订单是15分钟…基金系统中,如何同时更新多个存储分区中的基金信息…总的来说,实际开发中定时器需要解决多个定时器同时并发的问题,也要解决定时器之间的冲突问题问题不大,说到并发那就离不开多线程了…慢慢看看就懂了.原创 2022-05-27 19:38:32 · 238 阅读 · 0 评论 -
Java中的输入、输出流
输入输出流内容概括:存在java.io包中所有输入流都是抽象类InputStream(字节输入流)和抽象类Reader(字符输入流)的子类。所有输出流都是抽象类OutputStream(字节输出流)和抽象类Writer(字符输出流)的子类。File类不涉及对文件的读写操作,只获取文件信息,如文件所在目录、文件长度、文件读写权限等。创建一个File对象的构造方法有:File(String filename); File(String directoryPath, String原创 2022-05-27 19:27:30 · 2340 阅读 · 0 评论 -
【高并发】从源码角度分析创建线程池究竟有哪些方式
作者:冰河在Java的高并发领域,线程池一直是一个绕不开的话题。有些童鞋一直在使用线程池,但是,对于如何创建线程池仅仅停留在使用Executors工具类的方式,那么,创建线程池究竟存在哪几种方式呢?就让我们一起从创建线程池的源码来深入分析究竟有哪些方式可以创建线程池。使用Executors工具类创建线程池在创建线程池时,初学者用的最多的就是Executors 这个工具类,而使用这个工具类创建线程池时非常简单的,不需要关注太多的线程池细节,只需要传入必要的参数即可。Executors 工具类提供了原创 2022-05-27 15:14:40 · 119 阅读 · 0 评论 -
MySQL可重复读级别能够解决幻读吗
引言之前在深入了解数据库理论的时候,了解到事物的不同隔离级别可能存在的问题。为了更好的理解所以在MySQL数据库中测试复现这些问题。关于脏读和不可重复读在相应的隔离级别下都很容易的复现了。但是对于幻读,我发现在可重复读的隔离级别下没有出现,当时想到难道是MySQL对幻读做了什么处理?测试:创建一张测试用的表dept:CREATE TABLE `dept` (`id` int(11) NOT NULL AUTO原创 2022-05-27 14:28:40 · 2192 阅读 · 0 评论 -
B树、B-树、B+树、B*树之间的关系
B树B-tree树即B树,B即Balanced,平衡的意思。因为B树的原英文名称为B-tree,而国内很多人喜欢把B-tree译作B-树,其实,这是个非常不好的直译,很容易让人产生误解。如人们可能会以为B-树是一种树,而B树又是另一种树。而事实上是,B-tree就是指的B树。特此说明。先介绍下二叉搜索树1.所有非叶子结点至多拥有两个儿子(Left和Right);2.所有结点存储一个关键字;3....原创 2022-05-27 13:42:32 · 101 阅读 · 0 评论 -
JAVA多线程与并发学习总结,看完秒懂
1. 计算机系统 使用高速缓存来作为内存与处理器之间的缓冲,将运算需要用到的数据复制到缓存中,让计算能快速进行;当运算结束后再从缓存同步回内存之中,这样处理器就无需等待缓慢的内存读写了。 缓存一致性:多处理器系统中,因为共享同一主内存,当多个处理器的运算任务都设计到同一块内存区域时,将可能导致各自的缓存数据不一致的情况,则同步回主内存时需要遵循一些协议。 乱序执行...原创 2022-05-27 13:30:58 · 146 阅读 · 0 评论 -
MySQL驱动中关于时间的坑
最近在做一个小框架,因为本身比较精简,就没有引入太多依赖,直接用了JDBC来操作数据库,因为我的表中有一个datetime类型的字段,对应的Java代码中使用的是java.time.LocalDateTime,在处理这个日期字段的时候,就遇到了一个有趣的问题;在我的数据库表建好后,在Java中使用JDBC原生API实现了一个repository,包含一些数据库的操作,因为代码中有java.time.LocalDateTime字段,在使用java.sql.PreparedStatement的时候不确认ja原创 2022-05-27 13:29:32 · 387 阅读 · 0 评论 -
厉害了 彻底搞懂JAVA与Go垃圾回收
作者:hewittwang,腾讯PCG业务研发中心导语 | 现代高级编程语言管理内存的方式分自动和手动两种。手动管理内存的典型代表是C和C++,编写代码过程中需要主动申请或者释放内存;而 PHP、Java 和 Go等语言使用自动的内存管理系统,由内存分配器和垃圾收集器来代为分配和回收内存,其中垃圾收集器就是我们常说的GC。本文中,笔者将从原理出发,介绍Java和Golang垃圾回收算法,并从原理上对他们做一个对比。Java垃圾回收垃圾回收区域及划分在介绍Java垃圾回收之前,我们需要了解原创 2022-05-26 21:12:20 · 1405 阅读 · 1 评论 -
深刻认识 MySQL 和 Redis 的数据一致性问题
作者:sinxu,腾讯 CSIG 后台开发工程师1. 什么是数据的一致性“数据一致”一般指的是:缓存中有数据,缓存的数据值 = 数据库中的值。但根据缓存中是有数据为依据,则”一致“可以包含两种情况:缓存中有数据,缓存的数据值 = 数据库中的值(需均为最新值,本文将“旧值的一致”归类为“不一致状态”)缓存中本没有数据,数据库中的值 = 最新值(有请求查询数据库时,会将数据写入缓存,则变为上面的“一致”状态)”数据不一致“:缓存的数据值 ≠ 数据库中的值;缓存或者数据库中存在旧值,导致其他线原创 2022-05-26 21:09:47 · 225 阅读 · 0 评论 -
后台服务架构高性能设计之道
作者:booleanwang,腾讯 PCG 后台开发工程师“N 高 N 可”,高性能、高并发、高可用、高可靠、可扩展、可维护、可用性等是后台开发耳熟能详的词了,它们中有些词在大部分情况下表达相近意思。本序列文章旨在探讨和总结后台架构设计中常用的技术和方法,并归纳成一套方法论。前言本文主要探讨和总结服务架构设计中高性能的技术和方法,如下图的思维导图所示,左边部分主要偏向于编程应用,右边部分偏向于组件应用,文章将按图中的内容展开。高性能思维导图1 无锁化大多数情况下,多线..原创 2022-05-26 21:07:56 · 335 阅读 · 0 评论 -
SQL学习笔记之B+树
0x00 概述要描述清楚B+树,得先了解二叉查找数,平衡二叉树。0x01 二叉查找树任意节点,它的左子树如果不为空,那么左子树上所有节点的值都小于根节点的值;任意节点,他的右子树如果不为空,那么右子树上的所有节点的值大于根节点的值。这个特性给查找带来了方便,如上图,要找key=3的键值,只要从6这个节点左子树进行递归查找即可,右子树的节点可以完全不理会。0x02 平衡二叉树二叉查找树有些缺陷,因为它对树的左右子树的高度没有任何限制,极端的情况下会出现如下图的类似链表的.原创 2022-05-26 20:57:01 · 302 阅读 · 0 评论