1. C++11 发展的历史c++11是 c++的第二个主要的版本, 并且是从 c++98 最重要的更新。他最终由 ISO在2011 年8月12日采纳,
人们曾经使用名称 c++0x,用为他曾经被期待在2010年之前更新。 c++11 与 c++03 之间的更新相差8年,
是更新间隔最长的一次版本。从那时起,c++有规律地每3年更新一次。
学习内容
初始化列表
现在我们就来认真地学习一下这个被称为改变 c++ 历史的更新
2. 列表初始化2.1 c++98 传统的💡
12345678910111213struct Point{ int _x; int _y;};int main(){ int array1[] = { 1, 2, 3, 4, 5 }; int array2[5] = { 0 }; Point p = { 1, 2 }; return 0;}
2.2 c++中的 {}c++11之后,标准制定组织试图实现一切对象皆可用 {} 初始化为, ...
在软件研发与运维的迭代浪潮中,“环境一致性”“部署效率”“资源利用率”始终是核心痛点。Docker作为容器化技术的代表性实现,其演进之路与服务端架构从单机到分布式、云原生的发展轨迹深度绑定。本文将以“业务需求驱动技术升级”为主线,复刻《技术架构演进之路》的分析框架,详细拆解Docker从单机试用、多容器协同到云原生生态核心的完整演进过程,厘清各阶段的核心问题、解决方案及技术生态。
一、演进前置:容器技术的核心概念铺垫 🔍在梳理Docker演进前,先明确与容器相关的核心概念,避免理解偏差:
容器(Container)📦:一种轻量级的虚拟化技术,将应用及其依赖(代码、运行时、库、环境变量、配置文件)打包成标准化单元,实现“一次构建,到处运行”。
Docker 🔧:开源的应用容器引擎,提供容器的构建、运行、分发全生命周期管理能力,核心价值是解决“开发环境与生产环境不一致”的痛点。
镜像(Image)📸:容器的分层、不可修改(只读) 文件系统模板,包含运行应用所需的所有依赖,是容器启动的基础。
容器编排(Orchestration)⚙️:对多主机、多容器的全生命周期管理,包括部 ...
1. 数组(Array)基本特性
固定长度:数组长度在编译期确定,是类型的一部分
值类型:数组赋值和传参会发生完整拷贝
连续内存:元素在内存中连续存储,访问效率 O(1)
代码示例1234567891011121314151617181920212223package mainimport "fmt"func main() { // 声明并初始化 var arr1 [5]int // 零值初始化:[0 0 0 0 0] arr2 := [3]int{1, 2, 3} arr3 := [...]int{1, 2, 3, 4} // 编译器推导长度 // 数组是值类型 arr4 := arr2 arr4[0] = 100 fmt.Println(arr2) // [1 2 3] - 原数组不变 fmt.Println(arr4) // [100 2 3] // 多维数组 matrix := [2][3]int{ ...
“go”
“编程语言”tags:
gocoverImage: “photo-1642367340318-96fdbc5d30f5-scaled.jpg”
Go 语言特点与优势Go(又称 Golang)是 Google 于 2009 年推出的开源编程语言,由 Robert Griesemer、Rob Pike 和 Ken Thompson 设计。
核心特点1. 简洁高效
语法简洁,关键字仅 25 个
编译速度极快,接近解释型语言的开发效率
代码可读性强,易于维护
2. 原生并发支持
内置 goroutine(轻量级线程)
channel 实现优雅的并发通信
单机可轻松支持数万并发
3. 垃圾回收
自动内存管理,无需手动释放
GC 性能持续优化,停顿时间极短
4. 静态类型 + 类型推断
编译期类型检查,减少运行时错误
支持类型推断,减少冗余代码
5. 丰富的标准库
网络、HTTP、JSON、加密等开箱即用
跨平台支持(Windows/Linux/macOS)
6. 部署简单
编译生成单一可执行文件
无需依赖外 ...
1. 新的求值顺序🌐参考网站资料:
在C++17之前,很多表达式的求值顺序都是未指定的(unspecified),这意味着编译器可以自由选择求值顺序,这导致了不确定性和潜在的bug, C++17的求值顺序规则大大提高了代码的可预测性和安全性,消除了许多历史遗留下来的未定义行为问题。
建议还是不要依赖未指定的求值顺序,即使C++17修复了一些问题,最好还是写出不依赖特定求值顺序的代码,否则代码的可维护性和可读性都会变差,建议将复杂的表达式拆分为多个简单的语句。
表达式类型
C++17之前
C++17之后
a = b
未指定
先求值b,在求值a
a += b, a -=b
未定义
先求值b, 在求值a
a << b, a >> b
未指定
从左到求值
a[b]
未定义
先求值a, 在求值b
a → b
未定义
先求值a, 再求值b
f(a, b, c)
未定义
参数求值顺序仍然未指定,但都在函数调用之前✅
new Type(a, b)
未定义
先求职所有参数,在分配内存
12345678 ...
随着大语言模型(LLM)能力的飞速提升,AI 应用的开发已经从早期的“调用 API 即可”演变成了一项复杂的系统工程。在这个过程中,LangChain 和它衍生出的 LangGraph 成为了开发者手中不可或缺的利器。但面对这两个名字相似的框架,许多开发者会陷入困惑:我到底该用哪一个?它们之间是替代关系还是互补关系?
本文将为你全景解析这两大框架的核心机制、适用场景,并提供一份最终的选型避坑指南。
这是一篇为您量身定制的博客文章,基于您的《全景解析与选择指南(理论与对比篇)》大纲,并结合了相关的技术细节进行了深度扩充。
一、 引言:大模型应用开发的演进与挑战1. 原生大模型 API 的痛点在 AI 应用开发的初期,我们通常直接调用 OpenAI 或 DeepSeek 等原生模型的 API,进行简单的一问一答。然而,当我们将大模型嵌入到复杂的业务系统中时,很快就会遇到瓶颈:
缺乏私有知识: 模型只知道训练时的数据,无法回答企业内部或实时的信息(例如幻觉问题严重)。
非结构化输出难题: 业务系统通常需要结构化的数据(如 JSON),而 LLM 默认输出自然语言,难以直接对接程序接口。 ...
编程语言
未读1. 为什么要使用 goroutine在实际开发里,你经常会遇到这类需求:
同时处理很多 IO(HTTP 请求、数据库、文件、消息队列)。
把一个大任务拆成多个子任务并发执行(批处理、爬虫、转码)。
后端服务需要同时处理大量连接与请求。
传统做法通常是“一个任务一个线程”。但 OS 线程创建、切换的成本较高,线程数也不可能无限增长。
goroutine 的意义:用更轻量的并发执行单元,把并发写成“语言层面的常规代码”,并交给 Go runtime 调度。
2. 进程、线程、并发与并行(先把概念对齐)
进程(Process):程序在操作系统中的一次执行过程,是资源分配与调度的基本单位。每个进程有独立的地址空间。
线程(Thread):进程内的执行单元,是程序执行的最小单位。一个进程可以包含多个线程。
并发(Concurrency):多个任务在同一段时间内交替推进,强调“组织与调度”。单核 CPU 上多任务通常体现为并发。
并行(Parallelism):多个任务在同一时刻真正同时执行,强调“硬件多核 + 调度”。多核 CPU 上更容易实现并行。
用一句话理解:
并 ...
🚀 为什么需要学Vue3?Vue3是目前最流行的前端框架之一,学习它有以下几个重要原因:
1. 市场需求旺盛
国内大厂(阿里、腾讯、字节跳动等)广泛使用Vue3
招聘市场对Vue3开发者需求量大,薪资待遇优厚
中小企业也普遍采用Vue技术栈
2. 学习曲线友好
中文文档完善,对中国开发者友好
渐进式框架设计,可以逐步深入学习
社区活跃,学习资源丰富
3. 开发效率高
组合式API提高代码复用性
响应式系统自动更新UI,无需手动操作DOM
丰富的生态系统(Vue Router、Pinia、Element Plus等)
4. 性能优秀
虚拟DOM优化,渲染速度快
按需编译,打包体积小
支持Tree-shaking,减少冗余代码
5. 职业发展
掌握Vue3可以开发企业级应用
为学习React、Angular等框架打下基础
可以转向全栈开发(配合Node.js)
💡 Vue3技术为什么会诞生?理解Vue3的诞生背景,有助于我们更好地掌握它的设计理念和核心特性。
Vue2遇到的瓶颈在Vue3诞生之前,Vue2已经非常成熟并被广泛使用。但随 ...
1. C++14 的介绍
在这里我们可以发现 c++14 是·c++11的这要版本之后的一个次要版本,主要包括了改进和缺陷修复,更新的语法和并发库不是很多。他是在2014年8月18日获得批准,2015年12月15日首发。
那么就让我们开始学习 c++14 标准的新特性和语法吧。 🌈 🌈
2. 变量模板c++14 允许使用变量模板,还可以适用于变量。
一个简单的例子:
12345678910111213141516171819202122232425262728293031#include <iostream>template<class T>constexpr T pi = T(3.1415926535897932385L); // 变量模板 template<class T>T circular_area(T r) // 函数模板 { return pi<T> *r * r; // pi<T> 是变量模板实例化 }template<std::size_t N>constexpr std:: ...
🐬 MySQL 存储过程、触发器与 SQL 编程实战指南
服务端集中处理示意
📌 阅读导航
关系型数据库示意图
🧮 存储过程 = 把一段业务逻辑搬进数据库
一、存储过程(Stored Procedure) 🧮1.1 什么是存储过程存储过程是一组为了完成特定业务功能的 SQL 语句集合,经编译后存储在数据库服务器端,用户只需要通过
12CALL 存储过程名(参数列表);CALL 存储过程名(参数列表);
即可执行内部的一系列 SQL 操作,并得到结果。
可以理解为:把复杂的 SQL 逻辑写在数据库里,封装成一个“函数”供外部调用。
1.2 存储过程的特点1.3 存储过程的优缺点
1.4 存储过程语法在命令行中书写存储过程时,需要临时修改语句结束符,否则过程体中的分号会被误认为语句结束:
12345678910111213141516171819202122232425262728293031323334353637383940-- 1. 修改结束符为 //DELIMITER //-- 2. 创建存储过程CREATE PROCEDURE 存储过程名 (参数列表)B ...


