2026《数据结构》考研复习笔记三(C++高级教程)
C++高级教程
- 一、文件和流
- 二、异常处理
- 三、命名空间
- 四、模板
- 五、信号处理
- 六、多线程
一、文件和流
iostream | 用于标准输入/输出(控制台I/O),处理与终端(键盘输入和屏幕输出)的交互 包含以下全局流对象:
|
---|---|
fstream | 用于文件输入/输出(文件I/O),主要操作磁盘文件 包含以下类:
|
1.1打开文件
open()函数是fstream、ifstream和ofstream共同成员
void open(const char *filename,openmode mode);
第一个参数指定要打开的文件的名称和位置,第二个参数定义文件被打开的模式
模式标志 | 描述 |
---|---|
app | 追加模式,写入追加到文件末尾 |
ate | 文件打开后定位到文件末尾 |
in | 打开文件用于读取 |
out | 打开文件用于写入 |
trunc | 如果文件已经存在,则在文件打开之前将文件清空 |
可以将上述模式结合使用,例如:
- 写入模式打开文件,以防文件存在并清空文件:
ofstream outfile;
outfile.open(“file.dat”,out|trunc); - 打开文件用于读写:
ifstream afile;
aflie.open(“file.dat”,out|in);
1.2关闭文件
close()函数是fstream、ifstream和ofstream共同成员
void close();
1.3写入文件
使用流插入运算符<<向文件写入信息(类似输出信息到屏幕上),但是这里使用的是ofstream或fstream对象,不是cout对象
1.4读取文件
使用流提取运算符>>从文件读取信息(类似使用键盘输入信息),但是这里使用的是ifstream或fstream对象,不是cin对象
读取&写入实例:
#include <fstream>
#include <iostream>
using namespace std;int main() {char data[100];// 以写模式打开文件ofstream outfile;outfile.open("afile.dat");cout << "Writing to the file" << endl;cout << "Enter your name: "; cin.getline(data, 100);// 向文件写入用户输入的数据outfile << data << endl;cout << "Enter your age: "; cin >> data;cin.ignore();// 再次向文件写入用户输入的数据outfile << data << endl;// 关闭打开的文件outfile.close();// 以读模式打开文件ifstream infile; infile.open("afile.dat"); cout << "Reading from the file" << endl; infile >> data; // 在屏幕上写入数据cout << data << endl;// 再次从文件读取数据,并显示它infile >> data; cout << data << endl; // 关闭打开的文件infile.close();return 0;
}
//当上面的代码被编译和执行时,它会产生下列输入和输出:
/*
$./a.out
Writing to the file
Enter your name: Zara
Enter your age: 9
Reading from the file
Zara
9
*/
1.5文件位置指针
istream和ostream都提供了用于重新定位文件位置指针的成员函数,包括istream的seekg(seek get)和ostream的seekp(seek put)
第一个参数是一个长整型,第二个参数可以用于指定查找方向。有beg(默认,从流的开头定位),也可以是cur(从流的当前位置开始定位),还可以是end(从流的末尾开始定位)
关于get文件位置指针实例:
// 定位到 fileObject 的第 n 个字节(假设是 ios::beg)
fileObject.seekg( n );// 把文件的读指针从 fileObject 当前位置向后移 n 个字节
fileObject.seekg( n, ios::cur );// 把文件的读指针从 fileObject 末尾往回移 n 个字节
fileObject.seekg( n, ios::end );// 定位到 fileObject 的末尾
fileObject.seekg( 0, ios::end );
二、异常处理
异常是程序在执行期间产生的问题。C++异常处理提供一种转移程序控制权的方式,涉及到三个关键字:try、catch、throw
- throw:当问题出现时,程序会抛出一个异常
- catch:在想要处理问题的地方,通过异常处理程序捕获异常
- try:try块中的代码标识将被激活的特定异常,后面通常跟着一个或多个catch块
2.1抛出异常
throw语句可以在代码块的任何地方抛出异常。throw操作数可以是任意表达式,表达式的结果类型决定了抛出异常的类型
double division(int a,int b){if(b==0){throw "Division by zero condition!";}return (a/b);
}
2.2捕获异常
catch块跟在try块后面,用于捕获异常。可以指定想要捕获的异常,也可以使用省略号…表示catch块能够处理try块抛出的任何类型的异常
try{
//保护代码
}catch(ExceptionName e){
//处理ExceptionName异常的代码
}catch(…){
//能够处理任何异常代码
}
注:建议实践下述代码,并且自主探索几个问题:
- try块throw异常后还会执行throw块后面的代码吗
- try块throw异常后还会执行try块后面的代码吗
- catch到异常后是否直接终止程序运行(还会执行try-catch块后的代码吗
实例:
#include<iostream>
using namespace std;double division(int a, int b) {if (b == 0) {throw "Division by zero condition!";cout << "Code behind throw is running" << endl;}return a / b;
}int main() {int x = 50;int y = 0;double z = 0;try {z = division(x, y);cout << "Code behind try is running" << endl;}catch (const char* msg) {cerr << msg << endl;}cout << "Code behind try-catch is running" << endl;return 0;
}
//当上面代码被编译和执行时,产生以下结果:
//Division by zero condition!
//Code behind try-catch is running
C++标准异常和定义新异常的方法请参见【菜鸟教程】——异常。此处不再介绍
三、命名空间
当多个不同的文件分别出现相同的函数(函数体不同)时,为了区分使用的是哪个函数,于是引入了命名空间的概念。例如,一个文件夹可以包含很多文件夹,每个文件夹不能有相同的文件名,但不同的文件夹中的文件可以重名
3.1定义命名空间
命名空间的定义使用关键字namespace,后跟命名空间的名称
namespace namespace_name{
//代码声明
}
为了调用带有命名空间的函数或变量,需要在前面加上命名空间的名称,如:name::code;//code可以是变量或是函数
#include <iostream>
using namespace std;// 第一个命名空间
namespace first_space{void func(){cout << "Inside first_space" << endl;}
}
// 第二个命名空间
namespace second_space{void func(){cout << "Inside second_space" << endl;}
}
int main ()
{// 调用第一个命名空间中的函数first_space::func();// 调用第二个命名空间中的函数second_space::func(); return 0;
}
3.2using指令
使用using namespace指令,使用命名空间是不需要在前面加上命名空间的名称
#include <iostream>
using namespace std;// 第一个命名空间
namespace first_space{void func(){cout << "Inside first_space" << endl;}
}
// 第二个命名空间
namespace second_space{void func(){cout << "Inside second_space" << endl;}
}
using namespace first_space;
int main ()
{// 调用第一个命名空间中的函数func();return 0;
}
using指令也可以用来指定命名空间中的特定项目,例如只打算使用std命名空间中的cout部分,可以使用:
using std::cout
3.3不连续的命名空间
一个命名空间的各个组成部分可以分散在多个文件中。因此,如果命名空间中的某个组成部分需要请求定义在另一个文件中的名称,仍需要声明该名称
3.4嵌套的命名空间
可以在一个命名空间内定义另一个命名空间,如:
namespace namespace_name1{//代码声明namespace namespace_name2{//代码声明}
}
可以通过::运算符来访问嵌套的命名空间的成员
//访问namespace_name2中的成员
using namespace namespace_name1::namespace_name2;//访问namespace_name1中的成员
using namespace namespace_name1;//如果使用namespace_name1,那么在该范围内namespace_name2的元素也是可用的
四、模板
4.1函数模板
函数模板的一般形式:
temlpate < typename type>
return-type func-name(parameter list){
//函数主体
}
此处的type是函数所使用的数据类型的占位符名称,用来作为数据类型(int、double等)的统一表示
实例:
#include <iostream>
#include <string>using namespace std;template <typename T>
inline T const& Max (T const& a, T const& b)
{ return a < b ? b:a;
}
int main ()
{int i = 39;int j = 20;cout << "Max(i, j): " << Max(i, j) << endl; double f1 = 13.5; double f2 = 20.7; cout << "Max(f1, f2): " << Max(f1, f2) << endl; string s1 = "Hello"; string s2 = "World"; cout << "Max(s1, s2): " << Max(s1, s2) << endl; return 0;
}
4.2类模板
类模板的一般形式:
template < class type>
class class-name{
//类主体
}
实例:
#include <iostream>
#include <vector>
#include <cstdlib>
#include <string>
#include <stdexcept>using namespace std;template <class T>
class Stack { private: vector<T> elems; // 元素 public: void push(T const&); // 入栈void pop(); // 出栈T top() const; // 返回栈顶元素bool empty() const{ // 如果为空则返回真。return elems.empty(); }
}; template <class T>
void Stack<T>::push (T const& elem)
{ // 追加传入元素的副本elems.push_back(elem);
} template <class T>
void Stack<T>::pop ()
{ if (elems.empty()) { throw out_of_range("Stack<>::pop(): empty stack"); }// 删除最后一个元素elems.pop_back();
} template <class T>
T Stack<T>::top () const
{ if (elems.empty()) { throw out_of_range("Stack<>::top(): empty stack"); }// 返回最后一个元素的副本 return elems.back();
} int main()
{ try { Stack<int> intStack; // int 类型的栈 Stack<string> stringStack; // string 类型的栈 // 操作 int 类型的栈 intStack.push(7); cout << intStack.top() <<endl; // 操作 string 类型的栈 stringStack.push("hello"); cout << stringStack.top() << std::endl; stringStack.pop(); stringStack.pop(); } catch (exception const& ex) { cerr << "Exception: " << ex.what() <<endl; return -1;}
}
五、信号处理
5.1signal()函数
语法格式:signal(registered signal,signal handler)
- 第一个参数:设置的信号的标识符;
- 第二个参数:指向信号处理函数的指针
如果没有设置信号处理函数,则返回值为SIG_DFL;如果设置信号处理函数为SIG_IGN,则返回值为SIG_IGN
#include <iostream>
#include <csignal>
#include <unistd.h>using namespace std;void signalHandler( int signum )
{cout << "Interrupt signal (" << signum << ") received.\n";// 清理并关闭// 终止程序 exit(signum); }int main ()
{// 注册信号 SIGINT 和信号处理程序signal(SIGINT, signalHandler); while(1){cout << "Going to sleep...." << endl;sleep(1);}return 0;
}
/*
编译执行后按 Ctrl+C 来中断程序,您会看到程序捕获信号,程序打印如下内容并退出
Going to sleep....
Going to sleep....
Going to sleep....
Interrupt signal (2) received.
*/
注释:signal(SIGINT,signalHandler);的作用是注册信号处理函数,当程序收到SIGINT信号时,调用signalHandler函数来处理该信号
- SIGINT是一个标准的POSIX信号,通常由用户按下Ctrl+C在终端触发
- signal(SIGINT,signalHandler)告诉操作系统,当程序收到SIGINT信号时,不要执行默认行为(直接终止),而是调用sinalHandler函数
5.2raise()函数
语法形式:int raise(signal sid);
sig是要发送的信号的编号,包括:SIGINT,SIGABRT,SIGFPE,SIGILL,SIGSEGV,SIGTERM,SIGHUP
实例:
#include <iostream>
#include <csignal>
#include <unistd.h>using namespace std;void signalHandler( int signum )
{cout << "Interrupt signal (" << signum << ") received.\n";// 清理并关闭// 终止程序 exit(signum); }int main ()
{int i = 0;// 注册信号 SIGINT 和信号处理程序signal(SIGINT, signalHandler); while(++i){cout << "Going to sleep...." << endl;if( i == 3 ){raise( SIGINT);}sleep(1);}return 0;
}
/*
当上面的代码被编译和执行时,它会产生下列结果,并会自动退出:
Going to sleep....
Going to sleep....
Going to sleep....
Interrupt signal (2) received.
*/
六、多线程
多任务处理的类型:
- 基于进程的多任务处理是不同程序的并发执行
- 基于线程的多任务处理是同一程序不同片段的并发执行
6.1概念说明
-
线程(Thread):线程共享进程的地址空间、文件描述符、堆和全局变量等资源,但每个线程有自己的栈、寄存器和程序计数器
-
并发:多个任务在时间片段内交替执行,表现出同时进行的效果
并行:多个任务在多个处理器或处理器核上同时执行 -
多线程核心组件:
- thread:用于创建和管理线程
- mutex:用于进程之间的互斥,放置多个线程同时访问共享资源
- lock_guard和unique_lock:用于管理锁的获取和释放
- condition_variable:用于线程之间的条件变量、协调线程间的等待和通知
- future和promise:用于实现线程间的值传递和任务同步
6.2创建线程
标准线程库头文件#include<thread> std::thread thread_object(callable,args…);
其中,callable:可调用对象(函数指针,函数对象,Lambda表达式等);args…:传递给callable的参数列表
【使用函数指针】
#include <iostream> #include <thread>void printMessage(int count) {for (int i = 0; i < count; ++i) {std::cout << "Hello from thread (function pointer)!\n";} }int main() {std::thread t1(printMessage, 5); // 创建线程,传递函数指针和参数t1.join(); // 等待线程完成return 0; }
【使用函数对象】
#include <iostream> #include <thread>class PrintTask { public:void operator()(int count) const {for (int i = 0; i < count; ++i) {std::cout << "Hello from thread (function object)!\n";}} };int main() {std::thread t2(PrintTask(), 5); // 创建线程,传递函数对象和参数t2.join(); // 等待线程完成return 0; }
【使用Lambda表达式】
#include <iostream> #include <thread>int main() {std::thread t3([](int count) {for (int i = 0; i < count; ++i) {std::cout << "Hello from thread (lambda)!\n";}}, 5); // 创建线程,传递 Lambda 表达式和参数t3.join(); // 等待线程完成return 0; }
6.3线程管理
join():用于等待线程完成执行,如果不调用join()或detach()而直接销毁线程对象,会导致程序崩溃
t.jion()
detach():用于将线程与主线程分离,线程在后台独立运行,主线程不再等待它
t.detach():
6.4线程的传参
值传递:
thread t(func,arg1,arg2);
引用传递:
thread t(increment,ref(num));
综合实例:
#include <iostream> #include <thread> using namespace std;// 一个简单的函数,作为线程的入口函数 void foo(int Z) {for (int i = 0; i < Z; i++) {cout << "线程使用函数指针作为可调用参数\n";} }// 可调用对象的类定义 class ThreadObj { public:void operator()(int x) const {for (int i = 0; i < x; i++) {cout << "线程使用函数对象作为可调用参数\n";}} };int main() {cout << "线程 1 、2 、3 独立运行" << endl;// 使用函数指针创建线程thread th1(foo, 3);// 使用函数对象创建线程thread th2(ThreadObj(), 3);// 使用 Lambda 表达式创建线程thread th3([](int x) {for (int i = 0; i < x; i++) {cout << "线程使用 lambda 表达式作为可调用参数\n";}}, 3);// 等待所有线程完成th1.join(); // 等待线程 th1 完成th2.join(); // 等待线程 th2 完成th3.join(); // 等待线程 th3 完成return 0; }
注:关于线程的互斥笔者打算在复习操作系统时总结,有兴趣的朋友可以访问【菜鸟教程】——多线程
注:关于Web编程此处也不再总结,笔者打算复习计算机网络时再总结,如果有兴趣,可以访问菜鸟教程——Web编程
目标与计划:正是复习完C++编程语言知识点,之前粗略复习完了《数据结构》的课本知识,接下来开始根据课本知识点刷leetcode题目,然后再做课后题
相关文章:
2026《数据结构》考研复习笔记三(C++高级教程)
C高级教程 一、文件和流二、异常处理三、命名空间四、模板五、信号处理六、多线程 一、文件和流 iostream 用于标准输入/输出(控制台I/O),处理与终端(键盘输入和屏幕输出)的交互 包含以下全局流对象: cin&…...
python进阶: 深入了解调试利器 Pdb
Python是一种广泛使用的编程语言,以其简洁和可读性著称。在开发和调试过程中,遇到错误和问题是不可避免的。Python为此提供了一个强大的调试工具——Pdb(Python Debugger)。 Pdb是Python标准库中自带的调试器,可以帮助…...
前端资源加载失败后重试加载(CSS,JS等引用资源)
前端资源加载失败后的重试 .前端引用资源时出现了资源加载失败(这里针对的是路径引用异常或者url解析错误时) 解决这个问题首先要明确一下几个步骤 1.什么情况或者什么时候重试 2.如何重试 3.重试过程中的边界处理 这里引入里三个测试脚本,分别加载里三个不同的脚…...
每日算法【双指针算法】(Day 2-复写零)
双指针算法 1.算法题目(复写零)2.讲解算法原理3.编写代码 1.算法题目(复写零) 注意:不要越界,不能开额外的数组,只能从现有数组上进行操作,没有返回值。 2.讲解算法原理 解法:双指针操作 先根据“异地”操作…...
【C++深入系列】:模版详解(上)
🔥 本文专栏:c 🌸作者主页:努力努力再努力wz 💪 今日博客励志语录: 你不需要很厉害才能开始,但你需要开始才能很厉害。 ★★★ 本文前置知识: 类和对象(上) …...
PyCharm Flask 使用 Tailwind CSS v3 配置
安装 Tailwind CSS 步骤 1:初始化项目 在 PyCharm 终端运行:npm init -y安装 Tailwind CSS:npm install -D tailwindcss3 postcss autoprefixer初始化 Tailwind 配置文件:npx tailwindcss init这会生成 tailwind.config.js。 步…...
设计模式每日硬核训练 Day 15:享元模式(Flyweight Pattern)完整讲解与实战应用
🔄 回顾 Day 14:组合模式小结 在 Day 14 中,我们学习了组合模式(Composite Pattern): 适用于构建树状层级结构,使得“单个对象”和“对象集合”统一操作。广泛用于文件系统、UI 控件树、组织结…...
使用Service发布应用程序
使用Service发布应用程序 文章目录 使用Service发布应用程序[toc]一、什么是Service二、通过Endpoints理解Service的工作机制1.什么是Endpoints2.创建Service以验证Endpoints 三、Service的负载均衡机制四、Service的服务发现机制五、定义Service六、Service类型七、无头Servic…...
美家市场2025电视版分享码-美家市场电视直播软件分享码免费获取
美家市场2025电视版作为一款备受欢迎的应用市场,为用户提供了海量的电视直播软件,而分享码则是免费获取这些资源的重要途径。与此同时,乐看家桌面也是一款在智能电视领域极具特色的软件,它能与美家市场搭配使用,为用户…...
动手学深度学习:手语视频在NiN模型中的测试
前言 NiN模型是在LeNet的基础上修改,提出了1x1卷积层和全局平均池化层的概念,减少了全连接所带来的参数量很多的问题。本篇在之前代码的基础上添加了模型保存,loss和acc记录以及记录模型时间等功能,所以模型后面的代码会重新记录…...
医院数据中心智能化数据上报与调数机制设计
针对医院数据中心的智能化数据上报与调数机制设计,需兼顾数据安全性、效率性、合规性及智能化能力。以下为系统性设计方案,分为核心模块、技术架构和关键流程三部分: 一、核心模块设计 1. 数据上报模块 子模块功能描述多源接入层对接HIS/LIS/PACS/EMR等异构系统,支持API/E…...
Ubuntu命令速查
当你在Ubuntu系统中需要快速查询常用命令时,可以使用以下速查表: 列出文件和目录: ls切换目录: cd [目录路径]显示当前工作目录的绝对路径: pwd创建新目录: mkdir [目录名]删除文件或目录: rm […...
一次制作参考网杂志的阅读书源的实操经验总结(附书源)
文章目录 一、背景介绍二、书源文件三、详解制作书源(一)打开Web服务(二)参考网结构解释(三)阅读书源 基础(四)阅读书源 发现(五)阅读书源 详细(六…...
python抓取HTML页面数据+可视化数据分析(投资者数量趋势)
本文所展示的代码是一个完整的数据采集、处理与可视化工具,主要用于从指定网站下载Excel文件,解析其中的数据,并生成投资者数量的趋势图表。以下是代码的主要功能模块及其作用: 1.网页数据获取 使用fetch_html_page函数从目标网…...
下拉框select标签类型
在我们很多页面里有下拉框的选择,这种元素怎么定位呢?下拉框分为两种类型:我们分别针对这两种元素进行定位和操作 select标签 : 通过select类处理。 非select标签 1、针对下拉框元素,如果是Select标签类型,…...
嵌入式C语言位操作的几种常见用法
作为一名老单片机工程师,我承认,当年刚入行的时候,最怕的就是看那些密密麻麻的寄存器定义,以及那些让人眼花缭乱的位操作。 尤其是遇到那种“明明改了寄存器,硬件就是不听话”的情况,简直想把示波器砸了&am…...
数据库原理及应用mysql版陈业斌实验四
🏝️专栏:Mysql_猫咪-9527的博客-CSDN博客 🌅主页:猫咪-9527-CSDN博客 “欲穷千里目,更上一层楼。会当凌绝顶,一览众山小。” 目录 实验四索引与视图 1.实验数据如下 student 表(学生表&…...
【免登录ORACLE,jdk8安装包下载】jdk-8u441-windows-i586.exe和jdk-8u441-windows-x64.exe有什么区别
jdk-8u441-windows-i586.exe和jdk-8u441-windows-x64.exe主要有以下区别: 我用夸克网盘分享了「jdk」,链接:https://pan.quark.cn/s/c72666843e2b 适用系统架构: jdk-8u441-windows-i586.exe适用于32位的Windows操作系统&#x…...
Oracle日志系统之附加日志
Oracle日志系统之附加日志 在 Oracle 数据库中,附加日志(Supplemental Log)是一种增强日志记录的机制,用于在数据库的 redo log 中记录更多的变更信息,尤其是在进行数据迁移、复制和同步等任务时,能够确保…...
从零到一:管理系统设计新手如何快速上手?
管理系统设计是一项复杂而富有挑战性的任务,它要求设计者具备多方面的知识和技能,包括需求分析、架构设计、数据管理、用户界面设计等。对于初次接触这一领域的新手而言,如何快速上手并成为一名合格的管理系统设计者呢?本文将从管…...
Web 前端包管理工具深度解析:npm、yarn、pnpm 全面对比与实战建议
引言: 在现代web前端开发中,包管理工具的重要性不言而喻,无论是构建项目脚手架,安装ui库,管理依赖版本,还是实现monorepo项目结构,一个高效稳定的包管理工具都会大幅提升开发体验和协作效率 作为一名前端工程师,深入了解这些工具背后的机制与差异,对于提升项目可维护性和团队…...
Windows 图形显示驱动开发-WDDM 1.2功能—Windows 8 中的 DirectX 功能改进(六)
一、具有多示例抗别名示例访问权限的 UAV Direct3D 11 允许光栅化到无序访问视图, (UAV) 没有呈现目标视图 (RTV) /DSV 绑定。 即使 UAV 可以具有任意大小,实现也可以使用视区/剪刀矩形的像素尺寸来操作光栅器。 DirectX 11 硬件的示例模式仅为单个示例…...
Jenkins 多分支流水线: 如何创建用于 Jenkins 状态检查的 GitHub 应用
使用 Jenkins 多分支流水线时,您可以将状态检查与 GitHub 拉取请求集成。 以下是状态检查的示例 要实现这些类型的状态检查,您需要创建一个与 Jenkins 主实例集成的 GitHub 应用。 在本博客中,我们将介绍如何创建一个 GitHub 应用ÿ…...
LeeCode912. 排序数组
给你一个整数数组 nums,请你将该数组升序排列。 你必须在 不使用任何内置函数 的情况下解决问题,时间复杂度为 O(nlog(n)),并且空间复杂度尽可能小。 示例 1: 输入:nums [5,2,3,1] 输出:[1,2,3,5]示例 2…...
Maven 简介(图文)
Maven 简介 Maven 是一个Java 项目管理和构建的工具。可以定义项目结构、项目依赖,并使用统一的方式进行自动化构建,是Java 项目不可缺少的工具。 Maven 的作用 提供标准化的项目结构:以前不同的开发工具创建的项目结构是不一样的…...
深入规划 Elasticsearch 索引:策略与实践
一、Elasticsearch 索引概述 (一)索引基本概念 Elasticsearch 是一个分布式、高性能的全文搜索引擎,其核心概念之一便是索引。索引本质上是一个存储文档的逻辑容器,它使得数据能够在高效的检索机制下被查询到。当我们对文档进行…...
基于X86/RK/全志+FPGA+AI工业一体机在电力接地系统中的应用方案
随着电力技术的发展和需求增加,智能电网建设受到全球关注。电力五防系统建设是确保我国电力安全的核心任务,接地管理系统是其中的关键部分,对电力系统的安全、稳定和高效运行至关重要。工业一体机,凭借其卓越的性能、稳定性和环境…...
论文阅读:2024 arxiv AI Safety in Generative AI Large Language Models: A Survey
总目录 大模型安全相关研究:https://blog.csdn.net/WhiffeYF/article/details/142132328 AI Safety in Generative AI Large Language Models: A Survey https://arxiv.org/pdf/2407.18369 https://www.doubao.com/chat/3262156521106434 速览 研究动机&#x…...
JVM对象创建全过程
JVM对象创建全过程深度解析 1. 对象创建的整体流程 JVM创建对象的过程可以分为7个关键步骤,从类检查到内存分配,再到对象初始化: 类加载检查 → 内存分配 → 内存空间初始化 → 对象头设置 → 构造函数执行 → 栈帧引用建立 → 对象使用2.…...
ubuntu 22.04 使用ssh-keygen创建ssh互信账户
现有两台ubuntu 22.04服务器,ip分别为192.168.66.88和192.168.88.66。需要将两台服务器创建新用户并将新用户做互信。 创建账户 adduser user1 # 如果此用户不想使用密码,直接一直回车就行,创建的用户是没法使用用户密码进行登陆的 su - …...
蓝牙开发那些事儿12——(记一颗BLE芯片BringUp折腾过程)
1.背景 蓝牙这个系列已经很久很久没有更新了,感慨良多。 现在写这篇文章主要是BringUp一颗蓝牙芯片的过程中遇到了一些奇怪的问题,想了一些办法,一一克服了,看看对其他做蓝牙的同学有没有启发。 同时也安利一个叫做HACKRF的设备…...
从零构建 Vue3 登录页:结合 Vant 组件与 Axios 实现完整登录功能
在 Web 开发的世界里,登录页是用户与应用交互的第一道门槛,它的体验好坏直接影响着用户对整个应用的印象。本文将详细记录如何使用 Vue3、Vant 组件库和 Axios 构建一个兼具美观与实用的登录页面,并实现完整的登录逻辑与数据验证,…...
AutoSAR从概念到实践系列之MCAL篇(一)——MCAL架构及其模块详解
欢迎大家学习我的《AutoSAR从概念到实践系列之MCAL篇》系列课程,我是分享人M哥,目前从事车载控制器的软件开发及测试工作。 学习过程中如有任何疑问,可底下评论! 如果觉得文章内容在工作学习中有帮助到你,麻烦点赞收藏评论+关注走一波!感谢各位的支持! 老规矩,…...
多线程编程的简单案例——单例模式[多线程编程篇(3)]
目录 前言 1.wati() 和 notify() wait() 和 notify() 的产生原因 如何使用wait()和notify()? 案例一:单例模式 饿汉式写法: 懒汉式写法 对于它的优化 再次优化 结尾 前言 如何简单的去使用jconsloe 查看线程 (多线程编程篇1)_eclipse查看线程-CSDN博客 浅谈Thread类…...
万物互联时代,AWS IoT Core如何构建企业级物联网中枢平台?
在智能制造、智慧城市、车联网等场景爆发的今天,全球物联网设备数量已突破150亿台。企业如何高效管理海量设备并挖掘数据价值?AWS IoT Core作为亚马逊云科技推出的全托管物联网平台,正在为数千家企业提供设备连接、数据采集、实时分析的一站式…...
论文阅读:2023 arxiv Safe RLHF: Safe Reinforcement Learning from Human Feedback
总目录 大模型安全相关研究:https://blog.csdn.net/WhiffeYF/article/details/142132328 Safe RLHF: Safe Reinforcement Learning from Human Feedback https://arxiv.org/pdf/2310.12773 https://github.com/PKU-Alignment/safe-rlhf 速览 研究动机ÿ…...
链表相关算法题
小细节 初始化问题 我们这样子new一个ListNode 它里面的默认值是0,所以我们不能这样 如果我们为空,我们要返回null 节点结束条件判断(多创建节点问题) 参考示例3217 解析: 我的答案是多了一个无用节点 这是因为我每…...
招商信诺原点安全:一体化数据安全管理解决方案荣获“鑫智奖”!
近日,“鑫智奖 2025第七届金融数据智能优秀解决方案评选”榜单发布,原点安全申报的《招商信诺:数据安全一体化管理解决方案》荣获「信息安全创新优秀解决方案」。 “鑫智奖第七届金融数据智能优秀解决方案评选”活动由金科创新社主办&#x…...
实战篇|多总线网关搭建与量产验证(5000 字深度指南)
引言 1. 环境准备与硬件选型 1.1 项目需求分析 1.2 SoC 与开发板选型 1.3 物理接口与 PCB 设计 1.4 电源与供电保护 2. 软件架构与协议栈移植 2.1 分层架构详解 2.2 协议栈移植步骤 2.3 高可用驱动设计 2.4 映射逻辑与 API 定义 3. 开发流程与实践 3.1 敏捷迭代与里程碑 3.2 核…...
Jenkins 简易使用记录
一、Jenkins 核心功能与适用场景 核心功能: 持续集成(CI):自动构建代码、运行单元测试。持续交付(CD):自动化部署到测试/生产环境。任务调度:定时执行任务(如备份、清理&…...
第十四节:实战场景-何实现全局状态管理?
React.createElement调用示例 Babel插件对JSX的转换逻辑 React 全局状态管理实战与 JSX 转换原理深度解析 一、React 全局状态管理实现方案 1. Context API useReducer 方案(轻量级首选) // 创建全局 Context 对象 const GlobalContext createConte…...
启动vite项目报Unexpected “\x88“ in JSON
启动vite项目报Unexpected “\x88” in JSON 通常是文件被防火墙加密需要寻找运维解决 重启重装npm install...
Jenkins 多分支管道
如果您正在寻找一个基于拉取请求或分支的自动化 Jenkins 持续集成和交付 (CI/CD) 流水线,本指南将帮助您全面了解如何使用 Jenkins 多分支流水线实现它。 Jenkins 的多分支流水线是设计 CI/CD 工作流的最佳方式之一,因为它完全基于 git(源代…...
PHP腾讯云人脸核身获取NONCE ticket
参考腾讯云官方文档: 人脸核身 获取 NONCE ticket_腾讯云 前提条件,已经成功获取了access token。 获取参考文档: PHP腾讯云人脸核身获取Access Token-CSDN博客 public function getTxFaceNonceTicket($uid) {$access_token file_get_c…...
云计算(Cloud Computing)概述——从AWS开始
李升伟 编译 无需正式介绍亚马逊网络服务(Amazon Web Services,简称AWS)。作为行业领先的云服务提供商,AWS为全球开发者提供了超过170项随时可用的服务。 例如,Adobe能够独立于IT团队开发和更新软件。通过AWS的服务&…...
51单片机实验五:A/D和D/A转换
一、实验环境与实验器材 环境:Keli,STC-ISP烧写软件,Proteus. 器材:TX-1C单片机(STC89C52RC)、电脑。 二、 实验内容及实验步骤 1.A/D转换 概念:模数转换是将连续的模拟信号转换为离散的数字信…...
重构未来智能:Anthropic 解码Agent设计哲学三重奏
第一章 智能体进化论:从工具到自主体的认知跃迁 1.1 LLM应用范式演进图谱 阶段技术形态应用特征代表场景初级阶段单功能模型硬编码规则执行文本摘要/分类进阶阶段工作流编排多模型协同调度跨语言翻译流水线高级阶段自主智能体动态决策交互编程调试/客服对话 1.1.…...
MCP协议在纳米材料领域的深度应用:从跨尺度协同到智能研发范式重构
MCP协议在纳米材料领域的深度应用:从跨尺度协同到智能研发范式重构 文章目录 MCP协议在纳米材料领域的深度应用:从跨尺度协同到智能研发范式重构一、MCP协议的技术演进与纳米材料研究的适配性分析1.1 MCP协议的核心架构升级1.2 纳米材料研发的核心挑战与…...
.NET Core 服务实现监控可观测性最佳实践
.NET Core 概述 .Net Core 是一个开源的、跨平台的高性能框架,由微软开发并维护,现由 .NET Foundation 提供支持。它用于构建现代化、可扩展的云端和本地应用程序,支持开发 Web 应用、微服务、API、物联网应用以及移动后端服务,是…...
ios精灵脚本辅助软件,有根和无根roothide越狱区别
最新版本的ios按键精灵app 支持到15-16系统,可以在半越狱环境下和无根越狱环境安装,对于很多用户一直不理解有根和无根之间的差别,今天简单介绍下 最高权限和部分权限的区别 1、有根越狱 – 有系统根目录读写权限(通过越狱软件可…...