RocketMQ
实际开发:短信分发,第一次进行预处理 用三个消息队列分别存储 : 移动/联通/电信的号码 RocketMQMQ概述MQ : Message Queue 消息队列,是在消息传输过程中保存消息的容器 1.优势 应用解耦 耦合度:指的是模块或组件之间的依赖程度。耦合度越高,容错越低。 防止消费者/生产者某一方崩了导致整个流程崩溃。 提高系统容错性以及可维护性 异步提速 生产方发完消息,可以继续下一步业务逻辑。 提升用户体验和系统吞吐量 削峰填谷相当于数据先打到缓存中,然后消费者从缓存中拿数据,而不是直接打到消费者,如果1w/s打到物流系统会崩溃 提高系统稳定性 2.劣势 系统可用性降低 如果MQ崩了,就会对业务造成影响。 如何保障MQ的高可用? 系统复杂度提高如何保障消息没有被重复消费,如何处理信息丢失,如何保障信息传递的顺序性 一致性问题A处理完业务通过MQ发给BCD,BC都成功处理,那D处理失败,如何保障消息处理数据的一致性? RocketMQ 工作原理总结RocketMQ...
juc
并发编程1.进程与线程1.进程与线程 进程 程序由指令和数据组成,指令需要运行,数据需要读写,就要将指令加载到cpu上,数据加载至内存。在指令运行过程中还需要使用磁盘,网络等设备。 进程就是用来加载指令、管理内存、管理I/O的。 当一个程序被运行,指令代码被加载至内存,这时就开启了一个进程。 进程可以视为程序的一个实例。有些可以多开(记事本),有些只能开一个(网易云) 线程 一个进程之内可以有多个线程 一个线程就是一个指令流,是 CPU 调度的基本单位,线程按照一定顺序执行代码,多个线程可以并发地被 CPU 核心调度执行。 java中,线程作为最小调度单位,进程作为资源分配最小单位。 两者对比 进程基本上相互独立的,而线程存在于进程内,是进程的一个子集 进程拥有共享的资源,如内存空间等,供其内部的线程共享 进程间通信较为复杂 同一台计算机的进程通信称为IPC(Inter-process communication) 常见的 IPC 方式包括管道(pipe)、共享内存、消息队列、socket...
jvm
什么是JVM? 定义:Java Virtual Machine java程序的运行环境(更确切:java二进制字节码的运行环境) 好处: 一次编写,到处运行的基石(跨平台) 自动内存管理,垃圾回收功能(垃圾回收处理堆内存的无用对象) 数组下标越界检查 多态 比较:Jvm Jre Jdk的关系 JVM的内存结构程序计数器(PC)1. 定义 Program Counter Register 使用寄存器实现 2. 作用: 记住下一条jvm指令的执行地址 3. 特点: 线程私有:每一个线程都是独立的,都有自己的时间片,以及自己的程序计数器 不会存在内存溢出 虚拟机栈1. 定义(java virtual machine stacks) 每个线程运行时所需要的内存称为虚拟机栈,线程私有 栈由多个栈帧(Frame)组成,每个栈帧对应一次方法调用。 每个线程只能有一个活动栈帧,对应着当前正在执行的那个方法(人话:栈顶) 2. 问题辨析: 垃圾回收是否涉及栈内存? 不涉及。虚拟机栈随着方法调用自动创建和销毁,不由 GC...
javaAlgorithm
java是一种面向对象的语言,入口程序也是一个类,类的属性有public,private,protected; 12345public class Main{ public class main(String arg[]){ System.out.println("helloworld!"); }} 2025.5.19 二分查找应用场景:有序 数组二分三元素 :left,mid,right目标可能存在的区间,在[left,right]之间,所以循环条件就是他。循环变更的是:left和right,是基于这一次选择的mid来变更的,而不是left和right++ /...
javaweb
Server后端开发:代码开发(java)–框架简化代码(Spring)–用包(库,包管理器:Maven)总结就是三步:语言,框架,以及包 拼接起来就是:Fronted—www—Server—Database前端发送到后端的叫请求(Request),后端发给前端的叫响应(Response)。 web网站的工作流程一个web网站大致由三个部分组成:前端服务器(前端程序),后端服务器(后端程序),数据库服务器用户在浏览器输入域名,浏览器会根据域名请求访问前端服务器,前端服务器在接收到请求后会向浏览器返回前端代码,(浏览器也是一个程序,内置了解析前端代码的解析引擎),从而解析出对应的页面样式需要学习的技术:Maven、SpringBoot Web、MySQL(got it)、SpringBoot Mybatis 初识web前端 网页的组成部分:文字、图片、音频、超链接、视频 我们看到的网页背后的本质:前端代码 前端代码如何转换成用户眼中的网页:浏览器转化(解析和渲染(浏览器内核))成用户看到的网页 Web标准: HTML(HyperText Markup...
MySQL
MySQL的数据模型基于表存储的数据库叫做关系型数据库 SQLSQL通用语法 通用语法 SQL语句可以单行或多行书写,以分号结尾。 SQL语句可以使用空格/缩进来增强可读性(空格缩进数量不限) MySQL数据库的SQL语句不区分大小写,关键字建议使用大写 有多种注释 SQL语句的分类语句分类 DDL 查询 查询所有数据库 show databases; 查询当前数据库 select database(); 创建 create database 数据库名; 创建表: create table 表名 123456create table 表名(字段1 字段类型 comment '注释内容',字段2 字段类型 comment '注释内容',字段3 字段类型 comment '注释内容',字段n 字段类型 comment '注释内容' (注意最后一条注释没有逗号))comment '表注释'; varchar() 变长字符串 char()...
JavaLearn
从今天开始,cpp转java,其实语言不是最重要的,重要的是思想,就像小学拿铅笔写字,初高中用水性笔,大学用电容笔一样,但做的都是同一件事情,写字。 环境变量一开始就被环境变量上了一课,本博客使用hexo写的,我把D:\给删掉了,导致无法使用hexo指令,npm和node也找不到,添加完环境变量后就又能正常使用了。 基本语法类名要和文件名相同,如果创建了Main.java文件,里面的类就要写为public class Main,否则会报错 123456public class Main { public static void main(String[] args) { //打印helloworld System.out.println("Hello World"); }} 制表符可以在语句后面使用\n(字符串),但通用的语法是 +”\n” +”\t”,\t是制表符,补齐8个空格,让文本对齐 123456789101112131415public class Main...
cpp基础核心内容
三块核心内容进程虚拟地址空间区域划分有四区 代码区(.text) 存放程序的机器指令,通常是只读的 数据段(.data) 存放已初始化的全局变量和静态变量 BSS段 存放未初始化的全局变量和静态变量,操作系统在运行前会帮助自动初始化为0 堆栈区(Heap and Stack) 堆区:程序运行时动态分配的内存(new 和 malloc),由程序员管理 栈区:函数调用时使用的内存,存放局部变量和返回地址,由系统自动分配和释放 123456int main(){ int a = 12; int b = 0; int c;} 这三条是其实是汇编的mov指令,存放在.text区,而main函数调用的时候会在栈开辟空间。 函数调用堆栈详细过程程序编译链接原理预处理-编译-汇编-链接 预处理 处理#include 之类的,除了#pragma lib和#pragma link,这两个是在链接时处理。 编译 gcc / g++(gcc用来编译c语言,g++用来编译c++,其实就是dev中的F9,只不过现在换成命令行形式) ...
操作系统
操作系统介绍有三个主要部分:虚拟化(virtualization)、并发(concurrency)、持久性(persistence) 题目一、(共10分)操作系统的设计目标有哪些? 抽象性:对硬件资源进行抽象,提供统一接口,简化程序开发; 并发性:支持多个程序同时运行,提高系统吞吐; 虚拟化:如虚拟内存、虚拟 CPU,使用户感觉拥有独占资源; 资源管理与调度:高效分配 CPU、内存、磁盘等资源,提升资源利用率; 安全与保护:防止程序互相干扰,保护用户数据; 用户友好性:提供简洁易用的接口和良好的使用体验。 六、( 共 10 分)UNIX 系统采用了一种非常有趣的创建新进程的方式,即通过一对系统调用:fork()和 exec(),解释说明 fork()和 exec()的作用(5 分),以 UNIX 的 Shell 为例说明为什么设计这两个系统调用(5分)。 fork()创建一个和父进程几乎相同的子进程,除了PID等一些信息不同其它完全一样。 exec()用新的程序替换掉当前程序执行的内容,不改变其PID等信息。UNIX...
数据结构与算法
数组优点 下标访问的复杂度为O(1) 末尾位置增加删除元素时间复杂度为O(1) 删除就是–,增加就是++ 缺点 非末尾元素增加位置需要大量的数据移动 搜索的复杂度是O(n) 注意搜索和访问不是一个东西,搜索是遍历寻找这个值,而访问是a[0]–a[n-1],在无序数组中采用遍历,是线性搜索;在有序数组中采用二分,复杂度为O(logn) 链表优点 内存利用率高,不需要大块连续内存 插入和删除节点不需要移动其它节点,时间复杂度O(1) 不需要专门进行扩容操作 缺点 内存占用量大,每一个节点多出存放地址的空间 节点内存不连续,无法进行内存随机访问 链表搜索效率不高,只能从头节点开始逐节点遍历 内存碎片化现在我们有100M的内存空间(堆上),内存的释放是一块一块的,谁用完了谁就被释放了,如果将中间的20M和最右边的10M手动释放掉;我们就得到了两块内存碎片;现在我们有30M的空闲空间。如果现在进程运行需要25M的内存空间,我们能不能分配25M的数组呢?...