Java学习资料(架构技术视频,面试,就业指导,java书籍,工具&软件等)
本帖最后由 java 于 2019-2-19 14:43 编辑Java学习资料(架构技术视频,面试,就业指导,java书籍,工具&软件等)
链接:https://pan.baidu.com/s/1y6giMKF-P83LpV5mW5yXPQ 密码:ej4o
Mic_20190116_分布式架构下的服务集群及负载均衡实战
链接:https://pan.baidu.com/s/1CmTk91rj6IeJEttaIEHNHw 提取码:1qhn
青山_20190117_分布式架构核心组件之消息队列
链接:https://pan.baidu.com/s/1Lq8DqyLu5PW0QnyOT6D_aQ
提取码:0vos
想进阿里P6?你必须掌握这些技能
链接:https://pan.baidu.com/s/1q1vvcsEJgDE7VR_yvHOsiw
提取码:bp6g
分库分表理论与实践
链接:https://pan.baidu.com/s/1gQ1fA4VcsVaIslMfEiF4GQ
提取码:3vl7
分布式事务的解决方案链接: https://pan.baidu.com/s/1IM_TxctJO_-UPlY37xb7fA
提取码: k3k4
分布式架构核心组件之消息队列
链接:https://pan.baidu.com/s/1Lq8DqyLu5PW0QnyOT6D_aQ
提取码:0vos
分布式架构下的服务集群及负载均衡实战
链接:https://pan.baidu.com/s/1CmTk91rj6IeJEttaIEHNHw
提取码:1qhn
手撕Spring,看设计模式是如何优雅落地到源码中的?
链接:https://pan.baidu.com/s/1-NeGWQEkW5qcrnW_EXak2Q
提取码:ovws
青山_20190123_分布式任务调度系统的实现
链接:https://pan.baidu.com/s/1mqh01rdyvWfpRQrcp3OnAQ 提取码: s3xm
程序猿,你为什么这么累?30岁不一定就是槛
链接:https://pan.baidu.com/s/16hMOyMKqN6eMkm--3aOP-Q 提取码: ve7g
Mic_20190126_zookeeper实战之服务动态上下线感知实战
链接:https://pan.baidu.com/s/18qx2nyoKH6BKLTwtzUE4yQ 提取码: 5agn
不会JVM的人还好意思过情人节?
链接:https://pan.baidu.com/s/1HU0QS4Al3diOvj81RKAQhg 提取码:nef7
分布式任务调度系统的实现
链接:https://pan.baidu.com/s/1MZZM3Rs3GsrXM5l-nYDWoQ 提取码:0hjw
亿级量数据库性能优化之分库分表
链接:https://pan.baidu.com/s/1WoMFzcz0WQke6oyvsZoJAA 提取码:bzca
不要 来了就抢占CPU创建线程,把socket放map中(登记),即jsk中的NIO,后续有IO操作时再分配线程 (即 connect变为Readabel/Writable)----> NIO(non-block) Selector 选择器
连接后要保存建立的Channel 通道 即 多路复用
流管道本身还是阻塞的
非阻塞表现在Selector
面试: BIO阻塞改成非阻塞 多线程 伪非阻塞
IO要实现非阻塞 要能够同时读写就好咯
用 Buffer 缓冲区,记录相关读写位置
NIO代码量大,麻烦
使用 Netty
原来NIO中的select方法是单线程的 accept 都是在main单线程中
在Netty中 select转移到线程池中的一个线程
Reactor Netty主从线程模型中
select也变成多线程了,那么select原来是阻塞的 现在 能同时处理多个客户端的连接请求
NIO是一个同步非阻塞的IO
Netty是 asynchronous
对NIO的封装即select改成多线程
Netty给你呈现的一个点 只需要关注Handler的编写就ok了
类似
SpringBoot SpringMVC前端控制器处理映射器视图解析器springmvc-servlet.xmlHandler 称作为 ControllerServlet
本帖最后由 java 于 2019-1-8 16:46 编辑
链接:https://pan.baidu.com/s/1BNqYrfa0BomN55VVWdvlmg
提取码:v55q
分布式任务调度系统的实现
Quartz运行原理
做什么事情(任务):Job JobDetail
任务以什么样的规律运行:Trigger触发器
谁来指挥:Scheduler 调度器API
对象怎么存储 JobStore RAM JDBC
任务执行状态 Listener
如何实现动态管理 db增删改查
怎么从界面上管理任务 Scheduler接口
非配置文件方式 任务怎么随Spring启动 实现CommandLineRunner接口 或 ApplicationRunner
Service 如何注入Quartz? JobFactory
Cron 表达式http://cron.qqe2.com/
MQ
基于事件
逐条处理
Cron表达式
对Quartz的优化和改造
layUI
为什么要集群
1.单点故障
2.实现负载均衡
集群面对的问题,协调
1.任务重复
2.任务没有任何一个节点执行
上面两个问题都能解决(集群管理器)
通信\共享数据
数据库
ZK(zookeeper)---Elastic-Job
Redis
集群的配置
org.quartz.jobStore.isClustered=true
集群实现原理(集群管理器)
锁
数据库 for update--------qrtz_locks表相应行被锁节点随机拿到这个锁(排他锁)
如果获取到锁的节点挂掉了,别的节点怎么知道?
这把锁会不会被释放
kill 进程
----------测试 会释放
euraka-server ?
quartz和xxl-job对比一下
Quartz的不足 (xxl-job Elastic-Job 基于Quartz,解决它的不足)
不支持任务分片策略 一个任务多个节点执行
没有可视化管理(操作 监控 日志 报表)
没有重试/恢复机制
http://www.xuxueli.com/xxl-job/#/《分布式任务调度平台XXL-JOB》
本帖最后由 java 于 2019-1-9 18:48 编辑
跨域单点登录原理分析及项目实战
Jack_(下午)20190109_跨域单点登录原理分析及项目实战
链接:https://pan.baidu.com/s/1eIqrV4VhoiZEhY7CWT5fqQ 提取码:1rb4
http无状态 没有记忆 自己记 引入 cookies session
即cookies.session内的信息是服务端反过来的标志,即为已经登录过的标志,下次再来时,才放行
第一次 发起请求 创建SessionId
返回sessionId
第二次 发起请求带上SessionId
...
SessionId根据不同的域名SessionId是不同的
一般 每台机器上部署的都是相同的完整服务 通过 nginx 进行负载均衡
微服务 把完整的服务分模块 如:登录模块(L) 浏览商品模块(B) 和 支付模块(P)
这样 B可以多部署一些, L和P小部署一些
这三个域名是不同的,但Session只有L模块有返回
如:
blog.csdn.com这里登录一次,下面两个都不用登录
tech.csdn.com
list.csdn.com
共享顶级域名
同属一个父域名,Session会被传过去,服务端,加如下代码
Cookie cookie;
cookie.path(/)
也有不是同一顶级域名的情况
user.com
order.com
两个只登录一次
引入一个
sso.com Single Sign On
跨域 实现免登录-->跨域单点登录
要不要登录 取决于有没有带session过来
没有session是都转到 sso.com
sso.com 创建session给浏览器,同时创建令牌 token="123456" 给user.com order.com
以后有token的都可以登录上面三个域名
发送到user.com的token再发送到sso.com对token进行校验
通过后返回user.com 并放行 并创建session返回给客户端
相关代码打一个jar包,直接使用,不用模块都写
如:
CAS+JWT实现
CAS提供一个服务端
CAS还提供客户端的jar包
CAS必须要https协议
shiro ? spring secret ?
禁用cookies ?
在head中添加参数能传来传去就行了
Spring framework是怎么来的?
Spring 之前
1.JSP + Servlet
2.Servlet + Struts
3.EJB
J2EE Struts + EJBvsSpring
JavaEE企业级应用 互联网架构应用 很重量级 很多坑
Spring 集成 消息中间件 RPC(kafka,activemq)
EJB组件 vs. Spring RPC service
SessionBean VS. RPC service
有状态的 Service
无状态的 Service 无状态的 Service
做架构或设计时 怎么转化为无状态的服务
状态在业务逻辑里 => 业务逻辑层 => 序列化到磁盘 Passivate => 激活Activate回来vs 状态持久化到数据库
1. Spring 1.x 2.x 3.x 配置文件 ApplicationContext.xmlbean <xml schema> spring 集成的这些中间件的依赖 Spring MVC, JMS, RPC,及 业务逻辑实现
元数据: ApplicationContext.xml
<xml version="1.0" encoding="UTF-8"><bean></bean><transaction></transaction></xml>DTD/XML Scheama (里面定义bean等标签) namespace/ XSD
2.Spring读取上面的配置文件 DOM4j/SAX解析XML,拿到依赖关系,初始化,验证配置依赖关系正确性? 实例化 bean及依赖关系
深入一层反射 CLASS reference, class.newInstance(); Spring DI 依赖注入
..<property name="xx" ref="">setter注入
3.AOP Aspect Oriented Programming
AOP 配置文件 lazy loading
Proxy JDK dynamic proxy/ CGlib
BoyFather Girl
Boy Father(认证你是合法人员,经济水平都达到) Girl
@transactionalProxy
service Implementation {
getUserById();
//transaction process
}
青山_20190110_MySQL事务与锁详解
链接:https://pan.baidu.com/s/1nTmvQddXwbGsWp4_wr6Xgg
提取码:rki8
一般是来一个用户就创建一个线程
bio堵塞
select 堵塞 异步(select来用户不马上开线程处理。而是有业务 即 状态位有变化时才创建)
select 放线程中reacte模型
咕泡学院 - Reactor Streams 并发编程之 Reactor
理解Reactive Streams 编程
了解Reactor基本使用
帮助理解 WebFlux(Spring Framework 5)
Reactive Streams规范
https://github.com/reactive-streams/reactive-streams-jvm
Reactive Streams框架 - Reactor
Java 1.4 NIO = Non-Blocking I/O
https://en.wikipedia.org/wiki/Reactor_pattern 同步
Proactor pattern 异步
https://projectreactor.io/docs
CPU Processor = 8
Tomcat/Netty Thread numbers=16
1 Processor = 2 Threads
1 Processor = N Threads,轮询执行/时间分片系统
如果是CPU密集型, Reactive都无济于事
1 Thread CPU 占满了,其它线程不得不等待
Reactive是一种观察者模式的扩展
Streams流式
观察者模式 责任链模式 迭代器模式 发布-订阅模式
A->B->C->D-E
List<Integer> values = Arrays.asList(1,2,3,4,5);
四种角色:
Publisher 发布者
Subscriber 订阅者
Subscription 订阅的控制器
Processor 发布者|订阅者
Reactive Streams的规范实现
Java 9 Flow API
RxJava: Reactive Extension Java
Reactor: Reactor Framework
Future 异步
Reactor API
Mono: 异步 0-1元素序列, Future<Optional<?>>
Flux: 异步 0-N元素序列, Future<Collection<?>>
Callback/Future代表
ListenableFuture
ListenableFutureCallback
Future不足:
1.不知道什么时候结束 ListenableFutureCallback 帮助增加成功的调用
2.Future之间没有相互管理的方式
Supplier 只出(返回)不进(参数)
consumer 只进不出
Function 又进又出
BiFunction 二元操作 func(a,b)
同样的工作、同样的做需求,为什么他们能进阿里
点评cat
zipkin
pinpoint
APM
上面 遵循google Dapper论文
ELK
grafana + influxdb
开源授权协议
license
Apache License ,Version 2.0 百度看看有哪些软件在用?
纯粹性
AOP-----service层不放ctroller层
拦截器Interceptor
过滤器Filter servlet -> J2EE
Filter是基于函数回调(doFilter()方法)的,而Interceptor则是基于Java反射的(AOP思想)。
1.过滤器:
依赖于servlet容器。在实现上基于函数回调,可以对几乎所有请求进行过滤,但是缺点是一个过滤器实例只能在容器初始化时调用一次。使用过滤器的目的是用来做一些过滤操作,获取我们想要获取的数据.
比如:在过滤器中修改字符编码;在过滤器中修改 HttpServletRequest的一些参数,包括:过滤低俗文字、危险字符等
2.拦截器:
依赖于web框架,在SpringMVC中就是依赖于SpringMVC框架。在实现上基于Java的反射机制,属于面向切面编程(AOP)的一种运用。由于拦截器是基于web框架的调用.
因此可以使用spring的依赖注入(DI)进行一些业务操作,同时一个拦截器实例在一个controller生命周期之内可以多次调用。但是缺点是只能对controller请求进行拦截,对其他的一些比如直接访问静态资源的请求则没办法进行拦截处理。
3.执行顺序
过滤器的运行是依赖于servlet容器的,跟springmvc等框架并没有关系。并且多个过滤器的执行顺序跟web.xml文件中定义的先后关系有关。
拦截器的执行顺序跟在SpringMVC的配置文件中定义的先后顺序有关。
页:
[1]