C++面试
文章平均质量分 60
找个特立不独行的名
这个作者很懒,什么都没留下…
展开
-
C++线程池原理与实现
C++线程池与原理原创 2023-01-12 23:47:26 · 127 阅读 · 0 评论 -
C++基础知识点
1. move函数的使用2. 原子操作(性能敏感的代码,考虑原子操作或无锁算法)3. make_shared4. make_unique5. auto_ptr6. constxpr7. tuple8. 类的const成员被继承9. 泛型算法10. explicit11. unique_ptr12. GDB的调试,例如查看某地址后的多个字节的指令13. forward14. 左值和右值14.1 左值和右值的概念 在C++中,一个左值是指向一个指定内存的...原创 2021-10-26 21:05:29 · 1036 阅读 · 0 评论 -
C++多态的实现机制?虚函数表的内部实现机制?
1、什么是多态 多态性可以简单概括为“一个接口,多种行为”。 也就是说,向不同的对象发送同一个消息, 不同的对象在接收时会产生不同的行为(即方法)。也就是说,每个对象可以用自己的方式去响应共同的消息。所谓消息,就是调用函数,不同的行为就是指不同的实现,即执行不同的函数。这是一种泛型技术,即用相同的代码实现不同的动作。这体现了面向对象编程的优越性。 多态分为...翻译 2018-08-20 16:54:43 · 1664 阅读 · 0 评论 -
C++中模板类的友元重载
点击打开链接转载 2018-06-10 17:17:40 · 217 阅读 · 0 评论 -
异常处理机制专题
前言 1)异常是一种程序控制机制,与函数机制独立和互补 函数是一种以栈结构展开的上下函数衔接的程序控制系统,异常是另一种控制结构,它依附于栈结构,却可以同时设置多个异常类型作为网捕条件,从而以类型匹配在栈机制中跳跃回馈.2)异常设计目的: 栈机制是一种高度节律性控制机制,面向对象编程却要求对象之间有方向、有目的的控制传动,从一开始,异常就是冲着改变程序控制结构,以适应面向对象程序更有效地工...转载 2018-06-10 19:54:12 · 131 阅读 · 0 评论 -
C/C++基础知识点面试题
目录一、虚函数的数据结构,如何工作?二、const与define的区别?三、指针与引用的区别?四、指针与数据的区别?五、不用临时变量实现两个变量的交换七、一个C++源文件从文本到可执行文件经历的过程八、C++11新特性九、C++和C的不同十、malloc的原理十一、内存泄漏、野指针十二、static十三、union和struct十四、new与ma...翻译 2018-07-26 00:19:44 · 24937 阅读 · 1 评论 -
C/C++面试知识点总结之STL篇
目录 一、智能指针的实现1、auto_ptr2、shared_ptr3、unique_ptr4、weak_ptr二、vector的原理及实现三、deque的原理及实现四、list的原理及实现五、配置器、配接器、迭代器六、仿函数一、智能指针的实现 C++程序设计中堆内存是一个非常频繁的操作,堆内存的申请和释放都由程序员自己管理,虽然自...翻译 2018-07-26 12:49:55 · 7525 阅读 · 0 评论 -
C++面试题之数据结构和算法
目录1、String原理及实现2、链表的实现2.1、顺序链表2.2、链式表2.3、双链表2.4、循环链表3、队列3.1、顺序队列3.2、链式队列4、栈4.1、顺序栈4.2、链式栈5、二叉树5.1、二叉树的链式存储5.2、哈夫曼树6、查找算法6.1、线性表查找(顺序查找、折半查找)6.2、树表查找(二叉排序树、平衡二叉树、B-树...翻译 2018-08-05 22:18:06 · 21874 阅读 · 8 评论 -
socket编程python
https://www.cnblogs.com/zengzy/p/5107516.htmlhttps://www.cnblogs.com/aylin/p/5572104.html(python之socket编程)1、什么是socket 我们知道进程通信的方法有管道、命名管道、信号、消息队列、共享内存、信号量,这些方法都要求通信的两个进程位于同一个主机。但是如果通信双方不在...转载 2018-08-14 17:06:46 · 481 阅读 · 0 评论 -
面试之计算机网络
1、TCP与UDP?1.1、概述 传输控制协议(TCP)是一个比较复杂的协议。主要特点如下: (1)TCP是面向连接的运输层协议。也就是说,在使用TCP协议之前,需要建立TCP连接,当传输数据完毕,必须释放已经建立的TCP连接。 (2)每一条TCP连接只能是点对点的。 (3)TCP协议是可靠交付的服务。通过TCP连接传输的数据,无差错...原创 2018-08-13 11:49:38 · 1193 阅读 · 0 评论 -
操作系统
目录1、进程与线程1.1、进程模型1.2、创建进程1.3、进程终止1.4、进程状态1.5、进程实现1.6、进程同步1.7、线程模型1.8、线程实现1.9、线程同步2、进程间通信3、调度4、Windows下的内存是如何管理的?5、什么是临界区?如何解决冲突?6、分段和分页7、死锁7.1、什么是死锁?7.2、死锁产生的必...原创 2018-08-16 11:47:09 · 272 阅读 · 0 评论 -
设计模式
1、单例模式单例模式即在应用程序中一个类有且仅有一个实例的一种设计模式。单例模式保证系统中一个类只有一个实例且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。结合以上需求、编程经验,不难总结单例模式要点有三:一、某个类只能有一个实例。体现为构造函数为私有。二、必须自行创建这个实例。三、必须自行向整个应用程序系统提供这个实例。体现为供访问的接口设计为静态stati...原创 2018-08-27 09:53:22 · 201 阅读 · 0 评论 -
C++面试之Linux操作系统
1、 Linux的I/O模型介绍以及同步异步阻塞非阻塞的区别 1、IO IO(输入/输出)即数据的读取或者写入操作,通常用户进程的一个完整的IO操作包含:用户<-->内核,内核,<--->设备空间。IO有内存IO、网络IO和磁盘IO三种,我们所说的IO一般值得是后两者。Linux中进程无法直接操作IO设备,必须通过系统调用请求kern...翻译 2018-08-28 16:36:53 · 1812 阅读 · 2 评论 -
华为机试题
1、写出一个程序,接受一个十六进制的数值字符串,输出该数值的十进制字符串。(多组同时输入 )#include<iostream>using namespace std;int main(){ int a; while(cin>>hex>>a){ cout<<a<<endl; }} ...原创 2018-08-21 14:28:51 · 203 阅读 · 0 评论 -
面试题
一、360面试题1、求一个序列的最长上升子序列(不降)方法一:动态规划:,其中num[]数组中存放的是0~i的最长子序列长度#include<iostream>#define MAX 100using namespace std;//时间复杂度为O(n^2)int LIS(int a[], int n){ int num[MAX]; //用来存放对应点的最长...原创 2018-08-29 23:57:10 · 334 阅读 · 0 评论 -
C++右值引用
右值引用是C++11标准中新增的一个特性,它允许程序员可以忽略逻辑上不需要的拷贝;而且还可以用来支持实现完美转发的函数。 左值和右值的区分标准在于能否获取地址。 最早的c++中,左值的定义表示的是可以获取地址的表达式,它能出现在赋值语句的左边,对该表达式进行赋值。但是修饰符const的出现使得可以声明如下的标识符,它可以取得地址,但是没办法对其进行赋值:c...翻译 2018-09-13 16:34:02 · 278 阅读 · 0 评论 -
生产者-消费者问题
生产者-消费者问题,也称作有界缓冲区问题。两个进程共享一个公共的固定大小缓冲区,其中一个是生产者,将信息放入缓冲区;一个是消费者,从缓冲区中取出信息。问 题:当缓冲区已满,生产者还想往缓冲区放入新的数据的情况;或者缓冲区已空,消费者还想从缓冲区取数据的情况解决办法:让生产者睡眠,待消费者从缓冲区中取出一个或者多个数据时在唤醒它。同理,让消费者睡眠,直到生产者往缓冲区存入数据时将...翻译 2019-04-07 22:24:10 · 384 阅读 · 0 评论 -
为什么析构函数可以为虚函数,构造函数不能为虚函数?
虚函数采用一种虚调用的方法。虚调用是一种可以在只有部分信息的情况下工作的机制,特别允许我们调用一个只知道接口而不知道其准确对象类型的函数。但是如果创建一个对象,必须要准确知道对象的准确类型,因此构造函数不能为虚。...翻译 2018-08-20 16:55:20 · 848 阅读 · 0 评论 -
static和const区别?
const定义的常量在超出其作用域之后其空间会被释放,而static定义的静态常量在函数执行后不会释放其存储空间。 static表示的是静态的。类的静态成员函数、静态成员变量是和类相关的,而不是和类的具体对象相关的。即使没有具体对象,也能调用类的静态成员函数和成员变量。一般类的静态函数几乎就是一个全局函数,只不过它的作用域限于包含它的文件中。 在C++中,static静态成员变...转载 2018-07-15 23:04:29 · 7499 阅读 · 1 评论 -
什么是内存泄漏?怎么产生的?如何检测?
1.什么是内存泄漏(Memory Leak)? 简单地说就是申请了一块内存空间,使用完毕后没有释放掉。它的一般表现方式是程序运行时间越长,占用内存越多,最终用尽全部内存,整个系统崩溃。由程序申请的一块内存,且没有任何一个指针指向它,那么这块内存就泄露了。2、如何检测内存泄露第一:良好的编码习惯,尽量在涉及内存的程序段,检测出内存泄露。当程式稳定之后,在来检测内存泄露时,无疑增加了排除的困难和...转载 2018-07-15 23:05:00 · 15061 阅读 · 0 评论 -
strcat,strcmp,strcpy函数内部实现
#include<iostream>#include"test.h"using namespace std;//将src字符串复制到desc中char* mystrcpy(char* desc, const char* src){ if (desc == NULL || src == NULL) //内存正常判断 { return NULL; } char* str = desc; ...原创 2018-06-10 16:20:29 · 1487 阅读 · 0 评论 -
通过操作地址的方法来访问C++类对象中私有成员变量
原则上,C++类中私有变量不允许在类之外的其他任何地方访问,一般来说功能完善的类都会提供get,set方法来操作类属性值,但如果没有get、set方法都没有提供,比如使用的是第三方提供的.o(或者动态库)来进行开发的,并且实际应用中我们确确实实需要改变其中某个对象的一个私有参数,有没有什么办法呢?我们知道,一个进程有程序段和数据段,如果我们知道了对象的数据空间,那么得到该对象的成员变量值也就很简单...转载 2018-08-20 16:54:11 · 1795 阅读 · 0 评论 -
八大排序算法
前言不管是提高自身的能力,还是面试,八大排序都是很重要的一个知识点,所以理解并实践实现是很有必要的,以下给出算法思想与代码实现,并且进行运行时间测试八大排序的效率。时间复杂度对比图先看下对于算法时间复杂度的对比: 冒泡排序冒泡排序是一种简单的排序算法。主要思想是顺序的比较相邻的两个数,如果符合比较条件就替换两个数,做法可以从后往前推,也可以从前往后推,每次推出当前长度的最大值,...转载 2018-08-20 16:56:41 · 714 阅读 · 0 评论 -
虚函数与纯虚函数的区别
虚函数(impure virtual) C++的虚函数主要作用是“运行时多态”,父类中提供虚函数的实现,为子类提供默认的函数实现。 子类可以重写父类的虚函数实现子类的特殊化。 如下就是一个父类中的虚函数:class A{public: virtual void ss() { cout<<"我是基类的虚函数"<<e...转载 2018-08-20 16:54:24 · 167 阅读 · 1 评论 -
介绍一下STL和包容器,如何实现?举例实现vector。
C++一个新特性就是采用了标准模板库。所有主要编译器销售商现在都把标准模板库作为编译器的一部分进行提供。标准模板库是一套基于模板的容器类库,包括链表、列表、队列和堆栈。标准模板库还包含许多常用的算法,包括排序和查找。 标准模板库的目的是提供对常用需求进行重新开发。已经经过测试和调试,具有高性能并且免费。更重要的是,他是可重用的。#include<iostream&...翻译 2018-07-15 23:04:48 · 515 阅读 · 0 评论 -
泛型编程
问题:1、什么是泛型编程?泛型编程和C++以及STL的关系是什么?你是怎样的在C++上面进行泛型编程的? 泛型编程是一种基于发现高效算法的最抽象表示的编程方法。也就是说,以算法为起点并寻找能使其工作且高效工作的最一般的必要条件集。很多不同的算法都需要相同的必要条件集,并且这些必要条件需要很多种不同的实现方式。STL是一个泛型编程的例子。C++是实现例子的语言。...翻译 2018-08-20 16:56:25 · 151 阅读 · 0 评论 -
试用多态实现线性表(队列,串,堆栈)
队列,串,堆栈都可以实现push,pop,测长等操作,用多态实现,就是建立一个线性表的共性模板#include<iostream>using namespace std;//试用多态实现线性表(队列、串、堆栈)template<typename T>struct tcontainer{ virtual void push(const T&) = 0;...翻译 2018-07-15 23:05:36 · 276 阅读 · 0 评论 -
用两个栈来实现一个队列。分别完成在队列尾部插入节点和在队列头删除节点(剑指offer)
用两个先进后出的栈实现一个先进先出的队列。思路:往stack1中插入元素,由于栈的性质,最先进的元素放最下,后进元素在上面,因此,当我们要删除元素时,就必须把上面的元素放到stack2中,放到stack2中的元素刚好是放入的顺序,因此可以直接删除。因此,在删除操作时,我们先判断stack2是否为空,不为空,直接pop()元素就删除了,如果为空,则将stack1的元素全部放stack2中,注意的...转载 2018-08-20 16:56:54 · 797 阅读 · 0 评论 -
一只青蛙一次可以跳1级台阶,也可以跳两级,跳上一个n级台阶有多少种方法?
如果0级台阶,则是0种方法;一级台阶则是一种方法;两级台阶则是两种方法;当n >2 时,第一次跳的时候有两种不同的方式:一是跳一级,此时跳法数目等于后面剩下的n-1级台阶的跳法数目,f(n-1);另外一种是第一次跳两级,此时跳法数目为后面剩下的n-2级台阶的跳法数目,即为f(n-2),即总数目为f(n) = f(n-1) + f(n-2);用循环从前往后加。...转载 2018-07-15 23:05:12 · 4174 阅读 · 0 评论 -
哪一种成员变量可以在同一个类的实例之间共享?
必须使用静态成员变量在一个类的所有实例间共享数据。如果想限制对静态成员变量的访问,则必须把它们声明为保护型和私有型。不允许用静态变量去存放某一个对象的数据。静态成员数据是在这个类的所有对象间共享的。...翻译 2018-08-20 16:55:49 · 4941 阅读 · 0 评论 -
C++和C的区别
C/C++的联系:C++是C的超集,兼容大部分C的语法的结构; C/C++区别: 第一点就应该想到C是面向过程的语言,而C++是面向对象的语言,一般简历上第一条都是熟悉C/C++基本语法,了解C++面向对象思想,那么,请问什么是面向对象? C和C++动态管理内存的方法不一样,C是使用malloc/free函数,而C++除此之外还有new/delete关键字;(关于malooc...转载 2018-08-20 16:56:14 · 481 阅读 · 0 评论 -
指针与引用的区别?
指针和引用的区别1.指针有自己的一块空间,而引用只是一个别名; 2.使用sizeof看一个指针的大小是4,而引用则是被引用对象的大小; 3.指针可以被初始化为NULL,而引用必须被初始化且必须是一个已有对象 的引用; 4.作为参数传递时,指针需要被解引用才可以对对象进行操作,而直接对引 用的修改都会改变引用所指向的对象; 5.可以有const指针,但是没有const引用; 6.指针在使用中...转载 2018-08-20 16:53:49 · 177 阅读 · 0 评论 -
悬空指针和野指针有什么区别?
当所指向的对象被释放或者收回,但是对该指针没有作任何的修改,以至于该指针仍旧指向已经回收的内存地址,此情况下该指针便称迷途指针。迷途指针经常出现在混杂使用malloc() 和 free() 库调用: 当指针指向的内存释放了,这时该指针就是迷途的。 野指针指的是还没有初始化的指针。严格地说,编程语言中每个指针在初始化前都是野指针。...转载 2018-08-12 19:19:19 · 3029 阅读 · 0 评论 -
memcpy,memset内部函数实现
#include<iostream>using namespace std;/*memcpy函数用于资源内存(src指向的内存)拷贝到目标内存(desc指向的内存);拷贝的个数size用法::(1)可以拷贝任何类型的对象,因为函数的参数类型是void* ,由于函数拷贝是一个字节一个 字节拷贝,实际操作是将void*强制转换成了char*,这样才能保证每一次加一个指针*///实...翻译 2018-06-07 14:19:53 · 1671 阅读 · 1 评论