嵌入式面试题(五、Linux操作系统) 五、Linux操作系统1、Linux内核的组成部分Linux内核主要由五个子系统组成:进程调度,内存管理,虚拟文件系统,网络接口,进程间通信。2、Linux系统的组成部分Linux系统一般有4个主要部分:内核、shell、文件系统和应用程序。3、用户空间与内核通信方式有哪些?1)系统调用。用户空间进程通过系统调用进入内核空间,访问指定的内核空间数据;2)驱动程序。用户空间进程可以使用封装后的系统调用接口访问驱动设备节点,以和运行在内核空间的驱动程序通信;3)共享内存mmap。在代码中调用接口
嵌入式面试题(四、常见算法) 四:常见算法1、插入排序基本思想:每步将一个待排序的记录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。时间空间复杂度:算法适用于少量数据的排序,时间复杂度为O(n^2),空间复杂度为O(1),是稳定的排序方法代码实现public static void insertionSort(int[] array){ int tmp; for(int i=1;i<array.length;i++){
嵌入式面试题(三、网络编程) 三、网络编程1、TCP、UDP的区别TCP—传输控制协议,提供的是面向连接、可靠的字节流服务。当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据。UDP—用户数据报协议,是一个简单的面向数据报的运输层协议。UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。1)TCP是面向连接的,UDP是面向无连接的2)UDP程序结构较简单3)TCP是面向字节流的,UDP是基于数据报的4)TCP保证数据正确性,UDP可能丢包5)TC
嵌入式面试题(二、C/C++) 二、C/C++1、new和malloc1)malloc和free是c++/c语言的库函数,需要头文件支持stdlib.h;new和delete是C++的关键字,不需要头文件,需要编译器支持;2)使用new操作符申请内存分配时,无需指定内存块的大小,编译器会根据类型信息自行计算。而malloc则需要显式地支持所需内存的大小。3)new操作符内存分配成功时,返回的是对象类型的指针,类型严格与对象匹配,无需进行类型转换,故new是符合类型安全性的操作符。而malloc内存分配成功则是返回void*,需要通
嵌入式面试题(一:进程与线程) 一、进程与线程1、什么是进程、线程,有什么区别?进程是资源(CPU、内存等)分配的基本单位,线程是CPU调度和分配的基本单位(程序执行的最小单位)。同一时间,如果CPU是单核,只有一个进程在执行,所谓的并发执行,也是顺序执行,只不过由于切换速度太快,你以为这些进程在同步执行而已。多核CPU可以同一时间点有多个进程在执行。2、多进程、多线程的优缺点说明:一个进程由进程控制块、数据段、代码段组成,进程本身不可以运行程序,而是像一个容器一样,先创建出一个主线程,分配给主线程一定的系统资源,这时候就可以在主
Linux应用编程和网络编程(13、exec族函数及实战) 1、exec族函数及实战1.1、为什么需要exec函数(1)fork子进程是为了执行新程序(fork创建子进程后,子进程和父进程同时被OS调度执行,因此子进程可以单独的执行一个程序,这个程序宏观上将会和父进程程序同时进行 )(2)可以直接在子进程的if中写入新程序的代码。这样可以,但是不够灵活,因为我们只能把子进程程序的源代码贴过来执行(必须知道源代码,而且源代码太长了也不好控制),譬如说我们希望子进程来执行ls-la命令就不行了(没有源代码,只有编译好的可执行程序)(3)使用exec运行新的可执行
Linux应用编程和网络编程(12、waitpid介绍) 1、waitpid介绍1.1、waitpid和wait的区别(1)基本功能一样,都是用来回收子进程(2)waitpid可以回收指定PID的子进程(3)waitpid可以阻塞式或非阻塞式两种工作模式1.2、waitpid原型介绍(1)参数(2)返回值1.3、代码实例(1)使用waitpid实现wait的效果ret = waitpid(-1, &status, 0);-1表示不等待某个特定PID的子进程而是回收任意一个子进程,0表示用默认的方式(阻塞式)来进行等待,返回值ret是本
Linux应用编程和网络编程(11、父进程wait回收子进程) 1、父进程wait回收子进程1.1、wait的工作原理(1)子进程结束时,系统向父进程发送SIGCHILD信号(2)父进程调用wait函数后阻塞(3)父进程被SIGCHILD信号唤醒然后去回收僵尸子进程(4)父子进程之间是异步的,SIGCHILD信号机制就是为了解决父子进程之间的异步通信问题,让父进程可以及时的去回收僵尸子进程(5)若父进程没有任何子进程,则wait返回错误1.2、wait实战(1)wait的参数status。status用来返回子进程结束时的状态,父进程通过wait得到st
Linux应用编程和网络编程(10、进程的诞生和消亡) 1、进程的诞生与消亡1、进程的诞生(1)进程0和进程1(2)fork(3)vfork2、进程的消亡(1)正常终止和异常终止(2)进程在运行时需要消耗系统资源(内存、IO),进程终止时理应完全释放这些资源(如果进程消亡后仍然没有释放相应资源则这些资源就丢失了)(3)Linux系统规定:每一个进程退出时,操作系统会自动回收这个进程涉及到的所有资源(譬如malloc申请的内容没有free时,当前进程结束时这个内存会被释放;再譬如open打开的文件没有close的在程序终止时也会被关闭)。但是操作系
Linux应用编程和网络编程(9、父子进程对文件的操作) 1、父子进程对文件的操作1.1、子进程继承父进程中打开的文件(1)上下文:父进程先open打开一个文件得到fd,然后在fork创建子进程,之后在父子进程中各自write向fd中写入内容(2)测试结论是:接续写。实际上本质原因是父子进程之间的fd对应的文件指针是彼此关联的(3)实际测试时,有时候会看到只有一个(hello或world),但是实际上不是。原因是本身程序太短,只需要在程序中假如sleep函数即可保证。#include <stdio.h>#include <sys/ty
Linux应用编程和网络编程(8、fork创建子进程) 1、fork创建子进程1.1、为什么要创建子进程(1)每一个程序的运行都需要一个进程(2)多进程实现宏观上的并行1.2、fork的内部原理(1)进程的分裂生长模式。如果操作系统需要一个新进程来运行一个程序,那么操作系统会用一个现有的进程来复制生成一个新进程。老进程叫父进程,复制生成的新进程叫子进程(2)fork函数调用一次会返回2次,返回值等于0的就是子进程,而返回值大于0的就是父进程(3)典型的使用fork的方法:使用fork后然后用if判断返回值,并且返回值大于0时就是父进程,返回值等于0
Linux应用编程和网络编程(7、进程概念) 1、程序的开始和结束1.1、main函数由谁调用(1)编译链接时的引导代码。操作系统下的应用程序其实在main执行前也需要先执行一段引导代码才能去执行main,我们写应用程序时不用考虑引导代码的问题,编译链接时由链接器将编译器中事先准备好的引导代码给链接进去和我们的应用程序一起构成最终的可执行程序。(2)运行时的加载器。加载器是操作系统中的程序,当我们去执行一个程序时(譬如.a/.out ,譬如代码中用exec族函数来运行),加载器负责将这个程序加载到内存中去执行这个程序。(3)程序在编译链接时
秋招求职总结分享 前言博主是某211渣硕光学工程专业,2022届应届毕业生,秋招的岗位为嵌入式软件开发工程师/C++软件开发工程师从实习到秋招,时间段大概为3月到12月,战线较长,大厂中厂小厂的offer都拿到了,包括:联发科、海康威视、大华、鼎桥通信、新华三、闻泰科技、道通科技、TCL、汇川技术等公司的offer,最后签下了某芯片公司的offer,目前仍在春招,寻找其他的工作计划,求职仍在进行中,在这里简单对自己的秋招进行个总结,实习经历的话,暂时未介绍,文章主要分为几个部分:背景篇:主要对自己的个人情况进行一个总结