自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(80)
  • 资源 (4)
  • 问答 (1)
  • 收藏
  • 关注

原创 Linux C/C++ or 嵌入式面试之《多进程多线程编程系列》(3) 守护进程

守护进程(daemon),是一种运行在后台 的特殊进程,它独立于控制终端 ,并周期性地执行某项任务或等待处理某些发生的事件。守护进程是个特殊的孤儿进程,这种进程脱离终端,为什么要脱离终端呢?之所以脱离于终端是为了避免进程被任何终端所产生的信息所打断,其在执行过程中的信息也不在任何终端上显示。由于在 Linux 中,每一个系统与用户进行交流的界面称为终端,每一个从此终端开始运行的进程都会依附于这个终端,这个终端就称为这些进程的控制终端,当控制终端被关闭时,相应的进程都会自动关闭。但是守护进程却能突破这种限制

2020-08-17 09:21:18 3729 4

原创 Linux C/C++ or 嵌入式面试之《多进程多线程编程系列》(4) 进程同步和通信的方式有哪些?

🥇 作者简介: 热衷于知识探索和分享的技术博主。💂 csdn主页::【✍️ 微信公众号:【🎉精彩专栏:🎓 【​ 🧡 【​ 📚【​ 🌎【✍️ 【​ …💂关于作者: 曾就职于国内知名安防上市公司,现就职于国内知名AMR机器人公司,担任高级系统软件工程师。2020年至今保持CSDN博客专家,CSDN C/C++领域优质创作者头衔。全网5万+粉丝。十载寒冰,难凉热血;多年过去,历经变迁,物是人非。然而,对于技术的探索和追求从未停歇。💪坚持创作,热衷分享,初心未改,继往开来!

2020-08-16 16:27:48 11237 3

原创 Linux C/C++ or 嵌入式面试之《多进程多线程编程系列》(15) 内核空间、用户空间、内核态、用户态

为了保证用户进程不能直接操作内核,保证内核安全,操作系统将虚拟空间划分为两部分,一部分是内核空间,一部分是用户空间。针对Linux操作系统,将最高的1G字节(从虚拟地址0xC0000000到0xFFFFFFFF)供内核使用,称为内核空间,而较低的3G字节(从虚拟地址0x00000000到0xBFFFFFFF),供各个进程使用,称为用户空间。对于校招而言,该问题提问几率较大,因为是基础性问题,考察对内核空间和用户空间的理解,进程的内核态和用户态等概念。),进程切换时,用户空间切换,内核空间不变。

2020-08-16 16:18:39 15241 2

原创 Linux C/C++ or 嵌入式面试之《多进程多线程编程系列》(13) 请你描述下进程虚拟内存空间布局

对于这个问题,面试官可能拿出一张白纸,让你尝试画出linux下进程的虚拟内存空间布局,然后=再让你简述下每个分区的作用,可能会挑几个重点分区,例如堆区、栈区来进行深入展开,考察你对堆栈的理解等等。文章目录1 内核空间2 栈(stack)3 内存映射段(mmap)4 堆(heap)5 BSS段6 数据段(Data)7 代码段(text)8 保留区问题提问在多任务操作系统中,每个进程都运行在属于自己的内存沙盘中。这个沙盘就是虚拟地址空间(Virtual Address Space),在32位模式下它是一个4

2020-08-16 16:00:34 2139 2

原创 Linux C/C++ or 嵌入式面试之《多进程多线程编程系列》(1) 进程和线程的基本概念与区别

进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。线程(thread)是操作系统能够进行调度的最小单位。它被包含在进程之中,一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。

2020-08-15 12:59:17 3381 2

原创 Linux C/C++ or 嵌入式面试之《网络编程系列》(4) tcp四次断开若干问题

首先A向B发送一个FIN报文段,报文段首部FIN=1,序列号seq=u(u为最后传送的数据的序列号加1,因为tcp规定,fin包消耗一个序列号,虽然没有发送数据),然后A进入FIN-WAIT-1(终止等待1)状态。(2)B收到释放连接的报文段后即发出确认报文段,报文首部ACK=1,ack=u+1,seq=v(v等于B前面传送过的数据的序列号加1),然后B进入CLOSE-WAIT(关闭等待)状态。(3)当A收到B的确认报文后,就进入FIN-WAIT-2(终止等待2)状态,等待B发出的连接释放报文段。

2020-08-15 12:52:33 14891 2

原创 《C++ STL教程》(25) 关联式容器面试问题汇总

理解每种关联式容器的特性,以及与序列式容器的区别,每种关联式容器间的区别,这些是面试官关心的问题,不用去死记接口,面试一般不会让你背接口。

2020-08-29 22:14:54 859 2

原创 Linux C/C++ or 嵌入式面试之《C++ STL系列》(1) 序列式容器面试问题汇总

C++中vector和list的区别vector和数组类似,拥有一段连续的内存空间。vector申请的是一段连续的内存,当插入新的元素内存不够时,通常以2倍重新申请更大的一块内存,将原来的元素拷贝过去,释放旧空间。因为内存空间是连续的,所以在进行插入和删除操作时,会造成内存块的拷贝,时间复杂度为o(n)。list是由双向链表实现的,因此内存空间是不连续的。只能通过指针访问数据,所以list的随机存取非常没有效率,时间复杂度为o(n); 但由于链表的特点,能高效地进行插入和删除。vector拥有一段连续

2020-08-29 15:06:35 2396 2

原创 Linux C/C++ or 嵌入式面试之《C/C++笔面试系列》(15) 几种常用的排序算法C实现

文章目录1、冒泡排序法2、选择排序3、插入排序4、快速排序(快排)5、归并排序1、冒泡排序法算法思想让数组中相邻两个数字进行比较,如果是升序排列,如果左边的大于右边,则交换,相当于将较大的数往后挪。第一趟有n个数据,需要比较n-1次,可以将最大的数挪到数组最末端,第二趟只有n-1个数据了,只需要比较n-2次…每一趟可以决出一个数,n个数只要决出n-1个数的位置,剩下一个数也就定了,所以最多需要比较n-1趟。总共需要比较1+ 2 + … + n-1 = n(n-1)/2,所以算法复杂度是O(n^2

2020-08-28 23:39:23 1313 3

原创 Linux C/C++ or 嵌入式面试之《C/C++笔面试系列》(5) C++ this、const关键字面试汇总

当一个成员函数被调用时,自动向它传递一个隐含的参数,该参数是一个指向这个成员函数所在的对象的指针。成员函数函数体内所有对类成员的访问,都会被转化为“this->类成员”的方式。指针所指向的对象进行修改(即不能对这种对象的数据成员进行赋值操作);1、const成员函数为何不能对成员变量进行修改,背后的机制是啥?C++里const保留了C语言的一些用法,但也做了较多的扩展。指针是一个隐含于每一个非static成员函数中的特殊指针,指针赋值,也就是不能修改this的指向;static成员函数没有this指针。

2020-08-28 19:22:43 15099 1

原创 Linux C/C++ or 嵌入式面试之《网络编程系列》(14) 几种网络服务器模型

模型1:多线程模型每来一个连接,服务器就会新建一个线程来处理该连接的读写事件。特点:1)采用阻塞式 I/O 模型读取数据;2)每个连接都需要独立的线程完成数据读取,业务处理,数据返回的完整操作。存在问题:1)当并发数较大时,需要创建大量线程来处理连接,系统资源占用较大;2)连接建立后,如果当前线程暂时没有数据可读,则线程就阻塞在 read 操作上,造成线程资源浪费。因此,为了解决这种一个线程对应一个客户端模式带来的问题,提出了采用线程池的方式,也就说创建一个固定大小的线程池,来一个客户端,

2020-08-28 16:34:20 15123 1

原创 Linux C/C++ or 嵌入式面试之《C/C++笔面试系列》(4) C语言结构体对齐、枚举、宏、联合体面试问题汇总

结构体对齐问题常常是作为笔试题出现。文章目录结构体对齐问题枚举与宏联合体和结构体区别C和C++结构体区别结构体对齐问题网上总结的几条规则都不对,根据经验判断吧。(1)按结构体最大成员对齐,(但32位机下double、long long按照4字节对齐)案例1struct A{ char a; short b; int a; };8案例2struct A{ int a; double b;};12并非16。(2)结构体嵌套嵌套的结构体会在先内部完成对齐。案例3str

2020-08-23 16:35:11 2454 3

原创 Linux C/C++ or 嵌入式面试之《C/C++笔面试系列》(14) C++常见面试题杂项汇总

文章目录1、C++函数形参传递方式有哪几种?2、重载(overload)和重写(overried,有的书也叫做“覆盖”)的区别?3、内存的分配方式有几种?4、空指针和悬垂指针的区别?5、什么是封装6、C++中的空类,默认会产生哪些成员函数7、extern "C"的作用8、9、10、1、C++函数形参传递方式有哪几种?值传递、指针传递和引用传递。2、重载(overload)和重写(overried,有的书也叫做“覆盖”)的区别?重载:是指允许存在多个同名函数,而这些函数的参数表不同(或许参数个数不同,

2020-08-23 13:21:37 2541 1

原创 Linux C/C++ or 嵌入式面试之《C/C++笔面试系列》(12) C++ 引用、常引用、引用和指针的区别、引用的作用、常引用的作用

引用的知识点好多,学崩了。文章目录引用引用和指针的区别引用的作用常应用引用引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。引用的声明方法:类型标识符 &引用名=目标变量名;  int a; int &ra=a; //定义引用ra,它是变量a的引用,即别名说明:(1)&在此不是求地址运算,而是起标识作用。(2)类型标识符是指目标变量的类型。注意事项:(1)声明引用时,必须同时对其进行初始化。(2)引用声明完毕后,相当于目标变量名有两个名

2020-08-23 11:18:04 2444 2

原创 Linux C/C++ or 嵌入式面试之《C/C++笔面试系列》(9) C风格类型转换、C++四种类型转换、C++特殊隐式类型转换

文章目录1、C的类型转换方式2、C++新增的四种类型转换3、C++独特的隐式类型转换1、C的类型转换方式首先C++兼容C的类型转换方式。(1)隐式类型转换C在以下四种类型中会进行隐式转换:算术运算符中,低类型转换为高类型(有符号转无符号,char->short->int->float->double)赋值表达式中,右边的值自动隐式转换为左边变量的类型,并赋值函数调用参数传递,系统隐式将实参转换为形参的值函数有返回值,系统隐式将返回表达式类型转换为返回值

2020-08-23 00:22:43 2249 1

原创 Linux C/C++ or 嵌入式面试之《C/C++笔面试系列》(7) C++ 继承、单一继承、派生列表、多继承、菱形继承、虚继承、虚基类面试问题汇总

文章目录继承单一继承派生列表多继承菱形继承虚继承继承继承是面向对象程序设计中复用代码的重要手段,它允许程序员在原有类特性的基础上进行扩展增加功能。这样产生的新的类叫派生类。继承体现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。重点:代码重用。单一继承一个类只继承于一个类叫做单一继承。class A{};class B :public A //单一继承{}派生列表派生类通过派生列表来指出其从哪个(哪些)基类继承而来。类派生列表的使用规则:①派生列表不能出现在类

2020-08-22 22:46:54 14676 1

原创 Linux C/C++ or 嵌入式面试之《多进程多线程编程系列》(17) 虚拟地址、物理地址、MMU、分页机制、TLB问题汇总

物理地址(Physical Address) 是指出现在CPU外部地址总线上的、用于寻址物理内存的地址信号,是地址变换的最终结果地址。如果启用了分页机制,那么线性地址会使用页目录和页表中的项变换成物理地址。如果没有启用分页机制,那么线性地址就直接成为物理地址了。MMU是Memory Management Unit的缩写bai,中文名是内存管理单元,它是中央处理器(CPU)中用来管理虚拟存储器、物理存储器的控制线路,同时也负责虚拟地址映射为物理地址,以及提供硬件机制的内存访问授权。

2020-08-21 19:38:42 15047 2

原创 Linux C/C++ or 嵌入式面试之《多进程多线程编程系列》(18) 缓冲IO、非缓冲IO、read/fread区别、fread作用

文章目录缓冲IO与非缓冲IOfread与read的区别read/write已经有了缓冲实现,为什么fread/fwrite还要实现缓冲?(fread等函数存在的意义)标准IO三种类型的缓存对于缓冲IO,可以调用什么函数刷新缓冲?对于非缓冲IO,可以调用什么函数刷新内核缓冲?缓冲IO与非缓冲IOlinix对IO文件的操作分为不带缓存的IO操作和标准IO操作(即带缓存)。不带缓存:open read,属于系统调用,在用户空间没有缓冲,在内核空间还是进行了缓存的。数据-----内核缓存区----磁盘。

2020-08-20 18:51:18 1072 2

原创 Linux C/C++ or 嵌入式面试之《C/C++笔面试系列》(11) malloc/free和new/delete区别、new/delete底层机制

嵌入式软件工程师不同于纯粹的C++程序员,常常要游走于C和C++之间,所以会考察C和C++的一些对比,比如说说malloc/free 和new/delete的区别。文章目录1、malloc/free和new/delete区别2、new/delete底层机制1、malloc/free和new/delete区别malloc/free为C的标准库函数new/delete则为C++的操作运算符malloc返回类型为void*,必须强制类型转换对应类型指针,new则直接返回对应类型指针malloc/fr

2020-08-20 16:39:15 2456 2

原创 Linux C/C++ or 嵌入式面试之《C/C++笔面试系列》(8) C++ 构造、析构、拷贝构造、默认构造、默认拷贝、赋值运算符、深浅拷贝、explict关键字面试问题汇总

1、构造函数特点无返回值,也不能写成void和类名相同支持函数重载2、构造函数分类默认构造函数(无参)普通构造函数(有参)拷贝构造函数默认拷贝构造函数(浅拷贝)3、什么是默认构造函数?在没有定义任何构造函数时,编译器将自动生成一个无参构造函数,也就是默认构造函数。一旦我们定义了自己的构造函数,编译器将不再生成默认构造函数。复制构造函数(也称为拷贝构造函数)复制构造函数参数为类对象本身的常引用,用于根据一个已存在的对象复制出一个新的该类的对象,一般在函数中会将已存在对象的数据成员的

2020-08-20 00:13:23 14675 1

原创 嵌入式面试之《C++ STL系列》(2) 关联式容器问题汇总

占个坑

2020-08-19 16:08:39 689

原创 嵌入式面试之《C++ STL系列》(1) 序列式容器问题汇总

占个坑

2020-08-19 16:07:33 682

原创 Linux C/C++ or 嵌入式面试之《C/C++笔面试系列》(6) 理解C++ static、struct、inline关键字

文章目录1、static作用3、struct和class区别4、inline作用1、static作用(1)保留C语言里的所有功能隐藏。(static函数,static变量均可)保持局部变量内容的持久。(static变量中的记忆功能和全局生存期)默认初始化为0(static变量)(2)C++新增功能C++中的类成员声明static(有些地方与以上作用重叠)对于非static数据成员是与类的对象相关联的,而static成员变量独立于类的对象而存在,与类相关联,所以:(1)类的静态成员函数是属于

2020-08-19 14:18:02 2629 2

原创 Linux C/C++ or 嵌入式面试之《网络编程系列》(10) http协议面试汇总(博大精深的http协议)

文章目录**1、说一下什么是Http协议?****2、什么是Http无状态协议?怎么解决Http无状态协议?****3、说一下Http协议中302状态****4、Http协议有什么组成?****5、Http协议中有哪些请求方式?****6、Http协议中Http1.0与1.1区别?****7、get与post请求区别?**(初级程序员必备问题)**10、cookies机制和session机制的区别****11、Http与Https优缺点?****12、Http优化****13、Http协议有那些特征?**

2020-08-19 10:08:51 10500 1

原创 Linux C/C++ or 嵌入式面试之《C/C++笔面试系列》(2) C语言经典笔面试题(下)

文章目录1、已知一个数组table,用一个宏定义,求出数据的2、对于一个频繁使用的短小函数,在C 语言中应用什么实现,在C++ 中应用什么实现?3、用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)4、以下为Linux下的32位C程序,请计算sizeof的值。5、请写出bool flag 与“零值”比较的if 语句6、请写出int 变量n 与“零值”比较的if 语句7、请写出char *p 与“零值”比较的if 语句8、以下是求一个数的平方的程序,请找出错误9

2020-08-18 22:01:27 15613 8

原创 Linux C/C++ or 嵌入式面试之《C/C++笔面试系列》(3) 理解static、register、volatile、const、extern关键字

这几个关键字是C语言面试常考知识点。面试时最好过一下,防止一时脑回路跟不上,不小心翻车。文章目录1、static作用2、register3、volatile5、extern1、static作用第一、static修饰的静态局部变量只执行一次初始化(即再次进入时不会重新赋值),而且延长了局部变量的生命周期,直到程序运行结束以后才释放,但其作用局仍为局部。第二、static修饰的全局变量和函数只能在本文件中访问,不能在其它文件中访问,即便是extern外部声明也不可以。第三、无论是修饰全局还是局部,如果

2020-08-18 16:53:57 1274 6

原创 Linux C/C++ or 嵌入式面试之《多进程多线程编程系列》(20) 操作系统常见的调度算法

只列举了几个比较常用的调度算法,在面试时能完整地回答出这四个,我觉得就不错了,至于其他复杂调度算法可以自行去百度。文章目录1、先来先服务调度算法(FCFS)2、短作业优先调度算法(SJF)3、高响应比调度算法(HRRN)4、时间片轮转调度算法(RR)问题汇总1、先来先服务调度算法(FCFS)先到的进程先调度,执行过程不会被中断直到进程结束。优点:易于实现,且相当公平。缺点:比较有利于长进程,而不利于短进程。2、短作业优先调度算法(SJF)对短作业(进程)优先调度。优点:平均周转时间最短,进程

2020-08-18 16:21:42 2597 4

原创 Linux C/C++ or 嵌入式面试之《多进程多线程编程系列》(11) linux下线程同步/互斥方式有哪些?

线程的最大特点是资源的共享性,但资源共享中的同步问题是多线程编程的难点。linux下提供了多种方式来处理线程同步,最常用的是互斥锁、条件变量和信号量。面试基本不会考察接口使用,更侧重会实现原理。文章目录一、互斥锁二、条件变量(cond)三、信号量(sem)四、理解PV操作问题汇总一、互斥锁通过锁机制实现线程间的同步。初始化锁在Linux下,线程的互斥量数据类型是pthread_mutex_t。在使用前,要对它进行初始化。静态分配:pthread_mutex_t mutex = PTHREAD_M

2020-08-18 15:26:56 11704 3

原创 嵌入式面试之《常用硬件接口/协议系列》(4) 计算机与外设之间进行数据传送的基本控制方式

从事过单片机或者学习过微机原理的同学对于这个问题应该不陌生,面试官借此问题展开对中断和DMA的追问。社招一般不会问这个问题。计算机与外设之间进行数据传送有三种基本控制方式:查询方式、中断方式和DMA方式。1.查询方式查询方式是通过执行输入/输出查询程序来完成数据传送的。工作原理是:当CPU启动外设工作后,不断地读取外设的状态信息进行测试,查询外设是否准备就绪,如外设准备好,则可以进行数据传送;否则,CPU继续读取外设的状态信息进行查询等待,直到外设准备好。采用程序查询方式进行数据传送时,实际上在外

2020-08-18 14:13:07 10827 2

原创 Linux C/C++ or 嵌入式面试之《网络编程系列》(9) MSS、MTU、IP分片、TCP分段

这些术语作为技术开发人员的基本常识,要掌握,冷不防的面试官问你什么是MTU,结果栽在这么简单的问题上。文章目录一、MSS的含义二、通信双方如何协商MSS三、MTU四、IP分片五、MSS太小或太大会有什么问题问题汇总一、MSS的含义MSS是Maximum Segment Size的缩写,指TCP报文段所允许传送的数据部分最大长度。如果上层交付下来的数据太大,tcp会对其进行分块。这个分块过程是在运输层完成的,在接收端的运输层对分块的TCP报文段的数据部分进行重组。MSS字段位于TCP首部中的选项字段。

2020-08-18 13:46:42 10469 1

原创 Linux C/C++ or 嵌入式面试之《网络编程系列》(8) tcp粘包、拆包问题(数据无边界性)及其解决办法

tcp粘包问题是实际开发时会遇到的问题,面试官可以用该问题测试应聘者是否真的动手做过网络开发,如果没有实际开发经验,可能不知道这个问题。文章目录一、tcp粘包问题1、什么是tcp粘包2、粘包原因二、tcp拆包问题1、什么是tcp拆包2、拆包原因三、粘包拆包解决办法一、tcp粘包问题1、什么是tcp粘包TCP粘包是指发送方发送的多个数据包被当做一个数据包接收,从接收缓冲区看,后一包数据的头紧接着前一包数据的尾。粘包可能由发送方造成,也可能由接收方造成。只有TCP有粘包现象,UDP永远不会粘包粘

2020-08-18 10:26:43 1695 2

原创 Linux C/C++ or 嵌入式面试之《多进程多线程编程系列》(8) fork笔试题

题目:请问下面的程序一共输出多少个“-”?#include <stdio.h>#include <unistd.h> int main(void){ int i; for(i=0; i<2; i++){ fork(); printf("-"); } return 0;}如果你对fork()的机制比较熟悉的话,这个题并不难,输出应该是6个“-”,但是,实际上这个程序会很tricky地输出8个“-”。要讲清这个题

2020-08-17 19:51:25 1684 4

原创 Linux C/C++ or 嵌入式面试之《多进程多线程编程系列》(10) 什么是进程上下文?什么是中断上下文?

上下文context: 上下文简单说来就是一个环境。用户空间的应用程序,通过系统调用,进入内核空间。这个时候用户空间的进程要传递 非常多变量、參数的值给内核。内核态执行的时候也要保存用户进程的一些寄存器值、变量等。所谓的“进程上下文”,能够看作是用户进程传递给内核的这些參数以及内核要保存的那一整套的变量和寄存器值和当时的环境等。相对于进程而言,就是进程运行时的环境。详细来说就是各个变量和数据,包含全部的寄存器变量、进程打开的文件、内存信息等。

2020-08-17 19:30:20 1845 1

原创 Linux C/C++ or 嵌入式面试之《多进程多线程编程系列》(21) 谈谈原子操作

原子操作,顾名思义,就是说像原子一样不可再细分、不可被中途打断(实物理上原子可以细分哈哈)。一个操作是原子操作,意思就是说这个操作是以原子的方式被执行,要一口气执行完,执行过程不能够被OS的其他行为打断,是一个整体的过程,在其执行过程中,OS的其它行为是插不进来的。CPU最小的执行单元是指令,一个指令周期可能包括多个总线周期。我们可以得到:...

2020-08-17 17:47:10 445

原创 Linux C/C++ or 嵌入式面试之《多进程多线程编程系列》(19) 线程安全与可重入函数讨论

占个坑

2020-08-17 17:42:40 14273 2

原创 Linux C/C++ or 嵌入式面试之《多进程多线程编程系列》(7) fork一网打尽

一、fork详情还可以参阅:https://blog.csdn.net/qq_41453285/article/details/103743246接口语法用来创造一个子进程在子进程中,成功的fork调用会返回 0。在父进程中fork返回子进程的 pid。如果出现错误,fork返回一个负值成功调用fork会创建一个新的进程,它几乎与调用fork的进程一模一样,这两 个进程都会继续运行最常见的fork用法是创建一个新的进程,然后使用exec载入二进制映像,替换当前进程的映像。这种情况下,派生(for

2020-08-17 16:10:42 2787 5

原创 Linux C/C++ or 嵌入式面试之《多进程多线程编程系列》(16) 你了解操作系统线程模型吗

对校招的同学而言,本文可以不看,毕竟有点深。对于社招同学,还是要了解下。需要认识的一点是,linux下线程和进程没有多大的区别,本质上是一样的。

2020-08-17 14:16:50 17107 2

原创 Linux C/C++ or 嵌入式面试之《多进程多线程编程系列》(6) 读写锁机制探究

读写锁与互斥锁的功能类似,对临界区的共享资源进行保护!互斥锁一次只让一个线程进入临界区,读写锁比它有更高的并行性。读写锁有以下特点:如果一个线程用读锁锁定了临界区,那么其他线程也可以用读锁来进入临界区,这样就可以多个线程并行操作。但这个时候,如果再进行写锁加锁就会发生阻塞,写锁请求阻塞后,后面如果继续有读锁来请求,这些后来的读锁都会被阻塞!当读操作完成后,写锁解除阻塞。这样的目的是出于避免了读锁长期占用资源,防止写锁饥饿!如果一个线程用写锁锁住了临界区,那么其他线程不管是读锁还是写锁都会发生阻塞!

2020-08-16 16:35:37 1799 2

原创 Linux C/C++ or 嵌入式面试之《多进程多线程编程系列》(5) 谈谈你对死锁的理解

谈谈你对死锁的理解。死锁发生的条件是什么,如何预防死锁。

2020-08-16 16:30:55 1941 2

原创 Linux C/C++ or 嵌入式面试之《多进程多线程编程系列》(14) 说一说堆和栈的区别

在回答完进程的虚拟地址空间布局之后(上一篇),面试官可能抓住堆和栈深入展开。堆和栈的区别①管理方式:栈由编译器自动管理;堆由程序员控制,使用方便,但易产生内存泄露。②生长方向:栈向低地址扩展(即”向下生长”),是连续的内存区域;堆向高地址扩展(即”向上生长”),是不连续的内存区域。这是由于系统用链表来存储空闲内存地址,自然不连续,而链表从低地址向高地址遍历。③空间大小:栈顶地址和栈的最大容量由系统预先规定(通常默认2M或10M);堆的大小则受限于计算机系统中有效的虚拟内存,32位Linux系统中堆内

2020-08-16 16:12:50 1798 3

AOA Linux实现 ,含TCP转发

AOA Linux实现 ,含TCP转发

2022-03-17

HI3519AV100最新SDK smaple

海思最新SDK 程序 版本V2.0.1.0 最新

2019-03-29

v4l2读取摄像头

v4l2读取摄像头,能在linux下编译,生成yuv文件,可以指定文件帧数

2018-01-30

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除