背景需求 我想应该有一些人和我有一样的需求,比如需要自动推送消息到钉钉 我喜欢shell,是因为在Linux环境下,几乎可以完成所有的事儿,而且依赖问题几乎可以忽略不计(一些特殊环境除外)。...所从这个角度出发,我大部分的代码都会优选Shell,当shell无法完成时我才会借助第三方语言来辅助,比如:PHP、Python等 ---- 关于钉钉机器人 这里所讲的记得钉钉机器人是指钉钉群聊的自定义机器人...; 本次介绍的不支持应答机制,当然如果自己创建钉钉应用是可以实现的; 更多关于自定义机器人请参考钉钉官方文档; ---- 步骤开始 在钉钉群里添加自定义机器人 找到需要添加机器人的群; 点击群会话框的右上角的齿轮...→机器人→自定义机器人; 根据自己需求,填写机器人信息; 安全设置官方提供两种方式,人选其一,博主推荐加签方式; webhook URL就是你推送消息的地址,如果您和博主一样选择加签(即 sign)方式...,那么那一串key您也需要拷贝下来,更详细的加签方式请参考官方文档 脚本调试给钉钉机器人的Webhook推送消息 基本工作做的差不多了,就可以调试了脚本了,官方提供多种语言的加签方式,但是没有提供shell
准备 RabbitMQ 只有在安装和配置软件后,才能使用RabbitMQ发送和接收消息,安装教程可以参考CentOS安装RabbitMQ的教程。...绑定是队列和交换之间的连接。Exchange提供特定exchange绑定的队列。究竟如何取决于exchange本身。 本文将使用上述五个术语。...使用简单示例测试RabbitMQ和Puka 要测试消息代理和puka是否工作正常,并掌握发送和接收消息在实践中的工作方式,请创建一个名为的示例python脚本 rabbit_test.py vim rabbit_test.py...生产者定期向他们可能不知道的用户发送消息(制作消息并将其发送到fanout exchange)。...新订阅者订阅业务通讯(将自己的队列绑定到同一个简报fanout),从业务通讯fanout交换将向所有注册用户(队列)发送消息。
由于邮件发送是一个耗时操作,在旧版微人事里边我当时为了省事直接上的多线程,但是这种方式不易扩展,无法解耦,用过就知道这有多么不方便了。...如何确保消息的可靠性?在理想的环境下这些问题都不存在,但是在复杂的生产环境中,什么都是有可能的,所以,我们要通过技术手段去处理这些问题。...松哥之前发过一篇如何在 Spring Boot 中解决 RabbitMQ 可靠性的问题的文章,但是代码排版不是很好,很多小伙伴表示看的脑瓜疼,于是,周末抽空录了两个视频教程,代码直接应用在微人事(https...首先来看消息发送确认: 再来看通过定时任务对发送失败的消息进行重试: 好了,通过这两个视频,主要向大家介绍了如何确保消息发送的可靠性,至于消息消费的可靠性,松哥明天来和大家捋一捋,如果小伙伴们对完整的微人事项目视频感兴趣...好了,视频中涉及到的所有代码包括数据库脚本,都已经提交到 GitHub 和 Gitee 上了,地址分别是:https://github.com/lenve/vhr 和 https://gitee.com
写在前面 最近小伙伴们的要求越来越高,学完设计模式学高并发,学完高并发又想学Java8新特性,学完Java8新特性又要学Spring,这不又让我整理一篇关于分布式事务的文章,而且还提出了要求:要实战型的...想来想去,还是按照小伙伴们留言说的:先写一篇关于实战型的文章吧!也是纯技术文章,熬夜两周多整理出来的!在此,也要感谢下在公众号方面给予我支持和帮助的前辈们!...#我忽略了 [root@localhost sbin]# rabbitmqctl add_user admin 12345678 #添加新用户和密码 Creating user "admin" ....因此,需要考虑的东西更多,系统复杂性增大 十二、如何保证消息不被重复消费 分析:这个问题其实换一种问法就是,如何保证消息队列的幂等性?这个问题可以认为是消息队列领域的基本问题。...,就是每一个消息都有一个offset,kafka消费过消息后,需要提交offset,让消息队列知道自己已经消费过了。
文章中,我将从如下几个方面进行介绍: 1)这款IM产品的主要业务及特点; 2)IM系统业务现状和痛点; 3)升级改造之路; 4)消息ACK逻辑的优化。...3、IM系统业务现状和痛点 3.1 业务现状 笔者负责整个公司的实时聊天系统,类似与微信、QQ那样,有私聊、群聊、发消息、语音图片、红包等功能。 下面我详细介绍一下,整个聊天系统是如何运转的。...3.2 业务痛点 随着业务蓬勃发展,用户的不断增多,用户创建的群、加入的群和好友不断增多和聊天活跃度的上升,某些用户不在线期间,产生大量的离线消息(尤其是针对群聊,离线消息特别多)。...和客户端的同事一起分析了一下原因: 1)用户登录,服务端通过循环分批下发所有离线消息,数据量较大; 2)客户端登录后进入首页,需要加载的数据不光有离线消息,还有其他初始化数据; 3)不同价位的客户端处理数据能力有限...另外:我们还增加了消息漫游功能,用户切换手机登录后仍然可以查到历史消息,这部分内容我就不展开详细介绍给大家了。 6、设计优化方案时的文档截图(仅供参考) 下面是优化的方案文档截图,请大家参考。 ?
面试官心理分析 首先聊到这个问题,其实主要是想要考察两个点: 你在实际工作中到底有没有真正使用过MQ,并对消息队列原理做过深入的了解。或者是否从整体上是否了解过MQ的架构原理。...类似这样的问题其实有很多,比如:如果让你设计一个Spring框架你会怎么做,让你涉及一个Dubbo RPC远程调用框架你怎么设计?让你设计一个MyBatis框架你会怎么去设计?...这样的问题其实核心的点也不要你完全看过它核心的源码。只要你大致知道实现它的技术原理、核心技术组成、以及一些关键问题的解决思路是如何的。按着这种方式把链路串起来回答就好。...步入正题 回答这个问题,大致可以从两方面来考虑: 首先这个MQ需要支持可伸缩性,就是需要的时候可以快速扩容,这样能够更好的响应访问量激增,从而有一个更好的吞吐量和容量。...同时还要考虑到落盘的方式:要采用顺序写,这样才会没有磁盘随机读写的寻址开销的性能问题。顺序写同时也是Kafka的思路。 还需要考虑到MQ的可用性。其实这里可以借鉴Kafka的高可用保障机制。
您可以使用 Errbot(聊天机器人)从聊天室以交互方式启动脚本。errbot 最重要的功能是它可以连接到您想要的任何聊天服务器,并具有一系列功能。...它甚至可以连接到您的松弛和不和谐频道并与用户互动。 现在您知道我们正在处理什么,让我们开始吧。 开始 最好在虚拟环境中下载 errbot,而不是直接安装它。...这是您的第一个插件。现在,如果您运行命令“!hello”,您将收到一条消息,说你好,世界! 注意 - 为了为您的系统设置插件,您必须配置“config.py”文件。...errbot 在 Python 中构建和设置聊天机器人的基础知识。...结论 Errbot中还有大量其他功能可供开发人员和管理员使用。它们中的每一个都以结构方式记录在 Errbot 的官方文档页面中。
消息供应商已经注意到了这一点,他们使用机器人来改进和自动化企业与客户之间的互动体验。 这一切要从在网站上增加聊天部件开始。...在面对这么多可选择的API时,企业需要问自己一个问题:“如何让客户与自己更好地进行互动?” 为了给客户提供最高效的互动体验,企业需要实现所有可能的互动渠道。...我会花很多时间创建邮件组,如果我能够在博客上加入全渠道功能,就可以让更多人看到我创建的内容。 为了实现这个功能,我决定采取如下方式: 通过Facebook或短消息来回复别人发过来的消息。...保存用户首选项 Twilio Studio目前不支持保存用户首选项,所以我们需要把这些信息保存在其他地方。我决定把输入消息和原始消息保存在Google Sheet上。...结论 在这篇文章里,我们示范了如何使用Twilio Studio创建一个简单的全方位消息机器人。开发人员可以基于这个示例创建出双向的交互应用。
Chatbot,聊天机器人,用于和人类用户聊天的电脑程序。它是场交互革命,也是一个多技术融合的平台。桔子互动美女创始人根据自己的经验告诉大家,该如何来编写微信聊天机器人。...我觉得公众号、直达号和H5这些在最开始的时候都是很像chatbot的雏形。APP实在是让用户太焦虑了,大家都希望有一个可以简单迅速找到服务的程序。...Chatbot是一个“no UI”的体验,所以要写script,了解如何收集用户的信息、怎样理解用户,并把这些用户的话术整理出来。它就是一个和用户交流的线框图的概念。...通过用户点赞数分析出哪些头像在男性和女性中分别最受欢迎,帮助用户挑选微信头像。 存储文件。把微信和云盘打通,可以直接把微信上收到的文件转给机器人,让机器人存进云盘里。 把歌词生成一张好看的图片。...Github的通知。把用户关注的动态实时发送到微信群里,让微信群和各种平台的信息做对接,也可以收集群里的消息做分析和训练。
大家好,我是 yes。 这种设计类问题想必大家都不陌生,面试时或多或少都能碰到。 比如如何写一个线程池?如何写一个 HashMap ?...如何写一个 RPC 框架等等,当然这里的写不是真的叫你用代码写出来,只是说说设计理念,整体架构。 这个面试题来自于一个读者的字节面试经历,我会从面试技巧和消息中间件的设计两个方面阐述。...你还提到了分区,可能会问这个分区和 RocketMQ 的队列有什么不同啊?具体分区要怎么实现? 然后你提到顺序写,可能会问为什么要顺序写啊?你说的内存映射和零拷贝又是什么啊?...(这些我都分析过,可以看 RocketMQ 和 Kafka 底层存储之那些你不知道的事) 当然还有可能问各种细节,比如消息的写入如何存储、消息的索引如何生成等等,来深挖看你有没有看过消息中间件的源码。...所以在回答面试官的时候不仅要 get 到他的点,还得为之后的回答铺路,不会说的点不要提,擅长的点多提提。 最后 之前我已经提到了,这篇文章的重点其实不在于如何回答写一个消息中间件,而在于面试的技巧。
这里从我总结的几点说。 1. 性能:Binder在一次通信中只进行一次内存拷贝。而管道、消息队列、socket等都需要2次内存拷贝,可别小看这一倍带来的差距。对于移动设备来说,性能一直是个大问题。...当然了,共享内存的方式压根就不需要内存拷贝,但是共享内存在实际写代码会非常复杂,需要频繁的加锁释放锁,稍有不慎就会造成死锁。 所以从性能的角度来说,Binder的性能仅次于共享内存。...IPC方式 内存拷贝次数 socket/管道/消息队列 2 共享内存 0 Binder 1 2....在Android系统中,Android为每一个安装的app都分配了一个UID标识,这个UID就作为鉴别对方进程身份的重要标志。...那么在Android系统中是怎么管理这些服务的,并且让用户可以跨进程调用这些服务呢?
但毕竟我只有一个人,没法所有消息都一个个回复,所以也是很愧疚和无力吧;另外我发现,大家的很多问题是重复的,而且大多数我都专门写文章来回答过。...] 由于制作方法实在太简单,所以给大家分享下完整的教程,让大家也能轻松制作自己的 AI 机器人。...自制 AI 机器人教程 预计整个制作过程 10 分钟 先描述下需求:做一个能够自动回答微信消息的机器人。 要实现这个需求,有两个要点: 如何让程序接收到微信发来的消息?...你不需要关心事件是如何被它触发的,只需要针对不同事件来编写处理方法就好,比如收到消息后自动回复同样的消息,示例代码如下: // 初始化机器人 const bot = WechatyBuilder.build...那么你是否好奇,wechaty 是如何接受到微信消息的呢?
今天继续完善我们的在线聊天室 TODO 定时清理过期消息 禁言功能 踢人功能 对接聊天机器人 清理过期消息 由于我们需要定时清理 redis 中保存的聊天记录,那么就需要一个定时任务。...、需要禁言的用户和禁言时间,然后根据禁言时间,把用户添加到 redis 中。...同时这里取了个巧,在“解禁”的时候,只是传入 b_time 为1,这样1秒之后,用户就自动从 redis 中过期了,也就成功解禁了。 最后,再来处理聊天室的消息,禁言的用户,当然不能再发消息啦。...对接聊天机器人 当前,如果用户没有登陆,是无法和其他人聊天的。那么一个友好的聊天机器人就非常有必要了。我们可以使用免费的图灵聊天机器人,当然也可以自己训练一个。...以前我也写过一篇关于如何训练聊天机器人,感兴趣的小伙伴儿可以戳这里(链接)。
---- 开始之前 首先,此篇文章会有很多地方会和 RocketMQ 比较,不太熟悉 RocketMQ 可以去看看我之前写的RocketMQ基础概念剖析&源码解析,先有个大概的印象,可能会帮助你更好的理解...Kafka 由来 这块,之前的文章有过介绍,为了避免赘述我就直接贴过来了 Kafka 最初来自于 LinkedIn,是用于做日志收集的工具,采用Java和Scala开发。...红色的是态的切换,绿色的是数据拷贝。 不清楚什么是用户态、内核态的可以去看看《用户态和内核态的区别》 态的切换、数据的拷贝,都是耗时的操作,那 Kafka 是怎么解决这个问题的呢?...其实就是我们常说的零拷贝了,但是不要看到零就对零拷贝有误解,认为就是一次都没有拷贝,那你想想,不拷贝怎么样把磁盘的数据读取出来呢? 所谓的零拷贝是指数据在用户态、内核态之间的拷贝次数是 0。...这里严格上来说还有 offset 的拷贝,但影响太小可以忽略不就,就先不讨论 你会发现,这里也应证了我上面说的「零拷贝并不是说没有拷贝」。算下来,零拷贝总共也有 2 次态的切换,2 次数据的拷贝。
他在自己的推特账号上公布了这一消息,称: 我和许多其他人一样,不管是处于AI圈的还是非AI圈,都被OpenAI的成果鼓舞到。 我相信这家公司未来的潜力非常大,因此很高兴重新投入到其中的建设上来。...离职前除了长达4个月的休假外,外界并没有嗅到什么不和谐的信息。 甚至在休假之前,安德烈还发推表示“会回来的,AutoPilot和人形机器人还等着呢”。...所以当他官宣消息之后,外界一片哗然,感叹特斯拉痛失大主管。 而离职后的安德烈,没有明确的去向,只是表明自己想要投入更多时间在开源和技术教育等感兴趣的事情上。...实际上可能会重新回到那里——在未来的某个时候,可能会回到那里从事擎天柱人形机器人或者AGI方面的工作。 我认为特斯拉是一家庞大的机器人公司,还会做出不可思议的事情。...点这里关注我,记得标星哦~ 一键三连「分享」、「点赞」和「在看」 科技前沿进展日日相见 ~
RabbitMQ 是轻量级且易于部署的,能支持多种消息协议。 RabbitMQ 可以部署在分布式和联合配置中,以满足高规模、高可用性的需求。...管理界面(Management UI):RabbitMQ 提供了一个易用的用户界面,使得用户可以监控 和管理消息 Broker 的许多方面。...插件机制(Plugin System):RabbitMQ 提供了许多插件,来从多方面进行扩展,也可以编 写自己的插件。 RabbitMQ的消息模型 Why use rabbitMQ ?...,你帮我送一下" 我拿个小本子记下:顾客a,电话:xxx,地址:xxx 店员有空后就会准备订单并配送 解耦 以前有新订单时,我会亲自找每一个店员(负责准备花束的,负责记账的,负责送花的等),告诉他们有新订单了...,我把每一个订单告诉店员,但是店员忙不过来,客户又一直打电话来催,最后店员累成狗直接罢工 今年七夕节我学乖了,电话打进来我会告诉顾客:"我知道了,会尽快安排处理",然后记到小本子上就行,店员有空时按顺序来处理订单就好
说明 我之前实现了简单UI来跟OriginBot交互,但是由于我不是专业的前端开发,写UI还是比较耗时的,所以最近想修改一下这部分。...我期望的交互效果是可以双向发送文字、图片和语音,找了一圈发现钉钉的单聊机器人可以满足所有要求,所以这篇博客记录一下如何为OriginBot接入钉钉单聊机器人。...如何实现收发消息 在钉钉开放平台上创建好单聊机器人后,还需要有一个服务来收发消息。...我在这里是希望通过在交互过程中集成GPT4o来让其更加智能化。...如何进一步控制小车 这一块目前还在开发中,有一个思路是自己实现元动作,然后让大模型根据输入判断应该调用哪个动作来完成任务。
很多朋友也提出了各种好玩的建议、想法,甚至为叮当贡献了插件或者捐赠了这个项目,让我觉得这个项目是很有价值的,也让我知道,我能做的还有很多东西。...功能,用户可以发送带 [echo] 前缀的邮件给叮当接入的邮箱,从而实现让叮当朗读标题的消息,而不是提醒有新的邮件。...设置某个属性的值。通过发送 set_属性名 指令并带上值即可对该属性进行控制。 了解了这个套路后,我只需要照着写一个叮当的插件,即可实现让叮当声控智米风扇的目标。...插件的编写过程也很轻松,和写其他的叮当插件一样的套路,所以整个插件我只用了一个晚上的时间就写好了。...如果你看过我之前写的一篇编写叮当插件的教程《手把手教你编写叮当机器人插件》,那么阅读风扇声控插件的源码也不会很困难,这里就只放上源码链接:https://github.com/wzpan/dingdang-smart-mi-fan
2.TCP 和 UDP 区别? 3.TCP 如何保证传输可靠性? Java 基础:1. 既然有了字节流,为什么还要有字符流? 2.深拷贝 和 浅拷贝有啥区别呢? 下面是正文!...第一面开始 面试官: 我也不用多说了,你先自我介绍一下吧,简历上有的就不要再说了哈。 我: 内心 os:"果然如我所料,就知道会让我先自我介绍一下,还好我看了 JavaGuide ,学到了一些套路。...另外,我自己在学习过程中也参照网上的教程写过一个电商系统的网站,写这个电商网站主要是为了能让自己接触到分布式系统的开发。在学习之余,我比较喜欢通过博客整理分享自己所学知识。...我: 应用数据被分割成 TCP 认为最适合发送的数据块。 TCP 给发送的每一个包进行编号,接收方对数据包进行排序,把有序数据传送给应用层。 校验和: TCP 将保持它首部和数据的检验和。...面试官:深拷贝 和 浅拷贝有啥区别呢? 我: 浅拷贝:对基本数据类型进行值传递,对引用数据类型进行引用传递般的拷贝,此为浅拷贝。
操作系统都是按页对齐进行IO的,如果消息没有聚满一页就进行写盘,那么写效率就会变成非常地低,并且可能会增加读取IO次数。为此,我们设计了Buffer池,利用Buffer暂存用户Put过来的消息。...消息页被拷贝到硬盘写缓冲区之后,其所用的Buffer就会被归还给Buffer池。...Commit线程最大耗时操作是拷贝,并且拷贝速度最大是200M/s,所以仅需一个就够了,没必要多线程,多线程会徒增抢锁和上下文切换。...并且,使用直接IO可以让我拥有更多的内存管理权(在这内存极端有限的情况下是必须的),让写缓冲受自己所控,可以以最少的写缓冲实现更高效率的写盘。...六、总结与感想 复赛使我对数据结构和操作系统都重新复习了一遍,它所考验的知识是非常地基础又是非常地广!也让我体验到了Java的不足和C++的彪悍,让我意识到了双修的必要性。让我感受到设计决定高度
领取专属 10元无门槛券
手把手带您无忧上云