
C++面试题/笔试题
文章平均质量分 64
收集的一些C++面试题/笔试题,都是些命中率很高的问题,就算不去换工作,拿来练手也是不错的。
草上爬
专注技术,热爱分享
展开
-
C++笔试题之实现一个定时器
C++面试题之实现一个定时器。1.执行定时任务的时,主线程不阻塞,所以timer必须至少持有一个线程用于执行定时任务2.考虑到timer线程资源的合理利用,一个timer需要能够管理多个定时任务,所以timer要支持增删任务,通过容器储存任务3.当timer空闲时(即没有任务或执行任务的时刻未到),timer中的线程不应该空转来占用资源,可通过条件变量实现4.支持重复任务和非重复任务原创 2024-11-03 15:16:57 · 1765 阅读 · 0 评论 -
C++面试题之判断一个变量是不是指针
C++面试题之判断一个变量是不是指针原创 2024-07-20 01:23:32 · 1433 阅读 · 1 评论 -
两个不错的LeeCode专栏
两个不错的LeeCode专栏:LeetCode 热题 HOT 100LeetCode 精选 TOP 面试题原创 2023-02-13 12:52:48 · 2089 阅读 · 1 评论 -
C++笔试题之实现单链表两两反转(置换)
两两反转单链表就是把每两个数反转一次。如:A -> B -> C ->D -> E -> F两两反转后变为 B -> A -> D ->C -> F -> E。具体代码如下:#include <iostream>using namespace std;struct Node{ int data; Node...原创 2018-05-18 13:22:39 · 3190 阅读 · 0 评论 -
C++笔试题之约瑟夫问题(破冰游戏)
C++笔试题之约瑟夫问题(破冰游戏):编号为 1 到 n 的 n 个人围成一圈。从编号为 1 的人开始报数,报到 m 的人离开。下一个人继续从 1 开始报数。n-1 轮结束以后,只剩下一个人,问最后留下的这个人编号是多少?原创 2016-10-27 14:43:58 · 3174 阅读 · 1 评论 -
C++笔试题之LRU Cache原理和实现
C++笔试题之LRU Cache原理和实现LeetCode上有着样一道题目:Design and implement a data structure for Least Recently Used (LRU) cache. It should support the following operations: get and set.get(key) - Get the value (will always be pos原创 2017-12-12 17:14:59 · 24875 阅读 · 2 评论 -
C++面试题之线程安全与可重入
线程安全是一种适用于多线程代码的计算机编程概念。线程安全代码仅以确保所有线程正常运行并满足其设计规范的方式操作共享数据结构,而无需意外交互。有多种策略可用于创建线程安全的数据结构。程序的多个线程可以再共享地址空间中同时执行代码,其中这些线程中的每一个都可以访问其他线程的几乎所有内存。线程安全是一种属性,它允许代码在多线程环境中运行,方法是通过同步重新建立实际控制流与程序文本之间的一些对应关系。也就是说,线程安全问题是由于线程之间存在临界资源(内存映射是共享的),从而引出诸如临界区、互斥/竞争访问的概念。原创 2022-08-05 21:33:30 · 2876 阅读 · 0 评论 -
C++笔试题之回旋(螺旋)矩阵
回旋矩阵,顾名思义,就是从外圈数字由小到大旋转到内圈的N阶矩阵。2阶回旋矩阵1 24 33阶回旋矩阵1 2 3 8 9 4 7 6 54阶回旋矩阵 1 2 3 412 13 14 5 11 16 15 6 10 9 8 7一.对称分析法N阶矩阵,意味着从外至内一共有N/2向下取整个空心矩阵,比如4阶矩阵,就由内外两个子矩阵组成...原创 2018-05-17 17:16:50 · 11391 阅读 · 0 评论 -
C++笔试题之回文数的判断
C++笔试题之回文数的判断。“回文”是指正读反读都能读通的句子,它是古今中外都有的一种修辞方式和文字游戏,如“我为人人,人人为我”等。在数学中也有这样一类数字有这样的特征,成为回文数(palindrome number)。 设n是一任意自然数。若将n的各位数字反向排列所得自然数n1与n相等,则称n为一回文数。例如,若n=1234321,则称n为一回文数;但若n=1234567,则n不是回文数。 注意:1.偶数个的数字也有回文数1244212.小数没有回文数原创 2023-12-05 13:14:08 · 2656 阅读 · 0 评论 -
C++笔试题之利用二级指针删除单向链表
C++笔试题之利用二级指针删除单向链表原创 2018-01-13 10:59:35 · 1968 阅读 · 2 评论 -
C++面试题之为什么不能多线程直接操作GUI状态
因为多线程操作一个UI,很容易导致反向加锁和死锁问题。本文来自Sun 副总裁Graham Hamilton,原创 2017-11-17 09:39:43 · 2096 阅读 · 0 评论 -
C++笔试题之memcpy和memmove的实现
memcopy和memmove函数在linux下看了一下两个函数的源码。两个函数都在头文件string.h中定义,函数原型为:void * __cdecl memcpy ( void * dst,const void * src,size_t count);void * __cdecl memmove ( void * dst,const void * src,size_t count);实现代码...原创 2018-01-30 09:03:21 · 3315 阅读 · 1 评论 -
C++面试题之虚函数(表)实现机制
大家都应该知道C++的精髓是虚函数吧? 虚函数带来的好处就是: 可以定义一个基类的指针, 其指向一个继承类, 当通过基类的指针去调用函数时, 可以在运行时决定该调用基类的函数还是继承类的函数. 虚函数是实现多态(动态绑定)/接口函数的基础. 可以说: 没有虚函数, C++将变得一无是处!既然是C++的精髓, 那么我们有必要了解一下她的实现方式吗? 有必要! 既然C++是从C语言的基础上发展而来...原创 2018-04-27 20:01:25 · 11326 阅读 · 21 评论 -
C++面试题之浅拷贝和深拷贝的区别
先考虑一种情况,对一个已知对象进行拷贝,编译系统会自动调用一种构造函数——拷贝构造函数,如果用户未定义拷贝构造函数,则会调用默认拷贝构造函数。 先看一个例子,有一个学生类,数据成员时学生的人数和名字:#include <iostream> using namespace std;class Student{private: int num; c...原创 2018-02-01 12:15:06 · 53456 阅读 · 23 评论 -
C++笔试题之两个线程轮流(交替)打印A和B
这里使用C++11的线程语法来实现,一个线程打印A,一个线程打印B,交替进行。#include <thread>#include <iostream>#include <mutex>#include <condition_variable>std::mutex data_mutex;std::condition_variable data...原创 2018-05-21 16:28:02 · 12816 阅读 · 1 评论 -
C++笔试题之颜色分类问题(荷兰国旗问题)
本题是经典的“荷兰国旗问题”,由计算机科学家 Edsger W. Dijkstra 首先提出。给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums ,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。我们使用整数 0、1 和 2 分别表示红色、白色和蓝色。必须在不使用库内置的 sort 函数的情况下解决这个问题。输入:nums = [2,0,2,1,1,0]输出:[0,0,1,1,2,2]输入:nums = [2,0,1]输出:[0,1,2]原创 2018-03-08 11:30:44 · 2044 阅读 · 1 评论 -
C++笔试题之用数组实现队列
队列是一个有序列表,可以用数组或是链表来实现。遵循先入先出的原则。即:先存入队列的数据,要先取出。后存入的要后取出原创 2022-11-14 08:04:39 · 2070 阅读 · 0 评论 -
C++面试题之list和vector的区别
1.vector数据结构 vector和动态数组类似,拥有一段连续的内存空间,并且起始地址不变。因此能高效的进行随机存取,时间复杂度为o(1);但因为内存空间是连续的,所以在进行插入和删除操作时,会造成内存块的拷贝,时间复杂度为o(n)。2.list数据结构 list是由双向链表实现的,因此内存空间是不连续的。只能通过指针访问数据,所以list的随机存取非常没有效率,时间复...原创 2018-04-25 20:24:22 · 5099 阅读 · 0 评论 -
C++面试题之双重检查锁定模式(DCLP)的风险
当你在网上搜索设计模式的相关资料时,你一定会找到最常被提及的一个模式:单例模式(Singleton)。然而,当你尝试在项目中使用单例模式时,一定会遇到一个很重要的限制:若使用传统的实现方法(我们会在下文解释如何实现),单例模式是非线程安全的。程序员们为了解决这一问题付出了很多努力,其中最流行的一种解决方法是使用一个新的设计模式:双重检查锁定模式(DCLP)[13, 14]。设计DCLP的目的在于在共享资源(如单例)初始化时添加有效的线程安全检查功能。但DCLP也存在一个问题:它是不可靠的。翻译 2016-10-01 11:23:44 · 1988 阅读 · 0 评论 -
C++面试题之字节序—大端和小端
1.字节序 简单点说,就是字节的存储顺序,如果数据都是单字节的,那怎么存储无所谓了,但是对于多字节数据,比如int,double等,就要考虑存储的顺序了。注意字节序是硬件层面的东西,对于软件来说通常是透明的。也就是说,字节序通常只和你使用的处理器架构有关,而和编程语言无关,比如常见的Intel x86系列就是小端序。2.大端(Big-Endian) 数据高位原创 2016-04-24 16:50:59 · 2441 阅读 · 1 评论 -
C++笔试题之String类的实现
C++笔试题之String类:在这个类中包括了指针类成员变量m_data,当类中包括指针类成员变量时,一定要重载其拷贝构造函数、赋值函数和析构函数,这既是对C++程序员的基本要求,也是《Effective C++》中特别强调的条款。访问限制标号是针对类而不是针对一个类的不同对象,一个类的成员函数可以访问这个类的私有成员,即使这个私有成员在同类型的其它实例对象中。仔细学习这个类,特别注意加注释的得分点和加分点的意义,这样就具备了60%以上的C++基本功!拷贝构造函数和赋值函数为何可以调用引用参数对象的私有成员原创 2016-05-29 09:12:17 · 20310 阅读 · 6 评论 -
C++笔试题之实现单链表反转
链表反转在面试中经常容易被问及,比如:输入 1 2 3 4 5 6 7 8 9 10输出 10 9 8 7 6 5 4 3 2 1#include using namespace std;struct Node{ int data; Node* next;};void Display(Node *head)// 打印链表{ if (head == NULL)原创 2018-02-01 15:39:58 · 2516 阅读 · 0 评论 -
C++笔试题之最长不含重复的子字符串
题目描述给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。提示:s 由英文字母、数字、符号和空格组成。原创 2018-04-03 12:29:52 · 8046 阅读 · 1 评论 -
C++笔试题之求完全二叉树叶子节点数
C++笔试题之求完全二叉树叶子节点数:一、树的定义树是一种数据结构,它是由n(n>=1)个有限结点组成一个具有层次关系的集合。树具有的特点有:(1)每个结点有零个或多个子结点(2)没有父节点的结点称为根节点(3)每一个非根结点有且只有一个父节点(4)除了根结点外,每个子结点可以分为多个不相交的子树。树的基本术语有:若一个结点有子树,那么该结点称为子树根的“双亲”,子树的根称为该结点的“孩子”。有相同双亲的结点互为“兄弟”。一...原创 2018-04-26 17:14:55 · 23083 阅读 · 5 评论 -
C++笔试题之n阶楼梯问题:每次只能走1阶或2阶,有多少种方法走完
n阶楼梯问题:每次只能走1阶或2阶,有多少种方法走完。方法一:采用递归的方式方法二:采用非递归的方式原创 2022-11-15 11:59:13 · 5320 阅读 · 0 评论 -
C++笔试题之字节对齐
struct的对齐问题是由一道笔试题想到的,笔试题如下:#include using namespace std;typedef union student{ char name[10]; long sno; char sex; float score [4];} STU;void main (){ STU a[5]; cout <<原创 2018-04-24 17:35:54 · 2439 阅读 · 0 评论 -
C++笔试题之二叉树的镜像
关于二叉树定义可参考:https://blog.youkuaiyun.com/caoshangpa/article/details/80096466题目:请完成一个函数,输入一个二叉树,该函数输出它的镜像。二叉树结点的定义如下:struct BinaryTreeNode { int data; BinaryTreeNode *Left; BinaryTreeNode *...原创 2018-02-08 17:06:50 · 1874 阅读 · 2 评论 -
C++笔试题之判断链表中是否有环,并计算环的长度
判断链表中是否有环最经典的方法就是快慢指针,同时也是面试官大多想要得到的答案。 快指针pf(f就是fast的缩写)每次移动2个节点,慢指针ps(s为slow的缩写)每次移动1个节点,如果快指针能够追上慢指针,那就说明其中有一个环,否则不存在环。 这个方法的时间复杂度为O(n),空间复杂度为O(1),实际使用两个指针。原理 链表存在环,则fast和s...原创 2018-05-18 14:35:31 · 6010 阅读 · 2 评论 -
C++笔试题之实现字符串反转
一.简单的反转要求不使用系统函数,不使用堆,且时间复杂度最小#include <iostream> using namespace std;//字符串反转char *strReverse(char *str){ // 判断字符是否为null或是空字符串 if (str == NULL || str == '\0') { return str; } // 定义char...原创 2018-01-30 09:27:31 · 6374 阅读 · 2 评论 -
C++面试题之TCP的三次握手与四次挥手
TCP是什么?具体的关于TCP是什么,我不打算详细的说了;当你看到这篇文章时,我想你也知道TCP的概念了,想要更深入的了解TCP的工作,我们就继续。它只是一个超级麻烦的协议,而它又是互联网的基础,也是每个程序员必备的基本功。首先来看看OSI的七层模型:我们需要知道TCP工作在网络OSI的七层模型中的第四层——Transport层,IP在第三层——Network层,ARP在第二层——Data Lin...原创 2018-04-27 14:43:53 · 2746 阅读 · 0 评论