摘要:
生产者和消费者问题是线程模型中老生常谈的问题,也是面试中经常遇到的问题。今天我们就盘它!!! 一、生产者消费者模型 何为生产者消费者模型呢? 生产者消费者模型是由两类线程构成: 生产者线程:“生产”产品,并把产品放到一个缓冲区里; 消费者线程:“消费”产品。 如图所示: 小贴士: 生产者持续生产,直 阅读全文
posted @ 2022-06-07 20:52
Maple~
阅读(247)
评论(0)
推荐(0)
摘要:
前面我们说过了进程的调度算法,今天我们继续来盘内存页面的置换算法,给你整的明明白白的🤪🤪🤪。 内存页面置换算法主要有下面这么几种: 最佳页面置换算法(OPT) 先进先出置换算法(FIFO) 最近最久未使用的置换算法(LRU) 时钟页面置换算法(Lock) 最不常用置换算法(LFU) 最佳页面置 阅读全文
posted @ 2022-06-07 20:52
Maple~
阅读(180)
评论(0)
推荐(0)
摘要:
在讲解具体的磁盘调度算法之前,我们先看看磁盘的结构,如下图所示: 磁盘调度算法的目的很简单,就是为了提高磁盘的访问性能,一般是通过优化磁盘的访问请求顺序来做到的。寻道的时间是磁盘访问最耗时的部分,如果请求顺序优化的得当,必然可以节省一些不必要的寻道时间,从而提高磁盘的访问性能。 为了下面的讲解,我们 阅读全文
posted @ 2022-06-07 20:51
Maple~
阅读(507)
评论(0)
推荐(0)
摘要:
进程的概念 试想一下这样的场景:我们编写好的代码是怎么运行起来的呢? 我们编写好的代码只是一个存储在硬盘的静态文件,通过编译后就会生成二进制可执行文件,当我们运行这个可执行文件后,它会被装载到内存中,接着 CPU 会执行程序中的每一条指令,那么这个运行中的程序,就被称为「进程」。 那进程的定义就是: 阅读全文
posted @ 2022-06-07 20:51
Maple~
阅读(154)
评论(0)
推荐(0)
摘要:
前言 进程调度算法也称 CPU 调度算法,当 CPU 空闲时,操作系统就从就绪队列中按照一定的算法选择某个就绪状态的进程,并给其分配 CPU。通常以下几种情况会发生进程的调度: 当进程从运行状态转到等待状态; 当进程从运行状态转到就绪状态; 当进程从等待状态转到就绪状态; 当进程从运行状态转到终止状 阅读全文
posted @ 2022-06-07 20:51
Maple~
阅读(724)
评论(0)
推荐(0)
摘要:
JMM 内存模型 为什么需要内存模型? 我们知道 CPU 的运算速度是很快的,与内存也有几个数量级上的差距,所以一般现代计算机系统都会在内存与 CPU 之间加入一层或多层读写速度尽可能接近 CPU 运算速度的高速缓存来作为缓冲。 将运算需要使用的数据复制到缓存中,让运算能快速进行,当运算结束后再从缓 阅读全文
posted @ 2022-06-07 20:49
Maple~
阅读(39)
评论(0)
推荐(0)
摘要:
吊打面试官之 ThreadLocal 详解 ThreadLocal 的基本原理 我们先看一下 ThreadLocal 的简单使用: ThreadLocal<String> localName = new ThreadLocal(); localName.set("帅枫"); String name 阅读全文
posted @ 2022-06-07 20:48
Maple~
阅读(61)
评论(0)
推荐(0)
摘要:
为什么要有 happens-before happe-before 是 JMM 最核心的概念,对应 Java 程序员来说,理解 happens-before 是理解 JMM 的关键。 从 JMM 设计者的角度来看,可见性和有序性其实是互相矛盾的两点: 一方面,对于程序员来说,我们希望内存模型易于理解 阅读全文
posted @ 2022-06-07 20:48
Maple~
阅读(73)
评论(0)
推荐(0)
摘要:
一文带你撸懂AQS、ReentrantLock原理及源码 一、前言 Java中的大部分同步类(Lock、Semaphore、ReentrantLock等)都是基于AbstractQueuedSynchronizer(简称为AQS)实现的。AQS是一种提供了原子式管理同步状态、阻塞和唤醒线程功能以及队 阅读全文
posted @ 2022-06-07 20:48
Maple~
阅读(157)
评论(0)
推荐(0)
摘要:
题目:起两个线程交替打印0~100的奇偶数 这个问题大家可能在面试的时候遇到过,虽然学过多线程相关的知识,可能当时一时半会还写不出来,现在就让我带大家写一遍吧! 方法一 首先,我们可以观察到打印的是奇数和偶数,那么我们就可以通过这个特点去写代码。假如我们有一个全局变量 count,当 count 等 阅读全文
posted @ 2022-06-07 20:47
Maple~
阅读(1794)
评论(0)
推荐(0)
摘要:
1. ZooKeeper 安装和使用 1.1. 使用Docker 安装 zookeeper a.使用 Docker 下载 ZooKeeper docker pull zookeeper:3.5.8Copy to clipboardErrorCopied b.运行 ZooKeeper docker r 阅读全文
posted @ 2022-06-07 20:45
Maple~
阅读(178)
评论(0)
推荐(0)
摘要:
1. 什么是ZooKeeper ZooKeeper 由 Yahoo 开发,后来捐赠给了 Apache ,现已成为 Apache 顶级项目。ZooKeeper 是一个开源的分布式应用程序协调服务器,其为分布式系统提供一致性服务。其一致性是通过基于 Paxos 算法的 ZAB 协议完成的。其主要功能包括 阅读全文
posted @ 2022-06-07 20:45
Maple~
阅读(51)
评论(0)
推荐(0)
摘要:
1. ZooKeeper 介绍 1.1. ZooKeeper 由来 正式介绍 ZooKeeper 之前,我们先来看看 ZooKeeper 的由来,还挺有意思的。 下面这段内容摘自《从 Paxos 到 ZooKeeper 》第四章第一节,推荐大家阅读一下: ZooKeeper 最早起源于雅虎研究院的一 阅读全文
posted @ 2022-06-07 20:45
Maple~
阅读(46)
评论(0)
推荐(0)
摘要:
概述 SpringMVC 是一种基于 Java 的实现 MVC 设计模型的请求驱动类型的轻量级 Web 框架,属于 Spring FrameWork 的后续产品,已经融合在 Spring Web Flow 里面。 Spring 框架提供了构建 Web 应用程序的全功 能 MVC 模块。使用 Spri 阅读全文
posted @ 2022-06-07 20:44
Maple~
阅读(116)
评论(0)
推荐(0)
摘要:
🍖 SpringBoot 集成 Redis(Lettuce) 1. Jedis 和 Lettuce Jedis 和 Lettuce 是 Java 操作 Redis 的客户端。在 Spring Boot 1.x 版本默认使用的是 jedis ,而在 Spring Boot 2.x 版本默认使用的就是 阅读全文
posted @ 2022-06-07 20:41
Maple~
阅读(357)
评论(0)
推荐(0)
摘要:
📧 异步、定时、邮件任务 在我们的工作中,常常会用到异步处理任务,比如我们在网站上发送邮件,后台会去发送邮件,此时前台会造成响应不动,直到邮件发送完毕,响应才会成功,所以我们一般会采用多线程的方式去处理这些任务。还有一些定时任务,比如需要在每天凌晨的时候,分析一次前一天的日志信息。还有就是邮件的发 阅读全文
posted @ 2022-06-07 20:41
Maple~
阅读(134)
评论(0)
推荐(0)
摘要:
🎨 自定义 starter 💡 分析完了源码以及自动装配的过程,我们可以尝试自定义一个启动器 1. 说明 启动器模块是一个 空 jar 文件,只用来做依赖导入,我们需要专门来写一个自动配置模块,启动器依赖自动配置。使用时只需要引入启动器 starter 即可。 命名归约: 官方命名: 前缀:sp 阅读全文
posted @ 2022-06-07 20:41
Maple~
阅读(112)
评论(0)
推荐(0)
摘要:
⏰ SpringBoot 前后端数据交互的几种常用方式 1. 用于获取参数的几种常用注解 @PathVariable: 获取 URL 后所携带的参数,即 url/{param} 这种形式。也就是一般我们使用的 GET,DELETE,PUT方法会使用到的 @RequestParam:一般我们使用该注解 阅读全文
posted @ 2022-06-07 20:40
Maple~
阅读(5582)
评论(0)
推荐(1)
摘要:
📠 SpringBoot 与数据访问 1. SpringData 简介 对于数据访问层,无论是 SQL (关系型数据库) 还是 NoSql (非关系型数据库),Spring Boot 底层都是采用 Spring Data 的方式进行统一处理。 Spring Boot 底层都是采用 Spring D 阅读全文
posted @ 2022-06-07 20:40
Maple~
阅读(254)
评论(0)
推荐(0)
摘要:
🍳 Web开发实战案例:员工信息 CRUD 本案例采用 SpringBoot + Thymeleaf,没有使用 Mybatis,全程模拟数据。 只是一个小 Demo,很多功能都没有完善,只实现了最基本的 CRUD 和登录,登录的密码写死了是123456,用户名随意。 由于实际开发中一般不使用 Th 阅读全文
posted @ 2022-06-07 20:40
Maple~
阅读(239)
评论(0)
推荐(0)
摘要:
📄 日志 1. 日志框架 写了一个统一的接口层,日志门面(日志的一个抽象层) 给项目中导入具体的日志实现就行了;我们的日志框架都是实现的抽象层; 市面上的日志框架; JUL、JCL、Jboss-logging、logback、log4j、log4j2、slf4j.... 日志门面 (日志的抽象层) 阅读全文
posted @ 2022-06-07 20:39
Maple~
阅读(602)
评论(0)
推荐(0)
摘要:
📥 Spring Boot 与 Web 开发 1. 简介 Web 开发过程简介: 创建 SpringBoot 应用,选中我们需要的模块 SpringBoot 已经默认将这些场景配置好了,只需要在配置文件中指定少量配置就可以运行起来 编写业务代码 2. SpringBoot 静态资源处理 ① 静态资 阅读全文
posted @ 2022-06-07 20:39
Maple~
阅读(241)
评论(0)
推荐(0)
摘要:
1. @SpringBootApplication 这里先单独拎出@SpringBootApplication 注解说一下,虽然我们一般不会主动去使用它。 Guide 哥:这个注解是 Spring Boot 项目的基石,创建 SpringBoot 项目之后会默认在主类加上。 @SpringBootA 阅读全文
posted @ 2022-06-07 20:38
Maple~
阅读(70)
评论(0)
推荐(0)
摘要:
🔍 配置文件 1. 配置文件 SpringBoot 使用一个全局的配置文件,配置文件名是固定的: application.properties 语法结构 :key = value application.yml 语法结构 :key:空格 value 📜 标记语言: 以前的配置文件;大多都使用的是 阅读全文
posted @ 2022-06-07 20:38
Maple~
阅读(1507)
评论(0)
推荐(0)
摘要:
每次问到 Spring Boot, 面试官非常喜欢问这个问题:“讲述一下 SpringBoot 自动装配原理?”。 我觉得我们可以从以下几个方面回答: 什么是 SpringBoot 自动装配? SpringBoot 是如何实现自动装配的?如何实现按需加载? 如何实现一个 Starter? 篇幅问题, 阅读全文
posted @ 2022-06-07 20:38
Maple~
阅读(51)
评论(0)
推荐(0)
摘要:
🚪 Spring Boot 入门 1. Spring Boot 简介 开发一个web应用,从最初开始接触Servlet结合Tomcat, 跑出一个Hello Wolrld程序,是要经历特别多的步骤;后来就用了框架Struts,再后来是SpringMVC,到了现在的SpringBoot,过一两年又会 阅读全文
posted @ 2022-06-07 20:36
Maple~
阅读(63)
评论(0)
推荐(0)
摘要:
🚇 Spring IoC 容器源码分析 Spring 最重要的概念是 IOC 和 AOP,本篇文章其实就是要带领大家来分析下 Spring 的 IOC 容器。既然大家平时都要用到 Spring,怎么可以不好好了解 Spring 呢?阅读本文并不能让你成为 Spring 专家,不过一定有助于大家理解 阅读全文
posted @ 2022-06-07 20:21
Maple~
阅读(29)
评论(0)
推荐(0)
摘要:
正文 通常来说,如果问Spring内部如何解决循环依赖,一定是单默认的单例Bean中,属性互相引用的场景。 比如几个Bean之间的互相引用: 甚至自己“循环”依赖自己: 先说明前提:原型(Prototype)的场景是不支持循环依赖的,通常会走到AbstractBeanFactory类中下面的判断,抛 阅读全文
posted @ 2022-06-07 20:21
Maple~
阅读(59)
评论(0)
推荐(0)
摘要:
1. 什么是事务? 事务是逻辑上的一组操作,要么都执行,要么都不执行。 Guide 哥:大家应该都能背上面这句话了,下面我结合我们日常的真实开发来谈一谈。 我们系统的每个业务方法可能包括了多个原子性的数据库操作,比如下面的 savePerson() 方法中就有两个原子性的数据库操作。这些原子性的数据 阅读全文
posted @ 2022-06-07 20:20
Maple~
阅读(43)
评论(0)
推荐(0)
摘要:
源码解析 考虑到直接看源码是一个非常枯燥无味的过程,而且 Spring 的代码设计非常优秀规范,这会导致在翻开源码时,类与类之间的跳跃会非常频繁,不熟悉的同学可能直接晕菜,所以每一个重要流程前我都会先准备一个流程图,建议大家先通过流程图了解一下整体步骤,然后再对代码硬撸,这样能够降低不少难度。 相信 阅读全文
posted @ 2022-06-07 20:20
Maple~
阅读(635)
评论(0)
推荐(0)
摘要:
🍧 Spring 简介 + IoC 详解 1. Spring 简介 我们一般说 Spring 框架指的都是 Spring Framework,它是很多模块的集合,使用这些模块可以很方便地协助我们进行开发。下图对应的是 Spring4.x 版本。目前最新的5.x版本中 Web 模块的 Portlet 阅读全文
posted @ 2022-06-07 20:20
Maple~
阅读(391)
评论(0)
推荐(1)
摘要:
1. 引言 “请你描述下 Spring Bean 的生命周期?”,这是面试官考察 Spring 的常用问题,可见是 Spring 中很重要的知识点。 我之前在准备面试时,去网上搜过答案,大多以下图给出的流程作为答案。 但是当我第一次看到该图时,就产生了很多困扰,“Aware,BeanPostProc 阅读全文
posted @ 2022-06-07 20:19
Maple~
阅读(71)
评论(0)
推荐(0)
摘要:
控制反转(IoC)和依赖注入(DI) IoC(Inversion of Control,控制翻转) 是Spring 中一个非常非常重要的概念,它不是什么技术,而是一种解耦的设计思想。它的主要目的是借助于“第三方”(Spring 中的 IOC 容器) 实现具有依赖关系的对象之间的解耦(IOC容易管理对 阅读全文
posted @ 2022-06-07 20:19
Maple~
阅读(76)
评论(0)
推荐(0)
摘要:
🐸 Spring AOP 详解 1. 什么是 AOP AOP 即 Aspect-Oriented Programming: 面向切面编程 能够 将那些与业务无关,却为业务模块所共同调用的逻辑或责任(例如事务处理、日志管理、权限控制等)封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未 阅读全文
posted @ 2022-06-07 20:18
Maple~
阅读(441)
评论(0)
推荐(0)
摘要:
一、BeanFactory BeanFactory是一个接口,它是Spring中工厂的顶层规范,是SpringIoc容器的核心接口,它定义了getBean()、containsBean()等管理Bean的通用方法。Spring的容器都是它的具体实现如: DefaultListableBeanFact 阅读全文
posted @ 2022-06-07 20:18
Maple~
阅读(59)
评论(0)
推荐(0)
摘要:
基础概念 1. 什么是事务传播行为? 事务传播行为用来描述由某一个事务传播行为修饰的方法被嵌套进另一个方法的时事务如何传播。 用伪代码说明: public void methodA(){ methodB(); //doSomething } @Transaction(Propagation=XXX) 阅读全文
posted @ 2022-06-07 20:18
Maple~
阅读(1438)
评论(0)
推荐(0)
摘要:
我们知道缓存雪崩、击穿、穿透是缓存异常最常见的三个问题,一旦这三个问题发生,会导致大量的请求积压到数据库层。如果请求的并发量很大,就会导致数据库宕机或是故障,这肯定是我们不能容忍的。今天我就带你彻底剖析这三个问题,让你知道这三个问题的表现、诱发原因以及解决方法,废话不多说,直接开始。 缓存雪崩 缓存 阅读全文
posted @ 2022-06-07 20:14
Maple~
阅读(56)
评论(0)
推荐(0)
摘要:
一、为什么需要哨兵机制 我们现在的 Redis 一般都是以主从库集群的方式部署的,在这个模式下,如果从库发生了故障,客户端可以继续向主库或其他从库发送请求,进行相关的操作,但是如果主库发生故障了,那就直接会影响到从库的同步,因为从库没有相应的主库可以进行数据复制操作了。 而且,如果客户端发送的都是读 阅读全文
posted @ 2022-06-07 20:13
Maple~
阅读(44)
评论(0)
推荐(0)
摘要:
在说旁路缓存之前,我们先说一下redis处理缓存的两种情况。 一、Redis 缓存处理请求的两种情况 把 Redis 用作缓存时,我们会把 Redis 部署在数据库的前端,业务应用在访问数据时,会先查询 Redis 中是否保存了相应的数据。此时,根据数据是否存在缓存中,会有两种情况。 缓存命中:Re 阅读全文
posted @ 2022-06-07 20:13
Maple~
阅读(513)
评论(0)
推荐(0)
摘要:
前言 我们之前在哨兵机制中讲过了(如果没有看过这篇文章的,必须先看这篇文章之后再来看本篇),哨兵可以实现主从库的自动切换。通过部署多个实例,就形成了一个哨兵集群,哨兵集群中的多个实例共同判断,可以降低对主库下线的误判率。 但是你有没有想过这样一个问题:如果有哨兵实例在运行时发生了故障,主库还能正常切 阅读全文
posted @ 2022-06-07 20:13
Maple~
阅读(51)
评论(0)
推荐(0)
摘要:
BloomFilter概念及原理 布隆过滤器(英语:Bloom Filter)是 1970 年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。主要用于判断一个元素是否在一个集合中。 布隆过滤器的原理是,当⼀个元素被加⼊集合时,通过K个散列函数将这个元素映射成⼀个位数组中的K个点,把 阅读全文
posted @ 2022-06-07 20:09
Maple~
阅读(58)
评论(0)
推荐(0)
摘要:
前面我们学习 Redis 中的5中基础数据类型,今天我又来了,没错,就是 Redis 中剩余的3中高级数据类型,废话不多说,我们开始吧。 Bitmap Bitmap 翻译过来就是位图,那它有什么作用呢? 我们首先想这么一个场景,二值状态统计,这个二值状态就是指集合元素的取值就只有0和1两种。比如:在 阅读全文
posted @ 2022-06-07 20:09
Maple~
阅读(87)
评论(0)
推荐(0)
摘要:
经常听到很多人讨论,关于「把 Redis 当作队列来用是否合适」的问题。 有些人表示赞成,他们认为 Redis 很轻量,用作队列很方便。也些人则反对,认为 Redis 会「丢」数据,最好还是用「专业」的队列中间件更稳妥。 究竟哪种方案更好呢? 今天我就和你聊一聊把 Redis 当作队列,究竟是否合适 阅读全文
posted @ 2022-06-07 20:08
Maple~
阅读(330)
评论(0)
推荐(0)
摘要:
1. 概述 在网络中传递的数据总是具有相同的类型:字节。 这些字节流动的细节取决于网络传输,它是一个帮我们抽象底层数据传输机制的概念,我们不需要关心字节流动的细节,只需要确保字节被可靠的接收和发送。 当我们使用 Java 网络编程时,可能会接触到多种不同的网络 IO 模型,如 NIO,BIO (OI 阅读全文
posted @ 2022-06-07 20:07
Maple~
阅读(178)
评论(0)
推荐(0)
摘要:
1. EventLoop 事件循环 事件循环正如它的名字,处于一个循环之中。我们以前在编写网络程序的时候,会使我们处理连接的逻辑 处于一个死循环之中,这样可以不断的处理客户端连接。 下面的代码显示了典型的 EventLoop 逻辑: while (!terminated) { // 阻塞直到事件可以 阅读全文
posted @ 2022-06-07 20:06
Maple~
阅读(540)
评论(0)
推荐(0)
摘要:
1. 什么是 TCP 粘包/拆包 在 RPC 框架中,TCP 粘包和拆包问题是必须解决一个问题,因为 RPC 框架中,各个微服务相互之间都是维系了一个 TCP 长连接,比如 Dubbo 就是一个全双工的长连接。由于微服务往对方发送信息的时候,所有的请求都是使用的同一个连接,这样就会产生粘包和拆包的问 阅读全文
posted @ 2022-06-07 20:06
Maple~
阅读(1147)
评论(0)
推荐(0)
摘要:
1. Netty 架构 传输服务 支持 BIO 和 NIO 容器集成 支持 OSGI、JBossMC、Spring、Guice 容器 协议支持 HTTP、Protobuf、二进制、文本、WebSocket 等一系列常见协议都支持。 还支持通过实行编码解码逻辑来实现自定义协议 核心:可扩展事件模型、通 阅读全文
posted @ 2022-06-07 20:06
Maple~
阅读(159)
评论(0)
推荐(0)
摘要:
1. 什么是 Codec 从网络传输的角度来讲,数组总是以字节的格式在网络之中进行传输 每当源主机发送数据到目标主机时,数据会从本地格式被转换成字节进行传输,这种转换被称为编码,编码的逻辑由 编码器 处理。 每当目标主机接受来自源主机的数据时,数据会从字节转换为我们需要的格式,这种转换被称为解码,解 阅读全文
posted @ 2022-06-07 20:05
Maple~
阅读(1033)
评论(0)
推荐(0)
摘要:
1. 核心组件概述 下面枚举所有的 Netty 应用程序的基本构建模块(核心组件),包括客户端和服务器: Bytebuf(字节容器) Bootstrap 和 ServerBootstrap (启动引导类) Channel(网络操作抽象类) EventLoop (事件循环) ChannelHandle 阅读全文
posted @ 2022-06-07 20:05
Maple~
阅读(360)
评论(0)
推荐(0)
摘要:
1. 什么是心跳机制 HeartBeat 在 TCP 长连接 keepAlive 的应用场景下,client 端一般不会主动关闭它们之间的连接,Client 与 Server 之间的连接如果一直不关闭的话,随着客户端连接越来越多,Server 早晚有扛不住的时候,这时候 Server 端需要采取一些 阅读全文
posted @ 2022-06-07 20:05
Maple~
阅读(1019)
评论(0)
推荐(0)
摘要:
正如我们先前所指出的,网络数据的基本单位永远是 byte(字节)。Java NIO 提供 ByteBuffer 作为字节的容器,但这个类是过于复杂,有点难以使用。 Netty 中 ByteBuffer 的替代是 ByteBuf,一个强大的实现,解决 JDK 的 API 的限制,以及为网络应用程序开发 阅读全文
posted @ 2022-06-07 20:04
Maple~
阅读(6679)
评论(0)
推荐(1)
摘要:
我们在上一章研究的 bytebuf 是一个容器用来“包装”数据。在本章我们将探讨这些容器如何通过应用程序来移动,传入和传出,以及他们的内容是如何处理的。 本章主要内容 Channel ChannelHandler ChannePipeline ChannelHandlerContext 1. Cha 阅读全文
posted @ 2022-06-07 20:04
Maple~
阅读(164)
评论(0)
推荐(0)
摘要:
在了解 ChanelPipeline,EventLoop 等组件之后,我们需要将这些组件组织起来,使其成为一个可运行的应用程序。 这里就需要引导 Boostrap 相关组件了。 1. Boostrap 类 引导类的层次结构包括一个抽象的父类和两个具体的引导子类: 服务端引导类 ServerBoots 阅读全文
posted @ 2022-06-07 20:03
Maple~
阅读(223)
评论(0)
推荐(0)
摘要:
1. BIO ① 传统的阻塞式通信流程 早期的 Java 网络相关的 API(java.net包) 使用 Socket(套接字)进行网络通信,不过只支持阻塞函数使用。 要通过互联网进行通信,至少需要一对套接字: 运行于服务器端的 Server Socket 运行于客户机端的 Client Socke 阅读全文
posted @ 2022-06-07 20:03
Maple~
阅读(145)
评论(0)
推荐(0)
摘要:
在本节中,我们将构建一个完整的的 Netty 客户端和服务器。 1. 导入 Netty 依赖 新建一个 Maven 项目,并导入 Netty 4.x 依赖: <dependencies> <dependency> <groupId>io.netty</groupId> <artifactId>net 阅读全文
posted @ 2022-06-07 20:03
Maple~
阅读(261)
评论(0)
推荐(0)
摘要:
MySQL索引优化与查询优化 索引我们都经常使用,但是你是否真正的搞懂了索引的正确使用方式呢?今天,我就带你好好看看索引的正确使用姿势以及优化。 1、数据准备 在正式开始讲解之前,我们先准备一些演示的数据,正所谓磨刀不误砍柴工嘛! 学员表 插 50万 条, 班级表 插 1万 条。 步骤1:建表 CR 阅读全文
posted @ 2022-06-07 20:02
Maple~
阅读(188)
评论(0)
推荐(0)
摘要:
MySQL中保证数据不丢失主要是binlog和redo log 的功劳,下面我们就看看MySQL是怎么保证这两种日志不丢失的。 binlog的写入机制 binlog 的写入逻辑比较简单:事务执行过程中,先把日志写到 binlog cache,事务提交的时候,再把 binlog cache 写到 bi 阅读全文
posted @ 2022-06-07 20:02
Maple~
阅读(331)
评论(0)
推荐(0)
摘要:
创建数据库 create database 数据库名; 查看数据库 show databases; 选择数据库 use 数据库名; 删除数据库 drop database 数据库名; 清空数据库 truncate 数据库名; 创建表 create table 表名(属性名1 数据类型 ,属性名2 数 阅读全文
posted @ 2022-06-07 20:01
Maple~
阅读(54)
评论(0)
推荐(0)
摘要:
1. 查看存储引擎 查看mysql提供什么存储引擎: show engines; show engines \G; 显式如下: *************************** 1. row *************************** Engine: InnoDB Support: 阅读全文
posted @ 2022-06-07 20:01
Maple~
阅读(39)
评论(0)
推荐(0)
摘要:
废话不多说,今天我们来讲解 MySQL 的事务吧 😃😃😃 一、事务的概念 那到底何为事务呢? 我们把需要保证原子性 、隔离性、一致性和持久性的一个或多个数据库操作称之为一个事务 。 它大致分为如下几个状态: 活动的(active) 事务对应的数据库操作正在执行过程中时,我们就说该事务处在活动的 阅读全文
posted @ 2022-06-07 20:01
Maple~
阅读(43)
评论(0)
推荐(0)
摘要:
我们都知道,MySQL 是基于磁盘存储的数据库,那我们每次查询一个页的记录时都得从磁盘加载整个页进内存然后读取呢,那这样既不是很慢。所以 MySQL 实现了一种叫做 Buffer Pool 的玩意,那 Buffer Pool 是啥玩意呢,我们接着往下看 🤩🤩🤩 一、Buffer Pool 其实 阅读全文
posted @ 2022-06-07 20:00
Maple~
阅读(82)
评论(0)
推荐(0)
摘要:
1. 数据库服务器的优化步骤 当我们遇到数据库调优问题的时候,该如何思考呢?这里把思考的流程整理成下面这张图。 整个流程划分成了观察(Show status) 和行动(Action) 两个部分。字母 S 的部分代表观察(会使 用相应的分析工具),字母 A 代表的部分是行动(对应分析可以采取的行动)。 阅读全文
posted @ 2022-06-07 20:00
Maple~
阅读(52)
评论(0)
推荐(0)
摘要:
1. 主从复制概述 1.1 如何提升数据库并发能力 此外,一般应用对数据库而言都是“ 读多写少”,也就说对数据库读取数据的压力比较大,有一个思路就是采用数据库集群的方案,做主从架构、进行读写分离,这样同样可以提升数据库的并发处理能力。但并不是所有的应用都需要对数据库进行主从架构的设置,毕竟设置架构本 阅读全文
posted @ 2022-06-07 19:59
Maple~
阅读(301)
评论(0)
推荐(0)
摘要:
自增id用完怎么办 MySQL 里有很多自增的 id,每个自增 id 都是定义了初始值,然后不停地往上加步长。虽然自然数是没有上限的,但是在计算机里,只要定义了表示这个数的字节长度,那它就有上限。比如,无符号整型 (unsigned int) 是 4 个字节,上限就是 \(2^{32}\)-1。 既 阅读全文
posted @ 2022-06-07 19:59
Maple~
阅读(183)
评论(0)
推荐(0)
摘要:
一、事务回滚的需求 我们说过事务需要保证原子性 ,也就是事务中的操作要么全部完成,要么什么也不做。但是偏偏有时候事务执行到一半会出现一些情况,比如: 情况一:事务执行过程中可能遇到各种错误,比如服务器本身的错误,操作系统错误,甚至是突然断电导致的错误。 情况二:程序员可以在事务执行过程中手动输入 R 阅读全文
posted @ 2022-06-07 19:58
Maple~
阅读(93)
评论(0)
推荐(0)
摘要:
不知道大家是否还记得事务的四大特性,现在我们回忆一下吧,持久性、一致性、隔离性、原子性。没错,我们今天讲的就是持久性。 一、啥是 redo log 我们想象有这么一个生产环境,就是如果我们只在内存的 Buffer Pool 中修改了页面,事务提交后突然发生了某个故障,导致内存中的数据都失效了,那么这 阅读全文
posted @ 2022-06-07 19:58
Maple~
阅读(1437)
评论(0)
推荐(0)
摘要:
上次我们讲了 MySQL 索引的底层原理,现在我们讲讲如何使用 MySQL 索引吧 一、索引的代价 空间上的代价 每建立一个索引都要为它建立一棵 B+ 树,每一棵 B+ 树的每一个节点都是一个数据页,一个页默认会占用 16KB 的存储空间,一棵很大的 B+ 树由许多数据页组 成,那可是很大的一片存储 阅读全文
posted @ 2022-06-07 19:55
Maple~
阅读(25)
评论(0)
推荐(0)
摘要:
一、第一个Mybatis项目 采用接口式编程 1. 创建maven工程并导包 可以使用maven在线下载依赖。 2. 创建数据库表和对应的 JavaBean 数据库表 CREATE TABLE `tbl_employee` ( `id` int(11) NOT NULL AUTO_INCREMENT 阅读全文
posted @ 2022-06-07 19:53
Maple~
阅读(261)
评论(0)
推荐(0)
摘要:
第一部分:自定义持久层框架 1.1 分析JDBC操作问题 public static void main(String[] args) { Connection connection = null; PreparedStatement preparedStatement = null; Result 阅读全文
posted @ 2022-06-07 19:52
Maple~
阅读(82)
评论(0)
推荐(0)
摘要:
一、第一部分 1、#{}和${}的区别是什么? ${}是 Properties 文件中的变量占位符,它可以用于标签属性值和 sql 内部,属于静态文本替换,比如${driver}会被静态替换为com.mysql.jdbc. Driver。 #{}是 sql 的参数占位符,MyBatis 会将 sql 阅读全文
posted @ 2022-06-07 19:52
Maple~
阅读(68)
评论(0)
推荐(0)
摘要:
Kafka之生产者与消费者 2.1 生产者 2.1.1 消息发送 2.1.1.1 数据生产流程解析 Producer创建时,会创建一个Sender线程并设置为守护线程。 生产消息时,内部其实是异步流程;生产的消息先经过拦截器->序列化器->分区器,然后将消息缓存在缓冲区(该缓冲区也是在Produce 阅读全文
posted @ 2022-06-07 19:51
Maple~
阅读(544)
评论(0)
推荐(1)
摘要:
Linux 的命令确实非常多,然而熟悉 Linux 的人从来不会因为 Linux 的命令太多而烦恼。因为我们仅仅只需要掌握常用命令,就完全可以驾驭 Linux。 接下来,让我们一起来看看都有那些常用的 Linux 命令吧! 一、文件目录操作 1. ls 命令 ls 命令不仅可以查看 linux 文件 阅读全文
posted @ 2022-06-07 19:51
Maple~
阅读(2931)
评论(0)
推荐(1)
摘要:
1.1 概念和基本架构 1.1.1 Kafka介绍 Kafka是最初由Linkedin公司开发,是一个分布式、分区的、多副本的、多生产者、多订阅者,基于 zookeeper 协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/nginx日志、访问日志,消息服务等等,Linkedin于20 阅读全文
posted @ 2022-06-07 19:50
Maple~
阅读(1224)
评论(0)
推荐(0)
摘要:
一、String的基本特征 一、String的基本特征 String:字符串,使用一对 “ “ 引起来表示。 String 声明为 final 的,不可被继承。 String 实现了 Serializable:表示字符串是支持序列化的;实现了Comparable接口:表示String可以比较大小。 阅读全文
posted @ 2022-06-07 19:49
Maple~
阅读(59)
评论(0)
推荐(0)
摘要:
JVM与Java体系结构 一、前言 大部分Java开发人员,除会在项目中使用到与Java平台相关的各种高精尖技术,对于Java技术的核心Java虚拟机了解甚少。 一、程序员如何看待上层框架 一些有一定工作经验的开发人员,打心眼里觉得SSM、微服务等上层技术才是重点,基础知识并不重要,这其实是一种本末 阅读全文
posted @ 2022-06-07 19:49
Maple~
阅读(58)
评论(0)
推荐(0)
摘要:
HotSpot的算法细节实现 一、根节点枚举 我们以可达性分析算法中从GC Roots集合找引用链这个操作作为介绍虚拟机高效实现的第一个例子。固定可作为GC Roots的节点主要在全局性的引用(例如常量或类静态属性)与执行上下文(例如栈帧中的本地变量表)中,尽管目标明确,但查找过程要做到高效并非一件 阅读全文
posted @ 2022-06-07 19:48
Maple~
阅读(122)
评论(0)
推荐(0)
摘要:
一、初识JVM规范 1、从三种角度认识JVM 1. JVM概述 JVM:Java Virtual Machine,也就是Java虚拟机,所谓虚拟机是指:通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的计算机系统。 JVM是通过软件来模拟Java字节码的指令集,是Java程序的运行环境 阅读全文
posted @ 2022-06-07 19:48
Maple~
阅读(132)
评论(0)
推荐(0)
摘要:
java常量池 概述 java 包括三种常量池,分别是 字符串常量池、Class 常量池(也叫常量池表)和运行时常量池。 字符串常量池(String Pool) String Pool 是 JVM 实例全局共享的,而 Runtime Constant Pool 是每个类都有一个。 JVM 用一个哈希 阅读全文
posted @ 2022-06-07 19:48
Maple~
阅读(787)
评论(0)
推荐(1)
摘要:
一、概述 字节码文件的跨平台性 Java语言:跨平台的语言 当Java源代码成功编译成字节码后,如果想在不同平台上运行,则无需再次编译。 这个优势已经不再那么吸引人了,Python、PHP、Perl、Ruby、Lisp等有强大的编译器。 跨平台似乎已经快成为一门语言必选的特性。 Java虚拟机:跨语 阅读全文
posted @ 2022-06-07 19:47
Maple~
阅读(51)
评论(0)
推荐(0)
摘要:
一、执行引擎概述 一、执行引擎概述 执行引擎是Java虚拟机核心的组成部分之一。 “虚拟机”是相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理机、缓存、指令集和操作系统层面上的,而虚拟机的执行引擎则是由软件自行实现的,因此可以不受物理条件制约地定制指令集和 阅读全文
posted @ 2022-06-07 19:47
Maple~
阅读(88)
评论(0)
推荐(0)
摘要:
一、类加载器与类的加载过程 一、类加载器子系统作用 类加载器子系统负责从文件系统或者网络中加载class文件,class文件在文件开头有特定的文件标识。 CLassLoader只负责class文件的加载,至于他是否可以运行,则由Execution Engine决定。 加载的类信息存放于一块称为方法区 阅读全文
posted @ 2022-06-07 19:46
Maple~
阅读(184)
评论(0)
推荐(0)
摘要:
一、虚拟机栈概述 一、虚拟机栈出现的背景 由于跨平台性的设计,Java 的指令都是根据栈来设计的,不同平台 CPU 架构不同,所以不能设计为基于寄存器的。 优点是跨平台,指令集小,编译器实现容易,缺点是性能下降,实现同样的功能需要更多的指令。 二、初步印象 有不少 Java 开发人员一提到 Java 阅读全文
posted @ 2022-06-07 19:46
Maple~
阅读(181)
评论(0)
推荐(0)
摘要:
双亲委派模型并不是一个具有强制性约束的模型,而是Java设计者推荐给开发者们的类加载器实现方式。在 Java的世界中大部分的类加载器都遵循这个模型,但也有例外的情况,直到Java模块化出现为止,双亲委派模型主要出现过3次较大规模“被破坏”的情况。 一、在双亲委派出现之前 双亲委派模型的第一次“被破坏 阅读全文
posted @ 2022-06-07 19:46
Maple~
阅读(257)
评论(0)
推荐(0)
摘要:
一、引用计数算法 一、垃圾标记阶段:对象存活判断 在堆里存放着几乎所有的Java对象实例,在GC执行垃圾回收之前,首先需要区分出内存中哪些是存活对象,哪些是已经死亡的对象,只有被标记为已经死亡的对象,GC才会在执行垃圾回收时,释放掉其所占用的内存空间,因此这个过程我们可以称为垃圾标记阶段。 那么JV 阅读全文
posted @ 2022-06-07 19:45
Maple~
阅读(282)
评论(0)
推荐(0)
摘要:
学过 JVM 的同学都知道,垃圾回收可以说是 JVM 的一个非常重要的知识点了,在我们讲解垃圾回收算法和垃圾回收器之前, 我们先来讲解有关垃圾回收相关的概念吧 🏃🏃🏃 一、垃圾回收概述 1、什么是垃圾 所谓垃圾回收,那在 JVM 中啥才是垃圾呢? 其实,在 JVM 中垃圾是指在运行程序中没有任 阅读全文
posted @ 2022-06-07 19:45
Maple~
阅读(125)
评论(0)
推荐(0)
摘要:
HotSpot虚拟机对象探秘 一、对象的创建 Java是一门面向对象的编程语言,Java程序运行过程中无时无刻都有对象被创建出来。在语言层面上,创建对象通常(例外:复制、反序列化)仅仅是一个new关键字而已,而在虚拟机中,对象(文中讨论的对象限于普通Java对象,不包括数组和Class对象等)的创建 阅读全文
posted @ 2022-06-07 19:44
Maple~
阅读(30)
评论(0)
推荐(0)
摘要:
一、栈、堆、方法区的交互关系 二、方法区的理解 一、方法区在哪里? 《Java虚拟机规范》中明确说明:”尽管所有的方法区在逻辑上是属于堆的一部分,但一些简单的实现可能不会选择去进行垃圾回收或者进行压缩。“但对于 HotSpot JVM 而言,方法区还有一个别名叫做 Non-Heap(非堆),目的就是 阅读全文
posted @ 2022-06-07 19:44
Maple~
阅读(115)
评论(0)
推荐(0)
摘要:
一、GC分类与性能指标 一、垃圾回收器概述 垃圾收集器没有在规范中进行过多的规定,可以由不同的产商、不同版本的JVM来实现。由于JDK的版本处于高速迭代的过程中,因此Java发展至今已经衍生出了众多的GC版本。从不同角度分析垃圾收集器,可以将GC分为不同的类型。 二、垃圾回收器分类 按线程数分,可以 阅读全文
posted @ 2022-06-07 19:44
Maple~
阅读(311)
评论(0)
推荐(0)
摘要:
一、PC Register介绍 下面是JVM 中的程序计数器: 程序计数器(Program Counter Register)是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。 在Java虚拟机的概念模型里,字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码 阅读全文
posted @ 2022-06-07 19:43
Maple~
阅读(32)
评论(0)
推荐(0)
摘要:
咋废话少说,直接进入重点 😃😃😃 堆 一、堆(Heap)的核心概述 一、堆的核心概述 一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域。 Java堆区在JVM启动的时候即被创建,其空间大小也就确定了,是JVM管理的最大一块内存空间。堆内存的大小是可以调节的。 《Java虚拟机规 阅读全文
posted @ 2022-06-07 19:43
Maple~
阅读(66)
评论(0)
推荐(0)
摘要:
一、引用拷贝 引用拷贝是不会创建新对象的,而是创建这个对象的另一个引用,最终两个引用指向的是同一个对象 如图: 我们通过一个实际的例子来看看: // Student 类 public class Student { String name; int age; public Student(Strin 阅读全文
posted @ 2022-06-07 19:42
Maple~
阅读(123)
评论(0)
推荐(0)
摘要:
我们都知道反射是框架设计的灵魂,是必须要掌握的内容,华强都懂了,你还不懂吗,今天我就来带你揭开反射的真面目,就问你看不看吧。 为什么要使用反射 我们先想一下为什么要有反射,看下面的例子: 假如我们有一个接口 X 及其方法 test,和两个对应的实现类 A、B: public class Test { 阅读全文
posted @ 2022-06-07 19:42
Maple~
阅读(52)
评论(0)
推荐(0)
摘要:
吊打面试官之 Hashtable 详解 如何保证 HashMap 线程安全 我们知道 HashMap 是线程不安全的,我们一般使用这三种方式来代替原生的线程不安全的 HashMap: 1)使用 java.util.Collections 类的 synchronizedMap 方法包装一下 HashM 阅读全文
posted @ 2022-06-07 19:41
Maple~
阅读(101)
评论(0)
推荐(0)
摘要:
我们知道,动态代理使用了反射,Spring 中的 AOP 由于使用了动态代理,所以也相当于使用了反射机制。那么,代理是什么?动态代理又是什么?动态代理中是如何使用反射的?今天,我就带你剖析动态代理的真面目。 代理模式概述 简单来说,代理模式就是使用代理对象来代替对真实对象的访问,这样就可以在不修改原 阅读全文
posted @ 2022-06-07 19:41
Maple~
阅读(123)
评论(0)
推荐(0)
摘要:
ArrayList 概述 ArrayList 实现了 List 接口,其实就是一个数组列表,不过作为 Java 的集合框架,它只能存储对象引用类型,也就是说当我们需要装载的数据是诸如 int、float 等基本数据类型的时候,必须把它们转换成对应的包装类。 ArrayList 的底层实现是一个 Ob 阅读全文
posted @ 2022-06-07 19:40
Maple~
阅读(132)
评论(0)
推荐(0)
摘要:
常见名词 Master:默认开发分支 Origin:默认远程版本库 Index / stage:暂存区 Workspace:工作区 Repository:仓库区(或本地仓库) Remote:远程仓库 代码提交和同步代码: 代码撤销和撤销同步 一、 新建代码库 # 在当前目录新建一个Git代码库 $ 阅读全文
posted @ 2022-06-07 19:39
Maple~
阅读(15)
评论(0)
推荐(0)
摘要:
1、源码下载和编译 源码下载、编译和导入步骤如下: dubbo的项目在github中的地址为: https://github.com/apache/dubbo 进入需要进行下载的地址,执行git clone https://github.com/apache/dubbo.git 为了防止master 阅读全文
posted @ 2022-06-07 19:38
Maple~
阅读(1109)
评论(0)
推荐(0)
摘要:
1、Dubbo 架构概述 1.1 什么是 Dubbo Apache Dubbo是一款高性能的Java RPC框架。其前身是阿里巴巴公司开源的一个高性能、轻量级的开源Java RPC框架,可以和Spring框架无缝集成。 1.2 Dubbo 解决的问题 在大规模服务化之前,应用可能只是通过 RMI 或 阅读全文
posted @ 2022-06-07 19:37
Maple~
阅读(181)
评论(0)
推荐(0)
摘要:
1、SPI 1.1 SPI 简介 SPI 全称为 (Service Provider Interface) ,是JDK内置的一种服务提供发现机制。 目前有不少框架用它来做服务的扩展发现,简单来说,它就是一种动态替换发现的机制。使用SPI机制的优势是实现解耦,使得第三方服务模块的装配控制逻辑与调用者的 阅读全文
posted @ 2022-06-07 19:35
Maple~
阅读(142)
评论(0)
推荐(0)
摘要:
随着互联网的发展,用户群体逐渐壮大,网站的流量成倍增长,常规的单体架构已无法满足请求压力暴增和业务的快速迭代,架构的变化势在必行。 1、单体架构 单体架构所有模块和功能都集中在一个项目中 ,部署时也是将项目所有功能部整体署到服务器中。如下图: 优点 小项目开发快 成本低 架构简单 易于测试 易于部署 阅读全文
posted @ 2022-06-07 19:34
Maple~
阅读(77)
评论(0)
推荐(0)

浙公网安备 33010602011771号