![](https://img-blog.csdnimg.cn/20190918140129601.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
C++(面试&笔试)
。
进击的黑子
JMU-IT
展开
-
排序算法-总分析
一、排序算法分类所谓排序,是整理表中的记录,使之按关键字递增(或递减)有序排列,排序数据中可以存在相同关键字的记录。本文仅考虑递增排序。常见有以下几种内排序算法:二、排序算法分析(可以点对应排序名链接进入查看详细分析)排序方法时间复杂度(平均)时间复杂度(最坏)时间复杂度(最好)空间复杂度稳定性直接插入排序O(n2)O(n2)O(n)O(1)稳定...原创 2020-03-19 03:37:36 · 228 阅读 · 0 评论 -
常见面试题(总结)- 数据库
一、索引的概念索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。如果想按特定职员的姓来查找他或她,则与在表中搜索所有的行相比,索引有助于更快地获取信息。索引的一个主要目的就是加快检索表中数据,亦即能协助信息搜索者尽快的找到符合限制条件的记录ID的辅助数据结构。例如这样一个查询:select * from table1 where id=10000。...原创 2020-02-19 15:54:20 · 415 阅读 · 0 评论 -
常见面试题(总结)- Linux/系统
C++工程师常见面试题-Linux/系统1.进程和线程的区别参考链接进程是程序执行时的一个实例。程序运行时系统就会创建一个进程并且为它分配资源,进程是资源分配的最小单位。进程由内存空间(代码、数据、进程空间、打开的文件)和一个或多个线程组成线程是程序执行的最小单位,它是进程的一个执行流。一个进程可以由很多个线程组成,各个线程之间共享程序的内存空间(也就是所在进程的内存空间),一个标准的线...原创 2020-02-16 19:21:08 · 1006 阅读 · 0 评论 -
常见面试题(总结)- 网络基础
C++工程师常见面试题-网络1.TCP和UDP的区别与其适用场景TCP协议头:UDP协议头:IP协议:区别:1.面向连接VS无连接TCP是面向连接的协议,也就是说,在收发数据前,必须和对方建立可靠的连接。一个TCP连接必须要经过三次“对话”才能建立。UDP是一个非连接的协议,传输数据之前源端和终端不建立连接,当它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到...原创 2019-10-20 11:53:50 · 311 阅读 · 0 评论 -
常见面试题(总结)- C++基础
C++工程师常见面试题-C++基础1.C和C++的区别和联系?C是一个结构化语言,它的重点在于算法和数据结构。对语言本身而言,C是C++的子集。而在C++相对于原来的C还有所加强,引入了对象和类的概念C程序的设计首要考虑的是如何通过一个过程,对输入进行运算处理得到输出。对于C++,首要考虑的是如何构造一个对象模型,让这个模型能够配合对应的问题,这样就可以通过获取对象的状态信息得到输出或实现...原创 2019-10-19 21:13:24 · 415 阅读 · 0 评论 -
手撕代码-二叉搜索树 节点的删除
手撕代码-二叉搜索树 节点的删除考虑三种情况:1.要删除的是叶节点:直接删除,并在修改其父节点的指针为NULL。2.要删除的节点只有一个孩子节点:将其父节点的指针指向要删除节点的孩子节点。3.要删除的节点有左、右两棵子树:用另一节点替代被删除节点:右子树的最小元素或左子树的最大元素。完整代码如下:/** * Definition for a binary tree node. ...转载 2020-03-21 22:40:09 · 178 阅读 · 0 评论 -
哈希表原理
什么是哈希?我们常常都能听到一些名词,哈希表、哈希函数、哈希冲突、哈希算法、一致性哈希,那么这些到底是什么鬼?首先我们要明白哈希的由来,为什么会有这个东西:我们通常查找数据的方式有很多种,例如使用树,它们的查找都是先从根节点进行查找,从节点取出数据或索引与查找值进行比较,等等有很多方式,那么,有没有一种函数H,根据这个函数和查找关键字key,可以直接确定查找值所在位置,而不需要一个个比较。这...原创 2020-03-21 17:49:06 · 489 阅读 · 0 评论 -
剑指offer常见面试题(思路)
剑指offer常见面试题(思路)1.判断两个单向链表是否相交,如果相交,求出交点判断两个单向链表是否相交?判断两个链表的最后一个节点是否相同求相交链表的节点:暴力解决:在第一个链表上顺序遍历每一个节点,每遍历到一个节点,就在第二个链表上顺序遍历每个节点。如果在第二个链表上有一个节点与第一个链表上的节点一样,则说明两个链表在这个节点上重合,于是就找到了他们的公共节点。简便解法:首先遍历...原创 2020-02-27 23:14:54 · 599 阅读 · 0 评论 -
排序算法-归并排序
归并排序归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。思路:归并排序法首先将这个数据分成一半(左右两边) 然后想办法把左边的数组给排序,右边的数组给排序,之后呢再将它们归...转载 2020-03-19 02:50:19 · 270 阅读 · 0 评论 -
排序算法-基数排序
基数排序基数排序(Radix Sort)是桶排序的扩展,它的基本思想是:将整数按位数切割成不同的数字,然后按每个位数分别比较。(桶排序可以参考:我的另一篇博客)具体做法是:将所有待比较数值统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序。这样从最低位排序一直到最高位排序完成以后, 数列就变成一个有序序列。通过基数排序对数组{53, 3, 542, 748, 1...原创 2020-03-19 02:19:52 · 299 阅读 · 0 评论 -
排序算法-桶排序
桶排序桶排序(Bucket Sort)的原理很简单,它是将数组分到有限数量的桶子里。假设待排序的数组data中共有N个整数,并且已知数组data中数据的范围[0, MAX)。在桶排序时,创建容量为MAX的桶数组buckets,并将桶数组元素都初始化为0;将容量为MAX的桶数组中的每一个单元都看作一个"桶"。在排序时,逐个遍历数组data,将数组data的值,作为"桶数组buckets"的下标。...原创 2020-03-18 22:28:55 · 333 阅读 · 1 评论 -
排序算法-堆排序
堆排序堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。首先简单了解下堆结构。堆(数据结构)堆(Heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵完全二叉树的数组:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆...原创 2020-03-18 17:37:11 · 653 阅读 · 0 评论 -
排序算法-简单选择排序
简单选择排序思路:每一轮从无序区中选出一个最小的数放入全局有序区,经过n-1轮,最后一个数已然是最大值,排序完成。代码分析:/*简单选择排序思路:每一轮从无序区中选出一个最小的数放入全局有序区,经过n-1轮,最后一个数已然是最大值,排序完成。*/#include <stdio.h>void select_sort(int data[],int n){ i...原创 2020-03-18 15:16:34 · 331 阅读 · 0 评论 -
排序算法-希尔排序
参考:https://blog.csdn.net/qq_39207948/article/details/80006224希尔排序希尔排序是直接插入排序的改进,传统的之间插入排序对小规模数据或是基本有序数据时十分高效,而希尔排序对于直接插入排序的改进使其对于中等规模的数据的性能表现还不错。希尔排序思路:把较大的数据集合分割成若干个小组(逻辑上分组),然后对每一个小组分别进行插入排序,此时,...原创 2020-03-18 14:10:08 · 482 阅读 · 0 评论 -
排序算法-冒泡排序(改进)
冒泡排序(改进)冒泡排序的排序思路是:通过无序区的相邻元素的比较和位置的交换,使最大的元素往上移动每一轮排序选出无序区的最大的元素,加入有序区中不止可以得到升序排序,稍微改变下交换逻辑也可以得到降序排序冒泡排序算法参考我的另一篇博客:链接冒泡排序存在的问题:假如我们运气好,用了1轮就已经将整个序列排序好了,整个数列已然是有序的了。可是我们的排序算法仍然“兢兢业业”地继续执行第2轮...原创 2020-03-15 13:54:02 · 3346 阅读 · 1 评论 -
排序算法-冒泡排序
冒泡排序一、概述冒泡排序的排序思路是:通过无序区的相邻元素的比较和位置的交换,使最大的元素往上移动每一轮排序选出无序区的最大的元素,加入有序区中不止可以得到升序排序,也可以得到降序排序二、举例详解例如,对无序表{49,38,65,97,76,13,27,49}进行升序排序的具体实现过程如图 1 所示:图 1 第一次起泡由于 97 已经判断为最大值,所以第二次冒泡排序时就需要...原创 2019-08-25 17:18:58 · 279 阅读 · 0 评论 -
排序算法-快速排序
快速排序一、简述快速排序的排序思路是:从待排序的集合中,选出一个基准 temp(通常选择第一个元素)每一趟排序,从区间两端交替向中间扫描,每个元素和基准 temp比较,将要排序的数据分割成独立的两部分,其中一部分的所有数据比基准 temp 都来的大另外一部分的所有数据基准 temp 都要小然后再按此方法对这两部分数据分别进行 快速排序整个排序过程可以递...原创 2019-08-25 23:39:46 · 316 阅读 · 0 评论 -
排序算法-折半插入排序
折半插入排序一、概述折半(二分)插入排序是一种在直接插入排序算法上进行小改动的排序算法。其与直接排序算法最大的区别在于查找插入位置时使用的是二分查找的方式,在速度上有一定提升。但是,在查找二分点的时间上的时间损耗,导致了这个算法并不能比直接插入排序优秀多少,除非你有十分确切的数据大小和随机访问迭代器。折半插入排序的排序思路是:顺序地把待排序的序列中的各个元素按其关键字的大小,通过折半查找...原创 2019-08-26 11:43:01 · 3728 阅读 · 0 评论 -
排序算法-直接插入排序
直接插入排序一、概述直接插入排序的排序思路是:每次将一个待排序的元素与已排序的元素进行逐一比较,直到找到合适的位置按大小插入。初学者所说的插入排序,实际上指的就是直接插入排序算法,插入排序算法还包括折半插入排序、2-路插入排序,表插入排序和希尔排序等二、举例详解例如采用直接插入排序算法将无序表{3,1,7,5,2,4,9,6}进行升序排序的过程为:首先考虑记录 3 ,由于插入排序刚...原创 2019-08-25 15:52:00 · 1274 阅读 · 0 评论 -
时间复杂度和空间复杂度
时间复杂度和空间复杂度一、说明时间复杂度和空间复杂度是用来评价算法效率高低的2个标准,身为开发者肯定会经常会听到这2个概念,但它们分别是什么意思呢?其实这两个概念从字面意思上也能看出一二:时间复杂度:就是说执行算法需要消耗的时间长短,越快越好。比如你在电脑上打开计算器,如果一个普通的运算要消耗1分钟时间,那谁还会用它呢,还不如自己口算呢。空间复杂度:就是说执行当前算法需要消耗的存储空间...转载 2020-03-15 01:13:52 · 222 阅读 · 0 评论 -
面试题-epoll的水平触发和边缘触发
epoll的水平触发和边缘触发前言:select(),poll()模型都是水平触发模式,信号驱动IO是边缘触发模式,epoll()模型即支持水平触发,也支持边缘触发,默认是水平触发从表象看epoll的性能最好,但是在连接数少,并且连接都十分活跃的情况下,select和poll的性能可能比epoll好,毕竟epoll的通知机制需要很多回调函数来完成。epoll工作在两种触发模式下:Le...原创 2020-02-28 19:50:36 · 2208 阅读 · 0 评论 -
面试题-TCP协议如何保证可靠传输
TCP协议如何保证可靠传输1.校验和tcp报头中有对应的检验和字段,发送的数据包的二进制相加然后取反,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP将丢弃这个报文段和不确认收到此报文段。2.序列号和确认应答TCP给发送的每一个包进行编号(序列号依次递增),接收方对数据包进行排序,把有序数据传送给应用层。接收方收到报文就会确认(累积确认:对所有按序接收的数据的确认...原创 2020-02-28 15:40:16 · 1867 阅读 · 0 评论 -
面试题-内存泄漏
1. 什么是内存泄漏内存泄漏:指因为疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并不是指内存在物理上的消失,而是应用程序分配某段内存后,因为设计错误,失去了对该段内存的控制,因而造成了内存的浪费。2. 内存泄漏分类C/C++程序中一般我们关心两种方面的内存泄漏:·堆内存泄漏(Heap leak)堆内存指的是程序执行中依据须要分配通过malloc / calloc / re...原创 2020-02-17 00:18:34 · 1549 阅读 · 0 评论 -
面试题-堆和栈的区别
堆和栈的区别在计算机领域,堆栈是一个不容忽视的概念,我们编写的C语言程序基本上都要用到。但对于很多的初学着来说,堆栈是一个很模糊的概念。堆栈:一种数据结构。一个在程序运行时用于存放的地方。数据结构的栈和堆栈是一种具有后进先出性质的线性表的数据结构,也就是说后存放的先取,先存放的后取。这就如同我们要取出放在箱子里面底下的东西(放入的比较早的物体),我们首先要移开压在它上面的物体(放入...原创 2020-02-17 00:09:48 · 4049 阅读 · 0 评论 -
面试题-strcpy和memcpy的区别
strcpy和memcpy的区别strcpy和memcpy都是标准C库函数,它们有下面的特点:strcpy提供了字符串的复制。即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符。memcpy提供了一般内存的复制。即memcpy对于需要复制的内容没有限制,因此用途更广。strcpy函数实现:char * strcpy(char * dest, cons...原创 2020-02-16 22:58:37 · 327 阅读 · 0 评论 -
面试题-如何找出单链表的倒数第k个节点
面试题-如何找出单链表的倒数第k个节点如何找出单链表中的倒数第k个元素1、为了找出倒数第k个元素,最容易想到的办法是首先遍历一遍单链表,求出整个单链表的长度n,然后将倒数第k个,转换为正数第n-k个,接下来遍历一次就可以得到结果。但是该方法存在一个问题,即需要对链表进行两次遍历,第一次遍历用于求解单链表的长度,第二次遍历用于查找正数第n-k个元素。2、显然,这种方法还可以进行优化。于是想到了...原创 2019-11-09 11:08:58 · 1037 阅读 · 0 评论 -
手撕代码-斐波那契数列的第n项
斐波那契数列的第n项【面试题】输入一个整数n,求斐波那契数列的第n项值 (使用递归和非递归求解)#include "stdio.h"//递归int fibonacci_1(int n) { if (n==1 || n == 2) { return 1; } else { return fibonacci_1(n-1) + fibonacci_1(n-2); }}//非递...原创 2019-09-03 16:05:22 · 281 阅读 · 0 评论 -
笔试题-子串模糊匹配
子串模糊匹配从字符串string开始完整匹配子串sub,返回匹配到的字符个数。sub中如果出现’?‘表示可以匹配一到三个除’\0’以外的任意字符。如果sub还有找不到匹配的字符,则说明不能完整匹配。如果能完整匹配,返回匹配到的字符个数,如果有多种匹配方式,返回匹配字符数最少的那个,如果不能完整匹配,返回-1输入描述:第一行输入字符串string,长度小于10000第二行输入子串sub...原创 2020-02-13 00:42:29 · 991 阅读 · 1 评论 -
面试经典算法-将大于2的某一个数分解成两个素数之和
将大于2的某一个数分解成两个素数之和【面试题】输入一个大于2的偶数n,将n分解成为两个素数之和,有几对就输出几对。(注意 :1 不是素数)#include <stdio.h>/*子算法,判断整数n是否是素数,是素数则返回1,不是则返回0*/int isPrime(int n){ int i; for(i=2;i<n;i++) { ...原创 2019-09-03 16:15:46 · 5395 阅读 · 1 评论 -
面试经典算法-计算一年中的第几天
计算一年中的第几天【面试题】输入某年某月某日,计算这一天是这一年的第几天#include "stdio.h"int getDays(int year ,int month,int date){ int months[13]={0,31,0,31,30,31,30,31,31,30,31,30,31} ,i,days=0; if((year % 4 == 0 &...原创 2019-09-03 16:26:43 · 1348 阅读 · 0 评论 -
面试经典算法-寻找丑数
寻找丑数【面试题】我们把只含有因子2,3,5的数称为丑数(除了 1和他本身),例如 6 ,8都是丑数,而14不是丑数,因为他含有因子 7,通常把1也当做丑数,编程求出1500以内的所有丑数。#include "stdio.h"int isUglyNumber(int number){ while(number % 2 == 0) { number /= 2;...原创 2019-09-03 18:51:16 · 273 阅读 · 0 评论 -
面试经典算法-分解质因数
分解质因数【面试题】众所周知,任何一个合数都可以写成几个质数相乘的形式,这几个质数叫做这个合数的质因子,例如 24 = 2 x 2 x 2 x 3 ,对于一个质数他的质因子可以定义为他的本身。请编写一个程序实现分解质因子。【注意】质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;否则称为合数。#include "stdio.h"//判断是否是质数 i...原创 2019-09-03 19:22:39 · 503 阅读 · 0 评论 -
面试经典算法-上楼梯问题
上楼梯问题【面试题】已知楼梯有20阶台阶,上楼可以一步上 1 阶,也可以一步上 2 阶,请编写一个函数计算一种有多少上楼梯的方式。#include "stdio.h"#include "math.h"#define MAX_STEPS 20 /*定义20个台阶的楼梯*/int Steps[MAX_STEPS] = {0}; /*Steps[i]等于1或者2,记录第i步登上的台阶数...原创 2019-09-03 20:38:49 · 2250 阅读 · 0 评论