- 一个高性能、异步事件驱动的NIO框架,它提供了对TCP、UDP和文件传输的支持;
- 使用更高效的socket底层,对epoll空轮询引起的cpu占用飙升在内部进行了处理;
- 采用多种编码/解码支持,对TCP粘包/分包进行自动化处理;
- 可使用接受/处理线程池,提高连接效率;
- 使用单线程串行化的方式,高效的Reactor线程模型;
- 大量使用了volitale、线程安全类的使用、读写锁的使用。
4、TCP 粘包的解决方法?
答:(1)、消息定长;
(2)、包尾增加特殊字符分割;
(3)、将消息分为消息头和消息体。
5、谈谈为什么nio能够实现一个线程处理多个事务?
答:一个selector监听多个通道,nio处理的多个事件都在Selector上进行注册,当有读写或任何事件发生时,可以从
Selector中获得响应的Selectkey,同时从selectkey中可以找到发生的时间和该事件发生的具体的Channel,以获得客户
答:RabbitMQ是MQ产品的典型代表,是一种分布式应用程序的的通信方法,RabbitMQ是典型的消费-生产者模型,其系统最核心
(1)、Queue的三种形式:设置为持久化的队列,queue中的消息会在server本地硬盘存储一份,防止数据丢失;
设置为临时队列,queue中的数据在系统重启之后就会丢失;
置为自动删除的队列,当不存在用户连接到server,队列中的数据会被自动删除。
其中* 表是匹配一个任意词组,#表示匹配0个或多个词组。
答:(1)、P1生产消息,发送给服务器端的Exchange;
(3)、Queue1收到消息,将消息发送给订阅者C1;
(4)、C1收到消息,发送确认字符给队列确认收到消息;
(5)、Queue1收到确认字符,删除队列中缓存的此条消息。
3、RabbitMQ的应用场景有哪些?
答:异步处理、应用解耦、流量削峰。
4、请谈谈RabbitMQ在你项目中的使用?
答:在银行的跨行转账业务中,比如A账户向B账户转账,如果A账户扣款成功了,而由于故障B账户到款失败,如果不对A账户的操作
进行回滚,那就麻烦了,此外同一时间如果有大量的人转账汇款,如果采用同步通信,很可能造阻塞,这两种场景就非常适合RabbitMQ。
1、谈谈dubbo的工作原理?
答:Dubbo的架构由生产者、消费者、注册中心、监视器、以及服务器的运行容器组成;生产在启动时,向注册中心注册自己提供的服务;消费者启动时,向注册中心订阅自己所需的服务;注册中心返回提供者地址列表给消费者,如果有变更,注册中心将推送变更数据给消费者;消费者,从远程接口列表中,调用远程接口,dubbo会基于负载均衡算法,选一台提供者进行调用,如果调用失败则选择另一台;消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。
2、dubbo一般使用什么注册中心?还有别的选择吗?
3、测试和生产公用一套zookeeper,怎么保证消费不冲突?
答:我项目中测试和生产使用的是两套zookeeper,如果使用一套zookeeper,说白了就是需要限制访问的权限,可以通过dubbo提供的过滤器功能,
设置白名单实现,需要注意的是dubbo会通过setter方式来自动注入其他的bean,无需使用注解。
4、默认使用什么序列化框架,你知道的还有哪些?
答:如果不引入第三方jar包默认使用的是jdk自带的Object序列化,这种序列化的优点是java原生支持,不需要提供第三方的类库,使用比较简单。缺点:无法跨语言,字节数占用比较大,对于对象属性的变化比较敏感。除了原生的使用较多的是JacksonSerialize,该序列化工具需要依赖JackSon类库。
5、同一个服务多个注册的情况下可以直连某一个服务吗?
答:可以因为A接口配置点对点,不影响B接口从注册中心获取列表,在生产环境中只需要在<dubbo:reference>中配置url指向提供者,将绕过注册中心,多个地址用分号隔开。
6、dubbo集群容错怎么做?
答:dubbo集群容错默认情况下使用Failover模式,失败会自动切换,当出现失败,重试其它服务器,可以通过设retries来设置重试次数;Failfast模式,快速失败,只发起一次调用,失败立即报错,这种模式多用于增加记录;Failback模式,失败自动恢复,后台记录失败请求,定时重发,通常用于消息通知操作;Broadcast模式,广播调用所有提供者,逐个调用,任意一台报错则报错,这种模式常用于通知所有提供者更新缓存或日志等本地资源信息,使用非常方便。
1、常用的sql查询语句?