【C语言校招面试必备笔记】

1. 产生死锁的四个条件:互斥条件,不可剥夺条件,请求与保持条件,循环等待条件
2.  Linux文件类型:普通文件,字符设备文件,目录文件,块设备文件
3. 满二叉树:除最后一层无任何子节点外,每一层上的所有结点都有两个子结点二叉树。
    完全二叉树:叶节点只能出现在最下层和次下层,并且最下面一层的结点都集中在该层最左边的若干位置的二叉树
4. 内存泄露:是一种资源泄露,是指计算机程序没有合理地管理已分配的内存,导致不再使用的内存没有及时释放。随着程序运行时间的增长,泄露的内存越积越多,可用的内存越来越少,最终无法为程序分配新的内存,进而导致程序崩溃。
5. 内存泄露是由于在程序中通过malloc或者new从堆中申请了一块空间,但是使用后并没有调用free或者delete释放。
6. 内存泄露的防范:1.用智能指针代替普通指针
                                 2.借助一些内存泄露检测工具,例如Valgrind包含的Memcheck工具
                                 3.最有效的方法是程序员养成良好的编程习惯:保证malloc和free, new和delete成对出现。
7. 递归程序潜在风险:
    ①当递归层数过深时,有可能产生栈溢出。栈溢出:在递归调用过程中,每一次递归调用都会保留现场,把当前的上下文压入函数栈,随着递归调用层数的深入,压入函数栈的内容越来越多,直到函数栈的空间用尽,而递归程序仍然没有满足返回的条件继续向更深的一层调用,就会发生栈溢出。
    ②避免栈溢出方法:使用循环代替递归。
8. memcpy 和 strcpy 函数的区别:
    ①memcpy函数是C语言中的内存拷贝函数,主要用于内存块的整体拷贝,在使用时要指定拷贝的长度,拷贝数据的类型没有限制。
    memcpy函数原型:void *memcpy(void*dest,const void*src, size_t count); 功能是将以参数src为起始地址的一段连续内存空间的count个字节拷贝到dest指向的内存空间,并返回指针dest。
     ②strcpy函数是专为字符串拷贝定义的函数,
     函数原型:char * strcpy(char * str1, char * str2),功能是将指针str2指向的字符串拷贝到指针str1指向的连续内存空间中去。在拷贝时,它不仅拷贝字符串的内容,还会拷贝字符串的结束标志'\0'。
9. #include< >和#include" "区别: 
#include<>是从编译器指定的路径开始搜索
#include" " 是先从当前的目录进行搜索,如果找不见,然后再从编译器指定的路径搜索
10. 操作系统的基本类型包括:批处理系统,分时系统,实时系统
11. 进程和线程:进程是系统进行资源分配和调度的基本单位,线程是进程内的一个执行单元进程互斥,许多进程可以共享系统资源,但很多资源一次只能供一个进程使用,这些资源被称为临界资源。
12. 栈:运行时自动分配内存,自动释放内存,不需要手工干预
      堆:①有一大块内存,各进程可以按需申请使用,使用完释放。
             ②程序需手动申请和释放内存,申请用malloc, 释放用free
13. SPI 是串行外围设备接口,是一种高速,全双工,同步的通信总线。只占用四根线,节省了芯片管脚。SPI总线定义两个及以上设备间的数据通信,提供时钟的设备叫主设备(master),接收时钟的设备叫从设备(slave)
14. 创建一个新进程的唯一方法:由某个已存在的进程调用fork函数或者vfork函数,被创建的新进程叫子进程,已存在的进程叫父进程
15. Linux常用的进程间通信机制:   
      1.管道及有名管道  2.信号 3.消息队列  4.共享内存 5.信号量  6.套接字
       注:共享内存是一种最快的进程间通信机制,共享内存段由一个进程创建,多个进程可以直接读写这一内存区,进行消息传递,不需要进行数据的拷贝,大大提高了效率
16. 套接字的三种类型:流式套接字(如TCP通信),数据报套接字(如UDP通信),原始套接字
17. HTTP :超文本传输协议,工作在应用层,负责服务器与浏览器之间的通信,是一个简单的请求-响应协议,它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应
18. SMTP :简单邮件传输协议,提供可靠的传输。
19. C语言中局部变量存在栈里,全局变量存在静态存储区,动态申请数据存在于堆中
20. 对于一个频繁使用的短小函数,C语言中用宏定义,C++中用inline内联函数。
21. 顺序表和链表的区别:
      顺序表存储位置值相邻连续的,可以随机访问的一种数据结构,一个顺序表在使用前必须指定其长度,一旦分配内存,则在使用中不可以动态的更改。优点:访问数据比较方便,可以随机访问表中的任何一个数据 。(顺序表中的数据元素无论从逻辑结构还是物理结构上看都是连续的,例如数组)
      链表:是通过指针来描述元素关系的一种数据结构,它可以是物理地址不连续的物理空间,不能随机访问链表元素,必须从表头开始,一步一步搜索元素。优点:对于数组,可以动态的改变数据的长度,分配物理空间。
22. 八种数据类型:32位系统所占字节数:byte(1),char(1),bool(1),short(2),int(4),long(4),float(4),double(8)
23. OSI七层模型:物理层,数据链路层,会话层,表示层,网络层,传输层,应用层TCP/IP四层模型:网络层,传输层,应用层,网络接口层
24. Makefile:是用来管理工程的,批处理操作工具。makefile 工作原理:当我们执行 make XXX 时,makefile 会自动执行XXX这个目标下面的命令
25. socket套接字网络编程:socket是一种特殊的IO接口,也是一种文件描述符,也是一种常用的进程之间通信机制,不仅能实现不同进程之间的通信,而且能够在不同主机的进程之间进行通信。

【未完待续】

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值