Java,八股,cv,算法——双非研0四修之路day39

发布于:2025-08-29 ⋅ 阅读:(16) ⋅ 点赞:(0)

目录

昨日总结

今日计划

算法——二叉树的最近公共先祖

分布式组件

SpringCloud Alibaba-Nacos[作为注册中心]

Spring Cloud Gateway(API网关)

昨日八股答案 

今日八股

 ​编辑


昨日总结

  • 谷粒商城项目(分布式注册中心、配置中心nacos,API网关),了解前端知识(JS,vue)
  • cv(停滞中)
  • 小林coding--MySQL面试篇(3/7)
  • 代码随想录--二叉树的最近公共先祖

今日计划

  • 谷粒商城项目ing
  • cv(停滞中)
  • 小林coding--MySQL面试篇(4/7)
  • 代码随想录--

算法——二叉树的最近公共先祖

给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。

百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”

示例 :

输入:root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1
输出:3
解释:节点 5 和节点 1 的最近公共祖先是节点 3 。
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
        if(root == null) {
            return root;
        }
        if(root == p || root == q) {
            return root;
        }
        TreeNode left = lowestCommonAncestor(root.left,p,q);
        TreeNode right = lowestCommonAncestor(root.right,p,q);
        if(left != null && right != null)
            return root;
        if(left == null && right != null)
            return right;
        if(left != null && right == null)
            return left;
        if(left == null && right == null)
        return null;
        return null;
    }
}

分布式组件

SpringCloud Alibaba-Nacos[作为注册中心]

Nacos 是阿里巴巴开源的一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。他是使用 java 编写。需要依赖 java 环境

启动nacos服务

用命令行启动 startup.cmd -m standalone

哪个微服务需要在注册中心进行配置,就需要在yml文件中配置注册中心的地址

在启动类上配置@EnableDiscoveryClient注解就可以了。

测试feign进行服务之间的远程调用

Feign 使用三步

1、导包 openfeign

2、引入open-feign, 编写一个接口来进行远程调用服务,生命接口的每一个方法调用的远程服务的请求

@FeignClient("gulimall-coupon")
public interface CouponFeignService {
    @RequestMapping("/coupon/coupon/member/list")
    public R membercoupons();
}

3、开启@EnableFeignClients 功能

注意:Spring Cloud Nacos 2021 放弃Ribbon后 使用LoadBalancer + Nacos做负载均衡 实现同集群优先调用以及权重算法

java.lang.AbstractMethodError: org.springframework.cloud.netflix.ribbon.RibbonLoadBalancerClient.choose(Ljava/lang/String;Lorg/springframework/cloud/client/loadbalancer/Request;)Lorg/springframework/cloud/client/ServiceInstance;
	at org.springframework.cloud.openfeign.loadbalancer.FeignBlockingLoadBalancerClient.execute(FeignBlockingLoadBalancerClient.java:97) ~[spring-cloud-openfeign-core-3.1.5.jar:3.1.5]
	at feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:121) ~[feign-core-11.10.jar:na]
	at feign.SynchronousMethodHandler.invoke(SynchronousMethodHandler.java:91) ~[feign-core-11.10.jar:na]
	at feign.ReflectiveFeign$FeignInvocationHandler.invoke(ReflectiveFeign.java:100) ~[feign-core-11.10.jar:na]
	at com.sun.proxy.$Proxy85.membercoupons(Unknown Source) ~[na:na]
	at com.qdd.gulimall.member.controller.MemberController.test(MemberController.java:41) ~[classes/:na]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_281]
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_281]

在启用nacos前,要先排除ribbon的依赖,加入loadBalancer的依赖,如下

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>

Spring Cloud Gateway(API网关)

网关是一个核心的微服务架构模式,它作为所有客户端请求的统一入口,负责请求路由、组合和协议转换等关键功能。

当一个请求到达网关,网关先利用断言 判断是否符合某个路由的规则。如果符合规则,就会路由规则到指定地方,同时过程中要经过一系列过滤器进行过滤。

昨日八股答案 

  • 执行一条SQL请求的过程
  1. 客户端发送请求:SQL请求发送到数据库服务器
  2. 服务器接受请求:服务器在特定的端口监听客户端的链接请求
  3. 语法解析:解析器对SQL请求进行词法分析
  4. 语义分析:检查SQL语句设计的数据库对象是否存在,检查当前用户是否可以执行该SQL的权限
  5. 查询优化:选择成本最低的执行计划
  6. 执行计划执行:访问存储引擎(存储引擎负责数据的存储和检索,常见的InnoDB)
  7. 返回结果:数据处理完毕后,封装成结果集返回给用户
  8. 资源释放:释放锁和资源

  • mysql的引擎

InnoDB:是MySQL的默认存储引擎,具有ACID事务支持、行级锁、外检约束等特性。适用于高并发的读写操作,支持较好的数据完整性和并发控制

MyISAM:MySQL之前的默认存储引擎,具有较低的存储空间和内存消耗,适用于大量读操作的场景。但他不支持事务、行级锁和外键约束。

MySQL最终采用InnoDB的原因如下

  1. 提供了对事务的支持,可以进行ACID属性的操作。
  2. 采用了行级锁定的机制,提供更好的并发性能。InnoDB 最小的锁粒度是行锁,MyISAM 最小的锁粒度是表锁。一个更新语句会锁住整张表,导致其他查询和更新都会被阻塞,因此并发访问受限。
  3. InnoDB引擎通过redolog日志实现了崩溃恢复,通过日志文件进行恢复,保证数据的持久性和一致性。
  4. InnoDB 是聚簇索引,MyISAM 是非聚簇索引。聚簇索引的文件存放在主键索引的叶子节点上,因此 InnoDB 必须要有主键,通过主键索引效率很高。
  • 索引的理解

索引可以提高查询的效率:mysql索引的数据结构一般是B+树,可以快读定位到目标数据

  • MySQL聚簇索引和非聚簇索引的区别

数据存储:在聚簇索引中,数据行按照索引值的顺序存储,索引的叶子结点包含了实际的数据行。非聚簇索引的叶子结点不包含完整的数据行,而是包含指向数据行的指针或主键值。

索引与数据关系:聚簇索引查找数据时,可以直接从索引中获得数据行;非聚簇索引中找到对应的主键值,根据主键值回表查找实际的数据行

唯一性:聚簇索引通常是基于主键构建的,每个表只能有一个聚簇索引。一个表可以有多个非聚簇索引

效率:对于范围查询和排序查询,聚簇索引效率更高,避免了额外的寻址开销。非聚簇索引在使用覆盖索引进行查询时效率更高,它不需要读取完整的数据行。但是需要进行回表的操作。

今日八股

  • MysQL中的索引是怎么实现的
  • 自增id和UUID使用情况
  • B+树的特性是什么,与B树的区别
  • 联合索引的实现原理

 


网站公告

今日签到

点亮在社区的每一天
去签到