C++的一些基础常识
# 文件扩展名与类型
在 C++ 中,文件扩展名表示代码的类型和性质,通常有四种扩展名:
.hpp:Header or C++ Header File,表示 C++ 头文件。这种文件通常包含类声明、函数原型和模板定义,不包含函数定义或变量定义。这些文件使用 #ifndef 和 #define 进行保护,以避免多次包含头文件而引起的编译错误。
.c:C Source File,表示 C 语言源文件。这种文件包含 C 语言代码和函数定义。通常不包含头文件,因为在 C 语言中使用.h 文件作为头文件,而不是.hpp 文件。
.cpp:C++ Source File,表示 C 源文件。这种文件包含 C 代码和函数定义。与.c 文件类似,通常不包含头文件,而使用.hpp 文件作为头文件。
.h:Header File,表示 C 头文件。这种文件包含函数原型、结构体声明、宏定义和其他常规声明。通常用于将代码模块化,以便在其他源文件中使用。
总的来说,.hpp 文件用于 C 类声明和模板定义,.c 文件用于 C 语言代码,.cpp 文件用于 C 代码,.h 文件用于 C 的头文件。它们的核心区别在于代码类型和性质,以及文件名称和扩展名的约定。
# 使用 vscode 编写 C/C++
首先 vscode,minGW 准备好
下载解压后复制 bin 路径,然后再环境变量中 Path 中添加。
然后 vscode 的插件安装。
最后再项目文件下添加.vscode 文件夹
配置如下三个.json 文件
1.c_cpp_properties.json
1 | { |
2.launch.json
1 | { |
3.tasks.json
1 | { |
# 运维工程师
开发运维和普通运维。
运维是什么:通常属于技术部门,与研发、测试、系统管理同为互联网产品技术支撑的 4 大部门,这个划分在国内和国外以及大小公司间都会多少有一些不同。
运维的内容:对于初创公司,运维工程师的工作可能需要从申请域名开始,购买 / 租用服务器,上架,调整网络设备的设置,部署操作系统和运行环境,部署代码,设计和部署监控,防止漏洞和攻击等等。对于大型的公司,对于运维工作的要求越来越高,也催生了更细化的运维分工:大致可以分为网站运维,系统运维,网络运维,数据库运维,IT 运维,运维开发,运维安全等方向。(也就是说运维工程师需要负责部署服务器、预防攻击、维护数据库等等,可以说是和网络与服务器打交道的技术工作者)
运维要怎么做:运维的职责覆盖了产品从设计到发布、运行维护、变更升级及至下线的生命周期,各个阶段的职责包括:
产品发布前
这个阶段运维工程师的职责是参与设计并把有关运维准入,主要包括:
(1) 产品的业务熟悉;
(2) 产品架构设计的合理性评估,包括是否存在单点,是否可容错,是否有强耦合等,同时需要提供产品设计的合理性建议以使产品能够满足上线发布并稳定运行的基本要求;
(3) 资源评估,包括所需的服务器资源、网络资源以及资源的分布等,同时把相关产品对资源预算申请的合理性,控制服务成本;
(4) 资源就位,将申请的服务器及基础环境 / 域名准备就位。
产品发布
这个阶段运维工程师负责发布的具体工作,将具体的软件和系统 / 硬件资源整合形成产品并对外提供服务。
对于已在线服务的更新也属于发布范畴,这个时候的产品发布一般要保障在线发布,在不中断对外服务的情况下完成产品的升级。对于大型复杂的变更也存在中止服务部署完成后再重新提供服务的情况,但这种情况需要运维工程师通过尽可能的技术手段来避免。
产品运行维护
这个阶段的主要工作包括:
(1) 监控:对服务运行的状态进行实时的监控,随时发现服务的运行异常和资源消耗情况;输出重要的日常服务运行报表以评估服务 / 业务整体运行状况,发现服务隐患;
(2) 故障处理:对服务出现的任何异常进行及时处理,尽可能避免问题的扩大化甚至中止服务。这之前运维工程师需要针对各类服务异常,如机房 / 网络故障、程序 bug 等问题制定处理的预案,问题出现时可以自动或手动执行预案达到止损的目的。除了日常小故障外,运维工程师还需要考虑产品不同程度受损情况下的灾难恢复,包括诸如地震等不可抗力导致大规模机房故障、在线产品被删除等对产品造成致命伤害的情况。
容量管理:包括服务规模扩张后的资源评估、扩容、机房迁移、流量调度等规划和具体实施。
产品性能 / 成本优化
产品对外提供服务最重要的一点是用户体验,用户体验中非常重要的是产品的可用性和响应速度。而如何用最合理的资源(如机器、带宽等)支持产品提供高可用和高速度的用户体验,这也是运维工程师的重要职责。
产品下线
发展良好的互联网产品将始终在线对外提供服务,但互联网产品快速迭代,也存在相当多孵化的产品最后被淘汰的情况,这些产品都需要做下线处理,这个过程运维工程师主要做好资源回收的工作,将机器 / 网络等资源回收后纳入资源池中供其它服务使用。
——(摘自百度百科 https://baike.baidu.com/item/ 运维 / 8253097?fr=aladdin)
运维工程师需要掌握哪些技术:
1、Linux 系统基础
这个不用说了,是基础中的基础,连这个都不会就别干了,参考书籍,可以看鸟哥 linux 基础篇,至少要掌握这书 60% 内容,没必须全部掌握,但基本命令总得会吧。
2、网络服务
服务有很多种,每间公司都会用到不同的,但基础的服务肯定要掌握,如 FTP, DNS,SAMBA, 邮件,这几个大概学一下就行,LAMP 和 LNMP 是必须要熟练,我所指的不是光光会搭建,而是要很熟悉里面的相当配置才行,因为公司最关键的绝对是 WEB 服务器,所以 nginx 和 apache 要熟悉,特别是 nginx 一定要很熟悉才行,至少有些公司还会用 tomcat,这个也最好学一下。其实网络服务方面不用太担心,一般公司的环境都已经搭建好,就算有新服务器或让你整改,公司会有相应的文档让你参照来弄,不会让你乱来的,但至少相关的配置一定要学熟,而且肯定是编译安装多,那些模块要熟悉一下他的作用,特别是 PHP 那些模块。
这上面 2 点只是基础,也是必要条件,不能说是工具,以下才是真正的要掌握的工具。
3、shell 脚本和另一个脚本语言
shell 是运维人员必须具备的,不懂这个连入职都不行,至少也要写出一些系统管理脚本,最简单也得写个监控 CPU,内存比率的脚本吧,这是最最最基本了,别以为会写那些猜数字和计算什么数的,这些没什么作用,只作学习意义,写系统脚本才是最有意义,而另一个脚本语言是可选的,一般是 3P,即 python, perl 和 php,php 就不需要考虑了,除非你要做开发,我个人建议学 python 会比较好,难实现自动化运维,perl 是文本处理很强大,反正这两个学一个就行了。
4、sed 和 awk 工具
必须要掌握,在掌握这两个工具同时,还要掌握正则表达式,这个就痛苦了,正则是最难学的表达式,但结合到 sed 和 awk 中会很强大,在处理文本内容和过滤 WEB 内容时十分有用,不过在学 shell 的同时一般会经常结合用到的,所以学第 3 点就会顺便学第 4 点。
5、文本处理命令
sort, tr, cut, paste, uniq, tee 等,必学,也是结合第 3 点时一并学习的。
6、数据库
首选 mysql,别问我为什么不学 sqlserver 和 oracle,因为 Linux 用得最多绝对是 mysql,增删改查必学,特别要学熟查,其它方面可能不太需要,因为运维人员使用最多还是查,哪些优化和开发语句不会让你弄的。
7、防火墙
不学不行,防火墙也算是个难点,说难不难,说易不易,最重要弄懂规则,如果学过 CCNA 的朋友可能会比较好学,因为 iptables 也有 NAT 表,原理是一样的,而 FILTER 表用得最多,反正不学就肯定不合格。
8、监控工具
十分十分重要,我个人建议,最好学这 3 个,cacti,nagios,zabbix,企业用得最多应该是 nagios 和 zabbix,反正都学吧,但 nagios 会有点难,因为会涉及到用脚本写自动监控,那个地方很难。
9、集群和热备
这个很重要,肯定要懂的,但到了公司就不会让你去弄,因为新手基本不让你碰,集群工具有很多,最好学是 LVS,这是必学,最好也学学 nginx 集群,反向代理,还有热备,这个就更多工具能实现了,像我公司是自己开发热备工具的,mysql 热备也要学,就是主从复制,这个别告诉我容易,其实不容易的,要学懂整个流程一点也不容易,只照着做根本没意思。
10、数据备份
不学不行,工具有很多,但至少要把 RAID 的原理弄懂,特别是企业最常用的 1+0 或 0+1,自己做实验也要弄出来,备份工具有很多,如 tar, dump, rsync 等,最好多了解一下。