后端大厂面试总结大全二

1、java虚拟机jvm的类加载机制以及内存模型

内存模型:

在这里插入图片描述

类加载的完整过程:
加载 --> 链接(验证 -> 准备 -> 解析)–> 初始化

加载阶段:
1.通过类的全限定类名将这个类的二进制字节流加载到方法区(类变量)。

链接阶段:
1.(验证)校验虚拟机字节流中包含信息是否符合当前虚拟机的要求。
2.(准备)为类变量设置默认初始值,final修饰的在编译时候就会分配内存,在准备阶段进行显式初始化,而实例变量被分配到java堆中。
3.(解析)将常量池内的符号引用转换为直接引用的过程;解析是在jvm执行初始化之后再执行。

初始化阶段:
1.进行类构造器方法的过程,jvm执行子类构造器,要先确保父类构造器已经执行完毕,jvm保障一个类的构造器在多线程的情况下被同步加锁;执行完毕后类的加载就完成了。

2、springcloud的五大核心组件

在这里插入图片描述

Eureka(类似zookeeper):
服务启动的时候,服务上的Eureka客户端会把自身注册到Eureka服务端,并且可以通过Eureka服务端知道其他注册的服务
Ribbon(负载均衡,默认轮询):
服务间发起请求的时候,服务消费者方基于Ribbon服务做到负载均衡,从服务提供者存储的多台机器中选择一台,如果一个服务只在一台机器上面,那就用不到Ribbon选择机器了,如果有多台机器,那就需要使用Ribbon选择之后再去使用
Feign(类似于dubbo;典型的rpc框架,不需要了解底层网络协议,就可以是实现远程调用):
Feign使用的时候会集成Ribbon,Ribbon去Eureka服务端中找到服务提供者的所在的服务器信息,然后根据随机策略选择一个,拼接Url地址后发起请求
Hystrix(熔断器进行服务降级):
发起的请求是通过Hystrix的线程池去访问服务,不同的服务通过不同的线程池,实现了不同的服务调度隔离,如果服务出现故障,通过服务熔断,避免服务雪崩的问题 ,并且通过服务降级,保证可以手动实现服务正常功能
Zuul(类似于nginx):
如果前端调用后台系统,统一走zull网关进入,通过zuul网关转发请求给对应的服务

3、乐观锁和悲观锁

一、悲观锁

顾名思义,就是对于数据的处理持悲观态度,总认为会发生并发冲突,获取和修改数据时,别人会修改数据。所以在整个数据处理过程中,需要将数据锁定。

悲观锁的实现,通常依靠数据库提供的锁机制实现,比如mysql的排他锁,select … for update来实现悲观锁。
在这里插入图片描述

将商品库存数量nums字段类型设为unsigned,保证在数据库层面不会发生负数的情况。

注意,使用悲观锁,需要关闭mysql的自动提交功能,将 set autocommit = 0;

注意,mysql中的行级锁是基于索引的,如果sql没有走索引,那将使用表级锁把整张表锁住。
在这里插入图片描述
在这里插入图片描述

乐观锁是基于程序实现的,所以不存在死锁的情况,适用于读多的应用场景。如果经常发生冲突,上层应用不断的让用户进行重新操作,这反而降低了性能,这种情况下悲观锁就比较适用。

4、集合以及迭代器的介绍

参考链接

迭代器的使用方法:
在这里插入图片描述

5、Nginx和Ribbon实现负载均衡的区别

1、Nginx是服务端的负载均衡,Ribbon是客户端的负载均衡

2、Nginx是集中式的负载均衡(根据路由来分发实现负载均衡),Ribbon是消费者内部线程实现的负载均衡(去服务列表拿客户端地址,在客户端之间实现调用)

6、tcp和udp的区别

在这里插入图片描述

6、springAop使用的场景

  • 事务(Spring中的事务机制使用的就是AOP);
  • 请求合法性,判别用户的请求是否合法,比如做移动端接口开发时,用户登录成功后返回客户端Token,每次请求都需要携带这个Token;
  • 权限,访问某个方法时,判别是否有相应的权限
  • 错误处理,使用AOP对方法使用统一的错误处理。

7、mysql数据的去重的几种方法

1、利用 distinct
对需要处理的字段进行去重

select distinct 字段名 from 表名

2、利用group by
select * from 表名 group by 字段名

SELECT * FROM `t_userinfo` GROUP BY AdminRole

SELECT DISTINCT(AdminRole) FROM `t_userinfo` 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bst@微胖子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值