面试题
文章平均质量分 73
森明帮大于黑虎帮
记录学习过程,分享学习心得,欢迎学习交流!
展开
-
【C/C++面试必备】详解C/C++中volatile关键字
一、volatile简介二、volatile易变的三、volatile不可优化的四、volatile顺序执行的五、volatile与原子性六、volatile 的作用是什么呢1.修饰普通变量2.修饰指针3.作为函数参数七、volatile的介绍八、volatile的含义1.不会在两个操作之间把volatile变量缓存在寄存器中2.不做常量合并、常量传播等优化3.对volatile变量的读写不会被优化掉九、编译器优化 → C关键字volatile → memory破坏描述符1.编原创 2022-07-21 12:32:17 · 2900 阅读 · 10 评论 -
void* data 数据类型参数以及void *data[ ]解释
void 在英文中作为名词的解释为 “空虚、空间、空隙”,而在 C 语言中,void 被翻译为"无类型",相应的为"无类型指针"。 似乎只有"注释"和限制程序的作用,当然,这里的"注释"不是为我们人提供注释,而是为编译器提供一种所谓的注释。void data[ ]是个什么鬼?1、先来解决形如 type name[ ]的问题。这里有一个比较实在的推断方法,指的是一个数组有48个元素,每个元素都是int类型,指的是一个数组有48个元素,每个元素都是int类型需要注意先表述元素个数再表述元素类型,这么表述的情况下原创 2022-07-11 15:03:00 · 3440 阅读 · 6 评论 -
面试题:Linux网络编程中可靠UDP,KCP协议快在哪
一、前言二、KCP简介三、KCP使用方式1.创建 KCP对象2.设置传输回调函数(如UDP的send函数)3.循环调用 update4.输入一个应用层数据包(如UDP收到的数据包)四、KCP使用方式1.工作模式2.最大窗口3.最大传输单元4.最小RTO五、KCP为什么存在六、KCP原理1.协议简介2.数据发送过程1.数据发送准备2.实际发送3.数据接收过程1.KCP数据包接收七、流量控制与拥塞控制1.RTO计算(与TCP完全一样)2.流量控制3.拥塞控制(KCP原创 2022-06-14 21:18:09 · 335 阅读 · 20 评论 -
【游戏客户端与服务器面试题】-- 2022年最新游戏客户端与服务器面试(lua篇持续更新)
【游戏客户端面试题干货】-- 2021年度最新游戏客户端面试干货(lua篇)文章目录一、Lua的8种数据类型二、pairs和ipairs的区别三、lua表常用方式(插入,删除,移动,排序)四、如何实现继承关系(__index)一、Lua的8种数据类型二、pairs和ipairs的区别三、lua表常用方式(插入,删除,移动,排序)四、如何实现继承关系(__index)...原创 2022-05-19 16:13:59 · 5839 阅读 · 45 评论 -
面试题:Https通信原理及交互流程
这个总结得比较通俗易懂,适合入门级的学习者,这个也只是https的单向认证,对于安全性要求比较高可能会使用双向认证,比如说金融行业,银行手机APP等。单向认证只是客户端还有自己的一套公私钥对,然后客户端会将自己的公钥传送给服务器端。我们知道,HTTP请求都是明文传输的,所谓的明文指的是没有经过加密的信息,如果HTTP请求被黑客拦截,并且里面含有银行卡密码等敏感数据的话,会非常危险。为了解决这个问题,Netscape 公司制定了HTTPS协议,HTTPS可以将数据加密传输,也就是传输的是密文,即便黑客在原创 2021-10-24 21:04:39 · 427 阅读 · 1 评论 -
数据库四大特性和三大范式
事务的四大特性?事务特性ACID:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚。一致性是指一个事务执行之前和执行之后都必须处于一致性状态。比如a与b账户共有1000块,两人之间转账之后无论成功还是失败,它们的账户总和还是1000。 隔离性。跟隔离级别相关,如read committed,一个事务只能读到已经提交的修改。持久性是指一个事务一旦被提交了,那么对数原创 2021-10-14 11:04:33 · 884 阅读 · 1 评论 -
面试题:每发送一个http请求就要建立一个tcp连接吗(非持久连接/持久连接)
文章目录一、非持久连接和持久连接二、TCP 连接中多个 HTTP 请求可以并行发送吗?三、一个TCP连接可以发送多少个HTTP请求问题?一、非持久连接和持久连接非持久连接:HTTP/1.0 中 的首部字段Connection 默认值为 close,即每次请求都会重新建立和断开 TCP 连接。持久连接:HTTP/1.1 中 的首部字段 Connection 默认值为 keep-alive ,连接可以复用,只要发送端、接收端都没有提出断开连接,则保持tcp连接状态。http1.1中,所有的连接默认为原创 2021-10-14 09:45:17 · 5454 阅读 · 2 评论 -
面试题:vector和map的区别,异同。空间分布,100万数据存哪个比较合适。
文章目录一、 迭代器区别二、vector三、Map、Set四、vector_map 为什么比map效率高五、如何选择六、容器选择原则七、效率对比一、 迭代器区别①vector为顺序容器,erase迭代器不仅使所有指向被删元素的迭代器失效,而且使被删元素之后的所有迭代器失效,所以不能使用erase(iter++)的方式,但是erase的返回值为下一个有效的迭代器:可以这样使用:for( iter = c.begin(); iter != c.end(); )iter = c.erase(iter);原创 2021-10-13 11:13:40 · 5029 阅读 · 6 评论 -
面试题:PV操作底层与原理
文章目录一、基础概念二、信号量和P、V操作三、pv原语四、关于死锁的概念一、基础概念1、进程:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。2、进程PCB:系统为了管理进程设置的一个专门的数据结构,用它来记录进程的外部特征,描述进程的运动变化过程。系统利用PCB来控制和管理进程,所以PCB是系统感知进程存在的唯一标志。进程与PCB是一一对应的)。3、临界区:每个进程中访问临界资源的那段程原创 2021-10-10 08:57:56 · 1042 阅读 · 4 评论 -
面试题:shell脚本编程中grep、sed、awk命令详解
文章目录一、grep的使用二、sed的使用三、awk的使用grep、sed和awk都是文本处理工具,虽然都是文本处理工具单却都有各自的优缺点。在接下来的内容中,将会详细介绍三种命令的使用。grep:grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。文本过滤器,如果仅仅是过滤文本,可使用grep,其效率比其他的高很原创 2021-10-07 15:59:01 · 1706 阅读 · 6 评论 -
动态规划(Dynamic Programming)
文章目录一、Dynamic Programming定义二、斐波那契数列三、跳台阶扩展问题四、最大连续子数组和五、背包问题1.单词拆分 (字符串分割)一、Dynamic Programming定义动态规划是分治思想的延伸,通俗一点来说就是大事化小,小事化无的艺术。在将大问题化解为小问题的分治过程中,保存对这些小问题已经处理好的结果,并供后面处理更大规模的问题时直接使用这些结果。 动态规划具备了以下三个特点:把原来的问题分解成了几个相似的子问题。所有的子问题都只需要解决一次。储存子问题的解。原创 2021-10-06 16:25:18 · 893 阅读 · 4 评论 -
面试题:数组和顺序表链表的区别
文章目录一、数组(Array)1.数组特点2.数组优点3.数组缺点二、链表(ListNode)1.链表的特点:2.链表的优点3.链表的缺点三、数组、链表总结一、数组(Array)1.数组特点所谓数组,就是相同数据类型的元素按一定顺序排列的集合;数组的存储区间是连续的,占用内存比较大,故空间复杂的很大。但数组的二分查找时间复杂度小,都是O(1);数组的特点是:查询简单,增加和删除困难。在内存中,数组是一块连续的区域。数组需要预留空间。在使用前需要提前申请所占内存的大小,如果提前不知道需要的空间大原创 2021-10-02 14:47:11 · 510 阅读 · 2 评论 -
面试题:C++vector的动态扩容,为何是1.5倍或者是2倍
文章目录一、概述二、 高效使用vector,避免扩容1.扩容机制回顾2.如何避免扩容导致效率低三、为什么选择以倍数方式扩容1. 以等长个数进行扩容2. 以倍数方式进行扩容3. 为什么选择1.5倍或者2倍方式扩容,而不是3倍、4倍四、Windows和Linux的扩容底层原理1.Windows扩容底层2.Linux的扩容底层五、总结一、概述在面试时vector的扩容问题会经常被问到,比如:vector是如何进行扩容的?扩容会导致效率低下,那如何避免动态扩容呢?为什么选择以1.5倍或者2倍方式进行扩容原创 2021-10-02 10:29:32 · 14293 阅读 · 12 评论 -
迭代器失效的几种情况
引言:最近自己写代码用到了删除链表中某个节点操作,因为迭代器使用不规范,造成了程序崩溃。例如,对某个迭代器解引用所获得的值并不是执行erase()前这个迭代器指向的值,还有可能对未指向任何元素的迭代器的解引用赋值而引发程序crash。类似的问题代码像这样:LeetCode第283题的一种常规解法:class Solution {public: void moveZeroes(vector<int>& nums) { int num = 0;原创 2021-09-27 11:16:53 · 1900 阅读 · 1 评论 -
Linux命令经典面试题:统计文件中出现次数最多的前10个单词
文章目录一、统计文件中出现次数最多的前10个单词二、linux文件搜索关键字并显示前后10行三、cat、grep、sed查看文件任意几行的数据一、统计文件中出现次数最多的前10个单词使用linux命令或者shell实现:文件words存放英文单词,格式为每行一个英文单词(单词可以重复),统计这个文件中出现次数最多的前10个单词。cat words.txt | sort | uniq -c | sort -k1,1nr | head -10主要考察对sort、uniq命令的使用,相关解释如下,命令及原创 2021-09-26 01:03:57 · 4668 阅读 · 3 评论 -
数据库中的主键与外键的关系
文章目录一、主键、外键:1.概念2.区别3.作用4.举例:5.总结一、主键、外键:1.概念SQL的主键表示唯一标识一条记录,不能有重复的,不允许为空。例如:一条记录包括身份正号,姓名,年龄。身份证号是唯一能确定你这个人的,其他都可能有重复,所以,身份证号是主键。SQL的外键用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性。比如,A表中的一个字段,是B表的主键,那他就可以是A表的外键。外键与主键相对,作用就是通过主外键的之间关系使对张表中的数据更好的关联。2.区别主键——一个原创 2021-09-25 11:07:21 · 23673 阅读 · 4 评论 -
MySQL索引底层结构为什么选择B+树
文章目录1.Hash索引Hash索引把数据以hash形式组织起来,因此查找某一条记录的时候,速度非常快。同时.hash算法的索引有个缺点,因为它不是按照大小排序的。所以,它无法按照范围进行查找。2.二叉树结构索引二叉树的定义:1.任意节点左子树不为空,则左子树的值均小于根节点的值;2.任意节点右子树不为空,则右子树的值均大于于根节点的值;3.任意节点的左右子树也分别是二叉查找树;4.没有键值相等的节点;如图:很显然,这种结构的树查询最坏的情况就会像一个线性结构,这种结构对I/O的操作次原创 2021-09-24 00:33:11 · 196 阅读 · 0 评论 -
HTTP与HTTPS的区别、对称加密和非对称加密、什么是数字证书、DNS 解析过程、TCP和UDP的区别、HTTP的特点TCP 和 UDP 对应的应用场景
文章目录一、HTTP与HTTPS的区别二、对称加密和非对称加密三、什么是数字证书四、DNS 解析过程五、TCP和UDP的区别六、TCP 和 UDP 对应的应用场景是什么七、HTTP的特点一、HTTP与HTTPS的区别HTTP是超文本传输协议,信息是明文传输,HTTPS则是具有安全性的ssl加密传输协议。HTTP和HTTPS用的端口不一样,前者是80,后者是443。HTTPS协议需要到CA机构申请证书,一般免费证书较少,因而需要一定费用。HTTP运行在TCP协议之上;HTTPS运行在SSL协议之上原创 2021-09-21 21:46:11 · 1835 阅读 · 3 评论 -
HTTP的长链接和短链接以及HTTP1.0、HTTP1.1、HTTP2.0
文章目录一、HTTP的长链接和短链接二、HTTP1.0和HTTP1.1的区别三、HTTP1.1和 HTTP2.0的区别一、HTTP的长链接和短链接HTTP1.0默认使用的是短连接。浏览器和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。HTTP/1.1起,默认使用长连接。要使用长连接,客户端和服务器的HTTP首部的Connection都要设置为keep-alive,才能支持长连接。HTTP长连接,指的是复用TCP连接。多个HTTP请求可以复用同一个TCP连接,这就节省了原创 2021-09-21 21:32:15 · 4139 阅读 · 1 评论 -
应用层、表示层、会话层、传输层、网络层、数据链路层、物理层
文章目录计算机网络七层模型:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。应用层:为应用程序提供交互服务。在互联网中的应用层协议很多,如域名系统DNS、HTTP协议、SMTP协议等。表示层:负责数据格式的转换,如加密解密、压缩解压缩等。会话层:负责在网络中的两节点之间建立、维持和终止通信,如服务器验证用户登录便是由会话层完成的。运输层:负责向两台主机进程之间的通信提供数据传输服务。传输层的协议主要有传输控制协议TCP和用户数据协议UDP。网络层:选择合适的路由和交换结点,确保数据及原创 2021-09-21 21:27:22 · 12583 阅读 · 0 评论 -
情景题:0~100层楼,有两个球。一个任意的x,在0~x之间球扔下不会碎,在x~100之间求扔下会碎。找出这个x
文章目录有两个球,求x有两个球,求x原创 2021-09-20 21:25:00 · 221 阅读 · 1 评论 -
vector 使用push_back 和emplace_back的区别
文章目录push_back 和emplace_backpush_back 和emplace_backvector 中 emplace_back和push_back的区别:1.push_back() 向容器尾部添加元素时,首先会创建这个元素,然后再将这个元素拷贝或者移动到容器中(如果是拷贝的话,事后会自行销毁先前创建的这个元素);而emplace_back() 在实现时,则是直接在容器尾部创建这个元素,省去了拷贝或移动元素的过程。2.若vector<pair<,>>这种情况 p原创 2021-09-20 21:15:54 · 1171 阅读 · 1 评论 -
面试题:Linux常考命令
文章目录一、查看网络连接数和端口二、查看进程信息top命令三、查看ip地址四、查看CPU信息五、查看磁盘空间六、grep是一个文本过滤器,作用是在文件中查找符合我们要求的内容七、如何在指定的目录下查找文件,find命令的常用命令行参数都有哪些八、Linux查看文件日志内容一、查看网络连接数和端口二、查看进程信息top命令三、查看ip地址四、查看CPU信息五、查看磁盘空间六、grep是一个文本过滤器,作用是在文件中查找符合我们要求的内容七、如何在指定的目录下查找文件原创 2021-09-20 20:54:23 · 1443 阅读 · 2 评论 -
计数排序及其时间复杂度、代码(C++实现)、应用场景
文章目录一、计数排序概念二、计数排序代码三、计数排序代码四、计数排序应用场景一、计数排序概念计数排序,又叫非比较排序。顾名思义,该算法不是通过比较数据的大小来进行排序的,而是通过统计数组中相同元素出现的次数,然后通过统计的结果将序列回收到原来的序列中。上列中的映射方法称为绝对映射,即arr数组中的元素是几就在count数组中下标为几的位置++,但这样会造成空间浪费。例如,我们要将数组:102,101,108,进行排序,难道我们要开辟109个整型空间吗?若是使用计数排序,我们应该使用相对映射,简单来原创 2021-09-20 17:16:19 · 2097 阅读 · 2 评论 -
归并排序及其应用场景
文章目录一、归并排序的概念二、归并排序递归与非递归实现三、归并排序应用场景四、归并排序总结一、归并排序的概念二、归并排序递归与非递归实现归并排序递归实现,分治为每个区间元素都有序,那么就得把区间 分治成为1才能保证区间中每个元素都有序,在归并://归并排序void _MergeSort(int*arr, int left, int right, int* tmp){ if (left >= right) { return; } int mid = left + (right原创 2021-09-20 16:11:55 · 1768 阅读 · 1 评论 -
STL六大组件中算法模块sort为啥采用快速排序作为底层思想
文章目录一、面试官发问sort底层采用什么排序二、三种递归实现和非递归实现代码如下:三、快速排序的优化方法之三数取中四、快速排序的时间和空间复杂度一、面试官发问sort底层采用什么排序当你第一眼看到这道面试题是不是心里在暗喜,一问算法题就比问排序算法,一问排序算法就问快速排序。如果你回答:STL里的sort算法肯定用的是快速排序啊?难不成还是冒泡排序么?如果你只是回答快速排序,那么恭喜你只答对了33.333%,离正确答案还差一大截。回答完,接着会引来一堆问题轰炸:数据量大和数据量小都适合原创 2021-09-20 00:57:42 · 1511 阅读 · 1 评论 -
map底层、unorder_map底层,二者区别,为什么这样设计
文章目录一、unorder_map底层实现二、map与unorder_map的相同点与不同点1.map的优点与缺点1.map优点2.map缺点3.map适用场景1.unordered_map的优点与缺点1.unordered_map的优点2.unordered_map的缺点3.unordered_map的适用场景三、什么时候需要用unorder_map,什么时候需要用map一、unorder_map底层实现unordered_map底层是用开链法来解决哈希冲突的,用哈希桶实现的。 template原创 2021-09-19 19:32:12 · 2761 阅读 · 4 评论 -
C++ 构造函数不能是虚函数,基类析构函数应该为虚函数
文章目录1.构造函数不能是虚函数二、析构函数可以且常常是虚函数简单总结就是:构造函数不可以是虚函数,而析构函数可以且常常是虚函数。1.构造函数不能是虚函数从vptr角度解释 虚函数的调用是通过虚函数表来查找的,而虚函数表由类的实例化对象的vptr指针(vptr可以参考C++的虚函数表指针vptr)指向,该指针存放在对象的内部空间中,需要调用构造函数完成初始化。如果构造函数是虚函数,那么调用构造函数就需要去找vptr,但此时vptr还没有初始化! 虚函数对应一个虚函数表vtbl,可是这个原创 2021-09-15 00:04:13 · 684 阅读 · 2 评论 -
虚函数和纯虚函数的区别
文章目录一、首先:强调一个概念二、C++纯虚函数1.定义2.引入原因3.抽象类的介绍一、首先:强调一个概念定义一个函数为虚函数,不代表函数为不被实现的函数。定义他为虚函数是为了允许用基类的指针来调用子类的这个函数。定义一个函数为纯虚函数,才代表函数没有被实现。定义纯虚函数是为了实现一个接口,起到一个规范的作用,规范继承这个类的程序员必须实现这个函数。1、简介:假设我们有下面的类层次:class A{public: virtual void foo() { c原创 2021-09-14 22:59:48 · 257 阅读 · 1 评论 -
数组越界会发生什么
文章目录一、数组越界会发生什么二、 数组越界详解一、数组越界会发生什么C语言非常重视运行时的效率,所以没有进行数组越界检查,而C++继承了C的效率要求,自然也不做数组越界检查。(检查数据越界,编译器就必须在生成的目标代码中加入额外的代码用于程序运行时检测下标是否越界,这就会导致程序的运行速度下降)。看下面一段代码:#define _CRT_SECURE_NO_WARNINGS 1#include<iostream>using namespace std;int main(){原创 2021-09-14 21:34:28 · 12725 阅读 · 12 评论 -
B树与B+树的区别
文章目录一、使用B-树的好处二、B-树深入三、B-树的查找四、B+ 树五、B-树和B+树的区别①B+树内节点不存储数据,所有 data 存储在叶节点导致查询时间复杂度固定为 log n。而B-树查询时间复杂度不固定,与 key 在树中的位置有关,最好为O(1)。② B+树叶节点两两相连可大大增加区间访问性,可使用在范围查询等,而B-树每个节点 key 和 data 在一起,则无法区间查找。③B+树更适合外部存储。由于内节点无 data 域,每个节点能索引的范围更大更精确六、使用B+树的好处七、拓展:MySQ原创 2021-09-14 00:45:38 · 23930 阅读 · 6 评论 -
HTTPS 加密算法过程
文章目录一、HTTPS协议概念二、加密算法三、HTTP访问过程一、HTTPS协议概念1、HTTP 协议(HyperText Transfer Protocol,超文本传输协议):是客户端浏览器或其他程序与Web服务器之间的应用层通信协议 。2、HTTPS 协议(HyperText Transfer Protocol over Secure Socket Layer):可以理解为HTTP+SSL/TLS, 即 HTTP 下加入 SSL 层,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SS原创 2021-09-12 23:42:37 · 1991 阅读 · 4 评论 -
rand5()得到rand3()或rand7()类型题:通过rand n()实现rand m()
文章目录rand5()得到rand3()rand5()得到rand7()通过rand n()实现rand m()rand5()得到rand3()通过rand5实现rand3很好实现,rand5的取值为[1,2,3,4,5]的值,但是rand3的取值[1,2,3],由此可得,当rand5随机到4,5时可以重新随机,因为每次随机到的概率是相同的。所以随机到[1,2,3]的概率也是相同的,随机也符合rand3的随机数。int rand3(){ int n = 5; // rand5 [1,2,3,4,原创 2021-09-11 14:51:09 · 621 阅读 · 6 评论 -
计算A mod B,其中A为一个大数,长度不超过1000;B的值小于100000
文章目录 divdiv是用于取两数相除的商的,c = a div b,得到的c的值就是a除b的商。 // 是用于取两数相除的结果的。c = a / b,如果c是i数据类型的,这个语法会进行四舍五入的。 modmod 是用于取两数相除的余数,c = a mod b,得到的c的值的就是a除b的余数。考点:大数的表示和用法、mod的意思。#define _CRT_SECURE_NO_WARNINGS 1#include <iostream>#include <cs原创 2021-09-04 16:25:59 · 1121 阅读 · 1 评论 -
#define和typedef定义变量
typedef和define都是替一个对象取一个别名。#define成了预编译指令,typedef当成语句处理。Typedef和define都可以用来给对象取一个别名,但是两者却有着很大不同。1.#define和typedef原理不同#define,是预处理指令,在预处理时进行简单文本替换,不做正确性检查,只有在编译已被展开的源程序时才会发现可能的错误并报错。typedef,是关键字,在编译时处理,有类型检查功能。它在自己的作用域内给一个已经存在的类型一个别名,但不能在一个函数定义里面使用typ.原创 2021-08-29 21:59:45 · 1790 阅读 · 3 评论 -
struct和class的区别
1.struct在C语言里面是定义结构体的,在C++语言用struct定义的都是类。因此在 C++ 中:(1)struct 可以包含方法吗?能!(2)struct能写访问限定符吗?能!(3)struct能实现继承多态吗?能!(4)默认继承时,基类用 struct 或者 class定义,继承方式有区别吗?有!class是private继承,struct是public继承 ,不过最好写出继承方式!(5)定义模板参数列表时, class 能用来定义模板类型参数, struct不能定义模板类型参数!.原创 2021-08-29 17:20:14 · 293 阅读 · 2 评论 -
struct结构体计算占内存大小
先得列出在32位编译环境下的字节大小:1字节:char2字节:short (不管是不是signed或unsigned)4字节:int、long、float (不管是不是signed或unsigned)8字节:double如果等号是 ‘=’ 这种字符常量的话,当然是1字节,如果是 “=” 这种字符串常量当然是2字节。注意:struct 的{}后面要加上分号 “;”列举几种特殊以及常见的,代码如下:#define _CRT_SECURE_NO_WARN.原创 2021-08-29 17:02:09 · 1665 阅读 · 1 评论 -
BST(二叉搜索树),AVL(平衡二叉树)、RBT(红黑树)的区别
文章目录原创 2021-08-29 12:35:07 · 5754 阅读 · 4 评论