一、计算机网络

1.网络体系结构分几层

(1) OSI的七层协议模型

OSI七层协议分别是:应用层(Application)、表示层(Presentation)、会话层(Session)、运输层(Transport)、网络层(Network)、数据链路层(Data Link)、物理层(Physical)

(2)TCP/IP四层协议模型

TCP/IP四层协议分别为:应用层、传输层、网络层、链路层

(3)五层协议模型

五层协议模型分别是:应用层、传输层、网络层、数据链路层、物理层

2.TCP协议与UDP协议的区别

1、TCP是面向连接的,而UDP是面向无连接;

2、对系统资源的要求(TCP较多,UDP少);

3、UDP程序结构较简单;

4、TCP面向字节流模式与UDP是面向数据报模式 ;

5、TCP保证数据正确性,UDP可能丢包,TCP是可靠的传输;

6、TCP保证数据顺序,UDP不保证。

3.IP地址分类有哪些?

IP地址分为五大类:A类、B类、C类、D类、E类;前三类A、B、C类为Internet NIC在全球范围内统一分配,D、E类为特殊地址。

类别   最大网络数   IP地址范围   单个网段最大主机数   私有IP地址范围


A   126(2^7-2)   1.0.0.1-127.255.255.254   16777214   10.0.0.0-10.255.255.255


B   16384(2^14)   128.0.0.1-191.255.255.254   65534   172.16.0.0-172.31.255.255


C   2097152(2^21)   192.0.0.1-22   3.255.255.254   254   192.168.0.0-192.168.255.255

D类IP地址第一个字节以"1110"开始,它是专门保留的地址,又叫做多播地址,即组播地址。在以太网中,多播地址命名了一组应该在这个网络中应用接收到一个分组的站点。多播地址的最高位必须是“1110”,范围从224.0.0.0到239.255.255.255。

E类IP地址是以“1111”开始,他的第一字节的范围是240~255,为将来使用保留。其中240.0.0.0~255.255.255.254作为保留地址,255.255.255.255作为广播地址。

4.三次握手的过程

所谓三次握手,即建立TCP连接,语言客户端与服务器端发送三次包的过程来确认连接的建立。

(1)第一次握手,客户端Client将标志位SYN置1,seq序号随机产生一个数值J,将syn包发送给服务器端Server,进入SYN_SENT状态。

(2)第二次握手,服务器接收到客户端的SYN=1即知道客户端需要建立连接,将SYN和ACK都置为1,ack=J+1,seq序号随机产生K。然后打包发送给客户端,进入SYN_RCVD状态。

(3)第三次握手,客户端接收到服务器端的确认信息后,检查ack是否为J+1,ACK是否为1。如果正确,则将ACK置为1,ack置位K+1,打包发送给服务器端。服务器接收到后,确认ACK和ack正确后,服务器与客户端即建立连接。

二、数据结构

1.数据结构有哪些算法?

基本操作:栈,队列,链表,树。

排序算法:快速排序,堆排序,归并排序,简单排序(冒泡排序,插入排序,选择排序)

搜索算法:二分搜索算法(已排序),深度优先,广度有限。以及使用Hash表,剪枝进行优化。

基本算法的思想应该有:1、回溯2、递归3、贪心4、动态规划5、分治

2.快排怎样实现的(引用自“李小白~”)

void Quick_Sort(int *arr, int begin, int end){
    if(begin > end)
        return;
    int tmp = arr[begin];
    int i = begin;
    int j = end;
    while(i != j){
        while(arr[j] >= tmp && j > i)
            j--;
        while(arr[i] <= tmp && j > i)
            i++;
        if(j > i){
            int t = arr[i];
            arr[i] = arr[j];
            arr[j] = t;
        }
    }
    arr[begin] = arr[i];
    arr[i] = tmp;
    Quick_Sort(arr, begin, i-1);
    Quick_Sort(arr, i+1, end);
}

3.栈和队列的区别?

队列和栈是两种重要的线性结构,从数据结构看,也是操作受限的线性表。

队列是一种先进先出(FIFO)的的数据结构,只允许在一端进行插入操作,另一端进行删除操作。

具体应用:舞伴问题,银行排队模拟

栈是一种先进后出(FILO)的数据结构,只能在一端(栈顶)进行插入删除操作。

具体应用:递归,数值转换,四则运算表达式求值,括号匹配问题

三、C语言相关知识点

1.联合体与结构体区别

结构体struct:各成员各自拥有自己的内存,各自使用互不影响。结构体内遵循内存对齐原则,一个struct变量的总长度等于各成员长度之和。

联合体union:各成员共用一块内存空间,并且同时只有一个成员拥有使用权,也就是读写权,各变量共同拥有一个首地址。因而,联合体比结构体更节约内存。一个union变量的总长度至少能容纳最大的成员变量,而且要满足是所有成员变量类型大小的整数倍。

2.static定义的函数与普通函数差异

当使用static声明的函数,它的使用权限仅限于当前源文件当中,不能被除当前源文件以外的其他代码文件所调用。而普通函数默认是extern 的,可以被其他源文件所调用。

优点:其他源文件可以定义相同函数名的函数,而不会发生冲突。静态函数不会被其他源文件所调用。

3.动态地址如何实现?

C语言的地址分配可以使用malloc()实现,malloc会向堆中申请一块内存块,若申请成功则返回该块开头的指针,否则返回空指针NULL;因为返回值为void *,需要强制转换(int *)为我们需要的类型。如果申请的size大小为0,这是未定义的,可能为空也可能不为空,取决于编译器。

int *p = NULL;

int n = 50;//此处n可以改成由用户输入任意数字

p = (int *)malloc(sizeof(int)*n);

if(p == NULL)

return;

使用malloc申请的地址使用完之后需要进行释放,如果不手动释放则会在程序执行完之后才释放地址,可能会导致内存泄露,所以未使用的地址需要手动释放

free(p);

4.函数指针如何实现

函数指针:在程序中定义了一个函数,编译时则这个函数将会存放在一块连续的内存空间中,函数名指向了该空间的首地址,定义一个指针变量存放该地址即函数指针。

函数指针定义如下

函数返回值类型 (* 指针变量名) (函数参数列表);

如何使用函数指针调用函数?举例说明一下

int max(int, int);//声明函数

int (*p)(int,int);//定义函数指针

p = max;//将函数地址赋值给函数指针p

C语言嵌入式开发面试问题汇总相关推荐

  1. 【☠️️社死现场の老板来了☠️️】小伙,搞C语言嵌入式开发这么久了,还不知道u8、u16、u32、s8、s16、s32是什么意思啊?

    老板来了: 糖糖小伙,你搞C语言嵌入式开发这么久了,我来考考你u8.u16.u32.s8.s16.s32是什么意思啊?你要是回答的让我满意了,给你升职加薪,从此走上人生巅峰呦~ 报告老板: 作为C语言 ...

  2. 2021秋招嵌入式笔试面试题目汇总

    ​本系列按类别对题目进行分类整理,这样有利于大家对嵌入式的笔试面试考察框架有一个完整的理解. 欢迎关注公众号<嵌入式Linux系统开发>,定期分享硬件.单片机.嵌入式Linux技术文章,支 ...

  3. 嵌入式开发人员-经历汇总

    目录 1.迷茫与前行 2.嵌入式到底该怎么学 2.1 单片机开发 2.2 Linux应用开发 3.嵌入式技术学习路线分享 4.单片机实习经历 2021年秋招记录 怀科同学 申明本文旨在为嵌入式工作提供 ...

  4. c语言嵌入式开发单片机,嵌入式开发|单片机基础

    嵌入式开发它是一个综合的技能学习,既要去学习基本的Linux编程,又要学习物理机的操作使用,要想学习嵌入式的开发,在前面的文章中已经是跟大家说过了,嵌入式开发的学习需要掌握的基础课程还是比较多的,单片 ...

  5. 牛客网嵌入式开发面试集合(更新中....)

    文章目录 1. CVTE 嵌入式软件开发 一面面经 8.13(1h20m) 1.1 Socket中UDP/TCP相关的封装函数 1.2 三次握手和四次挥手 1.3 malloc和new的区别 1.4 ...

  6. c语言 嵌入式开发环境搭建,嵌入式C语言环境的搭建

    IMPORT |Image$$RO$$Limit| IMPORT |Image$$RW$$Base| IMPORT |Image$$ZI$$Base| IMPORT |Image$$ZI$$Limit ...

  7. c语言嵌入式开发键盘,C语言嵌入式系统编程修炼之键盘操作篇

    功能键的问题在于,用户界面并非固定的,用户功能键的选择将使屏幕画面处于不同的显示状态下. 处理功能键 功能键的问题在于,用户界面并非固定的,用户功能键的选择将使屏幕画面处于不同的显示状态下.例如,主画 ...

  8. 嵌入式开发 面试问答

    1. 听说你学过linux,那都做过哪些应用? 2. 看你的简历上写着接触过kernel,请问利用它开发过什么类型的驱动? 3. kernel2.6之后,设备号的管理引入了主次设备的概念,请你说说主设 ...

  9. 运维开发面试常见问题汇总(一直在更新)

    1.我看你做过LVS,说一下你对LVS的理解? 2 DR模式和NAT模式的区别.优缺点 NAT模式要求: 1.LVS服务器需要有不同的网段. 2.真实服务器的网关必须设置为LVS的ip地址. 优点: ...

最新文章

  1. windows下的mongodb安装与配置
  2. S/4HANA生产订单增强WORKORDER_UPDATE方法BEFORE_UPDATE参数分析
  3. 将Datatable一分为二
  4. java字节码常量池_java字节码常量池处理说明
  5. 计算机硬盘read,为你解答电脑开机提示a disk read error occurred怎么办
  6. 【Visual C++】游戏开发笔记四十 浅墨DirectX教程之八 绘制真实质感的三维世界:光照与材质专场...
  7. fopen_s不接受两个参数_如何利用SPC来管理制造过程,不懂SPC还敢混“质”场?
  8. 我今年挣了......
  9. gentoo 安装mongodb
  10. vs2015社区版不支持installshield
  11. c#获取本地ip地址网关子网掩码_C#--WinForm获取本机网卡的型号,IP地址,子网掩码和网关-阿里云开发者社区...
  12. 【less-11】基于SQLI的POST字符型SQL注入
  13. LINUX使用sig文件验证文件的签名
  14. VS2017+海康威视工业相机调用查找不到设备的问题
  15. 《雍正皇帝·九王夺嫡》物质文化专有词泰译研究(二)
  16. 小猿圈之初识python基础知识
  17. html5网页制作实训日志,网页制作实训日志X.doc
  18. 一则晦涩难懂的码农段子 | 每日趣闻
  19. 如何批量替换文件名称中的指定字符?
  20. 仿生多足机器人的发展和落地

热门文章

  1. 弹钢琴的游戏大全,弹钢琴的游戏哪个好?
  2. 工作效率高的 Linux 管理员都会的 10 个关键技巧
  3. MapReduce实验——英语单词频次统计实验
  4. HTML学习10 逻辑运算符 if语句 for循环语句 函数
  5. EventLogTags.logtags简单使用(EventLog.writeEvent)
  6. linux 发行版代号
  7. 濮阳计算机技术学校啥时开学,2021年濮阳小学中学暑假放假时间安排,开学时间什么时候...
  8. FPGA极易入门教程----汇总篇(直达链接)
  9. PS将灰蒙蒙的风景照处理得清晰鲜艳
  10. HuffmanTree和HuffmanCode