一、计算机网络

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. java调用sap接口_(二)通过JAVA调用SAP接口 (增加一二级参数)
  2. ASP.NET控件开发基础5
  3. 电话光端机和PDH光端机的区别
  4. linux运行core控制台程序,VisualStudioCode创建的asp.net core控制台程序部署到linux
  5. 【算法】剑指 Offer 35. 复杂链表的复制 【重刷】
  6. python functools模块方法
  7. Python的可变长度参数*和**,传参序列解包,isinstance的使用
  8. Makefile 文件怎么写
  9. c语言中闰年的流程图_c语言程序设计流程图怎么画?具体有什么规范,有知道的吗...
  10. signature=c751019741e6bb1ccbac4e13ac0b26c4,James Boswell
  11. obj文件、mtl文件结构说明
  12. 数据集FFHQ和LSUN介绍
  13. 编译error: no acceptable C compiler found in $PATH
  14. 美团技术:Java中9种常见的CMS GC问题分析与解决
  15. 如何在elementUi动态表格table中翻译字典值。vue通用方案
  16. Chrome浏览器下载失败的解决方法
  17. Java获取上海期货交易所数据_上海期货交易所价格示例代码
  18. Vue SSR技术方案落地实现—构建同构应用
  19. WS2812灯珠(四)---实现全彩呼吸灯效果
  20. 炫界 (587) -(牛一邓丽君音)_邓丽君逝世25周年,追忆她的那些绝美歌声与故事

热门文章

  1. 【基于机器学习的垃圾分类监控系统】
  2. 2023慕尼黑上海电子展12大科技趋势 技术为王创新为本新动力
  3. 日更 - 摄影学习第二课:手机参数相关
  4. CS162操作系统课程第二课-4个核心OS概念
  5. 迷你WIFI摄像机五个优势点不可忽略
  6. 普罗米修斯Prometheus的安装及Grafana使用
  7. Java入门第82课——StringBuilder的append方法
  8. 检验科LIS系统功能模块简介
  9. 亚马逊跨境电商无货源模式,圆了你跨境的创业梦!
  10. Matplotlib 将图片保存为 .tiff 格式