c++程序并发的各种实现

前言

这几天一直在面试,经常问到线程进程区别,怎么用,什么的。我虽然会教科书式回答,但在c++中没有用过,心里总是虚的。

于是下定决心,好好学习下多进程-及其进程通信方式、多线程-及其线程间通信方式,啃下这个骨头。

另外挺感谢4.11百度第一个面试官的,脑袋短路,手撕本能写出来的,太紧张了太紧张了。
最后虽然答的不好还是放我过了。。。哎 不知道什么时候能改掉自己有些特定场景紧张的坏毛病。

Read more

VS code C++头文件全局配置

为什么我随便编一个简单的C/C++都要创建项目c_cpp_properties.json

不创建就找不着一些头文件,真的挺烦的。
好在支持修改默认设置了:
https://code.visualstudio.com/docs/cpp/customize-default-settings-cpp

因此打开默认设置,加入你使用的头文件目录即可,我用mingw的,所以是:

1
2
3
4
5
"C_Cpp.default.includePath": [
"C:/Program Files (x86)/mingw64/include"
],
"C_Cpp.default.compilerPath": "C:/Program Files (x86)/mingw64/bin/g++.exe",
"C_Cpp.default.intelliSenseMode": "gcc-x64",

其实上面的includePath不需要设置, VS code 会根据compilerPath推断库文件的路径。

至此就舒服了,配合code runner插件,点一下即可运行,还配置个鬼的task和c_cpp_properties。

C实现C++类(封装、继承、多态)

定义一个结构体

  1. 封装: 使用函数指针封装属性、方法到结构体中
  2. 继承: 新结构体,包含”父”结构体或指向”父”结构体
  3. 多态: (1) C++语言允许函数重载和运算符重载。 (2) C++语言通过定义虚函数来支持动态联编,动态联编是多态性的一个重要的特征。

简单实现

Read more

DFS和BFS简单总结

总结

这两个是图的基本算法,很简单。

转载一下别人的总结
版权声明:本文为CSDN博主「EbowTang」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/EbowTang/article/details/44263635

DFS的思想是一条路走到底,走不到底就回到上个状态点。

Read more

dataStructure->Stack

数据结构之堆栈

1
2
3
4
5
6
7
8
9
10
11
12
typedef struct dataStruct
{
elemType *LinkList;
elemType *Stack;
elemType *Queue;
elemType *String;
elemType *Array;
elemType *Tree;
elemType *Graph;
elemType *Indexing;
elemType *Sorting;
}* dataStructure;

堆栈定义

堆栈我在早年学习微机原理的时候就已接触过。在对寄存器操作的时候,为了避免某些指令对寄存器中原先的值产生影响,在执行指令前,要进行入栈push操作,会将某些寄存器的值push到内存中,执行指令之后,执行出栈pop操作,主要作用就是现场保护与现场恢复。

Read more

dataStructure->LinkList

数据结构之线性表

1
2
3
4
5
6
7
8
9
10
11
12
typedef struct dataStruct
{
elemType *LinkList;
elemType *Stack;
elemType *Queue;
elemType *String;
elemType *Array;
elemType *Tree;
elemType *Graph;
elemType *Indexing;
elemType *Sorting;
}* dataStructure;

线性表

线性表分为顺序表和链表,链表分为单链表、双链表、循环链表(单循环链表和双循环链表)。

顺序表

1
2
3
4
5
6
7
typedef struct
{
Elemtype *elem; //数组
int length; //当前表的长度
int listsize; //表的数组容量
int incrementsize; //表增容量
} SqList;

顺序表的存储单元是连续的,也就是在内存中,表的元素顺序摆放。过于简单了,随便康康定义就行了。

链表

在存储单元之中不连续,通过指针连接起来,像链条一样故称之为链表

Read more

几种排序算法

排序算法

1 冒泡(Bubble Sort)

图解

空间复杂度 1
平均时间复杂度 n^2
最坏时间复杂度 n^2
最好时间复杂度 n
稳定性 Y

算法步骤

Read more

Linux下C语言的WAITPID函数的使用

进程与程序

进程是程序执行的过程,它是动态的。包括动态创建、调度、以及消亡。当用户在终端键入一个命令的时候,将启动一个进程。

eg:

1
vim

这个命令启动了一个vim进程,多个用户可以同时运行vim,但是程序只有一个,位于系统目录里的/usr/bin,每个用户的vim进程都是独立的。

Read more

温习一波GCC

GCC

GCC是GNU Compiler Collection的缩写,跨平台编译器集合。
支持C,C++,Java等语言。

C的编译

  1. 预处理
  2. 编译:生成汇编语言.s文件
  3. 汇编:生成目标代码.o文件
  4. 链接:生成可执行程序
Read more

用C++实现简单的ARP欺诈攻击

什么是ARP?

地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。

为什么它会很容易攻击?

地址解析协议是建立在网络中各个主机互相信任的基础上的,网络上的主机可以自主发送ARP应答消息,无论这个主机有没有REQUEST或是已经收到了REPLY,当再有REPLY来的时候,它都会记下这个REPLY中的信息,并更新自己的ARP缓存。同样,也只要是有主机发送ARP REQUEST,他就会记下这个信息,并更新自己的ARP缓存。

Read more