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

1-02VS的安装与测试

一、概述

对于一名C语言程序员而言,进行C语言程序的开发一般需要一个文本编辑器加上一个编译器就足够了。但为了方便起见,我们选择使用集成开发环境——Visual Studio(简称VS)。安装Visual Studio

下面讲一下如何安装VS,按照步骤完成即可。

二、安装Visual Studio

1. 下载引导安装包

引导安装包可以从官网下载:https://visualstudio.microsoft.com/zh-hans/downloads/

选择下载社区版Community即可

图 1. VS下载引导安装包VS下载引导安装包

如果是Mac笔记本,可以选择下方的Mac版本:

图 2. VS下载引导安装包-Mac版VS下载引导安装包-Mac版

如果你不想在官网下载安装(或者你根本打不开微软的网站),可以选择从百度网盘下载引导安装包:

链接:https://pan.baidu.com/s/1e27THIEiIVGTdzYmdpHsrA?pwd=4uo0 提取码:4uo0

引导安装包直接双击打开,即可开始VS的安装。

2. 在线安装(推荐)

双击引导安装包后,就会进入工作负荷以及安装位置的选择:

  1. 工作负荷选择(也就是选择特定开发任务的工具组件集合):

    图 3. VS安装-工作负荷选择VS安装-工作负荷选择

    直接按照图示中选择C++桌面开发即可,其他的不要选择。

  2. 安装位置选择:

    图 4. VS安装-安装位置选择VS安装-安装位置选择

    建议将三个路径放在同一级目录下,这样便于管理,可以参考图片中给出的路径。

    建议安装目录不要放在系统盘下,VS作为IDE会占用较多磁盘空间。

  3. 上述设置完成后,点击安装即可。安装过程会下载较多资源,请耐心等待。

    图 5. VS安装-联网下载安装VS安装-联网下载安装

    此过程需要连接微软服务器进行在线安装,通常情况下即便不挂梯子也能正常完成安装。

  4. 安装完成后,建议重启电脑。

注意事项

  1. 安装完成后,VS一般不会自动创建桌面快捷方式,可以在开始菜单中找到VS,点击启动。建议将它发送桌面快捷方式或者钉到任务栏,后续一段时间我们会经常使用VS。

  2. 第一次启动VS,会提示登录微软账号,这一步相当于激活VS。建议登录,如果没有微软账户,建议注册一个。

    图 6. VS安装-登录微软账号VS安装-登录微软账号

  3. 如果在线安装失败(比如碰到始终卡顿在某个进度,或者直接失败),这是微软服务器的问题,此时可以考虑离线安装VS。

3. 离线安装(后补方案)

如果实在没有办法在线成功安装,可以考虑离线安装,按照以下步骤完成。

  1. 通过百度网盘获取离线安装包:

    链接:https://pan.baidu.com/s/1hp7ZAFaP_R11Ih8y0ReUTQ?pwd=jpgp 提取码:jpgp

  2. 解压离线安装压缩包,进入解压后的文件夹目录,在资源管理器的文件路径栏输入"cmd",然后回车

    图 7. 离线安装VS-步骤1离线安装VS-步骤1

    此时会在此安装包目录下,打开Windows命令行,如下图所示:

    图 8. VS离线安装-步骤2VS离线安装-步骤2

  3. 在打开的命令行中输入以下指令:

    1

    .\vs_setup.exe --noWeb --add Microsoft.VisualStudio.Workload.NativeDesktop --includeRecommended 
    

    然后回车,即可开始安装。

  4. 开始安装后,仍然进入工作负荷和安装目录的选择。此时选择安装"使用C++的桌面开发"的工作负荷,以及修改一下安装目录即可。

  5. 此安装过程全程无需联网,耐心等待安装完成即可。

注:以上操作都无法完成安装的话,可以直接求助老师。

三、使用Visual Studio进行开发

好了,到此你已经成功安装了VS,距离成为一名真正的C程序员又进了一大步。

下面我们来简单介绍一下如何使用VS进行开发,写出我们第一个C程序的演示代码——HelloWorld!。

1. 创建项目

第一次打开VS,界面如下图所示:

图 9. 第一次打开VS的效果图第一次打开VS的效果图

推荐直接选择"继续但无需代码",然后就进入了VS主界面:

图 10. VS主界面VS主界面

注:初次进入还有一个新特性提醒界面,已经被我关闭了。

点击VS左上角菜单栏的**“文件 --> 新建 --> 项目”**

图 11. 使用VS创建项目使用VS创建项目

然后进入创建新项目的选择,选择创建"控制台应用",因为我们程序的输出结果要依赖于控制台,所以创建控制台应用。

图 12. 创建控制台应用创建控制台应用

随后就进入了创建新项目的配置页面:

图 13. 配置新项目页面配置新项目页面

到这一步就是整个创建项目的流程,但最后一步**“配置新项目”**我们需要详细谈一谈。

2. 配置项目

上图的配置页面中可以看到,我们主要可以调整三个选择:

  1. 项目名称。
  2. 位置。
  3. 解决方案名称。

我们先重点来讲一下VS当中项目(project)解决方案(solution),理解它们之间的关系是使用VS的一个重点。

1. 项目 VS 解决方案(重要)

解决方案:

**解决方案是VS当中进行代码开发的顶层结构,它是一个或多个项目的容器。**用于协调多个项目之间的关系和依赖性,尤其是在大型应用程序开发中。解决方案不仅仅是项目的简单列表,它还包括项目之间的依赖关系、编译顺序以及其他元数据。

解决方案的文件夹下通常会自动生成一个扩展名为**.sln**的文件,来保存这些项目之间关系的信息。

项目:

**项目是一个C程序构建过程中的基本组织单元。**项目中会包含:源代码文件、资源文件(如图片或数据文件)、配置信息文件等。

通俗的说:

VS中的一个项目是进行开发的基本单元,一个解决方案至少有一个项目,也可以包含多个项目,这些项目可能相互依赖。解决方案会管理这些多个项目的关系。

如果你熟悉Java开发,那么可以使用IDEA和VS做一个类比:

  1. IDEA的module(模块)是开发的基本单元,project(工程)是模块的容器,一个工程最少有一个模块,但也可以有多个模块。
  2. VS的项目是开发的基本单元,解决方案是项目的容器,一个解决方案至少有一个项目,但也可以有多个项目。

2. 命名

搞清楚它们之间的关系后,就要稍微浅谈一下命名了:解决方案和项目应该如何命名呢?

首先,我们要说一个大的原则,以后大家无论进行什么语言的程序开发,在遇到命名时,都一定会存在一个大前提:“简洁明了、见名知意”!

也就是说,这个命名应当明确表达功能和作用,这是最重要的原则。

其次,一般来说,名字都应该由合法的英文单词组成,不应出现中文或者中文拼音。

最后,解决方案和项目命名的普遍约定是:

  1. **采用大驼峰命名法(也叫帕斯卡命名法)。**每个单词的首字母都大写,包括第一个单词,各个单词之间直接连接不用加下划线等符号。例如:FirstName、MyProgram等。
  2. 尽量避免出现空格,点、横杆等特殊字符。命名仅由英文字符和数字组成。

最后,关于命名并没有强制的一定的约束,具体还是要看各公司各研发单位的习惯而定。上面给出的只是大家普遍遵守的一些约定。

注意事项

为了让大家更清晰的看代码,上课时我会把解决方案、项目的命名前带上序号,比如:

  1. “00_HelloWorld”:第一个项目,这个项目叫HelloWorld。
  2. “50C_Day01”:第50期,C语言部分内容的第一天。

但一般而言,这种序号在实际开发中不会使用。

3. 完成项目创建

上面的所有内容都了解后,就可以完成一个项目的创建了,大家参考我的命名和配置:

图 14. VS项目创建配置图VS项目创建配置图

具体的解释都已经在图中贴出了,设置完成后,点击创建即可完成项目创建。

3. 创建源文件

完成项目创建后,还需要在项目下创建C语言源文件,在一个C语言的源文件当中才能够开始写C语言代码。

点击创建项目后,首先你会直接进入以下页面:

图 15. VS项目主界面-HelloWorldVS项目主界面-HelloWorld

VS会默认创建一个"HelloWorld.cpp"文件,这是一个C++源代码文件,但我们学习的是C语言,所以我们可以直接删除这个文件。

然后**“右键点击源文件 --> 添加 --> 新建项”**,

图 16. VS新建项VS新建项

此时可能会弹出以下两种窗口:

图 17. 新建项选择-情况1新建项选择-情况1

图 18. 新建项选择-情况2新建项选择-情况2

无论出现哪一种情况都一样,直接修改名字为"xxx.c",即可在源文件下面创建一个C语言源文件。

其中"xxx"代表此源文件的名字,关于源文件的命名,建议大家采取以下策略:

  1. C语言源文件通常以".c"结尾。
  2. 见名知意,使用合法的英文单词。
  3. 单词字母全部小写,如果文件名由多个单词组成,通常使用**下划线"_"**来分隔这些单词。
  4. 不要出现下划线以外的特殊字符。原则上只使用下划线、英文字母和数字作为命名且不要用数字开头。

举几个例子:

  1. a.c

  2. main.c

  3. hello.c

  4. hello_world.c

  5. 编写代码

创建完毕.c文件后,双击打开此文件,然后编写代码。

在本小节中,我们只管写代码运行,下节我们再讲这些代码的含义。

代码块 1. 一个简单的hello world案例

1

#include <stdio.h>

2

int main() {

3

printf("hello world!\n");

4

return 0;

5

}

代码编写完成后,你可以使用以下两个按钮来启动程序(在VS主界面的上方菜单栏):

图 19. VS-启动程序的两个按钮VS-启动程序的两个按钮

这两个按钮的差别是:

  1. 点击按钮1**“本地 Windows 调试器”**启动程序,此时程序会以Debug模式启动。
  2. 点击按钮2**“开始执行(不调试)”**启动程序,此时程序会以正常模式启动。

关于Debug模式和正常启动程序的区别,后续课程会详细讲解。在日常的开发中,我们更建议大家使用按钮1,以Debug模式来启动程序。

点击启动程序后,若正常运行不出意外,你会看到控制台如下图所示:

图 20. VS-HelloWorld运行结果VS-HelloWorld运行结果

当然,如果出问题大概率就是代码中的单词拼错了,某一句代码漏了分号等问题。请检查一下VS的错误输出列表,修改代码即可!

注意事项:

  1. **请大家把编译器的版本从默认的x64(64位)改为x86(32位)。**这么做的目的主要是为了上课方便以及规避一些可能存在的坑。

    即:

    图 21. 选择32位平台编译器来编译代码选择32位平台编译器来编译代码

  2. 无论点击哪个按钮,以什么模式启动程序,都需要经历编译源代码,生成可执行程序,执行可执行程序的过程。(这个过程后续会详细讲解,现在你只需要知道代码被编译执行就可以了。)

5. VS项目目录的说明(补充)

在VS的解决方案资源管理器当中,我们可以清晰的看到一个项目下面又分了几个**“层级”**,如下图所示:

图 22. VS项目的层级关系VS项目的层级关系

我们可以在解决方案资源管理器当中选择一个项目,然后右键选项点击"在文件资源管理器中打开文件夹"。此时打开的就是此项目在本地的文件目录。

如下图所示:

图 23. VS项目目录VS项目目录

我们可以发现这个项目的目录下并没有我们想象的:

  1. 头文件目录文件夹
  2. 源文件文件夹
  3. 资源文件文件夹

这是因为:VS的一个项目当中的"外部依赖项"、“头文件”、"源文件"等并不是一个物理目录,只是一个逻辑上的分类。实际上它们直接物理存储在同一个目录下!

此目录下存储的诸如.vcxproj作为后缀名的文件,实际上就是存储了这些同一个目录下的项目文件的关系。

所以就VS而言,解决方案,项目的关系可以用下图来描绘:

图 24. VS解决方案、项目组织图VS解决方案、项目组织图

试想一下,如果在VS项目的"头文件"下面创建一个"hello.h",如下图所示:

图 25. 创建一个新的头文件创建一个新的头文件

这两个文件在实际的项目目录下,是如何存储的呢?

答案很简单,直接存储在同一目录下。

6. HelloWorld程序的注意事项(重点)

对于一个简单的HelloWorld程序,代码如下:

代码块 2. 简单的HelloWorld-C程序

1

#include <stdio.h>

2

int main() {

3

printf("hello world!\n");

4

return 0;

5

}

请大家注意以下细节:

  1. “#include"和”<stdio.h>"之间一定要有一个空格!!!
  2. 代码中"int mian(){}"被成为main函数。对一个C语言程序而言,main函数(也叫主函数)是具有唯一性的,因为它是程序的入口,所有C语言的程序都会从main函数开始执行。

那么对于VS而言,若一个项目中出现了多个main函数,程序该从哪里执行呢?显然VS是不可能自己搞清楚这个事情的。

所以VS不允许一个项目中出现两个main函数,如果希望写两个main函数,请创建多个项目!

7. 多项目的解决方案如何启动?

由于一个项目只能存在一个main函数,所以如果希望多个main函数共存,就需要创建存在多个项目的解决方案。

我们已经知道这个按钮的作用是:

图 26. VS-启动C程序VS-启动C程序

编译代码,生成可执行程序,然后运行这个可执行程序。

那么如果此解决方案有多个项目,又是什么情况呢?

很简单,由于每个项目中最多只有一个main入口函数,那么VS会编译每一个项目中的代码,为每一个项目生成一个可执行文件。也就是会生成多个可执行文件。

那么问题又来了,多个可执行文件最终执行哪一个呢?还是时候全部都执行?

观察下图中同一个解决方案下的,两个项目的项目名,它们有什么区别?

图 27. 多项目解决方案多项目解决方案

很显然,第一个项目HelloWorld的名字是加粗的。这种加粗意味着项目HelloWorld是启动项目,点击启动按钮,会执行该项目生成的可执行文件。

VS也提供了修改启动项目的功能,右键单击某个项目会出现如下图所示的菜单:

图 28. VS设置启动项目VS设置启动项目

设定启动项目后,点击按钮就会运行对应项目中的main方法。

除了设置固定的启动项目外,VS还可以直接将启动项目设置为当前打开的项目,如下所示:

图 29. VS设置启动项目为当前项目VS设置启动项目为当前项目

两种方式,大家自行选择一种即可。

四、其他补充

VS在实际使用过程中,可以进行一些设置,使得它更好用。这一部分内容都不重要,也没什么必须的设置,大家感兴趣看一下,觉得无所谓就不要看了。

1. 更好用的代码提示功能

使用VS写代码时,若想选择代码提示进行输入,需要按一下Tab键再回车,这未免麻烦了点,我们可以进行以下设置,使得可以直接回车选择代码提示:

  1. 打开 Visual Studio。
  2. 点击菜单栏中的**“工具 --> 选项”**。
  3. 在左侧的导航树中,定位到**“文本编辑器 --> C/C++ --> 高级”**。
  4. 在右侧的设置列表中,找到与 IntelliSense 相关的设置。
  5. 将"主动提交成员列表"从默认设置的False改成True。

图 30. 更好用的代码提示功能-设置界面更好用的代码提示功能-设置界面

设置完成后,代码提示出现时就可以直接回车选择生成代码了,这样会更方便一些。

2. 查看或修改C语言版本

要查看或修改在Visual Studio中使用的C语言版本:

  1. 打开你的项目。
  2. 右键点击项目名,选择 属性
  3. 在左侧导航窗格中,选择 配置属性–> 常规
  4. 查找与C语言标准相关的选项(C语言标准),并根据需要进行调整。

图 31. 项目属性当中的C语言标准项目属性当中的C语言标准

3. 修改启动快捷键

点击菜单栏中的**“工具 --> 选项”,打开设置选项卡。按照下图输入"调试.启动"**搜索找到该快捷键,然后即可进行修改。

图 32. 修改调试启动快捷键修改调试启动快捷键

默认的Debug调试启动快捷键是F5,我一般都会修改成F1。

同样的操作,搜索**“调试.开始执行不调试”**可以找到正常启动快捷键,然后也可以进行修改。

图 33. 修改正常启动快捷键修改正常启动快捷键

默认的正常不调试启动快捷键是Ctrl + F5,我一般都会修改成Ctrl + F1,但这个快捷键基本不会使用,改不改都不太所谓。

如果你想修改VS的其它快捷键,也可以仿照该案例去完成。

4. 选择启动项目的插件

在使用VS编写C代码的过程中,毫无疑问需要经常创建多项目解决方案,此时频繁手动切换启动项目是比较麻烦的。所以推荐一个可视化选择启动项目的插件:

SwitchStartupProject

大家可以在"扩展–管理扩展"的"联机市场"中搜索此插件安装,然后重启VS即可。

安装成功后,主界面菜单栏下就会多一个下拉框用于选择当前启动项目,这个插件还是比较方便的,推荐安装。

图 34. 选择启动项目-插件选择启动项目-插件

注:此插件偶尔会有bug无法选择启动项目,此时重启解决方案即可解决。

5. VS的一些快捷键

VS常用快捷键:

Ctrl + L: 快速删除当前行

Ctrl + D: 快速复制当前行到下一行

Ctrl + 空格: 强制显示代码提示

Ctrl + Alt + L: 打开解决方案资源管理器。

Ctrl + K + D(按住Ctrl后再按K和D两个键位): 标准格式排版整个文件中的代码

Ctrl + Shift + /:快速注释以及释放注释。

6. 配置代码模板(建议做)

如果每次新建项目时,都选择"空项目"或者"控制台应用",那么接下来就需要自己动手新建一个".c"文件编写代码,这是比较麻烦的。所以建议大家配置一个代码模板,这样便于大家快速创建一个C程序骨架。

按照以下流程走:

1.创建一个标准的C项目

  1. 打开Visual Studio
  2. 新建一个C++"控制台应用"项目。
  3. 在解决方案资源管理器中,删除所有默认生成的.cpp文件。
  4. 添加一个新的.c文件,命名为main.c
  5. main.c文件中,输入你想要的默认内容。

这里推荐一个"main.c"文件的代码内容:

代码块 3. 代码模板-推荐内容

1

#define _CRT_SECURE_NO_WARNINGS

2

#include <stdio.h>

3


4

/**********************************************************************

5

 *                          COMMENT                                   *

6

 **********************************************************************/

7


8

int main(void) {

9

  printf("hello world!\n");

10


11

  return 0;

12

}

其中:

  1. “#define _CRT_SECURE_NO_WARNINGS” 是微软的MSVC平台下特有的宏定义,用于禁用运行时编译警告。
  2. "#include <stdio.h>"包含头文件,这样就可以使用"printf"等函数。

导出项目为模板

  1. 在VS的文件菜单上选择“项目 --> 导出模板”。
  2. 选择“项目模板”,然后点击下一步。
  3. 输入模板的名称、描述等相关信息,然后点击完成。(注意模板的名称必须是英文的,不能用中文)
  4. 记住你输入的模板的名字,方便后续创建项目时使用。

使用新模板创建项目

  1. 当你下次新建一个项目时,你可以在模板中下拉找到你创建的项目模板。
  2. 选择你刚才保存的模板,输入你的项目名,并创建。
  3. 这个新项目会自动生成一个main.c文件,内容和你在模板中设置的完全相同。

你还可以将你的模板固定在项目创建的左页面,比如下图:

图 35. 固定项目模板到页面固定项目模板到页面

这样下一次你就可以更快的找到你创建的模板了。

以上,就完成了VS项目模板的配置和使用。

相关文章:

1-02VS的安装与测试

一、概述 对于一名C语言程序员而言&#xff0c;进行C语言程序的开发一般需要一个文本编辑器加上一个编译器就足够了。但为了方便起见&#xff0c;我们选择使用集成开发环境——Visual Studio&#xff08;简称VS&#xff09;。安装Visual Studio 下面讲一下如何安装VS&#xff0…...

ctfshow——PHP特性

文章目录 web 89web 90web 91web 92web 93web 94web 95web 96web 97web 98web 99web 100——优先级、eval()用法web 101——RefelctionClass反射类web 102——php伪协议、hex2bin()web103web 104——sha1绕过web 105 web 89 使用人工分配 ID 键的数值型数组绕过preg_match. 两个…...

K8S陈述式资源管理

陈述式 命令行&#xff1a;kubectl命令行工具 优点&#xff1a;90%以上的场景都可以满足&#xff0c;对增&#xff0c;删&#xff0c;查比较方便&#xff0c;对改不是很友好 缺点&#xff1a;命令比较冗长&#xff0c;复杂&#xff0c;难记 声明式 k8s当中的yaml文件来实现资…...

详解Python内置函数 !!!

内置函数就是Python给你提供的, 拿来直接用的函数&#xff0c;比如print&#xff0c;input等。 文章目录 前言 一、和数字相关 1. 数据类型 2. 进制转换 3. 数学运算 二、和数据结构相关 1. 序列 2. 数据集合 3. 相关内置函数 三、和数据结构相关 四、和迭代器生成器相关 五、字…...

使用Vue3 + Vite创建uni-app项目(Webstorm)

使用Vue3 Vite创建uni-app项目&#xff08;Webstorm&#xff09; 参考&#xff1a;前端VUE3Vite UniAPP-- 框架搭建_uniapp vite-CSDN博客 // 参考github.com的库&#xff1a;https://github.com/dcloudio/uni-preset-vue npx degit dcloudio/uni-preset-vue#vite-ts vite-vu…...

【js】js实现多个视频连续播放:

文章目录 一、效果&#xff1a;二、实现&#xff1a;三、案例&#xff1a; 一、效果&#xff1a; 二、实现&#xff1a; <!DOCTYPE html> <html> <head><title>Video Player</title><style>#progressBar { width: 800px;height: 20px;b…...

使用openssl 生成pfx格式证书时报错:unable to load certificates

问题现象包如下&#xff1a; 之前在centos上使用openssl部署证书服务器以及颁发证书的时候遇到的问题&#xff0c;在进行个人证书生成之后需要形成pfx格式证书&#xff0c;结果过程中报错了。网上类似资料比较少&#xff0c;做个记录。 生成pfx格式证书的命令&#xff1a; o…...

微信小程序 分享按钮 监听用户分享成功

代码 <view><button class"btnLq ed flex justify-center" open-type"share" click"getAward">点击分享</button> </view>export default {data(){return{shareMd:false,//分享埋点}},onShow(){//if(this.shareMd){uni.…...

数据结构-怀化学院期末题

题目&#xff1a; 利用希尔排序算法实现线性表的排序。希尔排序是根据给定的增量序列将线性表分隔成某个“增量”的记录组成一个子序例&#xff0c;在子序列中采用直接插入排序完成。 输入 第一行为元素个数n(1<n<1000)&#xff0c;第二行为n个元素值(整数)&#xff0c;即…...

跟cherno手搓游戏引擎【1】:配置与入口点

环境配置&#xff1a; 编译环境&#xff1a;VS2019 创建两个项目&#xff1a; 设置Sandbox为启动项&#xff1a; 设置sandbox的配置属性-常规-输出目录\中间目录为如下&#xff1a; 预处理定义&#xff1a;为了配置一些只有windows才能用的函数。 设置YOTOEngin&#xff08;我…...

25计算机专业考研经验贴之准备篇

Hello各位小伙伴&#xff0c;大家新年好&#xff01; 马上就要进入寒假假期了&#xff0c;25考研也该提上日程了。今天先跟大家分享一下大家在假期可以先做起来的准备工作。 【选择学校】 择校是个非常重要的内容&#xff0c;因为不同学校的考试内容是不一样的&#xff0c;有些…...

机器人相关知识

机器人学&#xff08;Robotics) 一些基础概念 位姿 位姿位置姿态 位姿的表示 刚体 刚性物体是一组粒子的集合&#xff0c;其中任意两个粒子之间的距离保持固定&#xff0c;不受物体运动或施加在物体上的力的影响。 “完全不可变形”的物体就是刚体。 刚体位置 刚性连杆 …...

八股文打卡day22——操作系统(5)

面试题&#xff1a;什么是死锁&#xff1f;如何避免死锁&#xff1f; 我的回答&#xff1a; 死锁是两个或者多个进程都占有各自的资源&#xff0c;然后都互相请求资源&#xff0c;导致互相都陷入了阻塞状态。 如何避免死锁呢&#xff1f; 首先&#xff0c;造成死锁有四个必要…...

SQL Server 权限管理

CSDN 成就一亿技术人&#xff01; 2024年 第一篇 难度指数&#xff1a;* * CSDN 成就一亿技术人&#xff01; 目录 1. 权限管理 什么是权限管理&#xff1f; SQL server的安全机制 服务器级角色 数据库级角色 对象级角色 2. 创建用户 赋予权限 最重要的一步骤 1. 权限…...

ReentrantLock底层原理学习一

J.U.C 简介 Java.util.concurrent 是在并发编程中比较常用的工具类&#xff0c;里面包含很多用来在并发场景中使用的组件。比如线程池、阻塞队列、计时器、同步器、并发集合等等。并发包的作者是大名鼎鼎的 Doug Lea。我们在接下来的课程中&#xff0c;回去剖析一些经典的比较…...

数字孪生在增强现实(AR)中的应用

数字孪生在增强现实&#xff08;Augmented Reality&#xff0c;AR&#xff09;中的应用可以提供更丰富、交互性更强的现实世界增强体验。以下是数字孪生在AR中的一些应用&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff…...

【数据仓库与联机分析处理】多维数据模型

目录 一、数据立方体 二、数据模型 &#xff08;一&#xff09;星形模型 &#xff08;二&#xff09;雪花模式 &#xff08;三&#xff09;事实星座模式 三、多维数据模型中的OLAP操作 &#xff08;一&#xff09;下钻 &#xff08;二&#xff09;上卷 &#xff08;三…...

【网络面试(3)】浏览器委托协议栈完成消息的收发

前面的博客中&#xff0c;提到过很多次&#xff0c;浏览器作为应用程序&#xff0c;本身是不具备向网络中发送网络请求的能力&#xff0c;要委托操作系统的内核协议栈来完成。协议栈再调用网卡驱动&#xff0c;通过网卡将请求消息发送出去&#xff0c;本篇博客就来探讨一下这个…...

Kotlin: Jetpack — ViewModel简单应用

ViewModel 概览 Android Jetpack 的一部分。 ViewModel 类是一种业务逻辑或屏幕级状态容器。它用于将状态公开给界面&#xff0c;以及封装相关的业务逻辑。 它的主要优点是&#xff0c;它可以缓存状态&#xff0c;并可在配置更改后持久保留相应状态。这意味着在 activity 之…...

【Java技术专题】「攻破技术盲区」攻破Java技术盲点之unsafe类的使用指南(打破Java的安全管控— sun.misc.unsafe)

Java后门机制 — sun.misc.unsafe 打破Java的安全管控关于Unsafe的编程建议实例化Unsafe后门对象使用sun.misc.Unsafe创建实例单例模式处理实现浅克隆&#xff08;直接获取内存的方式&#xff09;直接使用copyMemory原理分析 密码安全使用Unsafe类—示例代码 运行时动态创建类超…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者&#xff1a;来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗&#xff1f;了解下一期 Elasticsearch Engineer 培训的时间吧&#xff01; Elasticsearch 拥有众多新功能&#xff0c;助你为自己…...

【Java学习笔记】Arrays类

Arrays 类 1. 导入包&#xff1a;import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序&#xff08;自然排序和定制排序&#xff09;Arrays.binarySearch()通过二分搜索法进行查找&#xff08;前提&#xff1a;数组是…...

STM32F4基本定时器使用和原理详解

STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...

蓝桥杯3498 01串的熵

问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798&#xff0c; 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...

Linux --进程控制

本文从以下五个方面来初步认识进程控制&#xff1a; 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程&#xff0c;创建出来的进程就是子进程&#xff0c;原来的进程为父进程。…...

Mobile ALOHA全身模仿学习

一、题目 Mobile ALOHA&#xff1a;通过低成本全身远程操作学习双手移动操作 传统模仿学习&#xff08;Imitation Learning&#xff09;缺点&#xff1a;聚焦与桌面操作&#xff0c;缺乏通用任务所需的移动性和灵活性 本论文优点&#xff1a;&#xff08;1&#xff09;在ALOHA…...

基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解

JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用&#xff0c;结合SQLite数据库实现联系人管理功能&#xff0c;并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能&#xff0c;同时可以最小化到系统…...

代码随想录刷题day30

1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币&#xff0c;另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额&#xff0c;返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

nnUNet V2修改网络——暴力替换网络为UNet++

更换前,要用nnUNet V2跑通所用数据集,证明nnUNet V2、数据集、运行环境等没有问题 阅读nnU-Net V2 的 U-Net结构,初步了解要修改的网络,知己知彼,修改起来才能游刃有余。 U-Net存在两个局限,一是网络的最佳深度因应用场景而异,这取决于任务的难度和可用于训练的标注数…...