C Primer Plus整理
数据基本数据类型先声明再使用声明数据实际上有两个作用 需占内存的大小, 能表示的数据范围 允许的操作种类 整数 int修饰词 short (int) %hd long (int) %ld %lo %lx 要把一个较小的数看做 long,在数后面加 l 或 L(建议使用 L) long long (int) %lld unsigned (int) %u 可移植类型 <stdint.h> <inttypes.h> 浮点数 float存储中的表示首位作为符号位,一部分作为值(尾数)部分,另一部分作为指数部分,根据指数部分的大小使小数点移动,因此称为“浮点数” 声明形式 1.14 5.e-2 .45E-6 作为一个整体,不要在其中加入空格 注:NaN 为浮点数 修饰词 float %f 后面 8 位:127+C 最后 23 位:M-1, 丢弃小数点 double %lf %le %la a 表示十六进制的浮点数后面 11 位:1023+C 最后 52 位:M-1,丢弃小数点 long double %Lf (注意是大写的 L,且只有一...
Redis
认识 RedisRedis 是什么 基于内存的数据库,读写速度快,高性能 用于缓存,消息队列、分布式锁 操作有原子性,执行命令由单线程负责,不存在并发竞争 支持事务 、持久化、Lua 脚本、多种集群方案(主从复制模式、哨兵模式、切片机群模式)、发布/订阅模式,内存淘汰机制、过期删除机制 Redis 数据结构 String:缓存对象、常规计数、分布式锁、共享 Session 信息 List:消息队列(生产者需实现全局唯一 ID;无法实现消费组) Hash:缓存对象、购物车 Set:聚合计算(并交差):点赞、共同关注、抽奖 Zset:排序场景:排行榜、姓名排序 BitMap:二值状态统计:签到、用户登录状态 HyperLogLog:海量数据技术统计场景:百万级网页 UV 计数 GEO:地理位置信息场景:打车、地图 Stream:消息队列(实现全局唯一 ID,支持消费组) 内部实现 StringString 底层由简单动态字符串(Simple Dynamic String, SDS) 实现 SDS 可以保存文本数据和二进制数据(如图片、视频等) 使用 len 来判...
Java集合
集合集合与数组 数组是固定长度的数据结构,一旦创建长度就无法改变,而集合是动态长度的数据结构,可以根据需要动态增加或减少元素。 数组可以包含基本数据类型和对象,而集合只能包含对象。 数组可以直接访问元素,而集合需要通过迭代器或其他方法访问元素。 常用集合 ArrayList:动态数组,实现了 List 接口,支持动态增长。 LinkedList:双向链表,也实现了 List 接口,支持快速的插入和删除操作。 HashMap:基于哈希表的 Map 实现,存储键值对,通过键快速查找值。 HashSet:基于 HashMap 实现的 Set 集合,用于存储唯一元素。 TreeMap:基于红黑树实现的有序 Map 集合,可以按照键的顺序进行排序。 LinkedHashMap:基于哈希表和双向链表实现的 Map 集合,保持插入顺序或访问顺序。 PriorityQueue:优先队列,可以按照比较器或元素的自然顺序进行排序。 线程安全的集合util 包 Vector:线程安全的动态数组,其内部方法基本都经过 synchronized 修饰,如果不需要线程安全,并不建议选择,存在同步的额外...
Spring
Spring核心特性 IoC 容器:Spring 通过控制反转实现了对象的创建和对象间的依赖关系管理。开发者只需要定义好 Bean 及其依赖关系,Spring 容器负责创建和组装这些对象。 AOP:面向切面编程,允许开发者定义横切关注点,例如事务管理、安全控制等,独立于业务逻辑的代码。通过 AOP 可以将这些关注点模块化,提高代码的可维护性和可重用性。 事务管理:Spring 提供了一致的事务管理接口,支持声明式和编程式事务。开发者可以轻松地进行事务管理,而无需关心具体的事务 API。 MVC 框架:Spring MVC 是一个基于 Servlet API 构建的 Web 框架,采用了模型-视图-控制器(MVC)架构。它支持灵活的 URL 到页面控制器的映射,以及多种视图技术。 核心思想 核心思想 解决的问题 实现手段 典型应用场景 IoC 对象创建与依赖管理的高耦合 容器管理 Bean 生命周期 动态替换数据库实现、服务组装 DI 依赖关系的硬编码问题 Setter/构造器/注解注入 注入数据源、服务层依赖 DAO 层 AOP 横切逻辑分...
分布式
分布式理论CAP 原则在一个分布式系统中, Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性), 三者不可得兼 一致性(C) : 在分布式系统中的所有数据备份, 在同一时刻是否同样的值(等同于所有节点访问同一份最新的数据副本) 可用性(A): 在集群中一部分节点故障后, 集群整体是否还能响应客户端的读写请求(对数据更新具备高可用性) 分区容忍性(P): 以实际效果而言, 分区相当于对通信的时限要求. 系统如果不能在时限内达成数据一致性, 就意味着发生了分区的情况, 必须就当前操作在 C 和 A 之间做出选择 分布式锁分布式锁是用于分布式环境下并发控制的一种机制,用于控制某个资源在同一时刻只能被一个应用所使用 Redis 实现使用 Redis 中的 SET NX,实现只有 Key 不存在才插入 如果 key 不存在,则显示插入成功,可以用来表示加锁成功; 如果 key 存在,则会显示插入失败,可以用来表示加锁失败。 加锁SET lock_key unique_value NX PX 1000...
Github Actions
GitHub Actions持续集成由很多操作组成,比如抓取代码、运行测试、登录远程服务器,发布到第三方服务等等。GitHub 把这些操作就称为 actions。 很多操作在不同项目里面是类似的,完全可以共享。GitHub 注意到了这一点,想出了一个很妙的点子,允许开发者把每个操作写成独立的脚本文件,存放到代码仓库,使得其他开发者可以引用。 如果你需要某个 action,不必自己写复杂的脚本,直接引用他人写好的 action 即可,整个持续集成过程,就变成了一个 actions 的组合。 GitHub 做了一个官方市场,可以搜索到他人提交的 actions。另外,还有一个 awesome actions 的仓库,也可以找到不少 action。 每个 action 就是一个独立脚本,因此可以做成代码仓库,使用userName/repoName的语法引用 action。比如,actions/setup-node就表示github.com/actions/setup-node这个仓库,它代表一个 action,作用是安装 Node.js。GitHub 官方的 actions 都放...
Java基础
概念优势 跨平台:JVM。Java 源码编译后生成 .class 文件(字节码文件),JVM 可直接将字节码文件翻译成机器语言从而运行 Java 程序跨平台,但 JVM 不是跨平台 面向对象 生态完善 内存管理:自动垃圾回收 多线程支持 劣势 JVM 性能低于原生编译语言 语法繁琐 JVM/JDK/JRE JVM:Java 虚拟机 主要工作是解释自己的指令集(即字节码)并映射到本地的 CPU 指令集和 OS 的系统调用。(即将 Java 字节码解释或编译成机器码) 执行 Java 程序程序 内存管理、垃圾回收、安全性 JDK:Java 开发工具包 包含 JVM、编译器(javac)、调试器(jdb),标准库和工具库 JDK 提供开发、编译、调试和运行 Java 程序所需的全部工具和环境 JRE:Java 运行时环境 Java 程序运行所需最小环境 包含 JVM 和一组 Java 类库,不包含开发工具,只提供运行环境 解释性和编译性Java 同时具有解释性和编译性 编译性:在程序执行之前,整个源代码会被编译成机器码或...
JVM
内存模型内存模型划分 程序计数器:可以看作是当前线程所执行的字节码的行号指示器,用于存储当前线程正在执行的 Java 方法的 JVM 指令地址。 如果线程执行的是 Native 方法,计数器值为 null。 是唯一一个在 Java 虚拟机规范中没有规定任何 OutOfMemoryError 情况的区域,生命周期与线程相同。 Java 虚拟机栈:每个线程都有自己独立的 Java 虚拟机栈,生命周期与线程相同。 每个方法在执行时都会创建一个栈帧,用于存储局部变量表、操作数栈、动态链接、方法出口等信息。 可能会抛出 StackOverflowError 和 OutOfMemoryError 异常。 本地方法栈:与 Java 虚拟机栈类似,主要为虚拟机使用到的 Native 方法服务,在 HotSpot 虚拟机中和 Java 虚拟机栈合二为一。 本地方法执行时也会创建栈帧,同样可能出现 StackOverflowError 和 OutOfMemoryError 两种错误。 Java 堆:是 JVM 中最大的一块内存区域,被所有线程共享,在虚拟机启动时创建,用于存放对象实例。...
MongoDB SpringBoot集成
MongoDB 集成导入依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency> 远程连接配置#MongoDB连接配置 spring.data.mongodb.uri: mongodb://172.30.138.31:27017/chat_memory_db 使用创建实体类import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import org.springframework.data.annotation.Id; import org.springframework.data.mongodb.core.mapping.Document; @Data @AllArgsC...
MongoDB 基本用法
概述非关系型数据库,以类 JSON 格式存储数据,是非关系型数据库中与关系型数据库最相似的 CRUD1. Create(插入文档)向集合中插入新文档。 插入单个文档db.collection.insertOne({ name: "Alice", age: 25, job: "Engineer" }); 插入多个文档db.collection.insertMany([ { name: "Bob", age: 30, job: "Designer" }, { name: "Charlie", age: 35, job: "Manager" } ]); 2. Read(查询文档)从集合中查询文档。 查询所有文档db.collection.find(); 查询特定条件的文档db.collection.find({ age: { $gt: 25 } }); // 查询 age 大于 25 的文档 查询并返回特定字段db.collection.f...