
面试题
文章平均质量分 51
利来利往
幽默,诚实,守时,守信,适应能力强。
展开
-
【数据库面试题】redis解决跨服通信问题
Redis是独立于游戏服务器的,交由它来保存,可以防止宕机回档的问题,也可以减少游戏服务器自己维护数据所占用的内存。一般情况下仅需要取排名的前N名就可以了,这时可以利用数据库的排序功能,或者自己维护一个元素数量有限的top集合。但是有时候我们需要每一个玩家的排名,玩家的数量太多,不能利用数据库(全表排序压力太大),自己维护也会比较麻烦。Redis会对其进行排序,修改某一元素的score后,也会更新排序,在获取数据时,可以指定排序范围。更重要的是,这个排序结果会被保存起来,不用在服务器启动时重新计算。...转载 2022-07-15 08:46:38 · 241 阅读 · 0 评论 -
【C++面试题】多线程不加锁消息队列
前文跟大家一起赏析了大师作——redis的事件机制,今献丑将自己常用的一个消息循环分享给大家。笔者认为没有任何算法能完美的适配所有场景,就像前文提到的redis事件机制,它其实在处理就绪事件时是阻塞执行的。如果同时就绪的多个事件中有比较耗时的运算,那等待其他事件完成的用户体验就不太好了。本文设计的环形队列是多线程并发执行时可用的,一次往队列中写入一个事件,队列只记录事件相关数据的指针,另外使用原子操作来记录读取这个指针,迅速、安全。因为指针占空间小而且一致,所以直接用数组来保存它们。如下图所示:假设数组大小转载 2022-07-13 00:34:36 · 804 阅读 · 0 评论 -
【C++面试题】一个野指针拦截工具的基础原理
刷微博看到大佬分析评价了一个库对野指针拦截处理,通读之后若有所思,随即点了收藏。大概过了两周,重新翻看这条分析,发现自己并没有完整理解消化了这个野指针拦截原理,之前收藏的时候评论了原博,希望博主贴个源码地址学习一下~然而大佬并没有回复,于是自己试着用截图里的keyword去搜了下,最终还是找到了--> JJException这个库的野指针拦截处理的原理其实就是模仿Xcode的僵尸对象捕获的功能(即Zombie)正在上传…重新上传取消Zombie.png套用大佬的话:hook了dealloc,然后对该对象的内转载 2022-07-13 00:10:03 · 188 阅读 · 0 评论 -
【C++面试题】共享内存
共享内存的创建与释放原创 2022-07-12 23:56:29 · 470 阅读 · 0 评论 -
【数据库面试题】为什么 MySQL 使用 B+ 树
1.使用 B+ 树其实能够保证数据按照键的顺序进行存储,也就是相邻的所有数据其实都是按照自然顺序排列的,使用哈希却无法达到这样的效果.如果我们使用 B+ 树作为底层的数据结构,那么所有只会访问或者修改一条数据的 SQL 的时间复杂度都是 O(log n),也就是树的高度,但是使用哈希却有可能达到 O(1) 的时间复杂度,看起来是不是特别的美好。但是当我们使用如下所示的 SQL 时,哈希的表现就不会这么好了:如果我们使用哈希作为底层的数据结构,遇到上述的场景时,使用哈希构成的主键索引或者辅助索引可能就转载 2022-06-27 15:34:30 · 360 阅读 · 0 评论 -
【C++面试题】虚函数的原理
C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。关于虚函数的使用方法,我在这里不做过多的阐述。大家可以看看相关的C++的书籍。在这篇文章中,我只想从虚函数的实现机制上面为大家 一个清晰的剖析。当然,相同的转载 2022-06-23 16:56:17 · 179 阅读 · 0 评论 -
【面试攻略】服务端面试-边锋
redis做排行榜什么容器战斗说说你自己搭的架构全球同服的架构数据库日志量很大的问题你开发中遇到让你记忆很深的问题go 和 redis 你熟悉吗说一说你熟悉的架构monggoDB和MySQL区别登录流程哪些数据库优化拍卖聊天版本管理战斗是你做的吧redis排行榜哪些地方用了多线程充值内存泄漏UDP用过吗,TCP/UDP区别...原创 2022-02-02 14:48:51 · 919 阅读 · 0 评论 -
Redis 是如何对数据进行持久化存储的?常见的数据结构都有什么?
Redis总共有五种常见数据结构,三种特殊数据结构(这里不解释) 常用数据结构: STRING: 它是由整数值和SDS(简单动态字符串)实现的对象 应用场景: 1.可以用作缓存 2.可以用作计数器 3.可以用作共享用户session HASH:它是由压缩列表和字典实现的哈希对象 应用场景: 1.可以用作关系型数据库存储,用...转载 2022-01-11 11:13:40 · 208 阅读 · 0 评论 -
深度优先遍历(DFS)和广度优先遍历(BFS)
深度优先遍历主要思路是从图中一个未访问的顶点 V 开始,沿着一条路一直走到底,然后从这条路尽头的节点回退到上一个节点,再从另一条路开始走到底...,不断递归重复此过程,直到所有的顶点都遍历完成,它的特点是不撞南墙不回头,先走完一条路,再换一条路继续走。广度优先遍历广度优先遍历,指的是从图的一个未遍历的节点出发,先遍历这个节点的相邻节点,再依次遍历每个相邻节点的相邻节点。DFS 一般是解决连通性问题,而 BFS 一般是解决最短路径问题,一般深度优先遍历用的是栈,而广度优先遍历要用队列来实现转载 2022-01-10 16:50:05 · 361 阅读 · 0 评论 -
【面试】C++_ 11
1.C++怎么实现禁止拷贝2.C++11(1).C++右值引用与左值引用(2).智能指针1.最容易想到的是将拷贝构造函数与赋值函数声明为private。但是,private只是说外部不能直接调用,但是可以间接通过类的成员函数与友元函数对其访问。那么怎么办呢?2.在类中,允许声明函数,但是,可以不用实现该函数,这是合法的。那么即使是在public中声明函数,但是不实现,那么调用这个函数也是会出错的。那么好了我们可以特性一起使用,将拷贝构造函数与赋值函数,声明为private,并且不给出实现。这.原创 2021-04-23 17:58:28 · 228 阅读 · 0 评论 -
【算法】算法
算法1.你熟悉那些排序算法2.冒泡排序和快速排序原理和时间复杂度,谁更稳定3.快速排序可以优化吗4.介绍寻路算法,寻路算法失败怎么处理5.除了A星算法还知道其他算法吗6.A星算法的原理加密一致性哈希1、冒泡排序(Bubble Sort)冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端原创 2021-04-23 17:29:49 · 240 阅读 · 0 评论 -
【面试】数据库
数据库1.你对数据库做了哪些优化2.你对数据库的索引了解吗3.你们数据库用的什么存储引擎,为什么用这个引擎4.innodb他为什么查询数据快5.你知道索引的原理吗,为什么用了索引就比较快6.mysql存储引擎7.你们有遇到数据库方面的瓶颈吗8.redis的数据结构和优化9.数据库分库,1个库要拆成n个库10.sql select区分大小写吗11.索引的类型12.联合查询需要每个字段建立索引吗13.redis做排行榜什么容器14.Redis适合做什么优化表结构,字段,索引,.原创 2021-04-23 16:47:35 · 137 阅读 · 0 评论 -
【面试】lua
面试题-lua1.lua热更2.lua和C++交互3.lua禁止修改表4.lua禁止全局变量5.lua原表6.lua gc要打破require缓存机制,我们必须删除缓存,package.loaded[module_name] = nil就可以做到。https://blog.youkuaiyun.com/zxm342698145/article/details/80613429lua和c++是通过一个虚拟栈来交互的。c++调用lua实际上是:由c++先把数据放入栈中,由lua去栈中取数据,然后返原创 2021-04-20 12:34:48 · 867 阅读 · 0 评论 -
【面试】linux && gdb
LinuxLinux开发你们怎么上传文件的gdblinux断点所有线程都会停住吗GDB查看所有线程栈命令当程序在gdb下因任何原因停止时,例如达到断点,所有执行线程都将停止,而不仅仅是当前线程。Linux上传文件的方法mac scpwindows ftp SecureCRTvscode remote 可以直接远程编码GDB多线程调试,最重要的几个命令:info threads 查看当前进程的线程。thread <ID> ...原创 2021-04-20 11:57:42 · 237 阅读 · 1 评论 -
【面试】go
1.go的协程2.go和C++传map有啥区别3.你对go语言的的特点特点1、go语言是开源的---go语言本身就是go语言编写的2、静态类型和编译型---go语言书写的程序必须通过编译生成归档文件或可执行文件,而后才能被使用或者执行3、跨平台---go语言本身支持跨平台开发,不论你是用什么样子的硬件环境还是软件环境基本上都可以进行go语言的开发(这句话有些多余,毕竟现在主流编程语言都支持不同的硬件与软件环境)4、自动垃圾回收---go语言的垃圾回收是由go语言本身去处理的,不需要人为干预,原创 2021-04-20 11:44:38 · 188 阅读 · 1 评论 -
【面试】C++_指针
1.指针引用区别2.智能指针的原理3.指针引用占用的内存大小4.怎么解决C++的空指针,野指针问题1.指针和引用的定义和性质区别:(1)指针:指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元;而引用跟原来的变量实质上是同一个东西,只不过是原变量的一个别名而已(2)引用不可以为空,当被创建的时候,必须初始化,而指针可以是空值,可以在任何时候被初始化。(3)可以有const指针,但是没有const引用;(4)指针可以有多级,但是引用只能是一级(int **p;合法 而原创 2021-04-19 14:09:49 · 190 阅读 · 0 评论 -
【面试】C++_数据结构_树
1.你了解红黑树吗,他的特性2.你了解b+树的数据结构吗3.二叉树的遍历有哪些方式4.完全二叉树红黑树的特性:(1)每个节点或者是黑色,或者是红色。(2)根节点是黑色。(3)每个叶子节点(NIL)是黑色。 [注意:这里叶子节点,是指为空(NIL或NULL)的叶子节点!](4)如果一个节点是红色的,则它的子节点必须是黑色的。(5)从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点。[这里指到叶子节点的路径]应用 map setB树的概念是为了解决一些现实问题而提出的,.原创 2021-04-19 13:34:16 · 111 阅读 · 0 评论 -
【面试】C++_数据结构_链表
链表怎么判断一个链表是环形,6或9形状呢,怎么判断二个链表合成一个链表,时间和空间复杂度方法一:哈希表法这里我们采用set这一关联容器。设置set的下标为ListNode*,遍历该链表的每一个结点,将未出现过的链表结点存储至set中,会出现两种情况:发现指向某一结点的指针已经存储过了,就说明这个链表是环形的。发现指向某一结点的指针是NULL,则说明这条链表有尾巴,不是环形的。方法二:快慢指针法我们可以思考一个问题:两位运动员在环形跑道上什么情况下会相遇?是当他们速度一致吗?显然不是,原创 2021-04-19 13:02:33 · 102 阅读 · 0 评论 -
【面试】C++_数据结构_堆栈
数据结构1.栈特性,栈的应用,栈为什么会溢出栈是一种只能从表的一端存取数据且遵循 "先进后出" 原则的线性存储结构。通常,栈的开口端被称为栈顶;相应地,封口端被称为栈底。因此,栈顶元素指的就是距离栈顶最近的元素栈的具体实现栈是一种 "特殊" 的线性存储结构,因此栈的具体实现有以下两种方式:顺序栈:采用顺序存储结构可以模拟栈存储数据的特点,从而实现栈存储结构;链栈:采用链式存储结构实现栈结构;两种实现方式的区别,仅限于数据元素在实际物理空间上存放的相对位置,顺序栈底层采用的是数组,链栈底层原创 2021-04-19 12:44:08 · 132 阅读 · 0 评论 -
【面试】C++_内存
1.内存有哪些问题2.怎么解决内存问题3.内存越界会怎么样,4.内存越界为什么会蹦5.发现内存泄漏方法6.内存优化7.内存池8.对象池内存越界内存越界访问有两种:一种是读越界,即读了不属于自己的数据,如果所读的内存地址是无效的,程度立刻就崩溃了。如果所读内存地址是有效的,在读的时候不会出问题,但由于读到的数据是随机的,它会产生不可预料的后果。另外一种是写越界,又叫缓冲区溢出。它会产生不可预料的后果,比如把程序返回地址改掉了,使函数返回时跳到未知内存,导致崩溃。野指针野指针,也原创 2021-04-19 12:13:25 · 110 阅读 · 0 评论 -
【面试】C++_多线程
多线程你们那些地方用了多线程你们用的什么锁锁有很多类型 pthread 用的什么锁pthread 关闭线程的方法消息队列多线程的问题//取消线程pthread_cancel(tid); 线程里面一般都有while true,while加个条件,在外部改变条件也可以让线程退出线程之间的锁有:互斥锁、条件锁、自旋锁、读写锁、递归锁。一般而言,锁的功能越强大,性能就会越低。1、互斥锁互斥锁用于控制多个线程对他们之间共享资源互斥访问的一个信号量。也就是说是为了避免多个线程在某一时刻.原创 2021-04-18 23:25:47 · 449 阅读 · 0 评论 -
【面试】C++_stl
1.stl常用容器的选择2.stl,你用得比较多的是那些,他底层怎么实现的,3.vector他的内存管理4.stl的内存管理5.stl的map是什么数据结构6.哈希map和map查询的性能差异利用他们的特性vector会根据push的先后顺序排序缺点:一个动态分配的数组(当数组空间内存不足时,都会执行: 分配新空间-复制元素-释放原空间);应用:背包map会根据key排序应用:玩家管理的容器queue应用:消息队列listsort()函数就是对list中的元素进...原创 2021-04-18 22:48:53 · 90 阅读 · 0 评论 -
【面试攻略】C++面试-新湃传媒
新湃传媒1.自我介绍2.说说你最近项目的架构3.你做了哪些架构优化4.你做过mmorpg吗,他的架构怎么样的5.你对分布式架构的理解6.分布式架构怎么保证节点副本数据一致性7.你对数据库做了哪些优化8.你了解红黑树吗,他的特性8.你对数据库的索引了解吗9.你了解b+树的数据结构了吗10.你对tcp了解吗11.你有什么要问我们的吗...原创 2020-12-20 00:56:57 · 228 阅读 · 2 评论 -
华为机试算法题
一共三道题,150分钟,第一二题200分,第三题400分,听说150分算过。主要是只告诉你通过率,没告诉你正确答案和你的错误答案做对比,不知道自己哪里漏了。/*第一题1-100围城一个圈,重1开始数,如果等于给定的数就删掉,继续数, 直到剩余的数量小于给定的数。此题100%通过输入3输出58,91输入4输出34,45,97*/#include <iostream>#include <string.h>#include <map>.原创 2020-12-10 02:43:20 · 1185 阅读 · 0 评论 -
【C++服务端技术】移动广播
/*基于9宫格的移动广播,进入视野离开视野1.根据玩家的xy左右计算玩家移动之前和移动之后的格子id2.根据格子id计算附近的格子,附近格子里面的玩家成为附近玩家3.向新减少的格子的玩家发送离开视野,向新增的格子的玩家发送进入视野*/bool Room::HandleOnMove( IRole * pRole ){ if(NULL == pRole) return false; Room *pRoom = pRole->GetRoom(); i...原创 2020-11-23 13:54:24 · 239 阅读 · 0 评论 -
【C++服务端技术】定时器
这个设计每调用一次就会重新注册,欢迎交流#include <iostream>#include <map>#include <vector>#include <time.h>#include <windows.h>#include <stdio.h>using namespace std;struct tagTime{ long long llStarTime; int iCount; int原创 2020-11-21 16:26:20 · 237 阅读 · 0 评论 -
C++11
发现这个经常被问到,恰好我工作中C++11用得不多。。。1.Initiallizer list2.auto type 大爱3.foreach 写c++像是再写c#4.nullptr 代替了c++ 03的NULL5.enum class代替了c++03的enum,更安全6.override关键标识 for virtual function (更加安全,直观 )7.final关键标识 ,主要是class 及virtual function8.关键字default标识, compiler转载 2020-11-05 15:54:53 · 286 阅读 · 0 评论 -
C++-发现内存泄漏方法+解决玩家网络卡的问题
1.发现内存泄漏方法用一个静态变量来记录这个类当前存活的数量,在需要监控的类的基类的构造函数里计数+1,在析构函数里计数-1。2.在WP微信中是如何发现内存泄漏的。WP微信使用对象计数的方式来初步发现内存泄漏,如果已经离开一个页面,但这个页面仍然有存活的实例,那么就说明这个页面发生泄漏了。可见要发现UI的内存泄漏,还是很容易的。怎么解决玩家网络卡的问题1.客户端插值(解决卡顿):当客户端A收到服务端发来的玩家B的位置,不是直接瞬移到数据包中指定的位置 ,而是使用插值的方法平滑地插值到新的位置转载 2020-10-28 23:02:27 · 219 阅读 · 0 评论 -
C++-栈
面试攻略栈什么是栈先进后出,后进先出,这就是典型的栈结构。从栈的操作特性来看,是一种操作受限的线性表,只允许在端插入和删除数据。为什么需要栈任何数据结构都是对特定应用场景的抽象,数组和链表虽然使用起来更加灵活,但是暴露了几乎所有的操作,难免会引发错误。当某个数据集合只涉及在某端插入和删除数据,且满足先进者后出,后进者先出的操作特性时,我们应该首选栈这种数据结构。栈和队列数据结构的区别栈是限定只能在表的一端进行插入和删除操作的线性表。队列是限定只能在表的一端进行插入和在另一端进行删除操作.转载 2020-10-27 22:43:57 · 1008 阅读 · 0 评论 -
C++面试基础篇2
原文链接https://segmentfault.com/a/1190000037494080?utm_source=sf-related转载的,说说我的个人感受吧,我知道这些是基础知识,知道这些基础当然最好了可是我想说的是大哥我是一个游戏服务端开发,我面向的是游戏玩家,我使用的是开发软件。你给我整那些stl源码?Linux内核?我的用户不是程序员,我不是开发电脑系统,也不是开发VS这样的编程软件。如果你们觉得我只懂得应用这些软件,不知道...转载 2020-10-24 22:48:16 · 134 阅读 · 0 评论 -
C++面试基础篇
基础篇1.const *和* const的区别如果const修饰在*p前则不能改的是*p,而不是指p;如果const是直接写在p前,则p不能改举个栗子:int i1=30int i2=40;const int *p = &i1p前并没有用const修饰,所以p是指针变量。能被赋值重新指向另一个内存地址。p=&i2; //正确 *p=i2; //错误 int * const p指针p因为有了const的修饰,所以为指针常量,即,指针p不能修改了。p.原创 2020-10-24 16:57:44 · 148 阅读 · 0 评论 -
模板和动态参数
#pragma once#include "BaseGameType.h"#include <vector>#include "Log/Log.h"#include "Serialize/Stream.h"#include "GameDefine.h"#pragma pack(push,1)template <typename T, TUint32 N>struct StaticVector{public: StaticVector() { m_ve.原创 2020-10-23 22:57:02 · 297 阅读 · 0 评论 -
msyql数据库优化
【msyql数据库】常用存储引擎的适用环境。MyISAM:默认的 MySQL 插件式存储引擎。如果应用是以读操作和插入操作为主,只有很少的更新和删除操作,并且对事务的完整性、并发性要求不是很高,那么选择这个存 储引擎是非常适合的。MyISAM 是在 Web、数据仓储和其他应用环境下最常使用的存储引擎 之一。InnoDB:用于事务处理应用程序,支持外键。如果应用对事务的完整性有比较高的 要求,在并发条件下要求数据的一致性,数据操作除了插入和查询以外,还包括很多的更新、 删除操作,那么 InnoDB 存储转载 2020-10-23 21:57:36 · 580 阅读 · 0 评论 -
我对服务器架构的几种设计的思考,以及他们优缺点
我对服务器架构的几种设计的思考,以及他们优缺点1.分线设计(诛仙端游-单服上万人同时在线)clien gameserver worldServer DBServer多个游戏逻辑服,分线设计,通过worldServer切换线,基本上游戏的所有功能都在这里,不同线的玩家可以聊天但是相互看不到,要换线才能在一起做任务。组队,工会,开服,跨服活动需要做在worldServer优点,因为gameserver可以多开,所以承载上有优势缺点,1.需要跨越gameserver的开发就麻烦一点,...原创 2020-10-23 16:09:54 · 361 阅读 · 0 评论 -
内存泄露与越界
内存泄露与越界是C/C++世界两大灾难。关于内存泄露,因为服务器可以用mempool,除了不需要delete以外还可以避免内存碎片提高运行速度,所以对于如何应付内存泄露我没有特别的心得。但是对于如何应对内存越界,有一些小经验。例如memcpy函数void * memcpy ( void * destination, const void * source, size_t num );就是容易发生越界的一个经典函数,刚开始做后台的几年里面因为这个函数出现的内存问题次数不少,但是后来发现可以用C++的方法来改造转载 2020-10-23 00:54:07 · 1016 阅读 · 0 评论 -
[手游项目4]C++封装的排行榜管理
CRankingMgr::Instance()->AutoInit(); //根节点 Json::Value root; //子节点 Json::Value partner; partner["matchid"] = 1; partner["bet"] = 2; root.append(partner); Json::FastWriter writer; CRankin...原创 2019-08-29 15:59:37 · 901 阅读 · 3 评论 -
LRU原理和Redis实现
https://baijiahao.baidu.com/s?id=1595292420641966263&wfr=spider&for=pc原创 2019-03-25 15:50:49 · 142 阅读 · 0 评论 -
C++基础知识复习
构造函数中是否可以调用虚函数 https://blog.youkuaiyun.com/sumup/article/details/78174915C++函数重载 https://blog.youkuaiyun.com/u013982161/article/details/52749146C++ 多态的实现及原理 https://www.cnblogs.com/Allen-rg/p/6927129.ht...原创 2019-01-26 10:51:47 · 169 阅读 · 0 评论 -
intech面试总结
一面:电话面试,总时间40分钟,2个人,第一个人问的一些基础的C++技术,主要是网络和数据库和多线程相关第二个人主要问一些项目架构,和项目管理相关。二面:(全是选择题)第1-4部分是智力题,找数字规律和找图形第5-6部分是性格题第7-10部分是逻辑题,和语文的阅读理解差不多,但是更像公务员的考试风格。一面感觉一般,本人工作中很少去复习基础知识,很多记不清楚,也有很多...原创 2019-01-17 17:28:54 · 1814 阅读 · 4 评论 -
C&C++——C函数与C++函数相互调用问题
https://www.cnblogs.com/sun-frederick/p/4772479.html转载 2019-01-16 10:04:30 · 264 阅读 · 0 评论