avatar
文章
80
标签
34
分类
27
主页
归档
标签
分类
关于我
flyingzc's blog
主页
归档
标签
分类
关于我

flyingzc's blog

spring-boot启动流程
发表于2020-05-24|springboot
spring-boot 启动 spingboot-start SpringApplication构造方法 使用 SpringFactoriesLoader 在 classpath 中查找并加载所有可用的 ApplicationContextInitializer 使用 SpringFactoriesLoader 在 classpath 中查找并加载所有可用的 ApplicationListener 通过stackTrace里的main方法查找启动类 SpringApplication.run() 创建StopWatch计时器 通过 SpringFactoriesLoader 查找并加载 SpringApplicationRunListener 列表,调用 SpringApplicationRunListener.started() 方法 创建Environment configureEnvironment() listeners.environmentPrepared(): 广播 ApplicationEnvironmentPreparedEvent...
idea搭建spring-boot环境
发表于2020-05-19|springboot
idea搭建spring-boot环境显示taggit tag 选择 v2.1.5.RELEASE 版本,这是我们项目里现在在用的版本,还比较新,最新的目前是 2.3.0. 拉自己的分支 建立我自己的分支,以后代码注释都写在这个分支上.v2.1.5.RELEASE-zc git checkout -b v2.1.5.RELEASE-zc v2.1.5.RELEASE v2.1.5.RELEASE 这个版本是可以选择 maven 或 gradle 构建的,我这里选的maven. 工程依赖的jar包很多,大概要下个半小时多. 将本地分支推到远程git push origin v2.1.5.RELEASE-zc 建立关联git push –set-upstream origin v2.1.5.RELEASE-zc 看看代码量spring-boot 总共代码45w行,纯代码 27w 行. idea attach sourceidea 的配置最终都落到 .idea 下的 xml 里,搜索 springboot 的 maven 配置文件,修改里面的...
Tomcat处理请求流程
发表于2019-12-26|Tomcat
tomcat处理请求组件Server123456789101112131415Server|-- Service|--|-- Connector|--|--|-- Prototal|--|--|--|-- Endpoint|--|--|--|--|-- Acceptor|--|--|--|--|-- Executor|--|--|--|-- Processor|--|--|-- Mapper|--|--|-- CoyteAdapter|--|-- Container|--|--|--|-- Host|--|--|--|-- Context|--|--|--|-- Wrapper|--|-- Executor Http11NioProtocol12345678910111213Http11NioProtocol|-- NioEndpoint|--|-- LimitLatch|--|-- Acceptor|--|-- Poller|--|-- Poller池|--|-- SocketProcessor|--|-- Executor|--|-- PollerEvent|--|--...
Tomcat Session机制
发表于2019-12-20|Tomcat
tomcat session相关类12345org.apache.catalina.ManagerStandardManagerSessionIdGenerator Manager实现类Manager 用于管理 session.默认实现是 StandardManager,基类 ManagerBase. 123456789101112Manager ClusterManager (org.apache.catalina.ha) ClusterManagerBase (org.apache.catalina.ha.session) BackupManager (org.apache.catalina.ha.session) DeltaManager (org.apache.catalina.ha.session) ManagerBase (org.apache.catalina.session) PersistentManagerBase (org.apache.catalina.session)...
Tomcat实现分布式session
发表于2019-12-20|Tomcat
tomcat实现分布式sessiontomcat-redis-session-manager 使用Copy the following files into the TOMCAT_BASE/lib directory: 123tomcat-redis-session-manager-VERSION.jarjedis-2.5.2.jarcommons-pool2-2.2.jar 配置 TOMCAT_HOME/conf/context.xml 12345<Valve className="com.radiadesign.catalina.session.RedisSessionHandlerValve" /><Manager className="com.radiadesign.catalina.session.RedisSessionManager" host="localhost" port="6379"...
Tomcat Lifecycle
发表于2019-12-19|Tomcat
LifeCycleLifeCycle 相关类LifeCycle 接口中的状态扭转注释,如下: 12345678910111213141516171819202122232425262728* start()* -----------------------------* | |* | init() |* NEW -»-- INITIALIZING |* | | | | ------------------«-----------------------* | | |auto | | |* | | \|/ start() \|/ \|/ auto auto stop() |* | | ...
Tomcat启动流程
发表于2019-12-19|Tomcat
tomcat...
布隆过滤器
发表于2019-12-18|Data Structure
布隆过滤器what布隆过滤器(Bloom Filter).是一个很长的 二进制向量 和 一系列随机映射 函数. 之所以叫 filter,是在缓存之前,把不存在的 key 给拦截掉. 本质是 一个位数组: 位数组 就是 数组 的 每个元素 都只占用 1 bit,并且每个元素只能是 0 或 1. 用于判断: 某个元素 一定不存在 或者 可能存在 于 一个集合中. 布隆过滤器除了一个位数组,还有 K 个哈希函数. 插入一个元素加入布隆过滤器:使用 K 个 哈希函数 对元素值 进行 K 次计算,得到 K 个哈希值.根据得到的哈希值,在 位数组中 把对应下标的值置为 1. 查询当查询 w 是否存在时,可以再通过这 k 个 哈希函数,如果算出来所在的位置均为1,则表示 w 可能存在(注意是可能存在),否则一定不存在. 优缺点1.优点空间效率 和 查询时间 都远远超过一般的算法. 2.缺点有一定的 误识别率 和 删除困难 数组的容量即使再大,也是有限的. 随着元素的增加,插入的元素就会越多,位数组中被置为 1...
Redis实现分布式锁
发表于2019-12-17|Redis
Redis实现分布式锁要考虑的点 互斥(独占,只能有一个客户端获取锁) 不能死锁 容错(只要大部分 redis 节点创建了这把锁就认为成功获取到锁) 支持重入,超时获取锁等特性 redis实现分布式锁1.使用set1.1.加锁1SET key randomValue NX PX 30000 NX: (not exists)表示只有 key 不存在的时候才会设置成功.(如果此时 redis 中存在这个 key,那么设置失败,返回 nil)PX 30000: 30s 后 key 失效,意味着 30s 后锁自动释放. 随机数 randomValue 可以使用 时间戳 + 客户端编号 的方式 生成随机数. 1.2.释放锁123456-- 删除锁的时候,找到 key 对应的 value,跟自己传过去的 value 做比较,如果是一样的才删除.保证解的是自己加的锁if redis.call("get",KEYS[1]) == ARGV[1] then return redis.call("del", KEYS[1])else ...
Dubbo心跳机制
发表于2019-12-15|Dubbo
Dubbo心跳机制Dubbo 默认客户端和服务端都会发送心跳报文,用来保持 TCP 长连接状态. 在客户端和服务端,Dubbo 都会开启一个线程 循环扫描 并 检测连接是否超时. 在服务端发现超时则会主动关闭客户端连接. 在客户端发现超时则会主动重新创建连接. 默认心跳检测时间是 60 秒. 原理provider 心跳默认是在 heartbeat(一分钟)内如果没有读消息或写消息,就会发送心跳请求消息,如果连着3次(180s)没有读消息,provider会关闭channel. consumer 端的心跳默认是在 一分钟 内如果没有读消息或写消息,就会发送心跳请求消息,如果连着3次(三分钟)没有读消息,consumer会进行重连. 开启定时任务provider 在启动 netty时,在 HeaderExchangeServer 的构造方法中,会通过 startHeatbeatTimer() 启动心跳定时任务.consumer 在 HeaderExchangeClient 的构造方法里,同样通过 startHeatbeatTimer()...
1…5678
avatar
flyingzc
不积跬步无以至千里
不积小流无以成江海
文章
80
标签
34
分类
27
Follow Me
公告
FlyingZC's Blog
最新文章
Jmeter 压测 ShardingSphere2025-07-01
Maven Shade 插件替换 Calcite Jar 包 class 文件2025-07-01
LinkedIn Coral SQL 翻译实现原理2025-04-09
LinkedIn Coral 编译&SQL翻译使用2025-03-07
H2 Database 事务隔离性实现原理2024-11-12
分类
  • ADB1
  • AI1
  • Concurrent2
  • Coral2
  • Data Structure1
  • Docker1
  • Dubbo7
  • H29
标签
Redis Narayana Database Dubbo spring H2 Percolator Docker Jmeter Zookeeper Ubuntu Omid Tomcat Otter Data Structure springboot Coral MySQL Termux Linux Transaction Hotspot Paddle Concurrent Ubuntu Desktop git Maven SpringBoot Android ADB SQL-Parse ShardingSphere Tool Spring
归档
  • 七月 2025 2
  • 四月 2025 1
  • 三月 2025 1
  • 十一月 2024 1
  • 十月 2024 4
  • 九月 2024 2
  • 八月 2024 2
  • 七月 2024 5
网站信息
文章数目 :
80
本站访客数 :
本站总浏览量 :
最后更新时间 :
©2020 - 2025 By flyingzc