当前位置: 首页 > news >正文

操作系统原理实验报告

操作系统原理课程的实验报告汇总

实验三:线程的创建与撤销

实验环境:计算机一台,内装有VC++、office等软件

实验日期:2024.4.11

实验要求:

1.理解:Windows系统调用的基本概念,进程与线程的基本概念。

2.掌握:使用Windows系统调用创建与撤销线程的方法。

实验内容:

1.使用Windows系统提供的系统调用创建线程。

2.使用Windows系统提供的系统调用撤销线程。

3.使用Windows系统提供的系统调用挂起线程。

实验源代码


// 实验三:线程的创建与撤销.cpp : Defines the entry point for the console application.
//#include "stdafx.h"
#include "实验三:线程的创建与撤销.h"#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif/
// The one and only application objectCWinApp theApp;using namespace std;
void ThreadName1();
static HANDLE hHandle1 = NULL;
DWORD dwThreadID1;int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{int nRetCode = 0;hHandle1 = CreateThread((LPSECURITY_ATTRIBUTES) NULL,0,(LPTHREAD_START_ROUTINE) ThreadName1,(LPVOID) NULL,0,&dwThreadID1);Sleep(5000);CloseHandle(hHandle1);ExitThread(0);return nRetCode;
}void ThreadName1()
{printf("xiancheng is Running\n");
}

实验总结:

代码没有任何问题,过编译不过运行是因为将VC++安装在了C盘,权限不够,将其重新安装在D盘即成功运行。

对于代码的一些注释:

HANDLE类型的hHandle1是用于存储线程返回句柄的变量

DWORD类型的dwThreadID1是用于存储线程标识符的变量

创建操作:CreateHandle方法中共需要6个变量,本次代码中第三个变量为创建一个名为ThreadName1的线程

挂起操作:Sleep(5000);将主线程挂起5秒

CloseHandle方法用于关闭句柄

撤销操作:ExitThread(0)方法用于撤销所有线程

实验四:线程的同步

实验环境:计算机一台,内装有VC++、office等软件

实验日期:2024.4.26

实验要求:

1.理解:线程同步的基本概念。

2.掌握:使用线程同步API实现多线程同步的方法。

实验内容:

1.使用Windows系统提供的系统调用创建与撤销线程。

2.使用Windows系统提供的线程同步API实现多线程同步。

3.使用Windows系统提供的线程同步API解决实际问题。

实验源代码

// 15 实验四:线程的同步.cpp : Defines the entry point for the console application.
//#include "stdafx.h"
#include "15 实验四:线程的同步.h"#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif/
// The one and only application objectCWinApp theApp;using namespace std;static HANDLE h1;
static HANDLE hHandle1 = NULL;
void func();int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{int nRetCode = 0;DWORD dwThreadID1;DWORD dRes,err;hHandle1 = CreateSemaphore(NULL, 0, 1, "SemaphoreName1");if(hHandle1 == NULL) printf("Semaphore Create Fail\n");else printf("Semaphore Create Success\n");hHandle1 = OpenSemaphore(SYNCHRONIZE|SEMAPHORE_MODIFY_STATE,NULL,"SemaphoreName1");if(hHandle1 == NULL) printf("Semaphore Open Fail\n");else printf("Semaphore Open Success\n");h1 = CreateThread((LPSECURITY_ATTRIBUTES)NULL,0,(LPTHREAD_START_ROUTINE)func,(LPVOID)NULL,0,&dwThreadID1);if(h1==NULL) printf("Thread1 create Fail\n");else printf("Thread1 create Success\n");dRes = WaitForSingleObject(hHandle1,INFINITE);err = GetLastError();printf("WaitForSingleObject err =%d\n", err);if(dRes == WAIT_TIMEOUT) printf("TIMEOUT! dRes = %d\n", dRes);else if(dRes == WAIT_OBJECT_0) printf("WAIT_OBJECT! dRes = %d\n", dRes);else if(dRes == WAIT_ABANDONED) printf("WAIT_ABANDONED! dRes = %d\n", dRes);else printf("dRes = %d\n", dRes);CloseHandle(h1);CloseHandle(hHandle1);ExitThread(0);return nRetCode;
}void func()
{BOOL rc;DWORD err;printf("Now In Thread\n");rc = ReleaseSemaphore(hHandle1,1,NULL);err = GetLastError();printf("ReleaseSemaphore err = %d\n", err);if(rc == 0) printf("Semaphore Release Fail\n");else printf("Semaphore Release Successs! rc = %d\n",rc);
}

实验总结:

  1. h1是线程句柄,hHandle1是信号量句柄
  2. CreateSemaphore用于创建一个信号量
  3. OpenSemaphore打开信号量
  4. CreateThread创建子线程
  5. WaitForSingleObject主线程等待子线程结束
  6. ReleaseSemaphore(hHandle1,1,NULL)是子线程唤醒主线

 实验五:线程的互斥

实验环境:计算机一台,内装有VC++、office等软件

实验日期:2024.5.11

实验要求:

1.理解:线程互斥的基本概念。

2.掌握:使用线程互斥API及临界区实现多线程互斥的方法。

实验内容:

1.使用Windows系统提供的系统调用创建与撤销线程。

2.使用Windows系统提供的线程互斥API实现多线程互斥。

3.使用Windows系统提供的线程互斥API解决实际问题。

实验源代码

// 实验五:线程的互斥.cpp : Defines the entry point for the console application.
//#include "stdafx.h"
#include "实验五:线程的互斥.h"#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif/
// The one and only application objectCWinApp theApp;using namespace std;static int count = 5;
static HANDLE h1;
static HANDLE h2;
LPCRITICAL_SECTION hCriticalSection;
CRITICAL_SECTION Critical;
void func1();
void func2();int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{int nRetCode = 0;DWORD dwThreadID1,dwThreadID2;hCriticalSection = &Critical;InitializeCriticalSection(hCriticalSection);h1 = CreateThread((LPSECURITY_ATTRIBUTES)NULL,0,(LPTHREAD_START_ROUTINE)func1,(LPVOID)NULL,0,&dwThreadID1);if(h1 == NULL) printf("Thread1 create Fail\n");else printf("Thread1 create Success\n");h2 = CreateThread((LPSECURITY_ATTRIBUTES)NULL,0,(LPTHREAD_START_ROUTINE)func2,(LPVOID)NULL,0,&dwThreadID2);if(h2 == NULL) printf("Thread2 create Fail\n");else printf("Thread2 create Success\n");Sleep(1000);CloseHandle(h1);CloseHandle(h2);DeleteCriticalSection(hCriticalSection);ExitThread(0);return nRetCode;
}void func2()
{int r2;EnterCriticalSection(hCriticalSection);r2 = count;_sleep(100);r2 = r2 + 1;count = r2;printf("count in func2 = %d\n", count);LeaveCriticalSection(hCriticalSection);
}void func1()
{int r1;EnterCriticalSection(hCriticalSection);r1 = count;_sleep(500);r1 = r1 + 1;count = r1;printf("count in func1 = %d\n", count);LeaveCriticalSection(hCriticalSection);
}

实验总结:

  1. EnterCriticalSection(…)进入临界区
  2. LeaveCriticalSection(…)退出临界区
  3. DeleteCriticalSection(…)删除临界区
  4. InitialCriticalSection(…)初始化临界区

实验六:系统内存使用统计

实验环境:计算机一台,内装有Visual Studio、office等软件

实验日期:2024.6.7

实验要求:

1.了解:Windows内存管理机制。

2.理解:页式存储管理技术,Windows内存管理基本数据结构。

3.掌握:Windows内存管理基本API的使用。

实验内容:

1.使用Windows系统提供的API和数据结构获取系统物理内存和虚拟内存信息。

2.分配及释放虚拟内存。

3.分配及释放物理内存。

4.当物理内存和虚拟内存空间发生变化时,分析产生变化的原因。

工程创建过程

勾选MFC 

实验源代码

// 实验六:系统内存使用统计.cpp : 定义控制台应用程序的入口点。
//#include "stdafx.h"
#include "实验六:系统内存使用统计.h"#ifdef _DEBUG
#define new DEBUG_NEW
#endif// 唯一的应用程序对象CWinApp theApp;using namespace std;
void GetMemSta(){MEMORYSTATUSEX MemInfo;MemInfo.dwLength = sizeof(MEMORYSTATUSEX);GlobalMemoryStatusEx(&MemInfo);printf("当前内存状态是:\n");printf("总物理内存大小:%dMB\n",MemInfo.ullTotalPhys/(1024*1024));printf("可用物理内存大小:%dMB\n",MemInfo.ullAvailPhys/(1024*1024));printf("总页文件大小:%dMB\n",MemInfo.ullTotalPageFile/(1024*1024));printf("可用页文件大小:%dMB\n",MemInfo.ullAvailPageFile/(1024*1024));printf("总虚拟内存大小:%dMB\n",MemInfo.ullTotalVirtual/(1024*1024));printf("可用虚拟内存大小:%dMB\n",MemInfo.ullAvailVirtual/(1024*1024));printf("内存利用率:%d\n",MemInfo.dwMemoryLoad);
}
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{int nRetCode = 0;LPVOID BaseAddr;GetMemSta();printf("现在分配300M的虚拟内存和200M的物理内存\n\n");BaseAddr=VirtualAlloc(NULL, 1024*1024*300,MEM_RESERVE|MEM_COMMIT,PAGE_READWRITE);if(BaseAddr==NULL) printf("虚拟内存分配失败\n");char * str = (char*)malloc(1024*1024*300);GetMemSta();printf("现在释放300M的虚拟内存和200M的物理内存\n\n");if(VirtualFree(BaseAddr,0,MEM_RELEASE)==0) printf("释放失败");free(str);GetMemSta();system("PAUSE");return nRetCode;
}

 实验结果:

相关文章:

操作系统原理实验报告

操作系统原理课程的实验报告汇总 实验三:线程的创建与撤销 实验环境:计算机一台,内装有VC、office等软件 实验日期:2024.4.11 实验要求: 1.理解:Windows系统调用的基本概念,进程与线程的基…...

Python爬虫实战:研究nodejs aes加密

1. 引言 1.1 研究背景与意义 在当今数字化时代,Web 数据的价值日益凸显。通过爬虫技术获取公开数据并进行分析,能够为企业决策、学术研究等提供有力支持。然而,为了保护数据安全和隐私,许多网站采用了加密技术对数据进行保护,其中 AES 加密是一种常见且安全的加密算法。…...

线程的一些事(2)

在java中,线程的终止,是一种“软性”操作,必须要对应的线程配合,才能把终止落实下去 然而,系统原生的api其实还提供了,强制终止线程的操作,无论线程执行到哪,都能强行把这个线程干掉…...

基于 PostgreSQL 的 ABP vNext + ShardingCore 分库分表实战

🚀 基于 PostgreSQL 的 ABP vNext ShardingCore 分库分表实战 📑 目录 🚀 基于 PostgreSQL 的 ABP vNext ShardingCore 分库分表实战✨ 背景介绍🧱 技术选型🛠️ 环境准备✅ Docker Compose(多库 & 读…...

御网杯2025 Web,Msic,密码 WP

Web YWB_Web_xff 审计代码,发现需要$cip2.2.2.1 使用burpsuite抓包,添加X-Forwarded-For:2.2.2.1 然后得到flag YWB_Web_未授权访问 更加题目描述知道需要admin登录,但是现在是guest。 使用burpsuite抓包 发现cookie里面存在user&#xff…...

tensorflow 1.x

简介 TensorFlow:2015年谷歌,支持python、C,底层是C,主要用python。支持CNN、RNN等算法,分CPU TensorFlow/GPU TensorFlow。 TensorBoard:训练中的可视化。 快捷键:shiftenter执行命令,Tab键进…...

[ERTS2012] 航天器星载软件形式化模型驱动研发 —— 对 Scade 语言本身的影响

在《从ERTS学习SCADE发展》中提到,在 ERTS 会议中,Scade团队会在该会议中介绍与Scade相关的工作。在 ERTS 2012 中,Scade 团队介绍了使用Scade作为主要工具,应用在航天器星载软件开发中的相关话题。原材料可参考 《Formal Model D…...

Spring Boot 集成 Flink CDC 实现 MySQL 到 Kafka 实时同步

Spring Boot 集成 Flink CDC 实现 MySQL 到 Kafka 实时同步 📌 项目背景 在大数据实时处理场景中,数据库变更数据的捕获与传输是关键环节。Flink CDC 提供了从 MySQL 等数据库中实时捕获数据变更的能力,并通过 Apache Flink 引擎实现流式处理。 本项目使用 Spring Boot …...

软件体系结构(Software Architecture)

文章目录 1. 分层架构(Layered Architecture)核心逻辑代码示例(伪代码)典型场景优缺点 2. 客户端-服务器(Client-Server)核心逻辑典型交互流程应用场景代码示例(RESTful API)优缺点 …...

RS485和RS232 通信配置

RS232 目前硬件上支持RS232的有以下板卡: LubanCat-5IO底板(含有RS232x2) 7.1. 引脚定义 具体的引脚定义可以参考背面的丝印 LubanCat-5IO底板 引脚定义图 7.2. 跳帽配置 LubanCat-5IO底板 鲁班买5IO底板上的RS485和RS232是共用同一组…...

【高数上册笔记篇02】:数列与函数极限

【参考资料】 同济大学《高等数学》教材樊顺厚老师B站《高等数学精讲》系列课程 (注:本笔记为个人数学复习资料,旨在通过系统化整理替代厚重教材,便于随时查阅与巩固知识要点) 仅用于个人数学复习,因为课…...

【网络安全】——大端序(Big-Endian)​​和​​小端序(Little-Endian)

字节序(Endianness)是计算机系统中多字节数据(如整数、浮点数)在内存中存储或传输时,​​字节排列顺序​​的规则。它分为两种类型:​​大端序(Big-Endian)​​和​​小端序&#xf…...

机器学习极简入门:从基础概念到行业应用

有监督学习(supervised learning) 让模型学习的数据包含正确答案(标签)的方法,最终模型可以对无标签的数据进行正确处理和预测,可以分为分类与回归两大类 分类问题主要是为了“尽可能分开整个数据而画线”…...

MIT XV6 - 1.5 Lab: Xv6 and Unix utilities - xargs

接上文 MIT XV6 - 1.4 Lab: Xv6 and Unix utilities - find xargs 继续实验,实验介绍和要求如下 (原文链接 译文链接) : Write a simple version of the UNIX xargs program for xv6: its arguments describe a command to run, it reads lines from the standard …...

Springboot整合Swagger3

Springboot整合Swagger3、常用注解解释、访问Swagger地址出现404、403、拒绝访问等问题_swagger3注解-CSDN博客...

经典音乐播放器——完美歌词 Poweramp Music Player 3 build

—————【下 载 地 址】——————— 【本章单下载】:https://drive.uc.cn/s/d6c480bc47604 【百款黑科技】:https://ucnygalh6wle.feishu.cn/wiki/HPQywvPc7iLZu1k0ODFcWMt2n0d?fromfrom_copylink —————【下 载 地 址】——————— 本…...

锚定基础与拥抱融合:C 语言在编程教育与技术社区的破圈之路

引言 在 Python 占据 TIOBE 指数榜首的 2025 年,C 语言以 23.4% 的稳定份额(2025 年 5 月数据)持续稳居前三,这一现象在编程教育领域尤为显著:全球 92% 的计算机科学本科课程仍将 C 语言作为必修基础课,而…...

深度学习入门:从神经网络基础到前向传播全面解析

深度学习入门:从神经网络基础到前向传播全面解析 🔥 重磅干货! 本文是《深度学习基础与核心技术详解》专栏的开篇之作,将系统性地带你走进深度学习的世界!建议收藏+关注,错过可能要找很久哦~ 目录 深度学习概述神经网络基础 2.1 生物神经元与人工神经元2.2 感知机模型2.…...

Lambda表达式能用在哪些场景?

Lambda表达式是Java 8引入的一种强大特性,它允许以简洁的方式表示匿名函数(即没有名字的函数)。Lambda表达式可以用于许多场景,尤其是在与函数式接口、Stream API、并发编程等结合时,能够显著简化代码并提高开发效率。…...

英语听力口语词汇--2.宣传类

1.approach uk /əˈprəʊtʃ/ n.(思考问题的)方式,方法,态度 2.foreign uk /ˈfɒr.ən/ adj.外国的 3.alliance uk /əˈlaɪ.əns/ n.结盟国家(或团体),同盟国家(或团体)&...

『 测试 』测试基础

文章目录 1. 调试与测试的区别2. 开发过程中的需求3. 开发模型3.1 软件的生命周期3.2 瀑布模型3.2.1 瀑布模型的特点/缺点 3.3 螺旋模型3.3.1 螺旋模型的特点/缺点 3.4 增量模型与迭代模型3.5 敏捷模型3.5.1 Scrum模型3.5.2 敏捷模型中的测试 4 测试模型4.1 V模型4.2 W模型(双V…...

Pandas 时间处理利器:to_datetime() 与 Timestamp() 深度解析

Pandas 时间处理利器:to_datetime() 与 Timestamp() 深度解析 在数据分析和处理中,时间序列数据扮演着至关重要的角色。Pandas 库凭借其强大的时间序列处理能力,成为 Python 数据分析领域的佼佼者。其中,to_datetime() 函数和 Ti…...

支持向量机的回归用法详解

支持向量机的回归用法详解 在机器学习的广阔领域中,支持向量机(SVM)是一种极具影响力的算法,它不仅在分类任务上表现出色,在回归任务中同样有着独特的应用价值。本文将深入探讨 SVM 的回归用法,包括其基本…...

计算机基础

今天不和大家分享算法了,最近为什么一直分享算法题,一个是因为最近很忙加上状态不太在线,第二个是因为我报了ICPC的比赛,也就是大学生程序设计大赛,所以平时刷算法比较多一些,虽然说结果上也没有很多的收获…...

用C语言实现的——一个支持完整增删查改功能的二叉排序树BST管理系统,通过控制台实现用户与数据结构的交互操作。

一、知识回顾 二叉排序树(Binary Search Tree,BST),又称二叉查找树或二叉搜索树,是一种特殊的二叉树数据结构。 基本性质: ①有序性 对于树中的每个节点,其左子树中所有节点的值都小于该节点的…...

uniapp-商城-53-后台 商家信息(更新修改和深浅copy)

1、概述 文章主要讨论了在数据库管理中如何处理用户上传和修改商家信息的问题,特别是通过深浅拷贝技术来确保数据更新的准确性和安全性。 首先,解释了深拷贝和浅拷贝的区别:浅拷贝使得两个变量共享相同的内存地址,而深拷贝则创建新…...

vue数据可视化开发echarts等组件、插件的使用及建议-浅看一下就行

在 Vue 项目中使用 ECharts 进行数据可视化开发时&#xff0c;可以结合 Vue 的响应式特性和 ECharts 的强大功能&#xff0c;实现动态、交互式的图表展示。 一、ECharts 基础使用 1. 安装 ECharts npm install echarts2. 在 Vue 组件中使用 ECharts <template><div…...

百度AI战略解析:文心一言与自动驾驶的双轮驱动

百度AI战略解析&#xff1a;文心一言与自动驾驶的双轮驱动 系统化学习人工智能网站&#xff08;收藏&#xff09;&#xff1a;https://www.captainbed.cn/flu 文章目录 百度AI战略解析&#xff1a;文心一言与自动驾驶的双轮驱动摘要引言一、技术架构&#xff1a;大模型与自动…...

MCP Streamable HTTP 传输层的深度解析及实战分析

一、Streamable HTTP 传输层设计革新 1. 核心设计思想 协议融合:将 HTTP/1.1、HTTP/2 与 SSE 协议特性深度整合动态协商:通过 HTTP Header 实现传输协议动态协商(X-MCP-Transport)流式优先:默认启用流式传输,支持半双工通信背压控制:基于 HTTP/2 流级流量控制实现智能速…...

六大设计模式--OCP(开闭原则):构建可扩展软件的基石

写在前面&#xff1a;一个真实的项目悲剧 某电商平台促销功能每次迭代都需要修改核心订单类&#xff0c;导致&#xff1a; ✅ 双十一活动修改导致支付功能崩溃 ✅ 新人优惠引发会员系统连环故障 ✅ 每次发布需全量回归测试 根本原因&#xff1a;系统架构违反开闭原则 一、开闭…...

ActiveMQ 生产环境问题排查与调优指南(一)

一、引言 在当今复杂的分布式系统架构中&#xff0c;消息中间件扮演着至关重要的角色&#xff0c;而 ActiveMQ 作为一款广泛使用的开源消息中间件&#xff0c;凭借其丰富的特性、良好的稳定性和易用性&#xff0c;在众多企业的生产环境中占据了一席之地。它基于 JMS&#xff08…...

深入理解 JavaScript 中的 FileReader API:从理论到实践

文章目录 深入理解 JavaScript 中的 FileReader API&#xff1a;从理论到实践前言什么是 FileReader&#xff1f;核心特性 FileReader 的常用方法事件监听实际案例案例 1&#xff1a;读取文本文件内容案例 2&#xff1a;图片预览&#xff08;Data URL&#xff09;案例 3&#x…...

Google LLM prompt engineering(谷歌提示词工程指南)

文章目录 基本概念AI输出配置&#xff1a;调整AI的回答方式输出长度温度&#xff08;Temperature&#xff09;Top-K和Top-P 提示技术&#xff1a;让AI更好地理解你零样本提示&#xff08;Zero-shot&#xff09;少样本提示&#xff08;Few-shot&#xff09;系统提示&#xff08;…...

前端npm包发布流程:从准备到上线的完整指南

无论是使用第三方库还是创建和分享自己的工具&#xff0c;npm都为我们提供了一个强大而便捷的平台&#xff0c;然而很多开发者在将自己的代码发布到npm上时往往面临各种困惑和挑战&#xff0c;本篇文章将从准备工作到发布上线&#xff0c;探讨如何让npm包更易发布及避免常见的坑…...

【MySQL】表空间结构 - 从何为表空间到段页详解

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;博客仓库&#xff1a;https://gitee.com/JohnKingW/linux_test/tree/master/lesson &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &…...

OB Cloud 云数据库V4.3:SQL +AI全新体验

OB Cloud 云数据库V4.3&#xff1a;SQL AI全新体验 简介 OB Cloud云数据库全新升级至V4.3版本&#xff0c;为用户带来了SQLAI的最新技术体验&#xff0c;强化数据库的传统功能&#xff0c;深度融合了人工智能技术&#xff0c;引入先进的向量检索功能和优化的SQL引擎&#xff0c…...

【Linux系统】第四节—详解yum+vim

hello 我是云边有个稻草人 Linux—本节课所属专栏—欢迎订阅—持续更新中~ 目录 画板—本节课知识点详解 一、软件包管理器 1.1 什么是软件包 1.2 Linux软件⽣态 1.3 yum具体操作 【查看软件包】 【安装软件】 【卸载软件】 【注意事项】 1.4 安装源 二、vim 2.1 …...

Git的核心作用详解

一、版本控制与历史追溯 Git作为分布式版本控制系统&#xff0c;其核心作用是记录代码的每一次修改&#xff0c;形成完整的历史记录。通过快照机制&#xff0c;Git会保存每次提交时所有文件的完整状态&#xff08;而非仅记录差异&#xff09;&#xff0c;确保开发者可以随时回…...

Three.js + React 实战系列 - 职业经历区实现解析 Experience 组件✨(互动动作 + 3D 角色 + 点击切换动画)

对个人主页设计和实现感兴趣的朋友可以订阅我的专栏哦&#xff01;&#xff01;谢谢大家&#xff01;&#xff01;&#xff01; 在这篇博客中&#xff0c;我们将分析一个极其有趣和互动性的组件 - Experience.jsx&#xff0c;该组件用于在主页中呈现个人的工作经历。 这个组件…...

3D虚拟工厂vue3+three.js

1、在线体验 3D虚拟工厂在线体验 2、功能介绍 1. 全屏显示功能2. 镜头重置功能3. 企业概况信息模块4. 标签隐藏/显示功能5. 模型自动旋转功能6. 办公楼分层分解展示7. 白天/夜晚 切换8. 场景资源预加载功能9. 晴天/雨天/雾天10. 无人机视角模式11. 行人漫游视角模式12. 键盘…...

[Java实战]Spring Boot 解决跨域问题(十四)

[Java实战]Spring Boot 解决跨域问题&#xff08;十四&#xff09; 一、CORS 问题背景 什么是跨域问题&#xff1f; 当浏览器通过 JavaScript 发起跨域请求&#xff08;不同协议、域名、端口&#xff09;时&#xff0c;会触发同源策略限制&#xff0c;导致请求被拦截。 示例场…...

嵌入式硬件篇---CAN

文章目录 前言1. CAN协议基础1.1 物理层特性差分信号线终端电阻通信速率总线拓扑 1.2 帧类型1.3 数据帧格式 2. STM32F103RCT6的CAN硬件配置2.1 硬件连接2.2 CubeMX配置启用CAN1模式波特率引脚分配过滤器配置&#xff08;可选&#xff09; 3. HAL库代码实现3.1 CAN初始化3.2 发…...

(2025)图文解锁RAG从原理到代码实操,代码保证可运行

什么是RAG RAG(检索增强生成)是一种将语言模型与可搜索知识库结合的方法&#xff0c;主要包含以下关键步骤&#xff1a; 数据预处理 加载&#xff1a;从不同格式(PDF、Markdown等)中提取文本分块&#xff1a;将长文本分割成短序列(通常100-500个标记)&#xff0c;作为检索单元…...

TWAS、GWAS、FUSION

全基因组关联研究&#xff08;GWAS&#xff0c;Genome-Wide Association Study&#xff09;是一种统计学方法&#xff0c;用于在全基因组水平上识别与特定性状或疾病相关的遗传变异。虽然GWAS可以识别与性状相关的遗传信号&#xff0c;但它并不直接揭示这些遗传变异如何影响生物…...

大模型微调终极方案:LoRA、QLoRA原理详解与LLaMA-Factory、Xtuner实战对比

文章目录 一、微调概述1.1 微调步骤1.2 微调场景 二、微调方法2.1 三种方法2.2 方法对比2.3 关键结论 三、微调技术3.1 微调依据3.2 LoRA3.2.1 原理3.2.2 示例 3.3 QLoRA3.4 适用场景 四、微调框架4.1 LLaMA-Factory4.2 Xtuner4.3 对比 一、微调概述 微调&#xff08;Fine-tun…...

FHE 之 面向小白的引导(Bootstrapping)

1. 引言 FHE初学者和工程师常会讨论的一个问题是&#xff1b; “什么是引导&#xff08;bootstrapping&#xff09;&#xff1f;” 从理论角度看&#xff0c;这个问题的答案很简单&#xff1a; 引导就是套用 Gentry 提出的思想——在加密状态下同态地执行解密操作&#xff…...

安装:Kali2025+Docker

安装:Kali2025Docker Kali2025安装 直接官网下载WMware版本 https://www.kali.org/get-kali/#kali-virtual-machines 直接打开运行 初始用户密码 kali/kali sudo -i 命令切换到root 更换镜像 切换到其他可用的 Kali Linux 镜像源可能会解决问题,可以使用国内的镜像源&…...

什么是深拷贝什么是浅拷贝,两者区别

什么是深拷贝什么是浅拷贝&#xff0c;两者区别 1.深拷贝 递归复制对象的所有层级&#xff0c;嵌套的引用类型属性&#xff0c;最后生成一个完全独立的新对象&#xff0c;与原对象无任何引用关联。 特点&#xff1a; 新对象和原对象的所有层级属性是独立的&#xff08;修改…...

A2A大模型协议及Java示例

A2A大模型协议概述 1. 协议作用 A2A协议旨在解决以下问题&#xff1a; 数据交换&#xff1a;不同应用程序之间的数据格式可能不一致&#xff0c;A2A协议通过定义统一的接口和数据格式解决这一问题。模型调用&#xff1a;提供标准化的接口&#xff0c;使得外部应用可以轻松调…...

第七章 数据库编程

1 数据库编程基础 1.1 数据库系统概述 数据库系统是由数据库、数据库管理系统(DBMS)和应用程序组成的完整系统。其主要目的是高效地存储、管理和检索数据。现代数据库系统通常分为以下几类&#xff1a; 关系型数据库(RDBMS)&#xff1a;如MySQL、PostgreSQL、Oracle等&#x…...