首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

双非本科的大厂面经总结,不是很卷!(新鲜出炉)

介绍下在字节跳动训练营的这个项目 回答:这个项目是一个在线 markdown 编辑器,用的是 React 及其相关生态做的前端,Koa2 做的服务端,采用的MongoDB数据库。...面试官:我看到你简历上有一个在线聊天室的项目,用到了 socket.io 来做实时通讯这一块,而你训练营的项目用的是 ws 这个 npm 库,能说说为什么用 socket.io 吗以及 socket.io...我所了解到的是,相比于 ws,socket.io 在客户端有良好的支持,但是 ws 没有,在客户端写的时候还需要自己去封装。...然后后端我引用了 formidable-upload-koa 和 fs-extra 这两个库,将传过来的文件格式进行解析并移动到一个暴露在外的可访问目录下,最后再将文件路径存于数据库中并返回路径给前端,...这是我需要再多刻意练习的。 关于面试的建议 首先,我觉得应该抱着学习的心态多面试,不论是找实习的同学还是找校招的同学。面试就是一个从面试官那取经、发现不足的地方。所以一定一定不要紧张,要放开手脚来。

42120

基于实践:一套百万消息量小规模IM系统技术要点总结

正常逻辑下,群聊消息发送的流程应该是这样: 1)遍历群聊的成员并发送消息; 2)查询每个成员的在线状态; 3)成员不在线的存储离线; 4)成员在线的实时推送。...5.3.1)对于方案一:redis 前提:用户 & 联系人关系,由于是业务数据,因此统一默认使用关系型数据库存储。...5.3.2)方案二:redis+mysql 前提:用户 & 联系人关系,由于是业务数据,因此统一默认使用关系型数据库存储。...《阿里IM技术分享(五):闲鱼亿级IM消息系统的及时性优化实践》 10、我在项目实践中的体会 作为研发者,有两年多的时间都在维护迭代公司的 IM 消息系统,以下是我自已的小小体会。...我体会到的重点难点有以下几方面: 1)业务闭环:消息是如何写入存储、消息是如何消费掉、在线消息是如何实现、离线消息是如何实现、群聊/私聊有何不一样、多端消息如何实现; 2)解 Bug 填坑:在线消息收不到

2.1K31
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    从客户端的角度来谈谈移动端IM的消息可靠性和送达机制

    《IM单聊和群聊中的在线状态同步应该用“推”还是“拉”?》 《IM群聊消息如此复杂,如何保证不丢不重?》...如何确保 IM 不丢消息是个相对复杂的话题,从客户端发送数据到服务器,再从服务器抵达目标客户端,最终在 UI 成功展示,其间涉及的环节很多,这里只取其中一环「接收端如何确保消息不丢失」来探讨,粗略聊下我接触过的两种设计思路...数据可靠抵达是个通用性的问题,无论是网络二进制流数据,还是上层的业务数据,都有可靠性保障问题,TCP 作为网络基础设施协议,其可靠性设计的可靠性是毋庸置疑的,我们就从 TCP 的可靠性说起。...《移动端IM开发需要面对的技术问题》 《开发IM是自己设计协议用字节流好还是字符流好?》 《请问有人知道语音留言聊天的主流实现方式吗?》...《一个低成本确保IM消息时序的方法探讨》 《IM单聊和群聊中的在线状态同步应该用“推”还是“拉”?》 《IM群聊消息如此复杂,如何保证不丢不重?》

    2.5K20

    Node.js下基于Express + Socket.io 搭建一个基本的在线聊天室

    数据库采用的是mongodb , 并使用其相应mongoose对象工具来处理数据的存取。 功能主要涉及:群聊、私聊、设置个人信息、查看聊天记录、查看在线用户等 效果图: ?   ...首先,数据库中存储了用户信息(user)和聊天内容(content), mongoose版的Schema如下: module.exports = { user:{ name:...nodedb"); 这样一来就可以直接操作数据库数据了,比如与app.js在同目录下的  chat_server.js 中的某部分(获取上线用户) // 获取上线的用户...构建  即思路 1.上面说到了,每位用户都把数据置入数据库中,其中有status这一属性,其实"down"表示下线,“up"表示上线,在线用户就是这么处理 在index.js(路由配置文件)看看这小段代码...status的处理会很麻烦,很乱         用户列表的显示会有严重错误,其根源还是数据库中status处理不当 所以后面通过在服务端实现下线处理的操作,disconnect之后: socket.on

    2.6K10

    搭建简易的物联网服务端和客户端-redis+websocket(二十五)

    许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。.../socket.io.js"> 3.具体数据传输方式 乱画的 4.tcp服务器 TCP服务器,通过与硬件建立TCP连接,接受硬件发送过来的json数据,将数据解析,随后更新到...,并存入redis 超时时间一定要设置,虽然每次都是更新数据,但是数据放在内存里还是不好,毕竟小霸王机 //解析TCP接受到的JSON数据 var text = JSON.parse(data.toString...()); //将数据存入redis,键名为"hum" redisClient.set("hum", text.hum, function(err, reply){ console.log("set...socket.emit('news', { reply })//推送信息 }) }, 10000) }) }) 6.前端 我使用的是

    2.5K20

    IM开发基础知识补课(三):快速理解服务端数据库读写分离原理及实践建议

    原因很简单,我们知道IM的聊天数据分两种: 1)一种是实时消息(就是你在线,对方也在线情况下的聊天数据交互); 2)一种是离线消息(就是你在线,对方不在线时,你发过去的消息,对于对方而言就是离线消息了...,聊天消息在此时就相当于左手倒右手——即聊天数据的本质就是从A用户经过服务端到达B用户就完了,服务端完全没必要存储(当然,我们讨论的是技术理想情况,实际上抛开技术因素来说,这么多丰富的用户行为数据你是运营方你会放过吗...离线消息的收发:当接收方不在线时,发送方的聊天数据在服务端只需要作短因果报应存储,因为接收方一旦上线就拉走了,服务器删除即可(注意:从技术上来说就是这样的哦)。...《IM单聊和群聊中的在线状态同步应该用“推”还是“拉”?》 《IM群聊消息如此复杂,如何保证不丢不重?》...《一个低成本确保IM消息时序的方法探讨》 《IM单聊和群聊中的在线状态同步应该用“推”还是“拉”?》 《IM群聊消息如此复杂,如何保证不丢不重?》

    1.1K10

    清华大学陈文光教授:AI时代需要怎样的数据处理技术?

    在这样的趋势下,我今天想分享三个观点,也是未来的数据库面临的三个比较重要的发展趋势: (一)在线离线一体化 这张图是企业常见的在线、离线两个链路。...刚才我们讲到,可以通过数据库本身的 HTAP 引擎解决在线/离线一致性的问题,如果没有这样的混合系统,应该如何实现两份数据达到在线离线一致性?下面以图风控方案中的在线离线一体化为例,给大家介绍。...在关系型数据库中,可以通过一些插件支持向量数据库的语义,同时在调用查询引擎的时候,将数据分到不同的链路上执行,从用户的角度就可以实现只部署一个系统,使用一套语言,完成相关工作。...(三)数据处理与 AI 计算一体化 有人可能会问,数据处理不就是 SQL 吗?AI 是神经网络层面的东西,AI 与 SQL 为什么会结合到一起?我举一个例子。...我认为还是要基于 Python,因为 AI 是主要的计算形式,所以整个数据处理应该围绕 AI 建设。从编译优化的角度来讲,我们希望把 PySpark 做很多的优化。

    54610

    Feed 流系统实战

    因为活跃用户和不活跃用户常常被叫做「在线用户」和「离线用户」,所以这种通过推拉结合处理头部作者发布内容的方式也被称为「在线推,离线拉」。...再优化一下存储 在前面的讨论中不管是「关注 Timeline」还是关注关系等数据我们都存储在了 MySQL 中。...在使用「在线推,离线拉」策略时我们需要判断用户是否在线,在为 Timeline 设置了过期时间后,Timeline 缓存是否存在本身即可以作为用户是否在线的标志。...对于时间线这种集合式的还存在第二类缓存穿透问题,正如我们刚刚提到的 Redis 中通常只存储最近一段时间的 Timeline,当我们读完了 Redis 中的数据之后无法判断数据库中是否还有更旧的数据。...这两类问题的解决方案是一样的,我们可以在 SortedSet 中放一个 NoMore 的标志,表示数据库中没有更多数据了。

    15510

    Node.js + Socket.io 实现一对一即时聊天

    实现一对一即时聊天应用,重要的一点就是消息能够实时的传递,一种方案就是熟知的使用 Websocket 协议,本文中我们使用 Node.js 中的一个框架 Socket.io 来实现。.../js/chat.js"> Socket.io Client 客户端首先创建一个 socket 对象,io() 的第一个参数是链接服务器的 URL,默认情况下是 window.location...emit:触发一个事件,第一个参数是事件名称,第二个参数是要发送到另一端的数据,第三个参数是一个回调函数用来确认对方的接收信息,这个可以忽略。 on:注册一个事件,用来监听 emit 触发的事件。.../io.js')(server); 创建 io.js 在加载 socket.io 时传入 server 对象,这时会拿到一个服务端的 io 对象,同步的注册 connection 事件,如果有新的客户端进来会被触发...,如果在线通过 socket.id 找到对应的 socket 向接收方推送消息,如果用户不在线,可以做些离线消息推送处理。

    2.6K10

    IM开发干货分享:我是如何解决大量离线消息导致客户端卡顿的

    如果客户端不在线,我们服务端需要把发送的消息存储在离线消息表中,等下次对方客户端上线,服务端NettyServer通过长链接把离线消息push给客户端。...4.1 方案一(被pass掉的一个方案) ▶ 【问题症状】: 客户端登录卡顿的主要原因是,服务端会强推大量离线消息给客户端,客户端收到离线消息后会回复服务端ack,然后将消息存储到本地数据库、刷新UI等...▶ 【于是我想】: 为什么客户端收到消息后还没有将数据存储到数据库就回复给服务端ack?很有可能存储失败,这本身不合理,这是其一。其二,服务端强推导致客户端卡死,不关心客户端的处理能力,不合理。...优化前:服务端采用push模型给客户端推消息,不论是在线消息还是离线消息,ack的逻辑都一样,其中还用到了kafka、redis等中间件,流程很复杂(我在这里就不详细展开介绍ack的具体流程了,反正不合理...离线消息和在线消息不同的是,我们不存储在线消息,而离线消息会有一个单独的库存储。

    2.1K11

    一文搞懂大模型!基础知识、 LLM 应用、 RAG 、 Agent 与未来发展

    三金哥:你是说自己部署 LLM 模型吗?离线模型能达到在线模型的效果吗?运行离线模型需要什么样的硬件资源?...关于 LLM 的基础知识,我们前面已经基本把 LLM 是什么,LLM 应该具备哪些特性,LLM 的主要发展历史给讲清楚了,又介绍了什么是在线 LLM 模型,什么是离线 LLM 模型。...嵌入以及存储块到向量数据库:使用向量嵌入技术(如Ollama Embeddings)为每个文本块生成向量,并将这些向量存储到向量数据库中,如 Weaviate。...检索 & 增强:利用向量数据库作为检索器,通过用户查询和嵌入向量之间的语义相似性获取数据,然后使用一个固定的聊天模板将检索到的上下文与用户的问题结合起来,发送给 LLM 进行回答。...在嵌入和存储到向量数据库时,考虑使用不同的嵌入模型和数据库技术,以优化检索性能。 在检索增强生成阶段,尝试不同的聊天模板和 LLM 模型,以获得最佳的生成效果。

    4.3K25

    超详细丨完整的推荐系统架构设计

    系统边界的确定,简单来说,就是在输入方面确定需要别人给我提供什么,而在输出方面确定我要给别人提供什么。...在离线层虽然进行的是离线作业,但其生产出来的数据通常是被实时使用的,因此离线数据在生产出来之后还需要同步到方便在线层读取的地方,例如数据库、在线缓存等。...此外,近线层的计算是可以使用离线数据的,但前提是需要提前将这些数据同步到对实时计算友好的存储系统中。 在近线层中执行的典型任务包括但不限于: 特征的实时更新。...在线层最本质的东西并不是在线计算部分,因为在极端情况下,在接收到用户请求之后,在线层可以直接从缓存或数据库中取出结果,返回给用户,而不做任何额外计算。...那么问题来了:这些复杂计算一定要放到在线层做吗?为了回答这个问题,不妨假设:如果将所有计算都放在离线层做,在线层只负责按照用户ID查询返回结果,是否可行?

    1.8K10

    高频场景题分析|Feeds 流怎么设计?

    因为活跃用户和不活跃用户常常被叫做「在线用户」和「离线用户」,所以这种通过推拉结合处理头部作者发布内容的方式也被称为「在线推,离线拉」。...再优化一下存储 在前面的讨论中不管是「关注 Timeline」还是关注关系等数据我们都存储在了 MySQL 中。...在使用「在线推,离线拉」策略时我们需要判断用户是否在线,在为 Timeline 设置了过期时间后,Timeline 缓存是否存在本身即可以作为用户是否在线的标志。...对于时间线这种集合式的还存在第二类缓存穿透问题,正如我们刚刚提到的 Redis 中通常只存储最近一段时间的 Timeline,当我们读完了 Redis 中的数据之后无法判断数据库中是否还有更旧的数据。...这两类问题的解决方案是一样的,我们可以在 SortedSet 中放一个 NoMore 的标志,表示数据库中没有更多数据了。

    29410

    超详细丨完整的【推荐系统】架构设计

    系统边界的确定,简单来说,就是在输入方面确定需要别人给我提供什么,而在输出方面确定我要给别人提供什么。...在离线层虽然进行的是离线作业,但其生产出来的数据通常是被实时使用的,因此离线数据在生产出来之后还需要同步到方便在线层读取的地方,例如数据库、在线缓存等。...此外,近线层的计算是可以使用离线数据的,但前提是需要提前将这些数据同步到对实时计算友好的存储系统中。 在近线层中执行的典型任务包括但不限于: 特征的实时更新。...在线层最本质的东西并不是在线计算部分,因为在极端情况下,在接收到用户请求之后,在线层可以直接从缓存或数据库中取出结果,返回给用户,而不做任何额外计算。...那么问题来了:这些复杂计算一定要放到在线层做吗?为了回答这个问题,不妨假设:如果将所有计算都放在离线层做,在线层只负责按照用户ID查询返回结果,是否可行?

    2K20

    PowerJob 在线日志饱受好评的秘诀:小但实用的分布式日志系统

    因此,在线日志的第一级存储介质应该由 server 本身来承担。 存内存还是磁盘?既然确定了由 server 来存储原始数据,那么就面临内存和磁盘二选一的问题了。但,这还用选吗?...同时,我也相信,大部分程序员(包括我在内)应该从来没有接触过外部排序,这趟浑水,我又何必去趟呢? ? 3.2 H2 数据库简介 那么,有没有什么既能使用磁盘做存储,又有排序能力的框架/软件呢?...世上会有这等好事吗?你别说,还真有。而且是远在天边,近在眼前,可以说是和程序员形影不离的一样东西——数据库。 “等等,你刚才不是说,不拿数据库作为一级存储介质吗?怎么滴,出尔反尔?” “哼,年轻人。...在 powerjob-server 中,我便通过 Spring Data Jpa 来使用 H2,用户体验非常友好(当然,多数据源的配置很不友好!)。...PowerJob 分布式日志组件的核心原理和实现,当然,在实际使用中,还引入了许多优化,限于篇幅,这里简单提一下,有兴趣的同学可以自己去看源码~ 高频率在线访问降压:如果每次用户查看日志,都需要从数据库中查询并输出

    1.2K10

    项目没亮点?那就来学下pk功能设计吧

    我是南哥,一个Java学习与进阶的领路人。 相信对你通关面试、拿下Offer进入心心念念的公司有所帮助。 1....1.2 pk进度条 pk进度条数据我们打算存储到高性能内存数据库Redis,这里使用Redis的Map结构,存储两个pk主播的进度条数据。...我们把用户的连接信息,包括用户id、长连接的WebSocket服务器地址,都存储在Redis中进行集中式的状态管理。当要推送数据时,获取用户所在WebSocket服务器地址即可。...Socket.IO Redis adapter适配器可以将事件广播到多个单独的 socket.io 服务器节点,用于在多台WebSocket服务器共享连接状态。...我是南哥,南就南在Get到你的点赞点赞点赞。 创作不易,不妨点赞、收藏、关注支持一下,各位的支持就是我创作的最大动力❤️

    9188

    chat集群聊天室项目 代码+讲解(二):业务模块

    文章目录 项目简单架构图 1.0版本:单服务器 2.0版本,横向扩充,负载均衡 3.0版本,调优 代码 讲解 为什么要设置单例 MsgHandler 的设计 业务中为什么不直接对接数据库?...id和对应的处理方法 unordered_map _msgHanderMap; //存储在线用户连接 unordered_map应该上个锁了,甚至是像“懒汉”那样上两个锁了。...---- 业务中为什么不直接对接数据库? 在放出来的登录业务中,也可以看到业务层并没有直接对接数据库的权利。 走一层数据库映射不麻烦吗? 业务层还没有知道数据库设计的权力。...给它数据就够了,数据哪里来的不用它管了。 我们希望业务层看到的都是对象,了解一下 ORM框架。简单了解可以看一下这篇 MVC的代码写过,ORM的代码也写过,两者之间的差距还是能感受到的。 ----

    81630

    零基础IM开发入门(三):什么是IM系统的可靠性?

    从用户行为来讲,消息“可靠性”应该分为两种类型: 1)在线消息的可靠性:即发送消息时,接收方当前处于“在线”状态; 2)离线消息的可靠性:即发送消息时,接收方当前处于“离线”状态。...话题有点跑偏,我们回到正题:在上面这张图里,客户A发送消息到服务端、服务端中转消息给客户B,假设这两条数据链接中使用的通信协议是TCP,你认为在TCP所谓可靠传输协议加持下,真的能保证IM聊天消息的可靠性吗...数据的可靠送达是个通用性的问题,无论是网络二进制流数据,还是上层的业务数据,都有可靠性保障问题,TCP 作为网络基础设施协议,其可靠性设计的可靠性是毋庸置疑的,我们就从 TCP 的可靠性说起。...在某此后IM的实现中是将所有的离线消息按会话进行分组,每组回复一个ACK,假如某个ACK丢失,则只需要重传该会话的所有离线消息。...具体过程在服务端和客户端可能有所不同: 1)客户端 :我们可以通过构造一个map来维护已接收消息的id,当收到id重复的消息时直接丢弃; 2)服务端 :收到消息时根据id去数据库查询,若库中已存在则不进行处理

    90661

    大数据架构师从入门到精通 学习必看宝典

    第二章:更高效的WordCount 2.1 学点SQL吧 你知道数据库吗?你会写SQL吗?如果不会,请学点SQL吧。...不论是离线计算还是实时计算,越来越多的大数据处理框架都在积极提供SQL接口。 2.3 SQL On Hadoop之Hive 什么是Hive?...离线:比如,每天将前一天的数据提供到指定的数据源(DB、FILE、FTP)等;离线数据的提供可以采用Sqoop、DataX等离线数据交换工具。...实时:比如,在线网站的推荐系统,需要实时从数据平台中获取给用户的推荐数据,这种要求延时非常低(50毫秒以内)。...在我们的业务中,遇到的能用机器学习解决的问题大概这么三类: 分类问题:包括二分类和多分类,二分类就是解决了预测的问题,就像预测一封邮件是否垃圾邮件;多分类解决的是文本的分类; 聚类问题:从用户搜索过的关键词

    75030
    领券