精华内容
下载资源
问答
  • 高级JAVA开发 MQ部分

    千次阅读 2019-05-15 02:18:43
    高级JAVA开发 MQ部分MQMQ的作用、为什么要用MQ常见MQ的优缺点使用MQ带来的问题以及处理办法MQ带来的问题列举消息重复消费(幂等)问题消息丢失问题消息顺序性问题消息过期丢失、大量积压等问题如何保证MQ高可用性...

    MQ

    参考和摘自:
    中华石杉 《Java工程师面试突击第1季》
    ActiveMQ—知识点整理
    消息总线真的能保证幂等
    ActiveMQ消息传送机制以及ACK机制详解

    MQ的作用、为什么要用MQ

    解耦、异步、消峰

    应用场景:

    1. 解耦:利用 发布/订阅(Publish/Subscribe)模型,多服务订阅同一queue,省去生产者主动调用并维护多个消费者(service),消费者可随时unSubscribe,生产者并不感知。
    2. 异步:利用 点对点( Point-to-Point)模型,将多个任务分别放到不同队列中,之后直接返回。消费者各自从不同队列取得任务并消费。这么做的好处是不用阻塞等待多个任务全部返回再响应用户操作,加速响应。
    3. 消峰:利用 点对点( Point-to-Point)模型,在系统请求高峰期不采用阻塞式调用,将任务全部打入MQ中,让系统调用链中消费者慢慢消化任务。防止系统被访问高峰打死(很大原因是直接访问数据库,数据库成为瓶颈,后面也会在 缓存 章节继续分析)。

    常见的MQ的优缺点

    摘自中华石杉老师的笔记

    特性ActiveMQRabbitMQRocketMQKafka
    单机吞吐量万级
    吞吐量比RocketMQ和Kafka要低了一个数量级
    万级
    吞吐量比RocketMQ和Kafka要低了一个数量级
    10万级
    RocketMQ也是可以支撑高吞吐的一种MQ
    10万级
    这是kafka最大的优点,就是吞吐量高。
    一般配合大数据类的系统来进行实时数据计算、日志采集等场景
    topic数量对吞吐量的影响topic可以达到几百,几千个的级别,吞吐量会有较小幅度的下降。
    这是RocketMQ的一大优势,在同等机器下,可以支撑大量的topic
    topic从几十个到几百个的时候,吞吐量会大幅度下降。所以在同等机器下,kafka尽量保证topic数量不要过多。如果要支撑大规模topic,需要增加更多的机器资源
    时效性ms级微秒级
    这是rabbitmq的一大特点,延迟是最低的
    ms级延迟在ms级以内
    可用性
    基于主从架构实现高可用性

    基于主从架构实现高可用性
    非常高
    分布式架构
    非常高
    kafka是分布式的,一个数据多个副本,少数机器宕机,不会丢失数据,不会导致不可用
    消息可靠性有较低的概率丢失数据经过参数优化配置,可以做到0丢失经过参数优化配置,消息可以做到0丢失
    功能支持MQ领域的功能极其完备基于erlang开发,所以并发能力很强,性能极其好,延时很低MQ功能较为完善,还是分布式的,扩展性好功能较为简单,主要支持简单的MQ功能,在大数据领域的实时计算以及日志采集被大规模使用,是事实上的标准
    优劣势总结非常成熟,功能强大,在业内大量的公司以及项目中都有应用。
    偶尔会有较低概率丢失消息。而且现在社区以及国内应用都越来越少,官方社区现在对ActiveMQ 5.x维护越来越少,几个月才发布一个版本。
    而且确实主要是基于解耦和异步来用的,较少在大规模吞吐的场景中使用。
    erlang语言开发,性能极其好,延时很低;
    吞吐量到万级,MQ功能比较完备
    而且开源提供的管理界面非常棒,用起来很好用
    社区相对比较活跃,几乎每个月都发布几个版本分
    在国内一些互联网公司近几年用rabbitmq也比较多一些
    但是问题也是显而易见的,RabbitMQ确实吞吐量会低一些,这是因为他做的实现机制比较重。
    而且erlang开发,国内有几个公司有实力做erlang源码级别的研究和定制?如果说你没这个实力的话,确实偶尔会有一些问题,你很难去看懂源码,你公司对这个东西的掌控很弱,基本职能依赖于开源社区的快速维护和修复bug。
    而且rabbitmq集群动态扩展会很麻烦,不过这个我觉得还好。其实主要是erlang语言本身带来的问题。很难读源码,很难定制和掌控。
    接口简单易用,而且毕竟在阿里大规模应用过,有阿里品牌保障
    日处理消息上百亿之多,可以做到大规模吞吐,性能也非常好,分布式扩展也很方便,社区维护还可以,可靠性和可用性都是ok的,还可以支撑大规模的topic数量,支持复杂MQ业务场景
    而且一个很大的优势在于,阿里出品都是java系的,我们可以自己阅读源码,定制自己公司的MQ,可以掌控
    社区活跃度相对较为一般,不过也还可以,文档相对来说简单一些,然后接口这块不是按照标准JMS规范走的有些系统要迁移需要修改大量代码
    还有就是阿里出台的技术,你得做好这个技术万一被抛弃,社区黄掉的风险,那如果你们公司有技术实力我觉得用RocketMQ挺好的
    kafka的特点其实很明显,就是仅仅提供较少的核心功能,但是提供超高的吞吐量,ms级的延迟,极高的可用性以及可靠性,而且分布式可以任意扩展
    同时kafka最好是支撑较少的topic数量即可,保证其超高吞吐量
    而且kafka唯一的一点劣势是有可能消息重复消费,那么对数据准确性会造成极其轻微的影响,在大数据领域中以及日志采集中,这点轻微影响可以忽略
    这个特性天然适合大数据实时计算以及日志收集

    使用MQ带来的问题以及处理办法

    MQ带来的问题列举

    1. 系统可用性降低,需要保证MQ健康的运行,否则MQ挂掉会导致整个应用不可用,后果难以设想。
    2. 系统的复杂性变高,比如消息重复消费、消息丢失 等等,需要用一些手段来处理,怎么处理接下来细说,这里将会成为重要考点。
    3. 一致性问题(分布式事务)。A、B、C、D四个任务必须同时成功,放入MQ后A、B、C都成功了,偏偏D任务失败了该如何处理。这也是重要考点。

    消息重复消费(幂等)问题

    消费者拿到消息但是还没来得及ACK(或者还没来得及提交offset)就挂掉了,重启后会重新拿到已经消费但是还没通知(ACK)给MQ的消息,就产生了重复消费问题。(PS:这里如果MQ采用AUTO_ACK模式,消费者拿到消息后会第一时间给MQ做出ACK反馈,之后再去消费消息。但还没来得及消费完就挂掉了,那么MQ会认为此条消息处理过了,消费者重启后会继续从MQ拿消息,会产生消息丢失的问题,参看:<消息丢失问题>章节)
    解决办法:
    数据携带唯一id,基于内存Map或Set、Redis、数据库唯一键,保存消费成功的数据,重复数据来第二次时候可以感知到并直接丢弃处理。

    面试遇到过这么一个问题:
    面试官:有100w用户电话号码数据在数据库中,并不保证其中是否有重复,要求为每一个用户发一条短信并且不可重复发送,现提供一个基于http的短信发送微服务,该如何设计架构,最简单最快的把短信发送出去?

    我的思路:
    1.数据量过大,不能在数据库上做去重,并且用多线程读取更快。
    2.短信服务会成为瓶颈,需要缓冲。
    3.怎么在消费的过程中直接过滤掉重复消息。

    我:用多线程读取数据(计算好多少页,每个线程取多少次,一次取多少条)将用户数据灌入MQ,多个消费者从MQ取得数据先在Redis中读一下看看有没有消费过,并在Redis中存入消费过的电话号码,调用短信服务(多部署几个)发送。重复电话号码直接舍弃数据不消费。
    接着面试官问:如果就有那么几个消费者同时取到电话号码,巧了,他们取到的电话号码相同,查了一下Redis,没人发送过,就有重复发送的问题,怎么解决。
    我:呃…


    回来想了一下这个问题,因为先读取Redis再写入Redis并不能保证原子性,出现了并发问题。采用和分布式锁相同的思想来解决这个问题。参考下面文章:
    Redis分布式锁的正确实现方式
    用Redis的set加入NX(SET IF NOT EXIST,即当key不存在时,我们进行set操作;若key已经存在,则不做任何操作;)参数保证set原子性并且取得返回值。完美解决~~~


    PS:

    1. Redis是主从集群,上述分布式锁会有漏洞。Redisson分布式锁实现框架可以弥补漏洞。(slave节点异步同步master数据,有延时。master节点设置锁还未同步到slave时挂掉了,锁就失效了)
    2. 由于本人技术水平有限,上述的架构方案并不是最优的,读文章小伙伴有更好的解决方案请发邮件给我,不胜感激~~~~

    消息丢失问题

    1.生产者发送消息丢失:
    生产者发送消息到MQ过程中,网络原因丢了。
    MQ接收到消息后内部出错,没保存下来。
    解决办法:
    1.用 事务,发送时用try catch包裹发送消息代码块,如果发送失败可以拦截Exception再做进一步处理(重发或者…)
    事务机制是 同步阻塞的,影响发送消息吞吐量。
    2.(RabbitMq)利用 confirm机制。把channel设置成confirm模式,发送结果通知给本地实现的接口,如果通知失败再做进一步的处理(重发或者…) 异步不会阻塞,吞吐量高
    2.MQ本身问题丢失:
    MQ挂掉了导致内存中消息丢失
    解决办法: 配置持久化。但是也有一种可能,消息接收到了但是还没来得及持久化就挂掉了,还是会丢失一点点数据。
    3.MQ到消费者消费过程中导致的丢失,消费端弄丢了数据
    消费着拿到消息但是还没来得及消费就挂掉了,MQ以为消费者已经处理完了
    解决办法:关闭AUTO_ACK,采用CLIENT_ACK模式,客户端收到消息处理成功后再手动发送ACK给MQ。如果消费者挂掉了,MQ针对这条消息会ACK超时,重新发给别人继续消费。

    消息顺序性问题

    这里假设要处理一个订单的三个任务,三个任务为一组:

    1. RabbitMQ等非分布式MQ解决方案:
      思路:将同订单任务按顺序放到一个Queue中,一个消费者只从一个Queue消费。
      在这里插入图片描述
      这里不能建立无穷多个Queue,将订单号的hash值对Queue个数取余分发到对应Queue中即可。
    2. Kafka等分布式MQ解决方案:
      参考:kafka topic消息分配partition规则(Java源码)
      思路:由于Kafka是分布式的,每个Queue中的数据会分布到多个partition中。Kafka可以保证每个partition中的数据是有顺序的,那么指定key(比如订单ID),将需要保证顺序的任务放到同一partition中(kafka会把key值一样的任务放到一个partition中,和上述订单号对Queue个数取余原理相同),一个消费者只能从一个partition消费,这样就保证了按顺序执行。

    如果消费者是多线程并发的从partition取得数据,多线程不能保证执行顺序,那么上述模型就不好用了。
    解决办法: 在消费者端建立多个线程安全的队列(比如LinkedBlockingQueue,这里我认为采用阻塞队列比较好,省得消耗jvm内存过多导致oom异常),从MQ取得任务,将相同订单号的任务发送到同一个队列(也可以用hash取余的办法),再对每一个队列启动一个线程消费任务,保证顺序执行。
    在这里插入图片描述

    消息过期丢失、大量积压等问题

    1. 过期问题:
      一般不设置消息的过期时间。如果设置了过期时间,只能在事后从数据源头找出数据,写程序将数据重新发送到MQ中。
    2. 大量积压后如何快速消费:
      ActiveMQ、RabbitMQ等非分布式MQ单个Queue数据量过大增加临时MQ节点也不能解决问题(每个节点存储全量数据),需要增加消费者临时节点来加速消费。
      Kafka是分布式MQ,每个消费者只能指定一个partition消费,那么新建立一个更多节点的Kafka集群,增加临时服务将原Kafka集群中的数据直接分发到新Kafka集群,这样消息会平均分配到更多的机器中,减缓MQ压力,再针对新Kafka集群添加实际业务处理的消费者,增加消费速度即可。
    3. MQ积压导致磁盘空间不足:
      (Kafka)增加临时消费节点将消息写到临时MQ集群中。
      或者增加临时消费者拿到数据直接将数据扔掉,事后做补偿。防止MQ直接压垮掉导致整个系统不可用。

    如何保证MQ高可用性

    RabbitMQ高可用以及部署模式

    单机模式,普通集群模式,镜像集群模式

    1. 单机模式
    2. 普通集群模式
      集群中Master保存Queue元数据(Queue的属性之类的数据)和Queue数据,slave只保存Queue的元数据,在访问slave节点时,slave去和主节点通信取得Queue数据。
      总结:
      优点:提高消费吞吐量
      缺点:1. 性能开销大,在集群内部产生大量数据传输 2.可用性几乎没有保障,主节点挂掉了,整个MQ不可用。
    3. 镜像集群模式
      所有节点都保存Queue的所有数据。在写入数据时,各个节点自动同步。消费数据时同样。
      总结:
      优点:高可用,单个节点挂掉不影响整个集群
      缺点:1.性能开销大,需要所有机器同步所有数据。 2.不是分布式的,单Queue数据量超级大,超出单机最大容量时无法处理。 3.扩展性很差,和第2点一样,加机器也不能缓解数据量超级大的问题。

    如何开启镜像集群模式

    在管理控制台新增一个策略,这个策略是镜像集群模式的策略,指定的时候可以要求数据同步到所有节点,也可以要求同步到指定数量的节点,然后再次创建Queue的时候应用这个策略,就会自动将数据同步到其他的节点上去了。

    kafka的高可用性

    多个broker组成,每个broker是一个节点;创建一个topic,这个topic可以划分为多个partition,每个partition可以存在于不同的broker上,每个partition放一部分数据。(可以理解为每个Queue的数据被划分到不同机器上,换言说每个机器都持有同一个Queue的一部分数据)。在0.8版本以前没有HA机制,其中一台机器宕机则数据直接丢失。0.8版本后可以针对每个partition设置多个broker,其中一台是leader节点,其余是follower节点,只有leader节点提供对外读写服务,数据读写自动同步到follower节点,如果leader挂掉,follower们通过选举算法选举一个follower作为新的leader继续提供服务。

    摘自中华石杉《Java工程师面试突击第1季(可能是史上最好的Java面试突击课程)\06_引入消息队列之后该如何保证其高可用性?\视频\04》图片摘自中华石杉《Java工程师面试突击第1季(可能是史上最好的Java面试突击课程)\06_引入消息队列之后该如何保证其高可用性?\视频\04

    展开全文
  • :hot_beverage: javatech总结了Java初步开发中常见的主流技术的应用,特性,原理。 :repeat_button:项目同步维护: | :open_book:电子书阅读: | 说明: 下面的内容清单,凡是有 :books:标记的技术,都已整理成...
  • Java开发工程师面试常见问题

    千次阅读 2018-11-30 18:18:47
    Java开发工程师面试常见问题Java集合Java常用对象设计模式并发相关多线程JVM相关Spring相关Mybatis相关数据库中间件场景 本文为笔者身体经历总结,此知识指引可以为有面试需求或者想换工作的指引学习方向,提前准备...

    本文为笔者身体经历总结,此知识指引可以为有面试需求或者想换工作的指引学习方向,提前准备这些知识点,可以帮助少走很多弯路。

    Java集合

    HashMap的内部结构?
    答案:http://www.cnblogs.com/chenssy/p/3850230.html
    HashTable和ConcurrentHashMap的区别?
    答案:http://pi88dian88.iteye.com/blog/2008160

    Java常用对象

    StringBuilder和StringBuffer的区别?
    答案:https://www.cnblogs.com/su-feng/p/6659064.html

    设计模式

    单例模式的实现
    懒汉模式、饿汉模式
    https://blog.csdn.net/doymm2008/article/details/13288067
    https://www.cnblogs.com/aspirant/p/6878555.html

    并发相关

    AtomicInteger如何实现?
    答案:https://blog.csdn.net/qweqwruio/article/details/81359887

    Synchronized和ReentrantLock的区别?
    https://blog.csdn.net/qq838642798/article/details/65441415

    多线程

    实例化三个线程,一个线程打印a,一个线程打印b,一个线程打印c,三个线程同时执行,要求打印出10个连着的abc(笔试)。
    答案:https://www.cnblogs.com/xiaoxi/p/8035725.html

    多线程实现方式,多线程的运行状态,以及多线程之间如何通讯?
    答案:https://www.cnblogs.com/nayitian/p/3258377.html
    答案:https://www.cnblogs.com/mengdd/archive/2013/02/20/2917966.html
    答案:https://www.cnblogs.com/hapjin/p/5492619.html

    Java多线程方法里面的参数的解释,是否看过源码?
    答案:https://www.cnblogs.com/jiangxiulian/p/7443983.html

    JVM相关

    JVM垃圾回收算法
    答案:https://blog.csdn.net/yano_nankai/article/details/50957578

    JVM内存模型
    答案:https://www.cnblogs.com/dingyingsi/p/3760447.html

    内存溢出、内存泄漏
    答案:https://blog.csdn.net/wisgood/article/details/16818243

    Spring相关

    SpringIOC原理?
    答案:http://www.cnblogs.com/zhoudi/p/5820513.html

    SpringAOP原理?
    答案:https://www.cnblogs.com/best/p/5679656.html

    SpringMVC请求的流程
    答案:https://www.cnblogs.com/xiaoxi/p/6164383.html

    ContextLoaderListener和 DispatcherServlet的作用是什么?是否能删除一个?
    答案:https://www.cnblogs.com/weknow619/p/6341395.html

    Mybatis相关

    Mybatis事务传播属性和隔离级别
    答案:https://www.cnblogs.com/yuanfy008/p/4174340.html

    Mybatis二级缓存
    答案:https://blog.csdn.net/u011403655/article/details/46696065

    数据库

    数据库优化
    https://www.2cto.com/database/201503/384706.html

    数据库索引失效的场景?
    https://blog.csdn.net/zmx729618/article/details/52701370

    mysql数据库引擎,mysql中的Scheme
    https://www.2cto.com/database/201409/333956.html

    mysql的主键为什么设置自增编号?
    从数据库索引实现原理分析
    https://blog.csdn.net/waeceo/article/details/78702584

    数据库主备数据复制机制?
    https://www.2cto.com/database/201609/548181.html

    中间件

    Redis除了缓存还有哪些功能?
    配置、MQ、注册中心

    Redis数据持久化机制?
    https://blog.csdn.net/u010785685/article/details/52366977

    zookeeper的作用
    https://www.cnblogs.com/felixzh/p/5869212.html

    Zookeeper分布式锁实现方式
    https://www.cnblogs.com/felixzh/p/5869212.html

    Zookeeper选主模式过程?
    https://www.cnblogs.com/felixzh/p/5869212.html

    缓存雪崩、缓存击穿、缓存穿透
    https://blog.csdn.net/zeb_perfect/article/details/54135506

    场景

    商品秒杀的设计
    http://www.cnblogs.com/ZJOE80/p/5671567.html

    金钱事务性问题
    保证查询和更新在同一条sql语句中(CAS),确保事务的一致性

    展开全文
  • MQ--常见MQ对比

    2020-01-16 16:29:01
    常见MQ对比 MQ–常见MQ对比 ActiveMQ 社区算是比较成熟,但是较目前来说,ActiveMQ 的性能比较差,而且版本迭代很慢,不推荐使用。 RabbitMQ 在吞吐量方面虽然稍逊于 Kafka 和 RocketMQ ,但是由于它基于 erlang ...

    常见MQ对比
    在这里插入图片描述

    ActiveMQ

    社区算是比较成熟,但是较目前来说,ActiveMQ 的性能比较差,而且版本迭代很慢,不推荐使用。

    RabbitMQ

    在吞吐量方面虽然稍逊于 Kafka 和 RocketMQ ,但是由于它基于 erlang 开发,所以并发能力很强,性能极其好,延时很低,达到微秒级。但是也因为 RabbitMQ 基于 erlang 开发,所以国内很少有公司有实力做erlang源码级别的研究和定制。如果业务场景对并发量要求不是太高(十万级、百万级),那这四种消息队列中,RabbitMQ 一定是你的首选。如果是大数据领域的实时计算、日志采集等场景,用 Kafka 是业内标准的,绝对没问题,社区活跃度很高,绝对不会黄,何况几乎是全世界这个领域的事实性规范。

    RocketMQ

    阿里出品,Java 系开源项目,源代码我们可以直接阅读,然后可以定制自己公司的MQ,并且 RocketMQ 有阿里巴巴的实际业务场景的实战考验。RocketMQ 社区活跃度相对较为一般,不过也还可以,文档相对来说简单一些,然后接口这块不是按照标准 JMS 规范走的有些系统要迁移需要修改大量代码。还有就是阿里出台的技术,得做好这个技术万一被抛弃,社区黄掉的风险。

    Kafka

    特点其实很明显,就是仅仅提供较少的核心功能,但是提供超高的吞吐量,ms 级的延迟,极高的可用性以及可靠性,而且分布式可以任意扩展。同时 kafka 最好是支撑较少的 topic 数量即可,保证其超高吞吐量。kafka 唯一的一点劣势是有可能消息重复消费,那么对数据准确性会造成极其轻微的影响,在大数据领域中以及日志采集中,这点轻微影响可以忽略这个特性天然适合大数据实时计算以及日志收集。

    展开全文
  • 本文总结了零基础学习Java编程语言的几个常见开发架构。希望能够对刚入门的Java新手有帮助。 常用框架: 集成开发工具(IDE):Eclipse、MyEclipse、Spring Tool Suite(STS)、Intellij IDEA、NetBeans、JBuilder...

    很多Java编程初学者在刚接触Java语言程序的时候,不知道该学习掌握哪些必要的基础知识。本文总结了零基础学习Java编程语言的几个常见的开发架构。希望能够对刚入门的Java新手有帮助。

    常用框架:
    集成开发工具(IDE):Eclipse、MyEclipse、Spring Tool Suite(STS)、Intellij IDEA、NetBeans、JBuilder、JCreator

    JAVA服务器:tomcat、jboss、websphere、weblogic、resin、jetty、apusic、apache

    负载均衡:nginx、lvs

    web层框架:Spring MVC、Struts2、Struts1、Google Web Toolkit(GWT)、JQWEB

    服务层框架:Spring、EJB

    持久层框架:Hibernate、MyBatis、JPA、TopLink

    数据库:Oracle、MySql、MSSQL、Redis

    项目构建:maven、ant

    持续集成:Jenkins

    版本控制:SVN、CVS、VSS、GIT

    私服:Nexus

    消息组件:IBM MQ、RabbitMQ、ActiveMQ、RocketMq

    日志框架:Commons Logging、log4j、slf4j、IOC

    缓存框架:memcache、redis、ehcache、jboss cache

    RPC框架:Hessian、Dubbo

    规则引擎:Drools

    工作流:Activiti

    批处理:Spring Batch

    通用查询框架:Query DSL

    JAVA安全框架:shiro、Spring Security

    代码静态检查工具:FindBugs、PMD

    Linux操作系统:CentOS、Ubuntu、SUSE Linux、

    常用工具:PLSQL Developer(Oracle)、Navicat(MySql)、FileZilla(FTP)、Xshell(SSH)、putty(SSH)、SecureCRT(SSH)、jd-gui(反编译)

    MicroProfile
    虽然不一定是框架,但是是规范。这些项目驱动并作为先前项目的基础。重要的一点是,由于有了规范,可以直接更改实现,并且我们有多家供应商正在合作,并使用诸如Wildfly,Payara,TomEE等实现。

    Spring MVC
    Spring MVC属于Spring FrameWork的后续产品,已经融合在Spring Web Flow里面,Spring框架提供了构建Web应用程序的全功能MVC模块,使用Spring可插入MVC架构,所以在使用Spring进行Web开发时,可以选择使用Spring的Spring MVC框架或集成其他MVC开发框架,比如Struts1,Struts2等。

    Struts2
    Struts2以WebWork优秀的设计思想为核心,吸收了Struts框架的部分优点,提供了一个更加整洁的MVC设计模式实现的Web应用程序框架。

    Hibernate
    Hibernate是一种ORM框架,在Java对象与关系型数据库之间建立某种映射,以实现直接存取Java对象(POJO)。ORM框架是一种不同与MVC的另一种思想框架,适用范围也与MVC截然不同。

    使用JDBC连接来读写数据库,我们最常见的就是打开数据库连接、使用复杂的SQL语句进行读写、关闭连接,获得的数据又需要转换或封装后往外传,这是一个非常烦琐的过程。这时出现了Hibernate框架,它需要你创建一系列的持久化类,每个类的属性都可以简单的看做和一张数据库表的属性一一对应,当然也可以实现关系数据库的各种表件关联的对应。当我们需要相关操作是,不用再关注数据库表。我们不用再去一行行的查询数据库,只需要持久化类就可以完成增删改查的功能。使我们的软件开发真正面向对象,而不是面向混乱的代码。

    Mybatis
    MyBatis原本是apache的一个开源项目iBatis,2010年这个项目由apache software foundation迁移到了google code,并且改名为MyBatis。

    iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAOs)。

    JSF
    JSF它可以说是所有Java框架中的与Java关系最近的,因为它和Java都是Oracle的嫡系部队。

    JSF也许并算不上最好的Java框架,但是由于Oracle的加持,JSF的文档是最全也最容易找到的。此外,由于JSF已通过JCP格式化为JavaEE的一部分,所以你只要安装了J2EE,就可以无障碍使用JSF了。

    复杂的功能也能用JSF提供的大量工具和库来实现。借助JSP(Java Server Pages),JSF还可以支持不同的Facelets和XUL技术。

    GWT
    GWT(Google Web Toolki)是一个前端使用JavaScript,后端使用Java的AJAX框架,以Apache许可证2.0版本开放源码。

    GWT通过编译器将Java代码编译成JavaScript,可以让开发人员只使用Java就可以快速开发维护复杂但高性能的JavaScript,借此减轻开发人员负担。

    除了一些本地库之外,都可以用集成的GWT Ant将Java源码构建成JavaScript。GWT已经实现了大量代码跨平台复用,包括跨浏览器移植性、国际化、UI抽象化、书签、历史管理、远程程序调用和异步的代码。

    SpringBoot
    SpringBoot框架,被称作一栈式解决方案。比较轻量,也是当前微服务下的趋势;SpringBoot本身就是构建与Spring之上,各种思想和特性无需多说,去掉了Spring繁琐的配置,简化了原有Spring开发的流程,提供了各种实用的特性如metric,actuctor等等;

    最重要的是SpringBoot附带了整个SpringCloud生态。两个框架对你解决大、中,小项目都没任何问题。

    免费领取Java竞品面试题
    在这里插入图片描述

    展开全文
  • 常见MQ队列介绍

    千次阅读 2019-04-24 15:39:11
    所幸,RabbitMQ的社区十分活跃,可以解决开发过程遇到的bug,这点对于小型公司来说十分重要。不考虑rocketmq和kafka的原因是,一方面小型软件公司不如互联网公司,数据量没那么大,选消息中间件,应首选功能...
  • MQ常见问题

    2019-08-10 21:23:39
    当新增一个系统D时,需要在系统A新增调用代码,系统E去除时,也要在系统A删除调用接口代码。系统严重耦合。 系统A还需要考虑其他系统是否挂掉,重发消息等问题。 使用MQ的场景如下图: 系统A不需要考虑谁需要...
  • MQ(Message Queue)消息队列,是基础数据结构“先进先出”的一种数据机构。指把要传输的数据(消息)放在队列,用队列机制来实现消息传递——生产者产生消息并把消息放入队列,然后由消费者去处理。消费者可以...
  • Java面试题 MQ消息队列

    千次阅读 2019-07-17 22:09:13
    消息队列(Message Queue,简称MQ),从字面意思上看,本质是个队列,FIFO先入先出,只不过队列存放的内容是message而已。其主要用途:不同进程Process/线程Thread之间通信。 2:为什么会产生消息队列? 1)不同...
  • Java常用MQ的比较

    2020-01-14 16:33:43
    。有kafka作者自己写的书,网上资料也有一些 稍微长一点的文本 多。有一些不错的书,网上资料多 少。没有专门写rocketmq的书,网上的资料良莠不齐,官方文档很简洁,但是对技术细节没有过多的描述 开发语言 ...
  • 【面试】MQ常见面试问题

    千次阅读 2019-06-30 20:33:44
    现在java分布式项目,MQ基本都是必备的消息中间件。或许你曾接触过RabbitMQ, RocketMQ, Kafka, ActiveMQ。或许你只是对这些有所耳闻。今天,简单总结一下关于MQ在面试的一些问题。... 常见MQ对比
  • 常见主流MQ之间的对比

    千次阅读 2019-07-02 17:13:35
    今天梳理一下一些主流MQ的优缺点,我们用表格对比一下: 特性 ActiveMq RabbitMq RocketMQ Kafka 成熟度 成熟 成熟 比较成熟 成熟的日志领域 时效性 微秒级 毫秒级 毫秒级 社区活跃度 低 高 高 高 ...
  • JAVA开发技能要求:

    千次阅读 2018-10-26 16:37:27
    初级JAVA开发: 1.掌握HTML/CSS/JavaScript等WEB开发技术,深入了解WEB/AJAX的工作原理,有JQuery,AngularJS,Bootstrap等框架. 2.掌握数据库设计和开发知识,精通MySQL、Oracl等主流数据库 ,熟悉NoSQL(MongoDB, ...
  • MQ使用过程常见问题总结

    千次阅读 2019-08-22 15:02:00
    1、为什么要使用消息队列? 分析:一个用消息队列的人,不知道为啥用,有点尴尬。没有复习这点,很容易被问蒙,然后就开始... 系统间耦合性太强,如上图所示,系统A在代码直接调用系统B和系统C的代码,如果将来D...
  • MQ(Message Queue)是一个常用的消息中间件,在各种场景都能见到MQ的身影,其...这时我们就可以在系统加入MQ,系统接受用户请求之后,直接将请求发送给MQ,然后返回结果给用户,响应很快,之后的其他的系统再从M...
  • java开发要求

    千次阅读 2019-04-06 12:42:42
    Java开发工程师 1-1.5万/月 恒宝股份有限公司查看所有职位 申请职位 职位信息 岗位职责: 1、完成软件系统代码的实现,编写代码注释和开发文档; 2、根据设计文档或需求说明完成代码编写,调试,测试和维护;...
  • java面试---MQ

    千次阅读 2018-09-28 18:09:53
    consumer(消费者):使用队列Queue从Exchange获取消息的应用 Exchange(交换机):负责接收生产者的消息并把它们转到合适的队列 Queue(队列):一个存储exchange发来的消息的缓冲,并将消息主动发送给Consumer...
  • MQ_常见问题

    2020-06-01 13:16:52
    文章目录应用场景选型高可用RabbitMQ镜像集群模式Kafka重复消费接口幂等强校验弱校验消息丢失RabbitMQ生产者在消息传入过程数据丢失RabbitMQ消息丢失消费者消息丢失顺序消费问题解决消息堆积过期失效 应用场景 - ...
  • 之前的文章我们讲过“手写消息队列”,当时粗略的讲了 Java API 使用 Queue 实现自定义消息队列,以及使用 Delayed 实现延迟队列的示例;同时还讲了 RabbitMQ 的一些基础概念。本课时我们将会更加深入的讲解 ...
  • Java 开发日记高级~

    2021-01-31 20:30:59
     SpringBoot2入门,简介,优缺点,基础开发,特定:依赖配置|自动注入,常用注解学习! Spring Boot2 应用使用  SpringBoot集成MyBatis前后分离跨域,集成Redis,多线程操作,@Ehcache JVM缓存 LomBok插件使用...
  • mq 消息可靠性,幂等如何保证 分布式锁的实现方案比较,为什么选择 zookeeper, zookeeper 一致性协议原理 线程池参数,阻塞队列实现 一致性 Hash解决什么问题, 如何实现? 虚拟节点的作用? Java 锁的实现方式, 比较? AQS...
  • Java基础+操作系统+计算机网络+数据结构+算法+数据库+热门框架技术+分布式架构+服务器中间件+前沿技术分享
  • Java开发必会技能

    2018-08-21 07:27:43
    java开发必会技能   课程名称 课时 课程内容 Java基础 30 1、核心语法 (数据类型,变量,关键字,表达式,运算符,判断语句,循环语句,跳转语句,数组) 2、面向对象 (对象,类,类的...
  • java面试-消息队列(MQ)

    2020-03-14 12:00:31
    面试官问这个问题,期望的一个回答是说:你们公司有个什么业务场景,这个业务场景有什么技术挑战,如果不用MQ可能会很麻烦,但是用了MQ之后带来了很多的好处. 先说一下消息队列常见的使用场景,其实场景很多,但是比较核心...
  • MQ消息队列详解、四大MQ的优缺点分析

    万次阅读 多人点赞 2020-03-07 16:05:28
    MQ消息队列详解 近期有了想跳槽的打算,所以自己想巩固一下自己的技术,想了解一些面试比较容易加分的项,近期准备深入研究一下redis和mq这两样,这总体上都是为了解决服务器并发的原因,刚翻到了一篇有关于mq的,...
  • 下载 | 阿里Java开发手册嵩山版

    千次阅读 2020-08-04 12:37:42
    今早阿里云开发社区发布了嵩山版《Java开发手册》 那这次新版本的更新有哪些亮点呢?...本次开发手册新增的前后端规约旨在解决前后端工程师协作上的问题以及让大家规避工作中常见的、易于疏漏的错误,让.
  • IBMMQ Series常见命令

    2019-01-10 15:48:22
    随着计算机网络和分布式应用的不断发展,远程消息传递越来越成为应用系统不可缺少的组成部分。商业消息中间件的出现保证了消息传输的可靠性,高效率和安全性,同时也减少了系统的开发周期。目前应用最多的消息...
  • Java开发之rabbitMQ的使用

    千次阅读 2020-04-26 16:06:43
    一.消息中心简介 (一).应用场景 并发的业务:如抢购 耗时长的业务:如商城的订单生成 耦合度高的业务:如邮件,短信等提醒功能 (二)....MQ衡量的指标:服务性能,数据存储,集群架构 2.KafKa Kafka是由A...
  • MySQL数据库调优 定位慢查询得到生产环境那些sql语句响应慢,根据执行计划进行分析调优事物管理索引结构(B+树)平衡二叉树、B树、...Logstash与MQ实现ES和数据库保持同步区别 1.Logstash采用定时方式保持ES和数据库...
  • MQ

    2021-04-23 16:22:57
    MQ全称 Message Queue(消息队列),是在消息的传输过程保存消息的容器。多用于分布式系统之间进行通信。 2. MQ 的优劣 MQ 的优势 1. 应用解耦 降低工程间的强依赖程度,针对异构系统进行适配。在项目启动之初来...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 14,221
精华内容 5,688
关键字:

java开发中常见mq

java 订阅