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

架构概念探索:以开发纸牌游戏为例

命令和事件 简而言之,这个游戏的过程是这样的: 客户端通过消息服务器发送命令; 服务器更新游戏状态; 服务器通过一条消息将游戏的最新状态推送给客户端; 当客户端接收到来自服务器的消息时,将其视为触发客户端状态更新的事件...服务层远程服务器发送消息“Player_X 打出红桃 A”。 远程服务器更新游戏的状态,并通知所有客户端状态发生了变化。...为测试创建上下文 最后,如何执行测试 在创建了 4 个客户端和正确的上下文之后,我们就可以运行测试了。我们可以让一个玩家发送命令开始游戏,然后检查每个玩家是否收到了预期的纸牌数量。...运行测试 合在一起 多用户交互场景的测试如下: 为每个用户创建一个服务实例; 按照正确的顺序服务发送命令,创建测试的上下文; 发送触发副作用的命令 (就是被测试的命令); 验证每个服务的 Observable...每次出了一张牌时,服务器就会所有客户端发送一条消息,指定下一个玩家是谁。 服务层通过一个叫作 enablePlay 的 Observable 流将消息转换为通知。

1.1K10

猫头鹰的深夜翻译:Volatile的原子性, 可见性和有序性

有序性 有序性是指源码中指令是否会被编译器出于优化而改变执行顺序。可能一个线程中的动作相对于另一个线程出现乱序。...这会导致两个实例的创建。这里的问题在于代码块不是原子性的,而且实例的变化对别的线程不可见。这种不能同时在多个线程上执行的部分被称为关键部分(critical section)。...这个类问题?是有的。假设一个线程调用depositMoney(50)而另一个线程调用withdrawMoney(50),并且balance的初始值为100。...在上述情况下,线程2能打印出value = 0?其实是可能的。在编译器重新排序中result=true可能会在value=1之前出现。...当写入一个volatile值时,这个值直接写入主存而不是本地处理器的缓存,并且通过发送消息提醒其它内核的缓存该值的更新。

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

面试必备(背)--RocketMQ八股文系列

RocketMQ丢消息的场景 生产者RocketMQ发送消息时 RocketMQ主节点从节点同步消息时 消费者RocketMQ拉取消息消费时 1.生产者端使用事务消息机制防止消息丢失 在本地事务执行之前发送给...生产者先发送一条半事务消息到 Broker。 Broker 收到消息后返回 ACK 确认。 生产者开始执行本地事务。 如果事务执行成功发送 commit 到 Broke,失败发送 rollback。...消息会堆积什么时候清理过期消息? commitlog文件存在一个过期时间,默认为72小时,即三天。...RocketMQ没有真正意义的push,都是pull,虽然push类,但实际底层实现采用的是长轮询机制,即拉取方式。 为什么要主动拉取消息而不使用事件监听方式?...而pull的方式可以根据当前自身情况来pull,不会造成过多的压力而造成瓶颈。所以采取了pull的方式。 RocketMQ消息长轮询了解

59610

对线面试官 - MQ经典面试题之高可用性及幂等性

想要了解MQ之前的问题可阅读: 对线面试官-为什么要使用MQ 面试官:继上次聊的MQ的问题,想再问问了解过MQ如何保证其高可用性?这个可以简单聊聊 派大星:当然可以。...意思就是在多个机器上启动多个Rabbit MQ实例,每个机器启动一个,但是你创建的queue只会放在一个Rabbit MQ实例上,但是每个实例都去同步queue的数据。...缺点也显而易见:其一就是可能会在Rabbit MQ集群内部产生大量的数据传输,再者就是可用性没有什么保障,如果queue所在的节点宕机了,数据就丢失了,因为那个queue所在的实例包含数据和实际数据。...大致可参考下图: 面试官:那你能说说针对幂等性问题什么解决方案? 派大星:方案需要根据不同的场景做不同的应对。情况一:如何生产者不重复发送消息到MQ。...可以通过让mq内部可以为每条消息生成一个全局唯一、与业务无关的消息id,当mq接收到消息时,会先根据该id判断消息是否重复发送,mq再决定是否接收该消息。情况二:如何保证消费者不重复消费。

13520

大厂都是如何处理重复消息的?

1.4 QoS 在发布与订阅中的区别 MQTT 发布与订阅操作中的 QoS 代表不同含义: 发布时的 QoS,消息发送到服务端时使用的 QoS 订阅时的 QoS,服务端自己转发消息时可使用的最大...,检查消息执行状态,发现消息未处理过,因这时刻,Consumer A还未来得及更新消息执行状态 这样就导致账户被错误地增加了两次100,这是一个在分布式系统中非常容易犯的错误 对此,可以用事务实现,也可以锁...md5计算,也可以是包装成服务接口,但其本身也必须幂等,如此Con不管处理什么业务消息,都只需针对"全局唯一ID"保证幂等。...“如果账户 X 当前的余额为 500 ,将余额加 100 "和“检查消息执行状态,发现消息未处理过,开始执行账户增加 100”,这两者啥区别,不都是消费端compareAndUpdate,都可以用普通数据库事务就能实现...主要是检查的内容不一样: 前者检查余额,容易实现,但适用范围比较窄 后者检查消息执行状态,难实现,但适用范围更广泛 如何解决方案一和方案二日益增多的存储日志呀,合适的删除策略

1.6K20

iOS底层-isa

isa 又是什么? 所谓isa指针,在OC中对象的声明是这样的 对象本身是一个带有指向其类别isa指针的结构体。 当一个对象发送消息的时候,实际上是通过isa在对象的类别中找到相应的方法。...这时,isa指向的就是这个类别的类。 也就是说 众所周知Objective-C(以下简称OC)中的消息机制。消息的接收者可以是一个对象,也可以是一个类。...那么这两种情况要是统一为一种情况不是更方便?苹果当然早就想到了,这也正是类的用处。苹果统一把消息接收者作为对象。等等,这是说,类也是对象?yes,就是这样。就是说,OC中所有的类都一种对象。...由一个类实例化来的对象叫实例对象,这好理解,那么,类作为对象(称之为类对象),又是什么类的对象?当然也容易猜到,就是今天的主题——类(Metaclass)。...现在到给类下定义的时候了:类就是类对象所属的类。所以,实例对象是类的实例,类作为对象又是类的实例。已经说了,OC中所有的类都一种对象,所以类也是对象,那么类是什么实例呢?

45110

度假指南丨和家人、朋友一起探索VR,解谜、养宠物、拆炸弹......

正文共 2018 字 14 图;预计阅读时间 7 分钟 新年伊始,刚刚过去的元旦跟家人好好度过?2020的第一个周末跟家人或好友一起在VR里度个假吧!...《Keep Talking and Nobody Explodes》 Steam 平台售价:15人民币 登陆平台:PS VR、Steam VR、Oculus、Viveport ?...《TribeXR》 Steam 平台售价:29人民币 登陆平台:PS VR、Steam VR、Oculus、Viveport ? 音乐DJ爱好者必玩!还在苦于没钱买DJ装备?...《Where Thoughts Go》开创了一种新型社交体验,该游戏的背景是人类的思想作为沉睡的生物而存在,每个玩家都可以留下一段语音消息作为思想在《Where Thoughts Go》世界中飘荡。...玩家可以聆听其他玩家留下的语音,也可以自己匿名留下一段语音,那么“你”会选择留下什么呢? ?

45610

iOS狗都不要,用这份面试真题,21天拿了4个大厂Offer

11、求两条链表相交的第一个节点 12、runloop是用来做什么的 13、GCD和NSOperation本质的区别是什么 14、信号量、如果有两组任务执行,需要先执行某两组,再执行另外两组,多少种方式...如果用setvalue实现可以 5、touch事件的分发、查找的过程、如果要求touch子视图扩展点击范围应该怎么做 6、isa指针 7、block几种类型,分别在什么情况下表示 8、字符串的压缩算法...单例模式重写的allocwithzoom的zoom指的是什么 16、dispatch_once的源码了解过 17、isa指针什么了解 18、数据持久化用的是什么 19、http请求的缓存字段了解...uibutton宽度固定,uilabel怎么排 11、离屏渲染的原理和例子 12、http传输的五层,一个浏览器服务端发送url的过程。追问:解析ip地址的时候发生在哪一层。...给nil对象发送消息会怎样?

1.4K20

2020-iOS最新面试题解析—1(原理篇)

类内部存放的是类方法列表,根类的isa指针指向自己,superclass指针指向NSObject类 一个objc对象的isa的指针指向什么什么作用?...当我们发送一个消息给一个NSObject对象时,这条消息会在对象的类对象方法列表里查找 当我们发送一个消息给一个类时,这条消息会在类的Meta Class对象的方法列表里查找 objc中的类方法和实例方法什么本质区别和联系...能否运行时创建的类中添加实例变量?为什么?...对象发送消息将会发生什么?...如果一个nil对象发送消息,首先在寻找对象的isa指针时就是0地址返回了,所以不会出现任何错误 objc中一个对象发送消息obj foo和objc_msgSend()函数之间什么关系?

1.6K21

拼多多面试题

如何保证消息的顺序执行?Kafka了解?和RabbitMQ什么区别?你为啥不用kafka来做,当时怎么考虑的? 6、我看你简历里说熟悉计算机网络,来聊一聊计算机网络吧。...Redis哨兵主要功能 (1)集群监控:负责监控Redis master和slave进程是否正常工作 (2)消息通知:如果某个Redis实例故障,那么哨兵负责发送消息作为报警通知给管理员 (3)故障转移...③当主数据库执行完保持快照后,会从数据库发送RDB文件,而从数据库会接收并载入该文件。 ④主数据库将缓冲区的所有写命令发给从服务器执行。...Redis 主从复制、哨兵和集群这三个什么区别 主从复制是为了数据备份,哨兵是为了高可用,Redis主服务器挂了哨兵可以切换,集群则是因为单实例能力有限,搞多个分散压力,简短总结如下: 主从模式:备份数据...如何保证消息的顺序执行?Kafka了解?和RabbitMQ什么区别?你为啥不用kafka来做,当时怎么考虑的? ?

1.2K30

必知必会 RabbitMQ面试题 33道(附答案)「建议收藏」

16.交换器无法根据自身类型和路由键找到符合条件队列时,哪些处理? 17.什么是死信队列? 18.导致的死信的哪些原因? 19.何为延迟队列? 20.什么是优先级队列?...21.熟悉RabbitMQ的事务机制? 22.熟悉发送确认机制? 23.消费者获取消息的方式? 24.消费者某些原因无法处理当前接受的消息如何来拒绝? 25.消息传输保证层级?...26.vhost是什么? 27.说说集群中的节点类型? 28.熟悉队列结构? 29.RabbitMQ中消息可能有的几种状态? 30.在何种场景下使用了消息中间件?...1.Client发送消息给MQ 2.MQ将消息持久化后,发送Ack消息给Client,此处可能因为网络问题导致Ack消息无法发送到Client,那么Client在等待超时后,会重传消息; 3.Client...镜像集群模式:这种模式,才是所谓的RabbitMQ的高可用模式,跟普通集群模式不一样的是,你创建的queue,无论数据(数据指RabbitMQ的配置数据)还是queue里的消息都会存在于多个实例上,

1.3K10

面试必备:RabbitMQ 共33道(附答案)

14.生产者消息运转? 15.消费者接收消息过程? 16.交换器无法根据自身类型和路由键找到符合条件队列时,哪些处理? 17.什么是死信队列? 18.导致的死信的哪些原因? 19.何为延迟队列?...20.什么是优先级队列? 21.熟悉RabbitMQ的事务机制? 22.熟悉发送确认机制? 23.消费者获取消息的方式? 24.消费者某些原因无法处理当前接受的消息如何来拒绝?...channel . txRollback 用于事务回滚,如果在事务提交执行之前由于 RabbitMQ 异常崩溃或者其他原因抛出异常,通过txRollback来回滚。 22.发送确认机制?...1.Client发送消息给MQ 2.MQ将消息持久化后,发送Ack消息给Client,此处可能因为网络问题导致Ack消息无法发送到Client,那么Client在等待超时后,会重传消息; 3.Client...镜像集群模式:这种模式,才是所谓的RabbitMQ的高可用模式,跟普通集群模式不一样的是,你创建的queue,无论数据(数据指RabbitMQ的配置数据)还是queue里的消息都会存在于多个实例上,

80320

Java高频面试题- 每日三连问?【Day36】 — Kafka篇(四)

问题导读 一、producer 是否直接将数据发送到broker 的leader(主节点)? 二、Kafa consumer 是否可以消费指定分区消息?...三、Kafka 高效文件存储设计特点是什么? 01 producer 是否直接将数据发送到broker 的leader(主节点)?...这样producer 就可以直接将消息发送到目的地了。 分享朋友圈,记录学习每一天~ 02 Kafa consumer 是否可以消费指定分区消息?...正经回答: Kafa consumer 消费消息时,broker 发出"fetch"请求去消费特定分区的消息, consumer 指定消息在日志中的偏移量(offset),就可以消费从这个位置开始的消息...通过索引文件稀疏存储,可以大幅降低index 文件数据占用空间大小。 - End -

21140

必知必会 RabbitMQ面试题 33道(附答案)

14.生产者消息运转? 15.消费者接收消息过程? 16.交换器无法根据自身类型和路由键找到符合条件队列时,哪些处理? 17.什么是死信队列? 18.导致的死信的哪些原因? 19.何为延迟队列?...20.什么是优先级队列? 21.熟悉RabbitMQ的事务机制? 22.熟悉发送确认机制? 23.消费者获取消息的方式? 24.消费者某些原因无法处理当前接受的消息如何来拒绝?...channel . txRollback 用于事务回滚,如果在事务提交执行之前由于 RabbitMQ 异常崩溃或者其他原因抛出异常,通过txRollback来回滚。 22.发送确认机制?...1.Client发送消息给MQ 2.MQ将消息持久化后,发送Ack消息给Client,此处可能因为网络问题导致Ack消息无法发送到Client,那么Client在等待超时后,会重传消息; 3.Client...镜像集群模式:这种模式,才是所谓的RabbitMQ的高可用模式,跟普通集群模式不一样的是,你创建的queue,无论数据(数据指RabbitMQ的配置数据)还是queue里的消息都会存在于多个实例上,

22.8K96

ios 笔试题3

; 一个参数既可以是const还可以是volatile?解释为什么。  ?; 一个指针可以是volatile ?解释为什么。  下 面是答案:  ?; 是的。一个例子是只读的状态寄存器。...,如何工作  当您一个对象发送一个autorelease消息时,Cocoa就会将该对 象的一个引用放入到最新的自动释放池。...它仍然是个正当的对象,因此自动释放池定义的作用域内的其它对象可以发送消息。当程序执行到作用域结束的位置 时,自动释放池就会被释放,池中的所有对象也就被释放。 1. ...在编译时,方法的调用并不和代码绑定 在一起,只有在消实发送出来之后,才确定被调用的代码。通过动态类型和动态绑定技术,您的代码每次执行可以得到不同的结果。...当您一个动态类型确定了的对象发送消息时,运行环境系统会通过接收者的isa指针定位对象的类,并以此为起点 确定被调用的方法,方法和消息是动态绑定的。

67110

事件驱动微服务体系架构

这里一个简单的例子:当一个订单被放置在一个电子商务网站,一个单一的“订单放置”事件产生,然后被几个微服务消费: 1.order服务,它可以数据库写入一个order记录。...这使得资源可以在他们的工作单元完成后自由地转移到下一个任务,而不用担心之前发生了什么或者接下来会发生什么。它们还允许对事件进行排队或缓冲,从而防止使用者生产者施加压力或阻塞它们。...分俩个大类: 消息处理或流处理。 消息处理 在传统的消息处理中,组件创建消息,然后将其发送到特定的(通常是单个的)目的地。一直处于空闲状态并等待的接收组件接收消息并相应地执行操作。...在哪里可以找到事件描述和详细信息?事件发生的原因是什么?是哪个团队创造了这个活动?他们在积极地工作? •应对变化 事件模式会改变?如何在不破坏其他服务的情况下更改事件模式?...如果使用者副作用,例如在数据库中添加值,则可能无法通过重播事件进行恢复。 过早优化 大多数产品一开始很小,然后随着时间的推移而增长。

1.5K00

面渣逆袭:RocketMQ二十三问

3.RocketMQ什么优缺点?...Topic 与生产者和消费者的关系非常松散,一个 Topic 可以0个、1个、多个生产者发送消息,一个生产者也可以同时不同的 Topic 发送消息。...一般采用Cosumer端过滤,如果希望提高吞吐量,可以采用Broker过滤。 对消息的过滤三种方式: 14.延时消息了解?...4、正常情况本地事务执行完成,Producer Broker 发送 Commit/Rollback,如果是 Commit,Broker 端将半消息标记为正常消息,Consumer 可以消费,如果是...Consumer端的心跳包发送 在Consumer启动后,它就会通过定时任务不断地RocketMQ集群中的所有Broker实例发送心跳包(其中包含了,消息消费分组名称、订阅关系集合、消息通信模式和客户端

90431

深度图解Redis Cluster原理

什么需要Redis Cluster 的确,在数据上,replication副本做保证;可用性上,master宕机会自动的执行failover。 那问题在哪儿呢?...此时redis-trib会A、B、C三个节点发送迁移出槽位的请求,同时D节点发送准备导入槽位的请求,做好准备之后A、B、C这三个源节点就开始执行迁移,将对应的slot所对应的键值对迁移至目标节点D。...同时,节点也可以主动的通过PONG消息集群中广播自己的信息,让其他节点获取到自己最新的属性,就像完成了故障转移之后新的master集群发送PONG消息一样 FAIL 用于广播自己的对某个节点的宕机判断...,假设当前节点对A节点判断为宕机,就会立即Redis Cluster广播自己对于A节点的判断,所有收到消息的节点就会对A节点做标记 PUBLISH 用于指定的Channel发送消息,某个节点收到PUBLISH...当新的信息需要传递时,消息可以快速的发送到所有的节点,让所有的节点都拥有最新的数据 gossip可以在O(logN) 轮就可以将信息传播到所有的节点,为什么是O(logN)呢?

25510

每个开发人员都应该知道的WebSockets知识

,这样您就可以知道连接什么时候打开、什么时候接收消息以及什么时候出现错误。...这时候,你可能会有疑问,我们不是一直都在这样做,建立连接,监听消息。还有什么其他内容? 那么,我们下面就一起来看看,如何能更高效执行WebSocket。...数据传输模式 在通过WebSocket传输数据时,您可以考虑不同的模式。您可以直接通过WebSockets传输消息,也可以客户端发送通知,告知消息的可用性。...用于发送Web应用通知的WebSockets 发送应用内通知是WebSockets的常见用例。WebSocket连接仅用于提醒浏览器消息可用。...一旦用户收到通知并访问通知页面,应用程序就可以发送HTTP请求来检索消息内容。 所以在这种方法中,WebSocket并不发送实际的消息内容,而是作为一种信令机制来通知前端的通知可用性。

1.3K10

程序员级别鉴定书(.NET面试问答集锦)

强签名的程序集与非强签名的程序集何不同? DateTime 可以为null什么是 JIT?什么是 NGEN?分别的优势和劣势是什么? 如何在.NET CLR的分代垃圾收集器管理对象的生命周期?...可以把特性(attributes)放在方法的具体参数中?这有什么用? C# 控件开发者 Override关键词new的含义? 副作用?...类 (Class): 可以实例化,状态,被继承时,继承类也不需要重新实现被继承类中的方法。但是如果被继承类的方法中有abstract修饰的,继承类则需要实现这个方法。...副作用? override new在基类没有virtual关键字的情况下必须使用。副作用是破坏了继承关系。...先调用了this(),即无参构造函数,再调用了自身的参的构造函数。 因为未对a参数进行处理,故无用。 This是什么?可以在静态方法中调用 this

1.7K70
领券