网络安全最新身价过亿的帝都富豪对小码农说预处理学的不错(1),网络安全系统工程师面试宝典

还有兄弟不知道网络安全面试可以提前刷题吗?费时一周整理的160+网络安全面试题,金九银十,做网络安全面试里的显眼包!

王岚嵚工程师面试题(附答案),只能帮兄弟们到这儿了!如果你能答对70%,找一个安全工作,问题不大。

对于有1-3年工作经验,想要跳槽的朋友来说,也是很好的温习资料!

【完整版领取方式在文末!!】

93道网络安全面试题

内容实在太多,不一一截图了

黑客学习资源推荐

最后给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

1️⃣零基础入门
① 学习路线

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

image

② 路线对应学习视频

同时每个成长路线对应的板块都有配套的视频提供:

image-20231025112050764

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以点击这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

#define reg register //为 register这个关键字,创建一个简短的名字
#define do_forever for(;😉 //用更形象的符号来替换一种实现
#define CASE break;case //在写case语句的时候自动把 break写上。
// 如果定义的 stuff过长,可以分成几行写,除了最后一行外,每行的后面都加一个反斜杠(续行符)。
#define DEBUG_PRINT printf(“file:%s\tline:%d\t
date:%s\ttime:%s\n” ,
__FILE__,__LINE__ ,
__DATE__,__TIME__ )


![image-20211009053424387](https://img-blog.csdnimg.cn/img_convert/f2abd875573e6c4722061d9963ed4c0e.png)


##### **注意**


**在define定义标识符的时候,要不要在最后加上;**



#define MAX 1000;
#define MAX 1000


![image-20211009055130245](https://img-blog.csdnimg.cn/img_convert/855382abfa7d77bee6e566444f0f5619.png)


#### **#define 定义宏**


![image-20211009063939832](https://img-blog.csdnimg.cn/img_convert/12fae5407cba80d2f8edc3b132c7a9f6.png)


#define 机制包括了一个规定,允许把参数替换到文本中,这种实现通常称为宏(macro)或定义宏(define macro)。


![image-20211009061225500](https://img-blog.csdnimg.cn/img_convert/025b57ce1ad57a90413694609906fe15.png)


我宏不加括号会咋样


![image-20211009062353419](https://img-blog.csdnimg.cn/img_convert/53b0db14fb66e9389f5d7f0373a3c44b.png)


是不是觉的可以了,好我们就用你那个括号看看少了什么


![image-20211009063624841](https://img-blog.csdnimg.cn/img_convert/e8baf598b1dab910893d7cd177105d1d.png)


**这恰恰也就证明了预处理(编译)只是进行文本操作**


##### **注意**


参数列表的左括号必须与name紧邻。如果两者之间有任何空白存在,参数列表就会被解释为stuff的一部分。


![image-20211009064654448](https://img-blog.csdnimg.cn/img_convert/249a249d867b41d10871e41abb5febae.png)


#### define和typedef的区别


一个是替换另一个是重定义


![image-20211009071624043](https://img-blog.csdnimg.cn/img_convert/7c8d846bc9e501fcd74205319dee8b78.png)


有一个题目


![image-20211009072823622](https://img-blog.csdnimg.cn/img_convert/8c85cf9f1dde83f45455571a8e9c4819.png)


#### #define替换规则


在程序中扩展#define定义符号和宏时,需要涉及几个步骤。


1. 在调用宏时,首先对参数进行检查,看看是否包含任何由#define定义的符号。如果是,它们首先被替换。
2. 替换文本随后被插入到程序中原来文本的位置。对于宏,参数名被他们的值替换。
3. 最后,再次对结果文件进行扫描,看看它是否包含任何由#define定义的符号。如果是,就重复上述处理过程。


##### 注意


1. 宏参数和#define 定义中可以出现其他#define定义的变量。但是对于宏,不能出现递归。
2. 当预处理器搜索#define定义的符号的时候,字符串常量的内容并不被搜索。


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fcKLeT0E-1633785801136)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20211009081444979.png)]


### #和##


如何把参数插入到字符串中?


**使用#,把一个宏参数变成对应的字符串。**


![image-20211009103630360](https://img-blog.csdnimg.cn/img_convert/b277de339c53ef115beb6dee5df9c194.png)


使用##


##于它两边的符号合成一个符号。  
 它允许宏定义从分离的文本片段创建标识符。


![image-20211009104721452](https://img-blog.csdnimg.cn/img_convert/cfe8848b79984ff0b62bca3638a1d4ca.png)


### 带副作用的宏参数


当宏参数在宏的定义中出现超过一次的时候,如果参数带有副作用,那么你在使用这个宏的时候就可能出现危险,导致不可预测的后果。副作用就是表达式求值的时候出现的永久性效果。



x+1;//不带副作用
x++;//带有副作用


![image-20211009110209148](https://img-blog.csdnimg.cn/img_convert/b456a19c10df5bb8d1236114e313116c.png)


![image-20211009113746199](https://img-blog.csdnimg.cn/img_convert/fb250b9937f7f39fa4c690828ad4e3ab.png)


### 宏和函数对比


宏通常被应用于执行简单的运算。比如在两个数中找出较大的一个。



#define MAX(a, b) ((a)>(b)?(a):(b))


##### **那为什么不用函数来完成这个任务?**


###### 原因有二:


1. 用于调用函数和从函数返回的代码可能比实际执行这个小型计算工作所需要的时间更多。所以宏比函数在程序的规模和速度方面更胜一筹。
2. 更为重要的是函数的参数必须声明为特定的类型。所以函数只能在类型合适的表达式上使用。反之这个宏怎可以适用于整形、长整型、浮点型等可以用于>来比较的类型。宏是类型无关的。


###### 当然和函数相比宏也有劣势的地方:


1. 每次使用宏的时候,一份宏定义的代码将插入到程序中。除非宏比较短,否则可能大幅度增加程序的长度。
2. 宏是没法调试的。**(因为我们调试是在运行阶段调试的,宏是在编译阶段就替换了)**
3. 宏由于类型无关,也就不够严谨。
4. 宏可能会带来运算符优先级的问题,导致程容易出现错。


**宏有时候可以做函数做不到的事情。比如:宏的参数可以出现类型,但是函数做不到。**


![image-20211009145318151](https://img-blog.csdnimg.cn/img_convert/10d4032feed35ec10deef643db75ad4f.png)


### 宏和函数的一个对比




| 属性 | #define定义宏 | 函数 |
| --- | --- | --- |
| 代码长度 | 每次使用时,宏代码都会被插入到程序中。除了非常小的宏之外,程序的长度会大幅度增长 | 函数代码只出现于一个地方;每次使用这个函数时,都调用那个地方的同一份代码 |
| 执行速度 | 更快 | 存在函数的调用和返回的额外开销,所以相对慢一些 |
| 操作符优先级 | 宏参数的求值是在所有周围表达式的上下文环境里,除非加上括号,否则邻近操作符的优先级可能会产生不可预料的后果,所以建议宏在书写的时候多些括号。 | 函数参数只在函数调用的时候求值一次,它的结果值传递给函数。表达式的求值结果更容易预测。 |
| 带有副作用的参数 | 参数可能被替换到宏体中的多个位置,所以带有副作用的参数求值可能会产生不可预料的结果。 | 函数参数只在传参的时候求值一次,结果更容易控制。 |
| 参数类型 | 宏的参数与类型无关,只要对参数的操作是合法的,它就可以使用于任何参数类型。 | 函数的参数是与类型有关的,如果参数的类型不同,就需要不同的函数,即使他们执行的任务是不同。 |
| 调试 | 宏是不方便调试的 | 函数是可以逐语句调试的 |
| 递归 | 宏是不能递归的 | 函数是可以递归的 |


### 命名约定


一般来讲函数的宏的使用语法很相似。所以语言本身没法帮我们区分二者。  
 那我们平时的一个习惯是:  
 **把宏名全部大写**  
 **函数名不要全部大写**


### #undef


这条指令用于移除一个宏定义


![image-20211009155513895](https://img-blog.csdnimg.cn/img_convert/72e37824b790c8dd664f384f58ed0d50.png)


### 命令行定义(VS不支持,linux这个电脑没有哈哈下面就是概念自己看)


许多C 的编译器提供了一种能力,允许在命令行中定义符号。用于启动编译过程。


例如:当我们根据同一个源文件要编译出不同的一个程序的不同版本的时候,这个特性有点用处。(假定某个程序中声明了一个某个长度的数组,如果机器内存有限,我们需要一个很小的数组,但是另外一  
 个机器内存大写,我们需要一个数组能够大写。)


### 条件编译


**满足条件代码就参与编译,不满足条件,代码就不参与编译**


##### 比如说:


调试性的代码,删除可惜,保留又碍事,所以我们可以选择性的编译。


![image-20211009161934319](https://img-blog.csdnimg.cn/img_convert/77147af2bb0b572487e5c2748a6340f5.png)


#### 常见的条件编译指令


##### #if 常量表达式



#if 常量表达式
//…
#endif


![image-20211009163553953](https://img-blog.csdnimg.cn/img_convert/fc115b8608afe77d914ffc9d0f8e93df.png)


##### 注意


必须是常量表达式,变量是不行的


![image-20211009164717300](https://img-blog.csdnimg.cn/img_convert/9a0550561d0688325fe809bd7bcf92b7.png)


自己想想为什么只能是常量:这些变量是在运行的时候才会创建,但是#if 是在什么时候处理的呢,是在预编译阶段就处理好了,在创建这个局部变量的前面就处理好了


##### 常量表达式由预处理器求值。



//常量表达式由预处理器求值。
#define DEBUG 1
#if DEBUG
//…
#endif


![image-20211009164024619](https://img-blog.csdnimg.cn/img_convert/cfff2b06fd445601d72c62d399c2c7e6.png)


##### 多个分支的条件编译



#if 常量表达式
//…
#elif 常量表达式
//…
#else
//…
#endif


![image-20211009165834094](https://img-blog.csdnimg.cn/img_convert/f73aef1868bb6f0e85dd43572bff819b.png)


##### 判断是否被定义



#if defined(symbol)
#ifdef symbol
#if !defined(symbol)
#ifndef symbol


![image-20211009171023343](https://img-blog.csdnimg.cn/img_convert/402bc6c91aaee08b5adaf6150982ad8f.png)


##### 嵌套指令






还有兄弟不知道网络安全面试可以提前刷题吗?费时一周整理的160+网络安全面试题,金九银十,做网络安全面试里的显眼包!


王岚嵚工程师面试题(附答案),只能帮兄弟们到这儿了!如果你能答对70%,找一个安全工作,问题不大。


对于有1-3年工作经验,想要跳槽的朋友来说,也是很好的温习资料!


【完整版领取方式在文末!!】


***93道网络安全面试题***


![](https://i-blog.csdnimg.cn/blog_migrate/e8e8e04f5f05fdeb34634b0b3780bd33.png)








![](https://i-blog.csdnimg.cn/blog_migrate/99d4e30cb19514a36725fd71dd8b3308.png)





![](https://i-blog.csdnimg.cn/blog_migrate/79019216a46e2955b8c154ad933e9c8c.png)





内容实在太多,不一一截图了


### 黑客学习资源推荐


最后给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!


对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。


😝朋友们如果有需要的话,可以联系领取~

#### 1️⃣零基础入门


##### ① 学习路线


对于从来没有接触过网络安全的同学,我们帮你准备了详细的**学习成长路线图**。可以说是**最科学最系统的学习路线**,大家跟着这个大的方向学习准没问题。


![image](https://i-blog.csdnimg.cn/blog_migrate/9e5c1ca69284d5344a87a1e01fe18208.gif#pic_center)


##### ② 路线对应学习视频


同时每个成长路线对应的板块都有配套的视频提供:


![image-20231025112050764](https://i-blog.csdnimg.cn/blog_migrate/b84394276be4f7fcf4d176fa628748ac.png#pic_center)


#### 2️⃣视频配套工具&国内外网安书籍、文档


##### ① 工具


![](https://img-blog.csdnimg.cn/img_convert/d3f08d9a26927e48b1332a38401b3369.png#pic_center)


##### ② 视频


![image1](https://img-blog.csdnimg.cn/img_convert/f18acc028dc224b7ace77f2e260ba222.png#pic_center)


##### ③ 书籍


![image2](https://img-blog.csdnimg.cn/img_convert/769b7e13b39771b3a6e4397753dab12e.png#pic_center)

资源较为敏感,未展示全面,需要的最下面获取

![在这里插入图片描述](https://img-blog.csdnimg.cn/e4f9ac066e8c485f8407a99619f9c5b5.png#pic_center)![在这里插入图片描述](https://img-blog.csdnimg.cn/111f5462e7df433b981dc2430bb9ad39.png#pic_center)


##### ② 简历模板


![在这里插入图片描述](https://img-blog.csdnimg.cn/504b8be96bfa4dfb8befc2af49aabfa2.png#pic_center)

 **因篇幅有限,资料较为敏感仅展示部分资料,添加上方即可获取👆**




**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化资料的朋友,可以点击这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值