![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
提问
文章平均质量分 89
Men-DD
这个作者很懒,什么都没留下…
展开
-
分布式中间件提问
答:broker 是指一个或多个 erlang node 的逻辑分组,且 node 上运行着 RabbitMQ 应用程序。cluster 是在 broker 的基础之上,增加了 node 之间共享元数据的约束。答:在非 cluster 模式下,元数据主要分为 Queue 元数据(queue 名字和属性等)、Exchange 元数据(exchange 名字、类型和属性等)、Binding 元数据(存放路由关系的查找表)、Vhost 元数据(vhost 范围内针对前三者的名字空间约束和安全属性设置)。在原创 2022-07-10 00:54:51 · 369 阅读 · 0 评论 -
分布式框架(六):Zookeeper 提问
ZooKeeper 是一个开源的分布式应用程序协调服务,是 Google 的 Chubby 一个开源的实现Zookeeper 提供一个多层级的节点命名空间(节点称为 znode)。与文件系统不同的是,这些节点都可以设置 关联的数据,而文件系统中只有文件节点可以存放数据而目录节点不行Zookeeper 为了保证高吞吐和低延迟,在内存中维护了这个树状的目录结构,这种特性使得 Zookeeper 不能用于存放大量的数据,每个节点的存放数据上限为 1M1、PERSISTENT-持久化目录节点客户端与 zookee原创 2022-06-23 21:00:00 · 75 阅读 · 0 评论 -
分布式中间件(三):RocketMQ 提问
RocketMQ的事务消息机制就是为了保证零丢失来设计的,并且经过阿里的验证,肯定是非常靠谱的深入理解事务消息到底是不是靠谱以电商订单场景为例,来简单分析下事务消息机制如何保证消息不丢失。我们看下下面这个流程图:这个half消息是在订单系统进行下单操作前发送,并且对下游服务的消费者是不可见的。那这个消息的作用更多的体现在确认RocketMQ的服务是否正常。相当于嗅探下RocketMQ服务是否正常,并且通知RocketMQ,我马上就要发一个很重要的消息了,你做好准备如果没有half消息这个流程,那我们通常是原创 2022-06-15 11:38:13 · 276 阅读 · 0 评论 -
分布式中间件(二):Kafka 提问
如果消费这边配置的是,万一消费到数据还没处理完,就自动提交offset了,但是此时你consumer直接宕机了,未处理完的数据丢失了,下次也消费不到了。提示: 如果设置不自动提交,可能会出现重复消费问题发送消息如果配置了重试机制,比如网络抖动时间过长导致发送端发送超时,实际broker可能已经接收到消息,但发送方会重新发送消息如果消费这边配置的是自动提交,刚拉取了一批数据处理了一部分,但还没来得及提交,服务挂了,下次重启又会拉取相同的一批数据重复处理一般消费端都是要做如果发送端配置了重试机制,kafka不会原创 2022-06-10 17:31:00 · 103 阅读 · 0 评论 -
分布式中间件(四):RabbitMQ 提问
对于单个数据,可以使用生产者确认机制。通过多次确认的方式,保证生产者的消息能够正确的发送到RabbitMQ中。RabbitMQ的生产者确认机制分为同步确认和异步确认。同步确认主要是通过在生产者端使用指定一个等待确认的完成时间。异步确认机制则是通过在生产者端注入两个回调确认函数。第一个函数是在生产者发送消息时调用第二个函数则是生产者收到Broker的消息确认请求时调用两个函数需要通过sequenceNumber自行完成消息的前后对应。sequenceNumber的生成方式需要通过channel的序列原创 2022-06-07 14:05:19 · 107 阅读 · 0 评论 -
网络编程(五):提问
Netty是如何解决JDK中的Selector BUG的?Selector BUG:JDK NIO的BUG,例如臭名昭著的epoll bug,它会导致Selector空轮询,最终导致CPU 100%。官方声称在JDK1.6版本的update18修复了该问题,但是直到JDK1.7版本该问题仍旧存在,只不过该BUG发生概率降低了一些而已,它并没有被根本解决,甚至JDK1.8的131版本中依然存在。JDK官方认为这是Linux Kernel 版本的bug,可以参见:https://bugs.java.com原创 2022-05-06 10:51:27 · 169 阅读 · 0 评论 -
Redis深入理解十一 :Redis提问
版本一一、为什么使用缓存?1、高性能2、高可用二、什么是缓存穿透? 缓存击穿? 缓存雪崩? 怎么解决?缓存穿透: 缓存中查不到,数据库中也查不到。解决方案:1》 对参数进行合法性校验。2》将数据库中没有查到结果的数据也写入到缓存。这时要注意为了防止Redis被无用的Key占满,这一类缓存的有效期要设置得短一点。3》 引入布隆过滤器,在访问Redis之前判断数据是否存在。 要注意布隆过滤器存在一定的误判率,并且,布隆过滤器只能加数据不能减数据。缓存击穿: 缓存中没有,数据库中有。一般是原创 2022-04-18 14:48:23 · 140 阅读 · 0 评论 -
并发编程:并发(多线程)设计模式
并发(多线程)设计模式一、终止线程的设计模式 两阶段终止-interruptTwo-phase Termination(两阶段终止-interrupt)模式——优雅的终止线程使用场景思考:在一个线程 T1 中如何正确安全的终止线程 T2?错误思路1: 使用线程对象的 stop() 方法停止线程stop 方法会真正杀死线程,如果这时线程锁住了共享资源,那么当它被杀死后就再也没有机会释放锁, 其它线程将永远无法获取锁。错误思路2: 使用 System.exit(int) 方法停止线程目的原创 2022-02-25 16:46:21 · 400 阅读 · 0 评论 -
Redis深入理解一 :使用
basic_basic_key = "basic_key_test"设置: $cluster_redis.set(_basic_key, transaction.to_msgpack, ex: 7.days)获取: $cluster_redis.get(_basic_key)删除: $cluster_redis.del(_basic_key)删除: $cluster_redis.unlink(_basic_key)原子操作:$cluster_redis.setnx(_basic_key, tr原创 2022-02-24 13:07:57 · 269 阅读 · 0 评论 -
并发编程:提问(三)
并发编程面试题目1. 在 Java 中守护线程和用户线程的区别?Java 中的线程分为两种:守护线程(Daemon)和用户线程(User)。任何线程都可以设置为守护线程和用户线程,通过方法 Thread.setDaemon(boolon); true 则把该线程设置为守护线程,反之则为用户线程。Thread.setDaemon()必须在 Thread.start()之前调用,否则运行时会抛出异常。两者的区别:唯一的区别是判断虚拟机(JVM)何时离开,Daemon 是为其他线程提供服务,如果全部 的原创 2022-02-23 17:14:04 · 83 阅读 · 0 评论 -
并发编程:提问(二)
1)现在有 T1、T2、T3 三个线程,你怎样保证 T2 在 T1 执行完后执行,T3 在 T2 执行完后执 行?使用Thread.join()实现使用单线程线程池来实现 ExecutorService executor = Executors.newSingleThreadExecutor();使用volatile关键字修饰的信号量实现 volatile int ticket = 1; while (true) { if (ticket == name) {...... }}使用Lock和信号量原创 2022-02-22 16:25:47 · 78 阅读 · 0 评论 -
并发编程:提问(一)
一、JAVA如何开启线程? 怎么保证线程安全?线程和进程的区别:进程是操作系统进行资源分配的最小单元。线程是操作系统进行任务分配的最小单元,线程隶属于进程。如何开启线程?1、继承Thread类,重写run方法。 class MyThread extends Thread2、实现Runnable接口,实现run方法。 class MyRunnable implements Runnable3、实现Callable接口,实现call方法。通过FutureTask创建一个线程,获取到线程执行的返回值。原创 2022-02-21 16:50:30 · 71 阅读 · 0 评论 -
JVM:提问
一、说一说JVM的内存模型。运行时数据区二、JAVA类加载的全过程是怎样的? 什么是双亲委派机制? 有什么作用?JAVA的类加载器: AppClassloader -> ExtClassloader -> BootStrap Classloader每种类加载器都有他自己的加载目录。JAVA中的类加载器: AppClassLoader , ExtClassLoader -> URLClassLoader -> SecureClassLoader -> ClassLoad原创 2022-02-21 01:10:17 · 72 阅读 · 0 评论 -
Java基础: 提问
1.面向对象和面向过程的区别面向过程优点: 性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗 资源;比如单片机、嵌入式开发、Linux/Unix 等一般采用面向过程开发,性能是最重要的因素。缺点: 没有面向对象易维护、易复用、易扩展面向对象优点: 易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护缺点: 性能比面向过程低2. Java 语言有哪些特点简单易学;面向对象(封装,继承,多态);平台无关性( J原创 2022-02-19 18:47:46 · 131 阅读 · 0 评论 -
MySQL(八)提问
MySQL中有哪些存储引擎?Myisam和Innodb的区别是什么?请概述下数据库的范式设计数据库表设计时,字段你会如何选择?MySQL里记录货币用什么字段类型好?谈谈MySQL里的字符串类型VARCHAR(M)最多能存储的数据量?什么是虚拟生成列?请说下事务的基本特性事务并发可能引发什么问题?请描述下MySQL中InnoDB支持的四种事务隔离和区别MySQL有哪些索引类型?简单描述MySQL各个索引的区别MySQL的索引对数据库的性能有什么影响?为什么MySQL的索引要使用B+树原创 2022-02-14 14:44:20 · 70 阅读 · 0 评论 -
Spring(N)提问
Spring一、什么是Spring? 谈谈你对IOC和AOP的理解Spring: 是一个企业级java应用框架,他的作用主要是简化软件的开发以及配置过程,简化项目部署环境Spring的特点:Spring低侵入设计,对业务代码的污染非常低。Spring的DI机制将对象之间的关系交由框架处理,减少组件的耦合。Spring提供了AOP技术,支持将一些通用的功能进行集中式管理,从而提供更好的复用。Spring对于主流框架提供了非常好的支持。轻量级:Spring 在大小和透明性方面绝对属于轻量级的,原创 2022-02-18 11:13:12 · 129 阅读 · 0 评论 -
SpringMVC源码(四):提问
1、什么是 SpringMvc?SpringMvc 是 spring 的一个模块,基于 MVC 的一个框架,无需中间整合层来整合。2、Spring MVC 的优点:1)它是基于组件技术的.全部的应用对象,无论控制器和视图,还是业务对象之类的都是 java 组件.并且和 Spring 提供的其他基础结构紧密集成.2)不依赖于 Servlet API(目标虽是如此,但是在实现的时候确实是依赖于 Servlet 的)3)可以任意使用各种视图技术,而不仅仅局限于 JSP4)支持各种请求资源的映射策略5原创 2022-02-18 11:47:49 · 71 阅读 · 0 评论 -
Mybatis源码分析(七): 提问
1.什么是 MyBatis?MyBatis 是一个可以自定义 SQL、存储过程和高级映射的持久层框架。2.讲下 MyBatis 的缓存MyBatis 的缓存分为一级缓存和二级缓存,一级缓存放在 session 里面,默认就有, 二级缓存放在它的命名空间里,默认是不打开的,使用二级缓存属性类需要实现 Serializable 序列化接口(可用来保存对象的状态),可在它的映射文件中配置<cache/>3.Mybatis 是如何进行分页的? 分页插件的原理是什么?Mybatis 使用 R原创 2022-02-19 01:50:24 · 58 阅读 · 0 评论 -
Tomcat : 提问
1、Tomcat 的缺省端口是多少,怎么修改?找到 Tomcat 目录下的 conf 文件夹进入 conf 文件夹里面找到 server.xml 文件打开 server.xml 文件在 server.xml 文件里面找到下列信息<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" uriEncoding="utf-8"/>port="8080"改成你想要的端原创 2022-02-19 11:30:31 · 68 阅读 · 0 评论