目录
昨日总结
- 学习mysql进阶篇(完结),学习函数式编程(马上完结)
- cv(停滞中)
- 小林coding--Spring面试篇(7/7)
今日计划
- JVM底层原理学习,开始练手米粒商城项目,docker学习,学习函数式编程(完结)
- cv(停滞中)
- 小林coding--MySQL面试篇(1/7)
- 码随想录——二叉所搜树的最小绝对差
闭包
闭包是一种能够捕获其所在作用域中变量的函数。但是Java中的闭包有一些限制,特别是在捕获局部变量时,要求这些变量必须是final或实际上是final(effectively final)的,即它们在初始化后不再被修改。
但是在下面的例子中,有些不符合闭包的特性
函数对象(int y) -> x + y 与他的外部的变量x形成了闭包,在函数对象的逻辑部分用到了外部的变量,它就可以与外部变量形成闭包,但外部的变量唯一的限制是必须是final修饰的变量(要保证函数的不变性)
public class demo {
int b = 2;
static int a = 1;
// public demo(int b) {
// this.b = b;
// }
public void test () {
System.out.println(b + a);
}
//函数对象(int y) -> x + y 与他的外部的变量x形成了闭包,在函数对象的逻辑部分用到了外部的变量,它就可以与外部变量形成闭包,但外部的变量唯一的限制是必须是final修饰的变量(要保证函数的不变性)
public static void main(String[] args) {
int x = 10;
Student stu = new Student(20);
highOrder(y -> x + stu.d);
stu.d = 30;
highOrder(y -> x + stu.d);
}
static void highOrder(Lambda lambda) {
System.out.println(lambda.test(1));
}
@FunctionalInterface
interface Lambda {
int test(int y);
}
static class Student{
int d;
public Student(int d) {
this.d = d;
}
}
}
采用闭包设计的方案,是为了保证线程的安全,内存一致性,避免多个闭包同时修改同一变量导致数据不一致。
昨日八股答案
-
Mybatis运用了哪些常见的设计模式
建造者模式、工厂模式、单例模式、代理模式、适配器模式、迭代器模式等
- Spring Cloud与Spring boot的区别
Spring Boot用于构建单个Spring应用的框架
Spring Cloud用于构建分布式系统中的微服务的工具,同时提供了服务注册、负载均衡、网关等功能
- 负载均衡的算法
简单轮询:将请求按顺序分发给后端服务器上,不关心服务器得我性能、当前的负载情况
加权轮询:根据服务器自身的权重分配请求,让性能高的服务器处理更多的请求
简单随机:随机分配
加权随机:按权重随机分配
一致性哈希:根据请求的客户端ip或请求出参数计算哈希值,利用哈希值去映射到服务器上
最小活跃数:统计服务器的请求次数,将请求分发给活跃数最少得后台服务器
- 介绍一个服务熔断和服务降级
服务熔断:是应对微服务雪崩效用的一种保护机制。微服务之间的数据交互是通过远程调用来完成的,当微服务链之间进行多次调用请求无响应时,会发生服务崩溃的情况,导致雪崩效应。而服务熔断的作用就类似于保险丝,当服务出现不可用或响应超时情况,将会暂停对服务的调用。
服务降级:指当服务器压力剧增时,对一些服务进行策略处理的手段,从而释放服务器的资源。
服务器的资源是有限的,但请求时无线的。服务降级是从整个系统的负荷情况考虑,保证整个系统的稳定性和可用性。
今日八股
- 数据库三大范式
- MySQL的链表查询
- 如何避免重复插入数据
- char和varchar的区别