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

c++入门一

参考:https://www.learncpp.com/cpp-tutorial/

  • When you finish, you will not only know how to program in C++, you will know how NOT to program in C++, which is arguably as important.

  • Tired or unhappy programmers make mistakes, and debugging code tends to take much longer than writing it correctly 。

如何最大化学习
1.手打,自己编译,可以让你最快熟悉变异警告和错误,想每一行代码作用,不懂就去深入
2.自己改bug,学会调适
3.用例子试验。改参数看看会发生啥
4.参加测验
5.用学到的内容自己编码

介绍编程语言

机器语言。CPU可以直接读写,0,1组成,每一个0/1是比特,组成命令的比特数量可能不同,一些CPU指令长度是32位,x86可变
由于不同CPU有不同指令集,因此为一种类型的CPU程序不能移植到另一种类型的CPU

汇编语言:每一条指令有缩写表示,可以用名称和其他数字。比机器语言容易读写,但是理解较难,需要重写
才能运行在不同指令集的硬件

高级语言:为了解决可读性和移植性问题,开发了新的编程语言。
编译(C,C++,Pascal):读取源代码,生成可执行程序
解释:更灵活,效率更低。直接执行指令,无需编译成可执行文件。
(java混合使用两者)

C/C++简介:

C语言由贝尔电话实验室的Dennis Ritchie于1972年开发,主要作为一种系统编程语言(一种用于编写操作系统的语言)。
C++(发音为“see plus plus”)由贝尔实验室的Bjarne Stroustrup开发,作为C语言的扩展,始于1979年。C++为C语言增加了许多新功能,它是一种面向对象的语言。
C 和 C++ 的基本设计理念可以概括为“信任程序员”——这既美妙又危险。C++旨在让程序员有高度的自由度来做他们想做的事。然而,这也意味着语言通常不会阻止你做一些没有意义的事情,因为它会假设你这样做是出于某种它不理解的原因。如果新程序员措手不及,可能会陷入很多陷阱。这就是为什么知道在C / C++中不应该做什么几乎与知道应该做什么一样重要的主要原因之一。

C++擅长什么?
C++在需要高性能和精确控制内存和其他资源的情况下表现出色。
电子游戏,实时系统,高性能金融应用(高频交易)
图形应用程序和抹零
办公应用
嵌入式软件‘音频和视频处理
AI,神经网络

介绍C++开发环境

1.定义要解决的问题
2.确定如何解决问题
很多时候,程序员会得到一个想法,坐下来,然后立即开始编写解决方案。这通常会生成属于不良类别的解决方案。
通常,良好的解决方案具有以下特征:straightforward,welldocumented,模块化构建,鲁棒性,意外情况时提供有用信息
当您坐下来立即开始编码时,您通常会想“我想做”,因此您可以实施最快实现目标的解决方案。这可能导致程序脆弱,以后难以更改或扩展,或者存在大量错误(技术缺陷)。

研究表明,程序员实际上只有20%的时间花在编写初始程序上。另外 80% 用于维护,包括调试(删除错误)、应对环境变化的更新(例如,在新操作系统版本上运行)、增强(提高可用性或功能的微小更改)或内部改进(提高可靠性或可维护性)。
因此,值得你花一点额外的时间(在你开始编码之前)思考解决问题的最佳方法,你正在做出什么假设,以及你如何计划未来,以便为自己节省大量的时间和麻烦。

3.编写程序

4.编译源代码
检查代码是否遵循C++语法规则,将C+源码转换为机器语言文件name.ojb

5.链接对象文件和库
获取编译器生成的所有文件,并将它们组合在单个可执行程序中。
除了能链接对象文件外,链接器还能链接库文件。(预编译代码集合,被打包以便其他程序重用)
C++核心语言实际上相当小而简洁(您将在这些教程中学到很多内容)。但是,C++还附带了一个称为C++标准库(通常缩写为标准库)的广泛库,该库提供了可在程序中使用的其他功能。C++标准库中最常用的部分之一是 iostream 库,它包含用于在显示器上打印文本和从用户获取键盘输入的功能。几乎每个编写C++程序都以某种形式使用标准库,因此标准库链接到您的程序中是很常见的。大多数链接器会在您使用标准库的任何部分后立即自动链接,
第三,,链接器确保正确解析所有跨文件依赖项。例如,如果在一个.cpp文件中定义某些内容,然后在另一个.cpp文件中使用它,则链接器会将两者连接在一起。如果链接器无法将引用连接到具有其定义的某些内容,则会收到链接器错误,并且链接过程将中止。
链接器完成链接所有对象文件和库后(假设一切顺利),您将拥有一个可执行文件,然后可以运行该文件!

链接库

链接库(Library)是预先编译好的可重用代码的集合,可以通过链接到应用程序中来实现功能的共享和重用。链接库通常包含函数、类、数据结构等代码和数据资源,通过将其与应用程序进行链接,可以在应用程序中调用这些库中提供的功能。

链接库有两种主要类型:静态链接库和动态链接库。

静态链接库(Static Library):

静态链接库在编译时被链接到应用程序中,形成一个独立的可执行文件。这意味着应用程序会包含链接库的所有代码和数据,使得应用程序能够独立运行。
使用静态链接库的优点是简单、方便,无需额外的运行时环境依赖。但缺点是每个使用该库的应用程序都会复制一份库的代码和数据,造成代码冗余和文件占用空间增加。
动态链接库(Dynamic Link Library,DLL):

动态链接库在运行时被加载到内存中,多个应用程序可以共享同一个动态链接库的实例。这意味着不同的应用程序可以共享同一个库,从而减少了内存开销和磁盘空间。
使用动态链接库的优点是节省内存和磁盘空间,同时可以通过更新动态链接库来修复和改进库中的功能。但缺点是应用程序在运行时需要依赖相应的动态链接库文件,如果缺少或版本不匹配会导致运行错误。
链接库广泛应用于软件开发中,可以提供各种功能和服务,例如数据库操作、图形界面、网络通信等。常见的链接库包括标准库(如C++标准库、C标准库)、第三方库(如OpenCV、Boost)、操作系统提供的库(如Windows API)等。

要在项目中使用链接库,通常需要将库文件与应用程序进行链接,并在代码中引用相应的头文件来访问库中的函数和数据结构。具体的链接方法和引用方式取决于开发环境和编程语言。
6.Testing 测试
7.Debugging 调试

IDE介绍

Integrated development environments (IDEs)

visual studio (选择C++桌面开发,了Windows 10 SDK(或Windows 11 SDK))

在这里插入图片描述
Code::Blocks (for Linux or Windows)
Blocks。Code::Blocks是一个免费的,开源的,跨平台的IDE,可以在Linux和Windows上运行。
某些 Linux 安装可能缺少使用 Code::Block 运行或编译程序所需的依赖项。:sudo apt-get install build-essential.

Visual Studio Code

是经验丰富的开发人员的热门选择,因为它快速,灵活,开源,适用于多种编程语言,并且可用于许多不同的平台。缺点是VS Code比此列表中的其他选项更难正确配置(在Windows上,也更难安装)。

编译第一个程序program

Projects 项目:
通常从一个项目开始,每个项目project对应一个程序program

控制台项目:
控制台项目意味着我们将创建可以从Windows,Linux或Mac控制台运行的程序。

默认情况下,控制台应用程序没有图形用户界面 (GUI),它们将文本打印到控制台,从键盘读取输入,并编译为独立的可执行文件。

IDE 中的编译、生成、重新生成、清理和运行/启动选项之间有什么区别?

编译代码文件时,IDE 可能会缓存生成的对象文件。这样,如果将来再次编译程序,则不需要重新编译任何未修改的代码文件 - 可以重用上次缓存的对象文件。这可以显著加快编译时间(以一点磁盘空间为代价)。

Build :生成编译项目或工作区/解决方案中所有已修改的代码文件,然后将目标文件链接到可执行文件中。如果自上次生成以来未修改任何代码文件,则此选项不执行任何操作。

Clean:删除所有缓存的对象和可执行文件,以便下次生成项目时,将重新编译所有文件并生成新的可执行文件。

Rebuild :clean+build

Compile:重新编译单个代码文件(无论它以前是否已缓存)。此选项不会调用链接器或生成可执行文件。

Run/start :执行上一次build生成的可执行文件。一些IDE会(比如Visual Studio)在run之前build确保运行的是代码最新版本

一些常见的C++问题

一般运行时问题

  1. 执行程序时,控制台窗口闪烁,然后立即关闭
    首先,添加或确保以下行靠近程序的顶部(Visual Studio 用户,请确保这些行出现在“pch.h”或 #include“stdafx.h”#include 之后,如果存在):
#include <iostream>
#include <limits>

其次,在 main() 函数的末尾添加以下代码(在 return 语句之前):

std::cin.clear(); // reset any error flags
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // ignore any characters in the input buffer until we find an enter character
std::cin.get(); // get one more char from the user

这将导致程序等待用户按某个键,然后再继续,这将使您有时间在操作系统关闭控制台窗口之前检查程序的输出。

  1. 我运行了我的程序并得到了一个窗口,但没有输出。
    您的病毒扫描程序或反恶意软件可能会阻止执行。尝试暂时禁用它,看看这是否是问题所在。

  2. 我的程序可以编译,但无法正常工作。我该怎么办?
    调试它

一般编译时问题

  1. 编译程序时,收到有关未解析的外部符号_main或_WinMain@16的错误
    这意味着你的编译器找不到你的 main() 函数。所有程序都必须包含 main() 函数。

  2. 我正在尝试使用 C++11/14/17/XX 功能,但它不起作用
    如果您的编译器较旧,则它可能不支持该语言的这些最新添加功能。在这种情况下,请升级编译器。

  3. 当尝试使用 cin、cout 或 endl 时,编译器会说 cin、cout 或 endl 是“未声明的标识符”
    请确保在文件顶部附近包含以下行:

#include <iostream>

其次,确保每次使用 cin、cout 和 endl 都以“std::”为前缀。

std::cout << "Hello world!" << std::endl;

如果这不能解决您的问题,则可能是您的编译器已过期,或者安装已损坏。尝试重新安装和/或升级到最新版本的编译器。

  1. 当尝试使用 endl 结束打印的行时,编译器说 end1 是“未声明的标识符”
    确保不要将endl中的字母l(小写L)误认为数字1。endl都是字母。确保您的编辑器使用的字体清楚地表明字母小写 L、大写 i 和数字 1 之间的差异。此外,在许多非编程字体中,字母大写字母 o 和数字零很容易混淆。

  2. 编译程序时,出现“文件末尾没有换行符”错误
    C++ 标准要求所有源 (.cpp) 文件都以换行符结尾。

C++ 标准要求所有源 (.cpp) 文件都以换行符结尾

  1. c:\vcprojects\test.cpp(263) :fatal error C1010: unexpected end of file while looking for precompiled header directive

当 Microsoft Visual C++ 编译器设置为使用预编译标头,但C++代码文件中的一个(或多个)未 #include“stdafx.h”或 #include“pch.h”作为代码文件的第一行时,会发生此错误。我们建议的解决方法是关闭预编译标头

  1. “1MSVCRTD.lib(exe_winmain.obj) : error LNK2019: unresolved external symbol _WinMain@16 referenced in function “int __cdecl invoke_main(void)” (?invoke_main@@YAHXZ)”

您可能已经创建了 Windows 图形应用程序,而不是控制台应用程序。重新创建项目,并确保将其创建为 Windows(或 Win32)控制台项目。

  1. “Cannot find or open the PDB file”

这是一个警告,而不是错误,因此它不会影响您的程序。但是,这很烦人。要修复它,请进入调试菜单 -> 选项和设置 ->符号,然后选中“Microsoft符号服务器”。

配置编译器:构建配置

生成配置(也称为生成目标)是项目设置的集合,用于确定 IDE 将如何生成项目。构建配置通常包括可执行文件的名称、IDE 将在哪些目录中查找其他代码和库文件、是保留还是删除调试信息、让编译器优化程序的程度等内容。通常,您需要将这些设置保留为其默认值,除非您有特定原因需要更改某些内容。

在 IDE 中创建新项目时,大多数 IDE 将为您设置两种不同的生成配置:发布配置和调试配置。

  • 调试配置旨在帮助您调试程序,通常是编写程序时将使用的配置。此配置关闭所有优化,并包含调试信息,这使程序更大、更慢,但更易于调试。默认情况下,通常选择调试配置作为活动配置。

  • 发布配置旨在在向公众发布程序时使用。此版本通常针对大小和性能进行了优化,并且不包含额外的调试信息。由于发布配置包括所有优化,因此此模式对于测试代码的性能也很有用

修改构建配置:
每当更新项目设置时,请对所有生成配置进行更改

配置编译器:编译器扩展

建议关闭编译器扩展:
编写使用编译器扩展的程序允许您编写与C++标准不兼容的程序。使用非标准扩展的程序通常不会在其他编译器(不支持这些相同的扩展)上编译,或者如果它们这样做,它们可能无法正常运行。

配置编译器:警告和错误级别

当你编写程序时,编译器将检查以确保你遵循了C++语言的规则

如果您做了一些明显违反语言规则的事情,在编译过程中,编译器将发出一个错误,提供包含错误的行号,以及一些关于预期内容与发现内容的文本。实际错误可能位于该行或前一行。识别并修复错误代码行后,可以再次尝试编译。

在其他情况下,编译器可能会发现看似错误的代码,但编译器无法确定(记住座右铭:“相信程序员”)。在这种情况下,编译器可以选择发出警告。警告不会停止编译,而是向程序员发出似乎不对劲的通知。

Best practice 最佳实践:
不要让警告堆积如山。在遇到它们时解决它们(就好像它们是错误一样)。否则,有关严重问题的警告可能会在有关非严重问题的警告中丢失。

在极少数情况下,可能需要显式告诉编译器不要为相关代码行生成特定警告。

提高警告级别

默认情况下,大多数编译器只会生成有关最明显问题的警告。但是,您可以要求编译器更加自信地为它发现奇怪的事情提供警告。

1.在“解决方案资源管理器”窗口中右键单击项目名称,然后选择“属性”

2.在“项目”对话框中,首先确保“配置”字段设置为“所有配置”。

3.然后选择“C/C++ >常规”选项卡,并将“警告级别”设置为“级别 4”(/W4)

Best practice 最佳实践:
启用“将警告视为错误”。这将强制您解决导致警告的所有问题。

将“将警告视为错误”设置为“是 (/WX)”。

配置编译器:选择语言标准

有许多不同的C++版本可用(C++98、C++03、C++11、C++14、C++17、C++20、C++23 等),您的编译器如何知道要使用哪一个?通常,编译器会选择一个默认标准。通常,默认值不是最新的语言标准 - 许多默认为C++14,它缺少许多最新和最强大的功能。

如果您希望使用不同的语言标准(您可能会这样做),则必须配置 IDE/编译器才能这样做。

语言标准的代码名称:最终的语言标准以其最终确定的年份命名(例如C++17于2017年定稿)。

您应该选择哪种语言标准?
在专业环境中,通常会选择比最新标准落后一两个版本的语言标准(例如,如果 C++20 是最新版本,则表示 C++14 或 C++17)。这样做通常是为了确保编译器制造商有机会解决缺陷,以便充分理解新功能的最佳实践。在相关的情况下,这也有助于确保更好的跨平台兼容性,因为某些平台上的编译器可能无法立即提供对较新语言标准的完全支持。

若要选择语言标准,请打开项目,然后转到“项目”菜单>“(应用程序的名称)属性”,然后打开“配置属性”>“C/C++ > 语言”。

导出配置

每次创建新项目时都必须重新选择所有设置选项,这很麻烦。幸运的是,大多数 IDE 都提供了一种导出设置的方法。这通常是通过使用所需的设置创建新的项目模板,然后在创建新项目时选择该项目模板来完成的。

在 Visual Studio 中,此选项可通过 Project -> 导出模板获得。选择“项目模板”,添加名称和可选描述(例如C++20控制台应用程序),然后单击“完成”。下次创建新项目时,您会看到此模板显示在项目模板列表中。使用此模板创建新项目后,它可能无法打开任何文件。可以通过转到“解决方案”-> <项目名称>->源文件-> <模板名称>.cpp,在“解决方案资源管理器”窗口中打开.cpp文件。

.cpp 与.h文件关系运行/启动从以前的生成执行可执行文件。某些 IDE(例如 Visual Studio)会在执行“运行”之前调用“构建”,以确保您运行的是最新版本的代码

在C++中,通常使用.cpp文件和.h文件(或者.hpp文件)组合来管理代码。这种文件组织方式常被称为分离式编译。

.cpp文件包含实际的源代码实现。它包含类的方法定义、函数的具体实现等。

.h文件(或者.hpp文件)是头文件,它包含类、结构和函数的声明。头文件中通常只包含类成员函数的原型、变量的声明和必要的宏定义等。可以将头文件看作是对应源文件的接口。

基本上,.cpp文件包含了实现,而.h文件包含了声明。头文件的目的是在不暴露实现细节的情况下,向其他源文件提供访问类和函数的接口。

在编译过程中,编译器会将.cpp文件编译为目标文件,然后将多个目标文件链接在一起形成可执行文件。头文件的声明用于验证代码的正确性并确保符号解析正确。

因此,.cpp文件和.h文件之间的关系是,.cpp文件包含了具体实现,而.h文件提供了接口声明。头文件通过#include预处理指令来引入,以便在编译过程中能够访问到相应的声明。

OPENCV

配置环境
https://blog.csdn.net/ycx_ccc/article/details/123258001

报错dll找不到
https://blog.csdn.net/op_chaos/article/details/114023937

相关文章:

c++入门一

参考&#xff1a;https://www.learncpp.com/cpp-tutorial/ When you finish, you will not only know how to program in C, you will know how NOT to program in C, which is arguably as important. Tired or unhappy programmers make mistakes, and debugging code tends…...

2023年项目进度管理平台排行榜

项目进度管理是项目管理学科中的一门重要课程&#xff0c;通过合理的项目计划&#xff0c;有效控制项目进度&#xff0c;保障项目能够按时交付。 不过&#xff0c;项目进度管理并不是一件简单的工作&#xff0c;不仅需要面对项目过程中各种突发情况&#xff0c;还需要做好团队协…...

【设计模式】面向对象设计八大原则

&#xff08;1&#xff09;依赖倒置原则&#xff08;DIP&#xff09; 高层模块&#xff08;稳定&#xff09;不应该依赖于低层模块&#xff08;变化&#xff09;&#xff0c;二者都应该依赖于抽象&#xff08;稳定&#xff09;。抽象&#xff08;稳定&#xff09;不应该依赖于…...

python数分实战探索霍尔特法之销售预测python代码实现以及预测图绘制

探索霍尔特法:时间序列预测中的线性趋势捕捉 时间序列分析是统计学和数据分析中的一个核心领域。无论是预测股票市场的走势,还是预测未来的销售量,一个精确和可靠的预测模型都是至关重要的。在众多的时间序列预测方法中,霍尔特法(Holts method)脱颖而出,特别是当我们面…...

java线程状态

图形说明: Thread.State源码注释: public enum State {/*** 新生状态&#xff1a;线程对象创建&#xff0c;但是还未start()*/NEW,/*** 线程处于可运行状态&#xff0c;但是这个可运行状态并不代表线程一定在虚拟机中执行。* 需要等待从操作系统获取到资源(比如处理器时间片…...

编译问题:error: ‘printf’ was not declared in this scope

这个错误提示意味着编译器在当前作用域内无法找到 printf 函数的声明。这通常是因为没有包含 <stdio.h> 头文件导致的。 解决方法是在程序中添加 #include <stdio.h> 这一行代码。这个头文件中包含了 printf 函数的声明&#xff0c;告诉编译器如何处理该函数。...

改变C++中私有变量成员的值

1、没有引用的情况&#xff1a; #include <iostream> #include <queue> using namespace std; class Person { public:queue<int>que; public:queue<int> getQueue(){return que;}void push(int a){que.push(a);}void pop(){que.pop();} };int main()…...

线程唯一的单例

经典设计模式的单例模式是指进程唯一的对象实例&#xff0c;实现code如下&#xff1a; package cun.zheng.weng.design.sinstnce;import java.util.concurrent.CountDownLatch; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ThreadPoolExec…...

明厨亮灶监控实施方案 opencv

明厨亮灶监控实施方案通过pythonopencv网络模型图像识别算法&#xff0c;一旦发现现场人员没有正确佩戴厨师帽或厨师服&#xff0c;及时发现明火离岗、不戴口罩、厨房抽烟、老鼠出没以及陌生人进入后厨等问题生成告警信息并进行提示。OpenCV是一个基于Apache2.0许可&#xff08…...

14 mysql bit/json/enum/set 的数据存储

前言 这里主要是 由于之前的一个 datetime 存储的时间 导致的问题的衍生出来的探究 探究的主要内容为 int 类类型的存储, 浮点类类型的存储, char 类类型的存储, blob 类类型的存储, enum/json/set/bit 类类型的存储 本文主要 的相关内容是 bit/json/enum/set 类类型的相关…...

04_19linux自己撸内存池实战,仿造slab分配器

前言 自己撸一个内存池 其实就相当于linux里面带的 slab分配器 可以翻翻之前的章 看看slab 和伙伴分配器的不同 在学习c语言时&#xff0c;我们常常会使用到malloc()去申请一块内存空间&#xff0c;用于存放我们的数据。刚开始我们只要知道申请内存时使用用malloc去申请一块就…...

【HDFS】XXXRpcServer和ClientNamenodeProtocolServerSideTranslatorPB小记

初始化RouterRpcServer时候会new ClientNamenodeProtocolServerSideTranslatorPB,并把当前RouterRpcServer对象(this)传入构造函数: ClientNamenodeProtocolServerSideTranslatorPBclientProtocolServerTranslator =new ClientNamenodeProtocolServerSideTranslatorPB(this…...

二分,Dijkstra,340. 通信线路

在郊区有 N 座通信基站&#xff0c;P 条 双向 电缆&#xff0c;第 i 条电缆连接基站 Ai 和 Bi。 特别地&#xff0c;1 号基站是通信公司的总站&#xff0c;N 号基站位于一座农场中。 现在&#xff0c;农场主希望对通信线路进行升级&#xff0c;其中升级第 i 条电缆需要花费 L…...

Stable Diffusion---Ai绘画-下载-入门-进阶(笔记整理)

前言 注&#xff1a;本文偏向于整理&#xff0c;都是跟着大佬们学的。 推荐两个b站up主&#xff0c;学完他们俩的东西基本就玩转SD为底的ai绘画&#xff1a; 秋葉aaaki&#xff0c;Nenly同学 1.首先SD主流的就是秋叶佬的Webui了&#xff0c;直接压缩包下载即可&#xff0c;下…...

Java 乘等赋值运算

下面这个题目是在一公司发过来的&#xff0c;如果你对 Java 的赋值运算比较了解的话&#xff0c;会很快知道答案的。 这个运算符在 Java 里面叫做乘等或者乘和赋值操作符&#xff0c;它把左操作数和右操作数相乘赋值给左操作数。 例如下面的&#xff1a;density * invertedRat…...

【性能优化】聊聊性能优化那些事

针对于互联网应用来说&#xff0c;性能优化其实就是一直需要做的事情&#xff0c;因为系统响应慢&#xff0c;是非常影响用户的体验&#xff0c;可能回造成用户流失。所以对于性能非常重要。最近正好接到一个性能优化的需求&#xff0c;需要对所负责的系统进行性能提升。目前接…...

k8s 查看加入主节点命令 k8s重新查看加入节点命令 k8s输入删除,重新查看加入命令 kuberadm查看加入节点命令

1. 使用kuberadm 安装成功后&#xff0c;clear清除了屏幕数据&#xff0c;加入命令无法查看&#xff0c;使用如下&#xff0c;重新查看node如何加入主节点命令&#xff1a; kubeadm token create --print-join-command --ttl 0 2.画圈的全部是&#xff0c;都复制&#xff0c;在…...

Scalene:Python CPU+GPU+内存分析器,具有人工智能驱动的优化建议

一、前言 Python 是一种广泛使用的编程语言&#xff0c;通常与其他语言编写的库一起使用。在这种情况下&#xff0c;如何提高性能和内存使用率可能会变得很复杂。但是&#xff0c;现在有一个解决方案&#xff0c;可以轻松地解决这些问题 - 分析器。 分析器旨在找出哪些代码段…...

C语言练习8(巩固提升)

C语言练习8 编程题 前言 奋斗是曲折的&#xff0c;“为有牺牲多壮志&#xff0c;敢教日月换新天”&#xff0c;要奋斗就会有牺牲&#xff0c;我们要始终发扬大无畏精神和无私奉献精神。奋斗者是精神最为富足的人&#xff0c;也是最懂得幸福、最享受幸福的人。正如马克思所讲&am…...

Java匿名内部类

文章目录 前言一、使用匿名内部类需要注意什么&#xff1f;二、使用步骤匿名内部类的结构匿名内部类的实用场景1. 事件监听器2. 过滤器3. 线程4. 实现接口5.单元测试&#xff1a;6.GUI编程7.回调函数 前言 Java中的匿名内部类是一种可以在声明时直接创建对象的内部类。这种内部…...

Shiro和SpringSecurity的区别

文章目录 前言1.Shiro&#xff1a;Shiro的特点&#xff1a; 2.SpringSecurity&#xff1a;SpringSecurity特点&#xff1a; 3.对比&#xff1a;总结 前言 Shiro 和 Spring Security 都是用于在Java应用程序中实现身份验证&#xff08;Authentication&#xff09;和授权&#x…...

【STM32】学习笔记(OLED)

调试方式 OLED简介 硬件电路 驱动函数 OLED.H #ifndef __OLED_H #define __OLED_Hvoid OLED_Init(void); void OLED_Clear(void); void OLED_ShowChar(uint8_t Line, uint8_t Column, char Char); void OLED_ShowString(uint8_t Line, uint8_t Column, char *String); void OL…...

概念解析 | 认知雷达:有大脑的雷达

注1:本文系“概念解析”系列之一,致力于简洁清晰地解释、辨析复杂而专业的概念。本次辨析的概念是:认知雷达。 认知雷达:有大脑的雷达 1.背景介绍 对于传统的雷达,它们通常都是预设定参数和模式来进行工作,比如发射功率、波形、扫描模式等。然而,这种方式面临着一些挑…...

B. Long Long

time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output Today Alex was brought array a1,a2,…,an&#xfffd;1,&#xfffd;2,…,&#xfffd;&#xfffd; of length n&#xfffd;. He can apply as m…...

CTFhub-文件上传-.htaccess

首先上传 .htaccess 的文件 .htaccess SetHandler application/x-httpd-php 这段内容的作用是使所有的文件都会被解析为php文件 然后上传1.jpg 的文件 内容为一句话木马 1.jpg <?php echo "PHP Loaded"; eval($_POST[a]); ?> 用蚁剑连接 http://ch…...

Python中的绝对和相对导入

在本文中&#xff0c;我们将看到Python中的绝对和相对导入。 Python中导入的工作 Python中的import类似于C/C中的#include header_file。Python模块可以通过使用import导入文件/函数来访问其他模块的代码。import语句是调用import机制的最常见方式&#xff0c;但它不是唯一的…...

C语言关于与运算符

C语言关于&与&&运算符 我们知道&#xff0c;在很多场景中&和&&通常可以相互代替&#xff0c;那么它们到底有什么不同呢&#xff1f; 先看一段代码 bool a, b, c; c a & b;使用clang -S编译出来的指令如下&#xff1a; movb -5(%rbp), %al …...

计算机网络(速率、宽带、吞吐量、时延、发送时延)

速率&#xff1a; 最重要的一个性能指标。 指的是数据的传送速率&#xff0c;也称为数据率 (data rate) 或比特率 (bit rate)。 单位&#xff1a;bit/s&#xff0c;或 kbit/s、Mbit/s、 Gbit/s 等。 例如 4 1010 bit/s 的数据率就记为 40 Gbit/s。 速率往往是指额定速率或…...

kubectl入门

一.kubectl的三种资源管理方式&#xff1a; 二. kubectl资源介绍&#xff1a; 1.namespace&#xff1a;实现多套环境的资源隔离或者多租户的资源隔离。k8s中的pod默认可以相互访问&#xff0c;如果不想让两个pod之间相互访问&#xff0c;就将其划分到不同ns下。 2.pod&#xff…...

Android JNI系列详解之ndk-build工具的使用

一、Android项目中使用ndk-build工具编译库文件 之前介绍过CMake编译工具的使用&#xff0c;今天介绍一种ndk自带的编译工具ndk-build的使用。 ndk-build目前主要有两种配置使用方式&#xff1a; 如上图所示&#xff0c;第一种方式是Android.mkApplication.mkgradle的方式生成…...