自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(254)
  • 收藏
  • 关注

原创 c++项目 网络聊天服务器 实现;QPS测试

设计细节和实现细节,以及测试迭代

2025-04-04 00:46:02 1031

原创 【黑马点评】redis实战

本文介绍了Redis在Java客户端的应用与实战场景。Redis作为高性能数据库,在短信登录、达人探店、好友关注、用户签到、UV统计、附近商户和优惠券秒杀等场景中发挥着关键作用。 短信登录:利用SET命令设置带过期时间的验证码,通过INCR+EXPIRE实现限流防刷。 达人探店:使用List存储最新点赞记录,SortedSet实现排行榜功能。 好友关注:通过Set集合运算高效处理关注关系,计算共同关注和推荐关注。 用户签到:BitMap以极小空间存储每日签到状态,BITCOUNT统计签到次数。 UV统计:H

2025-05-25 19:51:07 1064

原创 Cookie 与 Session;OAuth2

本文对比了常见的客户端和服务端存储技术。Cookie是浏览器保存的小数据(约4KB),每次请求自动发送给服务端,可设置过期时间;Session是服务端存储的会话状态,通常配合Cookie使用。常用机制还包括:LocalStorage(浏览器本地永久存储)、SessionStorage(页面关闭消失)、Redis中的Session(支持分布式持久化)以及数据库登录状态(如JWT的无状态认证)。这些技术在持久性、存储位置和生命周期上各有特点,适用于不同场景。

2025-05-24 20:50:50 419

原创 AI 面试帮 开发日志

项目源码。

2025-05-22 09:35:56 301

原创 MongoDB

MongoDB 使用 B+ 树存储索引,有MySQL基础可以来速通。MongoDB 是一个基于文档的 NoSQL 数据库,使用类似 JSON 的文档模型存储数据,具有灵活性和高性能的特点。它最初由 10gen 公司于 2007 年开发,2009 年开源,旨在应对大数据量和高性能需求。MongoDB 支持多种操作,包括数据库的创建与删除、集合的创建、文档的插入与查询等。查询时可以使用比较操作符、逻辑操作符、正则表达式等,并支持排序、分页和投影功能。

2025-05-22 00:02:38 1075

原创 Docker

Docker 是一个开源的容器化平台,能够将应用程序及其依赖项打包在轻量级、可移植的容器中运行,实现跨环境一致性部署。其核心原理基于 Linux 内核的命名空间(Namespace)、控制组(Cgroups)和联合文件系统(UnionFS),提供进程隔离、资源控制和镜像构建功能。Docker 的主要组件包括 Docker Client、Docker Daemon、Docker Image 和 Docker Container。典型应用场景包括微服务部署、持续集成/持续部署(CI/CD)、测试环境搭建和多版本

2025-05-21 20:22:03 528

原创 JWT : JSON Web Token

JWT 是明文的,签名仅用于验证,不加密数据。JWE 则提供加密功能,增强安全性。

2025-05-19 20:53:58 356

原创 CMake

CMake 只是“构建的规划工具”,不是库的安装工具。

2025-05-19 19:29:32 236

原创 什么是着色器 Shader

本文介绍了OpenGL中的顶点着色器(vshader)和片元着色器(fshader)的作用及其代码示例。顶点着色器负责将物体从模型空间转换到屏幕空间,处理顶点的位置、颜色、法线等信息,并输出给片元着色器。片元着色器则结合光照和纹理,计算屏幕上每个像素的最终颜色。文章通过代码示例详细展示了如何实现这些功能,并解释了Phong光照模型和纹理融合的基本原理。通过调试和修改这些着色器代码,可以更好地理解图形渲染的过程。

2025-05-18 23:54:54 834

原创 从零启动 Elasticsearch

elastic 有弹力的ElaticSearch (ES)是一个基于 Lucene 的分布式全文检索引擎。可以做到近乎实时地存储、检索数据,并且本身具有良好的扩展性,可以扩展到上百台服务器,处理PB级别(1 Petabyte = 1024TB)的数据。ES 常用于日志分析、全文搜索、安全智能、业务分析和运维智能等场景。

2025-05-18 17:15:45 442

原创 SZU 编译原理

文法;语法分析

2025-05-16 23:28:09 762

原创 java @注解;反射可读取注解然后执行其他方法

Java中的注解是一种标记,用于为代码添加额外信息,其字节码保存在.class文件中,并可通过反射机制读取。通过定义和使用自定义注解,可以在类和方法上添加特定信息,并在运行时通过反射扫描和处理这些注解。Class类是Java反射机制的核心,每个被JVM加载的类都有唯一的Class对象,用于在运行时获取类的结构、方法和字段等信息,并进行实例化和方法调用。Spring框架通过IOC容器管理对象实例,避免频繁创建复杂对象,开发者只需通过注解(如@Autowired)声明依赖,Spring会自动注入已创建的对象,提

2025-05-16 12:25:55 289

原创 Linux proc文件系统 内存影射

本文介绍了常见的内存分配函数和用户进程的内存空间分配算法。C标准库中的malloc、calloc、realloc和free用于动态内存管理,而Linux系统调用mmap和munmap则用于更灵活的内存分配和释放,特别是大内存块。通过/proc/pid/目录下的文件(如maps、status、smaps)可以查看进程的内存映射和状态信息。用户进程的内存分配通常采用离散分配算法,如分页存储管理,以解决内存碎片问题。实验通过分配和释放大内存块,观察/proc/pid/maps的变化,验证了内存分配的离散性和碎片化

2025-05-14 21:49:24 741

原创 JVM 精华

内存模型;类加载;垃圾回收

2025-05-14 11:20:13 951

原创 消息队列MQ

初识

2025-05-04 20:48:19 1079

原创 cpper 转 java

cpp 与 java 的异同

2025-05-02 20:06:14 736

原创 java HashMap,高效 &哈希

当进行扩容时,容量 n 变为原来的 2 倍,新的索引计算方式变为 (2n - 1) & hash。扩容后只多一个 1 位。

2025-05-01 20:12:47 306

原创 redis

Redis 是内存数据库,但是它为数据的持久化提供了两个技术—— 「 AOF 日志和 RDB 快照 」同时讲解【黑马程序员-点评】项目的实战场景。

2025-04-28 19:52:51 1091

原创 看一看 中间件Middleware

中间件(Middleware)是介于操作系统与应用程序之间的一层软件它为分布式应用程序提供了统一的通信、数据交换、服务调用、消息传递等能力。它的作用就像“胶水”,连接各个系统组件。

2025-04-24 13:52:58 1110

原创 缓存与内存;缺页中断;缓存映射:组相联

缓存: CPU 内部或非常靠近的高速存储超快,比内存快

2025-04-22 22:58:06 810

原创 HTTP HTTPS RSA

用摘要算法(哈希函数)来计算出内容的哈希值对方也对内容计算,比较两个哈希值。通过「私钥加密,公钥解密」的方式,保证消息不会被冒充(但是公钥仍可能是中间人冒充的 —— 中间人攻击!

2025-04-15 13:04:43 939

原创 中文编码,GB系列,UTF

UTF-8:全球使用最广泛的编码方式,支持所有语言字符,兼容ASCII。中文在UTF-8中通常用3个字节表示一个汉字。UTF-16:每个字符使用2个字节(或者4个字节)表示,空间效率高但不兼容ASCII。UTF-32:每个字符固定使用4个字节,使用简单但空间占用大。一个字节,但其实只用了一半: 128个字符。和ASCII是兼容的。

2025-04-13 19:39:52 266

原创 powerDesign 逆向 mysql 生成 物理模型,并用VBS脚本整理comment

玩转 powerdesign

2025-04-10 22:29:37 1064

原创 【c++比较器】 priority_queue初始化设置比较器 ; unordered_map 自定义哈希函数

往往算法可能需要自定义比较逻辑(如 dijkstra需要比较对应路径的长度)重写方法:注意都是子节点跟父节点比(堆一般是二叉树)template<class T,这里的 Compare 是一个类型(class),而模板本来也是类型STL是这样使用他的// 默认构造一个比较器对象if (comp(a, b)) { ... } // 用这个对象来比较像 std::pair<int, int> 这样的类型标准库没有默认的 std::hash 特化,因此需要自己提供一个哈希函数。

2025-04-10 00:00:08 503

原创 0基础 pig 权限管理开源项目学习

正在研究ing ...

2025-04-09 18:12:15 705 2

原创 c++11新特性

类内成员初始值“委托构造函数”:允许一个构造函数在其初始化列表中调用同类中的另一个构造函数int x = 0;// 成员初始化MyClass() : MyClass(42) {} // 委托构造函数。

2025-04-08 20:28:58 1056

原创 c编译和c++编译有什么区别?

Z 是 GCC 名称修饰的前缀,3 表示函数名的长度,foo 是函数名,i 表示一个 int 类型的参数。关闭 C++ 的 name mangling,让编译器用 C 的方式处理符号名。iostream 类型安全,重载 <<, >> 运算符,无需格式字符串.C++ 程序除了链接 C 标准库外,还需要链接到 C++ 标准库。C++更严格, 不允许隐式把 void* 转成 int*尽管是运行时多态,也需要编译时生成 虚函数表和指针。C++ 支持多个同名函数(参数不同),这是。编译的符号名需要进行。

2025-04-08 18:22:41 255

原创 io_uring 异步 socket 编程

(仅通过完成队列项中的结果信息(如 cqe->res)可能无法明确这个请求对应的具体上下文;标记一个完成队列项已经被应用程序处理,允许内核回收该 CQE 所占用的资源。网络IO时,数据拷贝并不是CPU在工作,所以我们可以不阻塞recv。对于提交队列,我们想三次握手和接收数据,都要提交信息给 提交队列。获取到这个关联的信息,从而知道该请求信息(自己设计结构体)。编程中往往是去获取 entry ,即sqe和cqe。首先定义 io_uring,之后都通过其交互。两个队列位于用户态和内核态之间的共享内存区域。

2025-04-06 15:30:56 444

原创 动静态库;gcc 链接顺序,循环依赖问题

链接过程由链接器ld负责。通常 GCC 间接驱动之。越底层的库,在链接命令行中的位置应越靠后。

2025-04-02 22:21:44 732

原创 中间人攻击,证书

不过中间人可以“偷梁换柱”,给客户端自己的私钥,自己给服务器数据时,再用服务器的公钥。服务器提供公钥,通过非对称加密的方式,加密后的内容就只有自己可以看到了。CA机构对证书明文数据进行hash,对hash后的值用私钥加密,得到。通过对证书内容进行计算,若结果为校验和,说明证书有效,没有被篡改。证书中有证书持有者信息,服务器的IP、公钥等,和一个校验和。主流浏览器/操作系统预装全球可信CA的公钥,形成信任锚点。客户端访问服务器,会先请求服务器的证书。CA机构拥有非对称加密的私钥和公钥。

2025-04-02 17:01:03 211

原创 MySQL 进阶 面经级

会用数据库,找大厂工作是远远不够的。本人2025美团暑期AI面试好几个MySQL场景问题不会答,已脏面评。遂在此整理学习!

2025-04-02 00:06:32 403

原创 protobuf编码官方文档 部分摘取翻译

读文档可知,序列化后不保存字段名 key ,解析方也必须有对应 protoc 协议才能知道字段名。易知该序列化后大小小。以及无符号整数,通过编码舍去前导0,数字占的空间就小了,如 1 本身就只需要 8个比特位,而非 int 4个比特位。

2025-04-01 19:23:22 999

原创 协程 Coroutine;Awaiter

通俗地说,cpp协程就是我函数执行一半我不执行了,一会谁觉得可以执行,就由谁接着执行如果你在做异步编程(如网络 I/O、文件 I/O),用 co_await如果你在实现生成器(如迭代器、流式数据处理),用 co_yield

2025-03-30 21:39:53 1126

原创 【RTTI】 Run-Time Type Information

当 dynamic_cast 进行向下转型(基类→派生类)或 横向转型(多重继承中的基类间转换)时,它必须检查当前对象的基类是否与目标类型匹配。指针调整:若目标类型是实际对象的其他基类(非源类型所在分支),dynamic_cast 会根据 RTTI 中存储的偏移信息调整指针,指向正确的子对象。如果类有虚函数,编译器会在内存中为每个多态类型(包含虚函数的类)生成一个 虚表,RTTI 信息通常存储在这个虚表中。在 C++ 中,只有虚函数才会生成 RTTI 信息,因为虚函数机制提供了运行时的多态支持。

2025-03-28 20:02:05 853

原创 C++类型转换

cast 铸造。只有 dynamic_cast 是运行时检查,底层用到 RTTI

2025-03-28 14:55:38 600

原创 const 底层 , 顶层/底层 const

如果 const 变量是全局/静态变量,且未涉及指针,编译器可能会将其存入 .rodata 段,禁止修改。Top-level const 顶层const, 顶层 const 直接作用于变量本身.。Low-level const 底层const: 底层 const 作用于指针指向的对象或引用。编译器会进行 const 类型检查,若有修改const变量,编译错误。顶层 + 底层 const,p3 既不能修改指向,也不能修改值。顶层 const ,p2 不能被修改,但可以修改其指向的值。

2025-03-28 14:45:32 452

原创 文件描述符,它在哪里存的,exec()后还存在吗

学过计系肯定了解 寄存器、程序计数器、堆栈这些 程序运行需要的资源。这些是。而操作系统分配一个进程资源时,分配的是。所以进程控制块还维护其他资源——程序与外部交互的资源——文件、管道、套接字。

2025-03-26 23:30:11 453

原创 SZU软件工程大学生涯 2022~2026

暑假开始搭CentOS环境,简单复习。以及MySQL数据库的学习。寒假第一次面试,背八股,写了写项目。寒假算法跟训,CF初上1200。Linux系统编程,数据结构。暑假开始入门CentOS。初来乍到,学习c语言。

2025-03-21 16:08:23 368

原创 C++锁: 读锁,递归锁,超时锁

面试聊到锁,只知道数据库的读锁,不了解编程中的读锁,也没谈,遂败北。

2025-03-21 11:06:29 420

原创 MVCC,MySQL中常见的锁

MVCC是一种用于数据库管理系统中实现并发控制的技术,它允许在同一时间对数据进行多个事务的读写操作,同时保证数据的一致性和隔离性。假设没有意向锁,当一个事务想要对整个表加表级别的排他锁时,数据库需要逐行检查表中的每一行数据是否已经被其他事务加了行级锁。当一个事务执行写操作时,它会创建一个新的数据行版本,并将其版本号设置为当前系统的最大版本号加 1。同时,旧的数据行版本仍然保留,以便其他事务可以读取。当一个事务执行读操作时,它会根据自身的事务版本号和数据行的版本号来判断应该读取哪个版本的数据。

2025-02-28 15:17:01 1129

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除