精华内容
下载资源
问答
  • 而且这个方法都仅仅是Runtime.getRuntime()的调用,两者没有区别 下边直接看图,主要的方法和功能都已经列出来。 下边我们重点来该类是如何初始化的。 首先在开头我们就可以看如下代码: private static native ...

    文章转载自:http://www.cnblogs.com/good-temper/p/5042058.html?utm_source=tuicool&utm_medium=referral


    上次面试中遇到的一个问题,问到System.out.println()中的out是不是内部类,当时就给问蒙了,直观感觉out应该是System类的一个属性,跟内部类有什么关系?而且之前整理IO部分的时候记得有个PrintStream的类用于标准输出的,但是从没看过System的源码,也不敢随便再说了。后来看了下源码,发现的确是PrintStream,可能当时想问的是内部类的用法吧(真心感觉面试待靠缘分,很多面试官喜欢引导着问问题,方式很好,但很多时候可能让面试者搞不清你到底想问什么,我这次面试就深受打击,到最后面试官每个问题我都要先想半天是不是留了什么坑),不过归根结底自己水平差得多,还是要认真学习。言归正传,System类是jdk提供的一个工具类,有final修饰,不可继承,由名字可以看出来,其中的操作多数和系统相关。其功能主要如下:

    • 标准输入输出,如out、in、err
    • 外部定义的属性和环境变量的访问,如getenv()/setenv()和getProperties()/setProperties()
    • 加载文件和类库的方法,如load()和loadLibrary()、
    • 一个快速拷贝数组的方法:arraycopy()
    • 一些jvm操作,如gc()、runFinalization()、exit(),该部分并未在源码的java doc中提到,可能因为本身不建议主动调用吧。而且这几个方法都仅仅是Runtime.getRuntime()的调用,两者没有区别

      下边直接看图,主要的方法和功能都已经列出来。

      下边我们重点来该类是如何初始化的。

      首先在开头我们就可以看如下代码:

      private static native void registerNatives();
      static {
          registerNatives();
      }

      类中的静态代码块调用了一个native方法registerNatives(),可以猜到该方法应该是一个入口方法,看一下注释:通过静态初始化注册native方法,该方法会令vm通过调用initializeSystemClass方法来完成初始化工作。果然如此,那么接下来我们看下initializeSystemClass方法吧:

      private static void initializeSystemClass() {
          // 初始化props
          props = new Properties();
          initProperties(props);  
          sun.misc.VM.saveAndRemoveProperties(props);
      
          //获取系统相关的换行符
          lineSeparator = props.getProperty("line.separator");
          sun.misc.Version.init();
      
          //分别创建in、out、err的实例对象,并通过setXX0()初始化,查看setXX0()方法可知,这是个native方法,将系统的标准流管理到类内的对象
          FileInputStream fdIn = new FileInputStream(FileDescriptor.in);
          FileOutputStream fdOut = new FileOutputStream(FileDescriptor.out);
          FileOutputStream fdErr = new FileOutputStream(FileDescriptor.err);
          setIn0(new BufferedInputStream(fdIn));
          setOut0(new PrintStream(new BufferedOutputStream(fdOut, 128), true));
          setErr0(new PrintStream(new BufferedOutputStream(fdErr, 128), true));
          //加载zip包以获取java.util.zip.ZipFile这个类,以便之后加载利库使用
          loadLibrary("zip");
      
          // 设置平台相关的信号处理
          Terminator.setup();
      
          // 初始化sun.misc相关的环境变量
          sun.misc.VM.initializeOSEnvironment();
      
          // 主线程不会在同一个线程组中添加相同的线程,我们必须在这里自己实现。注释半天没弄明白,看代码就是主线程自己把自己加到了自己的线程组中......
          Thread current = Thread.currentThread();
          current.getThreadGroup().add(current);
      
          // 注册共享秘钥?注释没看明白,该方法就是实例化一个JavaLangAccess
          setJavaLangAccess();
      
          // 子系统在初始化的时候可以调用sun.misc.VM.isBooted(),以保证在application类加载器启动前不做任何事。booted()其实就是改了个状态,使isBooted()变为true。
          sun.misc.VM.booted();
      }

      至此,System基本上便讲完了,不过还有很多底层的东西没看懂(setJavaLangAccess()),留待以后解决吧。

      (个人学习总结原markdown文件和xmind文件见 github )

    展开全文
  • 接下来,我将从说教材、说学情、说教学目标及重难点、说教法、说学法、说教学过程等个方面来进行我的说课。一、说教材:《哦,十分钟》是选自人音版小学音乐四年级上册第三课的一首学唱歌曲,这是一首D大调2/4拍的...

    《哦,十分钟》说课稿

    各位评委老师好,我是来应聘小学音乐教师的x号考生,我今天的说课题目是《哦,十分钟》,请问可以开始我的说课了吗?

    接下来,我将从说教材、说学情、说教学目标及重难点、说教法、说学法、说教学过程等几个方面来进行我的说课。

    一、说教材:《哦,十分钟》是选自人音版小学音乐四年级上册第三课的一首学唱歌曲,这是一首D大调2/4拍的歌曲,运用了引申的发展手法,描绘了学生们在课间休息时嬉戏打闹的场景。通过学习演唱这首歌曲,不仅能够感受到作品中欢快轻松的情绪,并且能够更好地学会运用课间十分钟的时间休息调整,从而达到更高的学习效率。

    现代教育理论强调:“任何教学活动都必须以满足学习者的需要为出发点和落脚点。”根据因材施教原则,在进行教学设计前进行学情分析很有必要

    二、说学情:针对这首歌曲,学生学习的优势主要有以下几点:1.四年级的学生能够听辨旋律的高低、快慢、强弱,感知音乐主题,用欢快的情绪来表达歌曲内容;2.具有初步的识谱能力,能够跟随琴声视唱简单乐谱,为本节课四度音程的构唱学习奠定了基础;同时,这首歌曲对本年级的学生来说还存在以下问题:歌曲中的二段体曲式结构为学生学习的一大难点,在进行教学设计时,我们应该注意培养他们对于音乐情感的把握,进而更好地区分歌曲结构。并且,部分学生即将进入变声期,加强学生保护嗓音的意识,多聆听,引导学生用正确的发声方法演唱歌曲。

    根据新课程标准的要求,注重学生发展的差异性,我制定的教学目标为以下三点:

    1.音乐教育应首先作用于人的情感,因此情感态度价值观目标是处于音乐教学第一位的核心目标,通过对于这首歌曲的学习,丰富情感体验,培养学生对于校园生活的热爱之情。

    2.过程与方法目标是由音乐本身的表现性、实践性、非语义性和不确定性所决定的,因此,在演唱、表演过程中体会歌曲的内涵,运用体验、模仿的方法,充分调动学生学习音乐的积极性。

    3.音乐知识技能的学习不是要淡化、舍弃和割裂,而是要以一条既符合音乐本体特征,又适合学生认知规律的方式呈现出来。因此,知识与技能目标我设定为:掌握2/4拍的强弱规律,用响板、三角铁等乐器为歌曲伴奏,并用不同的情绪演唱歌曲。

    根据学生的认知水平和身心发展特点,本节课的重点在于:学唱歌曲,用活泼的情绪以及自然而委婉的声音表现自己对音乐的感受,并能达到背唱的效果。

    本节课的难点主要是:掌握歌曲二段体的曲式结构以及大切分的节奏。

    三、说教法、学法:为了更好地帮助学生把握重点,突破难点,在本课中主要采用体验式教学法、创作教学法,在教学过程中强调参与、活动、探究、实践,尊重学生的个人感受和独特见解,鼓励自我意识和创新精神。

    现代教学要使学生从“学会”向“会学”转变,成为学习真正的主人,所以我在选择学法指导时,引导学生尝试自主合作探究的学习方法,动静结合,在轻松愉快的学习中达到教学目的。

    四、说教学过程:如果说认清教材、学情,设计教学方法是教师在课前做的工作,那么教学过程就是教师与学生正面接触的活动,是教师完成教学目标的直接途径。下面我将从激趣导入、新课教授、巩固练习、音乐活动、小结拓展这几个环节说我的教学过程。

    一、导入环节

    “良好的开端是成功的一半”,所以精彩的导入可以起到很好的激发学生的学习欲望,本节课的导入环节,我将采用游戏导入的方式,将准备好的滚铁环、跳绳、踢毽子等图片展示给学生,同时播放《哦,十分钟》的伴奏音乐,让学生跟随音乐节奏,做出该图片上的动作,感受音乐中欢快自由的情绪。

    设计理念:通过这种方式能够激发学生的学习兴趣,快速切入新课。

    二、新课教授环节

    (一)初步聆听,完整感受

    播放歌曲《哦,十分钟》,在聆听之前,提出问题:歌曲的情绪是怎么样的?有发生什么变化吗?歌曲的速度是什么样的?

    教师根据学生回答进行总结:这首作品的情绪:第一段欢快自由,第二段:委婉抒情;速度:中速稍快。学生带着问题有针对性地聆听,以便加深对歌曲的理解。

    (二)歌曲学习——节奏

    由于这首歌曲欢快的情绪,我将首先进行节奏教学,这个环节我将运用奥尔夫教学法中的声势律动,来引导学生感受2/4拍子的强弱规律特点。拍手表示强拍、拍腿表示弱拍。

    而在第二段中的切分节奏,可以运用柯达伊教育体系中的节奏时值读法,引导学生用“ti-ta-ti”的方式来进行演唱。运用这样的方式,学生能够更好地把握节奏,为歌曲增添童趣的色彩。

    (三)歌曲学习——旋律

    接下来我将带领学生学习歌曲旋律

    首先,我会先带领学生进行发声练习,请学生和我一起做“打哈欠状”,这样做会使学生的喉咙打开,放松声带,用”a”音进行发声练习,在科学合理的方式下学唱歌曲。

    第二步:我会用钢琴伴奏,让学生跟随琴声视唱乐谱。并且运用柯尔文手势教学法,将旋律中出现纯四度音程单独挑出来进行练习。分别用手掌心朝脸表示“sol”以及握拳置于头顶 表示“do”的方式进行构唱。

    第三步:播放整首歌曲,运用画旋律线的方式,让学生感受到音的高低起伏。经过反复练习后,能够完整演唱歌曲旋律。

    通过这个环节,完成本课重点及知识点的学习,提高学生的识谱能力及对音乐的领悟和感受能力。

    (四)带入情绪,完整演唱

    在学习完旋律,节奏之后,我将为学生声情并茂的范唱一遍,帮助学生进一步熟悉歌曲,然后我会借助多媒体播放伴奏音乐的方法,请学生跟着音乐自主演唱,并且学生分为两个小组进行分段演唱,表现歌曲中不同的情绪特征。

    三、音乐活动,自主编创

    《音乐课程标准》要求我们注重通过各种实践活动来培养学生对音乐的兴趣,提高音乐文化素养,丰富情感体验,陶冶情操。学唱歌曲后,请学生运用响板、三角铁等乐器编创节奏为乐器伴奏,并且上台表演加深印象,提高歌曲的理解能力,发挥学生的想象力和创造力。

    四、小结拓展

    引导学生进行自评、互评,最后由我再对学生的表现进行总结。

    通过这个环节,可以培养学生团结合作的精神,表现并深化音乐主题。通过以上评价方式,明确自身学习的程度及改进方向。

    责任编辑:大白

    展开全文
  • 十分钟了解什么是脉冲神经网络

    万次阅读 多人点赞 2018-11-28 16:43:53
    所以网络的输入要进行额外编码,例如频率编码和时间编码等,转现在的数据(例如图片的像素)转换成脉冲,编码技术我们以后再讨论。 3.基于脉冲的脉冲的编码,能蕴含更多的信息 4.SNNs网络的能耗更低,每个神经元...

    深度学习最近非常火热,它归属于人工神经网络(ANNs)的范畴。ANNs是属于第二代神经网络,而我们关注的是下一代神经网络——脉冲神经网络(SNNs)

    人工神经网络为什么会有这个名字呢?
    "人工"表明了它是我们手动构建的,“神经网络”表明它是受大脑启发的。当我们深入了解ANNs时,你会发现,ANNs的神经元模型就是加权求和然后进行非线性激活。这和我们从生物学中了解的神经元模型差距太大了。同时在ANNs中信息的传递是基于数值。这和生物大脑中采用脉冲传递信息也存在差距。

    脉冲神经网络的诞生:
    诞生的原因:
    1.人工神经网络需要高性能的计算平台。
    2.人工神经网络仍不能实现强人工智能,人们认为是因为其与生物大脑仍存在巨大差距。

    SNNs的特点:
    1.采用了生物神经元模型如IF,LIF等,比之前ANNs的神经元更接近生物。
    2.信息的传递是基于脉冲进行。所以网络的输入要进行额外编码,例如频率编码和时间编码等,转现在的数据(例如图片的像素)转换成脉冲,编码技术我们以后再讨论。
    3.基于脉冲的脉冲的编码,能蕴含更多的信息
    4.SNNs网络的能耗更低,每个神经元单独工作,部分神经元在没接受到输入时,将不会工作。

    SNNs的学习算法:
    首先一点非常重要,脉冲神经网络不能直接利于ANNs的基于反向传播的方式进行网络训练,因为脉冲神经元模型处理的是信息是离散的脉冲,不能直接求导。

    1.将现有的ANNs映射到SNNs中
    这种方法是当前比较主流的构建SNNs的方法,因为它能有效的将ANNs与SNNs结合起来,利用了ANNs和SNNs各自的优点,ANNs训练简单,SNNs的能耗低。(最近就是在研究这东西)

    2.对生物神经元模型进行处理,换成一个能求导的模型,或者对传递的脉冲信息进行转换。然后就可以将反向传播用于SNNs的训练。(这种算法我没有研究过,所以也不太懂)

    3.STDP类的算法,它里面有很多小分支,STDP这东西就类似一种思想,例如两篇文章都用了STDP算法,但他们的数学公式可能是存在差异。从原理上,该种算法就是根据前后神经元的脉冲发放关系然后对他们之间的权重进行调整。该种算法比较接近人脑,现在研究他的人比较多。但这种算法一般是无监督的(也有少部分人将其改成有的监督),收敛比较难。(之前看过相关论文,感觉它是几种算法中最接近生物的学习规则)

    其实SNNs的学习算法仍是非常开放,一种统一江湖的算法仍没出现,所以也制约了它的发展。

    展开全文
  • 十分钟入门RocketMQ

    千次阅读 2018-07-06 15:50:24
    Broker的Buffer通常指的是Broker中一个队列的内存Buffer大小,这类Buffer通常大小有限,如果Buffer满了以后怎么办? 下面是CORBA Notification规范中处理方式: RejectNewEvents 拒绝新来的消息,向Producer返回...
    消息中间件通常需要解决哪些问题,在解决这些问题当中会遇到什么困难,Apache RocketMQ作为阿里开源的一款高性能、高吞吐量的分布式消息中间件否可以解决,规范中如何定义这些问题。然后本文将介绍RocketMQ的架构设计,以期让读者快速了解RocketMQ。
    

    消息中间件需要解决哪些问题?

    Publish/Subscribe

    发布订阅是消息中间件的最基本功能,也是相对于传统RPC通信而言。在此不再详述。

    Message Priority

    规范中描述的优先级是指在一个消息队列中,每条消息都有不同的优先级,一般用整数来描述,优先级高的消息先投递,如果消息完全在一个内存队列中,那么在投递前可以按照优先级排序,令优先级高的先投递。
    由于RocketMQ所有消息都是持久化的,所以如果按照优先级来排序,开销会非常大,因此RocketMQ没有特意支持消息优先级,但是可以通过变通的方式实现类似功能,即单独配置一个优先级高的队列,和一个普通优先级的队列, 将不同优先级发送到不同队列即可。

    对于优先级问题,可以归纳为2类:

    1. 只要达到优先级目的即可,不是严格意义上的优先级,通常将优先级划分为高、中、低,或者再多几个级别。每个优先级可以用不同的topic表示,发消息时,指定不同的topic来表示优先级,这种方式可以解决绝大部分的优先级问题,但是对业务的优先级精确性做了妥协。
    2. 严格的优先级,优先级用整数表示,例如0 ~ 65535,这种优先级问题一般使用不同topic解决就非常不合适。如果要让MQ解决此问题,会对MQ的性能造成非常大的影响。这里要确保一点,业务上是否确实需要这种严格的优先级,如果将优先级压缩成几个,对业务的影响有多大?

    Message Order

    消息有序指的是一类消息消费时,能按照发送的顺序来消费。例如:一个订单产生了3条消息,分别是订单创建,订单付款,订单完成。消费时,要按照这个顺序消费才能有意义。但是同时订单之间是可以并行消费的。
    RocketMQ可以严格的保证消息有序。

    Message Filter

    Broker端消息过滤

    在Broker中,按照Consumer的要求做过滤,优点是减少了对于Consumer无用消息的网络传输。
    缺点是增加了Broker的负担,实现相对复杂。

    1. 淘宝Notify支持多种过滤方式,包含直接按照消息类型过滤,灵活的语法表达式过滤,几乎可以满足最苛刻的过滤需求。
    2. 淘宝RocketMQ支持按照简单的Message Tag过滤,也支持按照Message Header、body进行过滤。
    3. CORBA Notification规范中也支持灵活的语法表达式过滤。

    Consumer端消息过滤

    这种过滤方式可由应用完全自定义实现,但是缺点是很多无用的消息要传输到Consumer端。

    Message Persistence

    消息中间件通常采用的几种持久化方式:

    1. 持久化到数据库,例如Mysql。
    2. 持久化到KV存储,例如levelDB、伯克利DB等KV存储系统。
    3. 文件记录形式持久化,例如Kafka,RocketMQ
    4. 对内存数据做一个持久化镜像,例如beanstalkd,VisiNotify
    5. (1)、(2)、(3)三种持久化方式都具有将内存队列Buffer进行扩展的能力,(4)只是一个内存的镜像,作用是当Broker挂掉重启后仍然能将之前内存的数据恢复出来。

    JMS与CORBA Notification规范没有明确说明如何持久化,但是持久化部分的性能直接决定了整个消息中间件的性能。

    RocketMQ充分利用Linux文件系统内存cache来提高性能。

    Message Reliablity

    影响消息可靠性的几种情况:

    1. Broker正常关闭
    2. Broker异常Crash
    3. OS Crash
    4. 机器掉电,但是能立即恢复供电情况。
    5. 机器无法开机(可能是cpu、主板、内存等关键设备损坏)
    6. 磁盘设备损坏。

    (1)、(2)、(3)、(4)四种情况都属于硬件资源可立即恢复情况,RocketMQ在这四种情况下能保证消息不丢,或者丢失少量数据(依赖刷盘方式是同步还是异步)。

    (5)、(6)属于单点故障,且无法恢复,一旦发生,在此单点上的消息全部丢失。RocketMQ在这两种情况下,通过异步复制,可保证99%的消息不丢,但是仍然会有极少量的消息可能丢失。通过同步双写技术可以完全避免单点,同步双写势必会影响性能,适合对消息可靠性要求极高的场合,例如与Money相关的应用。

    RocketMQ从3.0版本开始支持同步双写。

    Low Latency Messaging

    在消息不堆积情况下,消息到达Broker后,能立刻到达Consumer。
    RocketMQ使用长轮询Pull方式,可保证消息非常实时,消息实时性不低于Push。

    At least Once

    是指每个消息必须投递一次。
    RocketMQ Consumer先pull消息到本地,消费完成后,才向服务器返回ack,如果没有消费一定不会ack消息,所以RocketMQ可以很好的支持此特性。

    Exactly Only Once

    1. 发送消息阶段,不允许发送重复的消息。
    2. 消费消息阶段,不允许消费重复的消息。

    只有以上两个条件都满足情况下,才能认为消息是“Exactly Only Once”,而要实现以上两点,在分布式系统环境下,不可避免要产生巨大的开销。所以RocketMQ为了追求高性能,并不保证此特性,要求在业务上进行去重,也就是说消费消息要做到幂等性。RocketMQ虽然不能严格保证不重复,但是正常情况下很少会出现重复发送、消费情况,只有网络异常,Consumer启停等异常情况下会出现消息重复。

    Broker的Buffer满了怎么办?

    Broker的Buffer通常指的是Broker中一个队列的内存Buffer大小,这类Buffer通常大小有限,如果Buffer满了以后怎么办?
    下面是CORBA Notification规范中处理方式:

    1. RejectNewEvents 拒绝新来的消息,向Producer返回RejectNewEvents错误码。
    2. 按照特定策略丢弃已有消息
      • AnyOrder - Any event may be discarded on overflow. This is the default setting for this property.
      • FifoOrder - The first event received will be the first discarded.
      • LifoOrder - The last event received will be the first discarded.
      • PriorityOrder - Events should be discarded in priority order, such that lower priority events will be discarded before higher priority events.
      • DeadlineOrder - Events should be discarded in the order of shortest expiry deadline first.

    RocketMQ没有内存Buffer概念,RocketMQ的队列都是持久化磁盘,数据定期清除。

    对于此问题的解决思路,RocketMQ同其他MQ有非常显著的区别,RocketMQ的内存Buffer抽象成一个无限长度的队列,不管有多少数据进来都能装得下,这个无限是有前提的,Broker会定期删除过期的数据,例如Broker只保存3天的消息,那么这个Buffer虽然长度无限,但是3天前的数据会被从队尾删除。

    此问题的本质原因是网络调用存在不确定性,即既不成功也不失败的第三种状态,所以才产生了消息重复性问题。

    回溯消费

    回溯消费是指Consumer已经消费成功的消息,由于业务上需求需要重新消费,要支持此功能,Broker在向Consumer投递成功消息后,消息仍然需要保留。并且重新消费一般是按照时间维度,例如由于Consumer系统故障,恢复后需要重新消费1小时前的数据,那么Broker要提供一种机制,可以按照时间维度来回退消费进度。
    RocketMQ支持按照时间回溯消费,时间维度精确到毫秒,可以向前回溯,也可以向后回溯。

    消息堆积

    消息中间件的主要功能是异步解耦,还有个重要功能是挡住前端的数据洪峰,保证后端系统的稳定性,这就要求消息中间件具有一定的消息堆积能力,消息堆积分以下两种情况:

    1. 消息堆积在内存Buffer,一旦超过内存Buffer,可以根据一定的丢弃策略来丢弃消息,如CORBA Notification规范中描述。适合能容忍丢弃消息的业务,这种情况消息的堆积能力主要在于内存Buffer大小,而且消息堆积后,性能下降不会太大,因为内存中数据多少对于对外提供的访问能力影响有限。
    2. 消息堆积到持久化存储系统中,例如DB,KV存储,文件记录形式。 当消息不能在内存Cache命中时,要不可避免的访问磁盘,会产生大量读IO,读IO的吞吐量直接决定了消息堆积后的访问能力。

    评估消息堆积能力主要有以下四点:

    1. 消息能堆积多少条,多少字节?即消息的堆积容量。
    2. 消息堆积后,发消息的吞吐量大小,是否会受堆积影响?
    3. 消息堆积后,正常消费的Consumer是否会受影响?
    4. 消息堆积后,访问堆积在磁盘的消息时,吞吐量有多大?

    分布式事务

    已知的几个分布式事务规范,如XA,JTA等。其中XA规范被各大数据库厂商广泛支持,如Oracle,Mysql等。其中XA的TM实现佼佼者如Oracle Tuxedo,在金融、电信等领域被广泛应用。

    分布式事务涉及到两阶段提交问题,在数据存储方面的方面必然需要KV存储的支持,因为第二阶段的提交回滚需要修改消息状态,一定涉及到根据Key去查找Message的动作。RocketMQ在第二阶段绕过了根据Key去查找Message的问题,采用第一阶段发送Prepared消息时,拿到了消息的Offset,第二阶段通过Offset去访问消息,并修改状态,Offset就是数据的地址。

    RocketMQ这种实现事务方式,没有通过KV存储做,而是通过Offset方式,存在一个显著缺陷,即通过Offset更改数据,会令系统的脏页过多,需要特别关注。

    定时消息

    定时消息是指消息发到Broker后,不能立刻被Consumer消费,要到特定的时间点或者等待特定的时间后才能被消费。
    如果要支持任意的时间精度,在Broker层面,必须要做消息排序,如果再涉及到持久化,那么消息排序要不可避免的产生巨大性能开销。
    RocketMQ支持定时消息,但是不支持任意时间精度,支持特定的level,例如定时5s,10s,1m等。

    消息重试

    Consumer消费消息失败后,要提供一种重试机制,令消息再消费一次。Consumer消费消息失败通常可以认为有以下几种情况:

    1. 由于消息本身的原因,例如反序列化失败,消息数据本身无法处理(例如话费充值,当前消息的手机号被注销,无法充值)等。这种错误通常需要跳过这条消息,再消费其他消息,而这条失败的消息即使立刻重试消费,99%也不成功,所以最好提供一种定时重试机制,即过10s秒后再重试。
    2. 由于依赖的下游应用服务不可用,例如db连接不可用,外系统网络不可达等。遇到这种错误,即使跳过当前失败的消息,消费其他消息同样也会报错。这种情况建议应用sleep 30s,再消费下一条消息,这样可以减轻Broker重试消息的压力。

    RocketMQ Overview

    RocketMQ是否解决了上述消息中间件面临的问题,接下来让我们一探究竟。

    RocketMQ 是什么?

    上图是一个典型的消息中间件收发消息的模型,RocketMQ也是这样的设计,简单说来,RocketMQ具有以下特点:

    • 是一个队列模型的消息中间件,具有高性能、高可靠、高实时、分布式特点。
    • Producer、Consumer、队列都可以分布式。
    • Producer向一些队列轮流发送消息,队列集合称为Topic,Consumer如果做广播消费,则一个consumer实例消费这个Topic对应的所有队列,如果做集群消费,则多个Consumer实例平均消费这个topic对应的队列集合。
    • 能够保证严格的消息顺序
    • 提供丰富的消息拉取模式
    • 高效的订阅者水平扩展能力
    • 实时的消息订阅机制
    • 亿级消息堆积能力
    • 较少的依赖

    RocketMQ 物理部署结构

    如上图所示, RocketMQ的部署结构有以下特点:

    • Name Server是一个几乎无状态节点,可集群部署,节点之间无任何信息同步。
    • Broker部署相对复杂,Broker分为Master与Slave,一个Master可以对应多个Slave,但是一个Slave只能对应一个Master,Master与Slave的对应关系通过指定相同的BrokerName,不同的BrokerId来定义,BrokerId为0表示Master,非0表示Slave。Master也可以部署多个。每个Broker与Name Server集群中的所有节点建立长连接,定时注册Topic信息到所有Name Server。
    • Producer与Name Server集群中的其中一个节点(随机选择)建立长连接,定期从Name Server取Topic路由信息,并向提供Topic服务的Master建立长连接,且定时向Master发送心跳。Producer完全无状态,可集群部署。
    • Consumer与Name Server集群中的其中一个节点(随机选择)建立长连接,定期从Name Server取Topic路由信息,并向提供Topic服务的Master、Slave建立长连接,且定时向Master、Slave发送心跳。Consumer既可以从Master订阅消息,也可以从Slave订阅消息,订阅规则由Broker配置决定。

    RocketMQ 逻辑部署结构

    如上图所示,RocketMQ的逻辑部署结构有Producer和Consumer两个特点。

    Producer Group

    用来表示一个发送消息应用,一个Producer Group下包含多个Producer实例,可以是多台机器,也可以是一台机器的多个进程,或者一个进程的多个Producer对象。一个Producer Group可以发送多个Topic消息,Producer Group作用如下:

    1. 标识一类Producer
    2. 可以通过运维工具查询这个发送消息应用下有多个Producer实例
    3. 发送分布式事务消息时,如果Producer中途意外宕机,Broker会主动回调Producer Group内的任意一台机器来确认事务状态。

    Consumer Group

    用来表示一个消费消息应用,一个Consumer Group下包含多个Consumer实例,可以是多台机器,也可以是多个进程,或者是一个进程的多个Consumer对象。一个Consumer Group下的多个Consumer以均摊方式消费消息,如果设置为广播方式,那么这个Consumer Group下的每个实例都消费全量数据。

    RocketMQ 数据存储结构

    如上图所示,RocketMQ采取了一种数据与索引分离的存储方法。有效降低文件资源、IO资源,内存资源的损耗。即便是阿里这种海量数据,高并发场景也能够有效降低端到端延迟,并具备较强的横向扩展能力。

    展开全文
  • 补充说明几点问题

    2020-11-07 20:00:25
    阅读本文大概需要 1.6 分钟。让大家久等了,今天一登录后台,看到后台一大堆读者询问,以及小商店的成百上千条客服信息,姑且这里发个文章给大家统一说明下吧。昨天文章推荐的款生财日历,整个...
  • 十分钟入门ThinkPhp

    千次阅读 2020-08-06 21:41:29
    首先,下载ThinkPhp下载之后,运行index.php 如果是,需要创建其他项目,也可以将其中的 两个文件单独拿出,再运行index.php,可以自动创建其他文件夹。 需要注意的是,如果单独拿出这两个文件,需要保证这两个文件...
  • 上周写了一篇 20 分钟学会 C 语言与Python的文章——《一万字一篇文20分钟学会C语言和Python,十四年编程经验老鸟传授经验之道》,之后见粉丝转了一个话题“十分钟如何学会C语言”,我就在想是否能够十分钟呢?...
  • 十分钟了解Kubernetes

    2019-06-29 07:00:00
    从大面上说,个大组件都齐了。下面再说Pod持久化和参数配置的问题。 Pod持久化就需要挂载Volume,通过将数据写入指定Volume的方式来完成持久化。Kubernetes为Volume提供了多种实现方式,大体分为两类:临时挂载和...
  • 近期见到有很多网友常常提问基金是怎么回事,好象基金是个很复杂难懂的东西,又说推荐去读的基金知识文章看不懂。...这些基金对我们初涉基金投资的人来说投资机会不多,先搞通上面种最常见的基金后再说. 
  • 十分钟让你懂得基金是什么

    千次阅读 2007-05-18 11:59:00
    近期见到有很多网友常常提问基金是怎么回事,好象基金是个很复杂难懂的东西,又说推荐去读的基金知识文章看不懂。...这些基金对我们初涉基金投资的人来说投资机会不多,先搞通上面种最常见的基金后再说.   
  • 十分钟学会电子合同

    2020-02-03 18:41:23
    教程来了,十分钟学会! 电子合同,顾名思义,就是用电子方式签署合同。从广义角度,各类带有签名的文件都可以视为合同。包括交易合同、商务合同、授权书、回执、通知、正式函件、发票、证明、物流单据等等。这些都...
  • 2、每天学习十分钟:将加班中遇到的一些问题记录下来,如果以后遇到同样问题,便可方便解决了: ①线上版本更新的时候,切记需要将原来版本代码进行备份,不管是数据库还是源代码,这都是十分有必要的,理由...
  • 十分钟入门消息中间件

    千次阅读 2020-07-06 23:59:50
    本文将会从以下个方面来讲述相关知识,相信大家耐心看了之后肯定有收获,码字不易,别忘了「在看」,「转发」哦。 什么是消息中间件,消息中间件的作用 实现三高(高并发、高可用、高性能)的策略 消息中间件的...
  • 十分钟学习建造者模式

    千次阅读 多人点赞 2016-08-19 14:42:59
    * 以下个字段根据需要,可传可不传,可以把builder理解成一个容器,不断填充此容器, * 填充完以后,把此时的builder传到当前类的构造函数中 */ public Buidler setAddress (String address){ this ....
  • 十分钟读懂YOLO算法

    2019-07-23 14:11:15
    十分钟读懂YOLO算法(含代码)YOLO之前算法的思想和缺陷 本文主要根据吴恩达的深度学习的视频总结而成,其中也参考了其他博客的内容,如有理解错误的地方还请指正! YOLO论文链接 YOLO之前算法的思想和缺陷 YOLO的...
  • 在读这篇文章前,你可能会有如下的问题,读完之后,都迎刃而解。 问题 什么是分布式消息中间件? 消息中间件的作用是什么? 消息中间件的使用场景是什么? 消息中间件选型? 初识 Kafka Kafka知识树 1 Why Kafka ...
  • 十分钟了解 spring cloud

    千次阅读 2018-03-01 00:36:15
    Eureka Server可以运行多个实例来构建集群,解决单问题,但不同于ZooKeeper的选举leader的过程,Eureka Server采用的是Peer to Peer对等通信。这是一种去中心化的架构,无master/slave区分,每一个Peer都是对等的...
  • 为什么微课制作时间限制在十分钟?

    千次阅读 2019-03-28 14:39:32
    提到为什么**微课制作**时间...经过我们的采访调查,微课之所以大多限制在10分钟以内,老师们给出的主要原因有以下几点: 1. 受学习注意力影响 一节课40分钟,都很少有学生能全身贯注地听10分钟左右,如果微课过长,...
  • 十分钟读懂AES加密算法

    万次阅读 多人点赞 2017-09-23 10:07:28
    我们将会做小改变,以前,系数可以很大,而现在,我们只让系数等于1或0 旧方式: 123 x 2 + 45 x 2 + 678 x + 9 x + 10 = 168 x 2 + 687 x + 10 123 x 2 + 45 x 2 + 678 x + 9 x + 10 = 168 x 2 + 687 x + 10 ...
  •  当你早起7开车到达公司后,时间是9点,你发布了一条租车信息,时间是早10到完20十分钟后,有人租了你的车,顺利的将车开走,你去上班,今天你的的支出减半,同时还赚了100块钱。  这样是不是可以将...
  • 十分钟深度学习Java注解

    千次阅读 多人点赞 2020-06-06 18:56:53
    其属性要求如下: 属性的返回值类型必须是以下种: 基本数据类型 String类型 枚举类型 注解 以上类型的数组 注意: 在这里不能有void的无返回值类型和以上类型以外的类型 定义的属性,在使用时需要给注解中的属性...
  • 十分钟写一个好玩的app

    千次阅读 多人点赞 2021-03-22 16:17:14
    例如前年用的比较多的 react native(react 语法),uniapp(vue,小程序语法),这两年比较火的flutter(dart语言),还有就是各种内嵌H5的app,等等 正文 本篇使用uniapp,实现一个真心话大冒险app,自己手动定义...
  • 同样是一个小伙伴的需求,我帮忙做的实现,然后给我发了个小红包,今天上班可以任性一会一杯星巴克了,这里再次感谢扔物线大大教我写动画,哈哈哈哈~ 这次的十分钟动画同样只要十分钟就可以实现,没有标题狗哦...
  • Broker的Buffer通常指的是Broker中一个队列的内存Buffer大小,这类Buffer通常大小有限,如果Buffer满了以后怎么办? 下面是CORBA Notification规范中处理方式: RejectNewEvents 拒绝新来的消息,向Producer返回...
  • 十分钟掌握Pytorch搭建神经网络的流程

    万次阅读 多人点赞 2019-03-11 19:13:11
    当然搞深度学习不可能只用官方提供的loss函数,所以如果你要想用自己的loss函数,必须也把loss定义成上面Net的样子( 不然你的loss不能反向传播,这点要注意,注:这点是以前写的,很久之前的版本不行,现在都可以了...
  • 原文地址:十分钟看懂图像语义分割技术  大多数人接触 “语义” 都是在和文字相关的领域,或语音识别,期望机器能够识别你发出去的消息或简短的语音,然后给予你适当的反馈和回复。嗯,看到这里你应该已经猜到了,...
  • 十分钟教会你们怎么开传奇

    千次阅读 2020-07-14 10:51:23
    首先传奇架设需要准备以下个软件 准备工具: 1、传奇服务端(版本) 2、配套登陆器 (一般版本里面都有会自带的)3、DBC2000 第一步:解压传奇服务端(就是Mirserver文件夹)到D盘 第二步:打开符合自己电脑系统的...
  • TCP/IP 十分钟教程

    千次阅读 2016-05-28 16:28:54
    通常情况下,邮件会被送到一台邮件服务器(SMTP 服务器),然后被送到另一台(或台)服务器,然后最终被送到它的目的地。 SMTP 也可以传送纯文本,但是无法传输诸如图片、声音或者电影之类的二进制数据。 ...
  • 十分钟搞定Windows10 Docker环境

    千次阅读 多人点赞 2020-03-22 01:25:11
    目录 Docker简介 没有虚拟化的原始时代 虚拟化部署过度时代 容器部署时代 DockerDesktopforWindows的安装 Docker核心概念 用IDEA编写SpringBoot测试项目 ...最近年来,容器算是时下非常火的...
  • 十分钟了解比特币和区块链

    万次阅读 多人点赞 2018-05-05 17:58:41
    中本聪在2008年全球金融危机爆发之后,在网上发表了一篇论文:《比特币:一种式的电子现金系统》(Bitcoin: A Peer-to-Peer Electronic Cash System),文中描述了一种全新的、一种总量恒定、去中心化的电子...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 13,727
精华内容 5,490
关键字:

十分钟以后是几点