IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 牛客网嵌入式开发面试集合(更新中....) -> 正文阅读

[网络协议]牛客网嵌入式开发面试集合(更新中....)

文章目录


1. CVTE 嵌入式软件开发 一面面经 8.13(1h20m)

原帖地址

1.1 Socket中UDP/TCP相关的封装函数

int socket(int af, int type, int protocol);
int bind(int sock, struct sockaddr *addr, socklen_t addrlen); 
int connect(int sock, struct sockaddr *serv_addr, socklen_t addrlen);
int listen(int sock, int backlog);
int accept(int sock, struct sockaddr *addr, socklen_t *addrlen);
int close(int fd);

ssize_t read(int fd, void *buf, size_t count);
ssize_t write(int fd, const void *buf, size_t count);
ssize_t send(int sockfd, const void *buf, size_t len, int flags);
ssize_t recv(int sockfd, void *buf, size_t len, int flags);
ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,
                      const struct sockaddr *dest_addr, socklen_t addrlen);
ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,
                        struct sockaddr *src_addr, socklen_t *addrlen);
ssize_t sendmsg(int sockfd, const struct msghdr *msg, int flags);
ssize_t recvmsg(int sockfd, struct msghdr *msg, int flags);

【socket笔记】TCP、UDP通信总结

1.2 三次握手和四次挥手

两张动图-彻底明白TCP的三次握手与四次挥手

1.3 malloc和new的区别

细说new与malloc的10点区别

1.4 宏定义在什么阶段处理

宏定义是在预编译阶段展开的

1.5 全局变量、局部变量、静态变量存储在什么地方?

局部变量只在其所处的函数体中有效,因此存放在栈区。

全局变量在整个程序生命周期内都有用,因此存放在静态数据区。

静态变量与全局变量一样存放在静态数据区。

1.6 UDP/TCP区别

TCP和UDP的区别

2. 联发科武汉嵌入式软件开发一二三面面经

原帖地址

2.1 什么是系统调用

以下内容来自维基百科:

在电脑中,系统调用(英语:system call),指运行在用户空间的程序向操作系统内核请求需要更高权限运行的服务。系统调用提供用户程序与操作系统之间的接口。大多数系统交互式操作需求在内核态运行。如设备IO操作或者进程间通信。

linux在x86上的系统调用过程如下:

  1. 把系统调用的编号存入 EAX;
  2. 把函数参数存入其它通用寄存器;
  3. 触发 0x80 号中断(int 0x80)。

2.2 虚拟内存,32位机虚拟内存分布,虚拟内存怎么到物理内存(MMU)

linux内存分布杂论–(32位虚拟内存分布,高端内存; 64位虚拟内存分布,寻址方式)

【Linux】Linux的虚拟内存详解(MMU、页表结构)

2.3 为什么C++可以函数重载,C不行

为什么C++支持重载而C语言不支持重载

2.4 文件系统相关

没有具体那个问题,楼主不会,面试官跳过了

3. 华为优招 消费者BG终端芯片-嵌入式面经

原帖地址

3.1 堆和栈的区别,各自用在什么地方

知乎的一个回答

3.2 进程和线程有什么区别

面试必问——线程与进程的区别

总结一下:

  • 一个是操作系统的调度单位,一个是CPU的调度单位
  • 地址空间
  • 通信机制
  • 切换开销
  • 资源

3.3 相同进程的多个线程可以共享什么资源

共享的资源:

  • 全局变量
  • 静态变量
  • 文件等公共资源

独享的资源:

  • 寄存器

3.4 多进程或多线程同步可能会造成什么问题

以下是我的答案(可能不完善,有补充可以留言区指出):

  • 死锁
  • 活锁
  • 饥饿
  • 优先级反转
  • 护航现象

3.5 死锁和优先级反转,分别说下是如何造成的?

Linux同步机制 - 基本概念(死锁,活锁,饿死,优先级反转,护航现象)

3.6 中断和信号量的区别和各自的底层实现原理

网上没搜到合适的答案,自己总结一下:

中断是由外部中断源或者内部中断信号引发的,中断触发后,CPU会自动的到中断向量表中查询中断服务函数的地址,然后保存现场,执行中断处理函数,完成后恢复现场继续原来的工作。

信号量用于保证资源的安全使用,在一个线程或进程使用一个互斥资源时,信号量就会减一,当信号量值小与0时,请求信号量的进程或线程要被阻塞直到其他进程(线程)释放了该互斥资源。

3.7 中断向量表一般放在哪里,它有什么用?

当计算机刚启动时,首先会启动引导程序(BIOS),在BIOS中会把中断向量表存放在内存开始位置(0x00000000)。BIOS会有自己的一些默认中断处理函数,而当BIOS处理完后,会将计算机控制器转交给linux,而linux会在使用BIOS的中断向量表的同时重新设置新的中断向量表(新的地址保存在配置中的CONFIG_VECTORS_BASE),之后会完全使用新的中断向量表。

3.8 segmentation fault的原因是什么?对应的中断向量表的哪一个异常向量?

造成segment fault,产生core dump的可能原因!

总的来说就是访问了不该访问了内存地址,例如写一块只有读权限的内存。

段错误对应的异常向量网上没找到。。。

3.9 什么情况下会栈溢出?如何避免?

传递的参数太大,或者无限制的递归也可能导致栈溢出。

要避免传递大实参,改用指针,递归要设置出口。

3.10 操作系统有哪几种锁

Linux中的各种锁及其基本原理

4. 诺瓦-嵌入式一、二面经

原帖地址

4.1 C语言数组、链表、数组指针与指针数组、声明与定义

主要说一下数组指针与指针数组:

数组指针表示的是指向数组的指针,对于一维数组int a[100],其对应的数组指针为int *p = a,对于二维数组int a[100][100],对应的数组指针是int (*p)[100]

指针数组表示一个元素都是指针的数组,例如int* p[100]

4.2 结构体内存对齐

这个主要是为了CPU处理的效率提出的,意思是对于32位的处理器,如果结构体中有一个字符和整型变量,那么这个字符就需要4字节对齐,即该结构体大小为8字节。

4.3 野指针与内存泄漏

野指针通常指那些为初始化的指针或者经过free操作后的指针,这些指针通常都指向无效内存,如果使用可能会造成非法访问,内存泄漏。

4.4 判断链表是否有环,去除链表重复元素

可以试着做一下leetcode的相关题目:

Linked List Cycle

删除排序链表中的重复元素

4.5 递归的使用注意

这个我感觉主要有两点:

  • 递归的出口
  • 注意递归时候的重复运算,导致递归效率下降

4.6 Uboot如何向内核传参

uboot给内核传参详解

4.7 Uboot启动流程和作用

Uboot的作用以及启动内核的过程

4.8 socket编程细节

见 1.1

4.9 TCP稳定传输保证

主要是考三次握手和四次挥手,见1.2

4.10 IIC为什么上拉电阻

IIC为什么需要用开漏输出和上拉电阻

时间线 2021/8/20:16/30


  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-08-21 15:48:48  更:2021-08-21 15:49:23 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 20:42:00-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码