05 2022 档案
摘要:Java内存模型(Java Memory Model, JMM)。 Java内存模型是围绕着并发编程中原子性、可见性、有序性这三个特征来建立的。 原子性-Atomicity 一个操作不能被打断,要么全部执行完毕,要么不执行。在这点上有点类似于事务操作,要么全部执行成功,要么回退到执行该操作之前的状态
阅读全文
摘要:前言 JVM基本概念 深解JVM 1-Java虚拟机基本原理 - chch213 - 博客园 (cnblogs.com) JVM内存结构 深解JVM 2-内存结构 - chch213 - 博客园 (cnblogs.com) 前面我们讲了JVM一些常识性的东西,以及垃圾回收机制主要针对的堆的内存回收。
阅读全文
摘要:深解JVM 1-Java虚拟机基本原理 - chch213 - 博客园 (cnblogs.com) 上一篇介绍了一下JVM的一些基本原理概念。 本篇主要针对运行时数据区进行解析。 运行时数据区存储了哪些数据? a) 程序计数器(PC寄存器) 由于在JVM中,多线程是通过线程轮流切换来获得CPU执行时
阅读全文
摘要:【一次编译,到处运行】 Java 虚拟机具体是怎样运行 Java 字节码的? 从虚拟机视角来看,执行 Java 代码首先需要将它编译而成的 class 文件加载到 Java 虚拟机中。加载后的 Java 类会被存放于方法区(Method Area)中。实际运行时,虚拟机会执行方法区内的代码。 Jav
阅读全文
摘要:前言 ORM框架:对象关系映射 object relational mapping 半自动ORM映射工具(自己编写sql语句) Hibernater属于全自动 映射规则:数据库表 > 类 | 表字段 > 类的属性 | 表数据 > 对象 JDBC操作数据库 public class JDBCTest
阅读全文
摘要:前言 SpringAOP面向切面编程是通过预编译方式和运行其动态代理,实现在不修改源代码的情况下给程序动态统一添加功能的一种技术,是OOP面向对象编程的有效补充。利用AOP技术将日志记录,性能统计,安全控制,事务处理,异常处理等代码从业务逻辑代码中划分出来,通过对这些行为的分离,可以将它们独立到非指
阅读全文
摘要:前言 Spring容器 中一个非常重要的概念: BeanDefinition 注:本文springboot、spring版本如下图 Spring容器的强大之处:获取对象时,不需要我们手工主动new对象,完全交给Spring容器管理。 Spring 将管理的对象称之为 Bean,容器会先实例化 Bea
阅读全文
摘要:RDB 文件是将某一时刻的内存数据保存成一个文件,而 AOF 日志则会记录接收到的所有写操作。 AOF 重写函数与触发时机 首先,实现 AOF 重写的函数是 rewriteAppendOnlyFileBackground,它是在aof.c文件中实现的。在这个函数中,会调用 fork 函数创建一个 A
阅读全文
摘要:最近想着再重新回顾下Tomcat,记得刚学java那时候就是从tomcat搭建启动服务开始的。 找了一下感觉SoyWang总结的Tomcat特别适合大家的借鉴学习,这里就把其中一些未讲解到的地方稍微记录一下,有助于更加熟悉原理: 勿忘初心,进无止尽! (cnblogs.com) 本机环境: Tomc
阅读全文
摘要:Tomcat 或者 Jetty 就是一个“HTTP 服务器 + Servlet 容器”,我们也叫它们 Web 容器。 Tomcat 和 Jetty 算是一个轻量级的应用服务器。 HTTP 的本质 HTTP协议是浏览器与服务器之间的数据传送协议。作为应用层协议,HTTP 是基于 TCP/IP 协议来传
阅读全文
摘要:前言 maven官网: Maven – Welcome to Apache Maven 菜鸟教程: Maven 教程 | 菜鸟教程 (runoob.com) Maven仓库: Maven Repository: Search/Browse/Explore (mvnrepository.com) 常见
阅读全文
摘要:前言 maven官网: Maven – Welcome to Apache Maven 菜鸟教程: Maven 教程 | 菜鸟教程 (runoob.com) Maven仓库: Maven Repository: Search/Browse/Explore (mvnrepository.com) Ma
阅读全文
摘要:前言 maven官网: Maven – Welcome to Apache Maven 菜鸟教程: Maven 教程 | 菜鸟教程 (runoob.com) Maven仓库: Maven Repository: Search/Browse/Explore (mvnrepository.com) 本机
阅读全文
摘要:前言 当下主流的服务注册与发现的解决方案,主要有两种: 应用内注册与发现:注册中心提供服务端和客户端的 SDK,业务应用通过引入注册中心提供的 SDK,通过 SDK 与注册中心交互,来实现服务的注册和发现。 应用外注册与发现:业务应用本身不需要通过 SDK 与注册中心打交道,而是通过其他方式与注册中
阅读全文
摘要:本地环境 dubbo版本:Dubbo3.0.0 本地开发工具:IDEA 操作系统:Windows 本地zookeeper的安装启动这里我就不具体讲述了:(所有安装步骤都差不多:下载-环境配置-修改启动配置-启动软件) 下为2篇各操作系统下安装zookeeper单机版的教程:(37条消息) windo
阅读全文
摘要:前面讲述过Dubbo微服务框架的整体组件情况: 从0到微服务-9 Dubbo框架中的微服务组件 - chch213 - 博客园 (cnblogs.com) 接下来,我们从Dubbo源码分析熟悉下微服务框架的-RPC框架。 Dubbo官网: 文档 | Apache Dubbo Dubbo的github
阅读全文
摘要:前面我们讲述了微服务架构一些常见的组成部件: 接下来,我们具体以Dubbo框架为例来具体讲解下微服务的组成部件: 其他常见的RPC框架可以参考学习如下文章: 这六种微服务RPC框架,你知道几个? - 知乎 (zhihu.com) 服务发布与引用服务发布与引用的三种常用方式:RESTful API、X
阅读全文
摘要:微服务架构常见的组成部件: 接下来,我们具体学习下微服务治理内容: 单体应用改造为微服务架构后,服务调用由本地调用变成远程调用RPC,服务消费者 A 需要通过注册中心去查询服务提供者 B 的地址,然后发起调用,这个看似简单的过程就可能会遇到下面几种情况,比如: 注册中心宕机; 服务提供者 B 有节点
阅读全文
摘要:微服务架构常见的组成部件: 接下来,我们具体学习下微服务追踪内容: 简单理解下:其实不光微服务,之前的单体应用也有追踪系统,就是说服务提供者本身出现了问题或者服务之间调用失败,我们怎么样快速的定位到在哪个环节出现问题,这就是我们今天要学习的服务追踪系统。 服务追踪的作用 快速定位请求失败原因 优化系
阅读全文
摘要:微服务架构常见的组成部件: 接下来,我们先具体学习下如何监控微服务的调用: 与单体应用相比,在微服务框架下,一次用户请求调用会因为服务化拆分后,变成多个不同服务之间的相互作用,这也就需要对拆分后的每个服务都监控起来。针对微服务监控调用,我们需要搞清楚记这个问题: 监控的对象是什么? 具体监控哪些指标
阅读全文
摘要:微服务架构常见的组成部件: 接下来,我们先具体学习下如何实现RPC远程调用: 前面我们讲了服务提供者和服务消费者之间通过桥梁建立联系-注册中心。那么,我们想象一下一次微信语音通话的过程: A通讯录找到B 》》 呼叫B 》》 B接到语音通话提示 》》B 不方便接听 》》A一直等待 》》 超过时间自动挂
阅读全文
摘要:前面小节,我们简单了解了微服务架构以及几个常见的组成部件: 前面也有简单讲解过注册中心的概念,接下来,我们再具体学习下: 一、服务的注册与发现 这一部分内容应该也是微服务中比较重要的。说直白点:服务提供者启动服务贡献接口,作为消费者,我去哪里找这个接口用呢?并且这个接口我怎么知道可不可用呢?就需要有
阅读全文
摘要:前面小节,我们简单了解了微服务架构以及几个常见的组成部件: 接下来,我们先具体学习下: 一、服务的定义、服务的发布与订阅 服务概念简单来说,就是这个服务的接口名是什么?调用这个服务需要传递哪些参数?接口的返回值是什么类型?以及一些其他接口描述信息。 最常见的服务发布和引用的方式有三种:RESTful
阅读全文
摘要:上一节简单的了解下单体应用与微服务之间的一些关系。接下来我们就详细初步了解下微服务构架。 一、服务调用的基本组件 1、服务定义: 简单理解下,就是作为服务提供者到底怎么的方式提供给消费者调用,api接口?xml报文? 以api接口为例,需要提供一份在线文档能够让调用者知道:调用你的接口我需要做什么?
阅读全文
摘要:通过学习,我们争取达到从0到微服务,到学到放弃 学习微服务之前,我们要先熟悉下单体应用。估计所有从事过单体应用开发的小伙伴们应该都有很深的阴影吧 一、单体应用架构-微服务架构 单体应用:所有整合在一个war包,要行都行,要挂都挂(体量大部署效率低,开发成本高,容错性弱化,开发易上手) 微服务:服务拆
阅读全文
摘要:Redis作为键值对内存数据,那么我们怎么访问数据库?回想之前访问mysql数据库的流程:数据库连接-预编译-访问数据,针对公共方法提取成配置类。那么Redis也同样,需要先获取连接对象才能做数据的增删改查。 那么这个对象-RedisTemplate 那怎么配置和使用的? 一、Jedis连接方式配置
阅读全文
摘要:执行数据插入数据操作时候,新增成功,除了返回插入数据条数,有些场景下我们更希望返回数据的主键id,便于进一步处理逻辑。相比再查询一次获取主键,这样效率更快。 列举2种主键的不同配置: 1、主键自增 <!--新增信息,并拿到新增信息的表主键信息。 新增数据,得到主键的外层写法没什么特别,跟普通的ins
阅读全文
摘要:redis database内存快照 一、RDB创建的入口函数和触发时机 源码文件:rdb.c 和 rdb.h int rdbSaveBackground(char *filename, rdbSaveInfo *rsi); Redis的bgsave命令 int rdbSaveToSlavesSoc
阅读全文
摘要:reactor模型应该是redis一道靓丽的风景点,也是面试经常提到的一部分内容。我觉得主要从2方面解答即可:1、reactor模型是什么? 2、redis如何与reactor模型相关联? 一、Reactor模型 Reactor模型就是网络服务器端用来处理高并发网络IO请求的一种编程模型。 不同请求
阅读全文
摘要:一、pom.xml依赖,本文基于2.5.1版本进行源码分析 <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-redis --><dependency> <groupId
阅读全文
摘要:一、前言: 有序集合Sorted Set:底层数据结构跳表+哈希表 typedef struct zset { dict *dict; 哈希表 --哈希表高效支持单点查询 zskiplist *zsl; 跳表 --跳表高效支持范围查询 } zset; 源码文件:t_zset.c-各种操作实现 ser
阅读全文
摘要:问题:IDEA工具中点击下载源码download sources报错 报错信息: Sources not found for: io.springfox:springfox-spring-web:3.0.0 解决方案: 在pom.xml依赖文件同级目录下执行mvn命令: mvn dependency
阅读全文
摘要:Redis作为一款内存数据库,解决内存性能问题就显得尤为重要。作为Hash表这种应用数据结构,当数据量大的时候,就会出现2大问题:哈希冲突和rehash开销 一、什么是哈希冲突以及redis如何解决哈希冲突 哈希表是基于数组的一种存储方式.它主要由哈希函数和数组构成。 当要存储一个数据的时候,首先用
阅读全文
摘要:1、Redis前言 C语言的传统的字符串(以’\0’结尾的字符数组)表示。 SDS提升字符串的操作效率,同时也可以保存二进制数据。因为传统C字符串符合ASCII编码,这种编码的操作的特点就是:遇零则止 。即,当读一个字符串时,只要遇到’\0’结尾,就认为到达末尾,就忽略’\0’结尾以后的所有字符。因
阅读全文
摘要:上一次我们大概熟悉了一下redis的目录结构,里面提到了服务启动相关的源码主要包含如下两个文件: 找到server.c文件中的main函数开始了解服务的启动过程: 源码解析: 1、主流程: /* Global vars */ // 全局变量 struct redisServer server; /*
阅读全文
摘要:从事开发这么多年,给我最大的感触就是学习任何一个新技术还是要从底层源码开始,这样才能遇到问题知道怎么去分析解决,一直想记录下Redis的心得,现在就让开始redis之旅吧: Redis源码版本:5.0.14 一、redis是什么? 非关系型数据库-NOSQL,K-V存储系统,全称:remote di
阅读全文