C++服务器框架开发1——项目介绍/分布式/#ifndef与#pragma once
该专栏记录了在学习一个开发项目的过程中遇到的疑惑和问题。
其教学视频见:[C++高级教程]从零开始开发服务器框架(sylar)
C++服务器开发1——项目介绍/分布式/#ifndef与#pragma once
- 项目介绍
- 分布式
- #ifndef与#pragma once
最近开始学习下C++的项目开发,找了很多,在b站发现了一个教开发一套C++高性能服务器框架的up(sylar-yin),而且它有提供源码以及自己的博客。内容看着很全,就打算学一下。
目前我的C++能力仅仅是会基础,以及刷了几十到算法题。但是刷题太枯燥了,我离实习找工作还有段时间,所以想抽空先学个完整的开发项目,就挑了这个,如果后面发现学不会,我可能会放弃,但我会尽量学习完这个up的80个视频。本着需要什么学什么的态度,我遇到不会的,就查一下,然后做个笔记。
这次的笔记内容是:项目介绍、什么是分布式、#ifndef与#pragma once
项目介绍
详细见这页博文:http://www.sylar.top/blog/?p=137
github原话:C++高性能分布式服务器框架,webserver,websocket server,自定义tcp_server(包含日志模块,配置模块,线程模块,协程模块,协程调度模块,io协程调度模块,hook模块,socket模块,bytearray序列化,http模块,TcpServer模块,Websocket模块,Https模块等, Smtp邮件模块, MySQL, SQLite3, ORM,Redis,Zookeeper)
我看完感觉很多都不懂,先搁置吧。先学习下“分布式”。
分布式
我主要看的这篇:什么是分布式,分布式和集群的区别又是什么?这一篇让你彻底明白!
分布式:多个系统在多个服务器上协作完成单个任务。
集群式:单个系统在多个服务器上 ~~~~~ 完成单个任务。
概括两者的差异:分布式系统的服务器任务是不同的,它们之间相互调用,完成了一个大的任务。而集群式系统的服务器任务是相同的,它们只是分担了客户端的请求,但是最终需要汇总到主服务器。这导致像数据库、主服务器等可能会过载。
#ifndef与#pragma once
视频1中,最开始讲的代码是log.h。然后吃下了如下的结构:
#ifndef __SYLAR_LOG_H__
#define __SYLAR_LOG_H__
//这里放置了各种include和定义语句
#endif
这种写法,是为了避免重复编译的,因为,这个log.h文件,很可能会被多个文件include,如果用了这种写法,当编译过一次后,第二次遇到include时就会自动跳过这个编译。
它和#pragma once的功能很像,我看了我之前刷题的代码,是将#pragma once放在了代码最前面。
差异:1#ifndef是打开文件后,根据__SYLAR_LOG_H__来确认是否已经编译过。所以它需要打开文件查看后后才能确定,编译时耗时比较长。注:有可能会因为不同头文件的宏名相同后,后编译的那个头文件被跳过编译,导致编译时报错某些变量或类没有声明。2#pragma once是针对文件的,所以没有宏名相同这种问题,并且它因为不需要打开文件而使得编译速度更快。注:如果有头文件被拷贝多份,就会出现重复编译的问题。且这种方法在一些老编译器上不支持。
个人认为,还是选择第一种靠谱些,虽然编译慢,但出错的可能性更低。
相关文章:
C++服务器框架开发1——项目介绍/分布式/#ifndef与#pragma once
该专栏记录了在学习一个开发项目的过程中遇到的疑惑和问题。 其教学视频见:[C高级教程]从零开始开发服务器框架(sylar) C服务器开发1——项目介绍/分布式/#ifndef与#pragma once 项目介绍分布式#ifndef与#pragma once 最近开始学习下C的项目开发,找了很多…...
Tensorflow2基础代码实战系列之双层RNN文本分类任务
深度学习框架Tensorflow2系列 注:大家觉得博客好的话,别忘了点赞收藏呀,本人每周都会更新关于人工智能和大数据相关的内容,内容多为原创,Python Java Scala SQL 代码,CV NLP 推荐系统等,Spark …...
Python爬虫-快手photoId
前言 本文是该专栏的第49篇,后面会持续分享python爬虫干货知识,记得关注。 笔者在本专栏的上一篇,有详细介绍平台视频播放量的爬取方法。与该平台相关联的文章,笔者已整理在下方,感兴趣的同学可查看翻阅。 1. Python如何解决“快手滑块验证码”(4) 2. 快手pcursor 3. …...
软件测试人员如何为项目的质量保障兜底?看完你就明白了...
上线前层层保障 01文档管理 关键词:需求文档、设计文档、测试文档 1.需求和设计产出方为产品、开发,测试需要做好流程监督,这里重点说下测试文档。 2.测试文档,从业务领域来说,一般有测试计划、测试用例、业务总结文…...
《幸福关系的7段旅程》
关于作者 本书作者安德鲁∙马歇尔,英国顶尖婚姻咨询机构RELATE的资深专家,拥有 30年丰富的咨询经验,并为《泰晤士报》《观察家》和《星期日快报》撰写专栏文章。已出版19部作品,并被翻译成20种语言。 关于本书 《幸福关系的7段…...
使用Python中PDB模块中的命令来调试Python代码的教程
这篇文章主要介绍了使用Python中PDB模块中的命令来调试Python代码的教程,包括设置断点来修改代码等、对于Python团队项目工作有一定帮助,需要的朋友可以参考下 你有多少次陷入不得不更改别人代码的境地?如果你是一个开发团队的一员,那么你遇…...
Codeforces Round 764 (Div. 3)
比赛链接 Codeforces Round 764 A. Plus One on the SubsetB. Make APC. Division by Two and PermutationD. Palindromes ColoringE. Masha-forgetful A. Plus One on the Subset Example input 3 6 3 4 2 4 1 2 3 1000 1002 998 2 12 11output 3 4 1题意: 你可…...
四月,收割12家offer,面试也太容易了吧....
前言 下面是我根据工作这几年来的面试经验,加上之前收集的资料,整理出来350道软件测试工程师 常考的面试题。字节跳动、阿里、腾讯、百度、快手、美团等大厂常考的面试题,在文章里面都有 提到。 虽然这篇文章很长,但是绝对值得你…...
Xubuntu22.04之自动调节亮度护眼redshift(一百七十四)
简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…...
Spark基础学习笔记----RDD检查点与共享变量
零、本讲学习目标 了解RDD容错机制理解RDD检查点机制的特点与用处理解共享变量的类别、特点与使用 一、RDD容错机制 当Spark集群中的某一个节点由于宕机导致数据丢失,则可以通过Spark中的RDD进行容错恢复已经丢失的数据。RDD提供了两种故障恢复的方式,…...
ES6(对象,数组,类型化数组)
对象 1,Object.is 用于判断两个值是否相等, 其内部实现类SameValue算法, 其行为类似于“” 但与“”不同的是 它认为两个NaN是相等的 而0,-0是不相等的 2,Object.assign 表示此方法可以将对象合并成一个 他的第一个…...
JVM系列-第12章-垃圾回收器
垃圾回收器 GC 分类与性能指标 垃圾回收器概述 垃圾收集器没有在规范中进行过多的规定,可以由不同的厂商、不同版本的JVM来实现。 由于JDK的版本处于高速迭代过程中,因此Java发展至今已经衍生了众多的GC版本。 从不同角度分析垃圾收集器,…...
零操作难度,轻松进行应用测试,App专项测试之Monkey测试完全指南!
目录 前言: 一、 Monkey测试的基础参数 1.1 事件类型参数: 1.2 覆盖包 1.3 事件数量 二、 Monkey测试的高级参数 2.1 稳定性级别 2.2 策略参数 2.3 包含选项参数 三、 附加代码 四、 总结 前言: 在移动应用的开发过程中࿰…...
Linux安装Docker(这应该是你看过的最简洁的安装教程)
Docker是一种开源的容器化平台,可以将应用程序及其依赖项打包成一个可移植的容器,以便在不同的环境中运行。Docker的核心是Docker引擎,它可以自动化应用程序的部署、扩展和管理,同时还提供了一个开放的API,可以与其他工…...
使用AES算法加密技术集成Java和Vue保护您的数据,代码示例和算法原理
1 算法的原理: AES是一种对称加密算法,也就是说加密和解密使用的是同一个密钥。其基本原理是将明文分成固定大小的块(128位),然后使用密钥对每个块进行加密操作,最后生成密文。在加密过程中,还需要使用一个向量(IV)来增加安全性,避免相同的明文块生成相同的密文块。…...
vcruntime140_1.dll丢失怎样修复,推荐4个vcruntime140_1.dll丢失的修复方法
vcruntime140_1.dll文件是Microsoft Visual C Redistributable for Visual Studio 2015运行库的一部分,它是一个用于支持Visual C构建的应用程序的系统文件。这个文件包含了在运行C程序时所需要的函数和类库,主要负责向应用程序提供运行时环境。如果电脑…...
快来试试这几个简单好用的手机技巧吧
技巧一:相机功能 苹果手机的相机功能确实非常出色,除了出色的像素之外,还有许多其他实用功能可以提升拍摄体验。 这些相机功能提供了更多的选择和便利性,使用户能够更好地适应不同的拍摄需求。 自拍功能:通过选择自…...
OneDrive同步角标消失 - 解决方案
问题 在电脑端使用OneDrive时,文件管理器OneDrive文件夹内的文件会在左下角显示同步状态,如下图。若没有显示同步角标,则此功能出现异常,下文介绍如何显示同步角标。 值得一提的是,同步角标只起到显示作用࿰…...
自学网络安全【黑客】,一般人我劝你还是算了吧
前言:我是劝一般人算了,看你是一般人还是。。。 一、网络安全学习的误区 1.不要试图以编程为基础去学习网络安全2.不要刚开始就深度学习网络安全3.收集适当的学习资料4.适当的报班学习二、学习网络安全的些许准备 1.硬件选择2.软件选择3.外语能力三、网…...
Java集合工具:first和last
在平常开发过程中,我们经常会遇到截取列表片段的需求,比如取列表中前4个元素、取后四个元素。Java的List提供了subList方法,可以用来完成这些工作,但是使用起来并没有那么便利,比如取前四个元素: list.sub…...
深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...
DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径
目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...
云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...
Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...
Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...
解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...
Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...
LLM基础1_语言模型如何处理文本
基于GitHub项目:https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken:OpenAI开发的专业"分词器" torch:Facebook开发的强力计算引擎,相当于超级计算器 理解词嵌入:给词语画"…...
让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比
在机器学习的回归分析中,损失函数的选择对模型性能具有决定性影响。均方误差(MSE)作为经典的损失函数,在处理干净数据时表现优异,但在面对包含异常值的噪声数据时,其对大误差的二次惩罚机制往往导致模型参数…...
MySQL JOIN 表过多的优化思路
当 MySQL 查询涉及大量表 JOIN 时,性能会显著下降。以下是优化思路和简易实现方法: 一、核心优化思路 减少 JOIN 数量 数据冗余:添加必要的冗余字段(如订单表直接存储用户名)合并表:将频繁关联的小表合并成…...
