C学习路线
C 学习路线 编程语言 计算机基础 数据结构和算法 计算机网络 操作系统 设计模式 项目实战 Linux 操作系统 编译/调试工具 Linux 环境编程 编程语言指针、内存管理 学习书籍:《C Primer Plus》、《C 和指针》、《C 专家编程》 计算机基础数据结构和算法、计算机网络、操作系统、设计模式 数据结构和算法刷题:LeetCode 学习书籍:《大话数据结构》(C/C++)、《算法》(Java)、《剑指 Offer》 计算机网络TCP/IP 协议 学习书籍:《TCP/IP 详解》 操作系统进程和线程(并发、锁)、内存(分布、调度) 学习书籍:《深入理解操作系统》 设计模式常用:单例、工厂、代理、策略、模板方法 学习书籍:《大话设计模式》 项目实战Linux 操作系统常用命令、shell 编程(批处理、自动化脚本) 学习书籍:《鸟哥的 Linux 私房菜》、《Linux 就该这么学》 编译/调试工具编译工具:gcc、make(makefile) 调试工具:gdb 学习资料:GNU 官方 gcc 和 gdb 文...
C++常用三方库
C++ 常用三方库gtest参考资料: GoogleTest + VScode 编译和编写简单测试用例 [C++] gtest 入门教程 glog头文件:#include <glog/logging.h>。 日志级别 INFO WARNING ERROR FATAL 打印 FATAL 消息会在打印完成后终止程序。 CHECK 宏glog 提供了 CHECK() 宏帮助我们检查程序的错误,当 CHECK() 的条件不满足时,它会记录 FATAL 日志并终止程序。 123456#define CHECK_EQ(x,y) CHECK_OP(x,y,EQ,==)#define CHECK_NE(x,y) CHECK_OP(x,y,NE,!=)#define CHECK_LE(x,y) CHECK_OP(x,y,LE,<=)#define CHECK_LT(x,y) CHECK_OP(x,y,LT,<)#define CHECK_GE(x,y) CHECK_OP(x,y,GE,>=)#define CHECK_GT(x,y) CHECK_OP(x,y,G...
C++学习路线
C++ 学习路线C 语言基础 郝斌老师的 C 语言教程(选看) C++ 基本语法 黑马程序员的 C++ 教程(必看) C++ 基础知识 《C++ Primer 第五版》(必看,这个更好) 《C++ Primer Plus 第六版》(选看) 在看这本书的时候记得不要跳过课后练习题,没必要每道题都要仔仔细细的做,但是每小节后的前 2-3 题绝对需要自己做一下。 C++ 高级特性 侯捷老师的 STL 泛型编程、C++11 新特性、内存管理与分析(必看) 侯捷老师的程序的生前死后(选看) Linux 网络编程 《TCP/IP 网络编程》(必看) 《Linux 高性能服务端编程》(必看) 前者是本很好的书,原因就是手把手教你写代码,这是真的手把手教你写代码,唯一不好的点就是书中的很多知识讲的太浅了,很多功能和原理都只是一笔带过,远远不如《Linux 高性能服务端编程》讲的深。 后端开发 陈硕老师的《Mudo:Linux 多线程服务端编程》(选看) 牛客网的 Linux C/C++ 服务器的开发专栏 并发编程/模板元等 《C++ 沉思录》 《...
C++基础知识
C++ 基础知识常用关键字autoauto 允许编译器根据初始化表达式自动推导变量的类型,从而减少了手动指定类型的繁琐工作。这不仅提高了代码的可维护性,还减少了类型错误的可能性。 注意事项: auto 关键字不能用于函数参数声明,这是因为函数参数的类型必须在函数声明时明确指定,而 auto 关键字只能用于变量的类型推导; auto 关键字不能用于直接声明数组类型,这是因为数组的大小必须在编译时确定,而 auto 关键字用于类型推导时,无法推导出数组的大小。 参考资料: 【C++】auto 关键字(C++ 11,超详细解析,小白必看系列) constconst 修饰普通类型的变量: 即常量(无法修改其值)。 const 修饰指针变量: 若 const 修饰指针指向的内容,则内容为不可变量; 若 const 修饰指针,则指针为不可变量; 若 const 修饰指针和指针指向的内容,则指针和指针指向的内容都为不可变量。 12345678910111213// 常量指针?不能修改指针指向的值const int *p = 8;// 指针常量?不能修改指针指向的地址int a = ...
ZMQ
ZMQvllm 里用于消息传输的 import zmq,用的是哪个开源项目,链接是什么?在 vLLM 里你看到的: 1import zmq 对应的其实不是一个“叫 zmq 的独立项目”,而是: ✅ Python 绑定库:PyZMQ GitHub:PyZMQ GitHub 仓库 官方说明:ZeroMQ Python 页面 👉 它是 ZeroMQ 的 Python bindings,也就是说: import zmq 实际导入的是 pyzmq 这个包里的 zmq 模块 (GitHub) ✅ 底层真正的消息库:ZeroMQ(libzmq) GitHub(核心库):https://github.com/zeromq/libzmq 关系是这样的: 12345Python代码 (import zmq) ↓PyZMQ(Python封装) ↓libzmq(C++实现的ZeroMQ核心库) PyZMQ 提供 Python API libzmq 才是真正执行消息传输的高性能通信库 (PyPI) 📌 总结一句话vLLM 里的 import zmq: ...
ValidationsAndTransformations
🏗️ 后端分层架构什么是分层架构?分层架构是一种后端设计模式,其中应用程序分为不同的层,每个层都有特定的职责。 1Client → Controller → Service → Repository → Database 它确保干净的代码、关注点分离和可扩展性。 为什么使用它?它解决的问题 将业务逻辑与 HTTP 逻辑混合 控制器内的 SQL 查询 难以维护且混乱的代码 测试困难 紧耦合 好处 结构简洁 轻松测试 可扩展的设计 可维护的代码 团队友好 层解释1️⃣ 控制器层作用: 处理 HTTP 请求。 职责: 验证输入 验证/授权 致电服务 返回响应 用于: 仅请求级验证。 2️⃣ 服务层作用: 包含业务逻辑。 职责: 应用业务规则 协调存储库 数据转换 用途: 业务验证(例如,“用户已存在”)。 3️⃣ 存储库层作用: 数据库交互。 职责: 增删改查操作 与DB / ORM通信 用途: 所有数据库访问。 验证规则 类型 层 输入验证 控制器 业务验证 服务 何时使用推荐用于: API 可扩展的后端系统 生产项...
TaskQueuesAndBackgroundJobs
后台作业1. 什么是后台作业? 定义: 在主请求-响应周期之外异步运行的任何逻辑。 示例 电子邮件通知: 在用户注册后发送“欢迎”电子邮件,这样他们就不必等待邮件服务器才能看到仪表板。 图像处理: 生成多个缩略图大小或在后台对上传的照片应用滤镜。 数据导出: 生成大量 CSV 或 PDF 报告,编译可能需要 30 秒以上。 第三方同步: 将数据推送到 CRM(如 Salesforce)或更新外部搜索索引(如 Algolia),而不阻塞 UI。 为什么使用它们?主要目标是卸载耗时的非关键任务,以便主后端 API 保持响应并防止请求超时。 效益 描述 响应能力 当工作稍后进行时,用户会立即收到“成功”消息。 可扩展性 您可以独立于 Web 服务器扩展后台“工作人员”。 弹性 如果作业失败(例如,外部 API 关闭),可以自动重试,而不会导致用户会话崩溃。 它是如何工作的(概念流程) 生产者: 您的 API 接收请求并将任务“推送”到队列中。 代理: 存储层(如 Redis 或 RabbitMQ)保存任务。 Worker: 一个单独的进程从队列中拉取任务并...
SerializationAndDeserialization
🔍 这是什么?序列化将内存中对象(如 Java 类或 JS 对象)转换为传输格式(如字符串或字节流)的过程。 反序列化将传输格式转回程序可以使用的本机对象的过程。 💡为什么我们需要它?想象一下 JavaScript 前端 将“User”对象发送到 Rust 后端: JavaScript 将数据视为动态对象。 Rust 将数据视为严格的结构。 他们不能共享内存。他们需要一个通用标准(如 JSON)来充当桥梁。 现实生活中的类比: 想想宜家的家具。 序列化: 工厂将成品办公桌拆成扁平包装箱(紧凑型运输)。 传输: 盒子被运送到您家。 反序列化: 您将部件从盒子中取出并重建桌子,以便您可以使用它。 🛠 流行标准 类型 示例 最适合 基于文本 JSON、XML、YAML Web API、配置、人类可读性 基于二进制 Protobuf、Avro 高性能微服务,内部通信 🏗 JSON 深入探究JSON(JavaScript 对象表示法)是最流行的 Web 通信标准。 规则: 大括号: 必须括在 {} 中。 键: 必须位于 "double q...
Routes
后端路由基础知识基于 Srinously 的教程,关于后端系统如何将传入的 HTTP 请求映射到特定业务逻辑的综合指南。 🚀 概述路由是请求的“何处”。它结合了 HTTP 方法(意图)和 URL 路径(位置)来查找服务器上正确的处理程序。 🛠 核心概念1. 静态与动态路由 静态路由: 常量路径,如 /api/books。它们总是指向相同的资源。 动态路由: 包含变量的路径,称为 路径参数。 示例: /api/users/:id 其中 :id 可以是 123。 用法: 从语义上识别特定资源。 2. 查询参数主要用于 GET 请求来发送没有请求正文的元数据。 语法: /api/books?page=2&limit=20 常见用例: 分页(例如,page=2) 过滤(例如,category=tech) 排序(例如,sort=asc) 3.嵌套路由表达资源之间的关系。 示例: /api/users/:userId/posts/:postId 含义:“获取属于特定用户的特定帖子。” 4. API 版本控制和弃用允许进行重大更改而不会使现有客户端应用程序崩溃。 ...
RESTApiDesign
完整的 REST API 设计指南专业 REST API 设计原则、历史和最佳实践的综合指南。本文档总结了 RESTful 架构背后的关键思想以及如何设计干净、可扩展且对开发人员友好的 API。 概述API设计是后端工程师最关键的技能之一。 好的 API 不仅仅是功能 - 它们是关于创建其他开发人员可以轻松理解和集成的清晰、直观和标准化的界面。 本指南重点介绍使用 REST(表述性状态传输) 架构风格设计 API。 网络简史1990 年 — 网络的诞生蒂姆·伯纳斯·李在 CERN 工作期间发明了 万维网。 他介绍了当今网络的三项基本技术: 1.URI(统一资源标识符)URI 标识互联网上的资源。 例子: 1https://api.example.com/users/10 这里: /users → 资源集合 /10 → 特定资源 这代表 ID = 10 的用户。 2. HTTP(超文本传输协议)HTTP 定义客户端和服务器如何通过网络进行通信。 常见的HTTP方法: 方法 目的 获取 检索数据 发布 创建数据 放置 替换数据 补丁 ...