校招之查漏补缺

*时间:2018/9/14

-----------------------------------------------------分割线---------------------------------------------------------

一、C语言:函数指针、指针函数、指针数组、数组指针等概念及实例    

    函数指针:

    int  (*p)(int  x,  int y);//p是一个指针,函数指针;这个函数指针指向一个int  fun(int ,  int)类型的函数;

    指针函数:

    int  *p(int  x,  int y);//p是一个函数,指针函数,返回值是一个int型指针;

    指针数组:

    int  *a[10];//a是一个数组,指针数组,数组中的每一个元素都是一个指针,且这些指针都指向int型数据;

    数组指针:

    int  (*a)[10];//a是一个指针,数组指针,a指向一个形如int  array[10]的数组;

二、数据结构:用C实现的链表操作(add、del、mod、倒置)

   详情见数据结构笔记本

三、操作系统:实时系统和非实时系统的区别和优缺点

    二者的区别主要在于任务调度的算法实现:

        实时系统:如ucos采用基于优先级的抢占式算法,可以保证实时性;

        非实时系统:如Linux采用时间片轮转方式(时间片的大小是科用算法实现动态调整的),看起来就像是人人平等的思想。

    实时系统的优点:

        在于能够及时处理各种突发的事件,即处理各种中断,因而衡量嵌入式实时操作系统的最主要、最具有代表性的性能指标参数无疑应该是中断响应时间了。中断响应时间通常被定义为:

    中断响应时间=中断延迟时间+保存CPU状态的时间+该内核的ISR进入函数的执行时间[2]。

    中断延迟时间=MAX(关中断的最长时间,最长指令时间) + 开始执行ISR的第一条指令的时间[2]。

   

    非实时系统:

        一般用于实时性能要求不高的场景,在宏观上多任务是并行的。

四、协议:IIC、SPI、UART、单总线等要从时序、安全性、数据传输等多方面来讲

       

五、协议设计???  

六、Linux中断实现机制和中断对外设时序间隙的影响、中断中不能用延时的原因

    中断主要涉及:中断控制器机制、中断硬件处理流程、Linux中断(外部、软)的处理

    (1)中断控制器

                CPU -------中断控制器------N个中断源

    所以中断控制器的作用是聚合N个中断源,并裁决(分散)给CPU,使其做进一步处理。

    对于中断控制器内部的机制,主要是:

            中断源触发------是否屏蔽-------决定  是否挂起-----然后判断中断类型(IRQ   FIQ)-----裁决执行中断源------CPU处理

    (2)中断硬件处理流程

    当中断发生(以上过程已完成,并通知CPU)-----CPU保护现场工作-----执行ISR------恢复现场工作

        CPU保护现场工作:主要是工作状态、模式、REG的保护

        CPU恢复反之。

    (3)Linux中断

            1.顶底半部机制

            2.外部中断处理

            3.软中断处理

            4.中断延时影响及其解法

七、volatile应用实例

    1) 中断服务程序中修改的供其它程序检测的变量需要加volatile;

    2) 多任务环境下各任务间共享的标志应该加volatile;(多线程中的volatile使用)

    3) 存储器映射的硬件寄存器通常也要加volatile说明,因为每次对它的读写都可能由不同意义。

    参考:https://blog.csdn.net/whatday/article/details/52511071    

八、哈佛结构和冯.若依曼结构的区别  

九、智力数学题    

十、32位和64位编译器对同一个结构体的内存大小影响   

十一、Device Tree     //重点

十二、硬件中断处理流程

    详情见六

十三、epoll内核实现概述    

十四、用socket做过什么项目     

 十五、ucos(RTOS)

十六、写标准宏,返回最小值

     #define  MIN(a, b)  ( (a) > (b)?(b):(a) )

     主要是考虑当宏参数为表达式时尽可能不出错

     仍然有一个缺陷:

            MIN( *p++,  a ) = ( ( *p++ ) > (a) ?  (*p++) : (a) ) 

            比较*p 和 a的大小,但是同时p++;如果*p > a, 则结果是MIN = a,且p++;

                                                                    如果*p < a, 则结果是MIN = *(p++),且p++了两次。       

十七、两个栈实现一个队列

十八、struct和class实现类的区别

    首先,C++中的struct是对C中struct的一种扩展,具有封装(可以有成员函数)、多态、继承等类的特性,所以看起来struct和class是相同的。

    实际上,struct的应用场景仍然是简单的数据结构,class适用于对象。

    区别?本质区别和其他区别:

        本质区别:

            (1)默认的访问权限不同

            struct默认是publib的,class默认是private(可以在内部自定义)

            (2)默认的继承权限不同

            继承的权限是基于子类,而不是基类,如:

            struct A{ };//基类A

            struct B: A{ };//子类是B,所以默认的继承权限是publib继承(等价于  struct B: publib A{ };)

            class C: A{ };//子类是C,所以默认的继承权限是private继承(等价于  class B: private A{ };)

        其他区别:

            (1)当struct/class中定义了构造函数或虚函数,这种“数据结构”的特性被认为是  对象,不能再定义时直接赋值;若struct/class仅定义了一般数据和成员函数,是可以在定义时直接赋值的。

            (2)class可以定义模板参数,struct不能。

参考:https://www.cnblogs.com/ccsccs/articles/4025215.html

十九、类继承和类多态

二十、IPC之管道(pipe)

    (1)有名管道

    (2)无名管道

二十一、多进程/线程

    (1)同步、通信方式

    进程:IPC的方式通常有管道(包括无名管道和命名管道)、消息队列、信号量、共享存储、Socket、Streams等。其中 Socket和Streams支持不同主机上的两个进程IPC。Socket用在网络编程中。

猜你喜欢

转载自blog.csdn.net/Carl_0/article/details/86023408