C++感受6-Hello World 交互版
- 变量、常量
- 输入、输出、流
- getline() 函数读入整行输入
- Hello() 函数复习
- 新定义函数 Input() 实现友好的人机交互
- 还有 “痘痘” 为什么挤不到的分析……
1. DRY 原则简介
上一节课,我们写了两版“问候”程序。第一版的最大问题是重复的内容比较多,每一次问候都在重复从 cout 到 endl 的代码,中间只有人名不同。
刚学编程的人可能会说:“代码重复怕什么啊?在电脑里 复制、 粘贴 文本非常快啊!”
问题不在于写代码是快还是慢,而在于重复的代码,难以修改、难以维护。
重复的代码,它们的背后的业务逻辑往往是相同或者高度相似的。如果有一天,这个业务逻辑发生改变,就会造成代码中所有重复的地方都要修改。我们现在的代码才几行而已,如果有一天q有上千,上万行代码,我们很可能都无法找出所有重复的地方,一个个修改过去也极大可能引发新的错误。
“不要到处写重复的代码”,这已经成为专门一条行业内的编码规矩,称为 “DRY”原则,也就是 “Dont’t repeat yourself”,不要重复你自己。
2. 新情景、新需求
第二版的问候程序,有很大的进步。因为我们把重复的,问候操作,写成一个函数,叫Hello(),多次调用。这样一来,将来,如果问候操作,需要变化,我们也只需要修改这个Hello()函数即可。
// 我的第一个函数
void Hello(std::string_view XXX)
{std::cout << "你好," << XXX << "!" << std::endl;
}
这一节课,我们要为问候业务,提出新的场景需求:模拟在上班路上,碰到谁,就问候谁的过程。
碰上谁,就问候谁……那我们能事先知道每一天上班会碰到谁吗?当然无法预知。这样一看,现有的这第二版问候程序就显得非常“死板”了。每一次运行这个程序,都是先问候志玲,再问候幂幂,再问候冰冰……无论运行多少次,它的问候过程都是一成不变的。
这就说到了“变”!我们需要可以变的姓名;这就引出这节谭,们要学习第一个重要的知识点:变量。
3. 认识变量和常量
程序中的数据,可以按可变和不可变区分,分成两大类:常量和变量。
3.1 常量
常量,就是在程序运行之后,无法修改,或禁止修改它的“量”的数据。
这里的“量”,更通俗易懂的说法是一个数据的“值”,或者说,一块内存里存放的内容。
我们以后会重点讲解常量。不过,大家要在今天记住这两个描述:“无能力修改” 和 “禁止修改”。
来举一个“恶俗”,但绝对管用的例子吧——
假设你是一个非常喜欢挤别人痘痘的人。然后,有个女生说她后背某个地方长了一颗很大的痘痘,可是她不告诉你这颗痘痘的位置。请问,你能挤掉一颗你看不见,摸不着的痘痘吗?当然不能,这就叫“无能力修改”。
另外一种情况,这颗痘痘就长在女生鼻头上,你看得见,摸得着,但是你能伸手就挤掉它吗?也不能,因为人家女生不允许你动它。
这就是将来我们会学习到的,最常见的两种类型的常量:一种是代码在客观上没有能力修改的数据,一种在语法上明确标明不让修改的数据。上一课第一版代码中的名字字符串,就是第一种,叫“字面常量”。它就像我们白纸黑字签下的字,一旦写下,就涂改不了。
3.2 变量
初中学习的代数,当一个数据我们暂时不知道它会是什么值时,我们可以用个字母,比如 x、y、z,来暂时先代表这个数据。在程序中,一个数据,我们暂时不知道它会是什么值;或者,知道它一开始的值,但这个值会随着程序的运行而不断变化,这情况下,我们也可以用一个字母,或者更好的,用一个单词来表达它,表达这个会变化的数据。
今天,我们不知道什么?答,我们不知道每一天上班路上会先遇到谁,后遇到谁。所以,就让我们写的C++程序,定义第一个真正意义上的变量,取名为 “谁” 吧!
你当然也可以使用 X 来表达,这样显得更加有科技感和神秘感。但是,我觉得用名字是“谁”这个变量,来表达程序中可能遇到谁谁谁谁……想一想是不是也挺直观的?
没错,这也是我们今天学习到又一个重要的知识点:变量的名字一定要能直观地表达它的作用。
来看一些常量与变量使用对比的例子——
-
“我的体重是 60 公斤”:人的体重很少一成不变,所以我们得用变量表达它,这个变量的名字可以叫 weight。
-
“我的身高 175 厘米……”:也一样,从小到大再到老,身高也会变化,这个变量可以叫 height。
3.3 变量常见使用过程
结合用变量表达待问候的人名的例子,我们来看看变量最常见的使用过程。
(1)定义变量
要使用变量,首先需要定义变量。C++定义变量时,需要给出变量名字,还需要直接或间接给出变量的类型。今天我们学习其中的“直接”方式:
变量类型 变量名字;
即:先写下变量的类型,再写下它的名字,然后用分号结束,这是定义变量的一种常见语法。
在我们的例子,变量名是谁,它实际是要表达人的名字,所以它的类型应该是字符串。在 C++ 的标准库中,有一个叫 string 的类型,用来表达字符串。
std::string 谁; // 定义了一个变量,名字叫谁,类型是 std::string
大家还记得前面课堂学习到的名字空间的知识点吧?特别是这个 std:: 的写法,你应该很熟悉了。
这样定义的变量谁,一开始时,它并不持任何字符内容(或者说,它持有一个空的字符串)。
2)修改变量的值
有了一个变量,接下来,就可以修改它的“量”了,也就是为它赋值。你可能猜到了,赋值操作在C++中,就是日常的 “=” 操作符(等号)。
下面演示了赋值 “张三” 给 谁 的代码:
谁 = "张三"; // 修改这个变量的值 (量、内存)
(3)使用变量
变量很方便用来传递一个值,比如,我们可以把 谁 作为之前我们写的 Hello() 函数的入参,以实现将 谁 的当前值(第2步中的 “张三”)传递给 Hello() 函数的入参(还记得吗,这个入参是一个“偷窥狂”,哦不是,是“观察者”)……
Hello(谁); // 将谁的当前值,传递给 Hello() 函数入参,再于函数内部输出其值
(4)再改,再用
变量变量,比孙悟空还善变,悟空才能连续72变,我们的变量可以无穷尽地变下去……
谁 = "李天王";
Hello(谁);谁 = "孙悟空";
Hello(谁);// ...
3.4 变量使用完整示例代码
#include <iostream>
#include <string>
#include <string_view>void Hello(std::string_view XXX)
{std::cout << "你好," << XXX << "!" << std::endl;
}int main()
{std::string 谁; 谁 = "志玲";Hello(谁);谁 = "幂幂";Hello(谁);谁 = "冰冰";Hello(谁);谁 = "热巴";Hello(谁);谁 = "真木阳子";Hello(谁);谁 = "井川遥";Hello(谁);谁 = "Lily Collins";Hello(谁);
}
问题来了:这个使用变量的版本,感觉写起来,比之前的常量版本还啰嗦呀?
4. 人机交互!
4.1 认识 getline()
尽管用了变量,但这个版本每次运行起来,输出结果还是一成不变;甚至写起来比常量的那个版本,还要麻烦、还啰嗦,并且,没有引入什么新功能呀?!
我们准备这样来模拟每天上班路上遇到谁问候谁的过程:我们让用户(其实,就是我们自己),在程序运行时,通过键盘输入一个姓名,输入谁,就表示我们遇到谁。
我们要输入的是一个姓名,一个字符串。并且,如果是外国人的话,那么他们的姓名中间可能包含空格。C++标准库提供了一个 getline() 的函数,特别适合于读入整行的字符串,包括中间的空格。
getline() 有两个入参。第一个入参指定输入流。什么叫“输入流”?
【输入、输出】:首先来理解什么叫“输入”:往程序里“塞”数据,就叫“输入”。大家顺便可以理解一下什么叫 “输出”,程序往外“吐”数据,就叫输出,也就是,编程时讲的输入和输出,是以程序为中心来理解的。
【流】:那什么叫流:水流、电流,都是流。流就是在同一个方向上的排着队的一大堆数据。比如,“车流”就是:同一个行驶方向上,有很多车一辆接一辆地往前走。
本站深入讲解,包含多个实践项目的 C++“流”的高级课程:
《C++“流”编程视频辅导》课程 建议及时加深学习
我们现在写的程序,暂时只能使用键盘往程序里输入数据,一阵“噼噼啪啪”敲键盘,就可以往程序里输入一大串字符,因此它满足“输入流”的概念的三个要素:
- 同一个方向:键盘到主机
- 支持连续:噼噼啪啪快速输入,一个字符都不会丢
- 支持排队(即有序):无论你击键有多少,都不可能出现先输入字符的后到,后输入的字符先到的乱序情况
所以,C++标准库就把键盘输入,包装成一个 标准字符输入流,并且预先定义成一个变量。
如果是我写的标准库,那这个变量的名字肯定得叫 噼噼啪啪,可惜不是。
这个预先定义的,代表标准输入流,或者说,绝大多数情况下,代表键盘的变量,它的真正的名字叫 cin。c指字符,in 指输入 。加上标准库名字空间直接限定,就是 std::cin。
getline() 函数的第二个入参,在本例中,我们给的是我们自己定义的字符串变量,也就是谁。
当程序这样写时:
getline(std::cin, 谁);
执行该句代码并完成 getline() 的调用之后,变量谁的值,就是用户从键盘上输入的一行文本。输入一行文本,是指用户输入一些普通字符内容(包括汉字内容)之后,非常潇洒的拍下键盘上的回车键。getline()开始从行首一直读到行尾,不含回车换行。
如果用户在此期间就是不碰键盘,那程序就会“卡”在这一行一动不动。
4.2 问候程序的人机交互第一版
#include <iostream>
#include <string_view>
#include <string>void Hello(std::string_view XXX)
{std::cout << "你好," << XXX << "!" << std::endl;
}int main()
{std::string 谁; std::getline(std::cin, 谁);Hello(谁);std::getline(std::cin, 谁);Hello(谁);
}
为了不浪费版面,暂时就只支持上班路上遇到两个吧!后面的遇到的,管他是大老板还是小保安,管她是不是你暗恋的办公室女神,咱们就全都假装没看到。
5. 是时候看视频了……
ffls09-HelloWorld-交互版
6. 最终版本代码
将 “遇见” 的过程,也封装成一个函数:Input(),该函数返回用户输入的姓名,并且提供了更好的人机交互界面。
#include <iostream>
#include <string_view>
#include <string>// 负责问候(输出)
void Hello(std::string_view XXX)
{std::cout << "你好," << XXX << "!" << std::endl;
}// 负责遇见(输入)
std::string Input()
{std::cout << "遇见谁了?请输入他的名字:";std::string name;std::getline(std::cin, name);return name;
}int main()
{std::string 谁; 谁 = Input(); // 遇见谁Hello(谁); // 问候谁谁 = Input(); // 纵不遇见你Hello(谁); // 也想问候你
}
「本课终」
相关文章:
C++感受6-Hello World 交互版
变量、常量输入、输出、流getline() 函数读入整行输入Hello() 函数复习新定义函数 Input() 实现友好的人机交互还有 “痘痘” 为什么挤不到的分析…… 1. DRY 原则简介 上一节课,我们写了两版“问候”程序。第一版的最大问题是重复的内容比较多,每一次问…...
02_c/c++开源库ZeroMQ
1.安装 C库 libzmq sudo apt install libzmq3-dev 实例: https://zeromq.org/get-started/?languagec&librarylibzmq# 编译依赖: pkg-config --cflags --libs libzmq or cat /usr/lib/x86_64-linux-gnu/pkgconfig/libzmq.pc -isystem /usr/include/mit-krb5 -I/usr/in…...
计算机视觉 CV 八股分享 [自用](更新中......)
目录 一、深度学习中解决过拟合方法 二、深度学习中解决欠拟合方法 三、梯度消失和梯度爆炸 解决梯度消失的方法 解决梯度爆炸的方法 四、神经网络权重初始化方法 五、梯度下降法 六、BatchNorm 七、归一化方法 八、卷积 九、池化 十、激活函数 十一、预训练 十二…...
【MHA】MySQL高可用MHA源码1-主库故障监控
1 阅读之前的准备工作 1 一个IDE工具 ,博主自己尝试了vscode安装perl的插件,但是函数 、变量 、模块等都不能跳转,阅读起来不是很方便。后来尝试使用了pycharm安装perl插件,阅读支持跳转,自己也能写一些简单的测试样例…...
如何一键清除文件目录下所有的node_modules
如何一键清除文件目录下所有的node_modules 快速删除目录下的node_modules,下面附上windows和mac的脚本指令 windows脚本 FOR /d /r . %d in (node_modules) DO IF EXIST "%d" rm -rf "%d"mac脚本 find . -name "node_modules" -…...
【产品经理修炼之道】- 导航架构设计
目录 一、导航是什么 二、导航的作用 三、导航的分类 四、导航菜单的广度与深度 五、导航的颜色 六、导航的形态 七、导航的研究 八、导航的设计 九、导航改版案例分享 总结 每个网页的设计都需要包括导航,那么导航架构该如何设计?作者结合之前…...
本地部署和运行大型语言模型(Large Language Models, LLMs)的工具Ollama
文章目录 本地部署和运行大型语言模型(Large Language Models, LLMs)的工具Ollama背景什么是Ollama主要功能优势 使用场景Ollama LangChain 实现本地运行Llama 3 本地部署和运行大型语言模型(Large Language Models, LLMs)的工具…...
Python-100-Days: Day01
Day01 Python简介 1.1989年Guido von Rossum在圣诞节之夜开始着手python语言编译器的编写。 2.1991年2月 Python v1 编译器诞生,使用C实现的,此时可以调用C的库函数。 3.1994年1月,Python v1.0 正式版发布。 4.2000年10月16日࿰…...
g 对象:Flask 应用中的“临时口袋”
文章目录 g对象的理解Flask 中的 g 对象g 对象的特点:使用 g 对象: 示例 g对象的理解 想象一下,你在逛超市。你需要一个购物篮来装你挑选的商品。这个购物篮就像 Flask 应用中的 g 对象,它是一个临时存放东西的地方,方便你在购物过程中随时取…...
JavaEE初阶——多线程(七)——定时器
T04BF 👋专栏: 算法|JAVA|MySQL|C语言 🫵 小比特 大梦想 此篇文章与大家分享多线程的第七篇文章——关于定时器 如果有不足的或者错误的请您指出! 目录 4.定时器4.1标准库提供的定时器4.2自己实现一个定时器4.2.1任务类4.2.2Timer类4.2.3 有一个线程来负…...
嵌入式4-24
作业: 整理思维导图 定义一个矩形类Rec,包含私有属性length,width,有以下成员函数: void set_length(int l); //设置长度 void set_width(int w); //设置宽度 int get_length(); //获取长度 int get_width(); //获取宽…...
跟我学C++中级篇——临时对象
一、临时对象 Temporary object,临时对象。一听名字就明白,这个对象的意义不大,只是临时中转一下或者存在一下,有的可能连个存在感都刷不到就消失了。但不要小看这种临时对象,对C/C这种以效率严苛为前提的编程环境下&…...
【S32K3 MCAL配置】-7.1-GPT Driver:定时器中断-创建一个周期执行的任务
"><--返回「Autosar_MCAL高阶配置」专栏主页--> 案例背景:常用于周期点亮/关闭一个LED灯;或者精度一般的占空比为50% PWM方波;或者周期调用一个函数,在该函数中我们可以执行一些软件策略(简易的OS)。 目录(共15页精讲,基于评估板: NXP S32K312EVB-Q172,…...
java可盈保险合同管理系统的设计与实现(springboot+mysql源码+文档)
风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的可盈保险合同管理系统。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: 基于Spring Boot的…...
【智能算法】囊状虫群算法(TSA)原理及实现
目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献 1.背景 2020年,S Kaur等人受到囊状虫群自然行为启发,提出了囊状虫群算法(Tunicate Swarm Algorithm, TSA)。 2.算法原理 2.1算法思想 TSA模拟了囊状虫群在导…...
python基础——正则表达式
📝前言: 这篇文章主要想讲解一下python中的正则表达式: 1,什么是正则表达式 2,re模块三匹配 3,元字符匹配 4,具体示例 🎬个人简介:努力学习ing 📋个人专栏&am…...
T1级,生产环境事故—Shell脚本一键备份K8s的YAML文件
大家好,我叫秋意零。 最近对公司进行日常运维工作时,出现了一个 T1 级别事故。导致公司的“酒云网”APP的无法使用。我和我领导一起搞了一个多小时,业务也停了一个多小时。 起因是:我的部门直系领导,叫我**删除一个 …...
C语言程序设计:预处理命令
预处理命令 基础知识 预处理命令简介 C语言的预处理命令是指编译之前由预处理器执行的指令,用于在源代码中进行一些预处理操作。 常见预处理命令 (1) #define 定义一个宏,用于替换源代码中的标识符为指定的文本。 #define MAX_NUM 100 int arr[MAX_NU…...
C++ 中的 struct 和 Class
通常struct用于表示一组相关的数据,而Class用于表示一个封装了数据和操作的对象。如果只是用于来组织一些数据,而不涉及复杂的封装和继承关系,则struct更为直观;如果需要封装、继承等面向对象编程的特性,可以选择使用C…...
基于Qt的二维码生成与识别
基于Qt的二维码生成与识别 一、获取QZxing开源库 1.通过封装的QZxing开源库生成和识别二维码,下载地址:GitCode - 开发者的代码家园https://gitcode.com/mirrors/ftylitak/qzxing/tree/master。 2.下载解压后,使用Qt Creator xx࿰…...
docker 基本命令
目录 一、docker 镜像操作命令 1.1.查询软件镜像 1.2.docker pull:下载镜像 1.3.docker push:上传镜像 1.4.docker images:查看本地镜像 1.5.docker inspect :获取镜像详细信息 1.6.docker tag:添加镜像标签 …...
h5键盘弹出收起时引起的页面变化
h5键盘弹出收起时引起的页面变化 键盘弹出时会导致窗口发生变化,置于底部的操作项会被顶上来,所以在键盘弹出的时候处理一下页面节点 通过监听页面窗口大小变化判断键盘状态键盘弹出时隐藏底部操作项在页面加载完成时执行即可 export function keyboa…...
Redis入门到实战教程(基础篇)笔记
教学来源: Redis课程介绍导学_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1cr4y1671t?p1一、Redis 入门 1.认识NoSQL 2.Redis在虚拟机中的安装和开机自启 Redis在虚拟机中安装和配置开机自启-CSDN博客https://blog.csdn.net/qq_69183322/article/deta…...
启动MySQL服务
在 Windows 系统上: 首先,找到 MySQL 安装目录,一般默认是在 C:\Program Files\MySQL 文件夹下。进入该目录下的 bin 文件夹。找到 mysqld.exe 文件,双击运行它。 在 Linux 系统(以 CentOS 为例)ÿ…...
Windows上构建 Chisel-Bootcamp
windows环境构建本地Chisel-Bootcamp 安装摘要Chisel-boocamp环境搭建安装java安装Anaconda安装scala 下载Chisel-bootcamp 环境Reference 安装摘要 在windows上安装chisel-boocamp,与linux过程类似。 安装java8安装anaconda安装scala下载Chisel-bootcamp环境 Ch…...
Spring Bean依赖注入-Spring入门(二)
1、SpringBean概述 在Spring中,一切Java对象都被视为Bean,用于实现某个具体功能。 Bean的依赖关系注入的过程,也称为Bean的装配过程。 Bean的装配方式有3种: XML配置文件注解Java类 Spring中常用的两种装配方式分别是基于XML的…...
java中spring底层核心原理解析(1)
相关系列 java中spring底层核心原理解析(2)-CSDN博客 总起 本章主要是讲以下的内容 Bean的生命周期底层原理依赖注入底层原理初始化底层原理推断构造方法底层原理 先看spring入门代码: ClassPathXmlApplicationContext context new ClassPathXmlApplicationCo…...
Neo-reGeorg明文流量
Neo-reGeorg 1 同IP对,同一个URI,第一个TCP流是“GET”请求,随后的TCP流请求为“POST”。(jsp\jspx\php) 2 第一个TCP流中,GET只有一个会话。(jsp\jspx\php),响应body79…...
科技渔业,智慧守护:4G+北斗太阳能定位终端准确定位,防拆卸报警,夯实渔业管理水平
如何高效地管理渔船,有效监控禁渔区域,4G北斗太阳能定位终端应运而生,成为渔业管理的重要应用工具。 我国作为全球渔业的重要国家,渔业一直是沿海地区传统的支柱产业,对经济的繁荣和民生的稳定起着至关重要的作用。因…...
【Elasticsearch】Elasticsearch 从入门到精通(二):基础使用
《Elasticsearch 从入门到精通》共包含以下 2 2 2 篇文章: Elasticsearch 从入门到精通(一):基本介绍Elasticsearch 从入门到精通(二):基础使用 😊 如果您觉得这篇文章有用 ✔️ 的…...
基于DEAP数据集的四种机器学习方法的情绪分类
在机器学习领域,KNN(K-Nearest Neighbors)、SVM(Support Vector Machine)、决策树(Decision Tree)和随机森林(Random Forest)是常见且广泛应用的算法。 介绍 1. KNN&am…...
离散数学之一阶逻辑基本概念与等值演算思维导图+大纲笔记(期末复习,考研,学习笔记,知识点总结)
大纲笔记 基本概念 一阶逻辑命题符号化 个体词 个体常项 个体变项 个体域 个体总域 谓词 谓词常项 谓词变项 零元谓词 特性谓词 引入规则 量词 全称量词 存在量词 一阶逻辑1公式及解释 基本概念 原子公式 谓词公式 自由变元与约束变元 自由变元 换名规则 约束变元 带入规则 闭…...
nvm的下载与安装
nvm(Node Version Manager)是一个用于管理 Node.js 版本的工具,它允许您在同一台计算机上安装和切换不同的 Node.js 版本。 一、下载地址 https://github.com/coreybutler/nvm-windows/releases 二、安装nvm 三、设置环境变量 在命令提示…...
代码随想录算法训练营第五十二天|300.最长递增子序列、674.最长连续递增序列、718.最长重复子数组
文档链接:https://programmercarl.com/ LeetCode300.最长递增子序列 题目链接:https://leetcode.cn/problems/longest-increasing-subsequence/ 思路:每次遇到一个新系列总是想不出来。 dp[i]:以nums[i]为尾的最长递增子序列的…...
SQL表连接详解:JOIN与逗号(,)的使用及其性能影响
省流版 在这个详细的解释中,我们将深入探讨SQL中表连接的概念,特别是JOIN和逗号(,)在连接表时的不同用法及其对查询性能的影响。通过实际示例和背后的逻辑分析,我们将揭示在不同场景下选择哪种连接方式更为合适。 1.…...
docker如何查看对外暴露接口
在Docker的世界里,了解如何查看容器对外暴露的接口是管理Docker应用的关键技能之一。暴露接口允许外部世界与容器内部的服务进行通信,是实现服务交互和持续集成/持续部署(CI/CD)管道的基础。本文将深入探讨Docker中暴露接口的机制…...
RTU遥测终端为城市排水安全保驾护航!
近年来,全球气候变迁与城市化进程不断加速,导致强降雨事件频发,道路低洼地带、下穿式立交桥和隧道等区域在暴雨中常易积水,严重阻碍了人民的出行,甚至危及生命与财产安全。而传统的排水管网管理方式已难以适应现代城市…...
【002_音频开发_基础篇_Linux音频架构简介】
002_音频开发_基础篇_Linux音频架构简介 文章目录 002_音频开发_基础篇_Linux音频架构简介创作背景Linux 音频架构ALSA 简介ASoC 驱动硬件架构软件架构MachinePlatformCodec ASoC 驱动 PCMALSA设备文件结构 ALSA 使用常用概念alsa-libALSA Open 流程ALSA Write 流程2种写入方法…...
C++对象的初始化和处理
生活中我们买的电子产品都基本会有出厂设置!在某一天我们不用时候也会删除一些自己信息数据保证安全。 C中的面向对象来源于生活,每个对象也都会有初始设置以及对象销毁前的清理数据的设置。 构造函数和析构函数 对象的初始化和清理也是两个非常重要的安全问题 一…...
【开源】使用Python+Flask+Mysql快速开发一个用户增删改查系统
项目演示 项目本身很简单,增删改查是几乎所有系统的骨架。正所谓万丈高楼平地起,学会了增删改查,航母就指日可待了:),光速入门,直接看演示图: 项目地址 https://github.com/mudf…...
10.Godot Input与自定义单例的使用
单例 单例是一个可以在任何一个脚本中对其进行直接访问的对象,分为内置单例与自定义单例。每个单例都是独一无二的对象。内置单例不是节点,主要成员是各类 Server,开发者可以使用它们直接控制游戏程序的图形与音效等内容。此外,还…...
浅谈rDNS在IP情报建设中的应用
在当今数字化世界中,互联网已经成为人们日常生活和商业活动中不可或缺的一部分。在这个庞大而复杂的网络生态系统中,IP地址是连接和识别各种网络设备和服务的基础。然而,仅仅知道一个设备的IP地址并不足以充分理解其在网络中的角色和行为。为…...
探索 Chrome 插件开发之旅
浏览器扩展程序拥有无限可能性,它们能丰富我们的浏览体验,提升工作效率,甚至改变网络世界的交互方式。谷歌 Chrome 浏览器的插件生态尤为繁荣,本文将引导你走进 Chrome 插件开发的世界,从入门基础知识到实战案例&#…...
k8s部署grafana
修改grafana-pvc.yaml文件中的信息,然后应用YAML文件 cat > /opt/k8s/grafana/grafana-pvc.yaml <<EOF apiVersion: v1 kind: PersistentVolumeClaim metadata:name: grafana-data-pvc spec:accessModes:- ReadWriteManystorageClassName: "nfs-stor…...
自动化机器学习流水线:基于Spring Boot与AI机器学习技术的融合探索
🧑 作者简介:阿里巴巴嵌入式技术专家,深耕嵌入式人工智能领域,具备多年的嵌入式硬件产品研发管理经验。 📒 博客介绍:分享嵌入式开发领域的相关知识、经验、思考和感悟,欢迎关注。提供嵌入式方向…...
存在矛盾的题目
{ u t t − a 2 u x x 0 , t > 0 , x > 0 , u ( x , 0 ) sin ( x ) 2 x , x ≥ 0 , u t ( x , 0 ) cos ( x ) , x ≥ 0 , u x ( 0 , t ) 2 , t ≥ 0. \begin{cases} u_{tt} - a^2 u_{xx} 0, & t > 0, x > 0, \\ u(x, 0) \sin(x) 2x, & x \ge…...
Maya vs Blender:制作3D动画首选哪一个?
就 3D 动画而言,有两款3D软件引发了最多的争论:Blender 与 Maya。这两个强大的平台都提供强大的工具集,使动画故事和角色栩栩如生。但作为一名3D动画师,您应该投入时间学习和创作哪一个呢?下面我将从以下六点给您一个清…...
P8739 [蓝桥杯 2020 国 C] 重复字符串
[蓝桥杯 2020 国 C] 重复字符串 题目描述 如果一个字符串 S S S 恰好可以由某个字符串重复 K K K 次得到,我们就称 S S S 是 K K K 次重复字符串。例如 abcabcabc 可以看作是 abc 重复 3 3 3 次得到,所以 abcabcabc 是 3 3 3 次重复字符串。 同…...
数据挖掘实验(Apriori,fpgrowth)
Apriori:这里做了个小优化,比如abcde和adcef自连接出的新项集abcdef,可以用abcde的位置和f的位置取交集,这样第n项集的计算可以用n-1项集的信息和数字本身的位置信息计算出来,只需要保存第n-1项集的位置信息就可以提速…...
【月报】Aavegotchi 开发更新 |2024 年 4 月版,多款游戏上新玩法
朋友们好! 春天来了,我们热情洋溢的团队很高兴能为 Gotchiverse 带来一堆新鲜的更新和丰富的功能。让我们一起来看看这次开发更新带来了什么: Gotchichain 选择定居基地 精神力量竞技场获得了 EBIC 更新 高奇守护者通过全新的进阶系统提升…...
霍华德·马克斯最新备忘录:债务的影响
金融机构如今面临问题的主要原因之一在于,其低估了住房抵押贷款等资产的内在风险,因此,将过多的借款用于购买过多的抵押贷款支持证券。 我的合伙人布鲁斯高树(Bruce Karsh)最近向我分享了一篇关于国际象棋的报纸文章&…...
「AIGC算法」近邻算法原理详解
本文主要介绍近邻算法原理及实践demo。 一、原理 K近邻算法(K-Nearest Neighbors,简称KNN)是一种基于距离的分类算法,其核心思想是距离越近的样本点,其类别越有可能相似。以下是KNN算法的原理详解: 1. 算…...
【半夜学习MySQL】复合查询(含多表查询、自连接、单行/多行子查询、多列子查询、合并查询等详解)
🏠关于专栏:半夜学习MySQL专栏用于记录MySQL数据相关内容。 🎯每天努力一点点,技术变化看得见 文章目录 回顾基本查询多表查询自连接子查询单行子查询多行子查询多列子查询在from子句中使用子查询合并查询 回顾基本查询 下面使用…...
05_kafka-整合springboot
文章目录 kafka 整合 springboot pom.xml <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.5.RELEASE</version> </parent> <dependencies>&…...
Java面试八股之为什么要使用克隆
Java中为什么要使用克隆?怎么实现对象的克隆?深拷贝和浅拷贝的区别是什么 在Java中使用克隆主要有以下几个原因: 创建对象副本:克隆可以快速创建一个与原对象状态完全相同的副本,无需手动逐一复制每个属性。这种情况…...
JS中使用Cookie实现记住密码以及设置密码过期时间
在JavaScript中,可以使用document.cookie来操作和获取cookie。 要记住密码,可以在用户登录成功后,设置一个带有用户名和密码的cookie,设置过期时间为一段较长的时间,比如一周。当用户再次访问网站时,可以先…...
嵌入式是大坑的说法,是否与学生的信息不对称有关?
在开始前我有一些资料,是我根据网友给的问题精心整理了一份「嵌入式的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家!!! 目前也算是在搞嵌入式&#…...
Java测试框架:分享常用的Java测试框架,如JUnit, TestNG等,包括单元测试,集成测试,性能测试等
单元测试框架 JUnit JUnit简介 JUnit是一个开源的Java测试框架,用于编写和执行可重复的测试。它是Java开发人员的一个重要工具,用于进行单元测试、回归测试和模块化测试。JUnit提供了一种形式化的方式来编写测试用例,并通过这些测试用例核实代码的正确性。具有可预测的测试…...
Unity Mirror 从入门到入神(一)
Mirror从入门到成神 文章目录 Mirror从入门到成神简介NetworkClientRegisterPrefabConnect (string address)Disconnect ()activeactiveHost NetworkServerSpawn 简介 Mirror是一个unity网络同步框架,基于MonoBehaviour生命周期的回调的基础上进行数值的同步&#…...
如何看待Agent的爆火
在2023年3月,一个名为AutoGPT的框架项目引发了一场AI Agent热潮。这个项目利用大型语言模型,将大任务拆分成小任务,并使用工具完成它们。这种技术将大语言模型处理语言、创造内容和逻辑推理的能力扩展到了应用场景中,还加入了感知…...
C脚本实现Wincc弹窗重复调用
文章目录 前言一、步骤及解析二、运行画面演示三、总结 前言 在常见的Wincc上位机画面中,点击按钮或控件弹出弹窗,由于不同的弹窗内容不同,变量前缀不同,通常情况下一个弹窗就需要调用一个画面窗口,但画面窗口过多会导…...
2.go语言初始(二)
本篇博客涉及到go 的基础数据类型、 go 语言中的运算符、转义字符、格式化输出、字符串操作 go 语言中的运算符 在 go 语言中,基本数据类型主要包括以下几类:整数类型、浮点数类型、复数类型、布尔类型、字符串类型、字节类型(byte…...