最后
由于篇幅有限,这里就不一一罗列了,20道常见面试题(含答案)+21条MySQL性能调优经验小编已整理成Word文档或PDF文档
还有更多面试复习笔记分享如下
eureka使用:
添加依赖->增加yml配置->主启动类增加eureka注解(eureka服务器EnableEurekaServer,eureka服务EnableEurekaClient)
eureka集群:
负载均衡/服务调用
以ribbon为例,ribbon为负载均衡组件,跟nginx不同,nginx运行在服务端,将所有请求集中起来进行负载均衡;ribbon运行在消费端,算法和nginx相似但更强大,除了有nginx的轮询、加权轮询(10轮若还没结果就返回null),还支持随机策略、重试策略,默认轮询;ribbon只能做负载均衡,不能服务调用(依然得用restTemplate,先new restTemplate对象,调用postForObject方法传入请求url、入参、返回结果类型.class,postForObject只需要传入请求url+入参,和返回结果),显然ribbon太麻烦,所以有了feign和openFeign(在feign基础上增加对springMVC注解的支持),用@FeignClient 注解服务提供者的名称,在controller层即可像调用service一样调用服务;
ribbon:把注册中心的服务列表缓存到本地,discoveryClient.getInstances(“CLOUD-PAYMENT-SERVICE”);
ribbon不需要额外添加依赖也可以使用,因为eureka和ribbon有一腿,eureka客户端依赖自带了ribbon的引用,ribbon的负载均衡算法有好几种,最常用的是轮询,具体算法实现就是
当前请求次数%服务端对应服务列表数量
@Component
public class MyLB implements LoadBalancer {
private AtomicInteger atomicInteger = new AtomicInteger(0);
//坐标
private final int getAndIncrement(){
int current;
int next;
do {
current = this.atomicInteger.get();
next = current >= 2147483647 ? 0 : current + 1;
}while (!this.atomicInteger.compareAndSet(current,next)); //第一个参数是期望值,第二个参数是修改值是
System.out.println("*******第几次访问,次数next: "+next);
return next;
}
@Override
public ServiceInstance instances(List serviceInstances) { //得到机器的列表
int index = getAndIncrement() % serviceInstances.size(); //得到服务器的下标位置
return serviceInstances.get(index);
}
}
openFeign有个超时访问时间,需要在yml文件里面配置,默认为一秒,如果消费者端一秒内没得到服务提供者的响应,直接返回大白页(服务超时)
openFeign还可以做日志打印,需要新建一个类,用openFeign的logger
服务熔断/降级
比如A服务需要调用B服务,B又需要调用C,如果C在某一时刻崩了,所有请求都怼在C这儿阻塞着,B拿不到返回值,就有可能一直自旋或轮询反复请求,B也会崩,以此类推A也会崩,阻塞线程多了,服务器资源被占用完了整个系统就崩了,为了避免这种服务雪崩,就有了Hystrix,它可以做服务熔断或降级,如果某个时间段内,某请求的失败率达到某个阈值,Hystrix就会切断这种请求,直接给用户返回失败(熔断)或者友好提示(降级,通过@HystrixCommand注解指定降级服务名,如下图);
我的面试宝典:一线互联网大厂Java核心面试题库
以下是我个人的一些做法,希望可以给各位提供一些帮助:
整理了很长一段时间,拿来复习面试刷题非常合适,其中包括了Java基础、异常、集合、并发编程、JVM、Spring全家桶、MyBatis、Redis、数据库、中间件MQ、Dubbo、Linux、Tomcat、ZooKeeper、Netty等等,且还会持续的更新…可star一下!
283页的Java进阶核心pdf文档
Java部分:Java基础,集合,并发,多线程,JVM,设计模式
数据结构算法:Java算法,数据结构
开源框架部分:Spring,MyBatis,MVC,netty,tomcat
分布式部分:架构设计,Redis缓存,Zookeeper,kafka,RabbitMQ,负载均衡等
微服务部分:SpringBoot,SpringCloud,Dubbo,Docker
还有源码相关的阅读学习
bs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)收录**