快手游戏服务端C++开发一面-面经总结
1、tcp的重传机制有哪几种?具体描述一下
最基本的超时重传
超过时间就会重传
三个重复ACK 快速重传
减少等待超时、
接收方可以发送选择性确认
不用重传整段
乱序到达 可以通知哪些丢失 重复数据重传
2、override和final?
override可写可不写
写出来就是显式声明 虚函数 重写基类了 更加清晰
void doSomething(int x) override { // 使用 override 关键字// 派生类中的实现}
final是最后一代的意思 没办法继续继承了 无法被重写了的意思
3、epoll的边缘触发和水平触发?
水平是默认的-这个没有疑问,只要fd有没有处理的事件,就不断通知应用程序。
假设一个套接字上有数据可读,水平触发模式下,只要该套接字上还有数据可读,每次调用 epoll_wait 都会返回该事件,直到数据被完全读取。逐步处理数据
的场景。
边缘触发:高效爱的,减少系统调用次数,仅仅状态变化才通知一次。
从无到有才能通知一次。适用于事件发生立即处理大量的数据
。减少重复通知。必须干完才能给你新派活。
4、tcp的滑动窗口?
滑动窗口为了流量控制
发送方和接收方之间动态调整发送和接受速度 防止网络拥塞和丢包
先商定初始窗口大小----不超过窗口范围发送数据包-----ack返回能接受的大小----滑动到新的窗口发送新的数据。
5、stl的常用容器及其底层实现数据结构?
vector:动态数组 增长是两倍增长
deque:双端队列(链表)
list:双向链表
queue:一般用deque 也可以list
set:红黑树 自平衡二叉查找树 set不重复
map:红黑树 键值对
unordered_set 和 unordered_multiset:哈希表 无序 平均o1 最坏o1
6、static的用法和作用?
函数内静态变量:只初始化一次 它在函数调用结束后依然存在,并在下次调用时保留上次的值。
void counter() {static int count = 0; // 只初始化一次count++;std::cout << "Count: " << count << std::endl;
}int main() {counter(); // 输出: Count: 1counter(); // 输出: Count: 2counter(); // 输出: Count: 3return 0;
}
上面的例子可以看出来 每次调用counter函数 都不会把他置为0 而是保持上一次不变了 才能加
全局静态变量-全局静态函数:作用域限制在自己的文件 不能被其他文件访问 防止冲突 (命名)
类中的静态变量 静态成员函数:这就是归为类 而不是某个实例的属性了 不实例化 Example 类的情况下直接通过类名调用。
7、智能指针?
这个不写了 感觉是必考
8、虚函数、虚表指针?
有虚函数就有虚表
虚表里面是虚函数地址
虚表指针指向虚表
通过虚表指针找到虚表 找到对应的函数指针 再调用函数
每个 Base 对象有一个 vptr,指向 Base_vtable;
每个 Derived 对象有一个 vptr,指向 Derived_vtable。
调用虚函数时,通过对象的 vptr 指针确定实际调用的函数。
class Base {
public:virtual void func1() { /* ... */ }virtual void func2() { /* ... */ }
};class Derived : public Base {
public:void func1() override { /* ... */ } // 重写基类的 func1void func3() { /* ... */ } // 派生类独有的函数
};对于 Base 类,它的虚表可能看起来像这样:Base_vtable:
+---------------------+
| Base::func1 address |
+---------------------+
| Base::func2 address |
+---------------------+而对于 Derived 类,它的虚表可能看起来像这样:Derived_vtable:
+---------------------+
| Derived::func1 address | // 重写后的函数地址
+-----------------------+
| Base::func2 address | // 没有重写,指向基类的函数地址
+-----------------------+
9、内存碎片?
不能有效利用的零散空间 影响系统性能和使用效率
有两种:外部碎片 内部碎片
外部碎片指的是由于内存块的分配和释放操作导致可用的空闲内存被分割成许多小块,这些小块分布在整个内存空间中,而每个小块都不足以满足新的内存分配请求。即便系统总的空闲内存足够,但因为它们不连续,导致无法分配给需要较大连续空间的请求。
内部碎片指的是分配的内存块内部未被使用的部分。由于内存分配器一般会按照一定的对齐要求(如8字节或16字节对齐)来分配内存,所以分配的内存块可能会比实际需要的稍大,导致一部分内存未被使用。
10、索引的优缺点?
优点:加速检索 提高效率 可以条件查询
缺点:增加空间 降低写入性能 还要维护 有可能失效
11、索引可以用哪些数据结构实现?
B树 多路搜索自平衡搜索树
B+树 变种 叶子节点怎么怎么样
哈希表
跳表(多层链表 查找变成logn)
前缀树trie 就是用于前缀匹配
236. 二叉树的最近公共祖先
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。
百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”
class Solution {
public:TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {if(root == nullptr || root == p || root == q) return root;TreeNode *left = lowestCommonAncestor(root->left, p, q);TreeNode *right = lowestCommonAncestor(root->right, p, q);if(left == nullptr) return right;if(right == nullptr) return left;return root;}
};
相关文章:

快手游戏服务端C++开发一面-面经总结
1、tcp的重传机制有哪几种?具体描述一下 最基本的超时重传 超过时间就会重传 三个重复ACK 快速重传 减少等待超时、 接收方可以发送选择性确认 不用重传整段 乱序到达 可以通知哪些丢失 重复数据重传 2、override和final? override可写可不写 写出来就…...

git的学习使用(认识工作区,暂存区,版本区。添加文件的方法)
学习目标: 学习使用git,并且熟悉git的使用 学习内容: 必备环境:xshell,Ubuntu云服务器 如下: 搭建 git 环境认识工作区、暂存区、版本区git基本操作之添加文件(1):gi…...

Series数据去重
目录 准备数据 Series数据去重 DataFrame数据和Series数据去重对比 在pandas中,Series.drop_duplicates(keep, inplace)方法用于删除Series对象中的重复值。 keep: 决定保留哪些重复值。可以取以下三个值之一: first(默认值&…...

Python语言核心12个必知语法细节
1. 变量和数据类型 Python是动态类型的,变量不需要声明类型。 python复制代码 a 10 # 整数 b 3.14 # 浮点数 c "Hello" # 字符串 d [1, 2, 3] # 列表 2. 条件语句 使用if, elif, else进行条件判断。 python复制代码 x 10 if x > 5: print(&q…...

解决ImageIO无法读取部分JPEG格式图片问题
解决ImageIO无法读取部分JPEG格式图片问题 问题描述 我最近对在线聊天功能进行了一些内存优化,结果在回归测试时,突然发现有张图片总是发送失败。测试同事把问题转到我这儿来看,我仔细检查了一下,发现是上传文件的接口报错&#…...

使用three.js 实现蜡烛效果
使用three.js 实现蜡烛效果 import * as THREE from "three" import { OrbitControls } from "three/examples/jsm/controls/OrbitControls.js"var scene new THREE.Scene(); var camera new THREE.PerspectiveCamera(60, window.innerWidth / window.in…...

手动在Linux服务器上部署并运行SpringBoot项目(新手向)
背景 当我们在本地开发完应用并且测试通过后,接着就要部署在服务器上启动。 步骤 1.先用maven将SpringBoot应用当成jar包 2.生成jar文件并复制此文件 3.xshell远程连接linux服务器,在xftp将文件粘贴到linux服务器,这里我放在/usr/local…...

自媒体短视频如何制作?
从0到1打造爆款短视频!300条视频创作经验分享,助你玩转自媒体! 想用短视频玩转自媒体却不知道从何下手?别担心!从21年开始接触短视频的我,断断续续创作了300多条视频,踩过不少坑,也收获了一些心得,核心秘诀就是:账号内容垂直化 + 明确受众群体! 我将从主题确定、脚本…...

2024年河南省职业技能竞赛(网络建设与运维赛项)
模块二:网络建设与调试 说明: 1.所网络设备在创建之后都可以直接通过 SecureCRT 软件 telnet 远程连接操作。 2.要求在全员化竞赛平台中保留竞赛生成的所有虚拟主机。 3.题目中所有所有的密码均为 Pass-1234,若未按照要求设置,涉 …...

git--git reset
HEAD 单独一个HEAD eg:git diff HEAD 表示当前结点。 HEAD~ HEAD~只处理当前分支。 注意:master分支的上一个结点是tmp分支的所在的结点fc11b74, 79f109e才是master的第二个父节点。 HEAD~ 当前结点的父节点。 HEAD~1 当前结点的父节点。 HEAD~n 当前结点索…...

Spring Boot的实用内置功能详解
Spring Boot作为一款备受欢迎的Java框架,以其简洁、高效和易用的特点,赢得了广大开发者的青睐。其内置的多种功能更是为开发者提供了极大的便利,本文将详细介绍Spring Boot中记录请求数据、请求/响应包装器、特殊的过滤器Filter以及Controlle…...

撸猫变梳毛?怎么解决猫咪掉毛问题?好用的宠物空气净化器推荐
秋风一吹,新一轮的猫咪换毛季又到了,这也意味着我失去了撸猫自由。我每天的治愈方式就是下班撸猫,抚摸着柔软的毛发,好像一天的烦恼都消除了。可是一到换毛季,猫还没撸两下,先从猫咪身上带下一手毛…...

人声分离免费软件,六款好用软件处理音乐更轻松!
在这个数字化音乐时代,无论是专业音乐人还是音乐爱好者,都渴望在创作与编辑过程中拥有更多便捷高效的工具。人声分离技术,作为音乐后期制作中的一项关键技术,能够精准地将歌曲中的人声与伴奏分离,极大地拓宽了音乐创作…...

数据分析Power BI设置万为单位的数据
玩过Power BI的同学都知道,power BI在度量值设置单位里,唯独没有万这个单位,但是我们可以自定义,操作过程如下: 1.用DAX新建单位表 单位 SELECTCOLUMNS( { ( "元", 1), ("万",10000), ("千…...

(AI 生成) 新时代游击方式: 利用 “灵活就业“ 红利
注意: 本文内容为 AI 大模型生成, 仅供参考. 提示词: 写一篇短文, 500 字左右, 标题为: 新时代游击方式: 利用 “灵活就业” 红利 1 豆包 《新时代游击方式:利用“灵活就业”红利》 在新时代的大舞台上,“灵活就业”犹如一块熠熠生辉的宝藏,…...

Unity UndoRedo(撤销重做)功能
需求 撤销与重做功能 思考 关于记录的数据的两点思考: 记录操作记录影响显示和逻辑的所有数据 很显然这里就要考虑取舍了: 记录操作 这种方案只需要记录每一步的操作,具体这个操作要怎么渲染和实现出来完全需要自己去实现,这…...

28条有关人工智能的名言
当谈到人工智能(AI)的潜力和潜在风险,以及无人类干预的机器学习和推理过程时,目前尚存在许多不同的观点。 只有时间会告诉我们,这些语录中哪一条是最接近未来的真实情况的。在我们尚未到达目的地之前,想一想…...

搞机器视觉项目看不起搞机器视觉培训的,实际上怎么样
搞机器视觉项目第一要务就是验收回款,往往欠款的非常严重,多数还要打通人际关系需要大量的成本。大多数机器视觉检测项目具有一定的风险,客户要求不明确,技术评估不充分,往往伴随着失败的可能性。所以做项目又累又担风…...

使用Jenkins部署项目
部署中的痛点 为什么要用Jenkins?我说下我以前开发的痛点,在一些中小型企业,每次开发一个项目完成后,需要打包部署,可能没有专门的运维人员,只能开发人员去把项目打成一个exe包,可能这个项目已…...

【机器学习与神经网络荣获诺贝尔奖】科学边界的扩展及技术革新
【机器学习与神经网络荣获诺贝尔奖】科学边界的扩展及技术革新 1)科学交叉融合的体现2)方法论的创新3)社会影响的考量 一、机器学习与神经网络的发展前景1)生产制造领域2)金融领域3)医疗领域 二、机器学习和…...

Javascript扩展符号(...)使用说明
在 ES6 中,扩展运算符(spread operator)... 可以用于在函数调用、数组字面量或对象字面量中展开数组或对象。以下是扩展运算符的一些常见用法: 1. 在函数调用中使用扩展运算符 扩展运算符可以在函数调用时展开数组或对象&#x…...

giugughk
c语言中的小小白-CSDN博客c语言中的小小白关注算法,c,c语言,贪心算法,链表,mysql,动态规划,后端,线性回归,数据结构,排序算法领域.https://blog.csdn.net/bhbcdxb123?spm1001.2014.3001.5343 给大家分享一句我很喜欢我话: 知不足而奋进,望远山而前行&am…...

【微服务】网关 - Gateway(下)(day8)
网关过滤工厂 在上一篇文章中,主要是对网关进行了一个总体的介绍,然后对网关中的断言进行了一个描述。在这篇文章中,主要是对网关中的最后一大核心——过滤进行介绍。 当客户端发送过来的请求经过断言之后,如果还想在请求前后添…...

【C#】创建一个控制台应用程序来管理学生成绩
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 在C#中创建一个控制台应用程序来管理学生成绩编写程序程序解释 在C#中创建一个控制台应用程序来管理学生成绩 在这篇文章中,我将向你展示如何使用C#创建…...

鸿蒙开发之ArkUI 界面篇 三十四 容器组件Tabs 自定义TabBar
如果需要修改Tabs的图标和文字之间的距离我们该怎么办呢?好在tabBar是联合类型,提供了自定义tabBar,这里就可以显示特殊图标或者是文字图片,如下图: 这里定义了myBuilder的函数,用了 来修饰,没有…...

AI核身-金融场景凭证篡改检测YOLO原理
引言 YOLO (You Only Look Once) 模型是一种先进的实时目标检测算法,它在计算机视觉领域具有重要的地位。YOLO以其速度和准确性而闻名,能够快速识别图像和视频中的各种物体。这使得它在自动驾驶、安全监控、机器人技术、医学影像分析等众多领域都有着广…...

鹅厂JS面试题——0.1+0.2=0.3吗?
首先公布答案:在JavaScript 中,0.1 0.2 ≠ 0.3 为什么? JavaScript 中的数字使用 IEEE 754 标准的双精度浮点数(64 位)进行表示。这种表示方式在处理十进制小数时,不能精确地表示某些数字。比如0.1 和 0.2 这样的十进…...

软件功能测试重点和流程有哪些?专业软件测评服务公司推荐
软件功能测试就是对产品的各功能进行验证,根据功能测试用例,逐项测试,检查产品是否达到用户要求的功能。功能测试也叫黑盒测试或数据驱动测试,只需考虑需要测试的各个功能,不需要考虑整个软件的内部结构及代码.一般从软…...

【数据结构】AVL树(C++实现)
文章目录 前言AVL树节点的定义AVL树的插入AVL树的旋转AVL树的验证AVL树的删除AVL树的性能与源码 前言 二叉搜索树虽可以缩短查找的效率,但如果数据有序或接近有序二叉搜索树将退化为单支树,查找元素相当于在顺序表中搜索元素,效率低下。因此&…...

AMD新推EPYC与MI325X,挑战英伟达AI市场地位
在人工智能(AI)加速器领域,AMD近日于美国旧金山举办的“推进人工智能”(Advancing AI Event)活动中,宣布了一系列新产品的发布,直接对标英伟达,意图在AI芯片市场占据更大份额。 AMD新…...