Java后端
·2025-06-01Day 1
✅ 今天做了:
面试鸭:
1.索引失效的场景?聚合索引不符合最左匹配原则;对所有使用了函数或表达式;使用like进行左或者左右模式查询;使用OR而只有一个索引(一个有索引一个没有);不同字段比较(比如id>age,两个字段不同);索引字段为字符串而查询时用数字(会调用CAST函数进行隐式转换,也算是使用了函数);
2.什么是索引下推?索引下推是一种减少回表查询的技术。发生在使用了二级索引,查询列包含非索引时。
索引下推就是将原来查询二级索引,获取主键id后,直接去聚集索引查询数据的流程,改为了先去二级索引查询数据,然后筛选出复合where的数据,然后再去聚集索引查询数据。在存储层过滤掉一部分数据,大大减少回表查询次数。
手写rpc框架第一节完成。
简易的rpc包括什么?
服务注册:创建一个本地map,存放接口名字以及接口实现类对象
web服务器:使用的Vert.x创建,先创建Vert.x对象,再设置监听端口,创建Http客户端,自定义端口处理请求方法
处理请求方法:类似一个请求拦截器,解析请求中的数据(调用函数时输入的参数),然后使用反射创建调用的接口对象,接口方法,然后invoke动态调用,并将返回结果序列化后返回
动态代理工厂:生成动态代理对象
invoke调用:当动态代理对象调用方法时,实际调用invoke方法,方法内部进行了序列化,并且根据调用的方法动态选择请求路由(需要配合服务注册和服务发现,暂时是写死的)。发送请求时,会触发请求拦截器,在请求拦截器内部解析数据,反射调用具体方法。并将结构序列化返回。调用成功,获取到序列化的结果数据,再反序列化返回给调用方。
消费者想要远程调用提供者,那提供者首先得暴露自己的方法吧?这里用Vert.x做为web服务器,监听接口,并创建了请求处理器,端口监听到请求后,做一些处理。光暴露还不行,还得让消费者知道你可以为它提供服务,所以要进行服务注册,将接口名字和实现类注册到一个全局的map。
消费者要调用提供者,需要知道提供者的请求接口,如果一个个去写,很麻烦,所以使用动态代理,生成一个代理接口对象,重写invoke方法,当代理对象调用方法时,会默认调用invoke方法。在invoke方法中,会解析调用的是哪一个服务的哪一个方法,然后通过服务发现(后期实现,目前直接写死),发现服务地址后,发送请求。发送请求,被请求拦截器拦截,根据请求信息解析出请求接口名字,方法名以及请求数据,通过本地的服务注册,实例化对应的接口对象,反射调用方法。将返回结果序列化后返回。
这样,消费者就可以获取提供者的服务了
3
0
分享
操作
评论
问答助学
相关内容
0个评论
全部评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
