RocketMQ八股文
为什么要用MQ? 应用解耦 假设有支付、订单、短信三个服务,当有一笔订单需要调用这三个服务时,需要在代码中写死这三个服务的调用接口,如果需要新增一个新的服务积分服务,又要在代码中新增调用接口,耦合度太高,不利于管理 此时引入RocketMQ,通过发布不同的topic,需要的服务只需要订阅它就可以了,这样一来,生产者不需要知道我需要调用哪些接口,只管发送消息即可。未来再需要新增服务的时候,只需要在这个服务中订阅消息就可以了。扩展性提高,维护成本降低 生产者不再直接调用多个下游服务,只负责发消息; 谁想处理这条消息,就订阅对应的 Topic。 新增/删除下游服务不需要修改生产者代码。 异步提速 假设生产者向RocketMQ中发送一条用户下单的消息需要 50ms,生产者向数据库中发送一条消息需要 50ms,支付、订单、短信三个服务接收消息后处理需要 200ms 那么用户得到反馈的时间是多少呢? 50ms + 50ms = 100ms ,前端只需要将消息发送成功,数据库消息写入成功后就可以返回了,后端服务异步处理消息就行了,减少用户等待的时间 把耗时操作(发短信、扣库存、记...
SpringBoot八股文
SpringBoot八股文 SpringBoot的项目结构是怎么样的? 说一说Spring框架核心特性有哪些? / 好处有哪些? IOC容器:Spring通过控制反转(DI)实现了对象的创建和对象间的依赖关系,开发者只需要定义好Bean及其依赖关系,Spring容器就会负责创建和组装这些对象 AOP:面向切面编程,允许开发者横切关注点,例如事务管理、安全控制、日志记录等,可以提高代码的可维护度和可重用性 事务管理:Spring提供了一致的事务管理接口。开发者可以轻松地进行事务管理,而无需关心具体的事务API MVC框架:Spring MVC是一种Web框架,采用了模型-视图-控制器(MVC)框架,它支持灵活的URL到页面控制器的映射 非侵入式设计:它可以使应用程序对框架的依赖最小化 介绍一下IOC 简介:IOC即控制反转的意思,它是一种创建和获取对象的技术思想,依赖注入(DI)是实现这种技术的一种方式。在传统开发过程中,我们需要通过new关键字来创建对象。使用IOC思想开发方式的话,就可以不用new关键字来创建对象,而是通过IOC容器来帮我...
JVM八股文
JVM模型 JDK:Java Development Kit:Java开发工具包 JRE:Java Runtime Environment:Java运行环境 JVM:Java Virtual Machine Java虚拟机 为什么要引入JVM? JVM是Java虚拟机,支持跨平台运行,一次编译,处处运行,它能识别.class后缀文件,解析它的指令,完成想要的操作 内置GC回收垃圾,不需要手动管理内存 JVM运行时内存共分为 JVM 运行时内存主要分为 线程私有 和 线程共享 两类。 线程私有的包括: 程序计数器 Java 虚拟机栈 本地方法栈 线程共享的包括: 堆 方法区(JDK 8 以后是元空间,使用本地内存) 程序计数器 用于存储当前线程正在执行的java方法JVM指令地址;如果执行Native,计数器为null 程序计数器的作用,为什么是私有的? 程序计数器用于记录当前线程正在执行的字节码指令地址,在线程发生时间片切换时,JVM 可以根据程序计数器恢复执行位置。因为每个线程执行进度不同,所以程序计数器必须是线程私有的。 Java虚拟机栈 ...
JUC八股文
【要图】 线程 并发编程存在的三大问题? 原子性 同一时刻只能有一个线程对数据进行操作。在java中使用了atomic包和synchronized关键字来确保原子性 可见性 一个线程对主内存进行修改,其他线程可以看到。在java中使用synchronized和volatile两个关键字实现 有序性 一个线程观察其他线程的执行顺序,一般无序。在java中用happens-before原则来确保有序性 happens-before:如果 A happens-before B,那么 A 的结果(内存写入)对 B 可见,并且 A 的执行顺序在 B 之前(逻辑上有序)。 !!!只要不同时满足以上三个条件,就会产生并发问题 【区别!!!】 并发原子性:一段代码会不会被插队(线程层面) 三大范式中第一范式1NF 原子性:一个格子只能放一个值(表结构层面) 事务原子性:一组SQL要么全成要么全撤(事务层面) 线程和进程的区别? 进程是操作系统分配资源的最小单位,线程是 CPU 调度的最小单位。 一个进程内部可以包含多个线程,这些线程共享进程的内存资源。 在 Java 中,...
test
$jason = \frac{1}{2}$
食谱
时间 餐次 食材 备注 07:30 早餐 黑咖啡 1杯 香蕉 1根 包子 1个(约80g) 黑咖啡有助于加速新陈代谢,包子少油少盐。 10:30 上午加餐 苹果 1个 快速补充能量,增加纤维。 12:30 午餐 面条(全麦/细面)100g 小炒青菜(青菜100g+橄榄油5g) 空气炸锅去皮鸡腿肉100g 面条换全麦,增加纤维和蛋白。 15:30 下午加餐 无糖酸奶200g 巴旦木10g 提供蛋白和健康脂肪,控制血糖波动。 18:30 晚餐 外面的小炒(选择低油低盐的菜品,如清炒时蔬、豆腐类等) 外面吃时尽量控制油盐量,避免油腻食物。 21:00 夜宵 水果(如苹果或橙子)或一根香蕉 如果晚上饿,可以轻量水果作为夜宵。 喝水 & 运动 全天 ≥ 2 L 水。 训练前 1–2 h 加 ≈ 20 g 碳水(半根香蕉);训练后 30 min 内补 ≈ 20 g 蛋白(酸奶或乳清)。
AtCoder-Beginner-Contest-380
A. 123233 题目描述 给定一串数字,判断它是否满足以下条件: 1只出现一次 2只出现两次 3只出现三次 思路 直接输入string,开一个数组统计出现的次数即可。 代码 12345678910111213141516171819202122#include <iostream>using namespace std;const int N = 20;int cnt[N];int main(){ string str; cin >> str; for(auto i : str) { cnt[i - '0'] ++ ; } if(cnt[1] == 1 && cnt[2] == 2 && cnt[3] == 3) puts("Yes"); else puts("No"); return 0;} B. Hurdle Parsing 题目描述 给...
vba演示代码
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111Sub main() ' wb:工作簿 Dim wb As Workbook ' ws:工作表 Dim ws As Worksheet ' file:打开的路径 Dim file As String file = "C:\Users\25276\Desktop\test.xlsx" ' 打开工作簿 Set wb = Workbooks.Open(file) ' 打开【指定】工作表 ...
make构建
对于一个C/C++项目,可以使用make命令进行项目的编译,将这个项目生产出一个可执行文件。 比如一个C/C++项目结构为: 1234567- makefile_test - main.cpp - func_a.h - func_a.cpp - func_b.h - func_b.cpp - Makefile 对Makefile进行编辑 【注】:Makefile文件缩进需要使用Tab按钮 12345678910111213141516171819202122232425# Makefile 示例CC = g++CXXFLAGS = -Wall -gTARGET = mainall: $(TARGET)$(TARGET): main.o func_a.o func_b.o>---$(CC) $(CFLAGS) -o $(TARGET) main.o func_a.o func_b.omain.o: main.cpp>---$(CC) $(CFLAGS) -c main.cppfunc_a.o: func_a.cpp>---$(C...
nodejs学习
1. 安装Node.js、npm、express 123sudo apt install nodejssudo apt install npmnpm install express --save 2. 创建项目目录 123mkdir nodejscd nodejsnpm init -y 3. 编写服务器代码 1234567891011121314151617181920212223// server.jsconst express = require('express');const app = express();const PORT = 3000;// 设置跨域访问app.use((req, res, next) => { res.setHeader('Access-Control-Allow-Origin', '*'); res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE...











