- 博客(26)
- 收藏
- 关注
原创 HTTP和HTTPS
HTTP协议中没有加密机制,但可以通 过和SSL安全套接层)或TLS安全层传输协议)的组合使用,加密HTTP的通信内容。属于通信加密,即在整个通信线路中加密。HTTP + 加密 + 认证 + 完整性保护 = HTTPS(HTTP Secure )
2023-10-19 20:07:42
86
原创 git管理项目
在某个目录下初始化仓库后会自动产生.git目录,该目录下工作的所有文档可使用git进行管理。3、将指定的文件提交到暂存区。2、查看文件、分支状态。
2023-10-19 20:07:20
70
原创 linux面试集
动态库 (共享库)的代码在可执行程序运行时才载入内存,在编译过程中仅简单的引用,因此代码体积比较小。. 不同的应用程序如果调用相同的库,那么在内存中只需要有一份该动态库 (共享库)的实例。. 静态库和动态库的最大区别,静态情况下,把库直接加载到程序中,而动态库链接的时候,它只是保留接口,将动态库与程序代码独立,这样就可以提高代码的可复用度,和降低程序的耦合度。的动态库,包含了file1.c、file2.c和file3.c文件中的编译后的目标代码。您可以在编译时使用该静态库来链接到您的程序中。
2023-10-09 23:49:44
70
原创 虚拟路由器项目
同一网段能够 ping 通的原因是因为它们处于相同的局域网(LAN)中,共享相同的子网掩码。当两个设备位于同一个局域网时,它们具有相同的网络前缀,可以直接通过 ARP(地址解析协议)找到对方的 MAC 地址,从而建立通信连接。现在我来解释一下这个过程:IP 地址和子网掩码:每个设备在网络中都有唯一的 IP 地址,用于标识其在网络中的位置。而子网掩码用来划分 IP 地址中的网络部分和主机部分。
2023-09-27 00:11:46
180
1
原创 C++中容器(STL)
顺序性容器就是将一组具有相同类型的元素以严格的线性形式组织起来关联式容器每一个元素都有一个键值(key),对于二元关联容器,还拥有实值(value)容器中的元素顺序不能由程序员来决定,有set(集合)和map(映射)这两大类,它们均是以RB-Tree(red-black tree,红黑树)为底层架构。
2023-09-25 09:06:27
238
原创 c语言面试大全
答:1.函数调用层次太深。函数递归调用时,系统要在栈中不断保存函数调用时的现场和产生的变量,如果递归调用太深,就会造成栈溢出,这时递归无法返回。2.动态申请空间使用之后没有释放。由于C语言中没有垃圾资源自动回收机制,因此,需要程序主动释放已经不再使用的动态地址空间。申请的动态空间使用的是堆空间,动态空间使用不会造成堆溢出。C语言没有提供数组下标越界检查,如果在程序中出现数组下标访问超出数组范围,在运行过程中可能会内存访问错误。指针保存了一个非法的地址,通过这样的指针访问所指向的地址时会产生内存访问错误。
2023-09-22 21:07:57
226
原创 网络编程知识点
特点:不可靠:它不能保证IP数据包能成功地到达它的目的地,仅提供尽力而为的传输服务无连接:IP并不维护任何关于后续数据包的状态信息。每个数据包的处理是相互独立的。IP数据包可以不按发送顺序接收IP数据包中含有发送它主机的IP地址(源地址)和接收它主机的IP地址(目的地址)TCP是一种面向连接的,可靠的传输层通信协议,流式报文功能:提供不同主机上的进程间通信特点1、建立链接->使用链接->释放链接(虚电路)2、TCP数据包中包含序号和确认序号3、对包进行排序并检错,而损坏的包可以被重传。
2023-09-16 13:54:12
100
1
原创 希尔排序(算法)
4、开始遍历,首先在第一次增量 inc 下,因为我要将每个元素都进行比较,所以我要对 i 进行 for循环 ,结束条件 i<len , 在 i 下我们要定义一个 j ,让j=i ,在进行遍历,条件是 j>=inc && key<arr[j-inc]3、定义一个 i =inc ,在定义一个 key=arr[i]希尔排序中相等数据可能会交换位置,所以希尔排序是不稳定的算法。2、先取一个增量 inc=数组长度/2。1、希尔排序就是分批次的插入排序。
2023-09-14 09:48:41
65
1
原创 插入排序(算法)
2、假设第一个数是排列好的,所以我们从第二个数开始比较,为了更好的进行数组移动,我们定义一个key来保存遍历到的值。3、定义j=i-1,每次从前一个数和arr[i]比较,直到遍历到小于key后者j<0;最好情况就是全部有序,此时只需遍历一次,最好的时间复杂度为O ( n )最坏情况全部反序,内层每次遍历已排序部分,最坏时间复杂度为O(n^2)综上,因此直接插入排序的平均时间复杂度为O(n^2)插入到比它大的数前面,所以直接插入排序是稳定的。平均的空间复杂度为:O ( 1 )思路:例如 3,4,1,7,6。
2023-09-12 20:06:32
54
原创 快速排序算法(递归)
3、然后我就开始遍历,只要我的 arr[j]<pivot 小,我就让我就交换arr[i] 和 arr[j] 的值,然后让我的 i+1 最后就会让我的左边全部是小于 pivot ,右边 是大于pivot。1、我将我的标志位指针 pivot 指向数组的最后一个元素 pivot=arr[gight]2、我在定义 i , j 2个变量,让他们都指向 arr[low]
2023-09-08 23:08:36
109
1
原创 网络编程(面试题)
服务器第一次收到客户端的 SYN 之后,就会处于 SYN_RCVD 状态,此时双方还没有完全建立其连接,服务器会把此种状态下请求连接放在一个队列里,我们把这种队列称之为半连接队列。当然还有一个全连接队列,就是已经完成三次握手,建立起连接的就会放在全连接队列中。如果队列满了就有可能会出现丢包现象。这里在补充一点关于SYN-ACK 重传次数的问题: 服务器发送完SYN-ACK包,如果未收到客户确认包,服务器进行首次重传,等待一段时间仍未收到客户确认包,进行第二次重传。
2023-09-08 00:27:26
106
1
原创 网络编程(linux)
原始套接字(SOCK_RAW)1、一种不同于SOCK_STREAM(TCP)、SOCK_DGRAM(UDP)的套接字,它实现于系统核心2、可以接收本机网卡(数据链路层)上所有的数据帧(数据包),对于监听网络流量和分析网络数据很有作用3、开发人员可发送自己组装的数据包到网络上4、广泛应用于高级网络编程5、网络专家、黑客通常会用此来编写奇特的网络程序。
2023-09-07 22:56:04
56
原创 链表找环(算法)
给定一个链表,返回链表开始入环的第一个节点。从链表的头节点开始沿着next指针进入环的第一个节点为环的入口节点。如果链表无环,则返回null。为了表示给定链表中的环,我们使用整数pos来表示链表尾连接到链表中的位置(索引从 0 开始)。如果pos是-1,则在该链表中没有环。注意,pos仅仅是用于标识环的情况,并不会作为参数传递到函数中。不允许修改给定的链表。示例 1:返回索引为 1 的链表节点链表中有一个环,其尾部连接到第二个节点。
2023-09-07 21:18:09
146
原创 c++中类和对象
因为在C++中new和delete符号是可以重载的,我们可以重新实现new的实现代码,可以让其分配的内存位置在静态存储区等。malloc:使用malloc分配内存后,发现内存不够用,那我们可以通过realloc函数来扩张内存大小,realloc会先判断当前申请的内存后面是否还有足够的内存空间进行扩张,如果有足够的空间,那么就会往后面继续申请空间,并返回原来的地址指针;new操作符内存分配成功时,返回的是对象类型的指针,类型严格与对象匹配,无须进行类型转换,故new是符合类型安全性的操作符。
2023-09-07 19:48:10
42
原创 C语言(笔试自查)
sizeof函数是在编译时计算数据类型或变量占用的内存空间大小,它只对数据类型和变量进行静态分析,在编译阶段就已经确定了。静态区是在程序运行时分配的存储区域,sizeof函数无法获取动态分配的内存空间大小。数组名是一个指针常量,char *const s,指针的指向是不可以修改的,指针指向的内容是可以修改的。字符串"abcdefg"代表一个地址,不能改变一个指针的指向,所以c选项错误。1、以下程序段中,不能正确赋字符串(编译时系统会提示错误)的是( )则i和j的值分别是1和0。请问这句话是正确的吗?
2023-09-07 19:47:34
128
原创 算法一 (链表的排序,倒序,合并)
思路:采用顺序插入思想,先定义指针*p,*q,*r;先让p=head->next->next,在断开head->next-next=NULL,此时,我们只需要遍历p后面元素,先用q保存p即q=p,然后p=p->next,后移动,让r=head,然后比较r->next->data的值和此时q->data的大小,直到p遍历完,此时就排序完成。
2023-09-07 19:46:59
91
原创 系统编程(面试题)
(concurrency):指在同一时刻只能有一条指令执行,但多个进程指令被快速的轮换执行,使得在宏观上具有多个进程同时执行的效果,但在微观上并不是同时执行的,只是把时间分成若干段,使多个进程快速交替的执行。Linux中有一个结构体task_sturct专门用来控制进程叫做进程描述符,在它的里面存放了各种关于进程的信息,其中有一个指针,源码中给出的定义为:struct file_struct *file ,它指向一个file_struct结构体,即文件描述符表,每个进程都有一个自己的文件描述符表。
2023-09-07 19:46:19
68
原创 嵌入式面试(C++自查)
1、内联函数是在编译时展开,而宏在预编译时展开;在编译的时候,内联函数直接被嵌入到目标代码中去,而宏只是一个简单的文本替换。2、内联函数可以进行诸如类型安全检查、语句是否正确等编译功能,宏不具有这样的功能;宏不是函数,而inline是函数。3、宏在定义时要小心处理宏参数,一般用括号括起来,否则容易出现二义性。而内联函数不会出现二义性。4、inline有点类似于宏定义,但是它和宏定义不同的是,宏定义只是简单的文本替换,是在预编译阶段进行的。而inline的引入正是为了取消这种复杂的宏定义的。
2023-09-05 00:22:41
120
原创 Linux编程(线程)
线程:进程内的线程共享进程的资源,线程是CPU调度的最小单位,如果线程所在的进程结束,线程也结束进程:是系统分配资源的最小单位,一个进程可以有多个线程,至少有一个主线程。
2023-08-15 23:25:42
46
1
原创 c++笔试题(自我纠查)
参考答案:AD 浮点数和位运算:所有的位运算都不能直接操作浮点数,这就是A和D错的原因,但是,我们可以间接对浮点数进行位运算,例如,将float数据,取地址(&)强行转化为整型(int等)指针后,再取值(*)后赋值给整型变量(int等),然后就能对该变量进行位运算了。语句“MyClass *p[5]”定义了5个指向MyClass对象的指针变量,分别为*p[0],*p[1],*p[2],*p[3],*p[4],但定义指针并没有实例化对象,所以不调用构造函数。即结构体中的成员变量的地址必须是4的整数倍。
2023-08-12 08:53:24
497
1
原创 反转链表(力扣)
定义 *p=NULL;*q=head,我们在定义一个临时的结构体指针*temp用来储存q的后序,因为当q指向前一个节点,如果不储存就会找不到后面的节点。在遍历链表的时候将指向反转,例如让1的next指向NULL,让2的next指向1,这样就实现字符串的反转。
2023-07-18 20:51:14
47
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人