知识星球推荐:码农会锁

编程开发类知识星球推荐:码农会锁

知识星球推荐:码农会锁

星球概况:

最有实战项目的技术星球,大厂T8架构师运营维护,陪伴式学习成长。可在公众号【bugstack虫洞栈】回复【星球】,获取专属优惠券。注意⚠️ IOS 苹果设备,需要通过扫码优惠券加入星球。

加入星球,你将获得:

1. 项目学习:Lottery 分布式抽奖秒杀项目【含上百个面试题】、Api网关-所有大厂都需要的项目、IM 通信系统 – Netty 实战应用、ChatGpt 开源项目辅导 + Gpt2 模型训练部署、SpringBoot Starter 中间件设计和开发

2. 手撕源码:手写Spring、手写Mybatis,从零手写源码级复杂项目,提升架构思维,锻炼编码能力。

3. 技术小册:IDEA Plugin开发手册、Java面经手册、字节码编程、程序员数学

4. 就业指导:可以在发送你的简历到我的邮箱(见使用介绍),提供简历批阅服务。同时提供相关就业辅导和未来发展指引。小傅哥13年毕业,15年进入会联网从初级工程师到高级开发一直走到T8架构师岗位。

小傅哥的知识星球满是技术交流,无灌水、无拼凑。加入星球的用户,记得添加小傅哥微信【fustack】备注【星球】,小傅哥会把你拉入专属的星球VIP交流群。

精选主题预览:

👀Mybatis打卡3:Mapper XML的解析和注册使用

🌈实现过程:

定义SqlSessionFactoryBuilder工厂建造者模式类,通过类加载器的方式读取我们编写的配置文件,让后利用XMLConfigBuilder对我们编写Xml文件进行解析,具体可以参考官网,比如:数据源,插件,别名,日志,mappers等等。

文件解析完毕后会存放到Configuration配置类中,这个配置类会被串联到整个Mybatis流程中,所有内容存放和读取都离不开这个类,这里我们…


🌏API网关打卡3:【通信组件】第3章

#1、学习目标:分治处理会话流程

#2、计划目标

① 将网络会话分为网络通信+网关会话,将映射调用RPC分为映射器+RPC调用

② 将工程分为绑定bind、映射mapping、会话session、网络socket四大部分

③ 整体结构类似ORM框架,调用RPC对应调用数据库,封装RPC请求的结果对应封装数据库操作的结果

④ 拆分之后,更方便做功能扩展,例如在网络层做鉴权、限流、熔断、鉴权等功能,在绑定层调其他类型的泛化服务,或者也可以对RPC做进一步的池化、扩展、管理

#3、项目更新

【网络】

① 在GatewaySocketServer#call中创建Netty服务

② 当有HTTP请求时,Netty服务端接收到,就在GatewayChannelInitializer#initChannel初始化管道,添加请求处理器

③ +抽象类(父类)BaseHandler:声明session抽象方法,这是自定义处理器的父类

④ +实现类(子类)GatewayServerHandler:实现session方法,这就是模板模式。本章通过会话工厂获取会话,并通过会话映射器,类似Mybatis中调用DAO接口

【会话】

① +DefaultGatewaySessionFactory:新增工厂,用于创建会话,这是工厂模式

② +DefaultGatewaySession:通过工厂实例化,用于获取映射器,并构建DUBBO服务,真正执行RPC的调用(这部分会再拆分为执行器)

③ Configuration:作为全局配置,保存了服务创建的基本缓存、HTTP请求的基本信息、映射器代理工厂等

【绑定&映射】

① 这部分就跟Mybatis类似,同样是使用工厂模式,在创建Configuration配置加载注册信息时,将uri以及对应的映射器代理工厂注入缓存,以便后续使用

② +MapperProxyFactory:映射器代理工厂,用于实例化映射器代理类,其实就是使用cglib创建RPC泛化调用服务的代理对象

③ +MapperProxy:实现intercept方法,调用映射器方法

④ +MapperMethod:使用switch,针对不同的HTTP请求类型,调用对应的session会话中的服务,这就类似Mybatis的执行器中的select、insert、update、delete

⑤ IGenericReference:类似于Mybatis中的DAO接口,MapperProxyFactory创建出的代理类的type,就是该接口类型

【映射】

① +HttpStatement:用于保存HTTP请求的RPC服务的基本信息

② +HttpCommandType:枚举定义HTTP的请求类型get、post、put、delete

#4、调用流程

① 实例化Configuration配置,加载应用配置、HTTP声明(目前是硬编码方式)

② 使用工厂创建Netty服务并启动服务

③ HTTP请求 -u003E 网关捕获 -u003E 初始化Netty服务端的处理器

④ 自定义的处理器开始处理HTTP请求

⑤ 获取会话session -u003E 获取uri对应的映射器工厂 -u003E 通过工厂创建RPC泛化调用代理对象(IGenericReference)

⑥ 执行代理对象的$invoke,就由MapperProxy#intercept代理执行 -u003E 由MapperMethod通过switch获取对应的HTTP请求类型

⑦根据请求类型,获取对应的会话session,由会话创建DUBBO服务,做真正的RPC调用

#5、备注

图一:开启Netty网络服务、初始化应用配置

图二:处理HTTP请求


Build Software. Fast. Cursor | Build Fast – 非常好用的代码开发工具软件;代码编写、单元测试、问题分析、对话问答等。免费、简单、好用。#💐软件分享

– Ctrlu002FCommand + K 描述你要做到事情,可以是各类代码编写

– Ctrlu002FCommand + …


#📨技术问答 有做过CICD流水线的大佬么?想了解一下阿里云效这种怎么实现的。有没有参照项目借鉴一下。

我能想到的就是通过mysql表设计,流水线、阶段、任务组、任务、配置表等,流水线创建以后,通过表…


问答

请问小傅哥,如果照着Java实现jvm的话,把这个写在项目经历上,面试官一般会怎么问啊?…


#🎙️自我介绍 大家好,我是sample,20年电子信息专业毕业,目前在杭州一家物流信息咨询公司做TMS系统。因为是B端的系统,中间面试过几次大厂的电商部门都失败告终。很渴望有一个热爱学习和钻研的团队,而不是为了完成工作。是偶然看到了小傅哥关于手写Spring的文章之后就收藏了站点,在其他视频平台也有关注小傅哥哈哈。

加…

© Copyright notes

Related posts

No comments

No comments...