├── docs ├── .nojekyll ├── 107.其他 │ ├── Untitled.md │ ├── 学习资料汇总.md │ ├── ProcessOn.md │ ├── 自我介绍.md │ └── 系统问题汇总.md ├── 92.LeetCode算法题 │ ├── .md │ └── 01.数组 │ │ └── Markdown特殊字符.md ├── 97.读书笔记 │ ├── 04.架构真意.md │ ├── 03.凤凰架构.md │ ├── 05.架构整洁之道.md │ ├── 02.人生效率手册.md │ ├── 01.超级记忆:破解记忆宫殿的秘密.md │ └── 06.淘宝技术这十年.md ├── 07.并发多线程 │ ├── 07.图解多线程.md │ ├── Balsamiq │ │ └── 队列.bmpr │ ├── 06.图解队列.assets │ │ ├── gA1EP5f8AWR7.png │ │ ├── hPvovLqBSPUz.png │ │ ├── image-20200905165255246.png │ │ ├── image-20200906005101077.png │ │ ├── image-20200906105035218.png │ │ ├── image-20200906105341185.png │ │ ├── image-20200906105739290.png │ │ ├── image-20200906110240725.png │ │ ├── image-20200906163241324.png │ │ ├── image-20200906233348321.png │ │ ├── image-20200907144652830.png │ │ ├── image-20200907215851668.png │ │ ├── image-20200908111601662.png │ │ ├── image-20200908160023517.png │ │ ├── image-20200908163623570.png │ │ ├── image-20200908165328007.png │ │ └── image-20200908230104924.png │ ├── 01.volatile.assets │ │ ├── image-20200817102904240.png │ │ ├── image-20200817134523840.png │ │ └── image-20200817163859759.png │ ├── 05.查漏补缺-并发中的各种锁.assets │ │ └── image-20200831133815338.png │ ├── 97.Java并发编程课程大纲.assets │ │ └── image-20200909144440202.png │ ├── 04.Java并发必知必会第四弹:线程不安全的集合类.assets │ │ ├── image-20200827141943032.png │ │ ├── image-20200827172119797.png │ │ └── image-20200827172125513.png │ ├── 99.思维导图总结.md │ ├── 98.图解并发工具类.md │ └── 97.Java并发编程课程大纲.md ├── 94.Git │ ├── 02.Git忽略不需要的文件 │ ├── 02.gitignore.md │ ├── 04.一键pull代码.md │ └── 03.创建多个ssh_key.md ├── 98.idea │ ├── 22.我给顶级项目.md │ ├── Untitled.md │ ├── 05.魔幻的四个私活经历,到底是亏了还是赚了?.assets │ │ ├── 小游戏动图.gif │ │ ├── image-20200928144403591.png │ │ ├── image-20200928144723334.png │ │ ├── 414640-20160813163211890-702123418.gif │ │ └── 414640-20160813163312859-718402818.gif │ ├── 14.悟空聊架构互推-0522.md │ ├── 20.学习路线和资料推荐.md │ ├── 08.灯谜抽奖.md │ ├── 18.公众号心得分享.md │ ├── 25.ChatGPT专栏上线.md │ ├── 06.和两位技术大佬吃饭.md │ ├── 10.网站崩了.md │ └── 07.JVM付费专栏上线.md ├── 03.SpringBoot │ ├── 09.Object划分md │ ├── email │ │ ├── email_freemarker.md │ │ └── graph_api_calender.md │ ├── 01.自定义Redis_Starter.md │ ├── 09.Object划分.md │ └── 08.SpringBoot-Mybatis逻辑删除.md ├── 12.Nginx │ ├── 07.tomcat_nginx.md │ └── 02.Nginx-Content.md ├── 01.PassJava │ ├── 03.Deploy │ │ ├── Untitled.md │ │ ├── 02.Linux │ │ │ ├── 01.监控平台 │ │ │ │ ├── 01.Prometheus │ │ │ │ └── 02.Prometheus_SQL_SERVER │ │ │ └── 02.Docker │ │ │ │ └── 01.Docker命令.md │ │ ├── 18.部署监控平台Prometheus.md │ │ ├── 03.Prometheus │ │ │ ├── 03.Promethues架构剖析.md │ │ │ └── 00.计划.md │ │ ├── 本地部署 Jenkins.assets │ │ │ ├── image-20230524105715516.png │ │ │ ├── image-20230524111022132.png │ │ │ ├── image-20230524111911082.png │ │ │ ├── image-20230524112038891.png │ │ │ ├── image-20230524112124574.png │ │ │ ├── image-20230524112212520.png │ │ │ ├── image-20230524112233219.png │ │ │ ├── image-20230524112304729.png │ │ │ ├── image-20230525092717632.png │ │ │ ├── image-20230525092839557.png │ │ │ ├── image-20230525092850337.png │ │ │ ├── image-20230525092922185.png │ │ │ ├── image-20230525092946152.png │ │ │ ├── image-20230526165817895.png │ │ │ ├── image-20230526170026313.png │ │ │ ├── image-20230602144613432.png │ │ │ ├── image-20230602151944065.png │ │ │ ├── image-20230602152134248.png │ │ │ ├── image-20230602153507389.png │ │ │ ├── image-20230602154515672.png │ │ │ ├── image-20230602155740947.png │ │ │ ├── image-20230602155802285.png │ │ │ ├── image-20230602162300732.png │ │ │ ├── image-20230602163000610.png │ │ │ ├── image-20230602163528221.png │ │ │ ├── image-20230602164456545.png │ │ │ ├── image-20230614084939143.png │ │ │ ├── image-20230614085611343.png │ │ │ ├── image-20230614085735919.png │ │ │ ├── image-20230614091659535.png │ │ │ ├── image-20230614092414704.png │ │ │ ├── image-20230614092542460.png │ │ │ └── image-20230614092829142.png │ │ ├── 15.用M1部署Skywalking.md │ │ ├── 08.Windows安装mysql.md │ │ └── 02.配置虚拟机网络.md │ ├── 04.PassJava_Business │ │ └── 02.管理后台-题目类型功能2 │ ├── 02.PassJava_Architecture │ │ ├── 25.本地事务.md │ │ ├── 16.Elasticsearch集群部署.md │ │ ├── 26.分布式事务.md │ │ ├── 14.Elasticsearch基础.assets │ │ │ ├── image-20200629192730211.png │ │ │ ├── image-20200629193228679.png │ │ │ ├── image-20200629193248105.png │ │ │ ├── image-20200708222249498.png │ │ │ └── image-20200708222255383.png │ │ ├── 19.缓存实战.md │ │ └── 02.创建数据库和表.md │ └── 01.Introduction │ │ ├── 4.项目技术和特色.md │ │ ├── 3.微服务划分图.md │ │ ├── 2.项目微服务架构图.md │ │ └── 6.本地部署项目Windows版.md ├── 109.学习笔记 │ ├── 03.高并发系统设计 │ │ ├── 34.降级熔断.md │ │ ├── 28.多机房部署.md │ │ ├── 35.流量控制.md │ │ ├── 24.注册中心.md │ │ ├── 00.思维导图.md │ │ ├── 22.微服务化后系统架构要如何改造?.md │ │ ├── 04.高可用.md │ │ ├── 14.缓存如何做到高可用.md │ │ ├── 17.加餐-数据的迁移应该如何做?.md │ │ ├── 19.如何降低消息队列系统中消息的延迟?.md │ │ └── 15.缓存穿透如何解决.md │ ├── 08.软件工程之美 │ │ └── 21 | 架构设计:普通程序员也能实现复杂系统?.md │ ├── 98.Java基础-尚硅谷 │ │ └── 01.反射.md │ ├── 04.Java开发规范 │ │ └── 01.阿里嵩山版开发规范.md │ ├── 01.Redis核心技术与实战 │ │ ├── 21.每秒一万次请求的系统要做服务化拆分吗?md │ │ ├── 03.有哪些与Redis交互的操作.md │ │ ├── 05.多核CPU下Redis的优化.md │ │ ├── 16.Redis持久化.md │ │ ├── 13.Redis的大内存问题.md │ │ ├── 07.如何应对变慢的Redis(下篇).md │ │ ├── 14.Redis的原子操作.md │ │ ├── 04.有哪些操作会阻塞Redis?怎么解决?.md │ │ └── 06.如何应对变慢的Redis(上篇).md │ ├── 06.Spring常见错误 │ │ └── 01.Spring事务.md │ ├── 05.问题排查 │ │ └── 线上性能问题.md │ ├── 09.AI数据分析 │ │ ├── AI数据分析.md │ │ └── AI数据分析 │ ├── 07.Redis源码剖析和实战 │ │ └── 01.源码框架.md │ └── 99.技术管理 │ │ └── 01.如何为团队设定合理的目标.md ├── 04.Architecture │ ├── 01.架构图解 │ │ ├── 09.购物车原理.md │ │ ├── 微服务架构中的两款流量防卫兵.assets │ │ │ ├── image-20201101101010116.png │ │ │ ├── image-20201101102053470.png │ │ │ ├── image-20201101102703627.png │ │ │ ├── image-20201101102809048.png │ │ │ ├── image-20201101103520316.png │ │ │ ├── image-20201101131228831.png │ │ │ ├── image-20201101131233611.png │ │ │ ├── image-20201101131624248.png │ │ │ ├── image-20201101132129234.png │ │ │ └── image-20201101202812737.png │ │ ├── 01.微服务架构中的两款流量防卫兵.assets │ │ │ ├── image-20201101132129234.png │ │ │ ├── image-20201101202812737.png │ │ │ ├── image-20201103220145151.png │ │ │ ├── image-20201103221016048.png │ │ │ ├── image-20201103221018398.png │ │ │ ├── image-20201103221107664.png │ │ │ ├── image-20201103230631742.png │ │ │ ├── image-20201103231336302.png │ │ │ ├── 50678855-aa6e9700-103b-11e9-83de-2a33e580325f.png │ │ │ ├── 50813887-bff10300-1352-11e9-9201-437afea60a5a.png │ │ │ ├── 68292392-b5b0aa00-00c6-11ea-86e1-ecacff8aab51.png │ │ │ └── 68292442-d4af3c00-00c6-11ea-8251-d0977366d9b4.png │ │ ├── 02.20张图手摸手教你性能压测.assets │ │ │ └── image-20201124221817028.png │ │ ├── 10.用分布式锁做幂等防重.md │ │ ├── 99.自研简易版任务调度框架2022-03-04.md │ │ └── 100.几种架构图.md │ ├── 04.高可用集群篇 │ │ ├── 09.MySQL_failure.md │ │ ├── MySQL主从同步问题.assets │ │ │ ├── image-20230412085649154.png │ │ │ ├── image-20230412085710146.png │ │ │ ├── image-20230412092126570.png │ │ │ ├── image-20230412092505005.png │ │ │ ├── image-20230412093009267.png │ │ │ ├── image-20230412093505743.png │ │ │ ├── image-20230412093911094.png │ │ │ ├── image-20230412093957584.png │ │ │ ├── image-20230412094250612.png │ │ │ ├── image-20230412100125722.png │ │ │ ├── image-20230412100549486.png │ │ │ ├── image-20230412104705411.png │ │ │ ├── image-20230412110648964.png │ │ │ ├── image-20230412112357427.png │ │ │ ├── image-20230412113802652.png │ │ │ ├── image-20230412114117482.png │ │ │ ├── image-20230412115332313.png │ │ │ ├── image-20230412143612066.png │ │ │ ├── image-20230412145033259.png │ │ │ ├── image-20230412150816383.png │ │ │ ├── image-20230412151235524.png │ │ │ ├── image-20230412151743496.png │ │ │ ├── image-20230412152007116.png │ │ │ └── image-20230412160855594.png │ │ ├── 101.Keepalived监控和故障切换.md │ │ ├── 99.k8s从原理到实践.md │ │ └── 16.部署Jenkins.md │ ├── 03.用故事讲解技术 │ │ ├── 01.中间件选型 │ │ │ └── 03.注册中心选型.md │ │ └── 99.TODO │ │ │ ├── 98.我是一个接口,来自单体星球.md │ │ │ └── 99.疫情下如何「硬套」高可用架构.md │ └── 05.中间件原理剖析 │ │ └── 01.Zookeeper │ │ └── 03.Zookeeper分布式锁原理.md ├── 16.DevOps │ ├── Jenkins │ │ ├── 21.Jenkins部署前端md │ │ ├── 10.Jenkins触发器.md │ │ ├── 12.passjava_jenkins.md │ │ └── 11.Jenkins错误集锦.md │ └── default-plugin-email-success.html ├── 02.SpringCloud │ ├── 05.Zuul网关 │ │ └── 01.Zuul架构剖析.md │ ├── 01.Eureka注册中心 │ │ ├── 93.Eureka的几个后台线程.md │ │ ├── 99.吐槽 Eureka 源码.md │ │ ├── 95.盘点Eureka中的HardCode瞬间.md │ │ ├── 94.Eureka中用到的原子并发类.md │ │ ├── 96.Eureka中藏了太明显的bug.md │ │ └── 92.Eureka自我保护机制,网上99%都说错了!.md │ ├── 12.权限认证 │ │ └── 01.单点登录原理.md │ ├── 04.Hystrix限流熔断器 │ │ └── 01.Hystrix架构剖析.md │ ├── 11.链路追踪 │ │ └── 01.添加traceId跟踪日志.assets │ │ │ ├── image-20220908150529573.png │ │ │ ├── image-20220908150803867.png │ │ │ ├── image-20220908150928027.png │ │ │ └── image-20220908151032677.png │ ├── 03.Feign远程调用 │ │ └── 01.Feign远程调用基本原理和使用.assets │ │ │ └── image-20220704111442958.png │ ├── 07.Nacos配置注册中心 │ │ └── 04.Nacos架构原理③:揭秘心跳机制.md │ └── 02.Ribbon负载均衡 │ │ └── 02.Ribbon使用.md ├── 06.Java核心知识 │ ├── 01.JavaCore │ │ └── 19.JavaStream4.md │ ├── 02.Spring │ │ ├── 01.SpringSecurity │ │ │ └── .md │ │ └── 01.SpringCore │ │ │ └── 01.拦截器和过滤器.md │ ├── 03.MyBatis │ │ └── Resources │ │ │ ├── 分页测试结果.png │ │ │ ├── 延迟加载测试1.png │ │ │ ├── 延迟加载测试2.png │ │ │ ├── 延迟加载测试3.png │ │ │ ├── 插件中的驱动.png │ │ │ ├── 逆向执行结果.png │ │ │ ├── 配置分页插件.png │ │ │ ├── MyBatis下载.png │ │ │ ├── trim测试结果.png │ │ │ ├── 增删改测试结果1.png │ │ │ ├── 增删改测试结果2.png │ │ │ ├── 默认的类型别名1.png │ │ │ ├── 默认的类型别名2.png │ │ │ ├── choose测试结果.png │ │ │ ├── example测试结果.png │ │ │ ├── example的方法.png │ │ │ ├── foreach测试结果1.png │ │ │ ├── foreach测试结果2.png │ │ │ ├── dependency中的驱动.png │ │ │ ├── 执行MBG插件的generate目标.png │ │ │ └── mapper接口和mapper映射文件在同一包下.png │ └── 04.JVM进阶 │ │ └── 01.100道JVM面试题+11张思维导图就是让你懂JVM.assets │ │ ├── 56RafTP5SIu9.png │ │ ├── 5mOIWyuPMFpp.png │ │ ├── 6syuEafFLB5M.png │ │ ├── HW6OcPGDyP3I.png │ │ ├── LU3Lqg5ougws.png │ │ ├── PjhymCqjrLnN.png │ │ ├── ic8vE7VHUnnh.png │ │ ├── kuC0zfKbIizi.png │ │ ├── lG8riViTdT2V.png │ │ ├── sldahoAGfNAI.png │ │ ├── tkQMtW8WsPK3.png │ │ ├── vR6DxYzqWv6w.png │ │ ├── image-20200807230325554.png │ │ ├── image-20200807230521597.png │ │ ├── image-20200807230532306.png │ │ ├── image-20200807232304090.png │ │ ├── image-20200807232311504.png │ │ ├── image-20200807232322213.png │ │ ├── image-20200808000844570.png │ │ └── image-20200808000910767.png ├── 105.异常和解决方案 │ └── 01.Java编译错误.md ├── 10.SQL │ ├── 01.MySQL │ │ ├── 01.MySQL_Basic │ │ │ └── 02.MySQL_field_type.md │ │ └── 03.Summary │ │ │ ├── 02.function.md │ │ │ └── 00.content.md │ └── 02.SQLServer │ │ ├── image-20200903105308688.png │ │ └── image-20200903105817267.png ├── 94.剑指Offer算法题 │ └── 01.斐波那锲.md ├── 05.Interview │ ├── 06.Network │ │ ├── 02.浏览器访问www.baidu.com会发生什么?.md │ │ └── 01.Network.md │ ├── 05.DesignPattern │ │ ├── 103.编写高质量代码.md │ │ ├── 25.为什么要少用继承多用组合.md │ │ ├── 03.原型模式PrototypePattern.md │ │ ├── 26.充血模型.md │ │ ├── 102.如何评价代码的质量.md │ │ ├── 24.接口和抽象的区别.md │ │ ├── 101.为什么要学设计模式.md │ │ ├── 05.责任链模式.md │ │ ├── 04.中介者模式MediatorPattern.md │ │ ├── 06.单例模式.md │ │ └── 02.备忘录模式MementoPattern.md │ ├── 其他.md │ └── 03.Database │ │ └── MySQL2.md ├── 08.Redis │ ├── 02.趣谈Redis之对象系统.md │ └── 00.DownloadRedis.md ├── 99.tools │ ├── 89.Linux_command.md │ ├── 10.PassJava网站美化之路.md │ ├── 96.HTML特殊符号.md │ ├── 93.IDEA快捷键.md │ ├── 自定义Markdown神器Typora的主题样式.assets │ │ ├── 133227331.png │ │ ├── 133336595.png │ │ ├── 150546490.png │ │ ├── 150911519.png │ │ ├── 151019776.png │ │ ├── 151154097.png │ │ ├── 151217779.png │ │ ├── 151256862.png │ │ ├── 152103558.png │ │ ├── 152654883.png │ │ ├── 152746054.png │ │ └── 152827346.png │ ├── 96.HTML特殊符号.assets │ │ └── image-20200910094330644.png │ ├── 05.我的常用工具.md │ ├── 98.IDEA调试Java多线程.md │ ├── 90.Git操作.md │ ├── 94.Ubuntu16_04安装最新版nodejs.md │ ├── 00.Tools.md │ ├── 99.IDEA调试Java源码.md │ ├── 10.IDEA插件.md │ ├── 92.Java环境问题.md │ └── 101.aliyun.md ├── 108.MacBook使用技巧 │ ├── 08.Bob翻译工具.md │ ├── 09.Mac应用问题.md │ ├── 04.M1安装Win10.md │ ├── 05.Mac常见命令.md │ ├── 07.Alfred使用2022-03-25.md │ ├── 10.Mac系统问题.md │ └── 06.Mac远程连接2021-12-03.md ├── favicon.ico ├── images │ ├── logo.png │ ├── logo1.png │ ├── logo4.png │ ├── common │ │ ├── close.png │ │ ├── hidden.png │ │ ├── qrcode.png │ │ ├── display.png │ │ ├── aliyun_sale_season.jpg │ │ ├── wechat_public_qrcode.jpeg │ │ ├── knowledge_planet_qrcode.jpg │ │ └── wechat_personal_qrcode.jpeg │ ├── logo_892_890.png │ ├── image-20201020132557324.png │ ├── spring-boot-05-data-jdbc │ │ ├── 1.png │ │ ├── 2.png │ │ ├── 3.png │ │ ├── 4.png │ │ ├── 5.png │ │ ├── 6.png │ │ ├── 7.png │ │ ├── delete.png │ │ ├── insert.png │ │ ├── swagger.png │ │ ├── create_table.png │ │ ├── create_swagger.png │ │ ├── delete_swagger.png │ │ ├── update_swagger.png │ │ ├── query_all_swagger.png │ │ └── query_id_swagger.png │ ├── spring-boot-06-druid-jdbc │ │ ├── tip1.png │ │ ├── login.png │ │ ├── select1.png │ │ ├── 数据库连接.png │ │ ├── monitor1.png │ │ ├── Druid_Monitor.PNG │ │ ├── Druid_Monitor1.png │ │ ├── Druid_Setting.png │ │ ├── Druid_Maven_Repository.png │ │ └── Druid_Maven_Repository2.png │ └── spring-boot-07-data-mybatis │ │ ├── druid.png │ │ ├── lombok.png │ │ ├── mybatis.png │ │ ├── project.png │ │ ├── select.png │ │ ├── swagger.png │ │ └── pom_mybatis.png ├── 03.Distributed │ ├── Raft │ │ ├── 1.gif │ │ ├── 2.gif │ │ ├── Leader选举1.gif │ │ ├── Leader选举2.gif │ │ ├── Leader选举-候选者1.gif │ │ ├── Leader选举-候选者2.gif │ │ └── Leader选举-领导者故障.gif │ ├── 拜占庭问题 │ │ ├── 0Hb6y9SGLRw0.png │ │ └── 7ydKoE7KmQJw.png │ ├── 13.PBFT.md │ └── 02.缓存有哪些坑.md ├── 93.整理成PDF │ ├── MySQL双主切换成了一主一从.pdf │ ├── 悟空出品.md │ ├── 悟空出品.assets │ │ └── image-20200918142907132.png │ └── SpringCloud实战项目《佳必过 PassJava》.assets │ │ └── image-20200918165327441.png ├── meterial │ └── docsify │ │ ├── json │ │ └── model.moc │ │ ├── image │ │ └── default-costume.png │ │ ├── css │ │ ├── me.css │ │ ├── sidebar.min.css │ │ └── style.css │ │ └── js │ │ ├── prism-json.min.js │ │ ├── countable.min.js │ │ └── index.js ├── 110.Temp │ ├── .md │ ├── 04.关于我.md │ ├── 02.Win10升级到Win11.md │ └── 03.IDEA报错.md ├── 106.PHP │ └── PHP的垃圾回收是怎么样的.assets │ │ ├── Pc9UbIojX8C0.png │ │ ├── image-20201119201625453.png │ │ ├── image-20201119201657926.png │ │ ├── image-20201119202720022.png │ │ └── 414640-20180620195053392-44636031.png ├── 90.开源 │ └── 01.傻傻分不清的开源协议.md ├── 95.go │ └── 01.Go初次见面会.assets │ │ ├── image-20200820122109979.png │ │ ├── image-20200820123211514.png │ │ └── image-20200820123217585.png ├── 102.学习群问题汇总 │ ├── 03.问题复盘.assets │ │ ├── image-20201102203954585.png │ │ └── image-20201102203954585-1604365590458.png │ ├── 01.删除binlog问题.assets │ │ └── image-20201028222652452.png │ ├── 02.20201028_导出报表问题.md │ └── 01.20201026_删除binlog问题.md ├── 112.双赢 │ └── 01.友链.md ├── 104.群成员学习分享 │ └── 月度学习总结 │ │ └── 2022年8月学习总结.md ├── 111.Go │ ├── 02.GoJSON编解码性能优化探索.md │ └── 03.Go有什么优势.md ├── 86.前端 │ └── 03.Typora.md ├── 83.视频号 │ └── 02.给我的网站插上留言的翅膀.md ├── 85.数据库 │ └── 01.NoSQL和SQL.md ├── _navbar.md ├── _coverpage.md ├── 11.Docker │ └── 01.DockerBase │ │ └── Docker_Logs.md ├── 美团骑手面试.md ├── 07.前端进阶 │ └── 01.安装Vue的devtools插件.md ├── 15.DDD领域驱动设计 │ └── 02.DOVO等等.md ├── 101.Connection │ └── 01.2020.10中秋国庆红包.md └── 82.团队管理 │ └── 01.代码评审(code_review).md ├── .gitattributes ├── .vscode └── settings.json ├── code ├── 01.Threads │ ├── .idea │ │ ├── .gitignore │ │ ├── vcs.xml │ │ ├── misc.xml │ │ ├── modules.xml │ │ └── artifacts │ │ │ └── 01_Threads_ear_exploded.xml │ ├── out │ │ └── production │ │ │ └── 01.Threads │ │ │ ├── META-INF │ │ │ └── 01.Threads.kotlin_module │ │ │ └── com │ │ │ └── jackson0714 │ │ │ └── passjava │ │ │ └── threads │ │ │ ├── ShareData.class │ │ │ └── volatileVisibility.class │ ├── META-INF │ │ └── application.xml │ ├── src │ │ └── com │ │ │ └── jackson0714 │ │ │ └── passjava │ │ │ └── threads │ │ │ ├── DelayQueueDemo.java │ │ │ ├── CASDemo.java │ │ │ ├── VolatileSingleton.java │ │ │ ├── VolatileResort.java │ │ │ └── VolatileAtomicity.java │ └── 01.Threads.iml └── static │ ├── css │ ├── me.css │ ├── sidebar.min.css │ └── style.css │ └── js │ ├── prism-json.min.js │ └── index.js └── .gitignore /docs/.nojekyll: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/107.其他/Untitled.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/92.LeetCode算法题/.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/97.读书笔记/04.架构真意.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/07.并发多线程/07.图解多线程.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/94.Git/02.Git忽略不需要的文件: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/98.idea/22.我给顶级项目.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/98.idea/Untitled.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/03.SpringBoot/09.Object划分md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/12.Nginx/07.tomcat_nginx.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/01.PassJava/03.Deploy/Untitled.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/109.学习笔记/03.高并发系统设计/34.降级熔断.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/04.Architecture/01.架构图解/09.购物车原理.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/16.DevOps/Jenkins/21.Jenkins部署前端md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | *.java linguist-language=html 2 | -------------------------------------------------------------------------------- /docs/02.SpringCloud/05.Zuul网关/01.Zuul架构剖析.md: -------------------------------------------------------------------------------- 1 | TODO -------------------------------------------------------------------------------- /docs/03.SpringBoot/email/email_freemarker.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/03.SpringBoot/email/graph_api_calender.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/06.Java核心知识/01.JavaCore/19.JavaStream4.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/06.Java核心知识/02.Spring/01.SpringSecurity/.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/105.异常和解决方案/01.Java编译错误.md: -------------------------------------------------------------------------------- 1 | 编码GBK的不可映射字符 -------------------------------------------------------------------------------- /docs/01.PassJava/04.PassJava_Business/02.管理后台-题目类型功能2: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/02.SpringCloud/01.Eureka注册中心/93.Eureka的几个后台线程.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/02.SpringCloud/01.Eureka注册中心/99.吐槽 Eureka 源码.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/02.SpringCloud/12.权限认证/01.单点登录原理.md: -------------------------------------------------------------------------------- 1 | 一处登录,处处登录 -------------------------------------------------------------------------------- /docs/109.学习笔记/08.软件工程之美/21 | 架构设计:普通程序员也能实现复杂系统?.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/01.PassJava/03.Deploy/02.Linux/01.监控平台/01.Prometheus: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/02.SpringCloud/04.Hystrix限流熔断器/01.Hystrix架构剖析.md: -------------------------------------------------------------------------------- 1 | TODO -------------------------------------------------------------------------------- /docs/10.SQL/01.MySQL/01.MySQL_Basic/02.MySQL_field_type.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/94.剑指Offer算法题/01.斐波那锲.md: -------------------------------------------------------------------------------- 1 | # 剑指Offer算法精讲-斐波那锲 2 | 3 | -------------------------------------------------------------------------------- /docs/02.SpringCloud/01.Eureka注册中心/95.盘点Eureka中的HardCode瞬间.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/05.Interview/06.Network/02.浏览器访问www.baidu.com会发生什么?.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/16.DevOps/Jenkins/10.Jenkins触发器.md: -------------------------------------------------------------------------------- 1 | # Jenkins 触发器 2 | 3 | -------------------------------------------------------------------------------- /docs/01.PassJava/02.PassJava_Architecture/25.本地事务.md: -------------------------------------------------------------------------------- 1 | Todo 2 | 3 | -------------------------------------------------------------------------------- /docs/01.PassJava/03.Deploy/02.Linux/01.监控平台/02.Prometheus_SQL_SERVER: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/04.Architecture/04.高可用集群篇/09.MySQL_failure.md: -------------------------------------------------------------------------------- 1 | # MySQL 十大故障排查思路 -------------------------------------------------------------------------------- /docs/08.Redis/02.趣谈Redis之对象系统.md: -------------------------------------------------------------------------------- 1 | ## Redis 帝国的七个葫芦娃,生下来就是王者 2 | 3 | -------------------------------------------------------------------------------- /docs/10.SQL/01.MySQL/03.Summary/02.function.md: -------------------------------------------------------------------------------- 1 | # MySQL 函数 2 | 3 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "svn.ignoreMissingSvnWarning": true 3 | } -------------------------------------------------------------------------------- /docs/01.PassJava/02.PassJava_Architecture/16.Elasticsearch集群部署.md: -------------------------------------------------------------------------------- 1 | ## TODO -------------------------------------------------------------------------------- /docs/99.tools/89.Linux_command.md: -------------------------------------------------------------------------------- 1 | ## 1、抓包 2 | 3 | tcpdump -i lo port 8080 -------------------------------------------------------------------------------- /code/01.Threads/.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /workspace.xml -------------------------------------------------------------------------------- /docs/04.Architecture/03.用故事讲解技术/01.中间件选型/03.注册中心选型.md: -------------------------------------------------------------------------------- 1 | # 四个「注册中心」组件的群聊 2 | 3 | -------------------------------------------------------------------------------- /docs/01.PassJava/02.PassJava_Architecture/26.分布式事务.md: -------------------------------------------------------------------------------- 1 | # 实战分布式事务 Seata 2 | 3 | Todo 4 | -------------------------------------------------------------------------------- /docs/02.SpringCloud/01.Eureka注册中心/94.Eureka中用到的原子并发类.md: -------------------------------------------------------------------------------- 1 | Atom 2 | 3 | ConcurrentHashMap -------------------------------------------------------------------------------- /docs/99.tools/10.PassJava网站美化之路.md: -------------------------------------------------------------------------------- 1 | # PassJava 网站美化之路 2 | 3 | ## 右边悬浮广告位添加移除按钮 4 | 5 | -------------------------------------------------------------------------------- /code/01.Threads/out/production/01.Threads/META-INF/01.Threads.kotlin_module: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /docs/06.Java核心知识/02.Spring/01.SpringCore/01.拦截器和过滤器.md: -------------------------------------------------------------------------------- 1 | # 拦截器和过滤器 2 | 3 | 你好,我是悟空。 4 | 5 | -------------------------------------------------------------------------------- /docs/108.MacBook使用技巧/08.Bob翻译工具.md: -------------------------------------------------------------------------------- 1 | https://ripperhe.gitee.io/bob/#/service/translate/baidu -------------------------------------------------------------------------------- /docs/02.SpringCloud/01.Eureka注册中心/96.Eureka中藏了太明显的bug.md: -------------------------------------------------------------------------------- 1 | 心跳检测设置的是 90s,但是代码里面写的是 2*90s。 2 | 3 | -------------------------------------------------------------------------------- /docs/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/favicon.ico -------------------------------------------------------------------------------- /docs/12.Nginx/02.Nginx-Content.md: -------------------------------------------------------------------------------- 1 | - Nginx 部署 2 | - Mac 版部署 3 | - Ubuntu 部署 4 | - Windows 部署 5 | - -------------------------------------------------------------------------------- /docs/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/images/logo.png -------------------------------------------------------------------------------- /docs/images/logo1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/images/logo1.png -------------------------------------------------------------------------------- /docs/images/logo4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/images/logo4.png -------------------------------------------------------------------------------- /docs/97.读书笔记/03.凤凰架构.md: -------------------------------------------------------------------------------- 1 | ## 第二章 访问远程服务 2 | 3 | 2.2.3 RMM 4 | 5 | 如何评价服务是否 RESTful 6 | 7 | 等级 从 0 ~ 3,0 完全不 REST。 -------------------------------------------------------------------------------- /docs/05.Interview/05.DesignPattern/103.编写高质量代码.md: -------------------------------------------------------------------------------- 1 | 编写高质量代码 2 | 3 | ![](http://cdn.jayh.club/blog/20211011/R9HY4MG8kufG.png) -------------------------------------------------------------------------------- /docs/images/common/close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/images/common/close.png -------------------------------------------------------------------------------- /docs/images/common/hidden.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/images/common/hidden.png -------------------------------------------------------------------------------- /docs/images/common/qrcode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/images/common/qrcode.png -------------------------------------------------------------------------------- /docs/images/logo_892_890.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/images/logo_892_890.png -------------------------------------------------------------------------------- /docs/01.PassJava/01.Introduction/4.项目技术和特色.md: -------------------------------------------------------------------------------- 1 | PassJava 项目全套学习教程连载中,[关注公众号](#公众号)第一时间获取。 2 | ![[Pasted image 20240510093217.png]] -------------------------------------------------------------------------------- /docs/03.Distributed/Raft/1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/03.Distributed/Raft/1.gif -------------------------------------------------------------------------------- /docs/03.Distributed/Raft/2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/03.Distributed/Raft/2.gif -------------------------------------------------------------------------------- /docs/03.SpringBoot/01.自定义Redis_Starter.md: -------------------------------------------------------------------------------- 1 | ![image-20220609173810219](D:/_workspace/wh-docs/images/image-20220609173810219.png) -------------------------------------------------------------------------------- /docs/07.并发多线程/Balsamiq/队列.bmpr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/07.并发多线程/Balsamiq/队列.bmpr -------------------------------------------------------------------------------- /docs/109.学习笔记/98.Java基础-尚硅谷/01.反射.md: -------------------------------------------------------------------------------- 1 | 笔记来源:尚硅谷 2 | 3 | 4 | 5 | ![](http://cdn.jayh.club/uPic/image-202112070917179739zSdLN.png) -------------------------------------------------------------------------------- /docs/99.tools/96.HTML特殊符号.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | ![image-20200910094330644](http://cdn.jayh.club/uPic/image-20200910094330644yyONAa.png) -------------------------------------------------------------------------------- /docs/images/common/display.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/images/common/display.png -------------------------------------------------------------------------------- /docs/93.整理成PDF/MySQL双主切换成了一主一从.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/93.整理成PDF/MySQL双主切换成了一主一从.pdf -------------------------------------------------------------------------------- /docs/05.Interview/05.DesignPattern/25.为什么要少用继承多用组合.md: -------------------------------------------------------------------------------- 1 | ![](http://cdn.jayh.club/uPic/image-20211201195059663KYu8kk.png) 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/92.LeetCode算法题/01.数组/Markdown特殊字符.md: -------------------------------------------------------------------------------- 1 | 1.平方 2 | 3 | *O*(n2) 4 | 5 | 2.复杂度1 6 | 7 | *O*(1)。 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /docs/93.整理成PDF/悟空出品.md: -------------------------------------------------------------------------------- 1 | # Swift 5.0 语法基础 V1.0 版 2 | 3 | ![mark](http://cdn.jayh.club/blog/20200918/uwFjfoiDDK8s.png?imageslim) 4 | 5 | -------------------------------------------------------------------------------- /docs/meterial/docsify/json/model.moc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/meterial/docsify/json/model.moc -------------------------------------------------------------------------------- /docs/03.Distributed/Raft/Leader选举1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/03.Distributed/Raft/Leader选举1.gif -------------------------------------------------------------------------------- /docs/03.Distributed/Raft/Leader选举2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/03.Distributed/Raft/Leader选举2.gif -------------------------------------------------------------------------------- /docs/images/image-20201020132557324.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/images/image-20201020132557324.png -------------------------------------------------------------------------------- /docs/images/common/aliyun_sale_season.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/images/common/aliyun_sale_season.jpg -------------------------------------------------------------------------------- /docs/03.Distributed/Raft/Leader选举-候选者1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/03.Distributed/Raft/Leader选举-候选者1.gif -------------------------------------------------------------------------------- /docs/03.Distributed/Raft/Leader选举-候选者2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/03.Distributed/Raft/Leader选举-候选者2.gif -------------------------------------------------------------------------------- /docs/03.Distributed/Raft/Leader选举-领导者故障.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/03.Distributed/Raft/Leader选举-领导者故障.gif -------------------------------------------------------------------------------- /docs/03.Distributed/拜占庭问题/0Hb6y9SGLRw0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/03.Distributed/拜占庭问题/0Hb6y9SGLRw0.png -------------------------------------------------------------------------------- /docs/03.Distributed/拜占庭问题/7ydKoE7KmQJw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/03.Distributed/拜占庭问题/7ydKoE7KmQJw.png -------------------------------------------------------------------------------- /docs/images/common/wechat_public_qrcode.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/images/common/wechat_public_qrcode.jpeg -------------------------------------------------------------------------------- /docs/images/spring-boot-05-data-jdbc/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/images/spring-boot-05-data-jdbc/1.png -------------------------------------------------------------------------------- /docs/images/spring-boot-05-data-jdbc/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/images/spring-boot-05-data-jdbc/2.png -------------------------------------------------------------------------------- /docs/images/spring-boot-05-data-jdbc/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/images/spring-boot-05-data-jdbc/3.png -------------------------------------------------------------------------------- /docs/images/spring-boot-05-data-jdbc/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/images/spring-boot-05-data-jdbc/4.png -------------------------------------------------------------------------------- /docs/images/spring-boot-05-data-jdbc/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/images/spring-boot-05-data-jdbc/5.png -------------------------------------------------------------------------------- /docs/images/spring-boot-05-data-jdbc/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/images/spring-boot-05-data-jdbc/6.png -------------------------------------------------------------------------------- /docs/images/spring-boot-05-data-jdbc/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/images/spring-boot-05-data-jdbc/7.png -------------------------------------------------------------------------------- /docs/07.并发多线程/06.图解队列.assets/gA1EP5f8AWR7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/07.并发多线程/06.图解队列.assets/gA1EP5f8AWR7.png -------------------------------------------------------------------------------- /docs/07.并发多线程/06.图解队列.assets/hPvovLqBSPUz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/07.并发多线程/06.图解队列.assets/hPvovLqBSPUz.png -------------------------------------------------------------------------------- /docs/110.Temp/.md: -------------------------------------------------------------------------------- 1 | 兵分三路 2 | 3 | 大本营 就是缓存 4 | 5 | 朝廷就是数据库 6 | 7 | 8 | 9 | “报~~~~~,上路损失兵力 500,目前总兵力剩余 9000!” 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/110.Temp/04.关于我.md: -------------------------------------------------------------------------------- 1 | ![wechat_qrcode](http://cdn.jayh.club/uPic/wechat_qrcodeKkPxBh.jpg) 2 | 3 | ![qrcode2](http://cdn.jayh.club/uPic/qrcode28EYPSJ.jpg) -------------------------------------------------------------------------------- /docs/images/common/knowledge_planet_qrcode.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/images/common/knowledge_planet_qrcode.jpg -------------------------------------------------------------------------------- /docs/images/common/wechat_personal_qrcode.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/images/common/wechat_personal_qrcode.jpeg -------------------------------------------------------------------------------- /docs/images/spring-boot-06-druid-jdbc/tip1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/images/spring-boot-06-druid-jdbc/tip1.png -------------------------------------------------------------------------------- /docs/06.Java核心知识/03.MyBatis/Resources/分页测试结果.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/06.Java核心知识/03.MyBatis/Resources/分页测试结果.png -------------------------------------------------------------------------------- /docs/06.Java核心知识/03.MyBatis/Resources/延迟加载测试1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/06.Java核心知识/03.MyBatis/Resources/延迟加载测试1.png -------------------------------------------------------------------------------- /docs/06.Java核心知识/03.MyBatis/Resources/延迟加载测试2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/06.Java核心知识/03.MyBatis/Resources/延迟加载测试2.png -------------------------------------------------------------------------------- /docs/06.Java核心知识/03.MyBatis/Resources/延迟加载测试3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/06.Java核心知识/03.MyBatis/Resources/延迟加载测试3.png -------------------------------------------------------------------------------- /docs/06.Java核心知识/03.MyBatis/Resources/插件中的驱动.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/06.Java核心知识/03.MyBatis/Resources/插件中的驱动.png -------------------------------------------------------------------------------- /docs/06.Java核心知识/03.MyBatis/Resources/逆向执行结果.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/06.Java核心知识/03.MyBatis/Resources/逆向执行结果.png -------------------------------------------------------------------------------- /docs/06.Java核心知识/03.MyBatis/Resources/配置分页插件.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/06.Java核心知识/03.MyBatis/Resources/配置分页插件.png -------------------------------------------------------------------------------- /docs/97.读书笔记/05.架构整洁之道.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | ## 第1章 设计与架构究竟是什么 4 | 5 | 架构和设计没有区别。 6 | 7 | 软件架构的终极目标是,用最小的人力成本来满足构建和维护该系统的需求。 8 | 9 | 如果该系统的每次发布都会提升下一次变更的成本,那么这个设计就是不好的。 -------------------------------------------------------------------------------- /docs/images/spring-boot-05-data-jdbc/delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/images/spring-boot-05-data-jdbc/delete.png -------------------------------------------------------------------------------- /docs/images/spring-boot-05-data-jdbc/insert.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/images/spring-boot-05-data-jdbc/insert.png -------------------------------------------------------------------------------- /docs/images/spring-boot-05-data-jdbc/swagger.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/images/spring-boot-05-data-jdbc/swagger.png -------------------------------------------------------------------------------- /docs/images/spring-boot-06-druid-jdbc/login.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/images/spring-boot-06-druid-jdbc/login.png -------------------------------------------------------------------------------- /docs/images/spring-boot-06-druid-jdbc/select1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/images/spring-boot-06-druid-jdbc/select1.png -------------------------------------------------------------------------------- /docs/images/spring-boot-06-druid-jdbc/数据库连接.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/images/spring-boot-06-druid-jdbc/数据库连接.png -------------------------------------------------------------------------------- /docs/images/spring-boot-07-data-mybatis/druid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/images/spring-boot-07-data-mybatis/druid.png -------------------------------------------------------------------------------- /docs/meterial/docsify/image/default-costume.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/meterial/docsify/image/default-costume.png -------------------------------------------------------------------------------- /docs/01.PassJava/01.Introduction/3.微服务划分图.md: -------------------------------------------------------------------------------- 1 | PassJava 项目全套学习教程连载中,[关注公众号](#公众号)第一时间获取。 2 | 3 | ![mark](http://cdn.jayh.club/blog/20200410/IIBsmjviRsAx.png?imageslim) -------------------------------------------------------------------------------- /docs/01.PassJava/03.Deploy/18.部署监控平台Prometheus.md: -------------------------------------------------------------------------------- 1 | ```sh 2 | cd images_prometheus 3 | for i in `ls` 4 | do 5 | docker load -i $i 6 | done 7 | ``` -------------------------------------------------------------------------------- /docs/06.Java核心知识/03.MyBatis/Resources/MyBatis下载.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/06.Java核心知识/03.MyBatis/Resources/MyBatis下载.png -------------------------------------------------------------------------------- /docs/06.Java核心知识/03.MyBatis/Resources/trim测试结果.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/06.Java核心知识/03.MyBatis/Resources/trim测试结果.png -------------------------------------------------------------------------------- /docs/06.Java核心知识/03.MyBatis/Resources/增删改测试结果1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/06.Java核心知识/03.MyBatis/Resources/增删改测试结果1.png -------------------------------------------------------------------------------- /docs/06.Java核心知识/03.MyBatis/Resources/增删改测试结果2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/06.Java核心知识/03.MyBatis/Resources/增删改测试结果2.png -------------------------------------------------------------------------------- /docs/06.Java核心知识/03.MyBatis/Resources/默认的类型别名1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/06.Java核心知识/03.MyBatis/Resources/默认的类型别名1.png -------------------------------------------------------------------------------- /docs/06.Java核心知识/03.MyBatis/Resources/默认的类型别名2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/06.Java核心知识/03.MyBatis/Resources/默认的类型别名2.png -------------------------------------------------------------------------------- /docs/106.PHP/PHP的垃圾回收是怎么样的.assets/Pc9UbIojX8C0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/106.PHP/PHP的垃圾回收是怎么样的.assets/Pc9UbIojX8C0.png -------------------------------------------------------------------------------- /docs/107.其他/学习资料汇总.md: -------------------------------------------------------------------------------- 1 | # 学习资料汇总 2 | 3 | ## 消息队列 4 | 5 | Kafka:https://www.bilibili.com/video/BV1a4411B7V9?from=search&seid=417119087116376928 6 | 7 | ## 数据库 8 | 9 | -------------------------------------------------------------------------------- /docs/images/spring-boot-06-druid-jdbc/monitor1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/images/spring-boot-06-druid-jdbc/monitor1.png -------------------------------------------------------------------------------- /docs/images/spring-boot-07-data-mybatis/lombok.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/images/spring-boot-07-data-mybatis/lombok.png -------------------------------------------------------------------------------- /docs/images/spring-boot-07-data-mybatis/mybatis.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/images/spring-boot-07-data-mybatis/mybatis.png -------------------------------------------------------------------------------- /docs/images/spring-boot-07-data-mybatis/project.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/images/spring-boot-07-data-mybatis/project.png -------------------------------------------------------------------------------- /docs/images/spring-boot-07-data-mybatis/select.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/images/spring-boot-07-data-mybatis/select.png -------------------------------------------------------------------------------- /docs/images/spring-boot-07-data-mybatis/swagger.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/images/spring-boot-07-data-mybatis/swagger.png -------------------------------------------------------------------------------- /docs/06.Java核心知识/03.MyBatis/Resources/choose测试结果.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/06.Java核心知识/03.MyBatis/Resources/choose测试结果.png -------------------------------------------------------------------------------- /docs/06.Java核心知识/03.MyBatis/Resources/example测试结果.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/06.Java核心知识/03.MyBatis/Resources/example测试结果.png -------------------------------------------------------------------------------- /docs/06.Java核心知识/03.MyBatis/Resources/example的方法.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/06.Java核心知识/03.MyBatis/Resources/example的方法.png -------------------------------------------------------------------------------- /docs/06.Java核心知识/03.MyBatis/Resources/foreach测试结果1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/06.Java核心知识/03.MyBatis/Resources/foreach测试结果1.png -------------------------------------------------------------------------------- /docs/06.Java核心知识/03.MyBatis/Resources/foreach测试结果2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/06.Java核心知识/03.MyBatis/Resources/foreach测试结果2.png -------------------------------------------------------------------------------- /docs/10.SQL/02.SQLServer/image-20200903105308688.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/10.SQL/02.SQLServer/image-20200903105308688.png -------------------------------------------------------------------------------- /docs/10.SQL/02.SQLServer/image-20200903105817267.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/10.SQL/02.SQLServer/image-20200903105817267.png -------------------------------------------------------------------------------- /docs/108.MacBook使用技巧/09.Mac应用问题.md: -------------------------------------------------------------------------------- 1 | ## 01.破音问题 2 | 3 | ![image-20220420202354810](http://cdn.jayh.club/uPic/image-20220420202354810goZemK.png) 4 | 5 | 48000Hz 改为 44100 Hz -------------------------------------------------------------------------------- /docs/93.整理成PDF/悟空出品.assets/image-20200918142907132.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/93.整理成PDF/悟空出品.assets/image-20200918142907132.png -------------------------------------------------------------------------------- /docs/98.idea/05.魔幻的四个私活经历,到底是亏了还是赚了?.assets/小游戏动图.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/98.idea/05.魔幻的四个私活经历,到底是亏了还是赚了?.assets/小游戏动图.gif -------------------------------------------------------------------------------- /docs/images/spring-boot-05-data-jdbc/create_table.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/images/spring-boot-05-data-jdbc/create_table.png -------------------------------------------------------------------------------- /docs/01.PassJava/01.Introduction/2.项目微服务架构图.md: -------------------------------------------------------------------------------- 1 | PassJava 项目全套学习教程连载中,[关注公众号](#公众号)第一时间获取。 2 | 3 | ![mark](http://cdn.jayh.club/blog/20200407/scg1XhlvGbUV.png?imageslim) 4 | 5 | -------------------------------------------------------------------------------- /docs/06.Java核心知识/03.MyBatis/Resources/dependency中的驱动.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/06.Java核心知识/03.MyBatis/Resources/dependency中的驱动.png -------------------------------------------------------------------------------- /docs/07.并发多线程/06.图解队列.assets/image-20200905165255246.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/07.并发多线程/06.图解队列.assets/image-20200905165255246.png -------------------------------------------------------------------------------- /docs/07.并发多线程/06.图解队列.assets/image-20200906005101077.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/07.并发多线程/06.图解队列.assets/image-20200906005101077.png -------------------------------------------------------------------------------- /docs/07.并发多线程/06.图解队列.assets/image-20200906105035218.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/07.并发多线程/06.图解队列.assets/image-20200906105035218.png -------------------------------------------------------------------------------- /docs/07.并发多线程/06.图解队列.assets/image-20200906105341185.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/07.并发多线程/06.图解队列.assets/image-20200906105341185.png -------------------------------------------------------------------------------- /docs/07.并发多线程/06.图解队列.assets/image-20200906105739290.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/07.并发多线程/06.图解队列.assets/image-20200906105739290.png -------------------------------------------------------------------------------- /docs/07.并发多线程/06.图解队列.assets/image-20200906110240725.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/07.并发多线程/06.图解队列.assets/image-20200906110240725.png -------------------------------------------------------------------------------- /docs/07.并发多线程/06.图解队列.assets/image-20200906163241324.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/07.并发多线程/06.图解队列.assets/image-20200906163241324.png -------------------------------------------------------------------------------- /docs/07.并发多线程/06.图解队列.assets/image-20200906233348321.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/07.并发多线程/06.图解队列.assets/image-20200906233348321.png -------------------------------------------------------------------------------- /docs/07.并发多线程/06.图解队列.assets/image-20200907144652830.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/07.并发多线程/06.图解队列.assets/image-20200907144652830.png -------------------------------------------------------------------------------- /docs/07.并发多线程/06.图解队列.assets/image-20200907215851668.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/07.并发多线程/06.图解队列.assets/image-20200907215851668.png -------------------------------------------------------------------------------- /docs/07.并发多线程/06.图解队列.assets/image-20200908111601662.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/07.并发多线程/06.图解队列.assets/image-20200908111601662.png -------------------------------------------------------------------------------- /docs/07.并发多线程/06.图解队列.assets/image-20200908160023517.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/07.并发多线程/06.图解队列.assets/image-20200908160023517.png -------------------------------------------------------------------------------- /docs/07.并发多线程/06.图解队列.assets/image-20200908163623570.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/07.并发多线程/06.图解队列.assets/image-20200908163623570.png -------------------------------------------------------------------------------- /docs/07.并发多线程/06.图解队列.assets/image-20200908165328007.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/07.并发多线程/06.图解队列.assets/image-20200908165328007.png -------------------------------------------------------------------------------- /docs/07.并发多线程/06.图解队列.assets/image-20200908230104924.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/07.并发多线程/06.图解队列.assets/image-20200908230104924.png -------------------------------------------------------------------------------- /docs/109.学习笔记/03.高并发系统设计/28.多机房部署.md: -------------------------------------------------------------------------------- 1 | ![](http://cdn.jayh.club/blog/20210703/DqBS9AVolUWz.png?imageslim) 2 | 3 | ![](http://cdn.jayh.club/blog/20210703/Rm406m1k5QT0.png?imageslim) -------------------------------------------------------------------------------- /docs/90.开源/01.傻傻分不清的开源协议.md: -------------------------------------------------------------------------------- 1 | 最近闹得很凶的侵权事件传得沸沸扬扬,整个事件简单概括来说,慕课网的某位老师将号主 十三 的开源项目 newbee-mall 当做 Java 就业班的终极项目,事先也没有跟这位号主打招呼。 2 | 3 | 而慕课网也没有做出正确的方式来处理这件事,挂在他们网站上的课程还没有下架。 4 | 5 | -------------------------------------------------------------------------------- /docs/95.go/01.Go初次见面会.assets/image-20200820122109979.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/95.go/01.Go初次见面会.assets/image-20200820122109979.png -------------------------------------------------------------------------------- /docs/95.go/01.Go初次见面会.assets/image-20200820123211514.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/95.go/01.Go初次见面会.assets/image-20200820123211514.png -------------------------------------------------------------------------------- /docs/95.go/01.Go初次见面会.assets/image-20200820123217585.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/95.go/01.Go初次见面会.assets/image-20200820123217585.png -------------------------------------------------------------------------------- /docs/99.tools/93.IDEA快捷键.md: -------------------------------------------------------------------------------- 1 | # IDEA快捷键 2 | 3 | ## 1.注释 4 | 5 | - Java文件 6 | 7 | CTRL + / 8 | 9 | - xml文件 10 | 11 | CTRL + SHIFT + / 12 | 13 | CTRL + SHIFT + \ -------------------------------------------------------------------------------- /docs/images/spring-boot-05-data-jdbc/create_swagger.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/images/spring-boot-05-data-jdbc/create_swagger.png -------------------------------------------------------------------------------- /docs/images/spring-boot-05-data-jdbc/delete_swagger.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/images/spring-boot-05-data-jdbc/delete_swagger.png -------------------------------------------------------------------------------- /docs/images/spring-boot-05-data-jdbc/update_swagger.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/images/spring-boot-05-data-jdbc/update_swagger.png -------------------------------------------------------------------------------- /docs/images/spring-boot-06-druid-jdbc/Druid_Monitor.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/images/spring-boot-06-druid-jdbc/Druid_Monitor.PNG -------------------------------------------------------------------------------- /docs/images/spring-boot-06-druid-jdbc/Druid_Monitor1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/images/spring-boot-06-druid-jdbc/Druid_Monitor1.png -------------------------------------------------------------------------------- /docs/images/spring-boot-06-druid-jdbc/Druid_Setting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/images/spring-boot-06-druid-jdbc/Druid_Setting.png -------------------------------------------------------------------------------- /docs/images/spring-boot-07-data-mybatis/pom_mybatis.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/images/spring-boot-07-data-mybatis/pom_mybatis.png -------------------------------------------------------------------------------- /docs/01.PassJava/03.Deploy/03.Prometheus/03.Promethues架构剖析.md: -------------------------------------------------------------------------------- 1 | ## Prometheus 架构 2 | 3 | ![image-20221104154750008](http://cdn.jayh.club/uPic/image-20221104154750008zi8YzeEqXl6f.png) -------------------------------------------------------------------------------- /docs/102.学习群问题汇总/03.问题复盘.assets/image-20201102203954585.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/102.学习群问题汇总/03.问题复盘.assets/image-20201102203954585.png -------------------------------------------------------------------------------- /docs/99.tools/自定义Markdown神器Typora的主题样式.assets/133227331.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/99.tools/自定义Markdown神器Typora的主题样式.assets/133227331.png -------------------------------------------------------------------------------- /docs/99.tools/自定义Markdown神器Typora的主题样式.assets/133336595.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/99.tools/自定义Markdown神器Typora的主题样式.assets/133336595.png -------------------------------------------------------------------------------- /docs/99.tools/自定义Markdown神器Typora的主题样式.assets/150546490.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/99.tools/自定义Markdown神器Typora的主题样式.assets/150546490.png -------------------------------------------------------------------------------- /docs/99.tools/自定义Markdown神器Typora的主题样式.assets/150911519.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/99.tools/自定义Markdown神器Typora的主题样式.assets/150911519.png -------------------------------------------------------------------------------- /docs/99.tools/自定义Markdown神器Typora的主题样式.assets/151019776.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/99.tools/自定义Markdown神器Typora的主题样式.assets/151019776.png -------------------------------------------------------------------------------- /docs/99.tools/自定义Markdown神器Typora的主题样式.assets/151154097.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/99.tools/自定义Markdown神器Typora的主题样式.assets/151154097.png -------------------------------------------------------------------------------- /docs/99.tools/自定义Markdown神器Typora的主题样式.assets/151217779.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/99.tools/自定义Markdown神器Typora的主题样式.assets/151217779.png -------------------------------------------------------------------------------- /docs/99.tools/自定义Markdown神器Typora的主题样式.assets/151256862.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/99.tools/自定义Markdown神器Typora的主题样式.assets/151256862.png -------------------------------------------------------------------------------- /docs/99.tools/自定义Markdown神器Typora的主题样式.assets/152103558.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/99.tools/自定义Markdown神器Typora的主题样式.assets/152103558.png -------------------------------------------------------------------------------- /docs/99.tools/自定义Markdown神器Typora的主题样式.assets/152654883.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/99.tools/自定义Markdown神器Typora的主题样式.assets/152654883.png -------------------------------------------------------------------------------- /docs/99.tools/自定义Markdown神器Typora的主题样式.assets/152746054.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/99.tools/自定义Markdown神器Typora的主题样式.assets/152746054.png -------------------------------------------------------------------------------- /docs/99.tools/自定义Markdown神器Typora的主题样式.assets/152827346.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/99.tools/自定义Markdown神器Typora的主题样式.assets/152827346.png -------------------------------------------------------------------------------- /docs/images/spring-boot-05-data-jdbc/query_all_swagger.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/images/spring-boot-05-data-jdbc/query_all_swagger.png -------------------------------------------------------------------------------- /docs/images/spring-boot-05-data-jdbc/query_id_swagger.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/images/spring-boot-05-data-jdbc/query_id_swagger.png -------------------------------------------------------------------------------- /docs/06.Java核心知识/03.MyBatis/Resources/执行MBG插件的generate目标.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/06.Java核心知识/03.MyBatis/Resources/执行MBG插件的generate目标.png -------------------------------------------------------------------------------- /docs/07.并发多线程/01.volatile.assets/image-20200817102904240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/07.并发多线程/01.volatile.assets/image-20200817102904240.png -------------------------------------------------------------------------------- /docs/07.并发多线程/01.volatile.assets/image-20200817134523840.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/07.并发多线程/01.volatile.assets/image-20200817134523840.png -------------------------------------------------------------------------------- /docs/07.并发多线程/01.volatile.assets/image-20200817163859759.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/07.并发多线程/01.volatile.assets/image-20200817163859759.png -------------------------------------------------------------------------------- /docs/106.PHP/PHP的垃圾回收是怎么样的.assets/image-20201119201625453.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/106.PHP/PHP的垃圾回收是怎么样的.assets/image-20201119201625453.png -------------------------------------------------------------------------------- /docs/106.PHP/PHP的垃圾回收是怎么样的.assets/image-20201119201657926.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/106.PHP/PHP的垃圾回收是怎么样的.assets/image-20201119201657926.png -------------------------------------------------------------------------------- /docs/106.PHP/PHP的垃圾回收是怎么样的.assets/image-20201119202720022.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/106.PHP/PHP的垃圾回收是怎么样的.assets/image-20201119202720022.png -------------------------------------------------------------------------------- /docs/109.学习笔记/04.Java开发规范/01.阿里嵩山版开发规范.md: -------------------------------------------------------------------------------- 1 | 最新 Java 开发手册 - 嵩山版 ,公众号回复`开发手册`免费获取。 2 | 3 | 思维导图在线版(持续更新中):[点我](https://www.processon.com/view/link/60df8cd7e0b34d238be5ca28) 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /docs/99.tools/96.HTML特殊符号.assets/image-20200910094330644.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/99.tools/96.HTML特殊符号.assets/image-20200910094330644.png -------------------------------------------------------------------------------- /docs/07.并发多线程/05.查漏补缺-并发中的各种锁.assets/image-20200831133815338.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/07.并发多线程/05.查漏补缺-并发中的各种锁.assets/image-20200831133815338.png -------------------------------------------------------------------------------- /docs/07.并发多线程/97.Java并发编程课程大纲.assets/image-20200909144440202.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/07.并发多线程/97.Java并发编程课程大纲.assets/image-20200909144440202.png -------------------------------------------------------------------------------- /docs/109.学习笔记/03.高并发系统设计/35.流量控制.md: -------------------------------------------------------------------------------- 1 | 流量控制 2 | 3 | ![](http://cdn.jayh.club/blog/20210710/QNqAUekV5iOY.png?imageslim) 4 | 5 | ![](http://cdn.jayh.club/blog/20210710/4KG2r271EIWd.png?imageslim) -------------------------------------------------------------------------------- /docs/images/spring-boot-06-druid-jdbc/Druid_Maven_Repository.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/images/spring-boot-06-druid-jdbc/Druid_Maven_Repository.png -------------------------------------------------------------------------------- /docs/06.Java核心知识/03.MyBatis/Resources/mapper接口和mapper映射文件在同一包下.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/06.Java核心知识/03.MyBatis/Resources/mapper接口和mapper映射文件在同一包下.png -------------------------------------------------------------------------------- /docs/102.学习群问题汇总/01.删除binlog问题.assets/image-20201028222652452.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/102.学习群问题汇总/01.删除binlog问题.assets/image-20201028222652452.png -------------------------------------------------------------------------------- /docs/108.MacBook使用技巧/04.M1安装Win10.md: -------------------------------------------------------------------------------- 1 | 问题: 2 | 3 | PD 启动Win10,出现安全启动防止操作系统启动 4 | 5 | ![](http://cdn.jayh.club/uPic/219cd9a20cf431ad4f0078d70e36acaf2fdd983dF1gH8V.jpg) 6 | 7 | 解决方案:虚拟机-硬件,移除 TRM 芯片 -------------------------------------------------------------------------------- /docs/109.学习笔记/01.Redis核心技术与实战/21.每秒一万次请求的系统要做服务化拆分吗?md: -------------------------------------------------------------------------------- 1 | ![](http://cdn.jayh.club/blog/20210702/wLnkpSPGyPII.png?imageslim) 2 | 3 | ![](http://cdn.jayh.club/blog/20210702/LAlRKgHDyDwE.png?imageslim) -------------------------------------------------------------------------------- /docs/109.学习笔记/03.高并发系统设计/24.注册中心.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | ![](http://cdn.jayh.club/blog/20210703/HU5hMDPd7MXR.png?imageslim) 4 | 5 | ![](http://cdn.jayh.club/blog/20210703/t4Q66Xcc8Krz.png?imageslim) 6 | 7 | -------------------------------------------------------------------------------- /docs/images/spring-boot-06-druid-jdbc/Druid_Maven_Repository2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/images/spring-boot-06-druid-jdbc/Druid_Maven_Repository2.png -------------------------------------------------------------------------------- /docs/109.学习笔记/03.高并发系统设计/00.思维导图.md: -------------------------------------------------------------------------------- 1 | 思维导图在线版(持续更新中):[点我](https://www.processon.com/mindmap/60de60ebf346fb04d2d44bcf) 2 | 3 | ![](http://cdn.jayh.club/blog/20210702/KKrHwNoquvst.png?imageslim) 4 | 5 | -------------------------------------------------------------------------------- /docs/106.PHP/PHP的垃圾回收是怎么样的.assets/414640-20180620195053392-44636031.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/106.PHP/PHP的垃圾回收是怎么样的.assets/414640-20180620195053392-44636031.png -------------------------------------------------------------------------------- /docs/98.idea/05.魔幻的四个私活经历,到底是亏了还是赚了?.assets/image-20200928144403591.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/98.idea/05.魔幻的四个私活经历,到底是亏了还是赚了?.assets/image-20200928144403591.png -------------------------------------------------------------------------------- /docs/98.idea/05.魔幻的四个私活经历,到底是亏了还是赚了?.assets/image-20200928144723334.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/98.idea/05.魔幻的四个私活经历,到底是亏了还是赚了?.assets/image-20200928144723334.png -------------------------------------------------------------------------------- /docs/01.PassJava/03.Deploy/本地部署 Jenkins.assets/image-20230524105715516.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/01.PassJava/03.Deploy/本地部署 Jenkins.assets/image-20230524105715516.png -------------------------------------------------------------------------------- /docs/01.PassJava/03.Deploy/本地部署 Jenkins.assets/image-20230524111022132.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/01.PassJava/03.Deploy/本地部署 Jenkins.assets/image-20230524111022132.png -------------------------------------------------------------------------------- /docs/01.PassJava/03.Deploy/本地部署 Jenkins.assets/image-20230524111911082.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/01.PassJava/03.Deploy/本地部署 Jenkins.assets/image-20230524111911082.png -------------------------------------------------------------------------------- /docs/01.PassJava/03.Deploy/本地部署 Jenkins.assets/image-20230524112038891.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/01.PassJava/03.Deploy/本地部署 Jenkins.assets/image-20230524112038891.png -------------------------------------------------------------------------------- /docs/01.PassJava/03.Deploy/本地部署 Jenkins.assets/image-20230524112124574.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/01.PassJava/03.Deploy/本地部署 Jenkins.assets/image-20230524112124574.png -------------------------------------------------------------------------------- /docs/01.PassJava/03.Deploy/本地部署 Jenkins.assets/image-20230524112212520.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/01.PassJava/03.Deploy/本地部署 Jenkins.assets/image-20230524112212520.png -------------------------------------------------------------------------------- /docs/01.PassJava/03.Deploy/本地部署 Jenkins.assets/image-20230524112233219.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/01.PassJava/03.Deploy/本地部署 Jenkins.assets/image-20230524112233219.png -------------------------------------------------------------------------------- /docs/01.PassJava/03.Deploy/本地部署 Jenkins.assets/image-20230524112304729.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/01.PassJava/03.Deploy/本地部署 Jenkins.assets/image-20230524112304729.png -------------------------------------------------------------------------------- /docs/01.PassJava/03.Deploy/本地部署 Jenkins.assets/image-20230525092717632.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/01.PassJava/03.Deploy/本地部署 Jenkins.assets/image-20230525092717632.png -------------------------------------------------------------------------------- /docs/01.PassJava/03.Deploy/本地部署 Jenkins.assets/image-20230525092839557.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/01.PassJava/03.Deploy/本地部署 Jenkins.assets/image-20230525092839557.png -------------------------------------------------------------------------------- /docs/01.PassJava/03.Deploy/本地部署 Jenkins.assets/image-20230525092850337.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/01.PassJava/03.Deploy/本地部署 Jenkins.assets/image-20230525092850337.png -------------------------------------------------------------------------------- /docs/01.PassJava/03.Deploy/本地部署 Jenkins.assets/image-20230525092922185.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/01.PassJava/03.Deploy/本地部署 Jenkins.assets/image-20230525092922185.png -------------------------------------------------------------------------------- /docs/01.PassJava/03.Deploy/本地部署 Jenkins.assets/image-20230525092946152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/01.PassJava/03.Deploy/本地部署 Jenkins.assets/image-20230525092946152.png -------------------------------------------------------------------------------- /docs/01.PassJava/03.Deploy/本地部署 Jenkins.assets/image-20230526165817895.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/01.PassJava/03.Deploy/本地部署 Jenkins.assets/image-20230526165817895.png -------------------------------------------------------------------------------- /docs/01.PassJava/03.Deploy/本地部署 Jenkins.assets/image-20230526170026313.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/01.PassJava/03.Deploy/本地部署 Jenkins.assets/image-20230526170026313.png -------------------------------------------------------------------------------- /docs/01.PassJava/03.Deploy/本地部署 Jenkins.assets/image-20230602144613432.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/01.PassJava/03.Deploy/本地部署 Jenkins.assets/image-20230602144613432.png -------------------------------------------------------------------------------- /docs/01.PassJava/03.Deploy/本地部署 Jenkins.assets/image-20230602151944065.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/01.PassJava/03.Deploy/本地部署 Jenkins.assets/image-20230602151944065.png -------------------------------------------------------------------------------- /docs/01.PassJava/03.Deploy/本地部署 Jenkins.assets/image-20230602152134248.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/01.PassJava/03.Deploy/本地部署 Jenkins.assets/image-20230602152134248.png -------------------------------------------------------------------------------- /docs/01.PassJava/03.Deploy/本地部署 Jenkins.assets/image-20230602153507389.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/01.PassJava/03.Deploy/本地部署 Jenkins.assets/image-20230602153507389.png -------------------------------------------------------------------------------- /docs/01.PassJava/03.Deploy/本地部署 Jenkins.assets/image-20230602154515672.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/01.PassJava/03.Deploy/本地部署 Jenkins.assets/image-20230602154515672.png -------------------------------------------------------------------------------- /docs/01.PassJava/03.Deploy/本地部署 Jenkins.assets/image-20230602155740947.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/01.PassJava/03.Deploy/本地部署 Jenkins.assets/image-20230602155740947.png -------------------------------------------------------------------------------- /docs/01.PassJava/03.Deploy/本地部署 Jenkins.assets/image-20230602155802285.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/01.PassJava/03.Deploy/本地部署 Jenkins.assets/image-20230602155802285.png -------------------------------------------------------------------------------- /docs/01.PassJava/03.Deploy/本地部署 Jenkins.assets/image-20230602162300732.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/01.PassJava/03.Deploy/本地部署 Jenkins.assets/image-20230602162300732.png -------------------------------------------------------------------------------- /docs/01.PassJava/03.Deploy/本地部署 Jenkins.assets/image-20230602163000610.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/01.PassJava/03.Deploy/本地部署 Jenkins.assets/image-20230602163000610.png -------------------------------------------------------------------------------- /docs/01.PassJava/03.Deploy/本地部署 Jenkins.assets/image-20230602163528221.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/01.PassJava/03.Deploy/本地部署 Jenkins.assets/image-20230602163528221.png -------------------------------------------------------------------------------- /docs/01.PassJava/03.Deploy/本地部署 Jenkins.assets/image-20230602164456545.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/01.PassJava/03.Deploy/本地部署 Jenkins.assets/image-20230602164456545.png -------------------------------------------------------------------------------- /docs/01.PassJava/03.Deploy/本地部署 Jenkins.assets/image-20230614084939143.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/01.PassJava/03.Deploy/本地部署 Jenkins.assets/image-20230614084939143.png -------------------------------------------------------------------------------- /docs/01.PassJava/03.Deploy/本地部署 Jenkins.assets/image-20230614085611343.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/01.PassJava/03.Deploy/本地部署 Jenkins.assets/image-20230614085611343.png -------------------------------------------------------------------------------- /docs/01.PassJava/03.Deploy/本地部署 Jenkins.assets/image-20230614085735919.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/01.PassJava/03.Deploy/本地部署 Jenkins.assets/image-20230614085735919.png -------------------------------------------------------------------------------- /docs/01.PassJava/03.Deploy/本地部署 Jenkins.assets/image-20230614091659535.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/01.PassJava/03.Deploy/本地部署 Jenkins.assets/image-20230614091659535.png -------------------------------------------------------------------------------- /docs/01.PassJava/03.Deploy/本地部署 Jenkins.assets/image-20230614092414704.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/01.PassJava/03.Deploy/本地部署 Jenkins.assets/image-20230614092414704.png -------------------------------------------------------------------------------- /docs/01.PassJava/03.Deploy/本地部署 Jenkins.assets/image-20230614092542460.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/01.PassJava/03.Deploy/本地部署 Jenkins.assets/image-20230614092542460.png -------------------------------------------------------------------------------- /docs/01.PassJava/03.Deploy/本地部署 Jenkins.assets/image-20230614092829142.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/01.PassJava/03.Deploy/本地部署 Jenkins.assets/image-20230614092829142.png -------------------------------------------------------------------------------- /docs/102.学习群问题汇总/03.问题复盘.assets/image-20201102203954585-1604365590458.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/102.学习群问题汇总/03.问题复盘.assets/image-20201102203954585-1604365590458.png -------------------------------------------------------------------------------- /docs/97.读书笔记/02.人生效率手册.md: -------------------------------------------------------------------------------- 1 | 昨天不是看完了 萌姐的人生效率手册么,今天整理了一份思维导图。 这本书里面少量鸡汤,大部分都是很实用的提高自己的技巧,值得一读。 我感觉里面最核心的思想就是 早起,4点起床学习,修炼硬本领,输入+输出结合。 另外输出是可以复利的! 笔记见下方。 2 | 3 | ![](http://cdn.jayh.club/blog/20211112/MgQ5zH7OVijU.png) -------------------------------------------------------------------------------- /docs/07.并发多线程/04.Java并发必知必会第四弹:线程不安全的集合类.assets/image-20200827141943032.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/07.并发多线程/04.Java并发必知必会第四弹:线程不安全的集合类.assets/image-20200827141943032.png -------------------------------------------------------------------------------- /docs/07.并发多线程/04.Java并发必知必会第四弹:线程不安全的集合类.assets/image-20200827172119797.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/07.并发多线程/04.Java并发必知必会第四弹:线程不安全的集合类.assets/image-20200827172119797.png -------------------------------------------------------------------------------- /docs/07.并发多线程/04.Java并发必知必会第四弹:线程不安全的集合类.assets/image-20200827172125513.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/07.并发多线程/04.Java并发必知必会第四弹:线程不安全的集合类.assets/image-20200827172125513.png -------------------------------------------------------------------------------- /docs/02.SpringCloud/11.链路追踪/01.添加traceId跟踪日志.assets/image-20220908150529573.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/02.SpringCloud/11.链路追踪/01.添加traceId跟踪日志.assets/image-20220908150529573.png -------------------------------------------------------------------------------- /docs/02.SpringCloud/11.链路追踪/01.添加traceId跟踪日志.assets/image-20220908150803867.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/02.SpringCloud/11.链路追踪/01.添加traceId跟踪日志.assets/image-20220908150803867.png -------------------------------------------------------------------------------- /docs/02.SpringCloud/11.链路追踪/01.添加traceId跟踪日志.assets/image-20220908150928027.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/02.SpringCloud/11.链路追踪/01.添加traceId跟踪日志.assets/image-20220908150928027.png -------------------------------------------------------------------------------- /docs/02.SpringCloud/11.链路追踪/01.添加traceId跟踪日志.assets/image-20220908151032677.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/02.SpringCloud/11.链路追踪/01.添加traceId跟踪日志.assets/image-20220908151032677.png -------------------------------------------------------------------------------- /docs/04.Architecture/01.架构图解/微服务架构中的两款流量防卫兵.assets/image-20201101101010116.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/04.Architecture/01.架构图解/微服务架构中的两款流量防卫兵.assets/image-20201101101010116.png -------------------------------------------------------------------------------- /docs/04.Architecture/01.架构图解/微服务架构中的两款流量防卫兵.assets/image-20201101102053470.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/04.Architecture/01.架构图解/微服务架构中的两款流量防卫兵.assets/image-20201101102053470.png -------------------------------------------------------------------------------- /docs/04.Architecture/01.架构图解/微服务架构中的两款流量防卫兵.assets/image-20201101102703627.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/04.Architecture/01.架构图解/微服务架构中的两款流量防卫兵.assets/image-20201101102703627.png -------------------------------------------------------------------------------- /docs/04.Architecture/01.架构图解/微服务架构中的两款流量防卫兵.assets/image-20201101102809048.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/04.Architecture/01.架构图解/微服务架构中的两款流量防卫兵.assets/image-20201101102809048.png -------------------------------------------------------------------------------- /docs/04.Architecture/01.架构图解/微服务架构中的两款流量防卫兵.assets/image-20201101103520316.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/04.Architecture/01.架构图解/微服务架构中的两款流量防卫兵.assets/image-20201101103520316.png -------------------------------------------------------------------------------- /docs/04.Architecture/01.架构图解/微服务架构中的两款流量防卫兵.assets/image-20201101131228831.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/04.Architecture/01.架构图解/微服务架构中的两款流量防卫兵.assets/image-20201101131228831.png -------------------------------------------------------------------------------- /docs/04.Architecture/01.架构图解/微服务架构中的两款流量防卫兵.assets/image-20201101131233611.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/04.Architecture/01.架构图解/微服务架构中的两款流量防卫兵.assets/image-20201101131233611.png -------------------------------------------------------------------------------- /docs/04.Architecture/01.架构图解/微服务架构中的两款流量防卫兵.assets/image-20201101131624248.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/04.Architecture/01.架构图解/微服务架构中的两款流量防卫兵.assets/image-20201101131624248.png -------------------------------------------------------------------------------- /docs/04.Architecture/01.架构图解/微服务架构中的两款流量防卫兵.assets/image-20201101132129234.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/04.Architecture/01.架构图解/微服务架构中的两款流量防卫兵.assets/image-20201101132129234.png -------------------------------------------------------------------------------- /docs/04.Architecture/01.架构图解/微服务架构中的两款流量防卫兵.assets/image-20201101202812737.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/04.Architecture/01.架构图解/微服务架构中的两款流量防卫兵.assets/image-20201101202812737.png -------------------------------------------------------------------------------- /docs/04.Architecture/04.高可用集群篇/MySQL主从同步问题.assets/image-20230412085649154.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/04.Architecture/04.高可用集群篇/MySQL主从同步问题.assets/image-20230412085649154.png -------------------------------------------------------------------------------- /docs/04.Architecture/04.高可用集群篇/MySQL主从同步问题.assets/image-20230412085710146.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/04.Architecture/04.高可用集群篇/MySQL主从同步问题.assets/image-20230412085710146.png -------------------------------------------------------------------------------- /docs/04.Architecture/04.高可用集群篇/MySQL主从同步问题.assets/image-20230412092126570.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/04.Architecture/04.高可用集群篇/MySQL主从同步问题.assets/image-20230412092126570.png -------------------------------------------------------------------------------- /docs/04.Architecture/04.高可用集群篇/MySQL主从同步问题.assets/image-20230412092505005.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/04.Architecture/04.高可用集群篇/MySQL主从同步问题.assets/image-20230412092505005.png -------------------------------------------------------------------------------- /docs/04.Architecture/04.高可用集群篇/MySQL主从同步问题.assets/image-20230412093009267.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/04.Architecture/04.高可用集群篇/MySQL主从同步问题.assets/image-20230412093009267.png -------------------------------------------------------------------------------- /docs/04.Architecture/04.高可用集群篇/MySQL主从同步问题.assets/image-20230412093505743.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/04.Architecture/04.高可用集群篇/MySQL主从同步问题.assets/image-20230412093505743.png -------------------------------------------------------------------------------- /docs/04.Architecture/04.高可用集群篇/MySQL主从同步问题.assets/image-20230412093911094.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/04.Architecture/04.高可用集群篇/MySQL主从同步问题.assets/image-20230412093911094.png -------------------------------------------------------------------------------- /docs/04.Architecture/04.高可用集群篇/MySQL主从同步问题.assets/image-20230412093957584.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/04.Architecture/04.高可用集群篇/MySQL主从同步问题.assets/image-20230412093957584.png -------------------------------------------------------------------------------- /docs/04.Architecture/04.高可用集群篇/MySQL主从同步问题.assets/image-20230412094250612.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/04.Architecture/04.高可用集群篇/MySQL主从同步问题.assets/image-20230412094250612.png -------------------------------------------------------------------------------- /docs/04.Architecture/04.高可用集群篇/MySQL主从同步问题.assets/image-20230412100125722.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/04.Architecture/04.高可用集群篇/MySQL主从同步问题.assets/image-20230412100125722.png -------------------------------------------------------------------------------- /docs/04.Architecture/04.高可用集群篇/MySQL主从同步问题.assets/image-20230412100549486.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/04.Architecture/04.高可用集群篇/MySQL主从同步问题.assets/image-20230412100549486.png -------------------------------------------------------------------------------- /docs/04.Architecture/04.高可用集群篇/MySQL主从同步问题.assets/image-20230412104705411.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/04.Architecture/04.高可用集群篇/MySQL主从同步问题.assets/image-20230412104705411.png -------------------------------------------------------------------------------- /docs/04.Architecture/04.高可用集群篇/MySQL主从同步问题.assets/image-20230412110648964.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/04.Architecture/04.高可用集群篇/MySQL主从同步问题.assets/image-20230412110648964.png -------------------------------------------------------------------------------- /docs/04.Architecture/04.高可用集群篇/MySQL主从同步问题.assets/image-20230412112357427.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/04.Architecture/04.高可用集群篇/MySQL主从同步问题.assets/image-20230412112357427.png -------------------------------------------------------------------------------- /docs/04.Architecture/04.高可用集群篇/MySQL主从同步问题.assets/image-20230412113802652.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/04.Architecture/04.高可用集群篇/MySQL主从同步问题.assets/image-20230412113802652.png -------------------------------------------------------------------------------- /docs/04.Architecture/04.高可用集群篇/MySQL主从同步问题.assets/image-20230412114117482.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/04.Architecture/04.高可用集群篇/MySQL主从同步问题.assets/image-20230412114117482.png -------------------------------------------------------------------------------- /docs/04.Architecture/04.高可用集群篇/MySQL主从同步问题.assets/image-20230412115332313.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/04.Architecture/04.高可用集群篇/MySQL主从同步问题.assets/image-20230412115332313.png -------------------------------------------------------------------------------- /docs/04.Architecture/04.高可用集群篇/MySQL主从同步问题.assets/image-20230412143612066.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/04.Architecture/04.高可用集群篇/MySQL主从同步问题.assets/image-20230412143612066.png -------------------------------------------------------------------------------- /docs/04.Architecture/04.高可用集群篇/MySQL主从同步问题.assets/image-20230412145033259.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/04.Architecture/04.高可用集群篇/MySQL主从同步问题.assets/image-20230412145033259.png -------------------------------------------------------------------------------- /docs/04.Architecture/04.高可用集群篇/MySQL主从同步问题.assets/image-20230412150816383.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/04.Architecture/04.高可用集群篇/MySQL主从同步问题.assets/image-20230412150816383.png -------------------------------------------------------------------------------- /docs/04.Architecture/04.高可用集群篇/MySQL主从同步问题.assets/image-20230412151235524.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/04.Architecture/04.高可用集群篇/MySQL主从同步问题.assets/image-20230412151235524.png -------------------------------------------------------------------------------- /docs/04.Architecture/04.高可用集群篇/MySQL主从同步问题.assets/image-20230412151743496.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/04.Architecture/04.高可用集群篇/MySQL主从同步问题.assets/image-20230412151743496.png -------------------------------------------------------------------------------- /docs/04.Architecture/04.高可用集群篇/MySQL主从同步问题.assets/image-20230412152007116.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/04.Architecture/04.高可用集群篇/MySQL主从同步问题.assets/image-20230412152007116.png -------------------------------------------------------------------------------- /docs/04.Architecture/04.高可用集群篇/MySQL主从同步问题.assets/image-20230412160855594.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/04.Architecture/04.高可用集群篇/MySQL主从同步问题.assets/image-20230412160855594.png -------------------------------------------------------------------------------- /docs/06.Java核心知识/04.JVM进阶/01.100道JVM面试题+11张思维导图就是让你懂JVM.assets/56RafTP5SIu9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/06.Java核心知识/04.JVM进阶/01.100道JVM面试题+11张思维导图就是让你懂JVM.assets/56RafTP5SIu9.png -------------------------------------------------------------------------------- /docs/06.Java核心知识/04.JVM进阶/01.100道JVM面试题+11张思维导图就是让你懂JVM.assets/5mOIWyuPMFpp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/06.Java核心知识/04.JVM进阶/01.100道JVM面试题+11张思维导图就是让你懂JVM.assets/5mOIWyuPMFpp.png -------------------------------------------------------------------------------- /docs/06.Java核心知识/04.JVM进阶/01.100道JVM面试题+11张思维导图就是让你懂JVM.assets/6syuEafFLB5M.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/06.Java核心知识/04.JVM进阶/01.100道JVM面试题+11张思维导图就是让你懂JVM.assets/6syuEafFLB5M.png -------------------------------------------------------------------------------- /docs/06.Java核心知识/04.JVM进阶/01.100道JVM面试题+11张思维导图就是让你懂JVM.assets/HW6OcPGDyP3I.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/06.Java核心知识/04.JVM进阶/01.100道JVM面试题+11张思维导图就是让你懂JVM.assets/HW6OcPGDyP3I.png -------------------------------------------------------------------------------- /docs/06.Java核心知识/04.JVM进阶/01.100道JVM面试题+11张思维导图就是让你懂JVM.assets/LU3Lqg5ougws.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/06.Java核心知识/04.JVM进阶/01.100道JVM面试题+11张思维导图就是让你懂JVM.assets/LU3Lqg5ougws.png -------------------------------------------------------------------------------- /docs/06.Java核心知识/04.JVM进阶/01.100道JVM面试题+11张思维导图就是让你懂JVM.assets/PjhymCqjrLnN.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/06.Java核心知识/04.JVM进阶/01.100道JVM面试题+11张思维导图就是让你懂JVM.assets/PjhymCqjrLnN.png -------------------------------------------------------------------------------- /docs/06.Java核心知识/04.JVM进阶/01.100道JVM面试题+11张思维导图就是让你懂JVM.assets/ic8vE7VHUnnh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/06.Java核心知识/04.JVM进阶/01.100道JVM面试题+11张思维导图就是让你懂JVM.assets/ic8vE7VHUnnh.png -------------------------------------------------------------------------------- /docs/06.Java核心知识/04.JVM进阶/01.100道JVM面试题+11张思维导图就是让你懂JVM.assets/kuC0zfKbIizi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/06.Java核心知识/04.JVM进阶/01.100道JVM面试题+11张思维导图就是让你懂JVM.assets/kuC0zfKbIizi.png -------------------------------------------------------------------------------- /docs/06.Java核心知识/04.JVM进阶/01.100道JVM面试题+11张思维导图就是让你懂JVM.assets/lG8riViTdT2V.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/06.Java核心知识/04.JVM进阶/01.100道JVM面试题+11张思维导图就是让你懂JVM.assets/lG8riViTdT2V.png -------------------------------------------------------------------------------- /docs/06.Java核心知识/04.JVM进阶/01.100道JVM面试题+11张思维导图就是让你懂JVM.assets/sldahoAGfNAI.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/06.Java核心知识/04.JVM进阶/01.100道JVM面试题+11张思维导图就是让你懂JVM.assets/sldahoAGfNAI.png -------------------------------------------------------------------------------- /docs/06.Java核心知识/04.JVM进阶/01.100道JVM面试题+11张思维导图就是让你懂JVM.assets/tkQMtW8WsPK3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/06.Java核心知识/04.JVM进阶/01.100道JVM面试题+11张思维导图就是让你懂JVM.assets/tkQMtW8WsPK3.png -------------------------------------------------------------------------------- /docs/06.Java核心知识/04.JVM进阶/01.100道JVM面试题+11张思维导图就是让你懂JVM.assets/vR6DxYzqWv6w.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/06.Java核心知识/04.JVM进阶/01.100道JVM面试题+11张思维导图就是让你懂JVM.assets/vR6DxYzqWv6w.png -------------------------------------------------------------------------------- /docs/93.整理成PDF/SpringCloud实战项目《佳必过 PassJava》.assets/image-20200918165327441.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/93.整理成PDF/SpringCloud实战项目《佳必过 PassJava》.assets/image-20200918165327441.png -------------------------------------------------------------------------------- /docs/04.Architecture/01.架构图解/01.微服务架构中的两款流量防卫兵.assets/image-20201101132129234.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/04.Architecture/01.架构图解/01.微服务架构中的两款流量防卫兵.assets/image-20201101132129234.png -------------------------------------------------------------------------------- /docs/04.Architecture/01.架构图解/01.微服务架构中的两款流量防卫兵.assets/image-20201101202812737.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/04.Architecture/01.架构图解/01.微服务架构中的两款流量防卫兵.assets/image-20201101202812737.png -------------------------------------------------------------------------------- /docs/04.Architecture/01.架构图解/01.微服务架构中的两款流量防卫兵.assets/image-20201103220145151.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/04.Architecture/01.架构图解/01.微服务架构中的两款流量防卫兵.assets/image-20201103220145151.png -------------------------------------------------------------------------------- /docs/04.Architecture/01.架构图解/01.微服务架构中的两款流量防卫兵.assets/image-20201103221016048.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/04.Architecture/01.架构图解/01.微服务架构中的两款流量防卫兵.assets/image-20201103221016048.png -------------------------------------------------------------------------------- /docs/04.Architecture/01.架构图解/01.微服务架构中的两款流量防卫兵.assets/image-20201103221018398.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/04.Architecture/01.架构图解/01.微服务架构中的两款流量防卫兵.assets/image-20201103221018398.png -------------------------------------------------------------------------------- /docs/04.Architecture/01.架构图解/01.微服务架构中的两款流量防卫兵.assets/image-20201103221107664.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/04.Architecture/01.架构图解/01.微服务架构中的两款流量防卫兵.assets/image-20201103221107664.png -------------------------------------------------------------------------------- /docs/04.Architecture/01.架构图解/01.微服务架构中的两款流量防卫兵.assets/image-20201103230631742.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/04.Architecture/01.架构图解/01.微服务架构中的两款流量防卫兵.assets/image-20201103230631742.png -------------------------------------------------------------------------------- /docs/04.Architecture/01.架构图解/01.微服务架构中的两款流量防卫兵.assets/image-20201103231336302.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/04.Architecture/01.架构图解/01.微服务架构中的两款流量防卫兵.assets/image-20201103231336302.png -------------------------------------------------------------------------------- /docs/04.Architecture/01.架构图解/02.20张图手摸手教你性能压测.assets/image-20201124221817028.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/04.Architecture/01.架构图解/02.20张图手摸手教你性能压测.assets/image-20201124221817028.png -------------------------------------------------------------------------------- /docs/109.学习笔记/03.高并发系统设计/22.微服务化后系统架构要如何改造?.md: -------------------------------------------------------------------------------- 1 | # 22.微服务化后系统架构要如何改造? 2 | 3 | ![](http://cdn.jayh.club/blog/20210702/Xdu5k3qYWS7T.png?imageslim) 4 | 5 | ![](http://cdn.jayh.club/blog/20210702/wcA29eWHzEdG.png?imageslim) 6 | 7 | -------------------------------------------------------------------------------- /docs/98.idea/05.魔幻的四个私活经历,到底是亏了还是赚了?.assets/414640-20160813163211890-702123418.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/98.idea/05.魔幻的四个私活经历,到底是亏了还是赚了?.assets/414640-20160813163211890-702123418.gif -------------------------------------------------------------------------------- /docs/98.idea/05.魔幻的四个私活经历,到底是亏了还是赚了?.assets/414640-20160813163312859-718402818.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/98.idea/05.魔幻的四个私活经历,到底是亏了还是赚了?.assets/414640-20160813163312859-718402818.gif -------------------------------------------------------------------------------- /code/01.Threads/.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /docs/02.SpringCloud/03.Feign远程调用/01.Feign远程调用基本原理和使用.assets/image-20220704111442958.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/02.SpringCloud/03.Feign远程调用/01.Feign远程调用基本原理和使用.assets/image-20220704111442958.png -------------------------------------------------------------------------------- /docs/112.双赢/01.友链.md: -------------------------------------------------------------------------------- 1 | ## 友链 2 | 3 | ### [艾小仙](https://aixiaoxian.vip) 4 | 我的好朋友,技术硬核!不容小觑~ 5 | ### [茴香豆](https://www.huixiangdou.cn) 6 | 我的好朋友,3年java经验的小程序员,好好学习,一起努力! 7 | ### [蘑菇屋](https://www.syilun.top) 8 | 我的好朋友,一名热爱生活的Java开发。 -------------------------------------------------------------------------------- /code/01.Threads/out/production/01.Threads/com/jackson0714/passjava/threads/ShareData.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/code/01.Threads/out/production/01.Threads/com/jackson0714/passjava/threads/ShareData.class -------------------------------------------------------------------------------- /docs/01.PassJava/03.Deploy/02.Linux/02.Docker/01.Docker命令.md: -------------------------------------------------------------------------------- 1 | ## 网络 2 | 3 | ### 查询 Docker 内网 IP 4 | 5 | ``` SH 6 | docker inspect --format='{{.Name}} - {{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq) 7 | ``` 8 | 9 | -------------------------------------------------------------------------------- /docs/06.Java核心知识/04.JVM进阶/01.100道JVM面试题+11张思维导图就是让你懂JVM.assets/image-20200807230325554.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/06.Java核心知识/04.JVM进阶/01.100道JVM面试题+11张思维导图就是让你懂JVM.assets/image-20200807230325554.png -------------------------------------------------------------------------------- /docs/06.Java核心知识/04.JVM进阶/01.100道JVM面试题+11张思维导图就是让你懂JVM.assets/image-20200807230521597.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/06.Java核心知识/04.JVM进阶/01.100道JVM面试题+11张思维导图就是让你懂JVM.assets/image-20200807230521597.png -------------------------------------------------------------------------------- /docs/06.Java核心知识/04.JVM进阶/01.100道JVM面试题+11张思维导图就是让你懂JVM.assets/image-20200807230532306.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/06.Java核心知识/04.JVM进阶/01.100道JVM面试题+11张思维导图就是让你懂JVM.assets/image-20200807230532306.png -------------------------------------------------------------------------------- /docs/06.Java核心知识/04.JVM进阶/01.100道JVM面试题+11张思维导图就是让你懂JVM.assets/image-20200807232304090.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/06.Java核心知识/04.JVM进阶/01.100道JVM面试题+11张思维导图就是让你懂JVM.assets/image-20200807232304090.png -------------------------------------------------------------------------------- /docs/06.Java核心知识/04.JVM进阶/01.100道JVM面试题+11张思维导图就是让你懂JVM.assets/image-20200807232311504.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/06.Java核心知识/04.JVM进阶/01.100道JVM面试题+11张思维导图就是让你懂JVM.assets/image-20200807232311504.png -------------------------------------------------------------------------------- /docs/06.Java核心知识/04.JVM进阶/01.100道JVM面试题+11张思维导图就是让你懂JVM.assets/image-20200807232322213.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/06.Java核心知识/04.JVM进阶/01.100道JVM面试题+11张思维导图就是让你懂JVM.assets/image-20200807232322213.png -------------------------------------------------------------------------------- /docs/06.Java核心知识/04.JVM进阶/01.100道JVM面试题+11张思维导图就是让你懂JVM.assets/image-20200808000844570.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/06.Java核心知识/04.JVM进阶/01.100道JVM面试题+11张思维导图就是让你懂JVM.assets/image-20200808000844570.png -------------------------------------------------------------------------------- /docs/06.Java核心知识/04.JVM进阶/01.100道JVM面试题+11张思维导图就是让你懂JVM.assets/image-20200808000910767.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/06.Java核心知识/04.JVM进阶/01.100道JVM面试题+11张思维导图就是让你懂JVM.assets/image-20200808000910767.png -------------------------------------------------------------------------------- /docs/07.并发多线程/99.思维导图总结.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | ## 1.并发编程简介 6 | 7 | ![并发编程简介](http://cdn.jayh.club/blog/20200809/sdufbkKYCKBF.png?imageslim) 8 | 9 | ## 2.线程安全性 10 | 11 | ![线程安全性](http://cdn.jayh.club/blog/20200811/0fanqxxeASNo.png?imageslim)4 -------------------------------------------------------------------------------- /docs/109.学习笔记/03.高并发系统设计/04.高可用.md: -------------------------------------------------------------------------------- 1 | MTBF(Mean Time Between Failure)是平均故障间隔的意思,代表两次故障的间隔时间,也就是系统正常运转的平均时间。这个时间越长,系统稳定性越高。 2 | 3 | MTTR(Mean Time To Repair)表示故障的平均恢复时间,也可以理解为平均故障时间。这个值越小,故障对于用户的影响越小。 4 | 5 | Availability = MTBF / (MTBF + MTTR) 6 | 7 | -------------------------------------------------------------------------------- /docs/01.PassJava/02.PassJava_Architecture/14.Elasticsearch基础.assets/image-20200629192730211.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/01.PassJava/02.PassJava_Architecture/14.Elasticsearch基础.assets/image-20200629192730211.png -------------------------------------------------------------------------------- /docs/01.PassJava/02.PassJava_Architecture/14.Elasticsearch基础.assets/image-20200629193228679.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/01.PassJava/02.PassJava_Architecture/14.Elasticsearch基础.assets/image-20200629193228679.png -------------------------------------------------------------------------------- /docs/01.PassJava/02.PassJava_Architecture/14.Elasticsearch基础.assets/image-20200629193248105.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/01.PassJava/02.PassJava_Architecture/14.Elasticsearch基础.assets/image-20200629193248105.png -------------------------------------------------------------------------------- /docs/01.PassJava/02.PassJava_Architecture/14.Elasticsearch基础.assets/image-20200708222249498.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/01.PassJava/02.PassJava_Architecture/14.Elasticsearch基础.assets/image-20200708222249498.png -------------------------------------------------------------------------------- /docs/01.PassJava/02.PassJava_Architecture/14.Elasticsearch基础.assets/image-20200708222255383.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/01.PassJava/02.PassJava_Architecture/14.Elasticsearch基础.assets/image-20200708222255383.png -------------------------------------------------------------------------------- /code/01.Threads/out/production/01.Threads/com/jackson0714/passjava/threads/volatileVisibility.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/code/01.Threads/out/production/01.Threads/com/jackson0714/passjava/threads/volatileVisibility.class -------------------------------------------------------------------------------- /docs/04.Architecture/01.架构图解/01.微服务架构中的两款流量防卫兵.assets/50678855-aa6e9700-103b-11e9-83de-2a33e580325f.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/04.Architecture/01.架构图解/01.微服务架构中的两款流量防卫兵.assets/50678855-aa6e9700-103b-11e9-83de-2a33e580325f.png -------------------------------------------------------------------------------- /docs/04.Architecture/01.架构图解/01.微服务架构中的两款流量防卫兵.assets/50813887-bff10300-1352-11e9-9201-437afea60a5a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/04.Architecture/01.架构图解/01.微服务架构中的两款流量防卫兵.assets/50813887-bff10300-1352-11e9-9201-437afea60a5a.png -------------------------------------------------------------------------------- /docs/04.Architecture/01.架构图解/01.微服务架构中的两款流量防卫兵.assets/68292392-b5b0aa00-00c6-11ea-86e1-ecacff8aab51.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/04.Architecture/01.架构图解/01.微服务架构中的两款流量防卫兵.assets/68292392-b5b0aa00-00c6-11ea-86e1-ecacff8aab51.png -------------------------------------------------------------------------------- /docs/04.Architecture/01.架构图解/01.微服务架构中的两款流量防卫兵.assets/68292442-d4af3c00-00c6-11ea-8251-d0977366d9b4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jackson0714/PassJava-Learning/HEAD/docs/04.Architecture/01.架构图解/01.微服务架构中的两款流量防卫兵.assets/68292442-d4af3c00-00c6-11ea-8251-d0977366d9b4.png -------------------------------------------------------------------------------- /docs/07.并发多线程/98.图解并发工具类.md: -------------------------------------------------------------------------------- 1 | # 大白话讲Java并发工具类 2 | 3 | JUC并发工具包几个常见的工具类包含有CountDownLatch、CyclicBarrier、Semphore、Exchanger。 4 | 5 | CountDownLatch、CyclicBarrier和Semphore工具类提供了一种并发流程控制技术。 6 | 7 | Exchanger提供了线程间交换数据的技术。 8 | 9 | ## 一、大白话讲 CountDownLatch 10 | 11 | -------------------------------------------------------------------------------- /docs/104.群成员学习分享/月度学习总结/2022年8月学习总结.md: -------------------------------------------------------------------------------- 1 | 你好,我是悟空。 2 | 3 | 在悟空的知识星球结识了几位卷王朋友,他们每天都会在知识星球进行学习打卡,而每到月底,就会复盘这个月的学习情况。 4 | 5 | 虽然我们来自五湖四海,是星球让我们一起学习一起进步!有朋自远方来不亦说乎! 6 | 7 | 我将 8 月的学习复盘分享出来给广大卷王一起看下(已授权),共勉! 8 | 9 | ![](http://cdn.jayh.club/uPic/image-20220901090317992HjLswQ.png) -------------------------------------------------------------------------------- /docs/97.读书笔记/01.超级记忆:破解记忆宫殿的秘密.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | ![思维导图](http://cdn.jayh.club/blog/20200714/j4wYhLxWX952.png?imageView2/0/interlace/1/q/75|watermark/2/text/5oKf56m66IGK5p625p6E/font/5qW35L2T/fontsize/720/fill/I0Y3MjExNA==/dissolve/70/gravity/SouthEast/dx/20/dy/10) 6 | 7 | -------------------------------------------------------------------------------- /code/static/css/me.css: -------------------------------------------------------------------------------- 1 | /*结束文章符号*/ 2 | .over { 3 | width: 40px; 4 | height: 40px; 5 | border: 1px solid #000001; 6 | border-radius: 50%; 7 | text-align: center; 8 | line-height: 40px; 9 | margin: 20px auto 5px; 10 | text-shadow: 0 0 black; 11 | } -------------------------------------------------------------------------------- /docs/meterial/docsify/css/me.css: -------------------------------------------------------------------------------- 1 | /*结束文章符号*/ 2 | .over { 3 | width: 40px; 4 | height: 40px; 5 | border: 1px solid #000001; 6 | border-radius: 50%; 7 | text-align: center; 8 | line-height: 40px; 9 | margin: 20px auto 5px; 10 | text-shadow: 0 0 black; 11 | } -------------------------------------------------------------------------------- /code/01.Threads/.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /code/01.Threads/.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /docs/10.SQL/01.MySQL/03.Summary/00.content.md: -------------------------------------------------------------------------------- 1 | 之前一直在折腾 MySQL 的高可用和读写分离,输出了几篇文章: 2 | 3 | 插入文章 4 | 5 | 6 | 7 | 8 | 9 | 最近在梳理下 MySQL 的核心知识点,本篇可以算作开篇。 10 | 11 | MySQL 索引会分为多篇进行讲解: 12 | 13 | 基础篇:涉及到索引介绍、索引优缺点、索引的分类,索引的创建,索引的性能提升演示。 14 | 15 | 进阶篇:涉及到索引的底层数据结构。 16 | 17 | 实战篇:涉及到如何使用索引优化查询。 18 | 19 | 番外篇:索引在什么情况下会失效。 -------------------------------------------------------------------------------- /docs/108.MacBook使用技巧/05.Mac常见命令.md: -------------------------------------------------------------------------------- 1 | ## 找到被占用的 8080 端口 2 | 3 | (1)查看进程占用 4 | 5 | ```sh 6 | lsof -i tcp:8080 7 | ``` 8 | 9 | 通过该命令查看占用8080端口的进程,找到对应的pid。 10 | 11 | (2)通过pid来杀死当前占用的进程 12 | 13 | ```sh 14 | kill pid 15 | ``` 16 | 17 | 然后重新将你的程序运行在8080端口上即可。 18 | 19 | ![](http://cdn.jayh.club/uPic/image-20211130193245543pae8cU.png) -------------------------------------------------------------------------------- /docs/01.PassJava/03.Deploy/15.用M1部署Skywalking.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | ``` SH 6 | docker run --name oap --restart=always -d \ 7 | -e TZ=Asia/Shanghai \ 8 | -p 12800:12800 \ 9 | -p 11800:11800 \ 10 | -e SW_STORAGE=elasticsearch \ 11 | -e SW_STORAGE_ES_CLUSTER_NODES=127.0.0.1:9200\ 12 | apache/skywalking-oap-server:8.9.1 13 | ``` 14 | 15 | -------------------------------------------------------------------------------- /code/01.Threads/META-INF/application.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /docs/109.学习笔记/06.Spring常见错误/01.Spring事务.md: -------------------------------------------------------------------------------- 1 | ## Spring 事务注意事项 2 | 3 | - Spring 支持声明式事务机制,它通过在方法上加上 @Transactional,表明该方法需要事务支持。于是,在加载的时候,根据 @Transactional 中的属性,决定对该事务采取什么样的策略; 4 | 5 | - @Transactional 对 private 方法不生效,所以我们应该把需要支持事务的方法声明为 public 类型; 6 | 7 | - Spring 处理事务的时候,默认只对 RuntimeException 和 Error 回滚,不会对 Exception 回滚,如果有特殊需要,需要额外声明,例如指明 Transactional 的属性 rollbackFor 为 Exception.class。 8 | 9 | -------------------------------------------------------------------------------- /docs/109.学习笔记/05.问题排查/线上性能问题.md: -------------------------------------------------------------------------------- 1 | #### cpu占用过高排查思路 2 | 3 | 1. top 查看占用cpu的进程 pid 4 | 2. top -Hp pid 查看进程中占用cpu过高的线程id tid 5 | 3. printf '%x/n' tid 转化为十六进制 6 | 4. jstack pid |grep tid的十六进制 -A 30 查看堆栈信息定位 7 | 8 | 9 | 10 | #### jvm old区占用过高排查思路 11 | 12 | 1. top查看占用cpu高的进程 13 | 2. jstat -gcutil pid 时间间隔 查看gc状况 14 | 3. jmap -dump:format=b,file=name.dump pid 导出dump文件 15 | 4. 用visualVM分析dump文件 16 | 17 | -------------------------------------------------------------------------------- /code/01.Threads/.idea/artifacts/01_Threads_ear_exploded.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | $PROJECT_DIR$/out/artifacts/01_Threads_ear_exploded 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /docs/07.并发多线程/97.Java并发编程课程大纲.md: -------------------------------------------------------------------------------- 1 | ![mark](http://cdn.jayh.club/blog/20200909/144457607.png) 2 | 3 | ![mark](http://cdn.jayh.club/blog/20200909/144537761.png) 4 | 5 | ![mark](http://cdn.jayh.club/blog/20200909/144553176.png) 6 | 7 | ![mark](http://cdn.jayh.club/blog/20200909/144629077.png) 8 | 9 | ![mark](http://cdn.jayh.club/blog/20200909/144648428.png) 10 | 11 | ![mark](http://cdn.jayh.club/blog/20200909/144710692.png) -------------------------------------------------------------------------------- /docs/109.学习笔记/03.高并发系统设计/14.缓存如何做到高可用.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | # 缓存如何做到高可用? 4 | 5 | **客户端方案**就是在客户端配置多个缓存的节点,通过缓存写入和读取算法策略来实现分布式,从而提高缓存的可用性。 6 | 7 | - 分片算法常见的就是 Hash 分片算法和一致性 Hash 分片算法两种。 8 | - 主从机制 9 | - 多副本 10 | 11 | **中间代理层方案**是在应用代码和缓存节点之间增加代理层,客户端所有的写入和读取的请求都通过代理层,而代理层中会内置高可用策略,帮助提升缓存系统的高可用。 12 | 13 | - Facebook 的Mcrouter 14 | - Twitter 的Twemproxy 15 | - 豌豆荚的Codis。 16 | 17 | **服务端方案**就是 Redis 2.4 版本后提出的 Redis Sentinel 方案。 18 | 19 | -------------------------------------------------------------------------------- /code/01.Threads/src/com/jackson0714/passjava/threads/DelayQueueDemo.java: -------------------------------------------------------------------------------- 1 | package com.jackson0714.passjava.threads; 2 | 3 | import java.util.concurrent.DelayQueue; 4 | 5 | /** 6 | * @Author: 悟空聊架构| PassJava666 7 | * @Date: 2020/9/8 18:05 8 | * @Site: www.passjava.cn 9 | * @Github: https://github.com/Jackson0714 10 | */ 11 | public class DelayQueueDemo { 12 | public static void main(String[] args) { 13 | 14 | 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /docs/01.PassJava/03.Deploy/03.Prometheus/00.计划.md: -------------------------------------------------------------------------------- 1 | 你好,我是悟空。 2 | 3 | 最近在搭建一套监控平台,基于 Prometheus 和 Grafana,我将通过以下几篇文章来总结下监控系统相关的知识点。 4 | 5 | - 监控系统实战:Prometheus 核心知识点 6 | - 监控系统实战:部署一套监控系统 7 | - 监控系统实战:监控系统概述 8 | - 监控系统实战:Prometheus 原理剖析 9 | - 监控系统实战:Prometheus 报警 10 | 11 | ![](http://cdn.jayh.club/uPic/image-20221106092316927bSaC5XfzvLdHxaPtr2.png) 12 | 13 | 可能会不定期加餐~ 14 | 15 | > 工欲善其事,必先利其器。 16 | 17 | 有了监控系统,将会降低系统运维的成本。 18 | 19 | 本篇是第一篇:Prometheus 核心知识点。 -------------------------------------------------------------------------------- /docs/04.Architecture/04.高可用集群篇/101.Keepalived监控和故障切换.md: -------------------------------------------------------------------------------- 1 | 本篇涉及以下内容: 2 | 3 | - Keepalived 如何监控服务的。 4 | - Keepalived 如何进行故障切换。 5 | - Keepalived 的架构剖析。 6 | 7 | 8 | 9 | ## 二、Keepalived 是如何监控服务的 10 | 11 | 监测 TCP,notify script 12 | 13 | 用脚本监测 14 | 15 | 16 | 17 | ## 三、Keepalived 如何实现故障转移的 18 | 19 | 主备切换,接管 VIP 流量,转发流量到服务 20 | 21 | 根据优先级切换,但是会产生不必要的主备切换。 22 | 23 | 如果不根据优先级切换,不抢占,若要切换,则只能让 keepalived 宕机,另外一台 keepalived 成为 master 24 | 25 | ## 四、Keepalived 的架构原理 -------------------------------------------------------------------------------- /code/static/js/prism-json.min.js: -------------------------------------------------------------------------------- 1 | Prism.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},Prism.languages.webmanifest=Prism.languages.json; -------------------------------------------------------------------------------- /docs/111.Go/02.GoJSON编解码性能优化探索.md: -------------------------------------------------------------------------------- 1 | ## JSON 是一种流式编码 2 | 3 | 没有固定长度 4 | 基于分隔符,没有长度前缀 5 | 6 | ## JSON 是一种 半范式编码 7 | 8 | 可以泛型编解码(interface{}) 9 | 也可以定型编解码(结构体) 10 | 难以再编译器确定类型 11 | 高度依赖反射 12 | 13 | ## 反射是最大瓶颈 14 | 15 | 编译器无法确定类型 16 | 运行时需要做大量检验 17 | 18 | ## 函数调用不是免费的 19 | 20 | 参数传递需要事件 21 | 函数调用本身有开销 22 | 23 | Just-In-Time 24 | 可以再运行时进行编译 25 | 适用于动态语言的运行时优化 26 | 无法在编译期间确定变量类型 27 | 28 | 一些常见的 JIT 实现 29 | JVM:Java 30 | V8:JavaScript 31 | PyPy:Python 32 | LuaJIT:Lua -------------------------------------------------------------------------------- /docs/107.其他/ProcessOn.md: -------------------------------------------------------------------------------- 1 | # ProcessOn 八周年生日祝福视频 2 | 3 | 大家好,我是悟空,八年软件职业生涯,使用 ProcessOn 快 5 年了。手势 4 | 5 | 2017 年,我第一次接触到了 ProcessOn 作图工具,被它的泳道图功能惊艳到了,原来画流程图还可以这么玩。 6 | 7 | 于是在后来的工作中,我也把泳道图用到了具体的项目当中,比如,遇到多个软件系统需要交互时,我通过画泳道图,和多个责任方的技术人员对接也变得轻松很多,一图胜千言,大家对照着泳道图,远程开会的沟通效率变得贼高。 8 | 9 | 另外我把泳道图的画图技巧还分享给了团队成员,大家的沟通方式也从口头讨论变成了看图讨论,团队默契和沟通效率也有了很大的提升。 10 | 11 | 感谢 ProcessOn 带来的极致体验和创新精神,我会一直支持 ProcessOn 下去,希望 ProcessOn 能在中国市场更多地开疆拓土! 12 | 13 | 祝 ProcessOn 八周年生日快乐!比心 14 | 15 | -------------------------------------------------------------------------------- /docs/86.前端/03.Typora.md: -------------------------------------------------------------------------------- 1 | ``` mariadb 2 | timeline 3 | title History of Social Media Platform 4 | 2002 : LinkedIn 5 | 2004 : Facebook 6 | : Google 7 | 2005 : Youtube 8 | 2006 : Twitter 9 | ``` 10 | 11 | Fff 12 | 13 | ## fs 14 | 15 | ```mermaid 16 | timeline 17 | title History of Social Media Platform 18 | 2002 : LinkedIn 19 | 2004 : Facebook 20 | : Google 21 | 2005 : Youtube 22 | 2006 : Twitter 23 | ``` 24 | 25 | -------------------------------------------------------------------------------- /docs/99.tools/05.我的常用工具.md: -------------------------------------------------------------------------------- 1 | # 我的常用工具 2 | 3 | ## 一、图床神器 MPic 4 | 5 | 支持将图片一键上传到七牛云上,直接复制图片链接到markdown中,这样写公众号文章、博客文章就可以用七牛云上的图片链接了。 6 | 7 | ![mark](http://cdn.jayh.club/blog/20200405/aS7woV8LEtHD.png?imageslim) 8 | 9 | ## 二、截图神器 Snipaste 10 | 11 | ![mark](http://cdn.jayh.club/blog/20200405/UTuDW4pHFu3d.png?imageslim) 12 | 13 | ## 三、Typora 文本编写神器 14 | 15 | 1.支持Markdown书写 16 | 17 | 2.支持多种主题 18 | 19 | ![mark](http://cdn.jayh.club/blog/20200405/gA4eP7wDYuRh.png?imageslim) -------------------------------------------------------------------------------- /docs/109.学习笔记/09.AI数据分析/AI数据分析.md: -------------------------------------------------------------------------------- 1 | ## 数据清洗 2 | 3 | 数据清洗,是检测和纠正不合理数据的过程。在大多数情况下,数据分析前都需要这个过程,将错误的、不准确的、缺失的以及多余的数据进行修改或删除。 4 | 5 | 具体来说,数据清洗会面临以下四个问题。 6 | 7 | 1. **存储格式不一致**:不同的数据源在存储数据时可能存在大小写和单位的不同,导致不同数据源之间无法直接比较和整合,需要进行格式转换。 8 | 2. **数据不完整**:可能存在数据重复、数据缺失和数据异常等情况,需要进行数据清洗,以确保数据的准确性和完整性。 9 | 3. **存储形式不一致**:不同的数据源可能以不同的格式存储,如 txt、excel、csv、word 等,需要将数据统一转换为一种格式。 10 | 4. **存储位置不一致**:不同的数据源可能存在于不同的文件夹或压缩文件中,需要进行数据整理。 11 | 12 | ![](http://cdn.jayh.club/top/202406280956368.png) -------------------------------------------------------------------------------- /docs/110.Temp/02.Win10升级到Win11.md: -------------------------------------------------------------------------------- 1 | ![mark](http://cdn.jayh.club/blog/20211001/4KvUeQf4dcox.png?imageslim) 2 | 3 | 4 | 5 | ![mark](http://cdn.jayh.club/blog/20211001/GcH5DiCgBaxJ.png?imageslim) 6 | 7 | 8 | 9 | ![mark](http://cdn.jayh.club/blog/20211001/FUnf8IEpYcKK.png?imageslim) 10 | 11 | 12 | 13 | ![mark](http://cdn.jayh.club/blog/20211001/L4JDT8LxdriG.png?imageslim) 14 | 15 | 16 | 17 | ![mark](http://cdn.jayh.club/blog/20211001/F7lhOp5aC0X2.png?imageslim) 18 | 19 | -------------------------------------------------------------------------------- /docs/meterial/docsify/js/prism-json.min.js: -------------------------------------------------------------------------------- 1 | Prism.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},Prism.languages.webmanifest=Prism.languages.json; -------------------------------------------------------------------------------- /docs/05.Interview/05.DesignPattern/03.原型模式PrototypePattern.md: -------------------------------------------------------------------------------- 1 | # 原型模式 Prototype Design Pattern 2 | 3 | [toc] 4 | 5 | 原型就是已有的对象,原型模式就是拷贝已有的对象。 6 | 7 | 拷贝的方式有两种:浅拷贝、深拷贝。 8 | 9 | - 浅拷贝:只会复制对象中基本数据类型数据和引用对象的内存地址,不会递归地复制引用对象,以及引用对象的引用对象。 10 | - 深拷贝:不仅复制基本数据类型,而且引用对象也会新建出来,所以内存地址也会改变。 11 | 12 | 浅拷贝带来的问题就是如果原型的引用对象的值变了,那么通过浅拷贝过来的对象的值也会变。 13 | 14 | 深拷贝可以有两种实现方式: 15 | 16 | - 序列化要拷贝的对象,然后反序列化成新的对象。 17 | - 递归拷贝对象、对象的引用对象以及引用对象的引用对象,直到要拷贝的对象只包含基本数据类型数据,没有引用对象为止。 18 | - 用反射的方式。 19 | 20 | -------------------------------------------------------------------------------- /docs/94.Git/02.gitignore.md: -------------------------------------------------------------------------------- 1 | 1、切换到feature/common_api分支来操作 2 | 3 | git checkout 4 | 5 | 2、将误提交的文件从暂存区给删除掉,让git不再追踪这些文件 6 | 7 | git rm -r --cache .classpath .project .settings/ target/ 8 | 9 | 3、编辑.gitignore文件,加入不要让git托管的文件和目录 10 | 11 | vi .gitignore 12 | 13 | .classpath 14 | .project 15 | .settings/ 16 | target/ 17 | 18 | 4、提交本次删除同步到码云 19 | 20 | git commit -m "删除误提交的eclipse文件和target目录" 21 | git push origin 22 | 23 | 5、此时码云上的 分支下就没有这些乱七八糟的文件了 24 | 25 | -------------------------------------------------------------------------------- /docs/94.Git/04.一键pull代码.md: -------------------------------------------------------------------------------- 1 | 每次都需要登录服务器,执行 cd,git stash, git pull 命令太麻烦了,写了一个一键 pull 的脚本 2 | 3 | 4 | 5 | 创建 passjava.sh 脚本 6 | 7 | ``` 8 | vim passjava.sh 9 | ``` 10 | 11 | 修改脚本内容 12 | 13 | ```SH 14 | cd jay/passjava/passjava-learning/PassJava-Learning/ 15 | git stash 16 | git pull gitee master 17 | git stash pop 18 | ``` 19 | 20 | 保存脚本后,需要修改脚本文件的权限,才能执行脚本文件。 21 | 22 | ```SH 23 | chmod u+x passjava.sh 24 | ``` 25 | 26 | 执行脚本 27 | 28 | ```SH 29 | ./passjava.sh 30 | ``` 31 | 32 | -------------------------------------------------------------------------------- /code/static/css/sidebar.min.css: -------------------------------------------------------------------------------- 1 | .sidebar-nav li{position:relative;margin:0;cursor:pointer}.sidebar-nav ul:not(.app-sub-sidebar)>li:not(.file)::before{content:'';display:block;position:absolute;top:11px;left:-12px;height:6px;width:6px;border-right:1px solid #505d6b;border-bottom:1px solid #505d6b;transform:rotate(-45deg);transition:transform .1s}.sidebar-nav ul:not(.app-sub-sidebar)>li.open::before{transform:rotate(45deg)}.sidebar-nav ul:not(.app-sub-sidebar)>li.collapse::before{transform:rotate(-45deg)} -------------------------------------------------------------------------------- /docs/16.DevOps/Jenkins/12.passjava_jenkins.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | ### Mac 安装 Jenkins 6 | 7 | https://www.jenkins.io/download/lts/macos/ 8 | 9 | - Install the latest LTS version: `brew install jenkins-lts` 10 | - Start the Jenkins service: `brew services start jenkins-lts` 11 | - Restart the Jenkins service: `brew services restart jenkins-lts` 12 | - Update the Jenkins version: `brew upgrade jenkins-lts` 13 | 14 | 15 | 16 | ![](http://cdn.jayh.club/uPic/image-20240702235129878QIXtCy.png) -------------------------------------------------------------------------------- /docs/83.视频号/02.给我的网站插上留言的翅膀.md: -------------------------------------------------------------------------------- 1 | # 给网站插上留言的翅膀 2 | 3 | hi,大家好,我是悟空哥,我的个人网站 passjava.cn 终于开通了留言功能, 4 | 5 | 一起来感受下吧 6 | 7 | 首先打开网站首页,打开任一篇文章,拉到文章底部,就可以看到发表留言的地方了。 8 | 9 | 我们来试下留言功能吧:打个悟空 666 吧。点击评论,留言成功啦。 10 | 11 | 咦,还可以用 markdown 语法来留言呢,来,这次我们试下 markdown, 12 | 13 | 标题一 超级赛亚人,点击评论,嗯,效果不错呢! 14 | 15 | 那么这个留言功能是怎么实现的呢? 16 | 17 | 用到了一款神奇的插件:Gitalk,用起来极其舒适。 18 | 19 | Gitalk 利用了 Github 的 Issues 功能来实现网站的留言。原理和完整代码可以点击视频下方的链接查看哦! 20 | 21 | 快用这款插件给自己的网站加上留言功能吧! 22 | 23 | 好了,本期视频就到这里了,觉得不错的点个赞哦! 24 | 25 | -------------------------------------------------------------------------------- /docs/meterial/docsify/css/sidebar.min.css: -------------------------------------------------------------------------------- 1 | .sidebar-nav li{position:relative;margin:0;cursor:pointer}.sidebar-nav ul:not(.app-sub-sidebar)>li:not(.file)::before{content:'';display:block;position:absolute;top:11px;left:-12px;height:6px;width:6px;border-right:1px solid #505d6b;border-bottom:1px solid #505d6b;transform:rotate(-45deg);transition:transform .1s}.sidebar-nav ul:not(.app-sub-sidebar)>li.open::before{transform:rotate(45deg)}.sidebar-nav ul:not(.app-sub-sidebar)>li.collapse::before{transform:rotate(-45deg)} -------------------------------------------------------------------------------- /docs/08.Redis/00.DownloadRedis.md: -------------------------------------------------------------------------------- 1 | ## Redis 源码下载地址 2 | 3 | ### 专栏配套源码 5.0.8 4 | 5 | `Redis-5.0.8 源码` 6 | 7 | 链接:https://pan.baidu.com/s/1gkafj0VVpQpr6cbAGg7PMQ 8 | 提取码:6666 9 | 10 | ### Redis 3.0 源码(中文注释版) 11 | 12 | 链接:https://pan.baidu.com/s/1J1mPpETnPFpbIt3v1Xt65Q 13 | 提取码:6666 14 | 15 | ### Redis 4.0.0 源码 16 | 17 | 链接:https://pan.baidu.com/s/1C3x7sWH4hVZIY_H1YgkBBg 18 | 提取码:6666 19 | 20 | ### Redis 6.2.4 源码(较新) 21 | 22 | 链接:https://pan.baidu.com/s/1RCcEYLQCJuHuA9S6WHU5Sg 23 | 提取码:6666 24 | 25 | -------------------------------------------------------------------------------- /docs/109.学习笔记/01.Redis核心技术与实战/03.有哪些与Redis交互的操作.md: -------------------------------------------------------------------------------- 1 | 大家好,我是悟空哥,今天给大家带来的是大厂面试第三题,有哪些与 Redis 交互的操作? 2 | 面试者小空听到这题后,窃喜,这题简单,不假思索地回答:键值对 的读和写。 3 | 面试官面无表情的说道:还有吗? 4 | 小空支支吾吾的没有答上来。 5 | 面试官继续说:和 Redis 实例交互的对象分别有四种:**客户端、磁盘、主从节点、切片集群实例**。 6 | 7 | **这些对象和 Redis 交互时,有不同的操作:** 8 | 9 | `客户端对象`会有网络 IO交互、键值对 增删改查 操作、数据库操作。 10 | 11 | `磁盘对象`会有生成 RDB 快照、记录 AOF 日志、AOF 日志重写操作。 12 | 13 | `主从节点`对象会有主库生成、传输 RDB 文件、从库接受 RDB 文件、清空数据库、加载 RDB 文件操作。。 14 | 15 | `切片集群实例`对象会有向其他实例传输哈希槽信息、数据迁移操作。 16 | 17 | 小空听完后,叹了一口气,今天又是被面试官吊打的一天。 18 | 19 | -------------------------------------------------------------------------------- /docs/109.学习笔记/09.AI数据分析/AI数据分析: -------------------------------------------------------------------------------- 1 | ## 存储格式不一致问题 2 | 3 | 4 | 5 | ## 数据缺失问题 6 | 7 | ![](http://cdn.jayh.club/top/202406281046111.jpeg) 8 | 9 | 10 | 11 | 数据清洗,是检测和纠正不合理数据的过程。在大多数情况下,数据分析前都需要这个过程,将错误的、不准确的、缺失的以及多余的数据进行修改或删除。 12 | 13 | 具体来说,数据清洗会面临以下四个问题。 14 | 15 | 1. **存储格式不一致**:不同的数据源在存储数据时可能存在大小写和单位的不同,导致不同数据源之间无法直接比较和整合,需要进行格式转换。 16 | 2. **数据不完整**:可能存在数据重复、数据缺失和数据异常等情况,需要进行数据清洗,以确保数据的准确性和完整性。 17 | 3. **存储形式不一致**:不同的数据源可能以不同的格式存储,如 txt、excel、csv、word 等,需要将数据统一转换为一种格式。 18 | 4. **存储位置不一致**:不同的数据源可能存在于不同的文件夹或压缩文件中,需要进行数据整理。 -------------------------------------------------------------------------------- /docs/85.数据库/01.NoSQL和SQL.md: -------------------------------------------------------------------------------- 1 | ## 1.改了文件权限后,提示git有改动 2 | 3 | 解决方案:git config core.filemode false 4 | 5 | ## 2. Github仓库的项目语言不正确 6 | 7 | ![语言为JavaScript](http://cdn.jayh.club/blog/20200905/0AcQCHvEFbtb.png?imageslim) 8 | 9 | 该项目主要以Java为主,可以将`JavaScript`修改为`Java` 10 | 11 | **解决办法:** 12 | 13 | 根目录添加文件:**.gitattributes** 14 | 15 | 修改文件内容,注意是代码文件名的后缀,比如\*.js、 \*.java、\*.html,不区分大小写。 16 | 17 | ```shell 18 | *.js linguist-language=java 19 | ``` 20 | 21 | ![更新为java](http://cdn.jayh.club/blog/20200905/Gl1Ws1bNvRzp.png?imageslim) 22 | 23 | -------------------------------------------------------------------------------- /docs/03.Distributed/13.PBFT.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | 论文:https://link.zhihu.com/?target=http%3A//pmg.csail.mit.edu/papers/osdi99.pdf 4 | 5 | https://zhuanlan.zhihu.com/p/35847127 6 | 7 | - 私链:私链的共识算法即区块链这个概念还没普及时的传统分布式系统里的共识算法,比如 zookeeper 的 zab 协议,就是类 paxos 算法的一种。私链的适用环境一般是不考虑集群中存在作恶节点,只考虑因为系统或者网络原因导致的故障节点。 8 | - 联盟链:联盟链中,经典的代表项目是 Hyperledger 组织下的 Fabric 项目, Fabric0.6 版本使用的就是 pbft 算法。联盟链的适用环境除了需要考虑集群中存在故障节点,还需要考虑集群中存在作恶节点。对于联盟链,每个新加入的节点都是需要验证和审核的。 9 | - 公链:公链不断需要考虑网络中存在故障节点,还需要考虑作恶节点,这一点和联盟链是类似的。和联盟链最大的区别就是,公链中的节点可以很自由的加入或者退出,不需要严格的验证和审核。 10 | 11 | -------------------------------------------------------------------------------- /docs/16.DevOps/Jenkins/11.Jenkins错误集锦.md: -------------------------------------------------------------------------------- 1 | 1 2 | 3 | 4 | 5 | 问题1、远程服务器无法执行 sudo 命令 6 | 7 | 报错信息如下: 8 | 9 | ``` 10 | no tty present and no askpass program specified 11 | ``` 12 | 13 | 报错信息截图如下: 14 | 15 | ![image-20240617145216860](http://cdn.jayh.club/top/image-20240617145216860.png) 16 | 17 | 解決方案: 18 | 19 | https://blog.csdn.net/qq_36792209/article/details/82695539 20 | 21 | ![](http://cdn.jayh.club/top/image-20240617153102646.png) 22 | 23 | jenkins ALL=(ALL) NOPASSWD:ALL 24 | 25 | 26 | 27 | 28 | 29 | crm ALL=(ALL) NOPASSWD: ALL -------------------------------------------------------------------------------- /docs/97.读书笔记/06.淘宝技术这十年.md: -------------------------------------------------------------------------------- 1 | ![img](http://cdn.jayh.club/uPic/112117190512762LyRekH.png) 2 | 3 | 金句 4 | 5 | 任何网站的发展都不是一蹴而就的,通常是在什么阶段采用什么技术。在发展的过程中,网站会遇到各种各样的问题,正是这些原因才推动着技术的进步和发展,而技术的发展反过来又会促进业务的更大提升。 6 | 7 | 8 | 9 | 所有主动和被动的技术变革的前因后果,这由很多有趣的故事组成。 10 | 11 | 12 | 13 | 14 | 15 | TBstore的分布式算法实现:根据保存的Key(关键字),对key进行Hash算法,取得Hash值,再对Hash值与总Cache服务器数据取模。然后根据取模后的值,找到服务器列表中下标为此值的Cache服务器。由Java Client API封装实现,应用无须关心。 16 | 17 | 18 | 19 | 在飞速发展的背后,隐患已经埋下。在技术架构的制约下,团队协作越来越艰难,代码越来越臃肿,开发的效率越来越低,新业务的需求越来越多,老业务的压力眼看就要超过系统的容量了。这时候,架构该做怎样的调整?又一次的脱胎换骨,欲火重生。 -------------------------------------------------------------------------------- /docs/05.Interview/其他.md: -------------------------------------------------------------------------------- 1 | # CPU 100% 了,怎么排查、定位和解决? 2 | 3 | (1)定位耗费 CPU 的进程 4 | 5 | top -c 显示进程列表,然后输入 P,按照 CPU 使用率最高的排序。 6 | 7 | 就可以拿到是哪个进程占用 CPU 最高了,把 进程 id 先记下来。 8 | 9 | (2)定位耗费 CPU 的线程 10 | 11 | top -Hp <进程 id> 拿到线程 id 12 | 13 | (3)将线程 id 转为 16 进制 14 | 15 | printf “%x\n” ,把线程 pid 转为16进制,比如 0xf58 16 | 17 | (4)定位哪段代码导致的 CPU 太高了 18 | 19 | jstack | grep -A 10 0xf58 查看线程的堆栈日志 20 | 21 | 这个命令会打印出哪个类,哪个方法导致 CPU 100% 的问题。然后把代码拉出来看下,修复解决。 22 | 23 | 24 | 25 | 整体思路: 26 | 27 | 找 CPU 过高的的进程,找进程的线程,然后通过 jstack 命令可以迅速找出线程中哪段代码造成了死锁问题或死循环的问题。 28 | 29 | -------------------------------------------------------------------------------- /docs/111.Go/03.Go有什么优势.md: -------------------------------------------------------------------------------- 1 | 为什么喜欢 Go?因为它具有很多优点呀! 2 | 3 | 1.部署简单。Go 编译生成的是一个静态可执行文件,除了 glibc 外没有其他外部依赖。这让部署变得异常方便。 4 | 5 | 2.并发性好。Go 编译生成的是一个静态可执行文件,除了 glibc 外没有其他外部依赖。这让部署变得异常方便: 6 | 7 | 3.良好的语言设计。Go 编译生成的是一个静态可执行文件,除了 glibc 外没有其他外部依赖。这让部署变得异常方便: 8 | 9 | 4标准库很出色(同样,也很小)。从生态系统中寻找并使用库程序非常容易。 10 | 11 | 5.编译时间快。 12 | 13 | 6.协程(goroutine)和信道(channel)。使 Go 的并发编程体验比其他语言更优越 14 | 15 | 7.测试和文档注释都很容易使用。 16 | 17 | 8.Go 工具链友好。 18 | 19 | 9.具有自动垃圾回收功能。 20 | 21 | 10.上下文切换代价小: Goroutine 上下文切换只涉及到三个寄存器(PC / SP / DX)的值修改;而对比线程的上下文切换则需要涉及模式切换(从用户态切换到内核态)、以及 16 个寄存器、PC、SP...等寄存器的刷新。 22 | 23 | -------------------------------------------------------------------------------- /docs/02.SpringCloud/07.Nacos配置注册中心/04.Nacos架构原理③:揭秘心跳机制.md: -------------------------------------------------------------------------------- 1 | 先来看下客户端 2 | 3 | 通过 SDK RPC 连接进行注册,客户端和注册中心保持连接。 4 | 5 | 通过 OpenAPI 方式进行 IP 和 端口注册,会有临时实例和持久化实例两种。 6 | 7 | ### 3.4 源码分析 8 | 9 | ServerListManager 类的构造方法中会注册一个定时任务 ServerStatusReporter,每 2s 执行一次, 10 | 11 | ```java 12 | // /nacos/naming/cluster/ServerListManager.java 13 | @PostConstruct 14 | public void init() { 15 | GlobalExecutor.registerServerStatusReporter(new ServerStatusReporter(), 2000); 16 | GlobalExecutor.registerServerInfoUpdater(new ServerInfoUpdater()); 17 | } 18 | ``` 19 | 20 | 21 | 22 | 心跳任务里面包含的信息是各个机器的元信息。元信息是什么? -------------------------------------------------------------------------------- /docs/108.MacBook使用技巧/07.Alfred使用2022-03-25.md: -------------------------------------------------------------------------------- 1 | https://github.com/whyliam/whyliam.workflows.youdao 2 | 3 | 4 | 5 | 注册有道智云的应用 6 | 7 | 自然语言翻译服务,文本翻译 8 | 9 | 10 | 11 | ![](http://cdn.jayh.club/uPic/image-20220325214913962qE4Pc2.png) 12 | 13 | 填写密钥信息: 14 | 15 | ![image-20220325215009611](http://cdn.jayh.club/uPic/image-20220325215009611VeyMq7.png) 16 | 17 | 设置快捷键: 18 | 19 | ![](http://cdn.jayh.club/uPic/image-20220325215054230MWKZhJ.png) 20 | 21 | ![](http://cdn.jayh.club/uPic/image-20220325215110059xQ5LTO.png) 22 | 23 | ![image-20220325215127961](http://cdn.jayh.club/uPic/image-20220325215127961c5IcEY.png) -------------------------------------------------------------------------------- /docs/05.Interview/05.DesignPattern/26.充血模型.md: -------------------------------------------------------------------------------- 1 | 传统的 MVC 架构符合 OOP 模式吗?不符合,它属于贫血模型:数据和业务逻辑分开到不同的类中。 2 | 3 | DDD 属于充血模型:数据和业务逻辑封装在同一个类中。 DDD 更加有优势。 4 | 5 | 基于充血模型的 DDD 开发模式跟基于贫血模型的传统开发模式相比,主要区别在 Service 层。 6 | 7 | 在基于充血模型的开发模式下,我们将部分原来在 Service 类中的业务逻辑移动到了一个充血的 Domain 领域模型中,让 Service 类的实现依赖这个 Domain 类。在基于充血模型的 DDD 开发模式下,Service 类并不会完全移除,而是负责一些不适合放在 Domain 类中的功能。比如,负责与 Repository 层打交道、跨领域模型的业务聚合功能、幂等事务等非功能性的工作。 8 | 9 | 基于充血模型的 DDD 开发模式跟基于贫血模型的传统开发模式相比,Controller 层和 Repository 层的代码基本上相同。这是因为,Repository 层的 Entity 生命周期有限,Controller 层的 VO 只是单纯作为一种 DTO。两部分的业务逻辑都不会太复杂。业务逻辑主要集中在 Service 层。所以,Repository 层和 Controller 层继续沿用贫血模型的设计思路是没有问题的。 10 | 11 | -------------------------------------------------------------------------------- /docs/98.idea/14.悟空聊架构互推-0522.md: -------------------------------------------------------------------------------- 1 | ## 悟空聊架构 2 | 3 | **悟空哥**是一个喜欢用故事+图解的方式剖析技术的大佬,他的公众号 **「悟空聊架构」**深入浅出地讲解分布式、微服务、中间件、高并发。 4 | 5 | 这里是被各大平台转载的部分文章,果然硬核: 6 | 7 | - [B 站崩了,总结下「高可用」和「异地多活」](https://mp.weixin.qq.com/s/wn2lNOfCvYJNsBn38o4E3Q) 8 | - [这三年被「分布式」坑惨了,曝光十大坑](https://mp.weixin.qq.com/s/kifv23_FPMUDQxY20oubeQ) 9 | - [用「三国杀」讲分布式算法,舒适了吧?](https://mp.weixin.qq.com/s/Cmb7oEX4mot4HwkyPLJMqQ) 10 | - [「分布式锁」中的王者方案 - Redisson](https://mp.weixin.qq.com/s/CbnPRfvq4m1sqo2uKI6qQw) 11 | 12 | **悟空哥** 八年软件职业生涯,一线互联网公司从事开发和架构工作。手写了一套 7 万字 **Spring Cloud 实战教程**和 2 万字**分布式算法总结 **,还做了一个**面试刷题**小程序。关注即可免费订阅教程和刷题 👇👇👇 13 | 14 | 《插入公众号:悟空聊架构》 15 | 16 | -------------------------------------------------------------------------------- /docs/99.tools/98.IDEA调试Java多线程.md: -------------------------------------------------------------------------------- 1 | # IDEA 多线程调试 2 | 3 | 一般情况下我们调试的时候是在一个线程中的,一步一步往下走。但有时候你会发现在Debug的时候,想发起另外一个请求都无法进行了? 4 | 5 | 那是因为IDEA在Debug时默认阻塞级别是ALL,会阻塞其它线程,只有在当前调试线程走完时才会走其它线程。可以在View Breakpoints里选择Thread,如下图,然后点击Make Default设置为默认选项。 6 | 7 | ![img](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X3BuZy9lUVB5QmZmWWJ1ZktWbjVLZG1KY0dhSWlhUEY5N25QV2dLMU9BNjRicFVKVWdwYnZtMEZ6TklnVjZublg1WXRCOG50b012QWh6aWFzcDRTNk9BYkR6RGlhdy82NDA?x-oss-process=image/format,png) 8 | 9 | 切换线程,在下图中Frames的下拉列表里,可以切换当前的线程,如下我这里有两个Debug的线程`aaa`线程和`main`线程,切换另外一个则进入另一个Debug的线程。 10 | 11 | ![mark](http://cdn.jayh.club/blog/20200820/QbaaQxYepMA8.png?imageslim) -------------------------------------------------------------------------------- /docs/05.Interview/06.Network/01.Network.md: -------------------------------------------------------------------------------- 1 | # 网络面试题 2 | 3 | ## 1、浏览器输入 www.passjava.cn 后,域名解析的过程? 4 | 5 | \#每天一道面试题# 65 6 | 7 | \#悟空拧螺丝# 2021-09-17 8 | 9 | 10 | 11 | ✅ 1、浏览器输入www.passjava.cn后,域名解析的过程? 12 | 13 | 14 | 🎯(1)域名解析请求先会检查本机的 hosts 文件,查看是否有 www.passjava.cn 对应 的 IP; 15 | 16 | 🎯(2)如果没有对应的 IP 的话,就请求 Local DNS 是否有域名解析结果的缓存,如果有就返回,标识是 从非权威 DNS 返回的结果; 17 | 18 | 🎯(3) 如果 Local DNS 没有域名解析结果的缓存,就开始 DNS 的迭代查询。先请求根 DNS,根 DNS 返回顶级 DNS(.cn) 的地址;再请求.cn 顶级 DNS,得到 passjava.cn 的域名服务器地址; 19 | 20 | 🎯(4)再从 passjava.cn 的域名服务器中查询到 www.passjava.cn 对应的 IP 地址,返回这个 IP 地址 的同时,标记这个结果是来自于权威 DNS 的结果,同时写入 Local DNS 的解析结果缓 存,这样下一次的解析同一个域名就不需要做 DNS 的迭代查询了。 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /docs/107.其他/自我介绍.md: -------------------------------------------------------------------------------- 1 | 你好,很高兴认识你,可以叫我:悟空/大师兄。 2 | 3 | 我是 #公众号:悟空聊架构的号主 4 | 5 | 目前主要研究 Java、分布式、微服务架构方向。 6 | 7 | 可以提供: 8 | 9 | - 求职/面试指导/简历修改 10 | - 邀请加入我的技术讨论群(微信交流群) 11 | - 一起学习打卡(知识星球https://t.zsxq.com/urrZ7Aq) 12 | - 个人技术网站持续更新( http://www.passjava.cn) 13 | - Spring Cloud 开源学习项目-技术支持 14 | 15 | 16 | 17 | 大家好,我是悟空哥 18 | 19 | 又和小伙伴见面了 20 | 21 | 我现在担任公司的技术专家 22 | 23 | 我的公众号内容主要以微服务、分布式、架构设计为主 24 | 25 | 欢迎大家点击下方的链接查看。 26 | 27 | 祝大家新的一年里 28 | 29 | 万事入意! 30 | 31 | 一起卷卷卷! 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | -------------------------------------------------------------------------------- /docs/109.学习笔记/01.Redis核心技术与实战/05.多核CPU下Redis的优化.md: -------------------------------------------------------------------------------- 1 | 要看懂这篇,首先需要理解 NUMA 的架构是怎么样的。 2 | 3 | NUMA:在多 CPU 架构下,一个应用程序访问所在 Socket 的本地内存和访问远端内存的延迟并不一致,所以,我们也把这个架构称为非统一内存访问架构(Non-Uniform Memory Access,NUMA 架构)。 4 | 5 | 多核CPU架构: 多个物理核,各物理核使用私有的1、2级缓存,共享3级缓存。物理核可包含2个超线程,称为逻辑核。 6 | 7 | NUMA 架构的问题:L1、L2 缓存中的指令和数据的访问速度很快,所以,充分利用 L1、L2 缓存,可以有效缩短应用程序的执行时间;在 NUMA 架构下,如果应用程序从一个 Socket 上调度到另一个 Socket 上,就可能会出现远端内存访问的情况,这会直接增加应用程序的执行时间。 8 | 9 | 网络中断处理程序绑核:为了提升 Redis 的网络性能,把操作系统的网络中断处理程序和 CPU 核绑定。这个做法可以避免网络中断处理程序在不同核上来回调度执行,的确能有效提升 Redis 的网络处理性能。 10 | 11 | Redis实例和网络中端程序绑在同一个核上:在多 CPU 的 NUMA 架构下,如果你对网络中断程序做了绑核操作,建议你同时把 Redis 实例和网络中断程序绑在同一个 CPU Socket 的不同核上,这样可以避免 Redis 跨 Socket 访问内存中的网络数据的时间开销。 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /docs/05.Interview/05.DesignPattern/102.如何评价代码的质量.md: -------------------------------------------------------------------------------- 1 | # 如何评价代码的质量 2 | 3 | 4 | 5 | ## 1、可维护性 6 | 7 | 添加代码时,不需要冒着极大的引入引入新 bug 的风险,不需要花费很长时间才能完成。 8 | 9 | ## 2、可读性 10 | 11 | 软件设计大师 Martin Fowler:任何傻瓜都会编写计算机能理解的代码,好的程序员能够编写 人 能够理解的代码。 12 | 13 | 代码的阅读次数超过被编写和执行的次数。 14 | 15 | 怎么验证自己写的代码可读性好呢?如果同事能够很轻松地看懂你写的代码,就说明代码可读性很好。如果有很多疑问,那就说明代码可读性有待提高了。 16 | 17 | ## 3、可扩展性 18 | 19 | 代码预留了一些功能扩展点,可以把新功能代码直接插到扩展点上,就不需要改动大量的原始代码。对修改关闭,对扩展开放 20 | 21 | ## 4、灵活性 22 | 23 | - 非常容易扩展。 24 | - 抽象出了很多可以复用的模块、类等代码,可以复用。 25 | - 一组接口可以应对各种使用场景,满足各种不同的需求。 26 | 27 | ## 5、简洁性 28 | 29 | 代码简单、逻辑清晰。 30 | 31 | ## 6、可复用性 32 | 33 | 减少重复代码的编写,复用已有的代码 34 | 35 | ## 7、可测试性 36 | 37 | 比较好写单元测试。 38 | 39 | 40 | 41 | 这是一篇我的学习笔记,总结了极客时间-设计模式。 42 | 43 | -------------------------------------------------------------------------------- /docs/04.Architecture/03.用故事讲解技术/99.TODO/98.我是一个接口,来自单体星球.md: -------------------------------------------------------------------------------- 1 | 大纲 2 | 3 | 大家庭是一个 系统 4 | 5 | 系统被拆分成很多服务, 6 | 7 | 每个服务有很多接口 8 | 9 | 10 | 11 | 服务往注册中心注册 12 | 13 | 14 | 15 | 我是一个接口,出生在一个大家庭中,这里有我的很多兄弟姐妹, 16 | 17 | 18 | 19 | 20 | 21 | \### 寒冬将至 22 | 23 | 微服务拆分 24 | 25 | 26 | 27 | ## 正文 28 | 29 | 我是一个接口,出生在一个叫赛亚帝国的地方。大家都叫我查询会员接口。 30 | 每天都会有很多人来找我。 31 | 嘿,帮忙查下这个会员的信息。这是tomcat 老哥找的我。 32 | 33 | 34 | 35 | 36 | 37 | 他把一串字符串丢给我,我知道那个是会员id,我迅速拨通了一个电话,嘿,mysql老哥,帮我查下这个会员的信息吧,mysql 一句话没说,只见他在一颗树上找了下,一下子就找到了一片树叶。我问他为什么去树上找,他告诉我那是b+树,上面有个会员目录,我根据会员目录就能迅速定位,会员信息都在树枝末尾的树叶上。 38 | tomcat今年每天都很忙,没时间跟我打招呼。小时候我们可是最亲密的朋友。 39 | 我问了下旁边的更新会员接口,你知道今年为啥tomcat这么忙吗? 40 | 你还不知道吗?今年我们做起了商城业务,外面有很多人购买我们的商品。 41 | tomcat不堪重负。 42 | 拆分成多个服务 -------------------------------------------------------------------------------- /docs/98.idea/20.学习路线和资料推荐.md: -------------------------------------------------------------------------------- 1 | 学习网站: 2 | 3 | (1) www.passjava.cn 4 | (2) 极客时间 https://time.geekbang.org 5 | (3) B 站 https://search.bilibili.com/all?keyword=%E5%B0%9A%E7%A1%85%E8%B0%B7 6 | (4) 微信读书 https://weread.qq.com/web/reader/80a32bc05cd51280a170717 7 | 8 | 9 | 10 | 1.java 基础,书:java核心技术,尚硅谷 java 基础可以看看 11 | 极客时间的 java 专栏,比如 java 核心技术,可以搜下 12 | 2.JVM,深入理解 JVM 虚拟机 第三版,尚硅谷 视频教程(免费),儒猿的 jvm 专栏(付费),我还有一个专栏(付费),推荐尚硅谷的 13 | 3.Spring 原理,可以先看下 尚硅谷的教程,比较基础,后面有需要了再卷源码。 14 | 4.SpringBoot,尚硅谷 15 | 5.SpringCloudAlibab,尚硅谷的可以瞄下,我还有一个开源项目,可以快速上手。 16 | 6.消息队列,推荐 儒猿专栏 RocketMQ,Kafka 推荐极客时间的两个专栏 17 | 7.MySQL,简单的有儒猿的和极客时间的专栏,难点的 极客时间 mysql 45讲,掘金的 mysql 专栏 18 | 8.Redis,黄健宏的哪本书,加上 Redis 与运维,然后看下极客时间的 redis 专栏。 19 | 9.微服务架构,极客时间的专栏 高并发系统设计 40 讲 -------------------------------------------------------------------------------- /docs/109.学习笔记/03.高并发系统设计/17.加餐-数据的迁移应该如何做?.md: -------------------------------------------------------------------------------- 1 | # 加餐 | 数据的迁移应该如何做?(极客时间) 2 | 3 | 双写的方案是数据库、Redis 迁移的通用方案,你可以在实际工作中直接加以使用。双写方案中最重要的,是通过数据校验来保证数据的一致性,这样就可以在迁移过程中随时回滚; 4 | 5 | ![](http://cdn.jayh.club/blog/20210701/gd98pVz9bfDW.png?imageslim) 6 | 7 | ![](http://cdn.jayh.club/blog/20210701/BhYKHcMzcAuH.png?imageslim) 8 | 9 | 如果你需要将自建机房的数据迁移到云上,那么也可以考虑使用级联复制的方案,这种方案会造成数据的短暂停写,需要在业务低峰期执行; 10 | 11 | ![](http://cdn.jayh.club/blog/20210701/O9YYejFNrE7X.png?imageslim) 12 | 13 | ![](http://cdn.jayh.club/blog/20210701/SENMq5Mc4hif.png?imageslim) 14 | 15 | 缓存的迁移重点是保证云上缓存的命中率,你可以使用改进版的副本组方式来迁移,在缓存写入的时候异步写入云上的副本组,在读取时放少量流量到云上副本组,从而又可以迁移部分数据到云上副本组,又能尽量减少穿透给自建机房造成专线延迟的问题。 16 | 17 | ![](http://cdn.jayh.club/blog/20210701/pHjV1jb78N0J.png?imageslim) -------------------------------------------------------------------------------- /docs/98.idea/08.灯谜抽奖.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | 首先祝各位高级软件工程师们节日快乐,也感谢各位对`悟空`长久以来的大力支持。 4 | 5 | 刚好今天是元宵节我们一起来做(song)游(li)戏(wu)吧! 6 | 7 | 那么游戏奖品是什么呢? 8 | 9 | 黄金屋和颜如玉 10 | 11 | 是的,今天给大家送书 12 | 13 | 获奖的工程师可以在京东或者当当网低于100 元的书库里,**随意挑选一本你最想要的纸质书(任何领域,任何语言)**,数量有限、先到先得! 14 | 15 | 注意不能超过 100 哦,不然你们都选大几千的书,我们真的要倾家荡产啦。 16 | 17 | 而且最近有很多恶意抽奖的团队,我们为了让书能被真正的读者拿到,保护读者权益,所以我们这样参与游戏。 18 | 19 | 参与方式: 20 | 21 | 我们在每个公众号里面放了一个很简单的趣味问题,大家在**公众号后台回复【闯关】**,获取问题,**回答出问题的正确答案**,即可获得抽取图书资格。见下图。 22 | 23 | **注:下方每个高质量原创公众号的问题都不一样,而且贼有意思,大家快去闯关吧。** 24 | 25 | ![图片](https://mmbiz.qpic.cn/sz_mmbiz_jpg/FuPvZ5fBPT2ljoRqNWsdx5Jibf7RqBQC0ic5kNpgicgIucGlRTDGWutZpsqeTDwwAziag75skR4MuibL9zWT6DjxxFQ/640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1) 26 | 27 | 28 | 29 | 参与名额有限,大家先到先得,希望大家可以中奖呀! -------------------------------------------------------------------------------- /docs/109.学习笔记/01.Redis核心技术与实战/16.Redis持久化.md: -------------------------------------------------------------------------------- 1 | # Redis 事务机制 2 | 3 | ## Redis 事务机制 4 | 5 | Redis 通过 MULTI、EXEC、DISCARD 和 WATCH 四个命令来支持事务机制,这 4 个命令的作用如下图所示: 6 | 7 | ![](http://cdn.jayh.club/uPic/9571308df0620214d7ccb2f2cc73a250.jpg) 8 | 9 | Redis 的事务机制可以保证一致性和隔离性,但是无法保证持久性。不过,因为 Redis 本身是内存数据库,持久性并不是一个必须的属性,我们更加关注的还是原子性、一致性和隔离性这三个属性。 10 | 11 | 原子性的情况比较复杂,只有当事务中使用的命令语法有误时,原子性得不到保证,在其它情况下,事务都可以原子性执行。 12 | 13 | ### 持久性 14 | 15 | 持久性因为 Redis 是内存数据库,所以,数据是否持久化保存完全取决于 Redis 的持久化配置模式。 16 | 17 | 如果 Redis 没有使用 RDB 或 AOF,那么事务的持久化属性肯定得不到保证。如果 Redis 使用了 RDB 模式,那么,在一个事务执行后,而下一次的 RDB 快照还未执行前,如果发生了实例宕机,这种情况下,事务修改的数据也是不能保证持久化的。 18 | 19 | 如果 Redis 采用了 AOF 模式,因为 AOF 模式的三种配置选项 no、everysec 和 always 都会存在数据丢失的情况,所以,事务的持久性属性也还是得不到保证。 20 | 21 | 所以,不管 Redis 采用什么持久化模式,事务的持久性属性是得不到保证的。 -------------------------------------------------------------------------------- /docs/_navbar.md: -------------------------------------------------------------------------------- 1 | 2 | * [SpringCloud源码剖析](http://www.passjava.cn/#/02.SpringCloud/02.Ribbon负载均衡/01.Ribbon架构剖析) 3 | 4 | * [分布式](http://www.passjava.cn/#/03.Distributed/01.分布式基础概念) 5 | 6 | * 面试必背 7 | * [Redis](http://passjava.cn/#/05.Interview/01.Redis/Redis1) 8 | * [并发多线程](http://passjava.cn/#/05.Interview/02.Thread/Thread1) 9 | * [MySQL](http://passjava.cn/#/05.Interview/03.Database/MySQL1) 10 | * [JVM](http://passjava.cn/#/05.Interview/04.JVM/JVM1) 11 | 12 | * 演示 13 | * [后台管理](https://github.com/Jackson0714/PassJava-Portal) 14 | * [小程序端](https://www.cnblogs.com/jackson0714/p/passJava2.html) 15 | 16 | * 项目地址 17 | * [后台平台](https://github.com/Jackson0714/PassJava-Platform) 18 | 19 | * [兄弟连](http://passjava.cn/#/112.双赢/01.友链) 20 | -------------------------------------------------------------------------------- /docs/99.tools/90.Git操作.md: -------------------------------------------------------------------------------- 1 | ## 升级 git 2 | 3 | ### 在基于 Ubuntu 的 Linux 发行版上安装最新的 Git 4 | 5 | 一种方法是[从源代码安装](https://link.zhihu.com/?target=https%3A//itsfoss.com/install-software-from-source-code/)。这种很酷又老派的方法不适合所有人。值得庆幸的是,Ubuntu Git 维护团队提供了 [PPA](https://link.zhihu.com/?target=https%3A//launchpad.net/~git-core/%2Barchive/ubuntu/ppa),莫可以使用它轻松地安装最新的稳定 Git 版本。 6 | 7 | ```sh 8 | sudo add-apt-repository ppa:git-core/ppa 9 | sudo apt update 10 | git 11 | ``` 12 | 13 | 即使你以前使用 `apt` 安装了 Git,它也将更新为最新的稳定版本。 14 | 15 | ```sh 16 | $ git --version 17 | git version 2.25.0 18 | ``` 19 | 20 | [使用PPA](https://link.zhihu.com/?target=https%3A//itsfoss.com/ppa-guide/) 的好处在于,如果发布了新的 Git 稳定版本,那么就可以通过系统更新获得它。[仅更新 Ubuntu](https://link.zhihu.com/?target=https%3A//itsfoss.com/update-ubuntu/) 来获取最新的 Git 稳定版本。 -------------------------------------------------------------------------------- /docs/99.tools/94.Ubuntu16_04安装最新版nodejs.md: -------------------------------------------------------------------------------- 1 | # Ubuntu16.04安装最新版nodejs 2 | 3 | ##### 更新ubuntu软件源 4 | 5 | ```shell 6 | sudo apt-get update 7 | sudo apt-get install -y python-software-properties software-properties-common 8 | sudo add-apt-repository ppa:chris-lea/node.js 9 | sudo apt-get update 10 | ``` 11 | 12 | ##### 安装nodejs 13 | 14 | ```shell 15 | sudo apt-get install nodejs 16 | sudo apt install nodejs-legacy 17 | sudo apt install npm 18 | ``` 19 | 20 | ##### 更新npm的包镜像源,方便快速下载 21 | 22 | ```shell 23 | sudo npm config set registry https://registry.npm.taobao.org 24 | sudo npm config list 25 | ``` 26 | 27 | ##### 全局安装n管理器(用于管理nodejs版本) 28 | 29 | ``` 30 | sudo npm install n -g 31 | ``` 32 | 33 | ##### 安装最新的nodejs(stable版本) 34 | 35 | ```shell 36 | sudo n stable 37 | sudo node -v 38 | ``` 39 | -------------------------------------------------------------------------------- /code/01.Threads/src/com/jackson0714/passjava/threads/CASDemo.java: -------------------------------------------------------------------------------- 1 | package com.jackson0714.passjava.threads; 2 | import java.util.concurrent.atomic.AtomicInteger; 3 | /** 4 | 演示CAS compareAndSet 比较并交换 5 | * @author: 悟空聊架构 6 | * @create: 2020-08-17 7 | */ 8 | public class CASDemo { 9 | public static void main(String[] args) throws InterruptedException { 10 | AtomicInteger atomicInteger = new AtomicInteger(10); 11 | Thread.sleep(100); 12 | 13 | new Thread(() -> { 14 | atomicInteger.getAndIncrement(); 15 | }, "aaa").start(); 16 | 17 | atomicInteger.getAndIncrement(); 18 | } 19 | 20 | private static void demo() { 21 | AtomicInteger atomicInteger = new AtomicInteger(10); 22 | atomicInteger.getAndIncrement(); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /docs/94.Git/03.创建多个ssh_key.md: -------------------------------------------------------------------------------- 1 | ```ruby 2 | ssh-keygen -t rsa -C 'xxx@xxx.com.cn' -f ~/.ssh/ts_id_rsa 3 | ``` 4 | 5 | 6 | 7 | ```ruby 8 | cat ~/.ssh/ts_id_rsa.pub 9 | ``` 10 | 11 | 12 | 13 | 14 | 15 | ```ruby 16 | touch ~/.ssh/config 17 | ``` 18 | 19 | 20 | 21 | 22 | 23 | ```ruby 24 | # github 25 | Host github.com 26 | HostName github.com 27 | PreferredAuthentications publickey 28 | IdentityFile ~/.ssh/id_rsa 29 | 30 | # gitee 31 | Host gitee.com 32 | HostName gitee.com 33 | PreferredAuthentications publickey 34 | IdentityFile ~/.ssh/id_rsa 35 | 36 | # xxx 37 | Host gitlab.xxx.com.cn 38 | HostName gitlab.xxx.com.cn 39 | PreferredAuthentications publickey 40 | IdentityFile ~/.ssh/ts_id_rsa 41 | ``` 42 | 43 | 44 | 45 | ![image-20220420180345821](http://cdn.jayh.club/uPic/image-20220420180345821z0qepj.png) -------------------------------------------------------------------------------- /docs/98.idea/18.公众号心得分享.md: -------------------------------------------------------------------------------- 1 | 公众号心得分享 2 | 3 | 技术人的一个成长平台 4 | 5 | 本文会分为四个部分进行讲解: 6 | 7 | ## 写公众号是什么? 8 | 9 | ### 公众号分类 10 | 11 | 订阅号,服务号,企业号 12 | 13 | 订阅号很常见:比如武汉本地宝,,央视新闻。我们也可以自己开通一个。 14 | 15 | 服务号是企业对外的,发布活动信息,企业信息,如宝贝王和多奇妙的服务号,会推送最新的活动预告。 16 | 17 | 企业号是企业对内的,发布公司通告,功能入口。 18 | 19 | ### 公众号留言功能 20 | 21 | ### 公众号赞赏功能 22 | 23 | 到后台开通赞赏功能 24 | 25 | ![](http://cdn.jayh.club/blog/20210802/cSRXoLG0J0q5.png?imageslim) 26 | 27 | ### 公众号文章分类 28 | 29 | 技术讲解 30 | 31 | 读书笔记 32 | 33 | 人生经历(水文) 34 | 35 | ### 公众号排版 36 | 37 | 38 | 39 | ## 公众号玩法 40 | 41 | ### 打造个人 IP 42 | 43 | 44 | 45 | ### 自然增长 46 | 47 | 48 | 49 | ### 引流 50 | 51 | 52 | 53 | ### 转载 54 | 55 | 56 | 57 | ### 互推 58 | 59 | 60 | 61 | ## 能带来什么 62 | 63 | ### 好处 64 | 65 | 66 | 67 | ### 坏处 68 | 69 | 70 | 71 | ### 后记 72 | 73 | 74 | 75 | -------------------------------------------------------------------------------- /docs/04.Architecture/05.中间件原理剖析/01.Zookeeper/03.Zookeeper分布式锁原理.md: -------------------------------------------------------------------------------- 1 | 说到 Zookeeper 分布式锁,就不得不说 Redis 分布式锁,具体原理可以看之前写的两篇文章: 2 | 3 | [Redis 分布式锁|从青铜到钻石的五种演进方案](https://mp.weixin.qq.com/s/l9lcFqfXVI30qJi1r2A5-A) 4 | 5 | [分布式锁中的王者方案 - Redisson](https://mp.weixin.qq.com/s/CbnPRfvq4m1sqo2uKI6qQw) 6 | 7 | 好了,再来说下 Zookeeper 分布式锁。而 Zookeeper 其实是有个事件监听的机制,还是画个原理来解释下 zk 分布式锁的原理。 8 | 9 | 如下图是两个系统抢占锁的过程。 10 | 11 | ![](http://cdn.jayh.club/uPic/image-20220323101059661Uv6VXlHELfDK.png) 12 | 13 | 系统 A 和 系统 B 开始尝试获取 zk 分布式锁,这个获取其实就是尝试在 zk 上创建一个临时节点 znode。如下图所示: 14 | 15 | ![image-20220323110921263](http://cdn.jayh.club/uPic/image-20220323110921263quHewiUPYQGK.png) 16 | 17 | 比如系统 A 和系统 B 都要抢占锁锁 “lock”,然后 zk 就会创建一个节点,名字就是锁 “lock”。然后系统 A 来抢占锁,zk 就会在 lock 下面再创建一个“临时顺序节点”,这种节点都有序号,比如 xxx-00001,系统 B 抢占锁时,zk 就会 lock 下面再创建一个临时顺序节点,序号为 xxx-00002。 -------------------------------------------------------------------------------- /code/01.Threads/01.Threads.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /docs/02.SpringCloud/02.Ribbon负载均衡/02.Ribbon使用.md: -------------------------------------------------------------------------------- 1 | ## 环境准备 2 | 3 | ### 启动服务 4 | 5 | > 启动一个服务 B,启动两个服务 A(端口不一样),启动一个注册中心 6 | 7 | ![启动注册中心、服务 A、服务 B](http://cdn.jayh.club/uPic/image-20211130143314709jprOjD.png) 8 | 9 | 服务 A 有两个,名称相同,端口不一样,一个是 8006,一个是 8807。 10 | 11 | 服务 B 对应的端口是 9091。 12 | 13 | 服务 A 和服务 B 都注册到了注册中心。 14 | 15 | ### 添加 Ribbon 注解 16 | 17 | 先添加 Ribbon 负载均衡的 `@LoadBalance` 注解,代表使用下面这个 ResTemplate 时,会进行负载均衡。 18 | 19 | ```java 20 | @Bean 21 | @LoadBalanced 22 | public RestTemplate getRestTemplate() { 23 | 24 | return new RestTemplate(); 25 | } 26 | ``` 27 | 28 | 通过 restTemplate 调用 ServiceA 的 passjava API,会将请求均衡转发到服务名称为 ServiceA 的服务上。 29 | 30 | ```java 31 | RestTemplate restTemplate = getRestTemplate(); 32 | return restTemplate.getForObject("http://ServiceA/passjava/" + name, String.class); 33 | ``` 34 | 35 | ## 测试负载均衡 36 | 37 | 然后 服务 B -------------------------------------------------------------------------------- /docs/109.学习笔记/01.Redis核心技术与实战/13.Redis的大内存问题.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | ## Redis 内存容量增加后,带来的潜在问题 4 | 5 | Redis 使用内存保存数据,内存容量增加后,就会带来两方面的潜在问题,分别是: 6 | 7 | - 内存快照 RDB 生成和恢复效率低。 8 | - 主从节点全量同步时长增加、缓冲区易溢出。 9 | 10 | ### 内存快照 RDB 受到的影响 11 | 12 | 内存大小和内存快照 RDB 的关系是非常直接的:实例内存容量大,RDB 文件也会相应增大,那么,RDB 文件生成时的 fork 时长就会增加,这就会导致 Redis 实例阻塞。而且,RDB 文件增大后,使用 RDB 进行恢复的时长也会增加,会导致 Redis 较长时间无法对外提供服务。 13 | 14 | ### 主从同步受到的影响 15 | 16 | 主从节点间的同步的第一步就是要做全量同步。全量同步是主节点生成 RDB 文件,并传给从节点,从节点再进行加载。试想一下,如果 RDB 文件很大,肯定会导致全量同步的时长增加,效率不高,而且还可能会导致复制缓冲区溢出。一旦缓冲区溢出了,主从节点间就会又开始全量同步,影响业务应用的正常使用。如果我们增加复制缓冲区的容量,这又会消耗宝贵的内存资源。 17 | 18 | ## 使用 Pika 19 | 20 | 基于 SSD 给 Redis 单实例进行扩容的技术方案 Pika。跟 Redis 相比,Pika 的好处非常明显:既支持 Redis 操作接口,又能支持保存大容量的数据。如果你原来就在应用 Redis,现在想进行扩容,那么,Pika 无疑是一个很好的选择,无论是代码迁移还是运维管理,Pika 基本不需要额外的工作量。 21 | 22 | ![img](http://cdn.jayh.club/uPic/a1421b8dbca6bb1ee9b6c1be7a929ae7.jpg) 23 | 24 | -------------------------------------------------------------------------------- /docs/03.Distributed/02.缓存有哪些坑.md: -------------------------------------------------------------------------------- 1 | # 三、分布式缓存的坑 2 | 3 | ## 1. 缓存的坑之缓存雪崩 4 | 5 | 在高频访问数据库的场景中,我们会在业务层和数据层之间加入一套缓存机制,来分担数据库的访问压力,毕竟访问磁盘 I/O 的速度是很慢的。比如利用缓存来查数据,可能5ms就能搞定,而去查数据库可能需要 50 ms,差了一个数量级。而在高并发的情况下,数据库还有可能对数据进行加锁,导致访问数据库的速度更慢。 6 | 7 | 分布式缓存我们用的最多的就是 Redis了,它可以实现分布式 8 | 9 | ![缓存挂了](http://cdn.jayh.club/blog/20200921/152903037.png) 10 | 11 | > `坑:` 12 | > 13 | > - 缓存每秒最高访问量 8000次/s。高峰期每秒访问缓存 10000 次,导致缓存异常宕机。 14 | > 15 | > - 10000次请求全部都走数据库,数据库肯定悲剧,数据库服务的 CPU 使用率 100 %。系统不可用。 16 | > - 运维把数据库服务重启后,因访问量还是走数据库,数据库服务的 CPU 又到 100 % 了。 17 | > - 怎么理解雪崩:因 DB CPU 100%,其他访问数据库的操作全部都超时了,因缓存的问题,带来了数据库层面更大的问题,而导致越来越来的服务不可用,这就是雪崩了,问题来得快来得猛。 18 | 19 | **解决思路:** 20 | 21 | - 缓存宕机后,必须能快速恢复缓存服务。 22 | - 对访问数据库进行限流,避免数据库挂了。 23 | - 缓存必须保证高可用,即使一个节点挂了,还有其他节点提供服务,如果是不可抗力因素导致全部节点挂了,那就只能按照快速恢复方案来实施了。 24 | 25 | 解决方案: 26 | 27 | - 28 | 29 | ## 9. 缓存的坑之缓存穿透 30 | 31 | 32 | 33 | ## 10.缓存的坑之缓存击穿 -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ### class 2 | *.class 3 | 4 | ### gradle ### 5 | .gradle 6 | /build/ 7 | !gradle/wrapper/gradle-wrapper.jar 8 | 9 | ### STS ### 10 | .settings/ 11 | .apt_generated 12 | .classpath 13 | .factorypath 14 | .project 15 | .settings 16 | .springBeans 17 | bin/ 18 | 19 | ### IntelliJ IDEA ### 20 | .idea 21 | *.iws 22 | *.iml 23 | *.ipr 24 | rebel.xml 25 | 26 | ### NetBeans ### 27 | nbproject/private/ 28 | build/ 29 | nbbuild/ 30 | dist/ 31 | nbdist/ 32 | .nb-gradle/ 33 | 34 | ### maven ### 35 | target/ 36 | *.war 37 | *.ear 38 | *.zip 39 | *.tar 40 | *.tar.gz 41 | 42 | ### logs #### 43 | /logs/ 44 | *.log 45 | 46 | ### temp ignore ### 47 | *.cache 48 | *.diff 49 | *.patch 50 | *.tmp 51 | *.java~ 52 | *.properties~ 53 | *.xml~ 54 | 55 | ### system ignore ### 56 | .DS_Store 57 | Thumbs.db 58 | Servers 59 | .metadata 60 | upload 61 | gen_code 62 | ## 63 | db/db_back_dir/ 64 | /redis/ 65 | 66 | -------------------------------------------------------------------------------- /docs/01.PassJava/02.PassJava_Architecture/19.缓存实战.md: -------------------------------------------------------------------------------- 1 | # 实战缓存 2 | 3 | 4 | 5 | 上一篇的讲到如何做性能调优的方法,比如给表加索引、动静分离、减少不必要的日志打印。但有一个很强大优化方式没有提到,那就是加缓存,比如查询小程序的广告位配置,因为没什么人会去频繁的改,将广告位配置丢到缓存里面再适合不过了。那我们就给开源项目 PassJava(佳必过)加下缓存来提升下性能。 6 | 7 | 在实战之前,我们先来看下使用缓存的原理和问题。 8 | 9 | ## 一、缓存 10 | 11 | ### 1.1 为什么要用缓存 12 | 13 | 20 年前常见的系统就是单机的,比如 ERP 系统,对性能要求不高,使用缓存的并不常见,但现如今,已经步入到互联网时代,高并发、高可用、高性能总是被提起,而缓存在这“三高”中立下汗马功劳。 14 | 15 | 我们通过会将部分数据放入缓存中,来提高访问速度,然后数据库承担存储的工作。 16 | 17 | 那么哪些数据适合放入缓存中呢? 18 | 19 | - 即时性。例如查询最新的物流状态信息。 20 | 21 | - 数据一致性要求不高。例如门店信息,修改后,数据库中已经改了,5 分钟后缓存中才是最新的,但不影响功能使用。 22 | - 访问量大且更新频率不高。比如首页的广告信息,访问量,但是不会经常变化。 23 | 24 | 当我们想要查询数据时,使用缓存的流程如下: 25 | 26 | ![读模式缓存使用流程](http://cdn.jayh.club/uPic/image-20210412155243748.png) 27 | 28 | ### 1.2 本地缓存 29 | 30 | 最简单的使用缓存的方式就是用本地缓存。比如用一个 HashMap 存储题目的所有类型,HashMap 是在内存中的。 31 | 32 | ```java 33 | private Map cache = new HashMap<>(); 34 | ``` 35 | 36 | -------------------------------------------------------------------------------- /docs/05.Interview/05.DesignPattern/24.接口和抽象的区别.md: -------------------------------------------------------------------------------- 1 | # 面试官:说下Java 中的接口和抽象的区别? 2 | 3 | 大家好,我是悟空哥,今天给大家带来的是大厂面试题:说下Java 中的接口和抽象的区别? 4 | 5 | 面试者小空听到这题后,窃喜,这题简单,不假思索地回答:接口中定义的方法,不能自己实现,必须由实现类来实现,抽象类中可以包含已实现的方法。 6 | 7 | 面试官面无表情的说道:还有吗? 8 | 9 | 小空支支吾吾的没有答上来。 10 | 11 | 面试官非常认真地给小空解释: 12 | 13 | ## 接口有哪些特性? 14 | 15 | - 接口不能包含属性 16 | - 接口只能声明方法,不能包含代码实现。 17 | - 类实现接口的时候,必须实现接口中的声明的所有方法。 18 | 19 | ## 抽象有哪些特性? 20 | 21 | - 抽象类不允许被实例化,只能被继承。所以不能使用 new 抽象类,不然会报错。 22 | - 抽象类可以包含属性和方法,方法既可以包含代码实现,也可以不包含。不包含代码实现的方法叫做抽象方法。 23 | - 当子类继承抽象类时,必须实现抽象类中的所有抽象方法。 24 | 25 | ## 为什么需要抽象类? 26 | 27 | 代码复用:多个子类可以继承抽象类中定义的属性和方法,避免在子类中重复编写相同的代码。 28 | 29 | 规范开发:要求必须实现抽象方法,防止忘记实现抽象方法。 30 | 31 | ## 为什么需要接口? 32 | 33 | 解耦:调用者只需要关注抽象的接口,不需要了解具体的实现,具体的实现代码对调用者透明。接口实现了约定和实现相分离,降低了代码间的耦合性,提高代码的可扩展性。 34 | 35 | 面向对象的思想:基于接口编程而不是实现编程。 36 | 37 | ## 如何用抽象类实现接口? 38 | 39 | 抽象类中不要定义属性,且所有的方法都不要包含代码实现,就可以模拟一个接口了。 40 | 41 | 小空听完后,叹了一口气,今天又是被面试官吊打的一天。 42 | -------------------------------------------------------------------------------- /code/01.Threads/src/com/jackson0714/passjava/threads/VolatileSingleton.java: -------------------------------------------------------------------------------- 1 | package com.jackson0714.passjava.threads; 2 | /** 3 | 演示volatile 单例模式应用(双边检测) 4 | * @author: 悟空聊架构 5 | * @create: 2020-08-17 6 | */ 7 | 8 | class VolatileSingleton { 9 | private static volatile VolatileSingleton instance = null; 10 | private VolatileSingleton() { 11 | System.out.println(Thread.currentThread().getName() + "\t 我是构造方法SingletonDemo"); 12 | } 13 | public static VolatileSingleton getInstance() { 14 | // 第一重检测 15 | if(instance == null) { 16 | // 锁定代码块 17 | synchronized (VolatileSingleton.class) { 18 | // 第二重检测 19 | if(instance == null) { 20 | // 实例化对象 21 | instance = new VolatileSingleton(); 22 | } 23 | } 24 | } 25 | return instance; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /docs/99.tools/00.Tools.md: -------------------------------------------------------------------------------- 1 | ## 思维导图 2 | 3 | (1)mindmaster 专业级,免费版的有 100个节点 限制,我冲了会员。客户端,网页,多端共享。m1 支持 mindMaster 桌面版 4 | 5 | (2)processOn,免费用户,9个文件限制,拖拽不方便。优点:好看。也冲了会员,可以画各种图。 6 | 7 | (3) xMind,免费版有水印,功能基本满足。 8 | 9 | (4)飞书、语雀 在线版画思维导图,功能和 processOn 类似,免费。 10 | 11 | (5)印象笔记 思维导图,功能比较简单,能满足基本功能。 推荐 mindMaster 免费版 12 | 13 | ## 流程图工具 14 | 15 | PlantUML,支持在线,IDEA 插件。 16 | 17 | ProcessOn 在线画图,需要自己调整流程图 18 | 19 | ## 画图工具 20 | 21 | ProcessOn 在线版,免费创建 9 个文件。付费版更强大。 22 | 23 | Visio,微软的画图工具 24 | 25 | 亿图图示,强大,免费和付费版,支持多端登录。 26 | 27 | Draw.io 在线和离线 28 | 29 | ## 笔记 30 | 31 | OneNote,强大,但是不支持 Markdown 32 | 33 | Typora,本地离线存储 34 | 35 | 印象笔记,强大,但是目录支持不太好,免费,有付费版 36 | 37 | 语雀,免费,支持在线版和 PC 端,强大,支持协作 38 | 39 | 有道云笔记,强大,有广告,支持 markdown 40 | 41 | 为知笔记,强大 42 | 43 | 看云,强大,还支持付费出售 44 | 45 | 石墨文档 46 | 47 | 腾讯文档 48 | 49 | ## 翻译工具 50 | 51 | Bob,Mac 版,支持划词取义,非常快捷。 52 | 53 | Alfred + 有道翻译,快捷搜索。Mac 版 54 | 55 | 金山词霸 56 | 57 | -------------------------------------------------------------------------------- /docs/05.Interview/05.DesignPattern/101.为什么要学设计模式.md: -------------------------------------------------------------------------------- 1 | # 为什么要学设计模式 2 | 3 | ## 1、应对面试 4 | 5 | 虽然问得不多,但是一旦问道,就一定要说出设计模式的思想以及在项目中怎么运用的。 6 | 7 | ## 2、告别写被人吐槽的烂代码 8 | 9 | > 兄弟,你这段代码看不下去了啊?if else 嵌套太多层了吧? 10 | > 11 | > 一个方法几百行代码,很难维护呢? 12 | 13 | 告别同事的吐槽,把设计模式用上。 14 | 15 | ## 3、提高复杂代码的设计和开发能力 16 | 17 | - 易扩展、易用、易维护 18 | - 如何分层、分模块? 19 | - 每个类有哪些属性、方法? 20 | - 怎么设计类之间的交互? 21 | - 该用继承还是组合? 22 | - 该使用接口还是抽象类? 23 | - 怎样做到解耦、高内聚低耦合? 24 | - 该用单例模式还是静态方法? 25 | - 用工厂模式创建对象还是直接 new 出来? 26 | - 如何避免引入设计模式提高扩展性的同时,带来的降低了可读性的问题? 27 | 28 | ## 4、让读源码、学框架事半功倍 29 | 30 | 基础功不够,参透不了源码中的设计思想。 31 | 32 | ## 5、为职业发展铺路 33 | 34 | 普通工程师,只需要把框架、开发工具、编程语言用熟练,再做几个项目练练手,就可以应付平时的工作了。 35 | 36 | 但如果想进阶技术专家、Leader,则需要重视基本功的训练、基础知识的积累。 37 | 38 | - 指导他人时,对什么是好的代码不了解,那还怎么指导别人? 39 | - 堆砌垃圾代码只会让项目维护起来极其困难,降低了研发效率,如果你是技术 Leader,是要对团队的代码质量和开发效率负责的。 40 | - 代码质量低还会导致 bug 频发,影响开发效率。 41 | 42 | 43 | 44 | 投资要趁早,这样才能尽早享受复利。 45 | 46 | 47 | 48 | 这是一篇我的学习笔记,总结了极客时间-设计模式。 -------------------------------------------------------------------------------- /docs/_coverpage.md: -------------------------------------------------------------------------------- 1 | ![logo](images/logo.png) 2 | 3 | # Java面试题管理系统 4 | - `后端`采用SpringBoot+SpringCloud搭建 5 | - `B端`采用Vue-Admin,`C端`采用微信小程序 6 | 7 | # 悟空聊架构学习资料汇总 8 | - Java、架构、中间件、面试、LeetCode 9 | 10 |
11 | 14 | 17 |
18 | star 19 | fork 20 | 21 | [项目地址](https://github.com/jackson0714/PassJava-Platform) 22 | [开始学习](README.md) 23 | 24 | -------------------------------------------------------------------------------- /docs/05.Interview/05.DesignPattern/05.责任链模式.md: -------------------------------------------------------------------------------- 1 | 责任链模式,说白了,就类似生活中的工作审批流程、击鼓传花游戏。 2 | 3 | GoF 设计模式中定义:将请求的发送和接收解耦,让多个接收对象都有机会处理这个请求。将这些接收对象串成一条链,并沿着这条链传递这个请求,直到链上的某个接收对象能够处理它为止。 4 | 5 | **应用实例:** 6 | 7 | 1、红楼梦中的"击鼓传花"。 8 | 9 | 2、JS 中的事件冒泡。 10 | 11 | 3、JAVA WEB 中 Apache Tomcat 对 Encoding 的处理,Struts2 的拦截器,jsp servlet 的 Filter。 12 | 13 | 主要解决:避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。职责链上的处理者负责处理请求,客户只需要将请求发送到职责链上即可,无须关心请求的处理细节和请求的传递,所以职责链将请求的发送者和请求的处理者解耦了。 14 | 15 | **优点:** 16 | 17 | 1、降低耦合度。它将请求的发送者和接收者解耦。 18 | 19 | 2、简化了对象。使得对象不需要知道链的结构。 20 | 21 | 3、增强给对象指派职责的灵活性。通过改变链内的成员或者调动它们的次序,允许动态地新增或者删除责任。 22 | 23 | 4、增加新的请求处理类很方便。 24 | 25 | **使用场景:** 26 | 27 | 1、有多个对象可以处理同一个请求,具体哪个对象处理该请求由运行时刻自动确定。 28 | 29 | 2、在不明确指定接收者的情况下,向多个对象中的一个提交一个请求。 30 | 31 | 3、可动态指定一组对象处理请求。 32 | 33 | 34 | 35 | 在 GoF 的定义中,一旦某个处理器能处理这个请求,就不会继续将请求传递给后续的处理器了。当然,在实际的开发中,也存在对这个模式的变体,那就是请求不会中途终止传递,而是会被所有的处理器都处理一遍。 36 | 37 | 职责链模式有两种常用的实现。一种是使用链表来存储处理器,另一种是使用数组来存储处理器,后面一种实现方式更加简单。 -------------------------------------------------------------------------------- /code/01.Threads/src/com/jackson0714/passjava/threads/VolatileResort.java: -------------------------------------------------------------------------------- 1 | package com.jackson0714.passjava.threads; 2 | 3 | /** 4 | 演示volatile 禁止重排 5 | * @author: 悟空聊架构 6 | * @create: 2020-08-13 7 | */ 8 | 9 | 10 | public class VolatileResort { 11 | static int num = 0; 12 | static boolean flag = false; 13 | public static void init() { 14 | num = 1; 15 | flag = true; 16 | } 17 | public static void add() { 18 | while (flag) { 19 | num = num + 5; 20 | flag = false; 21 | System.out.println("num:" + num); 22 | } 23 | } 24 | public static void main(String[] args) throws InterruptedException { 25 | Thread t1 = new Thread(() -> { 26 | add(); 27 | },"子线程 t1"); 28 | 29 | Thread t2 = new Thread(() -> { 30 | init(); 31 | },"子线程 t2"); 32 | 33 | t2.start(); 34 | t1.start(); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /docs/109.学习笔记/01.Redis核心技术与实战/07.如何应对变慢的Redis(下篇).md: -------------------------------------------------------------------------------- 1 | # Redis 性能问题排查 2 | 3 | Redis 性能变慢时,按照这些步骤逐一检查,高效地解决问题。 4 | 5 | - 获取 Redis 实例在当前环境下的基线性能。 6 | - 是否用了慢查询命令?如果是的话,就使用其他命令替代慢查询命令,或者把聚合计算命令放在客户端做。 7 | - 是否对过期 key 设置了相同的过期时间?对于批量删除的 key,可以在每个 key 的过期时间上加一个随机数,避免同时删除。 8 | - 是否存在 bigkey? 对于 bigkey 的删除操作,如果你的 Redis 是 4.0 及以上的版本,可以直接利用异步线程机制减少主线程阻塞;如果是 Redis 4.0 以前的版本,可以使用 SCAN 命令迭代删除;对于 bigkey 的集合查询和聚合操作,可以使用 SCAN 命令在客户端完成。 9 | - Redis AOF 配置级别是什么?业务层面是否的确需要这一可靠性级别?如果我们需要高性能,同时也允许数据丢失,可以将配置项 no-appendfsync-on-rewrite 设置为 yes,避免 AOF 重写和 fsync 竞争磁盘 IO 资源,导致 Redis 延迟增加。当然, 如果既需要高性能又需要高可靠性,最好使用高速固态盘作为 AOF 日志的写入盘。 10 | - Redis 实例的内存使用是否过大?发生 swap 了吗?如果是的话,就增加机器内存,或者是使用 Redis 集群,分摊单机 Redis 的键值对数量和内存压力。同时,要避免出现 Redis 和其他内存需求大的应用共享机器的情况。 11 | - 在 Redis 实例的运行环境中,是否启用了透明大页机制?如果是的话,直接关闭内存大页机制就行了。 12 | - 是否运行了 Redis 主从集群?如果是的话,把主库实例的数据量大小控制在 2~4GB,以免主从复制时,从库因加载大的 RDB 文件而阻塞。 13 | - 是否使用了多核 CPU 或 NUMA 架构的机器运行 Redis 实例?使用多核 CPU 时,可以给 Redis 实例绑定物理核;使用 NUMA 架构时,注意把 Redis 实例和网络中断处理程序运行在同一个 CPU Socket 上。 14 | 15 | -------------------------------------------------------------------------------- /docs/11.Docker/01.DockerBase/Docker_Logs.md: -------------------------------------------------------------------------------- 1 | # 查看 docker service 的日志 2 | 3 | 要查看 Ubuntu 上 Docker 服务的日志,可以使用 journalctl 命令,该命令可以显示系统服务的日志记录。以下是查看 Docker 服务日志的步骤: 4 | 5 | 1. 打开终端并以管理员身份登录。 6 | 7 | 2. 运行以下命令以显示 Docker 服务的日志: 8 | 9 | ``` 10 | sudo journalctl -u docker.service 11 | ``` 12 | 13 | 该命令将显示 Docker 服务的详细日志记录。您可以通过向上或向下滚动终端窗口来查看完整的日志记录。 14 | 15 | 3. 如果您只想查看最近的几个日志条目,请使用以下命令: 16 | 17 | ``` 18 | sudo journalctl -u docker.service -n 50 19 | ``` 20 | 21 | 该命令将显示 Docker 服务的最近 50 条日志条目。 22 | 23 | 4. 如果您只想查看特定日期或时间之后的日志,请使用以下命令: 24 | 25 | ``` 26 | sudo journalctl -u docker.service --since "2022-03-01" --until "2022-03-31" 27 | ``` 28 | 29 | 该命令将显示从 2022 年 3 月 1 日至 2022 年 3 月 31 日之间的 Docker 服务日志。 30 | 31 | 5. 如果您希望实时监视 Docker 服务的日志,请使用以下命令: 32 | 33 | ``` 34 | sudo journalctl -u docker.service -f 35 | ``` 36 | 37 | 该命令将在终端窗口中实时显示 Docker 服务的日志。要停止日志监视,请按 Ctrl + C。 38 | 39 | 请注意,具体步骤可能因您的操作系统和配置而异。如果您遇到任何问题,请参阅 Docker 文档或向 Docker 社区寻求帮助。 -------------------------------------------------------------------------------- /docs/01.PassJava/03.Deploy/08.Windows安装mysql.md: -------------------------------------------------------------------------------- 1 | 安装mysql 2 | 3 | ![mark](http://cdn.jayh.club/blog/20200610/TkeERMXCMQlu.png?imageslim) 4 | 5 | 6 | 7 | ## 问题1:windows用syslog连接本地mysql数据库,提示 plugin caching_sha2_password 8 | 9 | ![mark](http://cdn.jayh.club/blog/20200426/MUb6xENWSIOh.png?imageslim) 10 | 11 | 解决方案: 12 | 13 | ```sql 14 | ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123'; 15 | ``` 16 | 17 | ![mark](http://cdn.jayh.club/blog/20200426/Ky258k2bJazi.png?imageslim) 18 | 19 | ## 问题2.Host is not allowed to connect to this MySQL server 20 | 21 | 使用远程连接mysql的时候碰到这样的错误: 22 | 23 | Host is not allowed to connect to this MySQL server。 24 | 25 | 简单的解决方式如下: 26 | 27 | (1)修改表。可能是你的帐号不允许从远程登陆,只能在localhost。这个时候只要在localhost的那台电脑,登入mysql后,更改 "mysql" 数据库里的 "user" 表里的 "host" 项,从"localhost"改称"%" 28 | 29 | mysql -u root -p 30 | 31 | 按照提示输入密码 32 | 33 | mysql>use mysql; 34 | 35 | mysql>update user set host = '%' where user = 'root'; 36 | 37 | (2)修改完后执行如下SQL命令 38 | 39 | flush privileges -------------------------------------------------------------------------------- /docs/109.学习笔记/07.Redis源码剖析和实战/01.源码框架.md: -------------------------------------------------------------------------------- 1 | 回答每课一问: 2 | Redis 从 4.0 版本开始,能够支持后台异步执行任务,比如异步删除数据,你能在 Redis 功能源码中,找到实现后台任务的代码文件么? 3 | 4 | 我翻看了 3.0 的源码,发现 3.0 就支持后台任务了。在文件 src\bio.c 里面有一个后台任务的函数: 5 | bioProcessBackgroundJobs,支持两种后台任务:关闭文件和 AOF 文件的 fsync 也是放到后台执行的。 6 | 7 | (fsync 就是执行命令后将命令写到日志中,提供了三种策略:Always,同步写回,Everysec,每秒写回,No,操作系统控制的写回。) 8 | 9 | 疑问:根据 3.0 源码,Redis 3.0 其实就已经有后台任务了,老师在文中说的 4.0 才开始支持后台任务,我没理解。 10 | 11 | 然后我又去翻了下 4.0 的源码,增加一种后台任务:BIO_LAZY_FREE。 12 | 13 | 当任务类型等于 BIO_LAZY_FREE 时,针对不同的传参,可以释放对象、数据库、跳跃表。 14 | 15 | 对于释放可以稍微说一下,释放的源码在这个文件里面:\src\lazyfree.c,相对 3.0 来说,这个文件是新增加的。 16 | 17 | 关于对象的释放,我们可以联想到 Java 的垃圾回收算法:可达性分析算法,但是 Redis 的垃圾回收算法用的是引用计数算法,另外 PHP 的垃圾回收算法用的也是引用计数(扩展下:用了多色标记的方式,来识别垃圾,详细参考这里:https://mp.weixin.qq.com/s/n6PGIgfZ8vXUZ1rkU5Otog),所以别再说引用计数不能用做垃圾回收了哦。 18 | 19 | 而对于 Redis 释放对象来说,会减少引用的次数,调用的是这个函数:decrRefCount(o); 根据函数的名字也容易理解。 20 | 21 | 吐槽下:Github 上下载源码总是下载失败,为了其他同学们方便下载,我整理了多套源码的下载地址,都是国内的网盘链接,只有几MB 大小,下载比较快的。 22 | 23 | http://www.passjava.cn/#/12.Redis/00.DownloadRedis 24 | 25 | -------------------------------------------------------------------------------- /docs/98.idea/25.ChatGPT专栏上线.md: -------------------------------------------------------------------------------- 1 | 庆六一,悟空的 ChatGPT 专栏已上线!! 2 | 3 | 你好,我是悟空。 4 | 5 | 喜大普奔,我的第二个专栏`《ChatGPT 十大妙用》` 今天上线到 `蓝桥`网课了,今天正好参加了一场六一儿童节文艺汇演,妙哉妙哉! 6 | 7 | 对了,你可能想知道我的第一个专栏是什么,就是[《JVM 性能调优实战》](https://mp.weixin.qq.com/s?__biz=MzAwMjI0ODk0NA==&mid=2451951190&idx=1&sn=338fbb02d20a821c04a56828e6e4dfaa&chksm=8d1c37c9ba6bbedfb95dfdde3661a76d64f9f38677c57a4e0d3e941330b76dd7c18dfc82e237&token=165097302&lang=zh_CN#rd)。 8 | 9 | 下面是 ChatGTP 专栏的介绍: 10 | 11 | ![](../../../../../Library/Application%20Support/typora-user-images/image-20230530132547528.png) 12 | 13 | ### 效果展示 14 | 15 | ![7-4](https://doc.shiyanlou.com/courses/20045/1479272/798bdbb7b2fe4ce46a64d8caf3d4b77f-0/wm) 16 | 17 | ![3-6](https://doc.shiyanlou.com/courses/20045/1479272/c917a2e1c633fca3b59af646f1c4efdc-0/wm) 18 | 19 | 特地申请了一些折扣活动,下方扫码,限时 `4 折`特价购买,一杯奶茶的钱就能带回家~ 20 | 21 | ![ChatGPT课程二维码](http://cdn.jayh.club/uPic/ChatGPT%E8%AF%BE%E7%A8%8B%E4%BA%8C%E7%BB%B4%E7%A0%81WOFnGm.png) 22 | 23 | 24 | 25 | 26 | 27 | https://www.lanqiao.cn/courses/20045 -------------------------------------------------------------------------------- /docs/美团骑手面试.md: -------------------------------------------------------------------------------- 1 | 美团面了大概四十分钟,全程细节拷打,面完汗流浃背,感觉过不了了,看面经吧 2 | 3 | 消息队列 4 | 5 | 店家:生产者 6 | 7 | 骑手:消息队列,包含 Exchange,Broker,队列 8 | 9 | 顾客:消费者 10 | 11 | 12 | 13 | 14 | 15 | > 说说你平时是怎么送餐的?直接傻瓜式回答拧车把就走了 16 | 17 | 消息队列你是一点不提? 18 | 19 | > 如果送餐途中下雨了,你会怎么办?回答找个地方躲着,然后就问我那订单超时怎么办,答不出来了。。。 20 | 21 | 消息队列不工作了,消费者收不到消息怎么办?消息超时怎么办? 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 1. 如果有个地方爆单,同时有多个不同楼层但是是同一栋楼的地方下单,可能是什么情况?答不出来,乱蒙了个可能在开派对,有没有大佬知道的 30 | 2. 如果到了商家,但商家还没把餐备好,你会怎么做?直接回答干等着了,然后感觉这样回答不太好,又补了句我可能会催催商家。。。 31 | 3. 实际送餐过程中有没有考虑过使用多部手机?我说配送账号就一个,没必要使用多部手机。面试官好像不太满意 32 | 4. 送到餐了,但客户一直不来取餐,你会怎么办?阻塞等待吗?我说会打电话催促客户,客户一直不来的话就把餐放到地点,然后拍照走人,然后问我这样做有没有考虑过外卖丢失的情况,外卖丢失怎么办,完了,又掉进坑了 33 | 5. 有没有送错餐的情况?我说实际没遇过这种场景,面试官又不太满意了。。。搞不懂,一定要有实际解决过出错的经验吗。。。没出错不是更好吗。。。 34 | 6. 餐箱满了,但你又接单了,餐箱放不下了,出现了Out Of Box,如何解决?我说一般我会每次接单前检查下餐箱容量,有空间才会接新的单,又追问这样会不会影响接单效率,如果被其它骑手抢单了怎么办?完了,又又掉进坑了。。。 35 | 7. 送餐过程有没有把外卖进行分类?我说我一般电动车前后有两个餐箱,前面放带有汤水易撒的,后面放比较干的外卖。总算是能答出一题了 36 | 8. 看了下我送的最快的一单,问我为什么那一单10s就送达了。因为客户就在店里面,当堂点外卖是为了用券。。。我这个订单是不是有点水了,但鼠鼠是真没什么订单拿得出手了 37 | 38 | 做了道算法,一道贪心,给定单子信息,寻找最短配送路线,之前刷过,10分钟a出来了 -------------------------------------------------------------------------------- /code/01.Threads/src/com/jackson0714/passjava/threads/VolatileAtomicity.java: -------------------------------------------------------------------------------- 1 | package com.jackson0714.passjava.threads; 2 | 3 | import java.util.concurrent.atomic.AtomicInteger; 4 | 5 | /** 6 | 演示volatile 不保证原子性 7 | * @author: 悟空聊架构 8 | * @create: 2020-08-13 9 | */ 10 | 11 | public class VolatileAtomicity { 12 | public static volatile int number = 0; 13 | 14 | public synchronized static void increase() { 15 | number++; 16 | } 17 | 18 | public static AtomicInteger atomicInteger = new AtomicInteger(); 19 | 20 | public static void main(String[] args) { 21 | 22 | for (int i = 0; i < 20; i++) { 23 | new Thread(() -> { 24 | for (int j = 0; j < 1000; j++) { 25 | atomicInteger.getAndIncrement(); 26 | } 27 | }, String.valueOf(i)).start(); 28 | } 29 | 30 | // 当所有累加线程都结束 31 | while(Thread.activeCount() > 2) { 32 | Thread.yield(); 33 | } 34 | 35 | System.out.println(atomicInteger); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /docs/110.Temp/03.IDEA报错.md: -------------------------------------------------------------------------------- 1 | Cannot deserialize value of type `java.time.LocalDateTime` from String "2022" 2 | 3 | 4 | 5 | 解决方案: 6 | 7 | https://www.cnblogs.com/aboruo/p/15721210.html 8 | 9 | 10 | 11 | 1. 要求参数为 "2021-12-22T18:56",中间加"T"(ISO-8601) 才能够正常实现反序列化,yyyy-MM-dd HH:mm:ss 格式的字符串反序列化会报异常,异常信息如下: 12 | 13 | org.springframework.http.converter.HttpMessageNotReadableException: Invalid JSON input: Cannot deserialize value of type `java.time.LocalDateTime` from String "2021-12-22 18:56:40": Failed to deserialize java.time.LocalDateTime: (java.time.format.DateTimeParseException) Text '2020-05-04 00:00' could not be parsed at index 10; nested exception is com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot deserialize value of type `java.time.LocalDateTime` from String "2021-12-22 18:56:40": Failed to deserialize java.time.LocalDateTime: (java.time.format.DateTimeParseException) Text '2021-12-22 18:56:40' could not be parsed at index 10 // 省略部分异常信息 Caused by: java.time.format.DateTimeParseException: Text '2021-12-22 18:56:40' could not be parsed at index 10 -------------------------------------------------------------------------------- /docs/98.idea/06.和两位技术大佬吃饭.md: -------------------------------------------------------------------------------- 1 | # 进城和两位大佬一起交流技术,可不要贪杯 2 | 3 | 两位大佬就是顶级号主 `Guide 哥`和`雷架`了,他俩的技术都非常厉害,悟空望其项背,这次雷架盛情邀约一起`交流技术`,作为一名小弟,当然要赴约了。聚会的地点距离悟空家有大约`40 公里`的路程,为了交流技术,悟空也算是西天取小经了一把。 4 | 5 | 武汉的烧烤算是比较出名的,物美价廉。上次和 Guide 哥还有一枝花一起吃过烧烤,没想到 Guide 哥的品味依旧没变,钟爱武汉的烧烤啊!听说 Guide 哥很能喝,就点了 n 瓶啤酒试试 Guide 哥的酒量吧。 6 | 7 | 雷架约我和 Guide 哥好多次线下交流技术,这次终于大家都有时间,安排上了。雷架看起来斯斯文文的,但是语出惊人,确实符合程序猿的气质,是吧? 8 | 9 | 下面是聚会的地方,来张合照吧,武汉的疫情防控不能松懈,口罩要带好~ 10 | 11 | ![mark](http://cdn.jayh.club/blog/20210117/gHU45M3POlsJ.png?imageslim) 12 | 13 | 14 | 15 | ![mark](http://cdn.jayh.club/blog/20210117/Wnb1Je25wJ4B.png?imageslim) 16 | 17 | ![mark](http://cdn.jayh.club/blog/20210117/TGJXDTFvWF84.png?imageslim) 18 | 19 | Guide 哥是“JavaGuide”的号主,专注 Java 后端学习和大厂面试,开源项目 - JavaGuide (90k+star) 作者,一个有理想有情怀的技术大佬。 20 | 21 | ![mark](http://cdn.jayh.club/blog/20210117/HnlI4C4wjs7U.png?imageslim) 22 | 23 | 雷架是”爱笑的架构师“的号主。人挺帅,说话风趣幽默,华中科技大学硕士,目前大厂打工中。他的公号平时会发一些 Java 后端相关的文章,质量都非常高! 24 | 25 | ![爱笑的架构师](http://cdn.jayh.club/blog/20210117/S26izncqo4tx.png?imageslim) 26 | 27 | **强烈推荐大家关注一下这两位技术大佬。** 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /docs/04.Architecture/01.架构图解/10.用分布式锁做幂等防重.md: -------------------------------------------------------------------------------- 1 | 第一版:先获取 key 是否存在,如果存在,则直接返回,不做业务处理,如果不存在,则设置一个 key。设置 key 的自动过期时间为 2s 2 | 3 | 4 | 5 | ``` 6 | // 幂等校验 7 | if (checkConcurrentRequest(phone)) { 8 | log.warn("concurrent api request, not upsert oyo member", "phone", phone, "memberParams", memberParams); 9 | return generateResponse(phoneMember, API_RESULT_CONCURRENT); 10 | } 11 | // 将 phone 设置到 redis 中,用来做幂等校验 12 | setPhoneRedisKey(phone); 13 | ``` 14 | 15 | 问题 1:并发情况下,假设两个请求都没有获取到 key,则都会执行业务逻辑 16 | 17 | 问题 2:当业务逻辑执行完后,没有主动清理 key,后续请求必须等待 key 自动过期,效率太低。 18 | 19 | 20 | 21 | 第二版:抢占锁,如果能抢到,则执行业务逻辑,执行完后再清理锁。如果没有抢到,则直接返回。 22 | 23 | 抢占锁 24 | 25 | ``` 26 | redisTemplate.opsForValue().setIfAbsent(key, phone, 2, TimeUnit.SECONDS); 27 | ``` 28 | 29 | 释放锁 30 | 31 | ``` 32 | String key = RedisUtils.buildKey("oyo", phone); 33 | // 脚本解锁 34 | String script = "if redis.call('get',KEYS[1]) == ARGV[1] then return redis.call('del',KEYS[1]) else return 0 end"; 35 | Long deleteResult = redisTemplate.execute(new DefaultRedisScript<>(script, Long.class), Arrays.asList(key), phone); 36 | ``` -------------------------------------------------------------------------------- /docs/05.Interview/05.DesignPattern/04.中介者模式MediatorPattern.md: -------------------------------------------------------------------------------- 1 | # 中介者模式 2 | 3 | GoF 设计模式中的定义: 4 | 5 | > Mediator pattern defines a separate (mediator) object that encapsulates the interaction between a set of objects and the objects delegate their interaction to a mediator object instead of interacting with each other directly 6 | 7 | 翻译成中文:中介模式定义了一个单独的(中介)对象,来封装一组对象之间的交互。将这组对象之间的交互委派给与中介对象交互,来避免对象之间的直接交互。 8 | 9 | 想一下微服务中的注册中心,这不正是中介者么,所有微服务想要调用其他微服务,都需要从注册中心拿到其他微服务的地址。 10 | 11 | 坏处: 12 | 13 | - 中介者要干的活太多了,容易造成这个类的代码量很大。 14 | - 如果这个中介者是一个服务,那么很多服务都依赖这个服务,容易造成高可用瓶颈,当然还可以通过扩容中介者来提升可用性,但是维护成本也随之增加。 15 | - 中介者更像是一个掌控全局的类,承担了很多其他类的职责,大而复杂。 16 | 17 | 所以需要平衡对象之间交互的复杂度和中介类本身的复杂类。 18 | 19 | ### 中介者 VS 观察者模式的对比 20 | 21 | #### 观察者 22 | 23 | 经典的观察者模式没有彻底解耦观察者和被观察者,观察者需要注册到被观察者中,被观察者状态更新需要调用观察者的 update() 方法。 24 | 25 | 跨进程的实现方式中,可以用消息队列彻底解耦。 26 | 27 | #### 中介者 28 | 29 | 中介者也是为了实现解耦,而消息队列就可以当做一个中介者。 30 | 31 | 观察者模式中,一个参与者一般只有一种身份,要么是观察者,要么是被观察者。大部分情况西,参与者之间的交互比较简单,都是单向的。 32 | 33 | 中介者模式中,参与者之间交互成本很高,用中介模式,另外需要保证调用顺序的时候,可以通过中介者来保证顺序。当用消息队列作为中介者时,参与者既可以是消息的发送者,也可以是消息的接收者。 34 | 35 | -------------------------------------------------------------------------------- /docs/108.MacBook使用技巧/10.Mac系统问题.md: -------------------------------------------------------------------------------- 1 | ## 一、Mac home 目录权限问题 2 | 3 | mac 是基于unix, 自带就有home目录,但是为空。home目录的默认所属用户是root wheel,mac默认的root账号所属用户是root admin,所以root也无法在home目录下创建文件夹。如果非要使用home目录,下面会详细说明(**备注:个人不建议使用home目录**) 4 | 5 | 6 | 7 | **1,修改auto_master** 8 | 9 | ``` 10 | $ sudo vim /etc/auto_master ``# ``# Automounter master map ``# ``+auto_master # Use directory service ``/net -hosts -nobrowse,hidefromfinder,nosuid ``#/home auto_home -nobrowse,hidefromfinder //注释掉本行 ``/Network/Servers -fstab ``/- -``static 11 | ``` 12 | 13 | **2,加载auto_master** 14 | 15 | ``` 16 | $ cd / ``//必须切换到根目录 ``$ sudo automount ``//必须在根目录下执行 17 | ``` 18 | 19 | **3,创建目录与修改权限** 20 | 21 | ``` 22 | $ sudo mkdir /home/test ``//创建目录 ``$ cd /home ``$ sudo chown zhangying.staff -R test ``//修改文件所属 ``$ ls -l /home/ ``total 0 ``dr-xr-xr-x 7 root wheel 238 2 26 17:48 ./ ``drwxr-xr-x 30 root wheel 1088 8 30 17:28 ../ ``drwxr-xr-x 2 zhangying staff 68 2 26 17:45 test/ 23 | ``` 24 | 25 | ## 二、Mac 连不上 某个 WIFI 网络 26 | 27 | 尝试先移除这个网络,然后再次连接这个网络。 28 | 29 | ![](http://cdn.jayh.club/uPic/image-202208250850566125qrObm.png) -------------------------------------------------------------------------------- /docs/03.SpringBoot/09.Object划分.md: -------------------------------------------------------------------------------- 1 | # Object划分 2 | 3 | ## 1.PO (Persistant object) 持久对象 4 | 5 | PO就是对应数据库中某个表中的一条记录,多个记录可以用PO的集合。PO中应该不包含任何对数据库的操作 6 | 7 | ## 2.DO (Domain Object) 领域对象 8 | 9 | 就是从现实世界中抽象出来的有形或无形的业务实体 10 | 11 | ## 3.TO (Transfer Object) 数据传输对象 12 | 13 | 不同的应用程序之间传输的对象 14 | 15 | ## 4.DTO (Data Transfer Object) 数据传输对象 16 | 17 | 这个概念来源J2EE的设计模式,原来的目的是为了EJB的分布式应用提供粗粒度的数据实体,以减少分布式调用的次数。从而提供分布式调用的性能和降低网络负载,但在这里,泛指用于展示层和服务层之间的数据传输对象。 18 | 19 | ## 5.VO (Value Object) 值对象 20 | 21 | 通常用于业务层之间的数据传输,和PO一样也是仅仅包含数据而已。但应是抽象出的业务对象,可以和表对应,也可以不对应,根据业务的场景。用new关键字创建,由GC回收。 22 | 23 | 视图对象 24 | 25 | 接收页面传递过来过来的数据,封装成对象。 26 | 27 | 将业务处理完成的对象,封装成页面要用的数据。 28 | 29 | ## 6.BO (Business Object) 业务对象 30 | 31 | 把业务逻辑封装为一个对象。这个对象可以包括一个或多个其它的对象。一个BO包含多个PO,处理业务逻辑时,可以针对BO去处理。 32 | 33 | ## 7.POJO (Plain Ordinary Java Object) 简单无规则java对象 34 | 35 | 最基本的Java Bean,只有属性字段及setter和getter方法。 36 | 37 | POJO是DO/DTO/BO/VO的统称。 38 | 39 | ## 8.DAO (Data Access Object) 数据访问对象 40 | 41 | 是一个sun的一个标准j2ee设计模式,这个模式中有个接口就是DAO,持久层的操作。为业务层提供接口。此对象用于访问数据库。通常和PO结合使用。DAO中包含了各种数据库的操作方法。通过它的方法,结合PO对数据库进行相关的操作。夹在业务逻辑与数据资源中间。配合VO,提供数据的CRUD操作。 -------------------------------------------------------------------------------- /docs/99.tools/99.IDEA调试Java源码.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | # 如何配置IDEA来调试Java源码 4 | 5 | 环境:IDEA 2019.3 旗舰版,Java 1.8.0 6 | 7 | # 一、源码解压 8 | 9 | - 找到源码压缩包 10 | - 源码压缩包在Java安装的根目录 11 | 12 | ![mark](http://cdn.jayh.club/blog/20200820/jFqG5SnfMgYS.png?imageslim) 13 | 14 | - 拷贝到D盘,并解压缩。 15 | 16 | ![mark](http://cdn.jayh.club/blog/20200820/ttOBd3kpjOnC.png?imageslim) 17 | 18 | # 二、配置IDEA 19 | 20 | ``` java 21 | File->Project Structure->Platform Settings->SDKs->Sourcepath 22 | ``` 23 | 24 | - 将默认配置的源码路径删掉,配置成自己解压的文件夹路径 25 | 26 | ![mark](http://cdn.jayh.club/blog/20200820/jjrNfCfs6Qob.png?imageslim) 27 | 28 | - 配置程序可以调试进入源代码 29 | 30 | ```java 31 | File->Settings->Build, Execution, Deployment->Debugger->Stepping->Do not step into the classes 32 | ``` 33 | 34 | 不勾选`java.*`、`javax.*` 35 | 36 | ![mark](http://cdn.jayh.club/blog/20200820/lGMIKYMUqg3D.png?imageslim) 37 | 38 | 这个时候我们就可以看到源码 39 | 40 | ![mark](http://cdn.jayh.club/blog/20200820/HM2R6sgPRmqt.png?imageslim) 41 | 42 | # 三、Debug 源码 43 | 44 | 在源码里面打一个断点,IDEA开启调试模式,就可以开始调试源码啦! 45 | 46 | ![mark](http://cdn.jayh.club/blog/20200820/yoSyRAsKgabe.png?imageslim) -------------------------------------------------------------------------------- /docs/04.Architecture/04.高可用集群篇/99.k8s从原理到实践.md: -------------------------------------------------------------------------------- 1 | # 整个开源项目,我把 K8S 学了一遍 2 | 3 | ## 背景 4 | 5 | 老读者都知道我在做一个开源项目:PassJava,基于 Spring Cloud 做的一套面试刷题管理平台。 6 | 7 | > https://github.com/Jackson0714/PassJava-Platform 8 | 9 | 下面是这个开源项目的架构图: 10 | 11 | ![架构图](http://cdn.jayh.club/blog/20210324/s4JkkxoCHmQW.png?imageslim) 12 | 13 | 一直想把这个开源项目部署到服务器,而我又想通过集群的方式来部署。思来想去,考虑用 K8S(全称 Kubernets) 容器管理平台来集群化部署这套系统,正好可以学习如何从 0 开始搭建一套具有集群的微服务系统。 14 | 15 | **我会分为三篇来讲解 Kubernets(简称 k8s)的原理、搭建和使用。** 16 | 17 | \- **上篇**:k8s 的原理。 18 | 19 | \- **中篇**:搭建 k8s 集群。 20 | 21 | \- **下篇**: k8s 的使用。 22 | 23 | 为什么要分成三篇,因为每一篇都很长,而且侧重点不一样,所以分成三篇来讲解。 24 | 25 | 另外,如何用 k8s 来部署我的开源项目,我会放到后面作为专题来讲。 26 | 27 | ## 1. Kubernets 如何学 28 | 29 | Kubernets 简称 k8s,用于自动部署,扩展和管理容器化应用程序的开源系统。也就是能帮我们部署和管理分布式系统。 30 | 31 | 下面是学习 Kubernets 的好地方: 32 | 33 | 中文官网:https://kubernetes.io/zh/ 34 | 35 | 官方文档:https://kubernetes.io/zh/docs/home/(推荐) 36 | 37 | 中文社区:https://www.kubernetes.org.cn/ 38 | 39 | 社区文档:http://docs.kubernetes.org.cn/ 40 | 41 | ## Kubernets 基本原理 42 | 43 | 44 | 45 | ## Kubernets 架构原理 46 | 47 | 48 | 49 | ## Kubernets 核心知识 50 | 51 | 52 | 53 | -------------------------------------------------------------------------------- /docs/04.Architecture/03.用故事讲解技术/99.TODO/99.疫情下如何「硬套」高可用架构.md: -------------------------------------------------------------------------------- 1 | # 疫情下,程序员间的一次对话 2 | 3 | 4 | 5 | 大家好,我是悟空呀~ 6 | 7 | 本篇文章的思路来源:读者群里有些大佬在探讨是否可以通过「熔断」措施,来阻断疫情的传播。 8 | 9 | 先声明下:这篇不会深入探讨技术,也不会讨论疫情防控的错与对,更像是工程师间的一次有趣的对话,希望疫情早日结束。 10 | 11 | 12 | 13 | S 城为什么还不封城? 14 | 15 | 核心模块,咋能说停服就停服? 16 | 17 | 18 | 19 | S 城怎么只封部分小区? 20 | 21 | 限流,限流,限流。 22 | 23 | 24 | 25 | S 城怎么封城了? 26 | 27 | 造成服务雪崩了,执行熔断了呗。 28 | 29 | 30 | 31 | S 城怎么还有火车票在售? 32 | 33 | Nginx 正向代理一些请求出去~ 34 | 35 | 36 | 37 | S 城开始建放舱了呀! 38 | 39 | 找出 bug,一起修复呗。 40 | 41 | 42 | 43 | 封楼栋了,赶紧搬到其他楼栋去吧。 44 | 45 | Redis Cluster 集群模式下的 slot 迁移呗。(Redis 集群) 46 | 47 | 48 | 49 | 楼栋怎么是一栋一栋慢慢封的? 50 | 51 | 故障实例慢慢摘除呗,防止误删啊。(注册中心的故障摘除机制) 52 | 53 | 54 | 55 | 小区封了,这还怎么玩? 56 | 57 | 部分微服务宕机了,等 bug 修复了,再重启呗。 58 | 59 | 60 | 61 | 菜没有发给我们,怎么办? 62 | 63 | CPU 的时间片还没有轮到你啊。 64 | 65 | 66 | 67 | 听说又要解封了? 68 | 69 | 核心服务不能停太长时间。 70 | 71 | 72 | 73 | 解封后,那么多人跑出去怎么办? 74 | 75 | 将压力「负载均衡」到其他地方呗。(Ribbon 负载均衡) 76 | 77 | 78 | 79 | S 城为什么分封控区、管控区、防范区? 80 | 81 | 对应生产环境、UAT 环境、开发环境。生产环境上别瞎玩。 82 | 83 | 84 | 85 | 很多普通病人不能去医院,电话打不进去。 86 | 87 | 中心化,有性能瓶颈。 88 | 89 | 90 | 91 | -------------------------------------------------------------------------------- /docs/109.学习笔记/03.高并发系统设计/19.如何降低消息队列系统中消息的延迟?.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | # 19.如何降低消息队列系统中消息的延迟? 4 | 5 | ## 监控消息的延迟有两种方式 6 | 7 | - 使用消息队列提供的工具,通过监控消息的堆积来完成; 8 | 9 | - 通过生成监控消息的方式来监控消息的延迟情况。 10 | 11 | ### 工具一、 12 | 13 | ``` 14 | ./bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --describe --group test-consumer-group 15 | ``` 16 | 17 | ![](http://cdn.jayh.club/blog/20210701/UN8cCAkncjBE.png?imageslim) 18 | 19 | 图中的前两列是队列的基本信息,包括话题名和分区名; 20 | 21 | 第三列是当前消费者的消费进度; 22 | 23 | 第四列是当前生产消息的总数; 24 | 25 | 第五列就是消费消息的堆积数(也就是第四列与第三列的差值)。 26 | 27 | ### 工具二、JMX 28 | 29 | ![mark](http://cdn.jayh.club/blog/20210701/fI4an74JtoU9.png?imageslim) 30 | 31 | ### 生成监控消息的方式 32 | 33 | 你先定义一种特殊的消息,然后启动一个监控程序将这个消息定时地循环写入到消息队列中,消息的内容可以是生成消息的时间戳并且也会作为队列的消费者消费数据。业务处理程序消费到这个消息时直接丢弃掉,而监控程序在消费到这个消息时就可以和这个消息的生成时间做比较,如果时间差达到某一个阈值就可以向我们报警。 34 | 35 | ![](https://static001.geekbang.org/resource/image/34/7f/34820c0b27e66af37fda116a1a98347f.jpg) 36 | 37 | ## 减少消息延迟的正确姿势 38 | 39 | - 优化消费代码提升性能; 40 | 41 | - 增加消费者的数量(这个方式比较简单)。 42 | 43 | ## 读取性能优化 44 | 45 | - 消息的存储。 46 | 47 | 使用本地磁盘作为存储介质。Page Cache 的存在就可以提升消息的读取速度, 48 | 49 | - 零拷贝技术。 50 | 51 | -------------------------------------------------------------------------------- /docs/99.tools/10.IDEA插件.md: -------------------------------------------------------------------------------- 1 | IntelliJ IDEA 2019.1 现已正式发布,最值得关注的新特性包括:支持定制主题、支持 Java 12 Switch 表达式、在 Docker 容器内调试 Java 应用等。 2 | 3 | 4 | 作为今年的首个重大更新版本,2019.1 带来了许多新功能和改进。 5 | 6 | IntelliJ 都升级了,你还在为自己的IntelliJ不如别人的好用而烦恼? 7 | 8 | 只能说,那是因为你的插件没用好! 9 | 10 | 今天就给大家介绍几种好用的Intellij插件。 11 | 12 | ignore 13 | 喜欢用git的朋友一定也熟悉ignore,利用该插件可以生成各种ignore文件,一键创建git ignore文件的模板,解决了手动去配置的麻烦。 14 | 15 | 16 | lombok 17 | 这个插件,通过注解的形式去解决这些麻烦,同时还可以通过注解去完成构造函数等... 18 | 19 | 20 | FindBugs-IDEA 21 | 写完代码后检测下 避免低级bug,强烈推荐FindBugs-IDEA,一不小心就发现很多老代码的bug! 22 | 23 | 24 | GsonFormat 25 | 一键根据json文本生成java类,可以说是非常方便了! 26 | 27 | 28 | Maven Helper 29 | 一键查看maven依赖,查看冲突的依赖,一键进行exclude依赖。对于大型项目来说,非常方便! 30 | 31 | 32 | VisualVM Launcher 33 | 运行java程序的时候启动visualvm,方便查看jvm的情况,vm调优必备工具。 34 | 35 | 36 | GenerateAllSetter 37 | 这个插件可以一键调用一个对象的所有set方法并且赋予默认值。 38 | 39 | 40 | MyBatisCodeHelperPro 41 | mybatis代码自动生成插件,大部分单表操作的代码可自动生成 减少重复劳动,大幅提升效率哦~ 42 | 43 | 44 | 以上的Intellij插件在不同方面都有很不错的使用体验,希望可以帮到大家哦! 45 | ———————————————— 46 | 版权声明:本文为CSDN博主「地缘谷」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 47 | 原文链接:https://blog.csdn.net/weixin_34664632/article/details/113081081 -------------------------------------------------------------------------------- /code/static/css/style.css: -------------------------------------------------------------------------------- 1 | :root{--text_color:var(--theme-color);--docsify_dark_mode_bg:#fff;--docsify_dark_mode_btn:var(--theme-color)}.sidebar,.sidebar-toggle,aside,body,html,main{background:#fff;background:var(--docsify_dark_mode_bg)}#dark_mode>input[type=checkbox]{height:0;width:0;visibility:hidden}#dark_mode>label{cursor:pointer;text-indent:-9999px;width:55px;height:30px;background:var(--theme-color);background:var(--docsify_dark_mode_btn);margin:0 auto;display:flex;justify-content:center;align-items:center;border-radius:100px;position:relative}#dark_mode>label:after{content:"";background:#fff;width:20px;height:20px;border-radius:50%;position:absolute;top:5px;left:4px;transition:.32s cubic-bezier(.68,-.55,.27,1.55)}#dark_mode>input:checked+label{background:var(--theme-color);background:var(--docsify_dark_mode_btn)}#dark_mode>input:checked+label:after{left:calc(100% - 5px);transform:translateX(-100%)}html.transition,html.transition *,html.transition :after,html.transition :before{transition:.42s cubic-bezier(.68,-.55,.27,1.55)!important;transition-delay:0!important}#dark_mode{position:absolute;right:0;top:0}p{color:var(--theme-color);color:var(--text_color)} -------------------------------------------------------------------------------- /docs/meterial/docsify/css/style.css: -------------------------------------------------------------------------------- 1 | :root{--text_color:var(--theme-color);--docsify_dark_mode_bg:#fff;--docsify_dark_mode_btn:var(--theme-color)}.sidebar,.sidebar-toggle,aside,body,html,main{background:#fff;background:var(--docsify_dark_mode_bg)}#dark_mode>input[type=checkbox]{height:0;width:0;visibility:hidden}#dark_mode>label{cursor:pointer;text-indent:-9999px;width:55px;height:30px;background:var(--theme-color);background:var(--docsify_dark_mode_btn);margin:0 auto;display:flex;justify-content:center;align-items:center;border-radius:100px;position:relative}#dark_mode>label:after{content:"";background:#fff;width:20px;height:20px;border-radius:50%;position:absolute;top:5px;left:4px;transition:.32s cubic-bezier(.68,-.55,.27,1.55)}#dark_mode>input:checked+label{background:var(--theme-color);background:var(--docsify_dark_mode_btn)}#dark_mode>input:checked+label:after{left:calc(100% - 5px);transform:translateX(-100%)}html.transition,html.transition *,html.transition :after,html.transition :before{transition:.42s cubic-bezier(.68,-.55,.27,1.55)!important;transition-delay:0!important}#dark_mode{position:absolute;right:0;top:0}p{color:var(--theme-color);color:var(--text_color)} -------------------------------------------------------------------------------- /docs/07.前端进阶/01.安装Vue的devtools插件.md: -------------------------------------------------------------------------------- 1 | ## 1.**下载chrome扩展插件。** 2 | 3 | 在github上下载压缩包并解压到本地,github下载地址:https://github.com/vuejs/vue-devtools 4 | 5 | ## 2. 打包 6 | 7 | 下载完成后打开命令行cmd进入vue-devtools-master文件夹, 8 | 9 | 1. cnpm install 10 | 11 | 2. npm run build 12 | 13 | ![img](http://cdn.jayh.club/blog/20201012/eBPb7WeYiQM2.png?imageslim)) 14 | 15 | npm run build 执行完,会在shells>chrome下的src文件夹里生产如上图所示的几个js文件; 16 | 17 | ![mark](http://cdn.jayh.club/blog/20201012/59uDE0PDHupQ.png?imageslim) 18 | 19 | 20 | 21 | 若不执行以上命令会报错,无法加载背景脚本"build/background.js",如下图: 22 | 23 | ![mark](http://cdn.jayh.club/blog/20201012/rS23paGqjbf6.png?imageslim) 24 | 25 | \3. 打开shells>chrome>manifest.json并把json文件里的"persistent":false改成true 26 | 27 | ![mark](http://cdn.jayh.club/blog/20201012/TXqjQ0n9zB2o.png?imageslim) 28 | 29 | \4. **扩展chrome插件** 30 | 31 | 1.打开chrome浏览器,打开更多工具>扩展程序; 32 | 33 | 2.再点击加载已解压的扩展程序,然后把shells>chrome文件夹放入 34 | 35 | ![mark](http://cdn.jayh.club/blog/20201012/wLPfyi2L16T8.png?imageslim) 36 | 37 | ![mark](http://cdn.jayh.club/blog/20201012/EsQUNhuA3T6W.png?imageslim) 38 | 39 | **5, 测试安装成功** 40 | 41 | 在插件的目录下执行npm run dev,这个时候我们的插件就可以运行了,打开localhost:8080可以看到插件已经安装并运行了。 -------------------------------------------------------------------------------- /docs/04.Architecture/04.高可用集群篇/16.部署Jenkins.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | ``` SH 6 | docker pull jenkins/jenkins 7 | 8 | docker run -d -p 8081:8080 -v /home/jenkins:/var/jenkins_home -t jenkins/jenkins 9 | ``` 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | ![image-20220616155011633](D:/_workspace/wh-docs/images/image-20220616155011633.png) 18 | 19 | ![](D:/_workspace/wh-docs/images/image-20220616154930400.png) 20 | 21 | 22 | 23 | 提示输入密码: 24 | 25 | 26 | 27 | ![image-20220616155029692](D:/_workspace/wh-docs/images/image-20220616155029692.png) 28 | 29 | 30 | 31 | ``` SH 32 | cat /var/jenkins_home/secrets/initialAdminPassword 33 | 7c578e065f094a42b5b61ae0ec100925 34 | ``` 35 | 36 | 37 | 38 | ![image-20220616155728535](D:/_workspace/wh-docs/images/image-20220616155728535.png) 39 | 40 | 41 | 42 | ![image-20220616160820961](D:/_workspace/wh-docs/images/image-20220616160820961.png) 43 | 44 | 45 | 46 | ![image-20220616160753161](D:/_workspace/wh-docs/images/image-20220616160753161.png) 47 | 48 | 49 | 50 | 51 | 52 | https://blog.csdn.net/weixin_43496746/article/details/122313949 53 | 54 | 55 | 56 | 57 | 58 | -------------------------------------------------------------------------------- /docs/109.学习笔记/01.Redis核心技术与实战/14.Redis的原子操作.md: -------------------------------------------------------------------------------- 1 | # Redis 的无锁原子操作来应对并发 2 | 3 | ## 原子操作的两种方式 4 | 5 | 为了实现并发控制要求的临界区代码互斥执行,Redis 的原子操作采用了两种方法: 6 | 7 | - 把多个操作在 Redis 中实现成一个操作,也就是单命令操作; 8 | 9 | - 把多个操作写到一个 Lua 脚本中,以原子性方式执行单个 Lua 脚本。 10 | 11 | ### 单命令操作 12 | 13 | Redis 提供了 INCR/DECR 命令,把这三个操作转变为一个原子操作了。INCR/DECR 命令可以对数据进行增值 / 减值操作,而且它们本身就是单个命令操作,Redis 在执行它们时,本身就具有互斥性。 14 | 15 | ### Lua 脚本 16 | 17 | 如果我们要执行的操作不是简单地增减数据,而是有更加复杂的判断逻辑或者是其他操作,那么,Redis 的单命令操作已经无法保证多个操作的互斥执行了。所以,这个时候,我们需要使用第二个方法,也就是 Lua 脚本。 18 | 19 | Redis 会把整个 Lua 脚本作为一个整体执行,在执行的过程中不会被其他命令打断,从而保证了 Lua 脚本中操作的原子性。如果我们有多个操作要执行,但是又无法用 INCR/DECR 这种命令操作来实现,就可以把这些要执行的操作编写到一个 Lua 脚本中。然后,我们可以使用 Redis 的 EVAL 命令来执行脚本。这样一来,这些操作在执行时就具有了互斥性。 20 | 21 | ## 小测验 22 | 23 | Redis 在执行 Lua 脚本时,是可以保证原子性的,那么,在我举的 Lua 脚本例子(lua.script)中,你觉得是否需要把读取客户端 ip 的访问次数,也就是 GET(ip),以及判断访问次数是否超过 20 的判断逻辑,也加到 Lua 脚本中吗? 24 | 25 | ``` lua 26 | 27 | local current 28 | current = redis.call("incr",KEYS[1]) 29 | if tonumber(current) == 1 then 30 | redis.call("expire",KEYS[1],60) 31 | end 32 | ``` 33 | 34 | 在这个例子中,要保证原子性的操作有三个,分别是 INCR、判断访问次数是否为 1 和设置过期时间。而对于获取 IP 以及判断访问次数是否超过 20 这两个操作来说,它们只是读操作,即使客户端有多个线程并发执行这两个操作,也不会改变任何值,所以并不需要保证原子性,我们也就不用把它们放到 Lua 脚本中了。 -------------------------------------------------------------------------------- /docs/109.学习笔记/99.技术管理/01.如何为团队设定合理的目标.md: -------------------------------------------------------------------------------- 1 | # 如何为团队设定合理的目标 2 | 3 | 4 | 5 | ## 目标设定遵循 Smart 原则 6 | 7 | SMART 原则是一种目标设定和管理的方法,通常用于确保目标具有明确性、可测性、可达性、相关性和时间性。SMART 是一个缩写,代表以下五个关键特征: 8 | 9 | 1. **Specific(明确性)**:目标应该明确、具体,避免模糊或泛泛而谈。明确性有助于清晰地了解目标是什么,如何实现,以及如何评估进展。 10 | 2. **Measurable(可测性)**:目标必须能够量化或测量,以便你可以确定是否已经取得了进展或达到了目标。确保你有明确的标准来衡量成功。 11 | 3. **Achievable(可达性)**:目标应该是实际可行的,能够在给定的资源和时间框架内实现。目标不应该过于不切实际或难以实现。 12 | 4. **Relevant(相关性)**:目标应该与你的长期愿景、价值观和优先事项相关。确保它们对你的整体目标有意义,而不是分散精力。 13 | 5. **Time-bound(时间性)**:目标需要有明确的截止日期或时间框架,以便你可以安排工作和跟踪进展。时间性有助于确保目标不会无限期拖延。 14 | 15 | 通过将目标设定为符合SMART原则,可以更有效地规划和实现目标,减少模糊性,提高可操作性,并提高成功的机会。这种方法经常用于个人、团队和组织层面的目标设定和管理。 16 | 17 | ## 目标的描述形式 18 | 19 | - **可以衡量的**,KPI,关键绩效指标。到某时间点,完成什么工作,该工作实现了哪些功能或达到了哪些效果。 20 | - **不可以衡量的**,KRA/ORK,关键结果指标。到某时间点,完成什么工作,该工作实现了哪些功能或达到了哪些效果。 21 | 22 | ## 设定目标遇到的问题 23 | 24 | - 给予现有资源做目标,而不是基于远方的目标往前推。解决方案:以终为始的出发点,比如调配和补充资源来达成远方的目标。 25 | - 目标不明确。解决方案:结果导向的描述。 26 | - 没有刻意向团队成员来传达。解决方案:目标向下同步。 27 | - 目标总是变来变去。解决方案:专业目标。 28 | 29 | ## 专业目标 30 | 31 | 由团队职能决定,比如服务端团队的稳定性和性能,数据团队的准确性和安全性,功能迭代团队的高效和质量,等等。这些维度最能体现团队核心能力及价值。 32 | 33 | 比如半年内提升 40% 的并发性能,并作为团队的内在追求。 34 | 35 | 内在的专业目标属于重要的事情,而外部压过来的目标,属于紧急的事情。 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /docs/109.学习笔记/01.Redis核心技术与实战/04.有哪些操作会阻塞Redis?怎么解决?.md: -------------------------------------------------------------------------------- 1 | 有哪些操作会阻塞 Redis?如何解决? 2 | 3 | 大家好,我是悟空哥,今天给大家带来的是大厂面试第三题,影响 Redis 性能的操作有哪些? 4 | 面试者小空听到这题后,窃喜,这题简单,不假思索地回答:使用 bigkey 会影响 Redis 的性能。 5 | 面试官面无表情的说道:还有吗? 6 | 小空支支吾吾的没有答上来。 7 | 面试官继续说: 8 | 9 | **第一个**:集合全量查询和聚合操作。因为它们的操作复杂度为O(N),例如集合元素的全量查询操作 HGETALL、SMEMBERS、以及集合的聚合统计操作,例如求交、并、差集。 10 | 11 | **第二个**:bigkey 删除操作。因为删除操作的本质是要释放键值对占用的内存空间。在应用程序释放内存时,操作系统需要把释放掉的内存块插入一个空闲内存的链表,以便后续进行管理和再分配。这个过程本身需要一定时间,另外会阻塞当前释放内存的应用程序。如果一下子释放了大量内存,插入空闲内存块链表的操作时间就会增加,相应地就会造成 Redis 主线程的阻塞。 12 | 13 | **第三个**:清空数据库。在 Redis 清空数据库时,比如 FLUSHDB 和 FLUSHALL 操作,涉及到删除和释放所有的键值对。 14 | 15 | **第四个**:AOF 日志同步写。如果有大量的写操作需要记录在 AOF 日中中,并同步写回的话,就会阻塞主线程了。 16 | 17 | **第五个**:加载 RDB 文件。在主从集群中,主库需要生成 RDB 文件,并传输给从库,创建和传输 RDB 文件时,不会阻塞主线程。但是从库在接收了 RDB 文件后,需要使用 FLUSHDB 命令清空当前数据库,清空后还需要把 RDB 文件加载到内存,RDB 文件越大,加载过程越慢。 18 | 19 | 面试者小空听完后仰望着面试官,小声地嘀咕着,上述 5 个问题可有应对方案? 20 | 21 | 面试官面露微笑的说到: 22 | 23 | bigkey 删除、清空数据库、AOF 日志同步写不属于关键路径操作,可以使用异步子线程机制来完成。Redis 在运行时会创建 3 个子线程、主线程会通过一个任务队列和三个子线程进行交互。子线程会根据任务的具体类型来执行相应的异步操作。 24 | 25 | 而对于集合全量查询和聚合操作,可以使用 SCAN 命令,分批读取数据,再在客户端进行聚合计算。 26 | 27 | 而对于从库加载 RDB 文件,则可以通过控制主库的数据量大小,比如 2 到 4 GB,来保证 RDB 文件能以较快的速度加载。 28 | 小空听完后,叹了一口气,今天又是被面试官吊打的一天。 29 | 30 | -------------------------------------------------------------------------------- /docs/109.学习笔记/03.高并发系统设计/15.缓存穿透如何解决.md: -------------------------------------------------------------------------------- 1 | # 缓存穿透如何解决? 2 | 3 | 缓存穿透其实是指从缓存中没有查到数据,而不得不从后端系统(比如数据库)中查询的情况。 4 | 5 | 两种方案:回种空值,布隆过滤器。 6 | 7 | ## 回种空值 8 | 9 | 当我们从数据库中查询到空值或者发生异常时,我们可以向缓存中回种一个空值。但是因为空值并不是准确的业务数据,并且会占用缓存的空间,所以我们会给这个空值加一个比较短的过期时间,让空值在短时间之内能够快速过期淘汰。 10 | 11 | 问题:回种空值虽然能够阻挡大量穿透的请求,但如果有大量获取未注册用户信息的请求,缓存内就会有有大量的空值缓存,也就会浪费缓存的存储空间,如果缓存空间被占满了,还会剔除掉一些已经被缓存的用户信息反而会造成缓存命中率的下降。 12 | 13 | ## 布隆过滤器 14 | 15 | 我们把集合中的每一个值按照提供的 Hash 算法算出对应的 Hash 值,然后将 Hash 值对数组长度取模后得到需要计入数组的索引值,并且将数组这个位置的值从 0 改成 1。在判断一个元素是否存在于这个集合中时,你只需要将这个元素按照相同的算法计算出索引值,如果这个位置的值为 1 就认为这个元素在集合中,否则则认为不在集合中。下图是布隆过滤器示意图,我来带你分析一下图内的信息。 16 | 17 | ![](http://cdn.jayh.club/blog/20210630/xXMAwf2MOXcO.png?imageslim) 18 | 19 | A、B、C 等元素组成了一个集合,元素 D 计算出的 Hash 值所对应的的数组中值是 1,所以可以认为 D 也在集合中。而 F 在数组中的值是 0,所以 F 不在数组中。 20 | 21 | 它主要有两个缺陷: 22 | 23 | 1. 它在判断元素是否在集合中时是有一定错误几率的,比如它会把不是集合中的元素判断为处在集合中,哈希碰撞造成的。 24 | 2. 不支持删除元素。 25 | 26 | ## 狗桩效应 27 | 28 | 回种空值和布隆过滤器是解决缓存穿透问题的两种最主要的解决方案,但是它们也有各自的适用场景,并不能解决所有问题。比方说当有一个极热点的缓存项,它一旦失效会有大量请求穿透到数据库,这会对数据库造成瞬时极大的压力,我们把这个场景叫做“dog-pile effect”(狗桩效应)。 29 | 30 | **解决方案**:在代码中控制在某一个热点缓存项失效之后启动一个后台线程,穿透到数据库,将数据加载到缓存中,在缓存未加载之前,所有访问这个缓存的请求都不再穿透而直接返回。通过在 Memcached 或者 Redis 中设置分布式锁,只有获取到锁的请求才能够穿透到数据库。 31 | 32 | -------------------------------------------------------------------------------- /docs/meterial/docsify/js/countable.min.js: -------------------------------------------------------------------------------- 1 | var defaultOptions={countable:!0,position:"top",margin:"10px",float:"right",fontsize:"0.9em",color:"rgb(90,90,90)",language:"english",isExpected:!0};function plugin(t,n){if(!defaultOptions.countable)return;let o;t.beforeEach(function(t){return o=t.match(/([\u4e00-\u9fa5]+?|[a-zA-Z0-9]+)/g).length,t}),t.afterEach(function(t,n){let i=o+" words",e=Math.ceil(o/400)+" min";"chinese"===defaultOptions.language&&(i=o+" 字",e=Math.ceil(o/400)+" 分钟"),n(`\n ${"bottom"===defaultOptions.position?t:""}\n
\n \n ${i}\n ${defaultOptions.isExpected?`  |  ${e}`:""}\n \n
\n
\n ${"bottom"!==defaultOptions.position?t:""}\n `)})}window.$docsify.count=Object.assign(defaultOptions,window.$docsify.count),window.$docsify.plugins=[].concat(plugin,window.$docsify.plugins); -------------------------------------------------------------------------------- /docs/04.Architecture/01.架构图解/99.自研简易版任务调度框架2022-03-04.md: -------------------------------------------------------------------------------- 1 | # 1200 万用户数据如何快速同步? 2 | 3 | ## php-resque 4 | 5 | 项目技术栈:PHP,为了实现多线程,使用了 php-resque 框架。 6 | 7 | php-resque 框架的组件: 8 | 9 | - Job:就是一个 PHP 类,里面可以写业务逻辑。 10 | - Queue:负责的Job 的入队和出队。 11 | - Worker:从 Queue 里面拿 Job 来执行。以 PHP CLI 的模式,以后台守护方式运行。 12 | 13 | ## 方案 14 | 15 | 自研简易版任务调度框架:将数据进行分片,指定给多个任务,利用 php-resque 基础框架,充当创建执行这些任务的线程的角色。由这些线程来调度执行任务。 16 | 17 | 1. **数据分片**:拆分成 600 个 task(任务),每个task 执行部分数据,有一个区间的数据,比如第一个task 执行第一个 2W 的数据 [0,19999),第二个 task 执行 [20000, 39999],分成 600个 task。然后每个 task 里面查询数据时,分页查询。 18 | 2. **调度任务**:查找`未执行`或`已中断`的 task,然后创建一个 job去执行 task。 19 | 3. **维护线程池**:job 数量可以控制,当正在运行的 job 达到设置的最大 job 数时,就不会再创建 job 。类似一个线程池,用来管理活跃线程数。 20 | 4. **中断检查**:每两分钟检查一次,当因服务部署而中断了 job 的执行后,需要查询 job 的状态,然后改 task 的状态为`已中断`, 本地 job 记录修改为`执行失败`。 21 | 5. **健康检查**:如果 job 和 task 的最后更新时间晚于当前时间 5 分钟,则表示 job 或 task 已被部署中断或因异常停止了运行。前提条件:分页大小为 100 个,2 分钟以内可以跑完,所以如果 5 分钟都没有更新记录,则说明 task 没有执行了。 22 | 6. **维持活跃线程数**:每两分钟检查一次 job 的状态:判断`正在运行`的 job 总数是否小于设置的最大 job 数,如果小于,则继续创建一个 job 。 23 | 7. **查询优化**:当查询数据时,用 skip xxx 过滤数据时,很慢。改进方案:用 id > lastSyncId,然后拿 100 条,性能好很多。 24 | 8. **断点续传**:如果因为服务部署而中断了 task,下次还可以继续从中断的位置处继续执行。 25 | 9. **快速停止**:可以快速中断 job 的执行。 26 | 27 | -------------------------------------------------------------------------------- /docs/01.PassJava/03.Deploy/02.配置虚拟机网络.md: -------------------------------------------------------------------------------- 1 | PassJava (佳必过) 项目全套学习教程连载中,[关注公众号](#公众号)第一时间获取。 2 | 3 | 文档在线地址:www.passjava.cn 4 | 5 | # 配置虚拟机网络 6 | 7 | ## 1.查看VirtualBox Host-Only Network 8 | 9 | ![mark](http://cdn.jayh.club/blog/20200408/mh0LjwASREf6.png?imageslim) 10 | 11 | 本地VirtualBox 网络地址 `192.168.56.1`,则修改虚拟机IP地址为同一个网段下,比如`192.168.56.10` 12 | 13 | ## 2.配置虚拟机IP地址 14 | 15 | 打开Vagrant 配置文件 C:\Users\Administrator\Vagrantfile 16 | 17 | ``` powershell 18 | # config.vm.network "private_network", ip: "192.168.33.10" 19 | 修改为 20 | config.vm.network "private_network", ip: "192.168.56.10" 21 | ``` 22 | 23 | ## 3.重新加载虚拟机 24 | 25 | ``` shell 26 | vagrant reload 27 | ``` 28 | 29 | ## 4.查看虚拟机IP地址 30 | 31 | 虚拟机IP地址:192.168.56.10,和配置文件中的一致 32 | 33 | ![mark](http://cdn.jayh.club/blog/20200408/o8OTm5m7g5Ht.png?imageslim) 34 | 35 | ## 5.测试本机是否可以ping通虚拟机 36 | 37 | ping 192.168.56.10,可以ping通 38 | 39 | ![mark](http://cdn.jayh.club/blog/20200408/raELgTdl3IXc.png?imageslim) 40 | 41 | ## 6.测试虚拟机是否可以ping通本机 42 | 43 | ping 192.168.10.160,可以ping通 44 | 45 | ![mark](http://cdn.jayh.club/blog/20200408/KdrPRo5UJsCR.png?imageslim) 46 | 47 | # 公众号 48 | 49 | ![mark](http://cdn.jayh.club/blog/20200404/GU60Sv47XT7J.png?imageslim) -------------------------------------------------------------------------------- /docs/98.idea/10.网站崩了.md: -------------------------------------------------------------------------------- 1 | # 大佬,你的网站崩了 2 | 3 | ![聊天记录](http://cdn.jayh.club/blog/20210321/5VAkjYiAY2Om.png?imageslim) 4 | 5 | > “大佬,你的个人网站崩了!” 6 | 7 | 这是一个读者昨天特意加我时给我发的消息。 8 | 9 | 于是我赶紧打开电脑,检查了下我的主站 www.passjava.cn 有没有崩,发现`并没有崩`。点击`阅读原文`即可查看网站。 10 | 11 | 另外还有三个备份站点,目前来看也没有崩。猜测是当时网站偶发的问题。 12 | 13 | - http://www.jayh.club/ 14 | - https://jackson0714.github.io/PassJava-Learning/ 15 | - http://jayh2018.gitee.io/passjava-learning 16 | 17 | 这四个网站其实都是给我的开源项目 PassJava-Learning 服务的。 18 | 19 | PassJava-Learning 里面包含两大部分,接近 100 篇。 20 | 21 | - 第一部分:PassJava 的在线教程。而PassJava 是一款开源的面试刷题系统,PassJava-Learning 则是配套的学习文档,这个网站教你怎么从 0 搭建一套 Spring Cloud 微服务系统。 22 | - 第二部分:我将公众号的优质内容也整理到这个网站上。方便大家来查看和学习。 23 | 24 | 目前有 400+ Star了,欢迎给个 Star。 25 | 26 | > https://github.com/Jackson0714/PassJava-Platform 27 | 28 | 这位读者专门来跟我说这件事,说明网站一定是对他学习有帮助的,所以正好也给大家介绍下里面的内容,说不定对其他读者也有帮助。 29 | 30 | 第一部分是 Spring Cloud 实战教程,共 26 篇,同时我也整理成了 PDF 文档,公众号后台回复【`PDF`】获取。 31 | 32 | 我们再来看下公众号同步的内容,比如最近写的 8 篇分布式算法的文章,我也同步到了网站上了,有的同学说看 PDF 更方便,我又整理了一份 PDF 文档。公众号后台回复【`分布式`】三个字即可获取。 33 | 34 | ![资料](http://cdn.jayh.club/blog/20210321/S52dBbAq1up3.png?imageslim) 35 | 36 | ![](http://cdn.jayh.club/blog/20210321/1hVsI0GykN3U.png?imageslim) 37 | 38 | 点击`阅读原文`查看网站。 -------------------------------------------------------------------------------- /docs/107.其他/系统问题汇总.md: -------------------------------------------------------------------------------- 1 | ## Docker 不能启动 2 | 3 | ``` sh 4 | docker ps 5 | ``` 6 | 7 | Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? 8 | 9 | ``` sh 10 | systemctl status docker 11 | ``` 12 | 13 | 查看日志:Failed to start Docker Application Container Engine. 14 | 15 | ![mark](http://cdn.jayh.club/blog/20210330/KNI1MPSqFl1X.png?imageslim) 16 | 17 | 编辑 /etc/docker/daemon.json 时 提示磁盘已满 18 | 19 | ``` sh 20 | sudo vim /etc/docker/daemon.json 21 | ``` 22 | 23 | E514: write error (file system full?) 24 | 25 | 查看磁盘空间: 26 | 27 | ``` sh 28 | df -h 29 | ``` 30 | 31 | ![](http://cdn.jayh.club/blog/20210330/c1nRkmghmtMQ.png?imageslim) 32 | 33 | 找出 1G 以上的大文件: 34 | 35 | ```sh 36 | sudo find / -type f -size +1024000k -exec du -h {} \; 37 | ``` 38 | 39 | ![](http://cdn.jayh.club/blog/20210330/Cpl2SMIlV528.png?imageslim) 40 | 41 | 删掉 3.4 G 的大文件 42 | 43 | ```sh 44 | sudo rm /var/lib/docker/containers/649a9ba3fc703e53bf725d8dc893487254dc4536da084811fdb887c73a0c0571/649a9ba3fc703e53bf725d8dc893487254dc4536da084811fdb887c73a0c0571-json.log 45 | ``` 46 | 47 | 再次查看磁盘占用情况: 48 | 49 | ```sh 50 | df -h 51 | ``` 52 | 53 | ![](http://cdn.jayh.club/blog/20210330/lrwtL0yuGpLF.png?imageslim) -------------------------------------------------------------------------------- /docs/15.DDD领域驱动设计/02.DOVO等等.md: -------------------------------------------------------------------------------- 1 | 在传统的三层架构里面可能没有这么多的对象。而在DDD中增加这些对象主要是为了实现各层以及领域模型中DO对象与前端VO或传输对象DTO和后端数据库PO的解耦。 2 | DDD中主要有一下几类对象。 3 | 数据持久化对象 (Persistent Object, PO),与数据库结构一一映射,它是数据持久化过程中的数据载体。 4 | 领域对象( Domain Object, DO),微服务运行时核心业务对象的载体, DO 一般包括实体或值对象。 5 | 数据传输对象( Data Transfer Object, DTO),用于前端应用与微服务应用层或者微服务之间的数据组装和传输,是应用之间数据传输的载体。 6 | 视图对象(View Object, VO),用于封装展示层指定页面或组件的数据。 7 | 微服务基础层的主要数据对象是PO。在设计时,我们需要先建立DO和PO的映射关系。大多数情况下DO和PO是一一对应的。但也有DO和PO多对多的情况。在DO和PO数据转换时,需要进行数据重组。对于DO对象较多复杂的数据转换操作,你可以在聚合用工厂模式来实现。 8 | 当DO数据需要持久化时,先将DO转换为PO对象,由仓储实现服务完成数据库持久化操作。 9 | 当DO需要构建和数据初始化时,仓储实现服务先从数据库获取PO对象,将PO转换为DO后,完成DO数据构建和初始化。 10 | 领域层主要是DO对象。DO是实体和值对象的数据和业务行为载体,承载着基础的核心业务逻辑,多个依赖紧密的DO对象构成聚合。领域层DO对象在持久化时需要转换为PO对象。 11 | 应用层主要对象有DO对象,但也可能会有DTO对象。应用层在进行不同聚合的领域服务编排时,一般建议采用聚合根ID的引用方式,应尽量避免不同聚合之间的DO对象直接引用,避免聚合之间产生依赖。 12 | 在涉及跨微服务的应用服务调用时,在调用其他微服务的应用服务前,DO会被转换为DTO,完成跨微服务的DTO数据组装,因此会有DTO对象。 13 | 在前端调用后端应用服务时,用户接口层先完成DTO到DO的转换,然后DO作为应用服务的参数,传导到领域层完成业务逻辑处理。 14 | 用户接口层主要完成DO和DTO的互转,完成微服务与前端应用数据交互和转换。 15 | facade接口服务在完成后端应用服务封装后,会对多个DO对象进行组装,转换为DTO对象,向前端应用完成数据转换和传输。 16 | facade接口服务在接收到前端应用传入的DTO后,完成DTO向多个DO对象的转换,调用后端应用服务完成业务逻辑处理。 17 | 前端应用主要是VO对象。展现层使用VO进行界面展示,通过用户接口层与应用层采用DTO对象进行数据交互。 18 | 19 | 20 | 21 | 参考资料:https://time.geekbang.org/column/article/156849 -------------------------------------------------------------------------------- /docs/04.Architecture/01.架构图解/100.几种架构图.md: -------------------------------------------------------------------------------- 1 | # 2 | 3 | 4 | 5 | ## 业务架构图 6 | 7 | **定义**:描述系统对用户提供了什么业务功能,画的时候偏向业务功能,弱化技术内容。 8 | 9 | **画图技巧**:将类似的业务放在一个分组里面展现,用虚线框或者相同背景将其标识出来。 10 | 11 | ![](http://cdn.jayh.club/uPic/image-20220821090641361pWT5qr.png) 12 | 13 | ## 中台架构图(系统架构图) 14 | 15 | 定义:全面,包含前端、后端、第三方平台等内容。 16 | 17 | ### 数据中台架构图 18 | 19 | 多描述数据的流转、存储、数据支撑等。 20 | 21 | ![image-20220821083912221](http://cdn.jayh.club/uPic/image-20220821083912221dA2zwg.png) 22 | 23 | ### 云平台架构图 24 | 25 | ![](http://cdn.jayh.club/uPic/image-20220821085703469aROv5F.png) 26 | 27 | ### 智慧园区架构图 28 | 29 | ![](http://cdn.jayh.club/uPic/image-20220821084857131QZvez4.png) 30 | 31 | ## 技术架构图 32 | 33 | 定义:描述用到了哪些技术,如何将这些组件联合起来使用。 34 | 35 | ![](http://cdn.jayh.club/uPic/image-20220821084739039wW8uBR.png) 36 | 37 | ![](http://cdn.jayh.club/uPic/image-20220821084338198l35r99.png) 38 | 39 | ![](http://cdn.jayh.club/uPic/image-20220821084426472jqEchU.png) 40 | 41 | 42 | 43 | ## 部署架构图 44 | 45 | 定义:描述后端系统具体是如何部署的,主要包含机房信息、网络信息和硬件信息等。 46 | 47 | 使用场景:总体架构设计。运维规划和优化。 48 | 49 | 画图技巧:用图标代替区块,这样看起来更加美观和容易理解。 50 | 51 | ![来自极客时间](http://cdn.jayh.club/uPic/c14f418f42e017c4b446a8c7f6153285YRraYf.jpg) 52 | 53 | ![](http://cdn.jayh.club/uPic/image-20220821091040597bATn9P.png) -------------------------------------------------------------------------------- /docs/16.DevOps/default-plugin-email-success.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Build Success Notification 6 | 15 | 16 | 17 |
18 |

CI 报告

19 |
20 |

Jenkins 运行结果

21 | 29 |
30 |
31 | 32 | 33 | -------------------------------------------------------------------------------- /docs/02.SpringCloud/01.Eureka注册中心/92.Eureka自我保护机制,网上99%都说错了!.md: -------------------------------------------------------------------------------- 1 | # Eureka 的自我保护机制,网上 99% 都说错了! 2 | 3 | 85% 4 | 5 | 服务实例明明宕机了,为什么下线不了? 6 | 7 | 8 | 9 | 你好,我是悟空。 10 | 11 | ## 一、何为自我保护机制? 12 | 13 | 在研究 Eureka 原理的时候,发现自我保护机制是 Eureka 非常核心的一个功能。 14 | 15 | 要理解自我保护机制就需要知道 Eureka 的心跳机制,所谓心跳机制,就是客户端每隔 30 秒向 Eureka 发送一个心跳请求,告诉自己还存活着。如果客户端长时间内没有发送心跳请求,则 Eureka 认为这个客户端宕机了,则从 Eureka 注册表中移除这个客户端(下线这个客户端)。 16 | 17 | > 原理图 18 | 19 | 自我保护机制就是,当发现有很多服务在短时间内和 Eureka 的通信中断,则 Eureka 会认为可能是自己误判造成的,比如因为 Eureka 服务本身的网络出现故障,导致很多客户端发送的心跳请求,Eureka 自己收不到,但并不能说明客户端宕机了。这个时候,Eureka 就会触发自我保护机制,不移除客户端了。 20 | 21 | > 原理图 22 | 23 | ## 二、网上都怎么说? 24 | 25 | 网上搜了下 Eureka 的自我保护机制,搜到的答案几乎都是这样的: 26 | 27 | ![](http://cdn.jayh.club/uPic/image-20220619094136053Q8Duev.png) 28 | 29 | 这明显不对啊,来看看里面的两个关键信息:15 分钟内,超过 85 % 的客户端。 30 | 31 | ### 2.1 在 15 分钟内 32 | 33 | - 15 分钟内,这个时间也忒长了吧。我们来看下为什么不合理: 34 | 35 | 假设 Eureka 没有收到客户端的心跳,那么 Eureka 就认为这个客户端宕机了,就直接摘除了这个客户端,然后过了 15 分钟后,有很多客户端其实被摘除了,那再开启自我保护机制已经晚了,因为很多客户端在 15 分钟这么长的内的时间极有可能都被摘除了! 36 | 37 | ### 2.2 超过 85 % 的客户端 38 | 39 | - 超过 85 % 的客户端,这个百分比也忒高了吧。我们来看下为什么不合理: 40 | 41 | 如果真的等到超过 85 % 的客户端都没有正常发送心跳,那最后都被 Eureka 摘除了,再开启自我保护机制没有意义了啊,只剩下 15 % 的客户端是不足以提供服务的! 42 | 43 | 那自我保护机制到底是怎么样的?我们通过源码一探究竟。 44 | 45 | ## 三、通过源码一探究竟 46 | 47 | 48 | 49 | ​ 50 | -------------------------------------------------------------------------------- /docs/05.Interview/03.Database/MySQL2.md: -------------------------------------------------------------------------------- 1 | # MySQL 面试突击 2 2 | 3 | ## MySQL 如何进行调优? 4 | 5 | MySQL调优是一项复杂的任务,需要综合考虑多个方面,包括硬件、操作系统、数据库架构、查询语句、索引、缓存等等因素。以下是一些MySQL调优的一般步骤: 6 | 7 | 1. 检查硬件和操作系统配置:MySQL的性能很大程度上取决于硬件和操作系统的配置。因此,需要确保硬件和操作系统的配置符合MySQL的要求。例如,确保硬件有足够的内存、CPU和磁盘空间,操作系统的参数也需要进行适当的调整。 8 | 2. 优化数据库架构:数据库架构是影响MySQL性能的一个重要因素。需要进行一些调整,例如选择适当的存储引擎,避免使用不必要的JOIN,设计适当的数据表结构等等。 9 | 3. 优化查询语句:查询语句是MySQL性能的另一个关键因素。需要尽可能使用简单的查询语句,避免使用不必要的子查询和多个JOIN,同时需要适当使用索引来加速查询。 10 | 4. 优化索引:索引可以提高查询速度,但是过多的索引会降低插入和更新的性能。需要根据实际情况进行适当的索引设计和优化。 11 | 5. 优化缓存:MySQL可以使用多种缓存技术来提高性能,例如查询缓存、表缓存、连接池等等。需要根据实际情况进行适当的缓存配置和优化。 12 | 6. 监控和调试:需要使用一些工具来监控MySQL的性能,并及时发现和解决问题。例如,可以使用MySQL自带的性能监控工具 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | ## 附录 23 | 24 | https://blog.csdn.net/weixin_37968613/article/details/114652178 25 | 26 | **const**: 根据主键、普通唯一索引列等值匹配查询(is null除外),这种查询是很快的,查询速率认为是常数级别的,定义为const。 27 | **ref** : 根据普通索引等值匹配,或is null。(前面说的普通唯一索引列查询时 is null也是这种场景)。这种方式需要先根据普通索引匹配到多个主键,然后根据主键进行回表。 28 | **range**:根据主键索引或普通索引(包含唯一索引)进行范围查找 29 | **index**:索引覆盖,你查询的列刚好是索引列,即使查询条件是联合索引的非最左索引列,查询的条件是联合索引中的列,也可能会走索引覆盖 30 | **ALL**: 全表扫描,直接扫描主键索引,这种访问方式称为all。 31 | **index merge** : 除此之外,还会有index merge(索引合并),针对一些and、or的操作,单纯的回表可能速度会慢一些,如果先将使用到的索引先进行求 交集、并集之后在进行回表,会更加高效。 32 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /docs/98.idea/07.JVM付费专栏上线.md: -------------------------------------------------------------------------------- 1 | ## 处女作-付费专栏上线 2 | 3 | 机缘巧合,从去年十月就开始写付费专栏了,总共写了 8 篇,终于写完了,并顺利上线。 4 | 5 | 最开始定的专栏的名字叫做《JVM 性能调优实战》,后来平台的编辑帮我优化了下名称《7个实验精通JVM性能调优》,“精通”真的不敢当啊。 6 | 7 | 新课优惠 `8 折`,还可以叠加优惠券,优惠券码:`kdTL4TE`。 8 | 9 | ![](http://cdn.jayh.club/blog/20210223/2SchdWV9l3fY.png?imageslim) 10 | 11 | ## 课程介绍 12 | 13 | 这是一个 JVM 性能调优的实战课,由入门到应对线上的性能问题。用理论知识和动手实验结合来进行讲解。课程将会涉及:垃圾回收原理、JVM 参数配置、Java 中四种引用、JVM 内存溢出、垃圾收集器,以及生产环境性能调优及排查。 14 | 15 | 关于整个训练营课程中的所有知识点,我也整理了一个思维导图帮助大家更好的归纳和理解(新标签页面查看大图)。 16 | 17 | ![mark](http://cdn.jayh.club/blog/20210223/7NsVXcKDG94H.png?imageslim) 18 | 19 | ## 你将学到如下内容 20 | 21 | - Java 虚拟机内存体系 22 | - JVM 参数基础 23 | - JVM 参数调优 24 | - Java 中的内存溢出场景 25 | - 服务器整体性能排查步骤 26 | 27 | - 垃圾回收原理 28 | - JVM内存分配策略 29 | - Java 中的四种引用 30 | - 垃圾回收器的划分和异同点 31 | - 服务器变慢排查思路和步骤 32 | 33 | ## 课程特色 34 | 35 | - 本课程多以图解的方式进行理论知识讲解,内容不枯燥。 36 | - 实验步骤详尽完整,即使是新手也能掌握学完整个实验。 37 | - 实验内容紧贴一线大厂的面试题。 38 | - 丰富你的开发技术栈,提升个人市场价值。 39 | 40 | ## 课程插图 41 | 42 | ![](http://cdn.jayh.club/blog/20210223/32BYXN1gx6y2.png?imageslim) 43 | 44 | ![](http://cdn.jayh.club/blog/20210223/sL8QWqqWMWPt.png?imageslim) 45 | 46 | ## 适合人群 47 | 48 | - 从事 Java 开发的人员。 49 | - 对 JVM 性能调优感兴趣的开发人员。 50 | - 准备面试一线大厂的初中级开发人员。 51 | 52 | ![](http://cdn.jayh.club/blog/20210223/2SchdWV9l3fY.png?imageslim) -------------------------------------------------------------------------------- /docs/99.tools/92.Java环境问题.md: -------------------------------------------------------------------------------- 1 | ## 1.jps命令找不到 2 | 3 | 解决方案:配置环境变量 4 | 5 | ![mark](http://cdn.jayh.club/blog/20200914/yTI4o5jWiiOX.png?imageslim) 6 | 7 | 8 | 9 | 2.jps找不到运行的Java程序 10 | 11 | 配置C:\Users\jacks\AppData\Local\Temp\hsperfdata_jacks文件夹属性 12 | 13 | - 去掉只读权限 14 | 15 | ![mark](http://cdn.jayh.club/blog/20200914/2huQHkPi2nqU.png?imageslim) 16 | 17 | - 增加everyone用户的完全控制权限 18 | 19 | ![mark](http://cdn.jayh.club/blog/20200914/E7hiYdimBN47.png?imageslim) 20 | 21 | ## 2.Consider defining a bean of type 'com.jackson0714.passjava.question.feign.SearchFeignService' in your configuration. 22 | 23 | 没有在启动类上添加注解: 24 | 25 | ``` 26 | @EnableFeignClients(basePackages = "com.jackson0714.passjava.question.feign") 27 | ``` 28 | 29 | 30 | 31 | ## mysql 连接问题 32 | 33 | 2022-03-18 07:18:11.786 ERROR 46522 --- [ restartedMain] com.alibaba.druid.pool.DruidDataSource : init datasource error, url: jdbc:mysql://127.0.0.1:3306/seckill?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true 34 | 35 | java.sql.SQLNonTransientConnectionException: Public Key Retrieval is not allowed 36 | at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:108) ~[mysql-connector-java-8.0.11.jar:8.0.11] 37 | 38 | 39 | 40 | 密码不正确 41 | -------------------------------------------------------------------------------- /code/static/js/index.js: -------------------------------------------------------------------------------- 1 | "use strict";window.$docsify.plugins=[].concat((t,e)=>{var o,n=()=>{document.documentElement.classList.add("transition"),window.setTimeout(()=>{document.documentElement.classList.remove("transition")},800)},c=({background:t,toggleBtnBg:e,textColor:o})=>{document.documentElement.style.setProperty("--docsify_dark_mode_bg",t),document.documentElement.style.setProperty("--docsify_dark_mode_btn",e),document.documentElement.style.setProperty("--text_color",o)};o={dark:{background:"#1c2022",toggleBtnBg:"#34495e",textColor:"#b4b4b4"},light:{background:"white",toggleBtnBg:"var(--theme-color)",textColor:"var(--theme-color)"},...e.config.darkMode},t.afterEach((function(t,e){e(t=`
\n \n \n
${t}`)})),t.doneEach((function(){var t;localStorage.getItem("DOCSIFY_DARK_MODE")?(t=localStorage.getItem("DOCSIFY_DARK_MODE"),c(o[`${t}`])):(t="light",c(o.light)),document.querySelector("input[name=mode]").addEventListener("change",(function(){"light"===t?(n(),c(o.dark),localStorage.setItem("DOCSIFY_DARK_MODE","dark"),t="dark"):(n(),c(o.light),localStorage.setItem("DOCSIFY_DARK_MODE","light"),t="light")}))}))},window.$docsify.plugins); 2 | -------------------------------------------------------------------------------- /docs/99.tools/101.aliyun.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | 你好,我是悟空。 4 | 5 | ## 背景 6 | 7 | 我的网站 passjava 部署在一台腾讯云服务器上。网站有几十万访问量了。 8 | 9 | 网站如下: 10 | 11 | ![img](http://cdn.jayh.club/uPic/0DvoaBl.png) 12 | 13 | 来看下这台服务器的基础配置: 14 | 15 | ![img](http://cdn.jayh.club/uPic/0-20231102222354996k3Tokf.png) 16 | 17 | CPU:1 核、内存:1GB、带宽:1MB。这种服务器的性能只能说很拉胯,再也找不到这种低配的服务器了。 18 | 19 | 今年十一的时候,续费这台服务器花了 800多,这还是用了大额优惠券才是这个价,离谱! 20 | 21 | ![img](http://cdn.jayh.club/uPic/0-20231102222355243evwYiN.png) 22 | 23 | 后悔没有早点看到阿里云的活动。 24 | 25 | ### 阿里云服务器 26 | 27 | ![img](http://cdn.jayh.club/uPic/0-20231102222355852oTNnWm.png) 28 | 29 | 这款服务器 2 核 2G 3M带宽的,原价900多,现在只要 99 而且三年内都可以用这个价格续费。 30 | 31 | 在博主这里买可以领取立减券只要 50 这款服务器带回家,建议大家都用用折扣。 32 | 33 | 所有老用户用家人账号下单,注意支付账号也要更换一下确保优惠 34 | 35 | 这一波呀,阿里云格局更大了~~~ 36 | 37 | ## 网站部署教程 38 | 39 | ### 添加nginx配置文件 40 | 41 | - 执行命令 42 | 43 | ```shell 44 | sudo vim /etc/nginx/conf.d/pass_java_learning.conf 45 | ``` 46 | 47 | - 更新配置信息 48 | 49 | ``` shell 50 | server { 51 | listen 80; 52 | server_name tech.jayh.club; 53 | 54 | location / { 55 | root /home/ubuntu/jay/passjava/passjava-learning/PassJava-Learning/docs; 56 | index index.html; 57 | } 58 | } 59 | ``` 60 | 61 | ### 域名解析 62 | 63 | ![](http://cdn.jayh.club/uPic/image-20231102222724433PvUN4n.png) -------------------------------------------------------------------------------- /docs/meterial/docsify/js/index.js: -------------------------------------------------------------------------------- 1 | "use strict";window.$docsify.plugins=[].concat((t,e)=>{var o,n=()=>{document.documentElement.classList.add("transition"),window.setTimeout(()=>{document.documentElement.classList.remove("transition")},800)},c=({background:t,toggleBtnBg:e,textColor:o})=>{document.documentElement.style.setProperty("--docsify_dark_mode_bg",t),document.documentElement.style.setProperty("--docsify_dark_mode_btn",e),document.documentElement.style.setProperty("--text_color",o)};o={dark:{background:"#1c2022",toggleBtnBg:"#34495e",textColor:"#b4b4b4"},light:{background:"white",toggleBtnBg:"var(--theme-color)",textColor:"var(--theme-color)"},...e.config.darkMode},t.afterEach((function(t,e){e(t=`
\n \n \n
${t}`)})),t.doneEach((function(){var t;localStorage.getItem("DOCSIFY_DARK_MODE")?(t=localStorage.getItem("DOCSIFY_DARK_MODE"),c(o[`${t}`])):(t="light",c(o.light)),document.querySelector("input[name=mode]").addEventListener("change",(function(){"light"===t?(n(),c(o.dark),localStorage.setItem("DOCSIFY_DARK_MODE","dark"),t="dark"):(n(),c(o.light),localStorage.setItem("DOCSIFY_DARK_MODE","light"),t="light")}))}))},window.$docsify.plugins); 2 | -------------------------------------------------------------------------------- /docs/101.Connection/01.2020.10中秋国庆红包.md: -------------------------------------------------------------------------------- 1 | # 快乐过节,直接发红包吧!9 月两个 2000+ 2 | 3 | ## 武汉加油 4 | 5 | 现在说武汉加油,大家还会有感觉吗?然而每次说武汉加油,我都会`心里一颤`。 6 | 7 | 今天和媳妇、娃一起回老家,今年回老家的次数`屈指可数`,过年就没回去过,为什么过年都没回去?因为武汉是疫情爆发区,都`封城`了,连武汉老家的小乡村都封了。 8 | 9 | 第一次过年没有和爸妈在一起过年,想起来还不禁鼻子有点酸。犹记得当时武汉人民为抵消疫情压力,都在窗外喊`“武汉加油”`,太震撼了!我也跟着喊了一句,结果`把娃吓哭了!`真尴尬啊。 10 | 11 | ## 肝文一个月,读者增加 2000+ 12 | 13 | 9 月连续肝了 8 篇高质量文章,同时找了些大佬帮忙转发,有幸获得 2000+ 可爱读者的关注,很是幸运。 14 | 15 | 感谢读者朋友们、大佬们的关爱~ 也认识了很多一起做公号的朋友,他们都好 nice 啊~ 哈哈。 16 | 17 | 另外意外结识了Guide哥这个大佬~[暗自窃喜]。 18 | 19 | ## 个人网站 2000+ 20 | 21 | 我把这大半年的博客都公开放到我的个人网站 www.passjava.cn了,没怎么宣传,但每天也有几十访问量,统计了下这个月的访问量,都有 2000+ 了。好神奇。 22 | 23 | ### 浏览统计 24 | 25 | ![浏览统计](http://cdn.jayh.club/blog/20201002/OFsBAriVmlMg.png?imageslim) 26 | 27 | ### 网站内容 28 | 29 | ![个人网站](http://cdn.jayh.club/blog/20201002/7Na1Guu2T3SO.png?imageslim) 30 | 31 | 32 | 33 | ## Spring Cloud 实战项目开源 34 | 35 | 疫情期间自己在家学习,把 Spring Cloud 实战项目开源了,目前后端和前端的架子都搭好了,后续也会继续维护。想自学的同学,沿着这条路线学习,稳稳的。 36 | 37 | ``` sh 38 | Github地址:https://github.com/Jackson0714/PassJava-Platform 39 | ``` 40 | 41 | ![开源项目 PassJava](http://cdn.jayh.club/blog/20201002/IEhgPIWBYBr6.png?imageslim) 42 | 43 | ## 口令红包 44 | 45 | 说了那么多,直接发红包吧。 46 | 47 | `自费 88.88 元,50 个口令红包`,钱不多,代表一份感谢~谢谢大家的支持与肯定,我会`继续肝文`的! 48 | 49 | 我是悟空哥,超爱图解底层原理,全栈一枚,努力变强,成为超级赛亚人!我们下期再见。 50 | 51 | 52 | 53 | 54 | 55 | -------------------------------------------------------------------------------- /docs/01.PassJava/02.PassJava_Architecture/02.创建数据库和表.md: -------------------------------------------------------------------------------- 1 | PassJava (佳必过) 项目全套学习教程连载中,[关注公众号](#公众号)第一时间获取。 2 | 3 | 文档在线地址:www.passjava.cn 4 | 5 | # PassJava 初始化数据库表 6 | 7 | ## 用PowerDisigner工具创建数据库 8 | 9 | - 用PowerDisigner工具创建数据库 10 | 11 | ![用PowerDisigner工具创建数据库](http://cdn.jayh.club/blog/20200411/rGkitjMmv7T2.png?imageslim) 12 | 13 | 总共有5个微服务数据库:内容、学习、渠道、用户、题目 14 | 15 | ![5个数据库](http://cdn.jayh.club/blog/20200411/Xo71F4ku86PB.png?imageslim) 16 | 17 | - 内容微服务的数据库 18 | 19 | ![内容微服务的数据库](http://cdn.jayh.club/blog/20200411/PkKsIdaWrcUA.png?imageslim) 20 | 21 | - 学习微服务的数据库 22 | 23 | ![学习微服务的数据库](http://cdn.jayh.club/blog/20200411/j9dtS9xryyEv.png?imageslim) 24 | 25 | - 渠道微服务的数据库 26 | 27 | ![渠道微服务的数据库](http://cdn.jayh.club/blog/20200411/60lbRmKajihg.png?imageslim) 28 | 29 | - 用户微服务的数据库 30 | 31 | ![用户微服务的数据库](http://cdn.jayh.club/blog/20200411/qa2OQTzGyR9U.png?imageslim) 32 | 33 | - 题目微服务的数据库 34 | 35 | ![题目微服务的数据库](http://cdn.jayh.club/blog/20200411/LTxxK6fEeL6E.png?imageslim) 36 | 37 | SQL文件在这个项目里面:https://github.com/Jackson0714/PassJava-Platform.git 38 | 39 | ![SQL文件](http://cdn.jayh.club/blog/20200411/lSMwH7s8V19O.png?imageslim) 40 | 41 | ![mark](http://cdn.jayh.club/blog/20200411/4jVMyPUGn0ns.png?imageslim) 42 | 43 | # 公众号 44 | 45 | ![mark](http://cdn.jayh.club/blog/20200404/GU60Sv47XT7J.png?imageslim) -------------------------------------------------------------------------------- /docs/05.Interview/05.DesignPattern/06.单例模式.md: -------------------------------------------------------------------------------- 1 | # 单例模式 Singleton Design Pattern 2 | 3 | 一个类只允许创建一个对象(或者叫实例) 4 | 5 | ## 单例的场景 6 | 7 | 有些数据只应该保存一份,比如系统的配置信息。 8 | 9 | 单例解决资源访问冲突。 10 | 11 | ## 单例关注点 12 | 13 | - 构造函数是 private 的,避免外部通过 new 创建实例。 14 | - 考虑对象创建时的线程安全问题。 15 | - 考虑是否支持延迟加载。 16 | - 考虑是否支持延迟加载。 17 | - 考虑 getInstance() 性能是否高。 18 | 19 | ## 单例的几种方式 20 | 21 | ### 饿汉式 22 | 23 | 类加载期间,已经将 instance 静态实例初始化好了,不支持延迟加载。 24 | 25 | ### 懒汉式 26 | 27 | 支持延迟加载,会导致频繁加锁、释放锁,以及并发度低邓文,频繁的调用会产生性能瓶颈。 28 | 29 | ### 双重检测 30 | 31 | 支持延迟加载,支持高并发。 32 | 33 | ### 静态内部类 34 | 35 | 利用 Java 的静态内部类来实现单例。既支持延迟加载,也支持高并发,实现起来比双重检测简单。 36 | 37 | ## 单例的问题 38 | 39 | - 单例对 OOP 特性的支持不友好。 40 | - 单例会隐藏类之间的依赖关系。 41 | - 单例对代码的扩展性不友好。 42 | - 单例对代码的可测试性不友好。 43 | - 单例不支持有参的构造函数 44 | 45 | 替代解决方案: 46 | 47 | - 为了保证全局唯一,可以使用静态方法来实现。但不能解决之前提到的问题。 48 | - 通过工厂模式,IOC 容器来保证。 49 | - 由程序员自己来保证,不要创建两个类对象。 50 | 51 | 模式没有对错,关键看怎么用。 52 | 53 | 适合用单例模式的场景: 54 | 55 | - 如果单例类没有后续的扩展需求,并且不依赖外部系统,设计成单例类就没有太大问题。 56 | - 对于一些全局的类,在其他类之间还需要传来传去,则做成单例类,使用起来方便。 57 | 58 | ## 集群环境的单例模式 59 | 60 | ### 单例模式的唯一性 61 | 62 | 进程内唯一,进程间不唯一。 63 | 64 | ### 线程唯一的单例 65 | 66 | 用 Java 提供的 ThreadLocal 并发工具类来实现。 67 | 68 | ### 集群唯一的单例 69 | 70 | 把单例对象序列化并存储到外部共享存储区(比如文件)。进程使用时,要先从外部共享存储区读取到内存中,并反序列化成对象,然后再使用,使用完后序列化并存储到共享存储区。使用对象时,需要对其进行加锁。 71 | 72 | ### 多例模式 73 | 74 | 一个类可以创建多个对象。 75 | -------------------------------------------------------------------------------- /docs/109.学习笔记/01.Redis核心技术与实战/06.如何应对变慢的Redis(上篇).md: -------------------------------------------------------------------------------- 1 | ### 如何应对变慢的 Redis 2 | 3 | **基线性能**:一个系统在低压力、无干扰下的基本性能,只由当前的软硬件配置决定。 4 | 5 | ``` 6 | ./redis-cli --intrinsic-latency <测试时长> 7 | ``` 8 | 9 | 该命令会打印 <测试时长> 秒内监测到的最大延迟。 10 | 11 | 运行时延迟的时长 2 倍于基准时长,则是 redis 变慢了。 12 | 13 | 如果想测试 Redis 客户端道网络端的影响,可以用`iPerf` 工具。 14 | 15 | **影响 Redis 性能的三大要素**:Redis 自身的操作特性、文件系统和操作系统。 16 | 17 | ## Redis 自身的操作特性 18 | 19 | ### 1.慢查询命令: 20 | 21 | 命令的慢操作和操作的复杂度相关。 22 | 23 | 操作度复杂度查询:https://redis.io/commands/ 24 | 25 | 当你发现 Redis 性能变慢时,可以通过 Redis 日志,或者是 latency monitor 工具,查询变慢的请求,根据请求对应的具体命令以及官方文档,确认下是否采用了复杂度高的慢查询命令。 26 | 27 | 如果的确有大量的慢查询命令,有两种处理方式:用其他高效命令代替。 28 | 29 | - 当需要返回一个 SET 中的所有成员时,不要使用 SMEMBERS 命令,而是要使用 SSCAN 多次迭代返回,避免一次返回大量数据,造成线程阻塞。 30 | 31 | - 需要执行排序、交集、并集操作时,可以在客户端完成,而不要用 SORT、SUNION、SINTER 这些命令,以免拖慢 Redis 实例。 32 | 33 | KEYS 命令需要遍历存储的键值对,所以操作延时高。KEYS 命令一般不被建议用于生产环境中。 34 | 35 | ### 2. 过期 key 操作 36 | 37 | Redis 会自动删除过期 key,回收内存空间,本身会引起 Redis 变慢。 38 | 39 | 默认情况下,Redis 每 100 ms 会删除一些过期 key,算法如下: 40 | 41 | - 采样固定个数的 key,并将其中过期的 key 全部删除;(固定个数:ACTIVE_EXPIRE_CYCLE_LOOKUPS_PER_LOOP,默认 20) 42 | 43 | - 如果超过 25% 的 key 过期了,则重复删除的过程,直到过期 key 的比例降至 25% 以下。 44 | 45 | 第一条的算法,如果每秒钟删除 200 个过期 key,并不会对 Redis 造成太大影响。 46 | 47 | 如果触发了第二条算法,可以在 EXPIREAT 和 EXPIRE 命令的过期时间参数上,加上一个一定大小范围内的随机数,这样,既保证了 key 在一个邻近时间范围内被删除,又避免了同时过期造成的压力。 48 | 49 | -------------------------------------------------------------------------------- /docs/108.MacBook使用技巧/06.Mac远程连接2021-12-03.md: -------------------------------------------------------------------------------- 1 | ## Mac 常用远程连接 ubuntu 工具对比 2 | 3 | (1)JumpDesktop AppStore 233块,网上有破解版。 4 | 5 | ![Jump Desktop](http://cdn.jayh.club/uPic/08a045014f1872185159e8b2b2c2aca9EC6XA3.png) 6 | 7 | (2)VNC Viewer AppStore 下架了,网上有安装包。 8 | 9 | ![VNC Viewer](http://cdn.jayh.club/uPic/image-202112042013019840UPVtr.png) 10 | 11 | (3)MicrosoftRemoteDesktop AppStore 下架了,网上有安装包。 12 | 13 | ![](http://cdn.jayh.club/uPic/image-20211204201545624QMoWtF.png) 14 | 15 | 效果最好的还是用 MicrosoftRemoteDesktop 连接 Windows 机器,然后用 Windows 机器远程 ubuntu。 16 | 17 | VNC 和 JumpDeskTop 及时把画面质量降到 Low,鼠标还是有很大的延迟。 18 | 19 | 20 | 21 | ## 问题 22 | 23 | ### 远程连接 Ubuntu 后,ubuntu 桌面太小了。 24 | 25 | 设置 ubuntu 分辨率大小 26 | 27 | > xrandr 28 | 29 | xrandr 提示 DP-1 已经 connected(连接),分辨率为 1440\*900,我想调整为 1920\*1080 分辨率。 30 | 31 | ![image-20211204193125534](http://cdn.jayh.club/uPic/image-20211204193125534blLIwq.png) 32 | 33 | 直接设置分辨率 34 | 35 | > xrandr -s 1920x1080_60.00 36 | 37 | 提示错误: 38 | 39 | ```SH 40 | Size 1920x1080 not found in available modes 41 | ``` 42 | 43 | 添加分辨率: 44 | 45 | > xrandr --newmode "1920x1080_60.00" 173.00 1920 2048 2248 2576 1080 1083 1088 1120 -hsync +vsync 46 | 47 | 添加模式 48 | 49 | > xrandr --addmode DP-1 "1920x1080_60.00" 50 | 51 | ![](http://cdn.jayh.club/uPic/image-202112041945168611i6MnW.png) 52 | 53 | 分辨率会自动变为 1920*1680。 -------------------------------------------------------------------------------- /docs/05.Interview/05.DesignPattern/02.备忘录模式MementoPattern.md: -------------------------------------------------------------------------------- 1 | # 备忘录模式 Memento Design Pattern 2 | 3 | [toc] 4 | 5 | ## 概述 6 | 7 | 看似很简单的一种模式,背后却蕴藏着丰富的架构设计思想。 8 | 9 | 备忘录,也就是说某个时间点存储一份备份,当要恢复那个时间点数据时,将备忘录里面的数据恢复就好了。 10 | 11 | 备忘录模式是一种设计思想,没有具体的编码要求,所以在不同的项目中,也会有不同的设计,理解其思想并结合业务实现就可以了。 12 | 13 | ## 生活中的例子 14 | 15 | 植物大战僵尸游戏,有个离线玩法,就是不联网可以单机玩,本地保存游戏进度,比如获得了哪几种新的植物,过了多少关卡,都会记录到本地,一旦游戏联网,就会检查本地进度和服务器的进度是否一致,如果本地较新,就会将本地数据覆盖服务器的数据。那么本地存储数据的方式就是备忘录。 16 | 17 | ## 企业项目场景 18 | 19 | 假设项目中有个内存队列用来对消息进行存储,生产者将消息放到消息队列,消费者将消息取出来消费,让生产者和消费者达到异步解耦。 20 | 21 | 非阻塞队列可能会把内存写爆,导致 JVM OOM。 22 | 23 | 如果出现了消息积压导致消息队列满了怎么办? 24 | 25 | 消息积压的原因: 26 | 27 | - 消费者出故障了,消费速度慢或者不能消费。 28 | - 生产者短时间内产生了大量消息。 29 | 30 | 这个时候就可以将消息存储到数据库,等消息队列有空间存储后,再将数据库中的消息转存到消息队列。数据库作为一个离线存储的工具,也可以称作备忘录。 31 | 32 | 类似数据库存储消息,我们也可以采用其他方式来存储,比如用 Redis,JVM Ehcache,磁盘,ES 等等。 33 | 34 | ## 说下实现细节 35 | 36 | 每次存放消息时,检查消息队列是否满了,如果满了,则设置消息队列的状态:`已离线`。 37 | 38 | 如果已离线,则将消息转存到数据库。 39 | 40 | 当检测到消息队列没有满时: 41 | 42 | - 启动一个后台任务,小批量从数据库获取消息,然后转存到消息队列。 43 | - 然后将数据库中的这部分消息批量删掉。 44 | - 当数据库没有消息时,将消息队列的状态改为`已上线`。 45 | - 新的消息都会被存到消息队列,就不放数据库了。 46 | 47 | ## 中间件使用备忘录的场景 48 | 49 | Redis 50 | 51 | - 比如 Redis 的定期备份 RDB 到服务器。当线上出现问题,想要快速恢复到某个稳定数据的版本时,可以使用备份的 RDB 文件快速恢复。 52 | 53 | - 主从首次复制利用客户端缓冲区增量更新数据。 54 | 55 | - 主从重连后,利用复制积压缓冲区增量更新数据。 56 | 57 | MySQL 58 | - 主从备份 59 | 60 | 61 | 62 | 63 | 64 | -------------------------------------------------------------------------------- /docs/102.学习群问题汇总/02.20201028_导出报表问题.md: -------------------------------------------------------------------------------- 1 | # 02、2020-10-28 导出报表问题(群友 hello world 提出) 2 | 3 | ## 问题回顾 4 | 5 | > 1. 100万数据的报表下载该采用异步通知模式还是等待下载完成? 6 | > 7 | > 2. 查出来的数据太大,分批放到excel 后,excel 里面的数据占用内存过大,容易频繁 GC,造成 “stop the world”。 8 | > 3. 导出时间过长。 9 | 10 | ## 解决方案 11 | 12 | 1. 异步回调通知下载结果(去下载中心查看下载进度,下载带进度条或百分比)。 13 | 14 | 2. 限制下载条数。 15 | 16 | 3. 闲时定时提前导出,比如夜间导出。 17 | 18 | 4. 加内存。 19 | 5. 报表数据放到 ES 宽表里面。 20 | 6. 查询索引优化,减少查询的时间。 21 | 7. MySQL 分区表? 22 | 8. 从业务上考虑是否可以减少下载量,或不要求时效性。 23 | 9. 上大数据系统。 24 | 25 | ## 群聊讨论内容如下 26 | 27 | 28 | 29 | ![mark](http://cdn.jayh.club/blog/20201029/K37TeEX2m9lG.png?imageslim) 30 | 31 | ![mark](http://cdn.jayh.club/blog/20201029/VnwTuWKqvNnt.png?imageslim) 32 | 33 | ![mark](http://cdn.jayh.club/blog/20201029/yj8tq7HHfjPx.png?imageslim) 34 | 35 | ![mark](http://cdn.jayh.club/blog/20201029/KjkPvD1PTaDF.png?imageslim) 36 | 37 | 38 | 39 | ![mark](http://cdn.jayh.club/blog/20201029/RrODCkTTfb7q.png?imageslim) 40 | 41 | ![mark](http://cdn.jayh.club/blog/20201029/JP0VYeVpsnFw.png?imageslim) 42 | 43 | ![mark](http://cdn.jayh.club/blog/20201029/sFBA5HyNf3zI.png?imageslim) 44 | 45 | ![mark](http://cdn.jayh.club/blog/20201029/XMlBv570Bbob.png?imageslim) 46 | 47 | ![mark](http://cdn.jayh.club/blog/20201029/hs7deokCrads.png?imageslim) 48 | 49 | ![mark](http://cdn.jayh.club/blog/20201029/L3SncIrU1X8t.png?imageslim) 50 | 51 | -------------------------------------------------------------------------------- /docs/01.PassJava/01.Introduction/6.本地部署项目Windows版.md: -------------------------------------------------------------------------------- 1 | # 本地启动项目 2 | 3 | ## 1.启动Nacos服务 4 | 5 | 和 PassJava 项目配套使用的 Nacos 软件地址如下,各个配置项已经在 Nacos 中配置好了。 6 | 7 | 链接: https://pan.baidu.com/s/16gddwQGbV4Lh92rI86PVpg 8 | 提取码: mjt6 9 | 10 | 解压密码:passjava 11 | 12 | 13 | 下载完成后,进入到 bin 目录,双击 startup.cmd 程序,开始运行 Nacos 服务。 14 | 15 | ![](http://cdn.jayh.club/blog/20210330/9cYX4nOqDFrQ.png?imageslim) 16 | 17 | 可以看到 Nacos 启动成功。 18 | 19 | ![](http://cdn.jayh.club/blog/20210330/C7buFXeeiK70.png?imageslim) 20 | 21 | 对应的服务地址为:http://192.168.56.1:8848/nacos/index.html 22 | 23 | 浏览器打开这个地址,登录进入 Nacos 管理后台。 24 | 25 | ![mark](http://cdn.jayh.club/blog/20210330/0NGQVcINCVIP.png?imageslim) 26 | 27 | 账号和密码都是 nacos。 28 | 29 | ## 2.执行脚本 30 | 31 | ### 2.1 创建passjava_admin数据库 32 | 33 | - 创建数据库:passjava_admin 34 | 35 | - 执行PassJava-Platform\data\sql\renren.sql脚本 36 | 37 | 38 | ## 3.启动微服务 39 | 40 | 41 | 42 | ## 4.启动管理后台 43 | 44 | clone 管理后台代码: 45 | 46 | ```sh 47 | git clone https://github.com/Jackson0714/PassJava-Portal.git 48 | ``` 49 | 50 | - 安装node_modules依赖包 51 | 52 | 进入到 PassJava-Portal 根目录后,安装 nodeJs 依赖 53 | 54 | ``` sh 55 | cnpm install 56 | ``` 57 | 58 | - 运行前端项目 59 | 60 | ``` sh 61 | npm run dev 62 | ``` 63 | 64 | - 浏览后台 65 | 66 | http://localhost:8002 67 | 68 | ![mark](http://cdn.jayh.club/blog/20200411/F6qFoEbBFFKP.png?imageslim) 69 | 70 | -------------------------------------------------------------------------------- /docs/82.团队管理/01.代码评审(code_review).md: -------------------------------------------------------------------------------- 1 | 来自小米公司 2 | 3 | 关于code review 4 | 背景:我们组是属于技术平台,后端一共就4个研发,主要是给整个部门提供基础库,以及解决方案,所以代码量不多,对代码要求质量比较高,组内成员整体水平也比较高,有行业天花板的大佬。 5 | 纯技术团队: 6 | review关注点: 7 | 1.架构设计,重点关注是不是最优,而不单纯只是合理 8 | 2.代码质量,重点关注有没有可能引发bug之类的 9 | 3.是否符合预期,是否考虑到特殊场景 10 | review过程: 11 | 1.代码量少,所以我们都是有功能要发布了才review,没有提前做准备之类的。 12 | 2.review过程总有碰到意见不一致的时候,一般就单独拉出来,群里大家讨论。讨论之后很少出现意见不一致的情况,因为组内有几个大佬存在,一般意见都能达成统一。并且组内氛围也很好,不会出现互相diss,谁不服谁的情况。 13 | 14 | 15 | 同时我们组也会给业务研发团队做一些code review。 16 | 要求: 17 | 1.在提交给我们组review之前,必须先把sonar上报的问题给解决了。 18 | 2.最好是组内核心成员能先review,对于有争议的部分,拉出来给我们组review。 19 | 3.一次review的代码不能太多,保持在几百行之内,不要上来就上千行代码。 20 | 4.如果真的模块很大功能很多,可以拆分成小功能小模块进行review。 21 | 5.review时间点,一定不是上线前,也不是测试验收后,而是在开发过程中,逐步review,不是交付之后才review。 22 | 6.reviewer要了解被review代码的业务,可以不是非常深入,但是至少要了解。 23 | 7.reviewer可以是同级,也可以是组内专家,也可以是外援 24 | 25 | review重点关注的点: 26 | 1.保持代码风格一致 27 | 2.代码是否与需求保持一致,能否达到产品/业务预期 28 | 3.代码是否有优化空间,比如是否需要重构、有更好的设计模式、有更好的写法 29 | 4.是否存在隐藏的bug,包括代码本身的bug以及业务逻辑的bug 30 | 31 | review过程: 32 | 1.研发在提出mr之后,进行review,可以是1v1,或者几个人找个会议室。推荐就在工位上,一起review,一起讨论,有问题的直接写评论。 33 | 2.提mr的研发,一定要提前通知reviewer,而不是提个mr,丢给reviewer就不管了(出现过这种情况,丢个mr链接,@reviewer,就忙自己的事儿去了) 34 | 3.review的工具使用gitlab,而不是在代码里添加注释/TODO之类的。 35 | 4.意见不一致的时候,写个评论标注一下,后续私下再深入研究或者找专家讨论都可以。 36 | 5.review结束之后,研发修改完问题,如果是简单的问题,就直接approve进master,如果是比较大的改动,需要reviewer再次确认。 37 | 6.一定要针对问题,不要针对人,要保持谦虚和气。review是互相学习的过程。 -------------------------------------------------------------------------------- /docs/102.学习群问题汇总/01.20201026_删除binlog问题.md: -------------------------------------------------------------------------------- 1 | # 01、20201026_删除binlog问题(群友 微笑表情 提出) 2 | 3 | ## 问题回顾 4 | 5 | > mysql主从复制 binlog文件太多 应该可以删除之前的一些 保留最后一个就行了吧 不会造成数据丢失吧? 6 | 7 | ## 解决方案 8 | 9 | > 先看看从库 已经同步到哪个binlog了,之前的就可以干掉了。建议先备份。 10 | 11 | ### 解决方案反馈 12 | 13 | 由于主库服务器磁盘满了 突然宕机导致其中一个binlog文件损坏,那个文件一直读不了 后来我把主库用工具同步到从库 从新的pos位置开始读就没问题了。 14 | 15 | ## 参考资料 16 | 17 | ```sql 18 | 如果你的数据库没有搭建主从同步这样的服务 , binlog 日志也不用的情况下 , 你可以将 /etc/my.cnf 文件下面行删除或注释掉 19 | 20 | log-bin=mysql-bin 21 | 22 | 如果你需要这样的文件 , 那么建议你在主配置文件 /etc/my.cnf 中添加如下行 , 来限制 binlog 日志文件存在时间 , 过期自动删除 23 | 24 | expire_logs_days = 7 # 只保留 7 天的日志文件 25 | 26 | 如果你直接得到一台服务器 , 上面的 binlog 日志已经影响到了磁盘空间 , 那么你将使用下面命令清除 27 | 28 | mysql> reset master; # 清空所有 binlog 文件 29 | 30 | 如果你的得到的服务器 , mysql 还做了主从同步 , 那么上面的命令就不适合你了 , 因为 binlog 文件删除过多的话 , 会导致数据不同步 31 | 32 | mysql> show slave status\G # 你首先要来 slave 上查看从库读 binlog 到了哪里 33 | Master_Log_File: mysql-bin.000009 # 我们可以看到是 mysql-bin.000009 34 | 35 | mysql> purge master logs to 'mysql-bin.000009'; # 我们可以在 master 中执行这条指令 , 将 binlog 文件删除至 mysql-bin.000009 前 36 | 37 | mysql> purge master logs before '2014-11-18 00:00:00'; # 将 binlog 文件删除至此日期前 38 | 39 | 资料来源:https://blog.csdn.net/github_34367377/article/details/90168411 40 | ``` 41 | 42 | ## 群聊内容 43 | 44 | ![mark](http://cdn.jayh.club/blog/20201028/JyuCkHISqkFl.png?imageslim) 45 | 46 | ![mark](http://cdn.jayh.club/blog/20201028/TYnltfKLTKVX.png?imageslim) 47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /docs/03.SpringBoot/08.SpringBoot-Mybatis逻辑删除.md: -------------------------------------------------------------------------------- 1 | # 08.SpringBoot-MybatisPlus逻辑删除 2 | 3 | 只要我们配置了MybatisPlus的逻辑删除功能,则调用MybatisPlus的删除方法时,将不会直接从数据库删除记录,而是将删除标记为已删除。 4 | 5 | ## 1.配置逻辑删除 6 | 7 | SpringBoot 配置方式: 8 | 9 | - application.yml 加入配置(如果你的默认值和mp默认的一样,该配置可无): 10 | 11 | ```yaml 12 | mybatis-plus: 13 | global-config: 14 | db-config: 15 | logic-delete-field: del_flag #全局逻辑删除字段值 3.3.0开始支持,详情看下面。 16 | logic-delete-value: 1 # 逻辑已删除值(默认为 1) 17 | logic-not-delete-value: 0 # 逻辑未删除值(默认为 0) 18 | ``` 19 | 20 | - 实体类字段上加上`@TableLogic`注解 21 | 22 | ```java 23 | @TableLogic 24 | private Integer deleted; 25 | ``` 26 | 27 | - 效果: 使用mp自带方法删除和查找都会附带逻辑删除功能 (自己写的xml不会) 28 | 29 | ```sql 30 | example 31 | 删除时 update user set deleted=1 where id =1 and deleted=0 32 | 查找时 select * from user where deleted=0 33 | ``` 34 | 35 | - 全局逻辑删除: 3.3.0开始支持 36 | 37 | 如果公司代码比较规范,比如统一了全局都是flag为逻辑删除字段。 38 | 39 | 使用此配置则不需要在实体类上添加 @TableLogic。 40 | 41 | 但如果实体类上有 @TableLogic 则以实体上的为准,忽略全局。 即先查找注解再查找全局,都没有则此表没有逻辑删除。 42 | 43 | ```yaml 44 | mybatis-plus: 45 | global-config: 46 | db-config: 47 | logic-delete-field: flag #全局逻辑删除字段值 48 | ``` 49 | 50 | 附件说明 51 | 52 | - 逻辑删除是为了方便数据恢复和保护数据本身价值等等的一种方案,但实际就是删除。 53 | - 如果你需要再查出来就不应使用逻辑删除,而是以一个状态去表示。 54 | 55 | 如: 员工离职,账号被锁定等都应该是一个状态字段,此种场景不应使用逻辑删除。 56 | 57 | - 若确需查找删除数据,如老板需要查看历史所有数据的统计汇总信息,请单独手写sql。 58 | 59 | https://mp.baomidou.com/guide/logic-delete.html --------------------------------------------------------------------------------