文章目录
- 是否了解RAII (Resource Acquisition is Initialization) ?请阐述。
- 设计模式有哪些?特别是单例子模式,工厂模式
- http get 和post请求区别
- tcp udp
- c++结构体和类的区别和联系
- 进程 和线程区别
- dll动态库和lib静态库,
- cpu架构,国产化架构
- c++编译命令,gdb调试
- c++标准模板库 stl
- C++的三大特性:封装、继承、多态。类的基本概念:类,对象,继承。
- C和C++的区别?
- 全局变量和局部变量在内存分配上有何不同?
- static、extern、volatile、const的作用,new与malloc的区别:
- 指针和引用的区别:
- 智能指针:
- 简述深拷贝和浅拷贝的区别:
- 编写my_strcpy函数,实现与库函数strcpy类似的功能,不能使用任何库函数;
- 请讲述堆和栈的区别:
- 全局变量和局部变量有什么区别?实怎么实现的?操作系统和编译器是怎么知道的?
- new、delete、malloc、free之间的关系:
- 虚函数是怎么实现的:
- 什么是内存泄漏?面对内存泄漏和指针越界,你有哪些方法?
- 关于构造函数和析构函数:
- QT信号槽机制的优缺点
- 多线程情况下, Qt中的信号槽分别在什么线程中执行, 如何控制?
- 描述Qt下Tcp通信的整个流程
- 描述QT下udp通信的整个流程
- 描述QT下多线程的两种使用方法, 以及注意事项
- 描述QT中的文件流(QTextStream)和数据流(QDataStream)的区别, 他们都能帮助我们完成一些什么事情.
- 谈谈对C++内存的理解
- C++四种强制类型转换
- 动态绑定与静态绑定
是否了解RAII (Resource Acquisition is Initialization) ?请阐述。
是把资源和对象的生命周期绑定,对象创建获取资源,对象销毁释放资源
设计模式有哪些?特别是单例子模式,工厂模式
· 单例模式:这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。
注意:
1、单例类只能有一个实例。
2、单例类必须自己创建自己的唯一实例。
3、单例类必须给所有其他对象提供这一实例。
如日志系统,资源管理器,线程池,内存池等
· 工厂模式:对创建对象的封装,符合开闭原则。工厂模式在许多项目中大量使用,因为它将对象的构造过程封装,使创建对象的接口统一且简洁,另一方面符合开闭原则,易于扩展。开源项目NVDLA的compiler中各类node的建立,LLVM中的pass,都有工厂模式的用例。
· 适配器模式:STL中的容器适配器stack和queue,是对象适配器的绝佳用例。项目开发中也常常使用。
· 观察者模式:频繁使用,观察者模式建立了一种一对多的联动,一个对象改变时将自动通知其他对象,其他对象将作出反应。消息更新、广播机制、消息传递、链式触发(高级啊)……比如Qt的信号槽机制
· 职责链模式:将一个请求的发送者和接收者解耦,让多个对象都有机会处理请求。将接收请求的对象连接成一条链,并且沿着这条链传递请求,直到有一个对象能够处理它为止。采用职责链模式不仅可以方便扩展(当增加一个接受者时,只需要在链上的适当位置插入对应的处理方法即可),而且可以替换掉代码中可能存在的switch-case或者if-else。在工具的设计、具有层级关系或权限关系的任务处理场景中可以应用职责链模式。
· 策略模式:常常与工厂模式搭配,封装不同的算法(策略),再结合C++多态机制,策略模式在实际开发过程中应用十分广泛。
代理模式:C++智能指针、引用计数等
http get 和post请求区别
GET在浏览器回退时是无害的,而POST会再次提交请求。
GET产生的URL地址可以被Bookmark,而POST不可以。
GET请求会被浏览器主动cache,而POST不会,除非手动设置。
GET请求只能进行url编码,而POST支持多种编码方式。
GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
GET请求在URL中传送的参数是有长度限制的,而POST么有。
对参数的数据类型,GET只接受ASCII字符,而POST没有限制。
GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
GET参数通过URL传递,POST放在Request body中。
GET和POST本质上就是TCP链接,并无差别。但是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。
对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);
而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。
tcp udp
1.基于连接与无连接;
2.对系统资源的要求(TCP较多,UDP少);
3.UDP程序结构较简单;
4.流模式与数据报模式 ;
5.TCP保证数据正确性,UDP可能丢包,TCP保证数据顺序,UDP不保证。
tcp协议和udp协议的差别
TCP | UDP |
---|---|
面向连接 | 面向非连接 |
传输可靠 | 传输不可靠 |
传输少量数据 | 传输大量数据 |
速度慢 | 速度快 |
保证数据正确性 | 可能丢包 |
保证数据顺序 | 不保证 |
c++结构体和类的区别和联系
最主要的不同点就是结构体的访问权限为public而且不能改变,而类的访问权限可以改变,public的类和结构体基本一样。
继承上同样表现出这样的特点,struct是public继承的,而class是private继承的,继承的子类的访问权限取决于子类。
其他的struct和class一样可以包含成员函数,可以继承,可以实现多态。
区别起见,我们将结构体中的变量叫做数据,函数叫做函数,类中的变量叫做成员,函数叫做方法。
表现出来的话,结构体更多表现出一种面向过程的数据结构的特点,而类更多表现出面向对象变成的特点,即更侧重对成员的访问权限的控制。
进程 和线程区别
进程:是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念,竞争计算机系统资源的基本单位。
线程:是进程的一个执行单元,是进程内科调度实体。比进程更小的独立运行的基本单位。线程也被称为轻量级进程。
一个程序至少一个进程,一个进程至少一个线程。
线程执行开销小,但是不利于资源的管理和保护。线程适合在SMP机器(双CPU系统)上运行。
进程执行开销大,但是能够很好的进行资源管理和保护。进程可以跨机器前移。
地址空间:同一进程的线程共享本进程的地址空间,而进程之间则是独立的地址空间。
资源拥有:同一进程内的线程共享本进程的资源如内存、I/O、cpu等,但是进程之间的资源是独立的。
一个进程崩溃后,在保护模式下不会对其他进程产生影响,但是一个线程崩溃整个进程都死掉。所以多进程要比多线程健壮。
进程切换时,消耗的资源大,效率高。所以涉及到频繁的切换时,使用线程要好于进程。同样如果要求同时进行并且又要共享某些变量的并发操作,只能用线程不能用进程
执行过程:每个独立的进程程有一个程序运行的入口、顺序执行序列和程序入口。但是线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
线程是处理器调度的基本单位,但是进程不是。
两者均可并发执行。
dll动态库和lib静态库,
dll动态库和lib静态库详解
静态库的特点:
1、使