我的学习笔记(面试常问)

1:malloc和new区别

        内存分配:malloc在堆上分配空间,需要手动计算大小;new可以在堆上分配,自动计算大小,并且new会调用构造函数,去初始化对象。

        关键字:new是操作符,malloc是库函数

        返回值:new返回对象类型的指针,分配失败会抛出异常;malloc返回void指针,分配失败返回null

        扩充:new先去调用operator new,申请足够的内存,然后调用构造函数,初始化成员变量;delete释放内存,并调用析构函数。

                     operator new只分配内存,不调用构造函数;operator delete释放内存,不调用析构函数

                       placement new  在指定位置调用构造函数,不调用析构函数。

                malloc还有relloc,calloc。

2:iic、spi、uart

1、iic:

通信模式:串行同步半双工,多主多从,短距离。总线空闲时高电平

速率:标准模式100kbit/s,快速模式可达400kbit/s,高速模式可达3.4Mbit/s。

线:SCL(时钟线)、SDA(数据线),采用TTL电平

为什么要接上拉电阻?       

        因为iic是开漏输出(od门由于内部结构,只能输出低电平),无法输出高电平。在漏极接上拉电阻才能实现”线与“功能(将他们输出端相接,外界上拉电阻。一个是低电平的时候,全是低电平;全是高电平的时候,输出高电平)

        新的理解:如果不接,从设备在发送应答信号低电平的时候,如果主设备设计的不好,输出了高电平,两者就会导通,导致短路。

        在iic内部,主设备和从设备都是od门,数据发送完之后,主设备就不驱动sda了,这时候sda的电平由外部设备决定,如果从设备也不驱动,这时候SDA的状态就称为“悬空”,状态不确定,如果接上拉电阻,就可以保证此时是高电平。当接了上拉电阻的时,如果从设备接收到信号,发送应答位,这时候驱动sda线,两者相当于接地,sda就从高电平变为低电平,主设备就知道从设备应答。

数据帧:

        发送数据时,先发送一个起始信号(SDA拉低,产生下降沿),唤醒从设备

        然后,发送的第一个字节中,前七位是从设备的地址,表示要和哪个从设备通信,被选中的从设备开始工作,其他从设备忽略之后的信号,最后一个bit是读写标志位,表示进行读操作或者写操作。然后发送一个应答位。如果主机收到应答位,就可以开始传输数据。

        第二个字节中,会存储要读写的从机寄存器地址,表示要操作哪个寄存器。然后发送应答位

        之后就可以传输数据了,发送完数据之后要发送一个应答位,如此循环,直到发送完数据。

        数据发送完之后,发送停止信号,结束通信。

        在SCL处于高电平时,SDA信号才有效。

2 、uart

        通信模式:串行异步全双工

        波特率:每秒钟传输的bit数

        传输距离

        TTL电平:0.5m以内采用(短距离,因为一般是5v左右表示高电平,所以不适合长距离)

        RS232:0.5m~15m(最大30m左右,有的也说50m,根据具体情况吧),3v-12v表示高电平1,速率一般为20kbps

        RS485:速率可达10Mbps,标准情况最大距离1200m,最大也可达3km。

        数据格式:最开始电平拉低,维持一段时间,表示起始位,要开始发送数据。然后发送一个字节数据,发送完之后发校验位,再发送停止位,停止位可以是1位或者1.5位等,要继续发送数据就循环这个过程。 

                                                发送的数据

起始位00000000校验位停止位

        内部实现:数据线发送到fifo队列里,发送的时候从队列取数据,通过移位寄存器发出去。接收数据时,数据放到fifo队列,再通过移位寄存器取数据。

        如何知道有数据? : 可以通过轮询或者中断实现。

3:select,poll,epoll的区别

·接口上

        select和poll提供一个接口

        epoll提供两个接口,这两个接口实现它们一个接口的功能

·参数和返回值

        select传入可读,可写,异常三个集合,返回后需要进行遍历取出就绪事件

        poll只需传递一个集合,返回后需要进行遍历取出就绪事件

        epoll只需通过epoll_ctl添加一次,epoll_wait取出就绪事件

·底层实现

        select和poll通过轮询实现,select是数组,poll是链表

        epoll通过回调机制实现,将就绪io从红黑树拷贝到就绪队列

·大小限制

        select有最大数量限制

        poll和epoll没有限制

·触发方式

        select和poll水平触发

        epoll边缘触发和水平触发

·效率

        少量io,大量活跃。        select和poll效率较高

        大量io,少量活跃。        epoll效率高                 

4:c++ 3大特性

·封装

        通过限定符比如private,protected,来隐藏类内部的实现细节,只对外部提供接口

·继承

        用public、private、protected来修饰

        这些修饰符表示基类成员的最高权限

        比如private继承,继承后基类最高权限就变成private,原本是private的还是private,子类还是不能对其进行访问

        如果要访问private

class base
{
    private:
    a
}
class dev:public base
{
    using b:c;可以通过这种方式进行访问
}

·多态

        

        

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值