面试
langzilige
java搬运工
展开
-
面试题:Zookeeper的一些常见面试题及答案
Leader节点负责处理客户端请求,并将更新操作广播给所有Follower节点,确保所有节点都有相同的数据副本。一个客户端创建一个临时节点,如果创建成功则说明该锁已经被该客户端获取,如果创建失败则说明该锁已经被其他客户端获取,该客户端需要等待。事务日志记录了所有的更新操作,可以用来恢复Zookeeper节点的状态和保证数据的一致性。当一个客户端需要向队列中添加数据时,它会创建一个顺序节点,并将数据写入该节点中。当另一个客户端需要从队列中取出数据时,它会获取当前队列中最小的节点,并从该节点中取出数据。原创 2023-04-14 11:10:16 · 501 阅读 · 1 评论 -
面试题:ES的面试题及答案
在搜索引擎领域,ES可以快速地检索海量数据,支持复杂的查询语句和聚合操作。此外,ES还提供了基于日志的复制机制,可以在多个节点之间复制数据,提供数据冗余和高可用性。答:ES的数据分片是通过将数据分成多个分片来实现的。答:ES的集群是由多个节点组成的,每个节点都是独立的进程。答:ES是Elasticsearch的缩写,是一款开源的分布式搜索引擎。它可以快速地存储、搜索和分析大量的数据,支持全文检索、结构化查询等多种查询方式。答:ES使用的是倒排索引的方式来存储数据。(2)sum聚合:用于计算指定字段的总和。原创 2023-04-13 10:42:44 · 4880 阅读 · 0 评论 -
面试题:Dubbo的一些常见面试题及答案
Dubbo框架通过服务注册、服务发现、负载均衡、远程调用、容错和安全等功能解决了分布式应用中的问题,如服务调用的复杂性、服务的可用性、服务的可靠性和服务的安全性等。Dubbo框架的负载均衡策略包括随机、轮询、最小连接数、一致性哈希、加权随机、加权轮询、平滑加权轮询和平滑加权一致性哈希等。Dubbo框架的核心组件包括配置中心、注册中心、服务提供者、服务消费者、RPC协议、负载均衡器、容错机制和监控中心等。Dubbo框架的容错机制包括失败自动恢复、快速失败、失败重试、失败转移、自动降级和Mock服务等。原创 2023-04-12 16:27:39 · 619 阅读 · 0 评论 -
Redis-学习之字典类型
redis字典原创 2022-10-31 22:50:51 · 228 阅读 · 0 评论 -
Redis-学习之-数据结构-List
redis-list数据结构学习原创 2022-10-26 21:10:38 · 567 阅读 · 0 评论 -
【InnoDB 存储引擎-索引学习】
InnoDB索引介绍原创 2022-08-27 20:22:41 · 584 阅读 · 0 评论 -
【ArrayList的最大size为啥是integer最大值减8】
数组在java里是一种特殊类型,既不是基本数据类型也不是引用数据类型。有别于普通的“类的实例”对象,java里数组不是类,所以也就没有对应的class文件,数组类型是由jvm从元素类型合成出来的;在jvm中获取数组的长度是用arraylength这个专门的字节码指令的;在数组的对象头里有一个_length字段,记录数组长度,只需要去读_length字段就可以了。所以ArrayList中定义的最大长度为Integer最大值减8,这个8就是就是存了数组_length字段。...原创 2022-05-12 10:23:17 · 521 阅读 · 0 评论 -
谈谈你对jstat命令使用
jstat(JVM Statistics Monitoring Tool)是用于监视虚拟机各种运行状态信息的命令行工具。它可以显示本地或者远程虚拟机进程中的类加载、内存、垃圾收集、即时编译等运行时数据,在没有GUI图形界面、只提供了纯文本控制台环境的服务器上,它将是运行期定位虚拟机性能问题的常用工具。jstat命令格式为:jstat [ option vmid [interval[slms][count]]]参数interval和count代表查询间隔和次数,如果省略这2个参数,说明只查询一次。假设需原创 2022-05-04 18:08:15 · 807 阅读 · 0 评论 -
【轻量级锁的加锁和解锁过程】
轻量级锁加锁• 线程在执行同步块之前, JVM会先在当前线程的栈桢中创建用于存储锁记录的空间, 并 将对象头中的Mark Word复制到锁记录空间中中, 官方称为Displaced Mark Word;• 然后线程尝试使用 CAS将对象头中的Mark Word替换为指向锁记录的指针。• 如果成功, 当前线程获得锁, 如果失败, 表示其他线程竞争锁, 当前线程便尝试使 用自旋来获取锁。轻量级解锁 会使用原子的CAS操作将Displaced Mark Word替换回到对象头, 如果成 功, 则表示没 有原创 2022-04-23 17:29:11 · 262 阅读 · 0 评论 -
【CPU用户状态和内核状态简介】
CPU 的两种工作状态 :内核态 (管态) 和用户态 ( 目态) 。内核态 :系统中既有操作系统的程序, 也有普通用户程序。 为了安全性和稳定性, 操作系统的程序不能随便访问, 这就是内核态。 即需要执行操作系统的程序就必须转换到内核态才能执行!内核态可以使用计算机所有的硬件资源! 用户态 :不能直接使用系统资源, 也不能改变 CPU 的工作状态, 并且只能访问这个用户程序自己的存储空间!当一个进程在执行用户自己的代码时处于用户运行态 (用户态) , 此时特权级最低, 为 3 级, 是普通的用原创 2022-04-18 23:22:08 · 1054 阅读 · 0 评论 -
【@ResponseBody注解如何将对象转换为json返回的】
如果我们在controller的方法上加上@ResponseBody注解即可将我们要返回的结果转为json返回给前端,那么Spring MVC是如何做到的呢?在进入控制器方法前,当遇到标注的@ResponseBody后,处理器就会记录这个方法的响应类型为JSON数据集。当执行完控制器返回后,处理器会启用结果解析器(ResultResolver)去解析这个结果,它会去轮询注册给Spring MVC的HttpMessageConverter接口的实现类。因为MappingJackson2HttpMessageC原创 2022-04-14 20:36:07 · 2943 阅读 · 0 评论 -
【volatile 是如何保证可见性的呢?】
volatile 是如何保证可见性的多线程如:volatile instance = new instance();示例代码中, instance 被volatile修饰。 上边的new操作, 转化成汇编代码如下:as10x.…;lock…有volatile变量修饰的共享变量进行写操作的时候会多出第二行Lock汇编代码, Lock前缀的指令在多核 处理器下会引发了两件事情:1) 将当前处理器缓存行的数据写回到系统内存。 (volatile写的内存语义)2) 这个写回内存的操作会使在其他CPU里原创 2022-04-13 22:34:01 · 197 阅读 · 0 评论 -
【什么是哈希, 什么是哈希冲突,怎么解决哈希冲突? 】
Hash, 一般翻译为“散列” , 散列值有直接音译为“哈希”的, 这就是把任意长度的输入通过散列 算法, 变换成固定长度的输出, 该输出就是散列值(哈希值) ;这种转换是一种压缩映射, 也就是, 散列值的空间通常远小于输入的空间, 不同的输入可能会散列成相同的输出, 所 以不可能从散列值来唯一的确定输入值。 概括的说就是一种将任意长度的消息压缩到某一 固定长度的消息摘要的函数。哈希冲突: 所有散列函数都有如下一个基本特性: 根据同一散列函数计算出的散列值如果不同,那么 输入值肯定也不同。但是,根据同原创 2022-04-12 23:06:23 · 291 阅读 · 0 评论 -
Java中如何正确停止一个线程
这个问题在面试过程中或者是实际开发中可能都会遇到,那么我们怎么正确停止一个线程呢?首先说说stop命令,不是说它的好,而是不能使用stop,stop不安全,导致程序异常不安全的,执行时会导致对象被破坏。所以这个方法被弃用了。你应该中断一个线程而不是停止他可以使用的中断线程方法,我们应该保证线程被执行完再中断,其源码中也有注释说明,调用stop()终止一个线程会释放它已经锁定的所有监视器(这将导致沿堆栈向上传播为检查的ThreadDeath异常被抛出),若此时之前受这些被释放的监视器保护的对象存在不一致原创 2022-04-11 23:31:01 · 1202 阅读 · 0 评论 -
【线程中的 join方法和yeild方法区别】
说说 在项目实践中经常会遇到一个场景, 就是需 要等待某几件事情完成后才能继续往下执 行, 比如多个线程加载资源, 需要等待多 个线程全部加载完毕再汇总处理,或者顺序执行某些线程。1Thread 类中有一个join 方法就可以做这个事情, j oin方法是Thread 类直接提供的。join 是无 参且返回值为void 的方法。2 Thread 类中有一个静态的yield 方法, 当一个线程调用yield 方法时, 实际就是在暗示线程调度器当前 线程请求让出自己的CPU 使用。 我们知道操作系统是为每原创 2022-04-11 22:22:40 · 835 阅读 · 0 评论 -
阻塞队列实现原理
1.阻塞队列实现原理阻塞队列与普通队列的区别在于,阻塞队列提供了可阻塞的put和take方法。如果队列是空的,消费者使用take方法从队列中获取数据就会被阻塞,直到队列有数据可用;当队列是满的,生产者使用put方法向队列里添加数据就会被阻塞,直到队列中数据被消费有空闲位置可用2.JUC提供了7种适合与不同应用场景的阻塞队列。1)ArrayBlockingQueue:基于数组实现的有界阻塞队列。2)LinkedBlockingQueue:基于链表实现的有界阻塞队列。3)PriorityBlocki原创 2022-04-10 15:52:36 · 2958 阅读 · 0 评论 -
ConcurrentHashMap的putvalue流程和删除流程图
上流程图删除remove方法流程图原创 2022-04-10 15:06:57 · 208 阅读 · 0 评论 -
【什么是MySQL中的聚集索引】
聚集索引 定义I nnoDB存储引擎表是索引组织表, 即表中数据按照主键顺序存放。而 聚集索引 (clustered i ndex) 就是 按照 每 张 表的主键 构造一棵 B+树 , 同时叶子节点中存放的即为整张表的行记录数据, 也将聚集索引的叶子节点称为 数据页。每个数据页都通过一个双向链表来进行链接。由于实际的数据页只能按照一棵B+树进行排序, 因此 每张表 只能拥有 一个聚集索引 。 在多数情况下, 查询优 化器倾向于采用聚集索引。因为聚集索引能够在B+树索引的叶子节点上直接找到数据。此外原创 2022-04-05 10:29:57 · 2568 阅读 · 0 评论 -
AQS同步队列实现
Abstract-QueuedSynchronizer是一个抽象同步类,简称AQS。它是实现JUC中绝大部分同步工具的核心组件,都是基于AQS构建的,我们熟知的lock,底层都是通过aqs来实现的AQS提供了一套通用的机制来管理同步状态、阻塞/唤醒线程、管理等待队列等#AQS实现原理AQS维护同步队列,内部使用一个FIFO的双向链表,管理线程同步时的所有被阻塞线程。双向链表这种数据结构,它的每个数据节点中都有两个指针,分别指向直接后继节点和直接前驱节点。所以,从双向链表中的任意一个节点开始,都可以很原创 2022-04-05 10:12:52 · 498 阅读 · 0 评论 -
CounDownLatch介绍
这里写自定义目录标题CounDownLatchCounDownLatch1简介countDownLatch是在java1.5被引入,跟它一起被引入的工具类还有CyclicBarrier、Semaphore、concurrentHashMap和BlockingQueue2.CounDownLatch具体是干什么用的,有什么ApicountDownLatch这个类使一个线程等待其他线程各自执行完毕后再执行。是通过维护一个计数器来实现的,计数器的初始值是线程的数量。每当一个线程执行完毕后,计数器原创 2020-10-17 17:42:18 · 463 阅读 · 0 评论 -
java面试题收集及答案
1基础篇原创 2020-07-28 16:49:09 · 225 阅读 · 0 评论