备战嵌入式软件工程师技术面试day1

学习目标:

进程线程篇:

复习线程和进程的基本概念;

复习多线程与多进程的优缺点;

复习进程和线程的使用场景;

复习多进程和多线程之间同步(通信)的方法;

进程的空间模型,状态转换图,以及阻塞和就绪的时机;

父子进程间的关系以及区别。

C/C++篇:

什么是面向对象思想?什么是面向过程思想?

对象的三大特性,以及它们的概念。

多态如何实现?

const和static的区别?const char*p和char* const p的区别?

为什么会产生内存泄露?如何预防内存泄露?

网络编程篇:

TCP、UDP的区别?

TCP的三次对话,三/四次握手的实现过程?

TCP、UDP的优缺点?TCP UDP适用场景?


学习内容:

线程和进程的基本概念:

进程是并发执行的过程中分配和管理资源的基本单位,是一个动态的概念。它是计算机系统资源的基本单位。线程是一个执行单元,是一个进程内科调度实体(KSE),是比进程更小的独立运行的基本单元。线程通常被称为轻量级进程。

多线程与多进程的优缺点:

多线程的优点:

无需跨进程边界;

程序逻辑清晰和控制方式简单;

所有线程可以直接共享内存和变量;

线程方式消耗的总资源比进程方式好。

缺点:

每个线程与主程序共用地址空间,且受到2GB地址内存空间的大小限制;

线程之间的同步和加锁比较繁琐;

一个线程的崩溃可能会影响到整个程序的稳定性;

限制CPU的性能提高,不同的操作系统中线程的数量有限定;

线程能够提高的总资源有限,而且线程一多了之后,线程本身的调度也是一个麻烦事,需要消耗较多的CPU。

多进程优点:

进程间相互独立,不影响主程序的稳定性,子进程崩溃没关系;

通过增加CPU可以扩充性能;

可以尽量减少加锁/解锁的影响,极大提高性能。

子进程都有2GB地址空间和相关资源,总体能够达到的性能上限非常大

缺点:

逻辑控制复杂,需要和主程序交互;

需要跨进程边界,不适合高并发的工作量,适合小数据量的传送,密集运算;

多进程调度开销比较大。

进程和线程的使用场景

多线程应用场景:

线程间有数据共享,并且数据是需要修改的;

有优先级任务处理;

单任务并行计算,

人机交互的应用,键盘鼠标的输入立即响应。

多进程的使用场景:比如Chrome浏览器采用多进程的方式,可以避免因为一个网页的崩溃导致整个浏览器的崩溃。

总结:

频繁创建和销毁大优先用线程,大量计算的也优先使用线程,强相关用线程,弱相关用进程。

多进程和多线程之间同步(通信)的方法

首先了解的进程间的通信方式主要有:管道,信号量,消息队列,信号,共享内存,套接字。

管道:一种半双工的通信方式,数据只能单向流动。

管道又分为:有名管道和无名管道。

有名管道:它不限制于父子进程间的通信,适用于不同的进程之间的通信。

无名管道:只能限制在父子进程间的通信,不适用不同进程间的通信。

信号量:是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也来访该资源。因此,主要作为进程间以及进程内不同线程之间的同步手段。

消息队列:消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少,管道只能承载无格式字节流以及缓冲区大小受限等缺点。

信号:一种比较复杂的通信方式,用于通知接收某个事件已经发生。

共享内存:就是映射一段能被其他进程访问的内存,因为是进程创建的,所以可以多个进程访问。共享内存是最快的IPC方式,它是针对其他进程间的通信方式运行效率低而专门设计的,。往往与信号量配合使用,来实现进程间的同步和通信。

套接字:套接口也是一种进程间的通信机制,与其他通信机制不同的是,它可以用于不同进程之间的进程通信。

线程间通信:

互斥锁: 提供了以排他方式防止数据结构被并发修改的方法。
读写锁允许多个线程同时读共享数据,而对写操作是互斥的。


条件变量:可以以原子的方式阻塞进程,直到某个特定条件为真为止。对条件的测试是在互斥锁的保。护下进行的。条件变量始终与互斥锁一起使用。


信号量机制(Semaphore):包括无名线程信号量和命名线程信号量。

进程的空间模型,状态转换图,以及阻塞和就绪的时机:

1.内核区:用户代码不可见区,存放页表。

2.用户区:

代码段:只可读,不可写,程序代码段。

数据区:保存全局变量,静态变量的区域。

堆区:动态内存,通过malloc,new申请的内存空间,由系统自己释放。

文件映射区:通过mmap系统调用,如动态库,共享内存等映射物理空间的内存区域。可以单独释放,不会产生内存碎片。

栈区:用户维护函数调用的上下问空间,一般默认大小为8M

状态转换图:

当执行态等待事件时会进入阻塞状态,当阻塞态事件发生时进入就绪态。

父进程、子进程的关系以及区别:

子进程时父进程的复制品,区别在于子进程有单独的ID,fork的返回值,

不可以继承父进程设置的锁。其他的信息全盘接收。

什么是面向对象思想?什么是面向过程思想?

面向对象:是一种以对象为中心的编程思维,它是通过剖析问题分解出对象的之间的挂不行,进行调节组合来解决问题。

面向过程:是一种以过程为中心的编程思维,它通过将问题进行拆分成为一个个详细的步骤,进而用函数实现每一个步骤的调用。

对象的三大特性,以及它们的概念:

封装,继承,多态。

封装:把客观事物抽象成类,并且把自己的属性和方法让可信的类或者对象进行操作,对不可性的隐藏。

继承:它可以使用现有的类的所以功能,并在无需要重新编写原来的类的情况下,对这些功能进行扩展。

多态:一种允许父对象设置成为和更多它的子对象相等的技术,


学习时间:

  • 周一至周六晚上 10 点—晚上1点
  • 周日上午 8 点-中午 12 点

学习产出:

  • 面试笔记笔记 1 篇
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值