集群聊天服务器面试问题

数据明文安全问题

可以对数据库进行加密。如果是明文传输,就要用密文传输,传输之前要做加密,对端接收要做解密。但是做项目的时候没有引入加密解密的一个算法,具体实现还需要借鉴资料。
加密解密一种是对称加密,还有一种是非对称加密。对称加密算法就是客户端随机生成了一个密钥key,把login账号密码加密成密文,这样网络上有人抓包就不能破解。然后服务端解密需要密钥。用的是同一个钥匙,那就是对称加密。密钥不能在网络上传输,因为也会被抓取。所以使用密钥的对称加密,也存在安全问题。主要还是效率比较高(AES加解密算法)。非对称加密(xxxx.pub公钥、xxxx.pri私钥)公钥只能由私钥解出来。加密复杂效率慢,但是很安全。(RSA加解密算法)

历史消息存储

好友的qq号作为文件夹,好友的QQ号作为文件夹,给文件夹规定一个大小,或者按天存储。
这个文件夹id设计在数据库中。存储文件的时候做一个加密操作。具体表的设计
而且消息不能都往Mysql里存,因为存的越来越多,mysql会变慢。所以半年前的需要拿出来放到文件服务器上,换机器存储,因为不会频繁访问。

简要说一下项目

准备一个2-3分钟的项目简介
我这个项目是一个网络服务器的项目,他分为了四个模块,网络模块,我采用的是Muduo库,他的好处就是能够解耦了网络模块与业务模块的代码,能够让开发者专注于业务代码的开发。然后传输层用了C++11的技术,比如map、绑定器、消息发送以后的回调机制,从消息中取得消息Id,通过回调来处理消息。数据存储层用了mysql,比如用户账号、群组id、聊天消息、离线消息。单机服务下就是这几个模块,但是他的并发能力是有限的,所以在这里考虑了快速地能够提升服务器的整个项目的并发能力,能够支持项目的扩展,要支持多台服务器的话,首先需要挂一个nginx的负载均衡,因为主要是基于TCP的长连接。在负载均衡中,因为不同服务器有不同的人进行注册,如果不同服务器上的人需要进行通信的话,主要是引入了redis的MQ消息队列的一个功能,能够发布订阅,来完成跨服务器的通信。

自我介绍

上来要先做一个2-5分钟的自我介绍,看语言表达能力。开发工作中,只有20%的时间在做开发,其他时间都在开会议讨论方案。1、基本情况()。2、喜欢开发(看什么书,C++ Primer、计算机网络、操作系统原理),然后我还经常上github、csdn、bilibili这些技术类的网站看或者去提问题。而且我喜欢边学习边在CSDN写博客。我对于开发工作,希望自己能够积累工作经验和技术经验,能够在公司岗位上发挥自己的价值,希望能越走越高。
表达逻辑、自学能力的介绍、未来工作计划这三个方面

怎么保证消息的可靠传输

如果收不到,客户要显示发送失败。需要在业务层实现消息的确认机制。基于TCP实现,那为什么TCP的消息确认机制不能保证消息的可靠传输。业务上的可靠传输不能通过协议上的超时重传来实现,
面试官的问题不一定都是正确的,不要有学生心态,和面试官是对等的,讨论问题的。先看看问题有没有提的道理。用户不能知道底层的情况,所以还得在业务上实现。
心跳机制,01之间徘徊,发送1,收到ACK就减1为0。心跳给了客户端与服务器的一个状态,心跳失败,就说明服务器不可用了,直接显示发送失败。

如何实现消息在客户端按序显示

消息添加时间戳,然后排序,这种排序是有瑕疵的。排序需要规定一个时间周期,只能在这个时间周期内进行排序。
解决方法是给每一个消息都添加一个序列号,查找本地缓存中序列号,找到一条就加一查找下一条。序列号不仅仅可以保证消息的按序到达,还可以实现其他功能,消息撤回。甲的撤回请求,要撤回seq多少的消息,然后发给服务器,然后服务器推送撤回消息的请求,找到seq那个消息。而且每一台服务器时间不一样。用时间戳不可靠。

除了redis,还有哪些组件,能完成

redis:缓存数据库 key-value、数据持久化,
分布式锁,发布订阅功能 channel
服务器中间件:带有发布订阅的MQ消息队列,
kafka、zeromq、rebbitmq、rocketmq这些都能实现高并发的消息队列

redis运行不稳定,挂了的话怎么办?

流量,后续的订单直接不处理了,不能因为订单请求把自己的服务搞挂了,肯定是得不偿失的。不要潜意识认为redis不稳定的,

为什么用redis作为跨服务器的组件,为什么各个server不能直接通信呢?

这种网络拓扑设计耦合性太高,这样的业务实现问题很大而且不稳定。新增加一个服务器就要和其他所有服务器直连。服务器就和客户端差不多。如果用redis,服务器就不需要感知其他服务器的状态。增加服务器也不需要别人知道你来了,

如果网络拥塞严重,服务端如何感知客户端在线还是掉线了。

connect成功的client分配一个心跳计数。服务端启动一个心跳计时器,超时1s,把所有账号的心跳计数+1。如果账号的心跳计数超过5,就判定client已经掉线了。超过5的话就拆除这个client所有的连接以及其它资源。服务端接收到一次客户端的消息(MSG_TYPE:heartbeat),就会把计数减1。如果网络拥塞严重,心跳机制超过5就会感知到下线了。
传输层keepalive的功能,每隔7200s会发送一个探测的报文段,如果对方回复了,那说明对方在线,如果并没有响应,那就延迟75s继续发送探测包。依旧没有响应,最多重新探测9次,如果都没有响应,拆除连接。传输层的上边是应用层(心跳机制),应用层已经死锁了,应用层的socket,传输层依然可以和对方发送keepalive。应用层死锁无法交互消息,客户端死锁,传输层有可能还是会发送消息的。所以说只有传输层的TCP的keepalive是没有办法保持长连接的,要保证业务,所以在应用层需要有心跳机制。TCP的超时重传,可能业务层还是因为别的原因无法执行业务。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

No.1 杀戮尖塔Godot复刻|项目概述|场景设置

项目概述 含有47个脚本文件,包括1185行代码,最长的脚本有111行 Battle Node——战斗节点 start_battle()——开始战斗turn management——管理回合win/lose conditions——识别输赢条件 EnemyHandler——敌人处理程序 enemy turn management——管理…

化工专业如何转软工

在当今数字化时代,跨考软件工程已经成为许多理工科学子的一个重要选择。化工专业的同学有着扎实的理工科基础,尤其是数学功底,这对于转向计算机领域是一个天然的优势。让我们详细探讨如何规划这段跨考之路。 编程语言的选择是入门的第一步。…

《Opencv》基础操作<1>

目录 一、Opencv简介 主要特点: 应用领域: 二、基础操作 1、模块导入 2、图片的读取和显示 (1)、读取 (2)、显示 3、 图片的保存 4、获取图像的基本属性 5、图像转灰度图 6、图像的截取 7、图…

论文阅读:A Software Platform for Manipulating theCamera Imaging Pipeline

论文代码开源链接: A Software Platform for Manipulating the Camera Imaging Pipelinehttps://karaimer.github.io/camera-pipeline/摘要:论文提出了一个Pipline软件平台,可以方便地访问相机成像Pipline的每个阶段。该软件允许修改单个模块…

ChatGPT的应用场景:开启无限可能的大门

ChatGPT的应用场景:开启无限可能的大门 随着人工智能技术的快速发展,自然语言处理领域迎来了前所未有的突破。其中,ChatGPT作为一款基于Transformer架构的语言模型,凭借其强大的语言理解和生成能力,在多个行业和场景中展现出了广泛的应用潜力。以下是ChatGPT八个最具代表…

音视频-什么是帧,视频为什么要编码

帧就是动画中的一张图片,这相当于电影胶片上的一个镜头,一帧就是一幅静止的画面,连续的帧就形成了我们看到的动画和视频。 但是直接采集后没经过处理的视频,其实是没有办法真正在互联网上进行传输的。以一张1920乘1080的图片为例&…

“蜀道山”高校联合公益赛 Web (部分)

文章目录 奶龙牌WAF海关警察训练平台恶意代码检测器 奶龙牌WAF <?php if ($_SERVER[REQUEST_METHOD] POST && isset($_FILES[upload_file])) {$file $_FILES[upload_file];if ($file[error] UPLOAD_ERR_OK) {$name isset($_GET[name]) ? $_GET[name] : basen…

【JavaEE初阶 — 网络原理】初识网络原理

目录 1. 网络发展史 1.1 独立模式 1.2 网络互连 1.2.1 网络互联的背景 1.2.2 网络互联的定义 1.3 局域网LAN 1.4 广域网WAN 2. 网络通信基础 2.1 IP地址 2.2 端口号 2.3 认识协议 2.4 五元组 2.5 协议分层 2.5.1 分…

Linux的介绍及虚拟机centOS系统的下载与应用

1、什么是Linux Linux 是一种类 Unix 操作系统&#xff0c;它的内核&#xff08;Kernel&#xff09;由 Linus Torvalds 于 1991 年首次发布。作为一个开源、免费的操作系统&#xff0c;Linux 被广泛用于服务器、桌面计算机、嵌入式设备、移动设备等各种场景。 1、操作系统 操…

Leetcode打卡:交替组II

执行结果&#xff1a;通过 题目&#xff1a;3208 交替组II 给你一个整数数组 colors 和一个整数 k &#xff0c;colors表示一个由红色和蓝色瓷砖组成的环&#xff0c;第 i 块瓷砖的颜色为 colors[i] &#xff1a; colors[i] 0 表示第 i 块瓷砖的颜色是 红色 。colors[i] 1 …

【ONE·基础算法 || 动态规划(二)】

总言 主要内容&#xff1a;编程题举例&#xff0c;熟悉理解动态规划类题型&#xff08;子数组、子序列问题&#xff09;。                文章目录 总言5、子数组问题&#xff08;数组中连续的一段&#xff09;5.1、最大子数组和&#xff08;medium&#xff09;5.1.…

Qt程序发布及打包成exe安装包

参考:Qt之程序发布以及打包成exe安装包 目录 一、简述 Qt 项目开发完成之后,需要打包发布程序,而因为用户电脑上没有 Qt 配置环境,所以需要将 release 生成的 exe 文件和所依赖的 dll 文件复制到一个文件夹中,然后再用 Inno Setup 打包工具打包成一个 exe 安装包,就可以…

通过抓包,使用frida定位加密位置

首先我们抓取一下我们要测试的app的某一个目标api&#xff0c;通过抓api的包&#xff0c;得到关键字。 例如&#xff1a;关键字&#xff1a;x-sap-ri 我们得到想要的关键字后&#xff0c;通过拦截 类&#xff0c;寻找我们的关键字&#xff0c;及找到发包收包的位置&#xff0c…

MFC图形函数学习12——位图操作函数

位图即后缀为bmp的图形文件&#xff0c;MFC中有专门的函数处理这种格式的图形文件。这些函数只能处理作为MFC资源的bmp图&#xff0c;没有操作文件的功能&#xff0c;受限较多&#xff0c;一般常作为程序窗口界面图片、显示背景图片等用途。有关位图操作的步骤、相关函数等介绍…

钟睒睒的“傲慢与偏见”

文章内容根据网络内容整理形成 最近&#xff0c;钟睒睒关于绿瓶水不适合长期饮用的言论&#xff0c;在网上引起了一番新的热议&#xff0c;让刚平静不久的包装饮用水竞争&#xff0c;再次掀起一阵波澜&#xff0c;同时&#xff0c;其对于企业家直播带货的等系列看法&#xff0c…

比亚迪降价令背后的反思,创新还是压榨?

科技新知 原创作者丨依蔓 编辑丨蕨影 比亚迪要求供应商明年起降价10%&#xff1f; 近日&#xff0c;网传一封有关比亚迪乘用车要求供应商降价的邮件&#xff0c;署名为比亚迪集团执行副总裁、乘用车首席运营官何志奇。 邮件称&#xff0c;2025年市场竞争将更加激烈&#xff0…

自媒体图文视频自动生成软件|03| 页面和结构介绍

代码获取方式在文本末尾&#x1f51a; *代码获取方式在文本末尾&#x1f51a; *代码获取方式在文本末尾&#x1f51a; *代码获取方式在文本末尾&#x1f51a; 视频图片生成器 一个基于 Python 和 Web 的工具&#xff0c;用于生成带有文字和语音的视频以及图片。支持多种尺寸、…

(11)(2.2) BLHeli32 and BLHeli_S ESCs(二)

文章目录 前言 1 传递支持 前言 BLHeli 固件和配置应用程序的开发是为了允许配置 ESC 并提供额外功能。带有此固件的 ESC 允许配置定时、电机方向、LED、电机驱动频率等。在尝试使用 BLHeli 之前&#xff0c;请按照 DShot 设置说明进行操作(DShot setup instructions)。 1 传…

逻辑处理器核心指纹修改

navigator.hardwareConcurrency的属性,可以用来获取CPU的逻辑处理器核心数。 1、navigator.hardwareConcurrency接口定义&#xff1a; third_party\blink\renderer\core\frame\navigator_concurrent_hardware.idl // https://html.spec.whatwg.org/C/#navigator.hardwarecon…

Linux下的火墙管理及优化

从功能角度来讲 防火墙是位于内部网和外部网之间的屏障&#xff0c;它按照系统管理员预先定义好的规则来控制数据包的进 从功能实现角度来讲 火墙是系统内核上的一个模块netfilter(数据包过滤机制) 通过netfiler来管理kernel space中的策略 netfilter简介 Netfilter是Lin…