腾讯游戏服务器外包二面

news2024/12/26 14:30:40

在这里插入图片描述

1.基础问题

2.网络协议

3.数据结构

3.1二叉树的前序遍历

3.2实现二叉树的前序遍历

https://www.nowcoder.com/practice/5e2135f4d2b14eb8a5b06fab4c938635?tpId=295&tqId=2291302&ru=/exam/oj&qru=/ta/format-top101/question-ranking&sourceUrl=%2Fexam%2Foj

3.3 业务问题

3.3.1 Fisher-Yates shuffle算法

C++实现,给你一个数组,将其中元素完全随机打乱返回一个数组,可以施工用rand函数返回随机值
你好!要将一个数组中的元素随机打乱,可以使用Fisher-Yates shuffle算法。该算法基于随机交换数组中的元素,以实现随机打乱数组的目的。具体实现如下:

#include <iostream>
#include <vector>
#include <cstdlib>
#include <ctime>

// Shuffle the elements of a vector randomly
void shuffle(std::vector<int>& nums) {
    srand(time(nullptr));
    for (int i = nums.size() - 1; i > 0; i--) {
        int j = rand() % (i + 1);
        std::swap(nums[i], nums[j]);
    }
}

int main() {
    std::vector<int> nums = {1, 2, 3, 4, 5};
    shuffle(nums);
    for (int num : nums) {
        std::cout << num << " ";
    }
    std::cout << std::endl;
    return 0;
}

这个函数使用了C++11中的随机数生成器和Fisher-Yates shuffle算法来将数组中的元素随机打乱。在Fisher-Yates shuffle算法中,从数组的最后一个元素开始,随机选择一个元素,并将其与当前位置的元素交换。然后,将当前位置向前移动一位,重复上述步骤,直到整个数组被随机打乱。

3.3.2 轮盘赌算法

C++实现,给定一个数组,数组元素的值就是他的权重,总权重是所有元素权重纸盒,写一个函数,根据根据权重返回随机值,每个元素出现次数符号权重的概率分析
你好!要根据权重返回随机值,可以使用轮盘赌算法(roulette wheel selection algorithm)。该算法基于每个元素的权重,将整个数组看作一个轮盘,并在轮盘上旋转指针,以确定返回哪个元素。具体实现如下:

#include <iostream>
#include <random>
#include <vector>

// Generate a random number between 0 and 1
double random_double() {
    std::random_device rd;
    std::mt19937 gen(rd());
    std::uniform_real_distribution<double> dis(0.0, 1.0);
    return dis(gen);
}

// Return the index of the randomly selected element based on its weight
int random_weighted_index(const std::vector<double>& weights) {
    double total_weight = 0.0;
    for (double weight : weights) {
        total_weight += weight;
    }
    double r = random_double() * total_weight;
    for (int i = 0; i < weights.size(); i++) {
        r -= weights[i];
        if (r < 0) {
            return i;
        }
    }
    return weights.size() - 1;
}

int main() {
    std::vector<double> weights = {0.1, 0.3, 0.2, 0.4};
    std::vector<int> counts(weights.size(), 0);
    for (int i = 0; i < 10000; i++) {
        int index = random_weighted_index(weights);
        counts[index]++;
    }
    for (int i = 0; i < counts.size(); i++) {
        std::cout << "Element " << i << " appeared " << counts[i] << " times" << std::endl;
    }
    return 0;
}

这个函数使用了C++11中的随机数生成器和轮盘赌算法来根据权重返回随机值。在轮盘赌算法中,首先计算所有元素的权重之和,然后生成一个随机数r,将其乘以总权重,然后遍历数组,每次减去当前元素的权重,直到r小于零为止。此时,返回的就是当前元素的索引。由于每个元素的权重都不同,因此可以确保每个元素出现的次数符合其权重的概率分布。

3.3.3 UUID(通用唯一识别码)算法

C++实现,实现一个函数生成GUID(64位整数全局唯一),这个函数可能在多个机器上运行,每个机器上可能又多个进程跑这个函数,保证每个程序跑出来的GUID一定是唯一的
你好!要实现生成全局唯一的GUID,可以使用UUID(通用唯一识别码)算法。UUID是由128位二进制数表示的,但是可以通过一些算法将其转换为64位整数,以实现更小的存储空间。

以下是一个C++实现UUID算法的示例函数:

#include <iostream>
#include <random>
#include <chrono>

// Generate a random 64-bit integer
uint64_t random_uint64() {
    std::random_device rd;
    std::mt19937_64 gen(rd());
    std::uniform_int_distribution<uint64_t> dis;
    return dis(gen);
}

// Generate a UUID as a 64-bit integer
uint64_t generate_guid() {
    auto now = std::chrono::system_clock::now().time_since_epoch().count();
    uint64_t rand1 = random_uint64();
    uint64_t rand2 = random_uint64();
    uint64_t uuid = (now << 32) | ((rand1 >> 16) & 0xFFFF);
    uuid = (uuid << 32) | (rand1 & 0xFFFF);
    uuid = (uuid << 16) | ((rand2 >> 48) & 0xFFFF);
    uuid = (uuid << 48) | (rand2 & 0xFFFFFFFFFFFF);
    return uuid;
}

int main() {
    std::cout << generate_guid() << std::endl;
    return 0;
}

这个函数使用了C++11中的随机数生成器和时间戳来生成唯一的UUID。由于使用了随机数,因此可以保证即使在多个机器上运行,每个程序跑出来的GUID也是唯一的。

多个机器上多个程序同时运行也可以保证全局唯一吗

是的,使用UUID算法生成的GUID可以保证在多个机器上多个程序同时运行时也是全局唯一的。这是因为UUID算法使用了时间戳和随机数来生成GUID,即使在不同的机器上,由于时间戳和随机数的不同,生成的GUID也是不同的。因此,可以确保在多个机器上多个程序同时运行时,每个程序跑出来的GUID都是唯一的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/723398.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何查找电脑蓝屏原因之详解

一、电脑蓝屏存储位置 电脑蓝屏日志是一种非常常见的错误提示&#xff0c;它经常发生在Windows操作系统中。当Windows系统遇到无法处理的错误时&#xff0c;会自动将错误信息记录在蓝屏日志文件中。这些日志文件通常存储在C盘的目录下windows文件中的Minidump文件夹中。 以dmp格…

Openlayers实战:绘制矩形,正方形,正六边形

Openlayers地图中,绘制图形是非常重要的一个功能。Openlayers主要使用draw类来绘制图形,在实际项目中有时候会绘制矩形和正多边形。 下面的示例是绘制矩形,正方形,正多边形。 效果图 源代码 /* * @Author: 大剑师兰特(xiaozhuanlan),还是大剑师兰特(CSDN) * @此源代…

基于Python爬虫+KNN数字验证码识别系统——机器学习算法应用(含全部工程源码)+训练数据集

目录 前言总体设计系统整体结构图系统流程图 运行环境Python 环境 模块实现1. 数据爬取2. 去噪与分割3. 模型训练及保存4. 准确率验证 系统测试工程源代码下载其它资料下载 前言 本项目利用Python爬虫技术&#xff0c;通过网络爬取验证码图片&#xff0c;并通过一系列的处理步…

QT5项目程序打包成可执行exe程序(绿色版)

一、QT在release模式下编译生成.exe 二、然后新建一个空白文件夹package&#xff0c;再将在release模式下生成的.exe文件复制到新建的文件夹中package。 三、打开QT5的命令行&#xff08;选择项目所使用的的环境&#xff09; 查找项目使用环境 打开命令行 四、在命令行输入命令…

马斯克:未来会涌现大量机器人,与人类比例有望超过1比1

在世界人工智能大会上&#xff0c;特斯拉的马斯克通过网络发表了视频演讲&#xff0c;涵盖了特斯拉人形机器人Optimus、自动驾驶和人工智能等话题。他赞扬了中国的AI产业&#xff0c;并表示中国在决心和实施方面非常出色&#xff0c;包括AI产业发展在内。 特斯拉的人型机器人目…

数学美学:探索“既不是最小值也不是最大值”的魅力

本篇博客会讲解力扣“2733. 既不是最小值也不是最大值”的解题思路&#xff0c;这是题目链接。 本题的思路是&#xff1a; 若数组只有2个元素&#xff0c;显然任意一个元素不是最小值就是最大值。若数组有3个以上的元素&#xff0c;由于提示中的第3点&#xff1a;数组中的所有…

中国首家外资独资期货公司,摩根大通期货持仓龙虎榜的持仓动向和盈亏状况

摩根大通期货&#xff0c;为什么持仓量长期排在期货龙虎榜前列 摩根大通是一家全球领先的金融服务机构&#xff0c;拥有超过200年的历史&#xff0c;业务遍及全球100多个国家和地区。这个期货公司比较神秘&#xff0c;只有上海一个营业部&#xff0c;在业务方向上以机构客户为服…

YOLOv5、YOLOv8改进教程:7. 添加SK-Net注意力机制

论文地址:Selective Kernel NetworksGithub:https://github.com/implus/SKNet如果你是深度学习小白,阅读本文前建议先学习一下 📖《新手入门深度学习》如果你有一定基础,但是缺乏实战经验,可通过 📖《深度学习100例》 补齐基础另外,我们正在通过 🔥365天深度学习训…

ATM模拟-管理员登录用户查询

项目来源&#xff1a;新星计划2023【JavaWeb实现ATM机存取款项目实战】 学习方向报名入口-CSDN社区 目录 管理员登录 管理员登录逻辑 管理员登录主程序 功能实现 代码如下&#xff1a; 用户信息封装 实现功能 代码实现&#xff1a; 业务层代码具体实现 功能实现 业…

linux查看内存总结

参考博客&#xff1a; https://www.atlantic.net/vps-hosting/find-top-10-running-processes-by-memory-and-cpu-usage/ 最简单的命令 free -g 查看还有多少可用的内存 但是有的时候这个提供的信息实在是太少了&#xff0c;例如我今天发现服务器上可用的内存只有50G, 我想知…

第2章 SSD主控和全闪存阵列

通过第一章可知&#xff0c;SSD主要由两大模块组成&#xff1a;主控和闪存介质。其中&#xff0c;主控的作用包括&#xff1a; &#xff08;1&#xff09;实现标准主机接口与主机通信&#xff1b; &#xff08;2&#xff09;实现与闪存的通信&#xff1b; &#xff08;1&#x…

算法与数据结构-队列

文章目录 什么是队列队列和栈的区别 队列的类型顺序队列链式队列循环队列阻塞队列并发队列 总结 什么是队列 队列跟栈一样&#xff0c;也是一种操作受限的线性表数据结构。不过&#xff0c;队列是先进者先出。 队列和栈的区别 栈只支持两个基本操作&#xff1a;入栈 push()和出…

【Kafka】Kafka consumer lag 为负数

前言 最近对Kafka 集群部署了 Kafka_exporter 监控&#xff0c;并集成了 granfana 图标展示。 发现 Consumer Group Lag 有时候为负数。 于是进行一番查询&#xff0c;并总结整理下。 具体情形 从下图可以看出&#xff0c;consumer group 值有时候出现负数的情况。 具体原…

Python 使用 pyc 解决明文密钥问题

文章目录 前言1. pyc 介绍2. py 代码编译2.1 使用命令行编译2.2 使用代码编译 3. 避免名为密钥案例3.1 创建密钥存储代码文件3.2 编译密钥代码3.3 调用密钥代码 前言 写代码过程中&#xff0c;可能遇到一些敏感信息不想明文暴露在代码中的情况&#xff0c;本篇文章介绍使用 py…

多tab之间的sessionStorage能不能直接共享访问?

首先&#xff0c;先理解下一个页面的sessionStorage是怎么回事。 1、当前A页面有sessionStorage值为123&#xff0c;我F5强刷页面&#xff0c;sessionStorage值还在不在&#xff1f; 答&#xff1a;在。 2、当前A页面有sessionStorage值为123&#xff0c;我复制A页面地址在浏览…

浏览器console发送get或post请求

浏览器console发送get或post请求 get请求 var url "http://******:8080/base/testapi/testcurl?urlhttps%3A%2F%2Fwww.baidu.com%2F"; var xhr new XMLHttpRequest(); xhr.open("GET", url, true); xhr.setRequestHeader("Content-Type", &…

RPG++——游戏编辑器的开发

完整资料进入【数字空间】查看——baidu搜索"writebug" 随着当下电子设备的普及以及人们对娱乐需求的上升&#xff0c;电子游戏逐渐走进千家万户。RPG&#xff08;角色扮演&#xff09;游戏作为最经典的游戏种类之一&#xff0c;因其游戏形式多样&#xff0c;自由度…

矢量数据库对比和选择指南

矢量数据库是为实现高维矢量数据的高效存储、检索和相似性搜索而设计的。使用一种称为嵌入的过程&#xff0c;将向量数据表示为一个连续的、有意义的高维向量。 本文将研究存储/检索向量数据和执行相似性搜索的实用方法&#xff0c;在我们深入研究之前&#xff0c;首先先介绍矢…

改进 Elastic Stack 中的信息检索:提高搜索相关性的步骤

作者&#xff1a;Grgoire Corbire, Quentin Herreros, Thomas Veasey 自 8.0 和用于文本嵌入的第三方自然语言处理 (NLP) 模型发布以来&#xff0c;Elastic Stack 的用户可以访问各种模型来嵌入其文本文档并使用矢量搜索执行基于查询的信息检索。 考虑到所有这些组件及其参数…

Rust 第二天---Rust基础总结

之前已经配置好了Rust的环境,那学习一门语言最开始就是去掌握了解它的基本语法.其实Rust的语法和大多编程语言没什么差别,熟悉C的应该很容易上手,所以今天就快速过一遍基础. 1. 变量与常量 变量应该是编程中最常用到的,但是Rust与其他语言不同的是在声明变量的时候必须说明这…