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

秋招面经三(作业帮、新浪、阿里云)

那个时候,我们使用多线程,每一次将一个新connect放入一个新线程里面。这样可以保证我们服务端一直处于一个监听新连接状态。...5.1 生产者丢失消息情况 生产者(Producer) 调用send方法发送消息之后消息可能因为网络问题并没有发送过去。所以,我们不能默认在调用send方法发送消息之后消息消息发送成功。...设置完成之后,当出现网络问题之后能够自动重试消息发送,避免消息丢失。另外,建议还要设置重试间隔,因为间隔太小的话重试效果就不明显,网络波动一次你3次一下子就重试完了。...我们发送消息会被发送到 leader 副本,然后 follower 副本才能从 leader 副本中拉取消息进行同步。生产者和消费者与 leader 副本交互。...当我们配置 acks = all 代表则所有副本都要接收到该消息之后消息才算真正成功被发送

41940

【面试专题】2021年字节、阿里、网易等 Handler 面试题集合,Android高级开发必备!

这边可能会被问,sThreadLocal为什么static?这边答案不太确定,面试时候只需要装载一次,减少对象创建开销;线程内所有操作共享。有知道为什么大佬可以评论区教教大家。...Handler如何发送延迟消息?...,被问到过一次,低频考察题目(大厂估计都不屑于问这个)。...线程消息都是放到同一个MessageQueue里面,取消息时候互斥取消息(里面有大范围synchronized代码块),而且只能从头部取消息,而添加消息按照消息执行先后顺序进行排序。...顺带后面还问了如果外部就是要发送一个异步消息怎么办?

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

socket并发安全

当我们抢到了锁,使用 send(sockfd,msg) 发送完整数据时候,如果此时发送缓冲区正好一写就满了,那这个线程就得一直占着这个锁直到整个消息写完。...在前面有写socket线程安全结论,我们稍微翻一下源码就能发现,读socket其实也是加锁,所以并发多线程读socket这件事线程安全。...并发读socket_fd导致数据异常 解决方案还是跟读时候一样,读socket只能有一个线程,读到了消息之后塞到加锁队列中,再将消息分开给到GameServer多线程用户逻辑模块中去做处理。...但UDP就不同,UDP 对应用层交下来报文,既不合并,也不拆分,而是保留这些报文边界。 无论应用层交给 UDP 多长报文,UDP 都照样发送,即一次发送一个报文。...为什么不建议使用多线程同时读写同一个UDP socket udp本身不可靠协议,多线程高并发执行发送时,会对系统造成较大压力,这时候丢包常见事情。

1.7K10

这个点,在面试中答出来很加分!

当我们抢到了锁,使用 send(sockfd,msg) 发送完整数据时候,如果此时发送缓冲区正好一写就满了,那这个线程就得一直占着这个锁直到整个消息写完。...在前面有写 socket 线程安全结论,我们稍微翻一下源码就能发现,读socket其实也是加锁,所以并发多线程读 socket 这件事线程安全。...并发读socket_fd导致数据异常 解决方案还是跟读时候一样,读 socket 只能有一个线程,读到了消息之后塞到加锁队列中,再将消息分开给到 GameServer 多线程用户逻辑模块中去做处理...但 UDP 就不同,UDP 对应用层交下来报文,既不合并,也不拆分,而是保留这些报文边界。 无论应用层交给 UDP 多长报文,UDP 都照样发送,即一次发送一个报文。...为什么不建议使用多线程同时读写同一个 UDP socket UDP 本身不可靠协议,多线程高并发执行发送时,会对系统造成较大压力,这时候丢包常见事情。

42920

FlutterDart中异步编程之Isolate

前言 我们编程多线程一般实现两种场景,一种异步执行,一种并行执行。...在Dart中我们使用多线程计算时候,整个计算时间会比单线程还要多,额外耗时是什么呢?...main isolate 发送] 运行后都会创建两个进程,一个主Isolate微进程,一个新Isolate微进程,两个微进程都双向绑定消息通信通道,即使新Isolate中任务完成了...,第一个待执行函数,这个函数必须一个顶级函数或静态方法,不能实例方法,第二个参数为动态消息类型,可以是被运行函数参数。...并且 LoadBalancer 还支持 runMultiple,可以让一个方法在多线程中执行。 LoadBalancer 经过测试,它会在第一次使用其 isolate 时候初始化线程池。

3.2K41

一日一技:除了 time.sleep,你还有一个暂停代码方法

,然后等待5秒钟,再打印出...剩下代码...。 功能看起来跟time.sleep没什么区别,那为什么要特别提到它呢?因为在多线程里面,它比time.sleep更有用。...但是这个任务完成以后,它会往 Redis 里面发送一条消息,只要 Redis 有这个消息就知道它完成了。所以我要创建一个 checker 子线程,每60秒去 Redis里面检查任务是否完成。...但某些情况下,不需要等待了,例如用户主动取消了任务。这个时候就想提前结束这个 checker 子线程。 但是我们知道,线程能从外面主动杀死,只能让它自己退出。...所以当我执行event.set()后,子线程里面self.event.is_set()就会返回 False,于是这个循环就不会继续执行了。...于是子线程立刻就会结束。不需要再白白等待60秒。 并且,event.wait()这个函数在底层使用 C 语言实现,不受 GIL 锁干扰。

2.2K40

一日一技:除了 time.sleep,你还有一个暂停代码方法

,然后等待5秒钟,再打印出...剩下代码...。 功能看起来跟time.sleep没什么区别,那为什么要特别提到它呢?因为在多线程里面,它比time.sleep更有用。...但是这个任务完成以后,它会往 Redis 里面发送一条消息,只要 Redis 有这个消息就知道它完成了。所以我要创建一个 checker 子线程,每60秒去 Redis里面检查任务是否完成。...但某些情况下,不需要等待了,例如用户主动取消了任务。这个时候就想提前结束这个 checker 子线程。 但是我们知道,线程能从外面主动杀死,只能让它自己退出。...所以当我执行event.set()后,子线程里面self.event.is_set()就会返回 False,于是这个循环就不会继续执行了。...于是子线程立刻就会结束。不需要再白白等待60秒。 并且,event.wait()这个函数在底层使用 C 语言实现,不受 GIL 锁干扰。

1.1K20

Java游戏编程不完全详解-1

HotSpot技术把游戏在运行时编译到本地码中去,加上强大独立显卡,这时Java编写游戏就不再会有运行速度困扰。 什么多线程?...一次能从该对象中获取一把锁。当该方法被执行完成之后,该锁会被释放,否则会抛出异常。 所以,当一个被同步方法获取一把锁之后,其它被同步方法不能被运行,除非该锁被释放掉了。...回答当我们同步我们代码时,不要过度同步(oversynchronize)—不要同步太多代码。因为结果会产生多线程不必要延迟,从而不会达到使用线程代码之后加快代码效率。...A会每隔100毫秒不断检查线程B是否发送消息。...解决这个问题方案,如果让线程A在空闲时才通知线程B发送消息会,那么我们就不强迫线程A一分钟内10次查看是否有消息到达。这样就解决线程A过度睡觉情况。

78430

一文带你学懂 Kafka

下图一个副本复制示意图 image.png 如上图所示,为了简单画出了两个 broker ,每个 broker 指保存一个 Topic 消息,在 broker1 中分区0 Leader,它负责进行分区复制工作...跟随者向领导者发送消息过程这样,先请求消息1,然后再接收到消息1,在时候到请求1之后发送请求2,在收到领导者给发送给跟随者之前,跟随者不会继续发送消息。...认为这样,跟随者副本在同步领导者副本后会把消息保存在本地 log 中,这个时候跟随者会给领导者副本一个响应消息,告诉领导者自己已经保存成功,同步复制领导者会等待所有的跟随者副本都写入成功后,再返回给...,注意这个共享请求队列,因为网络线程多线程机制,所以请求队列消息多线程共享区域,然后由 IO 线程池进行处理,根据消息种类判断做何处理,比如 PRODUCE 请求,就会将消息写入到 log...,因此把响应回传事情就交给每个线程,所以也就不必共享

51920

深入理解Node.js 进程与线程(8000长文彻底搞懂)

进程 进程 Process计算机中程序关于某数据集合上一次运行活动,系统进行资源分配和调度基本单位,操作系统结构基础,进程线程容器(来自百科)。进程资源分配最小单位。...Node.js句柄传递 讲句柄之前,先想一个问题,send句柄发送时候,真的将服务器对象发送子进程?...目前Node支持前面提到几种句柄,并非任意类型句柄都能在进程之间传递,除非它有完整发送和还原过程。 Node.js多进程架构模型 我们自己实现一个多进程架构守护Demo ?...除此之外,当我们这个 Node.js 服务意外崩溃就不能自动重启进程。...如何实现进程守护 这里说一些第三方进程守护框架,pm2 和 forever ,它们都可以实现进程守护,底层也都是通过上面讲 child_process 模块和 cluster 模块 实现,这里就不再提它们原理

91920

深入理解Node.js 进程与线程(8000长文彻底搞懂)

进程 进程 Process计算机中程序关于某数据集合上一次运行活动,系统进行资源分配和调度基本单位,操作系统结构基础,进程线程容器(来自百科)。进程资源分配最小单位。...Node.js句柄传递 讲句柄之前,先想一个问题,send句柄发送时候,真的将服务器对象发送子进程?...目前Node支持前面提到几种句柄,并非任意类型句柄都能在进程之间传递,除非它有完整发送和还原过程。 Node.js多进程架构模型 我们自己实现一个多进程架构守护Demo ?...除此之外,当我们这个 Node.js 服务意外崩溃就不能自动重启进程。...如何实现进程守护 这里说一些第三方进程守护框架,pm2 和 forever ,它们都可以实现进程守护,底层也都是通过上面讲 child_process 模块和 cluster 模块 实现,这里就不再提它们原理

2.3K10

深入理解Node.js 进程与线程(8000长文彻底搞懂)

进程 进程 Process计算机中程序关于某数据集合上一次运行活动,系统进行资源分配和调度基本单位,操作系统结构基础,进程线程容器(来自百科)。进程资源分配最小单位。...Node.js句柄传递 讲句柄之前,先想一个问题,send句柄发送时候,真的将服务器对象发送子进程?...目前Node支持前面提到几种句柄,并非任意类型句柄都能在进程之间传递,除非它有完整发送和还原过程。 Node.js多进程架构模型 我们自己实现一个多进程架构守护Demo ?...除此之外,当我们这个 Node.js 服务意外崩溃就不能自动重启进程。...如何实现进程守护 这里说一些第三方进程守护框架,pm2 和 forever ,它们都可以实现进程守护,底层也都是通过上面讲 child_process 模块和 cluster 模块 实现,这里就不再提它们原理

1K30

你连volatile都不在意,你在意什么,在意大利吗

stop值,那么这个时候读取到这个变量应该是你之前写入那个值,这是很正常,但是在多线程下,读和写发生在不同线程时候,就有可能会出现:读线程不能及时读取到其他线程写入最新值。...但是这个时候又出现问题:当CPU0更改了i之后,会同步将i值到主内存中,但是这个时候CPU1中也缓存i0,CPU1还不知道主内存中i值已经被CPU0修改了,这个时候就会出现缓存一致性问题了...另外还有一个问题就是线程执行顺序问题,因为多线程无法控制哪个线程某句代码会在另一个先册灰姑娘某句代码后面执行,所以我们也就只能基于它原理去了解一个这样存在事实。...假设CPU0跟CPU1都缓存 i = 0, 这个时候CPU0要对缓存中共享变量i进行写入,首先就要发送一个失效消息给CPU1,告诉CPU1它要开车,然后还要等到CPU1收到消息之后再确认回执给回...CPU0需要在写入共享数据时,直接把数据写入到store bufferes中,同时发送invalidate消息,然后继续去处理其他指令。

24820

封装RabbitMQ.NET Library 一点经验总结

废话不多说了,进入主题,那些编写框架和组件大道理这里就不讲了,说重点。...其实在之前“.NET应用架构设计—服务端开发多线程使用小结(多线程使用常识)”一文中有讲到过。 ?...这个时候try{}catch{}其实是不会捕获到任何ListenInit方法中异常,因为他在另外一个线程上下文中执行。具体原理这里就不解释。...(图7:使用Eventing类型消费者接受消息) 7.设置一次接受一个消息,而不是直接LOCK住所有的队列消息 默认情况下,一个队列里不管多少消息当你一个TCP连接打上去之后会LOCK住所有的消息,...(图8:一次取一个消息进行消费) 但是如果你对消息处理前后顺序有要求就不能这么做,你需要独立注册一个队列,然后将这样一此消费一个消息配置话。 8.自动重新连接,不需要手动处理自动连接 ?

1.3K60

你能说出 Kafka 这些原理吗

如上图所示,为了简单画出了两个 broker ,每个 broker 指保存一个 Topic 消息,在 broker1 中分区0 Leader,它负责进行分区复制工作,把 broker1 中分区...跟随者向领导者发送消息过程这样,先请求消息1,然后再接收到消息1,在时候到请求1之后发送请求2,在收到领导者给发送给跟随者之前,跟随者不会继续发送消息。这个过程如下 ?...认为这样,跟随者副本在同步领导者副本后会把消息保存在本地 log 中,这个时候跟随者会给领导者副本一个响应消息,告诉领导者自己已经保存成功,同步复制领导者会等待所有的跟随者副本都写入成功后,再返回给...Processor 网络线程池接收到客户和其他 broker 发送消息后,网络线程池会把消息放到请求队列中,注意这个共享请求队列,因为网络线程多线程机制,所以请求队列消息多线程共享区域...,因此把响应回传事情就交给每个线程,所以也就不必共享

49310

编程语言.NET 进程内队列 Channel 入门与应用

回想我过去种种经历,每当我需要使用那些线程信号量进行线程同步时候都不得不小心翼翼地在 Bug 边缘游走。...众所周知,对于 WebSocket 来说,第一次连接常规 HTTP 协议,而一旦连接建立就不再需要 HTTP 协议。此时,双方交流将会是有来有回。...在此基础上,博主使用了一个后台线程从 Channel 中读取消息,这样,发送消息和接收消息实际上工作在两个不同线程上。...因为,从某种意义上来讲,RPC 不过隐藏那些蜿蜒曲折中间过程,让你产生了可以像调用本地方法一样调用远程方法错觉,甚至在设计二进制消息协议时候突然意识到,不过一次发明了 HTTP 协议...,它们都在不遗余力地告诉你,曾经真的在这个世界上存在过,就像今天有更好用 Channel , 并不意味着我们过去思考没有意义,至少当我们提到生产者-消费者模型时候,我会想起 Wesley 老大哥

26810

android EventBus详解(一)

主要功能替代Intent, Handler, BroadCast 在 Fragment,Activity,Service,线程之间传递消息.优点开销小,使用方便,可以很大程度上降低它们之间耦合,使得我们代码更加简洁...,我们需要创建一个回调方法onEvent,当我们订阅事件发送时候就会回调它 //其实命名不一定必须onEvent(),但那属于高级用法,这里我们说最简单 public void onEvent...; //后台发送者 private final AsyncPoster asyncPoster; //后台发送者(让队列第一个待订阅者去响应) 其实从类名我们就能看出个大概,就是三个发送事件方法...首先是提供一个池设计,类似于我们线程池,目的是为了减少对象创建开销,当一个对象不用了,我们可以留着它,下次再需要时候返回这个保留而不是再去创建。...这里,原作非常细心加了一次判断,if (pendingPostPool.size() < 10000) 其实觉得10000都很大,1000就够了,我们一次可能创建一个pendingPost,如果

95790

2013年,有点喜欢编程

那个时候对缓存 ,消息队列 ,分布式, JVM 一知半解 ,背一些八股文,只是能非常熟练使用 ibatis ,velocity ,编写简单业务代码 。...这次生产环境事故之后,内心一直有一个声音折磨着:“ 遇到技术问题时候,能不能从容一点,不慌乱。其他人可以做到事,为什么做不到。”...剥离过程同样很痛苦 , 但我有目标 , 不至于像没头苍蝇,后来也就有人生第一个 github 项目。...技术部后来采取了如下方案规避堆积问题: 生产者发送消息时候,将超大消息拆分成多批次消息,减少调度中心执行大事务几率; 数据源配置参数,假如事务执行超过一定时长,自动抛异常,回滚。...写到最后 特别喜欢毕淑敏关于命运解释: 渐渐地,终于发现,命运怯懦时盾牌,每当我叫嚷命运不公最响时候,正式预备逃遁前奏。

30320

面试之ActiveMQ

大家好,又见面你们朋友全栈君。 什么 ActiveMQ?...做了以下实验: 设置 2G 左右持久化文件限制,大量生产持久化消息直到文件达到最大限制,此时生产者阻塞,但消费者可正常连接并消费消息,等消息消费掉一部分,文件删除又腾出空间之后,生产者又可继续发送消息...简单点说就是当网络发送发送一堆数据,然后调用 close 关闭连接之后。这些发送数据都在接收者缓存里,接收者如果调用 read 方法仍旧能从缓存中读取这些数据,尽管对方已经关闭连接。...当消费者去获取消息时,不会一条一条去获取,而是一次性获取一批,默认 1000 条。...默认值 1000L 重发延迟时间,当 initialRedeliveryDelay=0 时生效(v5.4) useCollisionAvoidance 默认值 false 启用防止冲突功能,因为消息接收时可以使用多线程并发处理

39300

精选RocketMQ面试题

多个 queue 同时消费无法绝对保证消息有序性。所以总结如下: 同一 topic,同一个 QUEUE,发消息时候一个线程发送消息,消费时候 一个线程去消费一个 queue 里消息。...❝producer.setRetryTimesWhenSendFailed(10); ❞ 「集群部署」,比如发送失败原因可能当前Broker宕机,重试时候发送到其他Broker上。...开发 消息批量拉取 业务逻辑批量处理 同一group下,多机部署,并行消费 单个Consumer提高消费线程个数 批量消费 运维 网卡调优 jvm调优 多线程与cpu调优 Page Cache RocketMQ...可能从Master Broker获取消息,也有可能从Slave Broker获取消息 消费者系统在获取消息时候会先发送请求到Master Broker上去,请求获取一批消息,此时Master Broker...会返回一批消息给消费者系统 Master Broker在返回消息给消费者系统时候,会根据当时Master Broker 负载情况和Slave Broker 同步情况,向消费者系统建议下一次拉取消息时候

3.5K50
领券