快手游戏服务端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)医疗领域 二、机器学习和…...
最新SpringBoot+SpringCloud+Nacos微服务框架分享
文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...
c#开发AI模型对话
AI模型 前面已经介绍了一般AI模型本地部署,直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型,但是目前国内可能使用不多,至少实践例子很少看见。开发训练模型就不介绍了&am…...
push [特殊字符] present
push 🆚 present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中,push 和 present 是两种不同的视图控制器切换方式,它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...
[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】,分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...
如何更改默认 Crontab 编辑器 ?
在 Linux 领域中,crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用,用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益,允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...
C#学习第29天:表达式树(Expression Trees)
目录 什么是表达式树? 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持: 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...
MySQL 主从同步异常处理
阅读原文:https://www.xiaozaoshu.top/articles/mysql-m-s-update-pk MySQL 做双主,遇到的这个错误: Could not execute Update_rows event on table ... Error_code: 1032是 MySQL 主从复制时的经典错误之一,通常表示ÿ…...
API网关Kong的鉴权与限流:高并发场景下的核心实践
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 引言 在微服务架构中,API网关承担着流量调度、安全防护和协议转换的核心职责。作为云原生时代的代表性网关,Kong凭借其插件化架构…...
C++实现分布式网络通信框架RPC(2)——rpc发布端
有了上篇文章的项目的基本知识的了解,现在我们就开始构建项目。 目录 一、构建工程目录 二、本地服务发布成RPC服务 2.1理解RPC发布 2.2实现 三、Mprpc框架的基础类设计 3.1框架的初始化类 MprpcApplication 代码实现 3.2读取配置文件类 MprpcConfig 代码实现…...
spring Security对RBAC及其ABAC的支持使用
RBAC (基于角色的访问控制) RBAC (Role-Based Access Control) 是 Spring Security 中最常用的权限模型,它将权限分配给角色,再将角色分配给用户。 RBAC 核心实现 1. 数据库设计 users roles permissions ------- ------…...
