0
点赞
收藏
分享

微信扫一扫

微服务部分面试问题(面试篇)

天使魔鬼 2024-08-07 阅读 24

面试常见:

Jvm,高并发,多线程,数据库,redis,框架

1.N I/O有什么核心组件

Java NIO 基本原理以及三大核心组件_java nio核心组件有哪些-CSDN博客

Buffer 缓冲  Channel  一对一 Channel 读取数据 

Selector对应线程池  (环形链表)

2. Select  Poll Epoll区别

用户空间(用户需要的数据)和内核()

select 交换两次

poll 优化大小限制

epoll 交互的次数  0拷贝 直接用户空间和用户空间

http://t.csdnimg.cn/L6jHm

3.Http和Https的区别

HTTP 与 HTTPS 的区别 | 菜鸟教程 (runoob.com)

http超文本传输协议

https超文本传输安全协议 比如银行和金融

http是一个简单的无状态的 https是通过加密的,安全性高

http是免费的

他俩传输协议和端口号不一样

https端口号443 redis端口6379  mysql端口3306  ssh端口21

缺点:

https握手 不完全安全 涉及CA(Certificate Authority,数字证书认证机构) 申请证书

4.Jvm的结构

http://t.csdnimg.cn/tEmGW

5.Java类加载的全过程

http://t.csdnimg.cn/foByX

一个类型从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期将会经历加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)和卸载(Unloading)七个阶段,其中验证、准备、解析三个部分统称为链接(Linking)。

6.(jvm)一个对象从加载到jvm开始到GC回收,经历的过程是什么

JVM基础 -> ⼀个对象从加载到JVM,再到被GC清除,都经历了什么过程?_普通对象到第一次gc经理什么-CSDN博客

总结

1.创建对象的时候,jvm在方法区寻找对象相关信息,然后创建对象

2.在堆里面创建对象,是半初始化状态

3.对象首先会分配在堆内存中新生代Eden

4.当创建对象的⽅法执⾏结束后,栈中的指针会先移除掉了,对象就没有GC Roots根节点的引用了

5.然后GC根据可达性分析法,判断对象是否可以被回收

6.最后GC线程调用合适的GC算法清理掉可回收的对象

7.怎样确定这个对象是否被回收

Java垃圾回收机制(如何判断一个对象是否该回收)_3.java垃圾收集机制,并描述垃圾收集器如何判断一个对象是否能被收集。-CSDN博客

1.引用计数法 

计数器为0,等于垃圾,被回收

给对象增加一个计数器,当有引用它时,计数器就加一,当引用失效时,计数器就减一;

2.根可达性分析法

Java则是用了这种方法来判断是否需要回收对象;

此算法的核心思想为 : 通过一系列称为"GC Roots"的对象作为起始点,从这些节点开始向下搜索,搜索走过的路径称之为"引用链",当一个对象到GC Roots没有任何的引用链相连时(从GC Roots到这个对象不可达)时,证明此对象是不可用的;

8.Jvm有哪些垃圾回收算法   

JVM的4种垃圾回收算法、垃圾回收机制与总结_jvm垃圾回收机制有几种-CSDN博客

1.标记清除算法

2.标记复制算法(拷贝算法)

3.标记整理算法

4.分代收集算法

5.增量收集算法

6.分区算法

9.什么是STW,我们能避免它吗?

不能避免,可以进行优化

STW,即Stop-The-World的缩写,指的是系统在执行特定操作时需暂停(停止)所有应用程序线程。

JVM的4种垃圾回收算法、垃圾回收机制与总结_jvm垃圾回收机制有几种-CSDN博客

JVM对垃圾回收站进行算法处理的时候,STW是把jvm内存冻结的一种状态,在这个状态下,java所有线程都是停止状态,除了GC。 

10.如何进行jvm调优,jvm的参数有哪些

http://t.csdnimg.cn/yPY36

Jvm调优,一中是标注指令,一种是非标准指令,还有不稳定参数。

标准指令是-开头 

非标准指令 -x 

9.MQ是什么?有什么作用

MQ是消息队列,先进去的先出去的数据结构,消息由生产者生产,排队,由消费者进行处理。

 作用:

1.异步,作用是提高系统的响应速度和吞吐量

2.解耦,减少服与服的耦合度,减少响应时间,提高性能稳定性和可扩展性

3.削峰,稳定系统对突发流量的处理

应用场景:电商,用户要求响应时间短的类型

10.如何进行MQ产品的选型

MQ选型:ActiveMQ、RocketMQ、RabbitMQ、Kafka对比_rocketmq和rabbitmq哪个用的多-CSDN博客

MQ目前的产品RocketMQ,RabbitMQ,Kafka,ActiveMQ

Kafka

优点 吞吐量大,性能大,集群高可用

缺点 会丢失数据,功能单一

使用场景 日志分析 大数据采集等

RabbitMQ

优点 消息可靠性高,功能全面 

缺点 吞吐量低 消息积累会严重影响性能 使用的是erlang语言(不好定制)

使用场景 小规模的场景

RocketMQ 

 优点 高吞吐 高性能 高可用 功能非常全面

 缺点 开源版不如商业版功能 官方文档和周边不够成熟

使用场景 都可以用

11.如何能保证消息不丢失

1.生产者发送消息不丢失

1.消息发送给与反馈

2.手动开启事物保证消息不丢失

3.Publisher Confirm 发布确认的方式

2.同步不丢失

1.同步会丢失,异步不会丢失,采用异步的方式

2.消息存盘,保存在磁盘上面,发布一条后,再删除

4.消费者不丢失,采用默认方式消费

5.手动提交

12.如何保证消息消费的幂等性

消息中间件(三)——如何保证消息幂等性_如何保证消息的幂等性-CSDN博客

1.消息给与唯一的标识

13.如何保证消息的顺序

 RabbitMQ如何保证消息的顺序性【重点】-CSDN博客

线程取模 

14.如何保证消息队列的高效读写

上图  用到了4次拷贝  提高效率 做到0拷贝

0拷贝不经过用户态 用户空间
MappedByteBuffer
FileChannel

mmap   

使用小文件操作 不超过2G

transfile

没有文件限制 

15.MQ如何保证分布事物的最终一致性

RocketMQ事务消息如何保证数据的最终一致性_rocketmq 一致性-CSDN博客

1.生产者保证100 的头列

2.消费者保证幂等性消费,不然会造成重复消费和多次消费

16.让你去设计MQ你会怎么去设计?

1.实现一个单机队列的数据结构,是高效的,可扩展的

2.把单机队列拓展成可分布式的  集群进行处理

3.定制的一个策略,根据主题进行消息定制 (根据主题发送消息策略)I/O 实现0拷贝

4.实现一些高效的读写

17.为什么使用缓存

缓存具有高性能, 高可用的特性 ,减少对数据库的直接访问,比如连接次数

18.缓存穿透,击穿,雪崩

面试redis(缓存)--01-CSDN博客

1.缓存穿透(恶意攻击,数据库没有值)

缓存,数据库都查询不到数据

解决方法

1.缓存空值

2.设置访问名单

3.采用布隆过滤器 (空间查询效率高)

4.进行实时监控

2.缓存击穿(数据库中有值)

给某一个key设置了过期时间,当key过期的时候,恰好这时间点对这个key有大量的并发请求过来,这些并发的请求可能会瞬间把DB压垮。

解决方案:

1.设置热点缓存永不过期

2.预设热门数据

3.设置实事监控

4.互斥锁

5.逻辑穿透

雪崩

缓存大量过期,导致请求直接访问数据库,导致雪崩

 解决方法

1.添加多级缓存

2.设置更新标识缓存

3.将缓存过期时间分散

4.锁,队列的机制

举报

相关推荐

0 条评论