提交 e9c62cae 编写于 作者: 小傅哥's avatar 小傅哥

Update README.md

上级 20b35b37
......@@ -63,3 +63,45 @@
3. 关于全链路监控的学习,可以参考以下内容:
3.1 pinpoint:https://github.com/pinpoint-apm/pinpoint
3.2 bee-apm:https://github.com/itstack-org/bee-apm
---
傅哥 您好 想问一下MESA管程模型设计成两个队列的用意是什么 如果只有一个入口队列不行吗?这个模型套在AQS上好像也一样。AQS也是两个队列 同步队列还是可以理解的 但是AQS多设计一个等待队列的意义是什么也不太懂
AQS:
* +------+ prev +-----+ +-----+
* head | | <---- | | <---- | | tail
* +------+ +-----+ +-----+
1. AbstractQueuedSynchronizer 从名字上就可看出本质是一个队列(Queue),其内部维护着 FIFO 的双向队列,也就是变体 CLH 队列的实现。
2. 所有的 Lock 都是基于 AQS 来实现了。AQS 和 Condition 各自维护了不同的队列,在使用 lock 和 conditio n的时候,其实就是两个队列的互相移动。那么你说的两个队列,只的是 Condition 队列吗?
管程(新了解内容,以前没注意过):
1. 管程就是指管理共享变量,以及对共享变量的相关操作。具体到 Java 语言中,管程就是管理类的成员变量和方法,让这个类是线程安全的。管程的发展史中,先后出现过三种管程模型,Hasen 模型、Hoare 模型和 MESA 模型,Java 使用的是 MESA 模型。
2. 使用管程模型主要是解决并发编程中的两个核心问题,互斥和同步。互斥是指同一时刻只允许一个线程访问共享资源,同步则是指线程之间如何通信、写作。
3. 解决互斥:将共享变量及对共享变量的操作统一封装起来
4. 解决同步:管程模型与上厕所排队的流程类似,管程入口处有一个等待队列。当多个线程试图进入管程内部的时候,只允许一个线程进入,其他线程在等待队列中等待。就和上厕所的时候排队一样。
综上:一般此类实现除了消费队列,还需有等待队列,以便于实现 Lock 相关内容。推荐阅读:《Java并发编程实践》 不确定以上是否为你需要的,可以回复讨论。
---
微服务应用之间调用接口,如何控制权限?
1. 通过在微服务 RPC 接口或者网关层接口,配置权限校验组件,这类组件一般是自研的。通过校验组件设置接口调用权限码,调用时需要传一个固定的分配值。
2. 指定服务器名称、服务器IP,进行调用,非此信息以外的服务不能被链接调用。
3. 通过开发接口间非对称加密传输安全校验的,一般用在双方为安全级别较高的接口调用上。
4. 接口自由度较高的申请获取字段查询,申请时候会分配一个有效签约期的授权码,拿到授权码后,可以调用指定接口。
---
小傅哥,这是我按你昨天说的整理的目前项目的技术栈和想要学的技术栈。期待你的建议。
从目前你的技术使用上来看,其实广度是有的,只是缺少一些深度的学习和使用。建议:
第一阶段:学习下数据结构、算法逻辑(仅Jdk自身的即可,HashMap、ArrayList、AQS等来夯实java能力)、设计模式,这些技术是后续的学习其他技术的基础。
第二阶段:学习 MyBatis 源码,至少要能搞懂“为什么,不写具体的DAO实现类,就能通过配置文件或者注解执行对数据库的增删改查操作”,这个知识会让你把Spring常用接口和类串联起来,也可以把代理、反射、解析xml、连接池使用上。
第三阶段:学习 Spring 源码,学习完成后尝试结合 Spring 写一些中间件,比如数据库路由组件、ES查询引擎组件,这些在我写的《SpringBoot中间件设计和开发》中都有例子。
第四阶段:补充对 MQ、SpringCloud、ES 等框架类的深入学习,要学习它的设计架构、核心源码、技术目的、使用场景。
第五阶段:完成较难度项目的开发,比如实现一个分布式架构下的活动抽奖系统,如何设计其中的秒杀、抽奖算法、奖品发放,这个项目可以模拟小程序中一些抽奖的设计去实现。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册