前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java每日十题——日积月累更能事半功倍

Java每日十题——日积月累更能事半功倍

作者头像
慕容千语
发布2020-09-07 15:22:51
5190
发布2020-09-07 15:22:51
举报

1、Redis单线程为什么这么快?

(1)纯内存操作 (2)单线程操作,避免了频繁的上下文切换 (3)采用了非阻塞I/O多路复用机制 (4)RESP协议简

2、SpringCloud断路器的作用

参考答案:当一个服务调用另一个服务由于网络原因或者自身原因出现问题时 ,调用者就会等待被调者的响应, 当更多的服务请求到这些资源时,导致更多的请求等待,这样就会发生连锁效应,断路器就是解决这一问题的。 断路器有完全打开状态: 一定时间内,达到一定的次数无法调用,并且多次检测没有恢复的迹象,断路器完全打开,那么下次的请求不会请求到该服务。 半开: 短时间内有回复迹象,断路器会将部分请求发送给服务,当能正常调用时,断路器关闭。 关闭: 当服务一直处于正常状态,能正常调用,断路器关闭。

3、什么是Tomcat的Valve?

在一个大的组件中直接处理这些繁杂的逻辑处理,使用管道(pipeline)可以把把多个对象连接起来,而Valve(阀门)整体看起来就像若干个阀门嵌套在管道中,而处理逻辑放在阀门上。 管道(Pipeline)就像一个工厂中的生产线,负责调配工人(valve)的位置,valve则是生产线上负责不同操作的工人。

4、什么是缓存穿透?如何解决?

参考答案:缓存穿透是指用户查询数据,在数据库没有,自然在缓存中也不会有。这样就导致用户查询的时候,在缓存中找不到,每次都要去数据库再查询一遍,然后返回空(相当于进行了两次无用的查询)。这样请求就绕过缓存直接查数据库,这也是经常提的缓存命中率问题。 解决办法; 最常见的则是采用布隆过滤器,将所有可能存在的数据哈希到一个足够大的bitmap中,一个一定不存在的数据会被这个bitmap拦截掉,从而避免了对底层存储系统的查询压力。

5、 什么是缓存雪崩?如何解决?

缓存雪崩我们可以简单的理解为:由于原有缓存失效,新缓存未到期间 (例如:我们设置缓存时采用了相同的过期时间,在同一时刻出现大面积的缓存过期),所有原本应该访问缓存的请求都去查询数据库了,而对数据库CPU和内存造成巨大压力,严重的会造成数据库宕机。从而形成一系列连锁反应,造成整个系统崩溃。 缓存雪崩一般使用加锁( 最多的解决方案)来保证不会有大量的线程对数据库一次性进行读写,从而避免失效时大量的并发请求落到底层存储系统上。还有一个简单方案就时讲缓存失效时间分散开。

6、当出现Hash冲突时,Jdk时如何处理的?

相同的数据通过hash函数得到相同的key值。这时候,就产生了hash冲突。解决hash冲突的方式有两种。一种是挂链式,也叫拉链法,在产生冲突的hash地址指向一个链表,将具有相同的key值的数据存放到链表中。。

7、HashSet和HashMap的区别是什么?JDK是如何实现HashSet的呢?

参考答案:HashMap实现了Map接口 HashSet实现了Set接口 HashMap储存键值对 HashSet仅仅存储对象 使用put()方法将元素放入map中 使用add()方法将元素放入set中 HashSet内部就是使用HashMap实现,只不过HashSet里面的HashMap所有的value都是同一个Object而已

8、在java中守护线程和用户线程的区别?(并发面试题)

参考答案:java中的线程分为两种:守护线程(Daemon)和用户线程(User)。 任何线程都可以设置为守护线程和用户线程,通过方法Thread.setDaemon(bool on);true则把该线程设置为守护线程,反之则为用户线程。Thread.setDaemon()必须在Thread.start()之前调用,否则运行时会抛出异常。 两者的区别: 唯一的区别是判断虚拟机(JVM)何时离开,Daemon是为其他线程提供服务,如果全部的User Thread已经结束,Daemon 没有可服务的线程,JVM关闭。 扩展:Thread Dump打印出来的线程信息,含有daemon字样的线程即为守护进程

9、死锁与活锁的区别,死锁与饥饿的区别?

死锁:是指两个或两个以上的进程(或线程)在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。 产生死锁的必要条件: 互斥条件:所谓互斥就是进程在某一时间内独占资源。 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。 不剥夺条件:进程已获得资源,在末使用完之前,不能强行剥夺。 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。 活锁:任务或者执行者没有被阻塞,由于某些条件没有满足,导致一直重复尝试,失败,尝试,失败。 活锁和死锁的区别在于,处于活锁的实体是在不断的改变状态,所谓的“活”, 而处于死锁的实体表现为等待;活锁有可能自行解开,死锁则不能。 饥饿:一个或者多个线程因为种种原因无法获得所需要的资源,导致一直无法执行的状态。

10、InnoDB引擎的主键索引是用什么数据结构存储的?普通索引又是用什么结构存储的?

答案解析: InnoDB使用B+Tree的方式存储索引。Innodb的一个表可能包含多个索引,每个索引都使用B+树来存储。而索引包括聚集索引(clustered index )和非聚簇索引(secondary index),聚集索引使用表的主键作为索引键,叶子节点包含表的所有字段。二级索引只包含索引键和聚集索引键(主键)的内容,不包括其他字段。

11、B+tree如何进行优化?

创建索引的时候尽量使用唯一性大的列来创建索引,由于使用b+tree做为索引,以innodb为例,一个树节点的大小由“innodb_page_size”,为了减少树的高度,同时让一个节点能存放更多的值,索引列尽量在整数类型上创建,如果必须使用字符类型,也应该使用长度较少的字符类型。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-08-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 慕容千语 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、Redis单线程为什么这么快?
  • 2、SpringCloud断路器的作用
  • 3、什么是Tomcat的Valve?
  • 4、什么是缓存穿透?如何解决?
  • 5、 什么是缓存雪崩?如何解决?
  • 6、当出现Hash冲突时,Jdk时如何处理的?
  • 7、HashSet和HashMap的区别是什么?JDK是如何实现HashSet的呢?
  • 8、在java中守护线程和用户线程的区别?(并发面试题)
  • 9、死锁与活锁的区别,死锁与饥饿的区别?
  • 10、InnoDB引擎的主键索引是用什么数据结构存储的?普通索引又是用什么结构存储的?
  • 11、B+tree如何进行优化?
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档