1.多线程同步的方式
对于多线程程序来说,同步是指在一定的时间内只允许某一个线程来访问某个资源。而在此时间内,不允许其他的线程访问该资源。可以通过互斥锁(Mutex)、条件变量(condition variable)、读写锁(reader-writer lock)、信号量(semaphore)来同步资源。
2.TCP的连接过程
第一次握手:客户端发送syn包(seq=x)到服务器,并进入SYN_SEND状态,等待服务器确认;第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(seq=y),即SYN+ACK包,此时服务器进入SYN_RECV状态;第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
三次握手过程如下:client是发送端,sever是服务端。
发送端->接收端:发送标有SYN(建立连接)的数据包。 客户端进入发送状态
接收端->发送端:发送标有SYN,ACK(应答)的数据包 。 服务端进入接收状态。
发送端->接收端:发送标有ACK的数据包。客户端和服务端进入通信状态ESTABLISHED。
3.结构体和联合体的区别

//example
#include<stdio.h>
union var{
long int l;
int i;
};
main(){
union var v;
v.l = 5;
printf("v.l is %d\n",v.i);
v.i = 6;
printf("now v.l is %ld! the address is %p\n",v.l,&v.l);
printf("now v.i is %d! the address is %p\n",v.i,&v.i);
}
结果:
v.l is 5
now v.l is 6! the address is 0xbfad1e2c
now v.i is 6! the address is 0xbfad1e2c
4.字节对齐 #pragma pack(1)

struct stc
{
char one;
short two;
char three;
int four;
} cc;
#pragma pack (1)
struct stcd
{
char one;
short two;
char three;
int four;
} dd;
sizeof(cc) = 12
sizeof(dd) = 8
5.中断的运行方式?

6.中断向量表存储的位置

7.单片机的启动方式


8.IIC上拉电阻的作用
主要原因就是IIC芯片的SDA和SCL的引脚是开漏输出,就是只有一个NMOS管, 芯片SDA和SCL的引脚输出MOS管导通,IIC信号线电平为低电平。当MOS管关闭,如果没有上拉电阻,IIC信号线是处于一个高阻状态,电平是未知的,开漏输出是没有高电平的输出能力的。 所以加上上拉电阻后,当芯片SDA和SCL的引脚输出MOS管关闭,IIC信号线上的电平就是一个确切的高电平。确保数据的稳定。IIC最重要的就是时序,如果时序存在问题的话,会导致数据传输存在问题。
9.全局变量存储位置、静态变量存储位置
全局变量存储在静态存储区,也就是程序的全局数据区或者称为全局内存。 static 修饰局部变量时,该变量称为静态局部变量,静态局部变量的存储空间在静态存储区。
10.堆、栈、列表、哈希表的区别?
堆:用于动态内存分配,生命周期由程序员控制,分配和释放较慢。
栈:用于函数调用和局部变量管理,自动分配和释放,速度快。
列表:有序集合的数据结构,可以是数组列表或链表,支持不同的操作性能。
哈希表:用于快速的键值对存储和查找,依赖于哈希函数和冲突处理策略,具有高效的平均时间复杂度。
11.STM32内部结构

此图参考其他博客。
12.推挽输出和开漏输出的区别?
推挽输出(Push-Pull Output),故名思意能输出两种电平,一种是推(拉电流,输出高电平),一种是挽(灌电流,输出低电平)。推挽输出可以使用一对开关来实现,在芯片中一般使用晶体管 / 场效应管。

13.Linux指令提问



7633

被折叠的 条评论
为什么被折叠?



