├── .gitignore ├── .mvn └── wrapper │ ├── MavenWrapperDownloader.java │ ├── maven-wrapper.jar │ └── maven-wrapper.properties ├── .travis.yml ├── Advance高级知识 └── IO知识 │ ├── 0-零拷贝.md │ └── pictures │ ├── 0-零拷贝-1-应用程序访问内存数据块的数据拷贝场景.png │ └── 0-零拷贝-2-内存映射文件方式处理.png ├── DataStructure ├── 1-跳表.md └── 2-红黑树.md ├── Dubbo ├── 01-Dubbo入门.md ├── 02-Dubbo实战.md └── 03-Dubbo原理源码篇.md ├── GTCOM.jpg ├── Git ├── 0-基于Github从零开始搭建个人博客(下).md ├── 0-基于Github从零开始搭建个人博客.md ├── 1-Github_Hexo搭建个人博客.md ├── 1-创建仓库.png ├── 2-Github关于git操作的友好帮助.png ├── 2-github-travis-ci.md ├── 3-hexoinit.png ├── 4-hexos.png ├── 5-browser.png ├── 6-newpost.png ├── 7-hexodeploy.png ├── 8-localhost.png ├── gitCookbook │ ├── 1-Git提交添加emoji图标.md │ └── 1-git-emoji.png ├── gitemojiall.md ├── github-pages │ ├── 1-createRepo.png │ ├── 10.png │ ├── 11.png │ ├── 12.png │ ├── 13.png │ ├── 14.png │ ├── 15.png │ ├── 16.png │ ├── 17.png │ ├── 18.png │ ├── 2-settings.png │ ├── 3-pages.png │ ├── 4-success.png │ ├── 4-theme.png │ ├── 5-init-files.png │ ├── 6-access.png │ ├── 7-files.png │ ├── 8.png │ └── 9.png └── 公众号样式.md ├── JSON └── jackson │ └── jackson编程指南.md ├── JVM ├── 1-JVM参数.md ├── 11-内存分配与回收策略案例.md ├── 2-jstat命令详解.md ├── 3-JVM(一).md └── jstat.md ├── Java8函数式编程 └── README.md ├── Java核心 ├── 0-JAVA获取CLASSPATH路径.md ├── 1-Java枚举.md ├── 2-Java注解.md ├── 3-Java反射.md ├── 4-动态代理.md ├── 5-线程池.md ├── 6-AQS-抽象队列同步器.md └── 7-ReentrantLock重入锁.md ├── Kafka ├── 1-Kafka基础.md └── pictures │ └── 1-kafka基础 │ ├── 1564132451378.png │ ├── 1564132456176.png │ ├── 1564362915555.png │ ├── 1564363038297.png │ ├── 1564363045474.png │ ├── 1564363048020.png │ ├── 1564364560251.png │ ├── 1565681029634.png │ ├── 1565681059740.png │ ├── 1565681365093.png │ ├── 1565681459384.png │ ├── 1565681548064.png │ ├── 1565681577895.png │ ├── 1565683038532.png │ ├── 1565683143620.png │ ├── 1565683401090.png │ ├── 1565685186932.png │ ├── 1565686252541.png │ ├── 1565686553101.png │ ├── 1565686606414.png │ ├── 1565686610491.png │ ├── 1565686643013.png │ ├── 1565686674753.png │ ├── 1565686697776.png │ ├── 1565687937922.png │ ├── 1565689319552.png │ ├── 1565691299823.png │ ├── 1565765860051.png │ └── 1565936033176.png ├── LICENSE ├── Linux ├── 1-Linux基础.md ├── 2-Linux用户磁盘管理.md ├── 3-Linux的vi、vim使用.md ├── 4-Linux的yum命令.md ├── 5-yum源配置.md ├── 6-常用操作快捷键.md ├── 7- Linux环境下的各种常用开发软件安装教程.md ├── awk │ ├── 1-awk入门.md │ ├── awk_workflow.jpg │ └── emp.data ├── img │ ├── 1-Linux基础介绍.png │ ├── 1-Linux基础介绍(目录结构).png │ ├── 1576057399279.png │ ├── 1576057511502.png │ ├── 1576057711660.png │ ├── 1576057716311.png │ ├── 1576057723337.png │ ├── 1576057726913.png │ ├── 1576057730548.png │ ├── 1576057740616.png │ ├── 1576057781943.png │ ├── 1576057981486.png │ ├── 1576058065143.png │ ├── 1576058227429.png │ ├── 1576061730124.png │ ├── 1576061785195.png │ ├── 1576114390863.png │ ├── 1576115489482.png │ ├── 1576117675409.png │ ├── 1577760184493.png │ ├── 1577760217608.png │ ├── Linux-Directory-Structure.jpeg │ ├── ls-l.png │ ├── more.png │ ├── rwx.png │ ├── setnu.png │ ├── vi模式切换.png │ └── yumupdate.png └── shell │ ├── 1-shell基础教程.md │ ├── 2-shell基本语法.md │ ├── 3-shell运算符汇总.md │ └── 4-shell的echo、printf、test详细介绍.md ├── Lua ├── 1-Lua语言入门指南.md ├── 2-Lua语言编程指南.md └── 3-Lua编程高级.md ├── Maven ├── 1-编写一个Maven插件.md └── 2-Maven-profile配置.md ├── Mockito └── Mockito基础 │ └── 1-开始@Mock-@Spy-@Captor-@InjectMocks.md ├── MyBatis ├── 0-Mybatis面试题.md ├── 1-传统JDBC弊端与MyBatis的优点.md ├── 2-MyBatis使用介绍.md ├── 3-逆向工程.md ├── 4-MyBatis源码.md └── 5-Mybatis拦截器.md ├── MySQL ├── 007-CentOS7安装MariaDB的流程步骤.md ├── 1-MySQL数据库读写锁示例详解、事务隔离级别示例详解.md ├── 2-MySql存储引擎.md ├── 3-InnoDB存储引擎.md ├── 998-一些规范示例.md ├── 999-Mysql主从复制.md └── pictures │ └── 001查看可用的存储引擎.png ├── NetWork ├── 999-参考资料.md └── pictures │ └── HTTP状态码.png ├── Netty ├── 1-Netty入门基础.md └── ByteBuf.png ├── Nginx ├── 007-Nginx实现虚拟主机、反向代理、负载均衡、高可用.md ├── 1-Windows环境Ngin.md ├── 10-如何给nginx添加外部模块.md ├── 2-Nginx基础入门.md ├── 3-nginx服务端404以及502等页面配置.md ├── 7-负载均衡实现实践.md ├── 9-Nginx配置文件nginx.conf详细介绍.md ├── 999-资料分享.md ├── check_and_start_nginx.sh ├── img │ ├── 04-Keepalived.png │ ├── 1576745376238.png │ ├── 1576748336954.png │ ├── 1576752632200.png │ ├── 1576752878597.png │ ├── 1576752917726.png │ ├── 1576754226844.png │ ├── 1576754600807.png │ ├── 1576757003894.png │ ├── 1576757899719.png │ ├── 1576757921014.png │ ├── 1576757952498.png │ ├── 1576822681380.png │ ├── 1576822924112.png │ ├── 1576836138597.png │ ├── 1576837944705.png │ ├── 1576839162422.png │ ├── 1576843354486.png │ ├── 1576843508915.png │ ├── 1576843707409.png │ ├── 1576843745271.png │ ├── 1577327856588.png │ ├── 1577340754696.png │ ├── 1577341058999.png │ └── 1577343575469.png ├── keepalived.conf ├── nginx.conf └── pictures │ ├── 7-负载均衡实现 │ ├── 1-HTTP重定向负载均衡.jpg │ ├── 2-DNS域名解析负载均衡.jpg │ ├── 3-反向代理负载均衡.jpg │ ├── 4-IP负载均衡.jpg │ └── 5-数据链路层负载均衡.jpg │ └── LVS.jpg ├── Nodejs └── 0-Nodejs以及npm安装.md ├── Protobuf └── ProtobufTutorial │ ├── Protobuf4Java.md │ ├── ProtobufCompilerInstruction.md │ ├── Protobuf基础教程.md │ └── addressbook.proto ├── Python3 ├── 1-Python3概览.md ├── 2-Python3基本语法.md ├── 3-Python爬虫相关库.md └── img │ ├── 1-windows版本安装包下载.png │ ├── 2-源码安装Python.png │ ├── 3-MacOS安装Python.png │ ├── cpp_break_statement.jpg │ ├── decision_making.jpg │ ├── python_for_loop.jpg │ └── python_while_loop.jpg ├── README.md ├── Redis ├── 1-Redis内存淘汰策略.md ├── 10-Redis面试热点问题.md ├── 2-Redis数据类型以及数据结构实现.md ├── 3-Redis缓存.md ├── 4-Redis哨兵-复制.md ├── 5-Redis-Cluster集群.md ├── 6-Redis分布式锁.md ├── 7-Redis持久化.md ├── 8-Redis应用场景分析.md ├── 9-1Redis-conf官方原始.md ├── 9-Redis-conf配置文件解析.md ├── 999-Redis运维系统命令.md └── pictures │ ├── 1.jpg │ └── 2.jpg ├── RocketMQ ├── 0-windows安装RocketMQ以及运行第一个MQ程序.md ├── 1-RocketMQ技术设计架构.png ├── 1-RocketMQ技术设计架构PPT.png ├── 1-RocketMQ核心知识.md ├── 2-RocketMQ优势.png ├── 2-RocketMQ最佳实践-来自官网.md ├── 3-RocketMQ控制台搭建.md ├── 3-生产者Broker消费者关系图.png ├── 4-BrokerServer模块.png ├── 4-RocketMQ源码片段阅读(一).md ├── 5-RocketMQ架构部署.png ├── 6-Broker-Topic-Queue关系.png ├── 999-RocketMQ配置技能.md ├── 9999-RocketMQ配置参数大全-持续收录.md ├── 99999-附加资料.md ├── blog │ ├── 1-download1.png │ ├── 1-download2.png │ ├── 1-download3.png │ ├── 1-download4.png │ └── 1-download5.png ├── pictures │ ├── 0-console控制台-1.png │ ├── 1-console控制台-1.png │ ├── 1-console控制台-2.png │ └── 1-console控制台-3.png └── 参与阿里巴巴RocketMQ项目 │ └── 1-客户端配置_en.md ├── Scrum └── 1-Scrum基础入门.md ├── Spring ├── 0-Spring概览相关重要类.md ├── 1-IOC相关.md ├── 2-SpringMVC原理解析.md ├── 3-SpringAOP.md ├── 4-过滤器.md ├── 5-拦截器.md ├── 6-Spring事务.md ├── 7-XML自定义模式扩展.md └── pictures │ ├── Spring-bean注册流程.png │ ├── Spring-tx.png │ ├── SpringAOP-1.jpg │ ├── SpringAOP-1.png │ ├── SpringMVC处理流程.png │ ├── Spring事务传播性---PROPAGATION_REQUIRED.png │ ├── Spring事务传播性---PROPAGATION_REQUIRES_NEW.png │ └── Spring声明式事务代理调用方法的概念视图.png ├── SpringBoot ├── 1-SpringBoot启动流程跟踪.md ├── 99-自定义启动器starter.md └── pictures │ └── 1-starter │ └── 1.png ├── SpringCloud ├── 0-SpringCloud资料链接.md ├── 1-Eureka服务注册发现.md ├── 2-Ribbon负载均衡.md ├── 3-Feign负载均衡.md ├── 4-Hystrix熔断器.md ├── 5-HystrixDashboard仪表盘.md ├── 6-Zuul动态路由转发-过滤.md ├── 7-SpringCloud-Config配置.md ├── 8-SpringCloud-Config高可用架构.md ├── 9-SpringCloud-Bus消息总线.md ├── 999-附加参考资料.md └── pictures │ ├── config-ha │ └── 1-高可用的SpringCloud-config架构.png │ ├── eureka │ ├── 1.png │ ├── 2.png │ ├── 3.png │ ├── 4.png │ └── 5.png │ ├── hystrix │ ├── 1.png │ └── 2.png │ ├── hystrixboard │ ├── 1.png │ └── 2.png │ ├── ribbon │ ├── 1.png │ ├── 2.png │ └── 3.png │ └── zuul │ ├── 1.png │ └── 2.png ├── Swagger └── 1-整合Swagger.md ├── XML ├── 1-XML介绍.md ├── 2-dom4j解析XML.md ├── 3-XPath解析XML.md └── img │ └── 1576049327234.png ├── Zokeeper └── Zookeeper分布式过程协同技术详解Note │ ├── 1-一般性主从架构.jpg │ ├── 2-CMW.jpg │ ├── 2-zkservice.jpg │ ├── 3-单机集群配置一.png │ ├── 3-单机集群配置三.png │ ├── 3-单机集群配置二.png │ ├── 3-单机集群配置五.png │ ├── 3-单机集群配置四.png │ ├── pictures │ ├── 4-会话在服务器之间转移.png │ ├── chapter9-1.jpg │ ├── chapter9-2Zk选举过程.jpg │ ├── chapter9-2ZooKeeper内部原理三--ZooKeeper选举过程(延迟选举时长).jpg │ ├── chapter9-2ZooKeeper内部原理三--ZooKeeper选举过程(异常情况).jpg │ ├── chapter9-2ZooKeeper内部原理三--ZooKeeper选举过程(正常).jpg │ └── chapter9-2服务器选举状态.jpg │ ├── 第1章-Zk概览.md │ ├── 第2章-了解Zk与Zk集群配置、主从模式案例演示.md │ ├── 第3章-使用Zk的API进行开发.md │ ├── 第4章-处理状态变化-主节点、从节点.md │ └── 第九章-ZooKeeper内部原理.md ├── dlzd-qrcode.gif ├── dlzdgzh.jpg ├── javassist指南 ├── 0-javassist编程指南概览.md ├── 1-读、写字节码.md ├── 2-ClassPool.md ├── 3-ClassLoader.md ├── 4-自省和定制.md └── 5-字节码级别API.md ├── mvn-local-plugin-use ├── README.md ├── pom.xml ├── src │ └── main │ │ └── java │ │ └── Demo.java └── target │ ├── classes │ └── Demo.class │ └── maven-status │ └── maven-compiler-plugin │ └── compile │ └── default-compile │ ├── createdFiles.lst │ └── inputFiles.lst ├── mvn-local-plugin ├── README.md ├── pom.xml ├── src │ └── main │ │ └── java │ │ └── org │ │ └── byron4j │ │ └── CountMojo.java └── target │ ├── classes │ ├── META-INF │ │ └── maven │ │ │ ├── org.byron4j │ │ │ └── mvn-local-plugin │ │ │ │ └── plugin-help.xml │ │ │ └── plugin.xml │ └── org │ │ └── byron4j │ │ └── CountMojo.class │ ├── maven-archiver │ └── pom.properties │ ├── maven-status │ └── maven-compiler-plugin │ │ ├── compile │ │ └── default-compile │ │ │ ├── createdFiles.lst │ │ │ └── inputFiles.lst │ │ └── testCompile │ │ └── default-testCompile │ │ └── inputFiles.lst │ └── mvn-local-plugin-0.0.1-SNAPSHOT.jar ├── mvnw ├── mvnw.cmd ├── mybatis-gener2 ├── mybatisGeneral │ ├── bin │ │ ├── com │ │ │ └── crfchina │ │ │ │ └── bd │ │ │ │ ├── mapper │ │ │ │ ├── CrfBankcardOptRecordMapper.class │ │ │ │ └── CrfBankcardOptRecordMapper.xml │ │ │ │ └── mode │ │ │ │ └── CrfBankcardOptRecord.class │ │ └── lcw │ │ │ ├── dao │ │ │ ├── AAA.class │ │ │ └── CrfLoanClaimInfoMapper.class │ │ │ ├── mapping │ │ │ └── CrfLoanClaimInfoMapper.xml │ │ │ └── model │ │ │ └── CrfLoanClaimInfo.class │ ├── generatorConfig.xml │ ├── mybatis-generator-core-1.3.2.jar │ ├── mysql-connector-java-5.1.27.jar │ ├── sqlite-jdbc-3.14.2.1.jar │ └── 命令.txt └── 生成语句.txt ├── org └── byron4j │ └── cookbook │ └── javaagent │ ├── Javassist2ClassPool.class │ ├── Point.class │ └── Rectangle.class ├── pictures └── gtcom2.jpg ├── pom.xml ├── src ├── main │ ├── java │ │ └── org │ │ │ └── byron4j │ │ │ └── cookbook │ │ │ ├── CookbookApplication.java │ │ │ ├── algrithms │ │ │ ├── QuickSort.java │ │ │ ├── package-info.java │ │ │ └── tree │ │ │ │ └── BinaryTree.java │ │ │ ├── dbconnpool │ │ │ ├── c3p0 │ │ │ │ ├── Ch01.java │ │ │ │ └── Ch02.java │ │ │ └── package-info.java │ │ │ ├── designpattern │ │ │ ├── adapter │ │ │ │ ├── AbstractAccount.java │ │ │ │ ├── Account.java │ │ │ │ ├── AccountAdapter.java │ │ │ │ ├── OffshoreAccount.java │ │ │ │ ├── PlatinumAccount.java │ │ │ │ └── StandardAccount.java │ │ │ ├── builder │ │ │ │ ├── Meal.java │ │ │ │ ├── MealBuilder.java │ │ │ │ ├── MealDirector.java │ │ │ │ └── SandwichBuilder.java │ │ │ ├── factory │ │ │ │ ├── LondonMobileFactory.java │ │ │ │ ├── MobileFactory.java │ │ │ │ ├── NYMobileFactory.java │ │ │ │ ├── SpiceBolt.java │ │ │ │ ├── SpiceFire.java │ │ │ │ ├── SpiceMobile.java │ │ │ │ └── SpicePlus.java │ │ │ ├── objectpool │ │ │ │ ├── JDBCConnectionPool.java │ │ │ │ └── ObjectPool.java │ │ │ ├── observer │ │ │ │ ├── Observer.java │ │ │ │ ├── Publisher.java │ │ │ │ ├── Publisher2WeakReference.java │ │ │ │ ├── Subject.java │ │ │ │ ├── Subscriber1.java │ │ │ │ ├── Subscriber2.java │ │ │ │ ├── other │ │ │ │ │ ├── BinObserver.java │ │ │ │ │ ├── HexObserver.java │ │ │ │ │ ├── Observer.java │ │ │ │ │ ├── ObserverTest.java │ │ │ │ │ ├── OctObserver.java │ │ │ │ │ └── Subject.java │ │ │ │ └── package-info.java │ │ │ ├── prototype │ │ │ │ ├── Cake.java │ │ │ │ ├── CakeStore.java │ │ │ │ └── CheeseCake.java │ │ │ ├── responsibilitychain │ │ │ │ ├── AbstractLeaveHandler.java │ │ │ │ ├── DeptManagerLeaveHandler.java │ │ │ │ ├── DirectLeaderLeaveHandler.java │ │ │ │ ├── GManagerLeaveHandler.java │ │ │ │ ├── LeaveRequest.java │ │ │ │ ├── ResponsibilityTest.java │ │ │ │ └── package-info.java │ │ │ ├── segregation │ │ │ │ ├── IMachine.java │ │ │ │ └── XeroxMachine.java │ │ │ ├── singleton │ │ │ │ ├── Singleton.java │ │ │ │ ├── SingletonSynchronized.java │ │ │ │ ├── SingletonSynchronizedOptimized.java │ │ │ │ ├── SingletonZClone.java │ │ │ │ ├── SingletonZCloneSerializable.java │ │ │ │ ├── SingletonZCloneSerializableReadResolve.java │ │ │ │ ├── SingletonZCloneUnabled.java │ │ │ │ └── package-info.java │ │ │ ├── state │ │ │ │ ├── DeadState.java │ │ │ │ ├── GameContext.java │ │ │ │ ├── GameContextUpgrade.java │ │ │ │ ├── HealthyState.java │ │ │ │ ├── Player.java │ │ │ │ ├── PlayerState.java │ │ │ │ ├── SurvivalState.java │ │ │ │ └── package-info.java │ │ │ ├── strategy │ │ │ │ ├── InsertionSort.java │ │ │ │ ├── SelectionSort.java │ │ │ │ ├── SortingContext.java │ │ │ │ └── SortingStrategy.java │ │ │ ├── template │ │ │ │ ├── MexicanPizza.java │ │ │ │ ├── Pizza.java │ │ │ │ ├── SweetCornPizza.java │ │ │ │ └── package-info.java │ │ │ └── wrapper │ │ │ │ ├── Car.java │ │ │ │ ├── QeqCar.java │ │ │ │ ├── WrapperCar.java │ │ │ │ └── WrapperTest.java │ │ │ ├── java8 │ │ │ ├── .DS_Store │ │ │ └── basic │ │ │ │ └── CompareJava8AndPreVersion.java │ │ │ ├── javaagent │ │ │ ├── HelloClassFileTransformer.java │ │ │ ├── Javassist1RWBytecode.java │ │ │ ├── Javassist2ClassPool.java │ │ │ ├── Javassist3ClassLoader.java │ │ │ ├── Javassist3ClassLoaderTest.java │ │ │ ├── Javassist3ClassLoaderTest2.java │ │ │ ├── Javassist3ClassLoaderTest3.java │ │ │ ├── MyClassLoader.java │ │ │ ├── MyTranslator.java │ │ │ ├── Point.java │ │ │ ├── Rectangle.java │ │ │ ├── SampleLoader.java │ │ │ ├── cahpter4 │ │ │ │ └── package-info.java │ │ │ └── package-info.java │ │ │ ├── javacore │ │ │ ├── anno │ │ │ │ ├── AnnoDemo.java │ │ │ │ ├── ChildClass.java │ │ │ │ ├── Demo.java │ │ │ │ ├── Due.java │ │ │ │ ├── FK1.java │ │ │ │ ├── Role.java │ │ │ │ ├── SuperClass.java │ │ │ │ ├── Td.java │ │ │ │ ├── jsr250 │ │ │ │ │ └── PostConstructDemo.java │ │ │ │ ├── package-info.java │ │ │ │ └── resolver │ │ │ │ │ ├── BusinessLogic.java │ │ │ │ │ └── ByronAnno.java │ │ │ ├── dynamicproxy │ │ │ │ ├── cglibproxy │ │ │ │ │ ├── BookStore.java │ │ │ │ │ └── CglibProxy.java │ │ │ │ └── jdkproxy │ │ │ │ │ ├── DynamicAnno.java │ │ │ │ │ ├── Hello.java │ │ │ │ │ ├── HelloImpl.java │ │ │ │ │ ├── JDKDynamicProxy.java │ │ │ │ │ └── MyInterceptor.java │ │ │ ├── enums │ │ │ │ ├── BasicOperation.java │ │ │ │ ├── EnumSetDemo.java │ │ │ │ ├── EnumsTest.java │ │ │ │ ├── Herb.java │ │ │ │ ├── LighjtOriginColorEnums.java │ │ │ │ ├── OffsetItemEnums.java │ │ │ │ ├── Operation.java │ │ │ │ ├── OperationGraceful.java │ │ │ │ ├── OperationGracefulField.java │ │ │ │ ├── OperationI.java │ │ │ │ ├── OriginColor.java │ │ │ │ ├── PayrollDay.java │ │ │ │ ├── PayrollDayStrategy.java │ │ │ │ ├── PigmentOriginColorEnums.java │ │ │ │ └── package-info.java │ │ │ ├── http │ │ │ │ ├── BasicHttpServerExample.java │ │ │ │ └── BasicHttpServerExample2.java │ │ │ ├── juc │ │ │ │ └── VolatileDemo.java │ │ │ ├── log │ │ │ │ └── ch1 │ │ │ │ │ └── MyClass.java │ │ │ ├── package-info.java │ │ │ ├── reflection │ │ │ │ ├── ReflectionTest.java │ │ │ │ └── package-info.java │ │ │ ├── spi │ │ │ │ ├── DefaultView.java │ │ │ │ ├── UiApplication.java │ │ │ │ └── View.java │ │ │ └── thpool │ │ │ │ ├── ExecutorDemo.java │ │ │ │ └── package-info.java │ │ │ ├── jdbc │ │ │ └── JdbcTemplateQuery.java │ │ │ ├── jvm │ │ │ ├── chapte3 │ │ │ │ ├── MinorGCDemo.java │ │ │ │ └── PretenureSizeThresholdDemo.java │ │ │ ├── chapterr2 │ │ │ │ ├── ReferenceCountGCDemo.java │ │ │ │ └── StringInternDemo.java │ │ │ └── package-info.java │ │ │ ├── netty │ │ │ ├── apidemo │ │ │ │ ├── command │ │ │ │ │ ├── Command.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── package-info.java │ │ │ │ ├── packet │ │ │ │ │ ├── LoginRequestPacket.java │ │ │ │ │ ├── LoginResponsePacket.java │ │ │ │ │ ├── Packet.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── protocol │ │ │ │ │ └── PacketCodeC.java │ │ │ │ └── serializer │ │ │ │ │ ├── JSONSerializer.java │ │ │ │ │ ├── Serializer.java │ │ │ │ │ ├── SerializerAlgorithm.java │ │ │ │ │ └── package-info.java │ │ │ ├── first │ │ │ │ ├── NettyClient.java │ │ │ │ └── NettyServer.java │ │ │ ├── io │ │ │ │ ├── IOClient.java │ │ │ │ ├── IOServer.java │ │ │ │ ├── TimerClient.java │ │ │ │ └── TimerServer.java │ │ │ ├── login │ │ │ │ ├── Client.java │ │ │ │ ├── ClientHandler.java │ │ │ │ ├── Server.java │ │ │ │ ├── ServerHandler.java │ │ │ │ └── package-info.java │ │ │ └── message │ │ │ │ ├── Attributes.java │ │ │ │ ├── LoginUtil.java │ │ │ │ ├── MessageRequestPacket.java │ │ │ │ ├── MessageResponsePacket.java │ │ │ │ ├── client │ │ │ │ ├── MessageClient.java │ │ │ │ └── MessageClientHandler.java │ │ │ │ ├── package-info.java │ │ │ │ └── server │ │ │ │ ├── MessageServer.java │ │ │ │ └── MessageServerHandler.java │ │ │ ├── rocketmq │ │ │ ├── MQConsumerDemo.java │ │ │ ├── MQProducerDemo.java │ │ │ └── transaction │ │ │ │ ├── MQTransactionConsumerDemo.java │ │ │ │ ├── MQTransactionProducerDemo.java │ │ │ │ └── package-info.java │ │ │ ├── springMVC │ │ │ ├── package-info.java │ │ │ └── root │ │ │ │ ├── AspectjMain.java │ │ │ │ ├── SpringMVCStartup.java │ │ │ │ ├── controller │ │ │ │ └── HelloController.java │ │ │ │ ├── domain │ │ │ │ └── User.java │ │ │ │ └── repo │ │ │ │ ├── JdbcTemplateDao.java │ │ │ │ └── NamedParameterJdbcTemplateDao.java │ │ │ ├── util │ │ │ ├── ArraysUtil.java │ │ │ ├── C3P0Utils.java │ │ │ └── Utils.java │ │ │ ├── web │ │ │ └── HelloController.java │ │ │ ├── yaml │ │ │ └── Yaml1.java │ │ │ └── zk │ │ │ ├── chapter4 │ │ │ ├── Master5.java │ │ │ ├── Master6.java │ │ │ ├── Master7.java │ │ │ └── MasterStates.java │ │ │ ├── zkApi │ │ │ ├── Master.java │ │ │ ├── Master2.java │ │ │ ├── Master3.java │ │ │ └── Master4.java │ │ │ └── zkFollow │ │ │ ├── AdminClient.java │ │ │ ├── Client.java │ │ │ └── Worker.java │ └── resources │ │ ├── META-INF │ │ ├── MANIFEST.MF │ │ └── services │ │ │ └── org.byron4j.cookbook.javacore.spi.DefaultView │ │ ├── application.properties.back │ │ ├── application.yml │ │ ├── application.yml.back │ │ ├── c3p0.properties │ │ ├── logging.properties │ │ └── mypydb.sql └── test │ └── java │ └── org │ └── byron4j │ └── cookbook │ ├── CookbookApplicationTests.java │ ├── TestCase.java │ ├── TestCase2.java │ ├── algrithms │ └── QuickSortTest.java │ ├── designpattern │ ├── AdapterTest.java │ ├── BuilderTest.java │ ├── FactoryTest.java │ ├── ObjectPoolTest.java │ ├── ObserverTest.java │ ├── PrototypeTest.java │ ├── SingletonTest.java │ ├── StateTest.java │ ├── StrategyTest.java │ └── TemplateTest.java │ ├── mocketio │ └── basic │ │ ├── MockitoAnnoTest.java │ │ ├── MockitoAnnotationStartup.java │ │ ├── MockitoTest.java │ │ └── ResttemplateTest.java │ └── netty │ ├── ByteBufTest.java │ └── PacketCodeCTest.java ├── test.sh ├── 分布式高并发 ├── 0-总览.md ├── 1-令牌桶算法.md ├── 2-滑动窗口算法.md └── 3-一致性哈希算法.md ├── 加密算法 └── 1-RSA非对称加密算法.md ├── 在线API └── onlineapi.md ├── 支付系统一般架构设计.png ├── 支付系统一般架构设计.svg ├── 数据结构和算法 ├── 数据结构 │ ├── 01-线性表.md │ ├── 02-链表.md │ ├── 03-栈、队列.md │ ├── 04-哈希.md │ ├── 05-树.md │ ├── 06-二叉查找树.md │ ├── 07-红黑树.md │ ├── 08-AVL树.md │ ├── 09-B树.md │ ├── 10-图.md │ └── pictures │ │ └── 树 │ │ ├── 1-二叉树的构、先序、中序、后序遍历.png │ │ ├── 2-二叉树数组表现形式.png │ │ ├── 完全二叉树.png │ │ ├── 树的表现形式-族谱.png │ │ ├── 满二叉树.png │ │ └── 链表表示二叉树.png └── 算法 │ └── 1-快速排序.md ├── 架构 ├── 云原生 │ └── 00-什么是云原生.md ├── 内容 │ ├── img │ │ ├── 1.jpeg │ │ └── 2.jpeg │ └── 架构内容.md ├── 微服务 │ ├── 01-为什么大公司一定要使用微服务.md │ └── pictures │ │ ├── 01-基于dubbo+boot的微服务架构图.png │ │ └── 微服务结构图.png ├── 缓存 │ ├── 01_mysql和redis缓存一致性解决方案.png │ └── 02-CPU缓存结构-01.png └── 高可用 │ ├── 01-高可用、负载均衡不得不说的事.md │ └── img │ ├── 1578043763376.png │ ├── 1578043782006.png │ ├── 1578043798504.png │ ├── 1578043813760.png │ ├── 1578043833525.png │ ├── 1578043850043.png │ ├── 1578043873233.png │ ├── 1578043886303.png │ ├── 1578043901270.png │ └── 1578043923325.png ├── 测试 └── 关于测试.md ├── 消费金融 ├── 一般性消费金融云图.png ├── 一般性金融软件架构图.png ├── 支付行业 │ ├── 1-支付流程.png │ ├── 2-支付架构.png │ └── 999-参考资料.md └── 金融云架构.png ├── 规则引擎 ├── 1-规则引擎基础.md └── img │ ├── 1576132902440.png │ └── 1576133475159.png ├── 设计模式 ├── 1-单例模式 │ ├── .DS_Store │ └── 1-单例模式.md ├── 10-对象池设计模式 │ ├── .DS_Store │ └── 10-对象池设计模式.md ├── 11-责任链模式 │ ├── 11-责任链模式.md │ ├── AbstractLeaveHandler.png │ └── 责任链模式流程图.png ├── 12-装饰器模式 │ ├── 1.png │ ├── 12-装饰器模式.md │ ├── 2.png │ └── FilterInputStream.png ├── 2-观察者模式 │ ├── 2-观察者模式.md │ └── Observer-Design-Pattern-Class-Diagram.png ├── 3-适配器模式 │ ├── 3-适配器模式.md │ ├── Adapter-Design-Pattern-Class-Diagram.png │ └── Adapter-Design-Pattern-Sequence-Diagram-620x492.png ├── 4-原型模式 │ ├── 4-原型模式.md │ └── Prototype-Design-Pattern.png ├── 5-建造者模式 │ ├── 5-建造者模式.md │ └── Builder-Design-Pattern-Java-620x382.png ├── 6-工厂方法模式 │ ├── 6-工厂方法模式.md │ └── Factory-Method-Design-Pattern-620x365.png ├── 7-模板方法 │ ├── 7-模板模式.md │ └── Template-Method-Design-Pattern-Example-620x406.png ├── 8-状态模式 │ ├── 8-状态模式.md │ └── State-Design-Pattern-Java.png ├── 9-策略模式 │ ├── 9-策略模式.md │ └── Strategy-Design-Pattern-Java.png ├── 接口分离设计原则.md └── 设计模式概览.md ├── 软件激活 ├── IDEA-2019-1永久激活教程.md ├── IDEA-2019-1永久激活教程.opml ├── Xshell、Xftp │ └── 获取免费版Xshell和Xftp │ │ ├── img │ │ └── 1578651925787.png │ │ └── 获取免费版Xshell和Xftp.md ├── img │ ├── 1578649763368.png │ ├── 1578649857572.png │ ├── 1578649929343.png │ ├── 1578650047362.png │ ├── 1578650152196.png │ └── 1578650507174.png └── javahat.png └── 面试汇总 └── 1-面试常问题目.md /.gitignore: -------------------------------------------------------------------------------- 1 | /target/ 2 | #!.mvn/wrapper/maven-wrapper.jar 3 | 4 | ### STS ### 5 | .apt_generated 6 | .classpath 7 | .factorypath 8 | .project 9 | .settings 10 | .springBeans 11 | .sts4-cache 12 | 13 | ### IntelliJ IDEA ### 14 | .idea 15 | *.iws 16 | *.iml 17 | *.ipr 18 | 19 | ### NetBeans ### 20 | /nbproject/private/ 21 | /build/ 22 | /nbbuild/ 23 | /dist/ 24 | /nbdist/ 25 | /.nb-gradle/ 26 | #/.mvn 27 | /test.ser 28 | -------------------------------------------------------------------------------- /.mvn/wrapper/maven-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/.mvn/wrapper/maven-wrapper.jar -------------------------------------------------------------------------------- /.mvn/wrapper/maven-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.0/apache-maven-3.6.0-bin.zip 2 | wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.3/maven-wrapper-0.5.3.jar 3 | 4 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: java 2 | 3 | notifications: 4 | email: false 5 | 6 | script: 7 | - mvn clean package -DskipTests=true -------------------------------------------------------------------------------- /Advance高级知识/IO知识/0-零拷贝.md: -------------------------------------------------------------------------------- 1 | # 零拷贝 2 | 3 | 零拷贝主要的任务就是避免CPU将数据从一块存储拷贝到另外一块存储,主要就是利用各种零拷贝技术,避免让CPU做大量的数据拷贝任务,减少不必要的拷贝,或者让别的组件来做这一类简单的数据传输任务,让CPU解脱出来专注于别的任务。这样就可以让系统资源的利用更加有效。 4 | 5 | 以下是正常的读取数据传输到网络中去的数据拷贝场景: 6 | ![](pictures/0-零拷贝-1-应用程序访问内存数据块的数据拷贝场景.png) 7 | 8 | 在这个场景中,共产生了四次数据拷贝。即使使用了DMA来处理了与硬件的通讯,CPU仍然需要处理两次数据拷贝,与此同时,在用户态与内核态也发生了多次上下文切换,无疑也加重了CPU负担。 9 | 在此过程中,我们没有对文件内容做任何修改,那么在内核空间和用户空间来回拷贝数据无疑就是一种浪费,而零拷贝主要就是为了解决这种低效性。 10 | 11 | 如何减少内核空间和用户空间来回拷贝次数呢? 12 | 13 | ## 让数据不经过用户空间 14 | 15 | 使用内存映射文件mmap,使用mmap操作时,磁盘的数据会拷贝到内核空间,操作系统会把映射过的这段内核区与应用程序共享,如此一来,就不需要把内核缓冲区的数据内容往用户空间拷贝。写数据时,操作系统直接将内存缓冲区的数据拷贝到Socket缓冲区中,这一切都发生在内核空间中,看图: 16 | 17 | ![](pictures/0-零拷贝-2-内存映射文件方式处理.png) 18 | 19 | 20 | Java内存映射类: ```java.nio.MappedByteBuffer```, 该类的实例通过```java.nio.channels.FileChannel.map```获取。 21 | 22 | 23 | 24 | - 扩展资料 : https://www.jianshu.com/p/fad3339e3448 -------------------------------------------------------------------------------- /Advance高级知识/IO知识/pictures/0-零拷贝-1-应用程序访问内存数据块的数据拷贝场景.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Advance高级知识/IO知识/pictures/0-零拷贝-1-应用程序访问内存数据块的数据拷贝场景.png -------------------------------------------------------------------------------- /Advance高级知识/IO知识/pictures/0-零拷贝-2-内存映射文件方式处理.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Advance高级知识/IO知识/pictures/0-零拷贝-2-内存映射文件方式处理.png -------------------------------------------------------------------------------- /DataStructure/1-跳表.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | #### 参考资料 4 | 5 | - http://www.cnblogs.com/seniusen/p/9870398.html 6 | -------------------------------------------------------------------------------- /DataStructure/2-红黑树.md: -------------------------------------------------------------------------------- 1 | #### 参考资料 2 | 3 | - https://blog.csdn.net/sun_tttt/article/details/65445754 4 | 5 | -------------------------------------------------------------------------------- /Dubbo/01-Dubbo入门.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Dubbo/01-Dubbo入门.md -------------------------------------------------------------------------------- /Dubbo/02-Dubbo实战.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Dubbo/02-Dubbo实战.md -------------------------------------------------------------------------------- /Dubbo/03-Dubbo原理源码篇.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Dubbo/03-Dubbo原理源码篇.md -------------------------------------------------------------------------------- /GTCOM.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/GTCOM.jpg -------------------------------------------------------------------------------- /Git/1-创建仓库.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Git/1-创建仓库.png -------------------------------------------------------------------------------- /Git/2-Github关于git操作的友好帮助.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Git/2-Github关于git操作的友好帮助.png -------------------------------------------------------------------------------- /Git/2-github-travis-ci.md: -------------------------------------------------------------------------------- 1 | # Maven项目集成Travis-ci 2 | 3 | - 1.持续集成权限报错(Travis.yml ./mvnw : Permission denied) 4 | >git ls-tree HEAD 5 | > 6 | >权限是 100664,你需要把权限改成755 7 | > 8 | >git update-index --chmod=+x mvnw 9 | > 10 | >git commit -m ":green_heart: permission access for travis" 11 | > 12 | >Error: Could not find or load main class org.apache.maven.wrapper.MavenWrapperMain 的解决办法: 13 | > 14 | >mvn -N io.takari:maven:wrapper -------------------------------------------------------------------------------- /Git/3-hexoinit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Git/3-hexoinit.png -------------------------------------------------------------------------------- /Git/4-hexos.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Git/4-hexos.png -------------------------------------------------------------------------------- /Git/5-browser.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Git/5-browser.png -------------------------------------------------------------------------------- /Git/6-newpost.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Git/6-newpost.png -------------------------------------------------------------------------------- /Git/7-hexodeploy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Git/7-hexodeploy.png -------------------------------------------------------------------------------- /Git/8-localhost.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Git/8-localhost.png -------------------------------------------------------------------------------- /Git/gitCookbook/1-git-emoji.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Git/gitCookbook/1-git-emoji.png -------------------------------------------------------------------------------- /Git/github-pages/1-createRepo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Git/github-pages/1-createRepo.png -------------------------------------------------------------------------------- /Git/github-pages/10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Git/github-pages/10.png -------------------------------------------------------------------------------- /Git/github-pages/11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Git/github-pages/11.png -------------------------------------------------------------------------------- /Git/github-pages/12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Git/github-pages/12.png -------------------------------------------------------------------------------- /Git/github-pages/13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Git/github-pages/13.png -------------------------------------------------------------------------------- /Git/github-pages/14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Git/github-pages/14.png -------------------------------------------------------------------------------- /Git/github-pages/15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Git/github-pages/15.png -------------------------------------------------------------------------------- /Git/github-pages/16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Git/github-pages/16.png -------------------------------------------------------------------------------- /Git/github-pages/17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Git/github-pages/17.png -------------------------------------------------------------------------------- /Git/github-pages/18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Git/github-pages/18.png -------------------------------------------------------------------------------- /Git/github-pages/2-settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Git/github-pages/2-settings.png -------------------------------------------------------------------------------- /Git/github-pages/3-pages.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Git/github-pages/3-pages.png -------------------------------------------------------------------------------- /Git/github-pages/4-success.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Git/github-pages/4-success.png -------------------------------------------------------------------------------- /Git/github-pages/4-theme.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Git/github-pages/4-theme.png -------------------------------------------------------------------------------- /Git/github-pages/5-init-files.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Git/github-pages/5-init-files.png -------------------------------------------------------------------------------- /Git/github-pages/6-access.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Git/github-pages/6-access.png -------------------------------------------------------------------------------- /Git/github-pages/7-files.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Git/github-pages/7-files.png -------------------------------------------------------------------------------- /Git/github-pages/8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Git/github-pages/8.png -------------------------------------------------------------------------------- /Git/github-pages/9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Git/github-pages/9.png -------------------------------------------------------------------------------- /JVM/3-JVM(一).md: -------------------------------------------------------------------------------- 1 | # JVM(一) 2 | 3 | #### 参考资料 4 | 5 | - [http://www.cnblogs.com/E-star/p/5556188.html](http://www.cnblogs.com/E-star/p/5556188.html) -------------------------------------------------------------------------------- /Java8函数式编程/README.md: -------------------------------------------------------------------------------- 1 | Java 8 函数式编程 2 | 3 | > Java8最大的特性就是引入了Lambda表达式,使得Java拥有了函数式编程风格。 4 | 5 | -------------------------------------------------------------------------------- /Java核心/4-动态代理.md: -------------------------------------------------------------------------------- 1 | # 动态代理 2 | 3 | 动态代理经常用于装饰器、适配器设计模式中。 4 | 动态代理提供了一种替代方法,实现许多常见的设计模式如Facade门面模式、Bridge桥接模式、Interceptor解释器模式、Decorator装饰器模式、Proxy代理模式和Adapter适配器模式的动态实现。 5 | 尽管这些设计模式使用普通的类也能简单的实现,但是在大都数情况下,使用动态代理方式更加方便、更紧凑,可以消除许多手写的或生成的代码。 6 | 7 | 8 | ## JDK动态代理接口 9 | 10 | JDK动态代理是基于接口实现的(后文解释),需要实现```java.lang.reflect.InvocationHandler```这个接口: 11 | ```java 12 | public interface InvocationHandler { 13 | public Object invoke(Object proxy, Method method, Object[] args) 14 | throws Throwable; 15 | } 16 | ``` 17 | 18 | 参考: [```org.byron4j.cookbook.javacore.dynamicproxy.jdkproxy.JDKDynamicProxy```](../src/main/java/org/byron4j/cookbook/javacore/dynamicproxy/jdkproxy/JDKDynamicProxy.java) 19 | 20 | ## 动态代理总结 21 | 22 | - JDK动态代理: 利用反射原理,动态的生成代理类,将类的载入延迟到程序执行之中,解耦了代理类和被代理类的联系.主要要实现InvationHandler接口. 23 | 24 | - CGLIB动态代理:原理是继承,把被代理类作为父类,动态生成被代理类的子类,三个步骤,设置父类,设置回调函数,创建子类.实现MethodInterceptor 接口,拦截调用父类方法时,会处理回调方法,处理自己的增强方法. 25 | 26 | 参考资料: 27 | 28 | - **Decorating with dynamic proxies**: https://www.ibm.com/developerworks/library/j-jtp08305/index.html 29 | 30 | -------------------------------------------------------------------------------- /Java核心/5-线程池.md: -------------------------------------------------------------------------------- 1 | # Java线程池 2 | 3 | -------------------------------------------------------------------------------- /Java核心/7-ReentrantLock重入锁.md: -------------------------------------------------------------------------------- 1 | # ReentrantLock重入锁 2 | 3 | -------------------------------------------------------------------------------- /Kafka/pictures/1-kafka基础/1564132451378.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Kafka/pictures/1-kafka基础/1564132451378.png -------------------------------------------------------------------------------- /Kafka/pictures/1-kafka基础/1564132456176.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Kafka/pictures/1-kafka基础/1564132456176.png -------------------------------------------------------------------------------- /Kafka/pictures/1-kafka基础/1564362915555.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Kafka/pictures/1-kafka基础/1564362915555.png -------------------------------------------------------------------------------- /Kafka/pictures/1-kafka基础/1564363038297.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Kafka/pictures/1-kafka基础/1564363038297.png -------------------------------------------------------------------------------- /Kafka/pictures/1-kafka基础/1564363045474.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Kafka/pictures/1-kafka基础/1564363045474.png -------------------------------------------------------------------------------- /Kafka/pictures/1-kafka基础/1564363048020.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Kafka/pictures/1-kafka基础/1564363048020.png -------------------------------------------------------------------------------- /Kafka/pictures/1-kafka基础/1564364560251.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Kafka/pictures/1-kafka基础/1564364560251.png -------------------------------------------------------------------------------- /Kafka/pictures/1-kafka基础/1565681029634.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Kafka/pictures/1-kafka基础/1565681029634.png -------------------------------------------------------------------------------- /Kafka/pictures/1-kafka基础/1565681059740.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Kafka/pictures/1-kafka基础/1565681059740.png -------------------------------------------------------------------------------- /Kafka/pictures/1-kafka基础/1565681365093.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Kafka/pictures/1-kafka基础/1565681365093.png -------------------------------------------------------------------------------- /Kafka/pictures/1-kafka基础/1565681459384.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Kafka/pictures/1-kafka基础/1565681459384.png -------------------------------------------------------------------------------- /Kafka/pictures/1-kafka基础/1565681548064.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Kafka/pictures/1-kafka基础/1565681548064.png -------------------------------------------------------------------------------- /Kafka/pictures/1-kafka基础/1565681577895.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Kafka/pictures/1-kafka基础/1565681577895.png -------------------------------------------------------------------------------- /Kafka/pictures/1-kafka基础/1565683038532.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Kafka/pictures/1-kafka基础/1565683038532.png -------------------------------------------------------------------------------- /Kafka/pictures/1-kafka基础/1565683143620.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Kafka/pictures/1-kafka基础/1565683143620.png -------------------------------------------------------------------------------- /Kafka/pictures/1-kafka基础/1565683401090.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Kafka/pictures/1-kafka基础/1565683401090.png -------------------------------------------------------------------------------- /Kafka/pictures/1-kafka基础/1565685186932.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Kafka/pictures/1-kafka基础/1565685186932.png -------------------------------------------------------------------------------- /Kafka/pictures/1-kafka基础/1565686252541.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Kafka/pictures/1-kafka基础/1565686252541.png -------------------------------------------------------------------------------- /Kafka/pictures/1-kafka基础/1565686553101.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Kafka/pictures/1-kafka基础/1565686553101.png -------------------------------------------------------------------------------- /Kafka/pictures/1-kafka基础/1565686606414.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Kafka/pictures/1-kafka基础/1565686606414.png -------------------------------------------------------------------------------- /Kafka/pictures/1-kafka基础/1565686610491.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Kafka/pictures/1-kafka基础/1565686610491.png -------------------------------------------------------------------------------- /Kafka/pictures/1-kafka基础/1565686643013.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Kafka/pictures/1-kafka基础/1565686643013.png -------------------------------------------------------------------------------- /Kafka/pictures/1-kafka基础/1565686674753.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Kafka/pictures/1-kafka基础/1565686674753.png -------------------------------------------------------------------------------- /Kafka/pictures/1-kafka基础/1565686697776.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Kafka/pictures/1-kafka基础/1565686697776.png -------------------------------------------------------------------------------- /Kafka/pictures/1-kafka基础/1565687937922.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Kafka/pictures/1-kafka基础/1565687937922.png -------------------------------------------------------------------------------- /Kafka/pictures/1-kafka基础/1565689319552.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Kafka/pictures/1-kafka基础/1565689319552.png -------------------------------------------------------------------------------- /Kafka/pictures/1-kafka基础/1565691299823.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Kafka/pictures/1-kafka基础/1565691299823.png -------------------------------------------------------------------------------- /Kafka/pictures/1-kafka基础/1565765860051.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Kafka/pictures/1-kafka基础/1565765860051.png -------------------------------------------------------------------------------- /Kafka/pictures/1-kafka基础/1565936033176.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Kafka/pictures/1-kafka基础/1565936033176.png -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 湜生 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Linux/6-常用操作快捷键.md: -------------------------------------------------------------------------------- 1 | --- 2 | typora-copy-images-to: img 3 | --- 4 | 5 | 6 | 7 | 8 | 9 | ## 常用快捷键 10 | 11 | linux常用操作快捷键: 12 | Tab: 命令补全/路径补全/文件名补全,一次tab是补全,两次tab,列出相关信息。 13 | Ctrl+C: 强制结束当前的进程。干了一半不想干了想反悔就Ctrl+C。 14 | Ctrl+D: 发送一个exit信号,每次当我们有“退出”的意思的时候,就可以使用这个。比如SSH登录到另一个机器,想退出就Ctrl+D。 15 | Ctrl+A: 移动到命令行首。 16 | Ctrl+E: 移动到命令行尾。 17 | Ctrl+U :从当前光标所在位置向前清除命令。 18 | Ctrl+W: 从当前光标所在位置向前清除一个单词。 19 | 上下箭头: 上下翻看命令的输入记录,如果历史记录太多翻起来太慢,就用history显示出来然后再复制粘贴。 20 | 21 | 22 | 23 | 24 | 25 | ## 系统监控命令 26 | 27 | ### **查看端口占用情况** 28 | 29 | 查看80端口是否已经打开 30 | 31 | ```shell 32 | netstat -an | grep -w 80 其中的-w表示按单词匹配,以免匹配到8080端口 33 | ``` 34 | 35 | ![1577760184493](img/1577760184493.png) 36 | 37 | 查看80端口被什么进程占用 38 | 39 | ```shell 40 | netstat -anp | grep -w 80 41 | ``` 42 | 43 | ![1577760217608](img/1577760217608.png) 44 | 45 | -------------------------------------------------------------------------------- /Linux/awk/awk_workflow.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Linux/awk/awk_workflow.jpg -------------------------------------------------------------------------------- /Linux/awk/emp.data: -------------------------------------------------------------------------------- 1 | Beth 4.00 0 2 | Dan 3.75 0 3 | kathy 4.00 10 4 | Mark 5.00 20 5 | Mary 5.50 22 6 | Susie 4.25 18 -------------------------------------------------------------------------------- /Linux/img/1-Linux基础介绍.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Linux/img/1-Linux基础介绍.png -------------------------------------------------------------------------------- /Linux/img/1-Linux基础介绍(目录结构).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Linux/img/1-Linux基础介绍(目录结构).png -------------------------------------------------------------------------------- /Linux/img/1576057399279.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Linux/img/1576057399279.png -------------------------------------------------------------------------------- /Linux/img/1576057511502.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Linux/img/1576057511502.png -------------------------------------------------------------------------------- /Linux/img/1576057711660.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Linux/img/1576057711660.png -------------------------------------------------------------------------------- /Linux/img/1576057716311.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Linux/img/1576057716311.png -------------------------------------------------------------------------------- /Linux/img/1576057723337.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Linux/img/1576057723337.png -------------------------------------------------------------------------------- /Linux/img/1576057726913.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Linux/img/1576057726913.png -------------------------------------------------------------------------------- /Linux/img/1576057730548.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Linux/img/1576057730548.png -------------------------------------------------------------------------------- /Linux/img/1576057740616.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Linux/img/1576057740616.png -------------------------------------------------------------------------------- /Linux/img/1576057781943.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Linux/img/1576057781943.png -------------------------------------------------------------------------------- /Linux/img/1576057981486.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Linux/img/1576057981486.png -------------------------------------------------------------------------------- /Linux/img/1576058065143.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Linux/img/1576058065143.png -------------------------------------------------------------------------------- /Linux/img/1576058227429.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Linux/img/1576058227429.png -------------------------------------------------------------------------------- /Linux/img/1576061730124.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Linux/img/1576061730124.png -------------------------------------------------------------------------------- /Linux/img/1576061785195.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Linux/img/1576061785195.png -------------------------------------------------------------------------------- /Linux/img/1576114390863.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Linux/img/1576114390863.png -------------------------------------------------------------------------------- /Linux/img/1576115489482.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Linux/img/1576115489482.png -------------------------------------------------------------------------------- /Linux/img/1576117675409.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Linux/img/1576117675409.png -------------------------------------------------------------------------------- /Linux/img/1577760184493.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Linux/img/1577760184493.png -------------------------------------------------------------------------------- /Linux/img/1577760217608.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Linux/img/1577760217608.png -------------------------------------------------------------------------------- /Linux/img/Linux-Directory-Structure.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Linux/img/Linux-Directory-Structure.jpeg -------------------------------------------------------------------------------- /Linux/img/ls-l.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Linux/img/ls-l.png -------------------------------------------------------------------------------- /Linux/img/more.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Linux/img/more.png -------------------------------------------------------------------------------- /Linux/img/rwx.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Linux/img/rwx.png -------------------------------------------------------------------------------- /Linux/img/setnu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Linux/img/setnu.png -------------------------------------------------------------------------------- /Linux/img/vi模式切换.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Linux/img/vi模式切换.png -------------------------------------------------------------------------------- /Linux/img/yumupdate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Linux/img/yumupdate.png -------------------------------------------------------------------------------- /MyBatis/0-Mybatis面试题.md: -------------------------------------------------------------------------------- 1 | # Mybatis问题汇总 2 | 3 | 4 | ## ```#{}```和```${}```的区别是什么? 5 | 6 | 在Mybatis中,有两种占位符 7 | 8 | - ```#{}```解析传递进来的参数数据 9 | - ```${}```对传递进来的参数原样拼接在SQL中 10 | - ```#{}```是预编译处理,```${}```是字符串替换。 11 | - 使用```#{}```可以有效的防止SQL注入,提高系统安全性。 12 | 13 | -------------------------------------------------------------------------------- /MyBatis/1-传统JDBC弊端与MyBatis的优点.md: -------------------------------------------------------------------------------- 1 | # 传统JDBC弊端与MyBatis的优点 2 | 3 | ## 传统JDBC弊端 4 | 5 | - 没有使用连接池,会频繁创建与关闭数据库连接 6 | - 编码麻烦 7 | - PreparedStatement预编译进行变量赋值需要编写数字1、2、3...,不易于开发实践 8 | - 对于处理返回结果ResultSet需要硬编码 9 | 10 | ## MyBatis介绍 11 | 12 | - MyBatis是一个ORM(对象关系映射)框架。 13 | - 支持XML配置。 14 | - 支持注解配置。 15 | 16 | -------------------------------------------------------------------------------- /MyBatis/2-MyBatis使用介绍.md: -------------------------------------------------------------------------------- 1 | # MyBatis使用介绍 2 | 3 | [官网](http://www.mybatis.org/mybatis-3/zh/index.html) 4 | 5 | >MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。 6 | 7 | ## MyBatis 使用步骤 8 | 9 | ### 引入maven依赖 10 | 11 | ```xml 12 | 13 | org.mybatis 14 | mybatis 15 | x.x.x 16 | 17 | ``` 18 | 19 | ### 从XML中构建SqlSessionFactory 20 | 21 | 每个基于 MyBatis 的应用都是以一个 ```SqlSessionFactory``` 的实例为核心的。 22 | SqlSessionFactory 的实例可以通过 ```SqlSessionFactoryBuilder``` 获得。 23 | SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先定制的 Configuration 的实例构建出 SqlSessionFactory 的实例。 24 | MyBatis 包含一个名叫 ```Resources``` 的工具类,它包含一些实用方法,可使从 classpath 或其他位置加载资源文件更加容易。 25 | 26 | -------------------------------------------------------------------------------- /MyBatis/3-逆向工程.md: -------------------------------------------------------------------------------- 1 | 2 | [官网](http://www.mybatis.org/generator/) 3 | 4 | 5 | 6 | ``` 7 | java -jar mybatis-generator-core-x.x.x.jar -configfile \temp\generatorConfig.xml -overwrite 8 | ``` -------------------------------------------------------------------------------- /MyBatis/4-MyBatis源码.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/MyBatis/4-MyBatis源码.md -------------------------------------------------------------------------------- /MySQL/999-Mysql主从复制.md: -------------------------------------------------------------------------------- 1 | 2 | # Mysql 主从复制 3 | 4 | 5 | 6 | #### 参考资料 7 | 8 | - [构建高性能web之路------mysql读写分离实战](https://blog.csdn.net/cutesource/article/details/5710645) -------------------------------------------------------------------------------- /MySQL/pictures/001查看可用的存储引擎.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/MySQL/pictures/001查看可用的存储引擎.png -------------------------------------------------------------------------------- /NetWork/999-参考资料.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/NetWork/999-参考资料.md -------------------------------------------------------------------------------- /NetWork/pictures/HTTP状态码.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/NetWork/pictures/HTTP状态码.png -------------------------------------------------------------------------------- /Netty/1-Netty入门基础.md: -------------------------------------------------------------------------------- 1 | # Netty 入门基础 2 | 3 | NioEventLoopGroup 4 | ServerBootstrap 5 | Bootstrap 6 | NioServerSocketChannel 7 | NioSocketChannel 8 | SocketChannel 9 | ChannelInitializer 10 | ChannelInboundHandlerAdapter 11 | ByteBuf 12 | ChannelHandlerContext 13 | -------------------------------------------------------------------------------- /Netty/ByteBuf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Netty/ByteBuf.png -------------------------------------------------------------------------------- /Nginx/check_and_start_nginx.sh: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Nginx/check_and_start_nginx.sh -------------------------------------------------------------------------------- /Nginx/img/04-Keepalived.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Nginx/img/04-Keepalived.png -------------------------------------------------------------------------------- /Nginx/img/1576745376238.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Nginx/img/1576745376238.png -------------------------------------------------------------------------------- /Nginx/img/1576748336954.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Nginx/img/1576748336954.png -------------------------------------------------------------------------------- /Nginx/img/1576752632200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Nginx/img/1576752632200.png -------------------------------------------------------------------------------- /Nginx/img/1576752878597.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Nginx/img/1576752878597.png -------------------------------------------------------------------------------- /Nginx/img/1576752917726.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Nginx/img/1576752917726.png -------------------------------------------------------------------------------- /Nginx/img/1576754226844.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Nginx/img/1576754226844.png -------------------------------------------------------------------------------- /Nginx/img/1576754600807.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Nginx/img/1576754600807.png -------------------------------------------------------------------------------- /Nginx/img/1576757003894.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Nginx/img/1576757003894.png -------------------------------------------------------------------------------- /Nginx/img/1576757899719.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Nginx/img/1576757899719.png -------------------------------------------------------------------------------- /Nginx/img/1576757921014.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Nginx/img/1576757921014.png -------------------------------------------------------------------------------- /Nginx/img/1576757952498.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Nginx/img/1576757952498.png -------------------------------------------------------------------------------- /Nginx/img/1576822681380.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Nginx/img/1576822681380.png -------------------------------------------------------------------------------- /Nginx/img/1576822924112.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Nginx/img/1576822924112.png -------------------------------------------------------------------------------- /Nginx/img/1576836138597.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Nginx/img/1576836138597.png -------------------------------------------------------------------------------- /Nginx/img/1576837944705.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Nginx/img/1576837944705.png -------------------------------------------------------------------------------- /Nginx/img/1576839162422.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Nginx/img/1576839162422.png -------------------------------------------------------------------------------- /Nginx/img/1576843354486.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Nginx/img/1576843354486.png -------------------------------------------------------------------------------- /Nginx/img/1576843508915.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Nginx/img/1576843508915.png -------------------------------------------------------------------------------- /Nginx/img/1576843707409.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Nginx/img/1576843707409.png -------------------------------------------------------------------------------- /Nginx/img/1576843745271.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Nginx/img/1576843745271.png -------------------------------------------------------------------------------- /Nginx/img/1577327856588.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Nginx/img/1577327856588.png -------------------------------------------------------------------------------- /Nginx/img/1577340754696.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Nginx/img/1577340754696.png -------------------------------------------------------------------------------- /Nginx/img/1577341058999.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Nginx/img/1577341058999.png -------------------------------------------------------------------------------- /Nginx/img/1577343575469.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Nginx/img/1577343575469.png -------------------------------------------------------------------------------- /Nginx/pictures/7-负载均衡实现/1-HTTP重定向负载均衡.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Nginx/pictures/7-负载均衡实现/1-HTTP重定向负载均衡.jpg -------------------------------------------------------------------------------- /Nginx/pictures/7-负载均衡实现/2-DNS域名解析负载均衡.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Nginx/pictures/7-负载均衡实现/2-DNS域名解析负载均衡.jpg -------------------------------------------------------------------------------- /Nginx/pictures/7-负载均衡实现/3-反向代理负载均衡.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Nginx/pictures/7-负载均衡实现/3-反向代理负载均衡.jpg -------------------------------------------------------------------------------- /Nginx/pictures/7-负载均衡实现/4-IP负载均衡.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Nginx/pictures/7-负载均衡实现/4-IP负载均衡.jpg -------------------------------------------------------------------------------- /Nginx/pictures/7-负载均衡实现/5-数据链路层负载均衡.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Nginx/pictures/7-负载均衡实现/5-数据链路层负载均衡.jpg -------------------------------------------------------------------------------- /Nginx/pictures/LVS.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Nginx/pictures/LVS.jpg -------------------------------------------------------------------------------- /Nodejs/0-Nodejs以及npm安装.md: -------------------------------------------------------------------------------- 1 | 1、下载安装nodejs以及npm 2 | 3 | ``` 4 | curl --silent --location https://rpm.nodesource.com/setup_10.x | bash - 5 | yum install -y nodejs 6 | npm install -g cnpm --registry=https://registry.npm.taobao.org 7 | npm install 8 | npm run build 9 | npm -v 10 | ``` -------------------------------------------------------------------------------- /Protobuf/ProtobufTutorial/addressbook.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto2"; 2 | 3 | package tutorial; 4 | 5 | option java_package = "com.example.tutorial"; 6 | option java_outer_classname = "AddressBookProtos"; 7 | 8 | message Person { 9 | required string name = 1; 10 | required int32 id = 2; 11 | optional string email = 3; 12 | 13 | enum PhoneType { 14 | MOBILE = 0; 15 | HOME = 1; 16 | WORK = 2; 17 | } 18 | 19 | message PhoneNumber { 20 | required string number = 1; 21 | optional PhoneType type = 2 [default = HOME]; 22 | } 23 | 24 | repeated PhoneNumber phones = 4; 25 | } 26 | 27 | message AddressBook { 28 | repeated Person people = 1; 29 | } -------------------------------------------------------------------------------- /Python3/img/1-windows版本安装包下载.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Python3/img/1-windows版本安装包下载.png -------------------------------------------------------------------------------- /Python3/img/2-源码安装Python.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Python3/img/2-源码安装Python.png -------------------------------------------------------------------------------- /Python3/img/3-MacOS安装Python.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Python3/img/3-MacOS安装Python.png -------------------------------------------------------------------------------- /Python3/img/cpp_break_statement.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Python3/img/cpp_break_statement.jpg -------------------------------------------------------------------------------- /Python3/img/decision_making.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Python3/img/decision_making.jpg -------------------------------------------------------------------------------- /Python3/img/python_for_loop.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Python3/img/python_for_loop.jpg -------------------------------------------------------------------------------- /Python3/img/python_while_loop.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Python3/img/python_while_loop.jpg -------------------------------------------------------------------------------- /Redis/1-Redis内存淘汰策略.md: -------------------------------------------------------------------------------- 1 | # Redis内存淘汰策略 2 | 3 | 4 | ## Redis淘汰策略 5 | 6 | 当达到最大内存```maxmemory```限制时,使用```maxmemory-policy```配置指令配置Redis的确切行为。 7 | 配置方式: maxmemory-policy options,默认为 8 | 9 | - **noeviction**: 不会移除任何key,在写的时候直接返回error 10 | - **volatile-lru** : 使用LRU算法清除过期的key 11 | - **allkeys-lru** : 使用LRU算法清除key 12 | - **volatile-lfu** : 使用LFU算法清除过期的key 13 | - **allkeys-lfu** : 使用LFU算法清除key 14 | - **volatile-random** : 在过期的key中随机移除一个key 15 | - **allkeys-random** : 在所有key中随机移除一个key 16 | - **volatile-ttl** : 移除具有具有最近过期时间的key 17 | 18 | 19 | - [Redis-缓存](https://redis.io/topics/lru-cache) -------------------------------------------------------------------------------- /Redis/10-Redis面试热点问题.md: -------------------------------------------------------------------------------- 1 | # Redis面试热点问题. 2 | 3 | - 1[Redis架构之防雪崩设计](https://mp.weixin.qq.com/s/TBCEwLVAXdsTszRVpXhVug) 4 | 5 | - 2.[Redis的内存优化](https://cachecloud.github.io/2017/02/16/Redis%E5%86%85%E5%AD%98%E4%BC%98%E5%8C%96/) 6 | 7 | - 3.[Redis的Linux系统优化](https://cachecloud.github.io/2017/02/16/Redis%E7%9A%84Linux%E7%B3%BB%E7%BB%9F%E4%BC%98%E5%8C%96/) 8 | 9 | - 4.[Redis客户端常见异常分析](https://cachecloud.github.io/2017/02/20/Redis%E7%83%AD%E7%82%B9key%E5%AF%BB%E6%89%BE%E4%B8%8E%E4%BC%98%E5%8C%96/) 10 | 11 | - 5.[Redis热点key寻找与优化](https://cachecloud.github.io/2017/02/20/Redis%E7%83%AD%E7%82%B9key%E5%AF%BB%E6%89%BE%E4%B8%8E%E4%BC%98%E5%8C%96/) 12 | 13 | - 6.[Redis无限全量复制问题分析与优化](https://cachecloud.github.io/2016/11/24/%E5%85%A8%E9%87%8F%E5%A4%8D%E5%88%B6%E9%97%AE%E9%A2%98/) 14 | -------------------------------------------------------------------------------- /Redis/2-Redis数据类型以及数据结构实现.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | #### 参考资料 4 | 5 | - [十二张图详解Redis的数据结构和对象系统](https://mp.weixin.qq.com/s?src=11×tamp=1561194655&ver=1684&signature=tiyZj*L1R1yHP3yQUcw6eJPJ1PWTRToOcqhrPvvKC7COAvC31Pp8BgTHiAjeVW7qWwQw9n7yzzEIqaSTH2Pv2NsazHjH7vvdfG6gUAiw0i2Lu7jn2C9UP9eAbmZo3iLV&new=1) -------------------------------------------------------------------------------- /Redis/3-Redis缓存.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Redis/3-Redis缓存.md -------------------------------------------------------------------------------- /Redis/5-Redis-Cluster集群.md: -------------------------------------------------------------------------------- 1 | # Redis集群 2 | 3 | ## Redis集群方案有哪些 4 | 5 | 有两种: **codis架构**、**官方的redis cluster**。 6 | 7 | ## codis集群架构 8 | 9 | codis是豌豆荚基于go编写的redis。 10 | 11 | ## 官方Redis Cluster集群方案 12 | 13 | ![](pictures/2.jpg) 14 | 15 | 特点: 16 | 17 | - Redis官网推出的,先行扩展可以达到1000个节点 18 | - 没有中心架构 19 | - 一致性哈希思想 20 | - 客户端直连redis 21 | 22 | 23 | 24 | 25 | 26 | - [redis缓存-单机、集群](https://www.cnblogs.com/fengli9998/p/6755591.html) -------------------------------------------------------------------------------- /Redis/6-Redis分布式锁.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Redis/6-Redis分布式锁.md -------------------------------------------------------------------------------- /Redis/7-Redis持久化.md: -------------------------------------------------------------------------------- 1 | # Redis持久化 2 | 3 | Redis支持两种数据持久化方式: **RDB**、**AOF**。 4 | 5 | ## RDB持久化 6 | 7 | >根据配置的规则定时将内存中的数据持久化到硬盘上 8 | 9 | 将redis在内存中的数据记录定时dump到磁盘上的RDB持久化。 10 | 11 | 在指定的时间间格里将内存中的数据集快照写入磁盘,实际上是fork一个子进程,先将数据写入临时文件,写入成功后,再替换之前的文件,二进制压缩。 12 | 13 | 14 | 15 | ## AOF持久化 16 | 17 | >每次执行写命令后将命令记录下来 18 | 19 | AOF是将redis的操作日志以追加的方式写入文件。 20 | 21 | 和mysql类似,用日志的形式记录服务器的每一个写、删除操作;以文本的方式记录;通过查看该文件可以查看到详细的操作细节。 22 | 23 | -------------------------------------------------------------------------------- /Redis/8-Redis应用场景分析.md: -------------------------------------------------------------------------------- 1 | # Redis应用场景 2 | 3 | - 计数器 4 | - 排行榜 5 | - session 6 | - 发布订阅 7 | - 消息队列 8 | 9 | ## 实际场景 10 | 11 | ### 页面缓存 12 | 13 | 如果使用的是服务端内容渲染,可以使用redis将经常被请求的内容缓存起来,降低页面请求渲染的延迟 14 | 15 | ### 计数器/排行榜 16 | 17 | Redis是一个运行在内存中的C程序。 18 | Redis可以实现快速计数、查询缓存的功能,同时数据可以异步落地到其他数据源。 19 | 20 | - 访问计数,用户每访问一次,计数就增加1 21 | - 排行榜: 可以按时间、按数量、按集赞数进行排行 22 | 23 | ### session 24 | 用户已经登陆的信息存放在redis中,每次用户更新或查询耕录信息可以直接从redis中获取。 25 | 26 | ### 消息队列 27 | 28 | 利用list数据类型可以构建一个简单高效的队列 29 | 30 | ### 发布订阅 31 | 32 | pub/sub 是Redis内置的发布订阅功能,可以创建多人在线聊天系统、通知触发等 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | #### 参考资料 54 | 55 | - [redis缓存-单机、集群](https://www.cnblogs.com/fengli9998/p/6755591.html) -------------------------------------------------------------------------------- /Redis/999-Redis运维系统命令.md: -------------------------------------------------------------------------------- 1 | # Redis运维系统命令 2 | 3 | ## 下载解压 4 | ``` 5 | wget http://download.redis.io/releases/redis-5.0.5.tar.gz 6 | tar xzf redis-5.0.5.tar.gz 7 | cd redis-5.0.5 8 | make 9 | ``` 10 | 11 | ```shell 12 | tar -zxvf redis-5.0.5.tar.gz 13 | ``` 14 | 15 | 进入根目录查看: 16 | 17 | ```shell 18 | 00-RELEASENOTES CONTRIBUTING deps Makefile README.md runtest runtest-moduleapi sentinel.conf tests 19 | BUGS COPYING INSTALL MANIFESTO redis.conf runtest-cluster runtest-sentinel src utils 20 | ``` 21 | 22 | -------------------------------------------------------------------------------- /Redis/pictures/1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Redis/pictures/1.jpg -------------------------------------------------------------------------------- /Redis/pictures/2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Redis/pictures/2.jpg -------------------------------------------------------------------------------- /RocketMQ/1-RocketMQ技术设计架构.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/RocketMQ/1-RocketMQ技术设计架构.png -------------------------------------------------------------------------------- /RocketMQ/1-RocketMQ技术设计架构PPT.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/RocketMQ/1-RocketMQ技术设计架构PPT.png -------------------------------------------------------------------------------- /RocketMQ/2-RocketMQ优势.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/RocketMQ/2-RocketMQ优势.png -------------------------------------------------------------------------------- /RocketMQ/3-生产者Broker消费者关系图.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/RocketMQ/3-生产者Broker消费者关系图.png -------------------------------------------------------------------------------- /RocketMQ/4-BrokerServer模块.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/RocketMQ/4-BrokerServer模块.png -------------------------------------------------------------------------------- /RocketMQ/5-RocketMQ架构部署.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/RocketMQ/5-RocketMQ架构部署.png -------------------------------------------------------------------------------- /RocketMQ/6-Broker-Topic-Queue关系.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/RocketMQ/6-Broker-Topic-Queue关系.png -------------------------------------------------------------------------------- /RocketMQ/99999-附加资料.md: -------------------------------------------------------------------------------- 1 | # 附加资料 2 | 3 | - [去哪儿消息队列的研制](https://www.infoq.cn/article/b4VPvP3m8DA-PM7ZqMGZ) 4 | - [源码](https://mp.weixin.qq.com/s?__biz=MzIxODM2NTQ3OQ==&mid=2247484302&idx=1&sn=6e0a635ef969595941481795f7a55c12&chksm=97eae8c6a09d61d0a29f8d831053d9ef8009efaa52f18ae17359bdf7a04d258990ff551f1421&scene=27#wechat_redirect) 5 | -------------------------------------------------------------------------------- /RocketMQ/blog/1-download1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/RocketMQ/blog/1-download1.png -------------------------------------------------------------------------------- /RocketMQ/blog/1-download2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/RocketMQ/blog/1-download2.png -------------------------------------------------------------------------------- /RocketMQ/blog/1-download3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/RocketMQ/blog/1-download3.png -------------------------------------------------------------------------------- /RocketMQ/blog/1-download4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/RocketMQ/blog/1-download4.png -------------------------------------------------------------------------------- /RocketMQ/blog/1-download5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/RocketMQ/blog/1-download5.png -------------------------------------------------------------------------------- /RocketMQ/pictures/0-console控制台-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/RocketMQ/pictures/0-console控制台-1.png -------------------------------------------------------------------------------- /RocketMQ/pictures/1-console控制台-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/RocketMQ/pictures/1-console控制台-1.png -------------------------------------------------------------------------------- /RocketMQ/pictures/1-console控制台-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/RocketMQ/pictures/1-console控制台-2.png -------------------------------------------------------------------------------- /RocketMQ/pictures/1-console控制台-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/RocketMQ/pictures/1-console控制台-3.png -------------------------------------------------------------------------------- /Spring/0-Spring概览相关重要类.md: -------------------------------------------------------------------------------- 1 | 2 | - BeanFactory : Spring框架的核心,实现了许多核心功能 3 | - ApplicationContext 是Context模块的核心接口 4 | -------------------------------------------------------------------------------- /Spring/1-IOC相关.md: -------------------------------------------------------------------------------- 1 | # IOC相关 2 | 3 | - BeanDefinition 4 | - DefaultResourceLoader 5 | - XmlBeanDefinitionReader 6 | - BeanDefinitionRegistry 7 | - BeanFactory 8 | - DefaultListableBeanFactory 9 | - AutowireCapableBeanFactory 10 | - AbstractAutowireCapableBeanFactory 11 | - SingletonBeanRegistry 12 | - DefaultSingletonBeanRegistry 13 | 14 | ![](pictures/Spring-bean注册流程.png) 15 | 16 | -------------------------------------------------------------------------------- /Spring/2-SpringMVC原理解析.md: -------------------------------------------------------------------------------- 1 | # SpringMVC原理解析 2 | 3 | - 传统MVC流程(servlet、jsp) 4 | - SpringMVC具体执行流程 5 | - HandlerMapping详解 6 | - HandlerAdaptor详解 7 | - ViewResolver与View详解 8 | - HandlerExceptionSolver详解 9 | - HandlerInterceptor详解 10 | 11 | ![](pictures/SpringMVC处理流程.png) 12 | 13 | -------------------------------------------------------------------------------- /Spring/3-SpringAOP.md: -------------------------------------------------------------------------------- 1 | # Spring AOP 详解 2 | 3 | AOP: 面向切面编程;实际开发中,除了主业务流程之外,还会产生横切方向的需求,比如一个电商流程中,每个主业务流程中都可能会产生横切方面的需求:包括接口耗时、事务处理、多数据源的切换等。 4 | 5 | ![](pictures/SpringAOP-1.png) 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Spring/4-过滤器.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Spring/4-过滤器.md -------------------------------------------------------------------------------- /Spring/5-拦截器.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Spring/5-拦截器.md -------------------------------------------------------------------------------- /Spring/7-XML自定义模式扩展.md: -------------------------------------------------------------------------------- 1 | # XML自定义模式扩展 2 | 3 | 4 | ```org.springframework.beans.factory.config.FieldRetrievingFactoryBean``` 5 | 6 | #### 参考资料 7 | 8 | - [Spring官网文档](https://docs.spring.io/spring/docs/4.2.x/spring-framework-reference/html/xsd-configuration.html) 9 | - [Spring Schemal](http://www.springframework.org/schema/) -------------------------------------------------------------------------------- /Spring/pictures/Spring-bean注册流程.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Spring/pictures/Spring-bean注册流程.png -------------------------------------------------------------------------------- /Spring/pictures/Spring-tx.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Spring/pictures/Spring-tx.png -------------------------------------------------------------------------------- /Spring/pictures/SpringAOP-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Spring/pictures/SpringAOP-1.jpg -------------------------------------------------------------------------------- /Spring/pictures/SpringAOP-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Spring/pictures/SpringAOP-1.png -------------------------------------------------------------------------------- /Spring/pictures/SpringMVC处理流程.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Spring/pictures/SpringMVC处理流程.png -------------------------------------------------------------------------------- /Spring/pictures/Spring事务传播性---PROPAGATION_REQUIRED.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Spring/pictures/Spring事务传播性---PROPAGATION_REQUIRED.png -------------------------------------------------------------------------------- /Spring/pictures/Spring事务传播性---PROPAGATION_REQUIRES_NEW.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Spring/pictures/Spring事务传播性---PROPAGATION_REQUIRES_NEW.png -------------------------------------------------------------------------------- /Spring/pictures/Spring声明式事务代理调用方法的概念视图.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Spring/pictures/Spring声明式事务代理调用方法的概念视图.png -------------------------------------------------------------------------------- /SpringBoot/pictures/1-starter/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/SpringBoot/pictures/1-starter/1.png -------------------------------------------------------------------------------- /SpringCloud/0-SpringCloud资料链接.md: -------------------------------------------------------------------------------- 1 | # SpringCloud资料链接 2 | 3 | - https://spring.io/projects/spring-cloud 4 | - https://www.javainuse.com/spring/springcloud 5 | - https://www.baeldung.com/spring-cloud-tutorial 6 | - https://www.fangzhipeng.com/spring-cloud.html 7 | - https://cloud.spring.io/spring-cloud-static/Greenwich.RELEASE/single/spring-cloud.html 8 | -------------------------------------------------------------------------------- /SpringCloud/8-SpringCloud-Config高可用架构.md: -------------------------------------------------------------------------------- 1 | # SpringCloud-Config高可用架构 2 | 3 | 我们利用 **eureka服务注册中心**、**ribbon负载均衡**、**zuul服务路由、过滤**、**springcloud config** 组件来实现一个高可用的Spring Config架构: 4 | 5 | ![](pictures/config-ha/1-高可用的SpringCloud-config架构.png) 6 | 7 | - 建立远程git仓库 8 | - 搭建eureka服务发现注册中心 9 | - config-server集群注册到eureka中,config-server连接到远程git仓库 10 | - 搭建config-client集群(即业务服务) 11 | - config-client 通过 ribbon负载均衡调用 config-server 12 | - 搭建zuul路由转发服务,映射到config-client的配置 13 | - 用户请求,通过zuul路由转发 14 | 15 | 16 | **总览** 17 | 18 | 用户发起请求,通过zuul转发到config-client的某一个实例,config-client通过负载均衡调用config-server从远程git获取配置信息。 -------------------------------------------------------------------------------- /SpringCloud/999-附加参考资料.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | - [Spring-cloud-netflix](https://github.com/spring-cloud/spring-cloud-netflix) 4 | - [Spring Cloud Alibaba](https://www.cnblogs.com/forezp/p/10136433.html) 5 | - [springboot启动原理](https://www.cnblogs.com/shamo89/p/8184960.html) -------------------------------------------------------------------------------- /SpringCloud/pictures/config-ha/1-高可用的SpringCloud-config架构.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/SpringCloud/pictures/config-ha/1-高可用的SpringCloud-config架构.png -------------------------------------------------------------------------------- /SpringCloud/pictures/eureka/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/SpringCloud/pictures/eureka/1.png -------------------------------------------------------------------------------- /SpringCloud/pictures/eureka/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/SpringCloud/pictures/eureka/2.png -------------------------------------------------------------------------------- /SpringCloud/pictures/eureka/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/SpringCloud/pictures/eureka/3.png -------------------------------------------------------------------------------- /SpringCloud/pictures/eureka/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/SpringCloud/pictures/eureka/4.png -------------------------------------------------------------------------------- /SpringCloud/pictures/eureka/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/SpringCloud/pictures/eureka/5.png -------------------------------------------------------------------------------- /SpringCloud/pictures/hystrix/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/SpringCloud/pictures/hystrix/1.png -------------------------------------------------------------------------------- /SpringCloud/pictures/hystrix/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/SpringCloud/pictures/hystrix/2.png -------------------------------------------------------------------------------- /SpringCloud/pictures/hystrixboard/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/SpringCloud/pictures/hystrixboard/1.png -------------------------------------------------------------------------------- /SpringCloud/pictures/hystrixboard/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/SpringCloud/pictures/hystrixboard/2.png -------------------------------------------------------------------------------- /SpringCloud/pictures/ribbon/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/SpringCloud/pictures/ribbon/1.png -------------------------------------------------------------------------------- /SpringCloud/pictures/ribbon/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/SpringCloud/pictures/ribbon/2.png -------------------------------------------------------------------------------- /SpringCloud/pictures/ribbon/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/SpringCloud/pictures/ribbon/3.png -------------------------------------------------------------------------------- /SpringCloud/pictures/zuul/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/SpringCloud/pictures/zuul/1.png -------------------------------------------------------------------------------- /SpringCloud/pictures/zuul/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/SpringCloud/pictures/zuul/2.png -------------------------------------------------------------------------------- /XML/2-dom4j解析XML.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/XML/2-dom4j解析XML.md -------------------------------------------------------------------------------- /XML/3-XPath解析XML.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/XML/3-XPath解析XML.md -------------------------------------------------------------------------------- /XML/img/1576049327234.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/XML/img/1576049327234.png -------------------------------------------------------------------------------- /Zokeeper/Zookeeper分布式过程协同技术详解Note/1-一般性主从架构.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Zokeeper/Zookeeper分布式过程协同技术详解Note/1-一般性主从架构.jpg -------------------------------------------------------------------------------- /Zokeeper/Zookeeper分布式过程协同技术详解Note/2-CMW.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Zokeeper/Zookeeper分布式过程协同技术详解Note/2-CMW.jpg -------------------------------------------------------------------------------- /Zokeeper/Zookeeper分布式过程协同技术详解Note/2-zkservice.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Zokeeper/Zookeeper分布式过程协同技术详解Note/2-zkservice.jpg -------------------------------------------------------------------------------- /Zokeeper/Zookeeper分布式过程协同技术详解Note/3-单机集群配置一.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Zokeeper/Zookeeper分布式过程协同技术详解Note/3-单机集群配置一.png -------------------------------------------------------------------------------- /Zokeeper/Zookeeper分布式过程协同技术详解Note/3-单机集群配置三.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Zokeeper/Zookeeper分布式过程协同技术详解Note/3-单机集群配置三.png -------------------------------------------------------------------------------- /Zokeeper/Zookeeper分布式过程协同技术详解Note/3-单机集群配置二.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Zokeeper/Zookeeper分布式过程协同技术详解Note/3-单机集群配置二.png -------------------------------------------------------------------------------- /Zokeeper/Zookeeper分布式过程协同技术详解Note/3-单机集群配置五.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Zokeeper/Zookeeper分布式过程协同技术详解Note/3-单机集群配置五.png -------------------------------------------------------------------------------- /Zokeeper/Zookeeper分布式过程协同技术详解Note/3-单机集群配置四.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Zokeeper/Zookeeper分布式过程协同技术详解Note/3-单机集群配置四.png -------------------------------------------------------------------------------- /Zokeeper/Zookeeper分布式过程协同技术详解Note/pictures/4-会话在服务器之间转移.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Zokeeper/Zookeeper分布式过程协同技术详解Note/pictures/4-会话在服务器之间转移.png -------------------------------------------------------------------------------- /Zokeeper/Zookeeper分布式过程协同技术详解Note/pictures/chapter9-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Zokeeper/Zookeeper分布式过程协同技术详解Note/pictures/chapter9-1.jpg -------------------------------------------------------------------------------- /Zokeeper/Zookeeper分布式过程协同技术详解Note/pictures/chapter9-2Zk选举过程.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Zokeeper/Zookeeper分布式过程协同技术详解Note/pictures/chapter9-2Zk选举过程.jpg -------------------------------------------------------------------------------- /Zokeeper/Zookeeper分布式过程协同技术详解Note/pictures/chapter9-2ZooKeeper内部原理三--ZooKeeper选举过程(延迟选举时长).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Zokeeper/Zookeeper分布式过程协同技术详解Note/pictures/chapter9-2ZooKeeper内部原理三--ZooKeeper选举过程(延迟选举时长).jpg -------------------------------------------------------------------------------- /Zokeeper/Zookeeper分布式过程协同技术详解Note/pictures/chapter9-2ZooKeeper内部原理三--ZooKeeper选举过程(异常情况).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Zokeeper/Zookeeper分布式过程协同技术详解Note/pictures/chapter9-2ZooKeeper内部原理三--ZooKeeper选举过程(异常情况).jpg -------------------------------------------------------------------------------- /Zokeeper/Zookeeper分布式过程协同技术详解Note/pictures/chapter9-2ZooKeeper内部原理三--ZooKeeper选举过程(正常).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Zokeeper/Zookeeper分布式过程协同技术详解Note/pictures/chapter9-2ZooKeeper内部原理三--ZooKeeper选举过程(正常).jpg -------------------------------------------------------------------------------- /Zokeeper/Zookeeper分布式过程协同技术详解Note/pictures/chapter9-2服务器选举状态.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/Zokeeper/Zookeeper分布式过程协同技术详解Note/pictures/chapter9-2服务器选举状态.jpg -------------------------------------------------------------------------------- /dlzd-qrcode.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/dlzd-qrcode.gif -------------------------------------------------------------------------------- /dlzdgzh.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/dlzdgzh.jpg -------------------------------------------------------------------------------- /javassist指南/0-javassist编程指南概览.md: -------------------------------------------------------------------------------- 1 | # javassist编程指南(主译) 2 | 3 | ## javassist是什么? 4 | 5 | - Javassist(Java 编程辅助)使得Java字节码操作更简单。 6 | - Javassist可用于编辑字节码的类库。 7 | - 允许Java程序可以在运行时定义一个新的class、在JVM加载时修改class文件。 8 | 9 | 不像其它的字节码编辑器,javassist提供了2各层次的API:源码级别、字节码级别。如果用户使用了源码级别的API,就可以在不了解Java字节码规范的情况下编辑class文件。整个API是基于Java语言词汇设计的。你甚至可以以源码文本形式指定插入字节码,javassist编译它是非常快的。另一方面。字节码层次的API允许用户像其它编辑器一样直接编辑class文件。 10 | 11 | ## 引入javassist的Maven依赖 12 | 13 | ```xml 14 | 15 | org.javassist 16 | javassist 17 | 3.22.0-GA 18 | 19 | ``` 20 | 21 | ## 使用javassist进行编程 22 | 23 | [javassist官网](http://www.javassist.org/):[官方指南](http://www.javassist.org/tutorial/tutorial.html) 24 | 25 | - 1.[读、写字节码]() 26 | - 2.[ClassPool]() 27 | - 3.[Class loader]() 28 | - 4.[Introspection and customization]() 29 | - 5.[Bytecode level API]() 30 | - 6.[Generics]() 31 | - 7.[Varargs]() 32 | - 8.[J2ME]() 33 | - 9.[Boxing/Unboxing]() 34 | - 10.[Debug]() 35 | 36 | -------------------------------------------------------------------------------- /javassist指南/5-字节码级别API.md: -------------------------------------------------------------------------------- 1 | # 字节码级别API 2 | 3 | -------------------------------------------------------------------------------- /mvn-local-plugin-use/README.md: -------------------------------------------------------------------------------- 1 | 这是如何使用一个自定义插件的示例 -------------------------------------------------------------------------------- /mvn-local-plugin-use/src/main/java/Demo.java: -------------------------------------------------------------------------------- 1 | public class Demo { 2 | public static void main(String[] args){ 3 | System.out.println("使用自定义插件。。。"); 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /mvn-local-plugin-use/target/classes/Demo.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/mvn-local-plugin-use/target/classes/Demo.class -------------------------------------------------------------------------------- /mvn-local-plugin-use/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst: -------------------------------------------------------------------------------- 1 | Demo.class 2 | -------------------------------------------------------------------------------- /mvn-local-plugin-use/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst: -------------------------------------------------------------------------------- 1 | F:\217my_optLogs\001系统相关\系统设计\007\CookBook\mvn-local-plugin-use\src\main\java\Demo.java 2 | -------------------------------------------------------------------------------- /mvn-local-plugin/README.md: -------------------------------------------------------------------------------- 1 | 这是一个自定义插件的示例 -------------------------------------------------------------------------------- /mvn-local-plugin/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 4.0.0 7 | 8 | org.byron4j 9 | 0.0.1-SNAPSHOT 10 | mvn-local-plugin 11 | 12 | maven-plugin 13 | 14 | 15 | 3.0 16 | 17 | 18 | 19 | 20 | 21 | org.apache.maven 22 | maven-plugin-api 23 | ${maven.version} 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /mvn-local-plugin/target/classes/org/byron4j/CountMojo.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/mvn-local-plugin/target/classes/org/byron4j/CountMojo.class -------------------------------------------------------------------------------- /mvn-local-plugin/target/maven-archiver/pom.properties: -------------------------------------------------------------------------------- 1 | #Generated by Maven 2 | #Sun Apr 28 12:43:25 CST 2019 3 | version=0.0.1-SNAPSHOT 4 | groupId=org.byron4j 5 | artifactId=mvn-local-plugin 6 | -------------------------------------------------------------------------------- /mvn-local-plugin/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst: -------------------------------------------------------------------------------- 1 | org\byron4j\CountMojo.class 2 | -------------------------------------------------------------------------------- /mvn-local-plugin/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst: -------------------------------------------------------------------------------- 1 | F:\217my_optLogs\001系统相关\系统设计\007\CookBook\mvn-local-plugin\src\main\java\org\byron4j\CountMojo.java 2 | -------------------------------------------------------------------------------- /mvn-local-plugin/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/mvn-local-plugin/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst -------------------------------------------------------------------------------- /mvn-local-plugin/target/mvn-local-plugin-0.0.1-SNAPSHOT.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/mvn-local-plugin/target/mvn-local-plugin-0.0.1-SNAPSHOT.jar -------------------------------------------------------------------------------- /mybatis-gener2/mybatisGeneral/bin/com/crfchina/bd/mapper/CrfBankcardOptRecordMapper.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/mybatis-gener2/mybatisGeneral/bin/com/crfchina/bd/mapper/CrfBankcardOptRecordMapper.class -------------------------------------------------------------------------------- /mybatis-gener2/mybatisGeneral/bin/com/crfchina/bd/mode/CrfBankcardOptRecord.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/mybatis-gener2/mybatisGeneral/bin/com/crfchina/bd/mode/CrfBankcardOptRecord.class -------------------------------------------------------------------------------- /mybatis-gener2/mybatisGeneral/bin/lcw/dao/AAA.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/mybatis-gener2/mybatisGeneral/bin/lcw/dao/AAA.class -------------------------------------------------------------------------------- /mybatis-gener2/mybatisGeneral/bin/lcw/dao/CrfLoanClaimInfoMapper.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/mybatis-gener2/mybatisGeneral/bin/lcw/dao/CrfLoanClaimInfoMapper.class -------------------------------------------------------------------------------- /mybatis-gener2/mybatisGeneral/bin/lcw/model/CrfLoanClaimInfo.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/mybatis-gener2/mybatisGeneral/bin/lcw/model/CrfLoanClaimInfo.class -------------------------------------------------------------------------------- /mybatis-gener2/mybatisGeneral/generatorConfig.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/mybatis-gener2/mybatisGeneral/generatorConfig.xml -------------------------------------------------------------------------------- /mybatis-gener2/mybatisGeneral/mybatis-generator-core-1.3.2.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/mybatis-gener2/mybatisGeneral/mybatis-generator-core-1.3.2.jar -------------------------------------------------------------------------------- /mybatis-gener2/mybatisGeneral/mysql-connector-java-5.1.27.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/mybatis-gener2/mybatisGeneral/mysql-connector-java-5.1.27.jar -------------------------------------------------------------------------------- /mybatis-gener2/mybatisGeneral/sqlite-jdbc-3.14.2.1.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/mybatis-gener2/mybatisGeneral/sqlite-jdbc-3.14.2.1.jar -------------------------------------------------------------------------------- /mybatis-gener2/mybatisGeneral/命令.txt: -------------------------------------------------------------------------------- 1 | java -jar mybatis-generator-core-1.3.2.jar -configfile generatorConfig.xml -overwrite 2 | -------------------------------------------------------------------------------- /mybatis-gener2/生成语句.txt: -------------------------------------------------------------------------------- 1 | java -jar mybatis-generator-core-1.3.2.jar -configfile generatorConfig.xml -overwrite 2 | -------------------------------------------------------------------------------- /org/byron4j/cookbook/javaagent/Javassist2ClassPool.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/org/byron4j/cookbook/javaagent/Javassist2ClassPool.class -------------------------------------------------------------------------------- /org/byron4j/cookbook/javaagent/Point.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/org/byron4j/cookbook/javaagent/Point.class -------------------------------------------------------------------------------- /org/byron4j/cookbook/javaagent/Rectangle.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/org/byron4j/cookbook/javaagent/Rectangle.class -------------------------------------------------------------------------------- /pictures/gtcom2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/pictures/gtcom2.jpg -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/CookbookApplication.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook; 2 | 3 | import com.spring4all.swagger.EnableSwagger2Doc; 4 | import org.springframework.boot.SpringApplication; 5 | import org.springframework.boot.autoconfigure.SpringBootApplication; 6 | 7 | 8 | @SpringBootApplication 9 | //@ComponentScan("org.byron4j.cookbook") 10 | @EnableSwagger2Doc 11 | public class CookbookApplication { 12 | 13 | public static void main(String[] args) { 14 | SpringApplication.run(CookbookApplication.class, args); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/algrithms/package-info.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.algrithms; 2 | 3 | /* 4 | 算法 5 | */ -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/dbconnpool/c3p0/Ch01.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.dbconnpool.c3p0; 2 | 3 | import com.mchange.v2.c3p0.ComboPooledDataSource; 4 | 5 | import java.beans.PropertyVetoException; 6 | import java.sql.Connection; 7 | import java.sql.ResultSet; 8 | import java.sql.Statement; 9 | 10 | /** 11 | * @program: cookbook 12 | * @author: Byron 13 | * @create: 2019/07/19 14 | */ 15 | public class Ch01 { 16 | public static void main(String[] args) { 17 | ComboPooledDataSource dcp = new ComboPooledDataSource(); 18 | try { 19 | dcp.setDriverClass("com.mysql.jdbc.Driver"); 20 | dcp.setJdbcUrl("jdbc:mysql://localhost/mydb"); 21 | dcp.setUser("root"); 22 | dcp.setPassword("root"); 23 | Connection connection = dcp.getConnection(); 24 | Statement statement = connection.createStatement(); 25 | String sql = "select * from student"; 26 | ResultSet resultSet = statement.executeQuery(sql); 27 | while(resultSet.next()){ 28 | System.out.println(resultSet.getString(1)); 29 | } 30 | } catch (Exception e) { 31 | e.printStackTrace(); 32 | } 33 | 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/dbconnpool/c3p0/Ch02.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.dbconnpool.c3p0; 2 | 3 | import com.mchange.v2.c3p0.ComboPooledDataSource; 4 | 5 | import java.sql.Connection; 6 | import java.sql.ResultSet; 7 | import java.sql.Statement; 8 | 9 | /** 10 | * @program: cookbook 11 | * @author: Byron 12 | * @create: 2019/07/19 13 | */ 14 | public class Ch02 { 15 | public static void main(String[] args) { 16 | ComboPooledDataSource dcp = new ComboPooledDataSource(); 17 | try { 18 | /*dcp.setDriverClass("com.mysql.jdbc.Driver"); 19 | dcp.setJdbcUrl("jdbc:mysql://localhost/mydb"); 20 | dcp.setUser("root"); 21 | dcp.setPassword("root");*/ 22 | Connection connection = dcp.getConnection(); 23 | Statement statement = connection.createStatement(); 24 | String sql = "select * from student"; 25 | ResultSet resultSet = statement.executeQuery(sql); 26 | while(resultSet.next()){ 27 | System.out.println(resultSet.getString(1)); 28 | } 29 | } catch (Exception e) { 30 | e.printStackTrace(); 31 | } 32 | 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/dbconnpool/package-info.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.dbconnpool; 2 | 3 | /* 4 | 数据库连接池的应用 5 | */ -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/designpattern/adapter/AbstractAccount.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.designpattern.adapter; 2 | 3 | public class AbstractAccount implements Account { 4 | /** 5 | * 账户余额 6 | */ 7 | private double balance; 8 | /** 9 | * 是否可以透支 10 | */ 11 | private boolean isOverdraftAvailable; 12 | 13 | public AbstractAccount(final double size) { 14 | this.balance = size; 15 | } 16 | 17 | @Override 18 | public double getBalance() { 19 | return balance; 20 | } 21 | 22 | @Override 23 | public boolean isOverdraftAvailable() { 24 | return isOverdraftAvailable; 25 | } 26 | 27 | public void setOverdraftAvailable(boolean isOverdraftAvailable) { 28 | this.isOverdraftAvailable = isOverdraftAvailable; 29 | } 30 | 31 | @Override 32 | public String toString() { 33 | return getClass().getSimpleName() + " Balance=" + getBalance() 34 | + " Overdraft:" + isOverdraftAvailable(); 35 | } 36 | 37 | @Override 38 | public void credit(final double credit) { 39 | balance += credit; 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/designpattern/adapter/Account.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.designpattern.adapter; 2 | 3 | /** 4 | * 账户接口类型 5 | */ 6 | public interface Account { 7 | /** 8 | * 获取账户余额 9 | * @return 10 | */ 11 | public double getBalance(); 12 | 13 | /** 14 | * 是否可以透支 15 | * @return 16 | */ 17 | public boolean isOverdraftAvailable(); 18 | 19 | /** 20 | * 贷款; 贷款后账户余额增多 21 | * @param credit 22 | */ 23 | public void credit(final double credit); 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/designpattern/adapter/OffshoreAccount.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.designpattern.adapter; 2 | 3 | 4 | /** 5 | * 离岸账户 6 | */ 7 | public class OffshoreAccount { 8 | 9 | private double balance; 10 | 11 | /**税率*/ 12 | private static final double TAX_RATE = 0.03; 13 | 14 | public OffshoreAccount(final double balance) { 15 | this.balance = balance; 16 | } 17 | 18 | public double getTaxRate() { 19 | return TAX_RATE; 20 | } 21 | 22 | public double getOffshoreBalance() { 23 | return balance; 24 | } 25 | 26 | public void debit(final double debit) { 27 | if (balance >= debit) { 28 | balance -= debit; 29 | } 30 | } 31 | 32 | public void credit(final double credit) { 33 | balance += balance; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/designpattern/adapter/PlatinumAccount.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.designpattern.adapter; 2 | 3 | /** 4 | * 白金帐户: 可以透支 5 | */ 6 | public class PlatinumAccount extends AbstractAccount { 7 | 8 | public PlatinumAccount(final double balance) { 9 | super(balance); 10 | // 可以透支 11 | setOverdraftAvailable(true); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/designpattern/adapter/StandardAccount.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.designpattern.adapter; 2 | 3 | /** 4 | * 普通账户: 不能透支 5 | */ 6 | public class StandardAccount extends AbstractAccount { 7 | 8 | public StandardAccount(final double balance) { 9 | super(balance); 10 | // 不能透支 11 | setOverdraftAvailable(false); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/designpattern/builder/MealBuilder.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.designpattern.builder; 2 | 3 | /** 4 | * 建造者接口类 5 | */ 6 | public interface MealBuilder { 7 | 8 | void addSandwich(String sandwich); 9 | void addSides(String sides); 10 | void addDrink(String drink); 11 | void addOffer(String offer); 12 | void setPrice(double price); 13 | Meal getMeal(); 14 | } 15 | -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/designpattern/builder/MealDirector.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.designpattern.builder; 2 | 3 | /** 4 | * 角色扮演: 咖啡餐馆 5 | */ 6 | public class MealDirector { 7 | 8 | public static void makeMeal(MealBuilder mealBuilder){ 9 | mealBuilder.addSandwich("Hamburger"); 10 | mealBuilder.addSides("Fries"); 11 | mealBuilder.addDrink("Coke"); 12 | mealBuilder.addOffer("Weekend Bonanza"); 13 | mealBuilder.setPrice(5.99); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/designpattern/builder/SandwichBuilder.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.designpattern.builder; 2 | 3 | /** 4 | * 建造者实现类 5 | */ 6 | public class SandwichBuilder implements MealBuilder{ 7 | 8 | /** 9 | * 依赖组合模式, 该Builder的操作实际是对meal进行的操作 10 | */ 11 | private Meal meal = new Meal(); 12 | 13 | @Override 14 | public void addSandwich(String sandwich) { 15 | meal.setSandwich(sandwich); 16 | } 17 | 18 | @Override 19 | public void addSides(String sides) { 20 | meal.setSideOrder(sides); 21 | } 22 | 23 | @Override 24 | public void addDrink(String drink) { 25 | meal.setDrink(drink); 26 | } 27 | 28 | @Override 29 | public void addOffer(String offer) { 30 | meal.setOffer(offer); 31 | } 32 | 33 | @Override 34 | public void setPrice(double price) { 35 | meal.setPrice(price); 36 | } 37 | 38 | @Override 39 | public Meal getMeal() { 40 | return meal; 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/designpattern/factory/LondonMobileFactory.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.designpattern.factory; 2 | 3 | public class LondonMobileFactory extends MobileFactory { 4 | @Override 5 | public SpiceMobile constructMobile(String model) { 6 | SpiceMobile spiceMobile = null; 7 | 8 | if( "SpiceFire".equalsIgnoreCase(model) ){ 9 | spiceMobile = new SpicePlus(); 10 | spiceMobile.setPrice(300); 11 | }else if("SpiceBolt".equalsIgnoreCase(model)){ 12 | spiceMobile = new SpiceBolt(); 13 | spiceMobile.setPrice(400); 14 | } 15 | 16 | return spiceMobile; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/designpattern/factory/MobileFactory.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.designpattern.factory; 2 | 3 | public abstract class MobileFactory { 4 | public abstract SpiceMobile constructMobile(String model); 5 | 6 | /** 7 | * 这可以算是模板方法了...^_* 8 | * @param model 9 | * @return 10 | */ 11 | public SpiceMobile produceMobile(String model){ 12 | SpiceMobile spiceMobile = constructMobile(model); 13 | spiceMobile.prepare(); 14 | spiceMobile.bundle(); 15 | spiceMobile.label(); 16 | return spiceMobile; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/designpattern/factory/NYMobileFactory.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.designpattern.factory; 2 | 3 | public class NYMobileFactory extends MobileFactory { 4 | @Override 5 | public SpiceMobile constructMobile(String model) { 6 | SpiceMobile spiceMobile = null; 7 | 8 | if( "SpiceFire".equalsIgnoreCase(model) ){ 9 | spiceMobile = new SpicePlus(); 10 | spiceMobile.setPrice(200); 11 | }else if("SpiceMono".equalsIgnoreCase(model)){ 12 | spiceMobile = new SpiceFire(); 13 | spiceMobile.setPrice(200); 14 | } 15 | 16 | return spiceMobile; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/designpattern/factory/SpiceBolt.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.designpattern.factory; 2 | 3 | public class SpiceBolt extends SpiceMobile { 4 | @Override 5 | public void prepare() { 6 | 7 | } 8 | 9 | @Override 10 | public void bundle() { 11 | 12 | } 13 | 14 | @Override 15 | public void label() { 16 | 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/designpattern/factory/SpiceFire.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.designpattern.factory; 2 | 3 | public class SpiceFire extends SpiceMobile { 4 | @Override 5 | public void prepare() { 6 | 7 | } 8 | 9 | @Override 10 | public void bundle() { 11 | 12 | } 13 | 14 | @Override 15 | public void label() { 16 | 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/designpattern/factory/SpiceMobile.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.designpattern.factory; 2 | 3 | import lombok.ToString; 4 | 5 | @ToString 6 | public abstract class SpiceMobile { 7 | public double price; 8 | 9 | public double getPrice() { 10 | return price; 11 | } 12 | 13 | public void setPrice(double price) { 14 | this.price = price; 15 | } 16 | 17 | public abstract void prepare(); 18 | public abstract void bundle(); 19 | public abstract void label(); 20 | 21 | 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/designpattern/factory/SpicePlus.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.designpattern.factory; 2 | 3 | public class SpicePlus extends SpiceMobile { 4 | @Override 5 | public void prepare() { 6 | 7 | } 8 | 9 | @Override 10 | public void bundle() { 11 | 12 | } 13 | 14 | @Override 15 | public void label() { 16 | 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/designpattern/observer/Observer.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.designpattern.observer; 2 | 3 | /** 4 | * 观察者接口类 5 | */ 6 | public interface Observer { 7 | public void update(String editon); 8 | } 9 | -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/designpattern/observer/Subject.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.designpattern.observer; 2 | 3 | /** 4 | * 主体 5 | */ 6 | public interface Subject { 7 | 8 | /** 9 | * 注册主体 10 | * @param observer 11 | */ 12 | public void registerObserver(Observer observer); 13 | 14 | /** 15 | * 移除订阅 16 | * @param observer 17 | */ 18 | public void removeObserver(Observer observer); 19 | 20 | /** 21 | * 移除所有的观察者 22 | */ 23 | public void notifyObservers(); 24 | 25 | /** 26 | * 初始化主体相关信息 27 | */ 28 | public void initObservers(); 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/designpattern/observer/Subscriber1.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.designpattern.observer; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | 7 | /** 8 | * 观察者1 9 | */ 10 | @AllArgsConstructor 11 | @Data 12 | @Builder 13 | public class Subscriber1 implements Observer { 14 | @Override 15 | public void update(String editon) { 16 | System.out.println("Subscriber1收到新的版本通知。" + editon); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/designpattern/observer/Subscriber2.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.designpattern.observer; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | 7 | /** 8 | * 观察者2 9 | */ 10 | @AllArgsConstructor 11 | @Data 12 | @Builder 13 | public class Subscriber2 implements Observer { 14 | @Override 15 | public void update(String editon) { 16 | System.out.println("Subscriber2收到新的版本通知。" + editon); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/designpattern/observer/other/BinObserver.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.designpattern.observer.other; 2 | 3 | class BinObserver extends Observer { 4 | public BinObserver(Subject subject) { 5 | this.subject = subject; 6 | this.subject.add(this); 7 | } 8 | 9 | public void update() { 10 | System.out.print(" " + Integer.toBinaryString(subject.getState())); 11 | } 12 | } -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/designpattern/observer/other/HexObserver.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.designpattern.observer.other; 2 | 3 | class HexObserver extends Observer { 4 | public HexObserver(Subject subject) { 5 | this.subject = subject; 6 | this.subject.add(this); 7 | } 8 | 9 | public void update() { 10 | System.out.print(" " + Integer.toHexString(subject.getState())); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/designpattern/observer/other/Observer.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.designpattern.observer.other; 2 | 3 | abstract class Observer { 4 | protected Subject subject; 5 | public abstract void update(); 6 | } 7 | -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/designpattern/observer/other/ObserverTest.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.designpattern.observer.other; 2 | 3 | 4 | import java.util.Scanner; 5 | 6 | public class ObserverTest { 7 | public static void main( String[] args ) { 8 | Subject sub = new Subject(); 9 | // Client configures the number and type of Observers 10 | new HexObserver(sub); 11 | new OctObserver(sub); 12 | new BinObserver(sub); 13 | Scanner scan = new Scanner(System.in); 14 | for (int i = 0; i < 5; i++) { 15 | System.out.print("\nEnter a number: "); 16 | sub.setState(scan.nextInt()); 17 | } 18 | } 19 | } -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/designpattern/observer/other/OctObserver.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.designpattern.observer.other; 2 | 3 | class OctObserver extends Observer { 4 | public OctObserver(Subject subject) { 5 | this.subject = subject; 6 | this.subject.add( this ); 7 | } 8 | 9 | public void update() { 10 | System.out.print(" " + Integer.toOctalString(subject.getState())); 11 | } 12 | } -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/designpattern/observer/other/Subject.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.designpattern.observer.other; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | class Subject { 7 | private List observers = new ArrayList<>(); 8 | private int state; 9 | 10 | public void add(Observer o) { 11 | observers.add(o); 12 | } 13 | 14 | public int getState() { 15 | return state; 16 | } 17 | 18 | public void setState(int value) { 19 | this.state = value; 20 | execute(); 21 | } 22 | 23 | private void execute() { 24 | for (Observer observer : observers) { 25 | observer.update(); 26 | } 27 | } 28 | } -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/designpattern/observer/package-info.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.designpattern.observer; 2 | /** 3 | 观察者模式 4 | */ -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/designpattern/prototype/Cake.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.designpattern.prototype; 2 | 3 | /** 4 | * 蛋糕的接口类型;可以clone 5 | */ 6 | public interface Cake extends Cloneable{ 7 | /** 8 | * 准备生产蛋糕 9 | * @return 10 | */ 11 | public Cake prepareCake(); 12 | } 13 | -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/designpattern/prototype/CakeStore.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.designpattern.prototype; 2 | 3 | public class CakeStore { 4 | public static void main(String[] args){ 5 | CheeseCake cheeseCake = CheeseCake.builder() 6 | .sugar("100g") 7 | .butter("200g") 8 | .cheese("Acapella") 9 | .build(); 10 | System.out.println("已存在的实例:" + cheeseCake); 11 | 12 | // 利用原型模式自定义多个蛋糕 13 | CheeseCake cheeseCake1 = (CheeseCake) cheeseCake.prepareCake(); 14 | cheeseCake1.setName("Byron"); 15 | System.out.println("原型模式的第一个实例:" + cheeseCake1); 16 | 17 | CheeseCake cheeseCake2 = (CheeseCake) cheeseCake.prepareCake(); 18 | cheeseCake2.setName("Joy"); 19 | System.out.println("原型模式的第二个实例:" + cheeseCake2); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/designpattern/prototype/CheeseCake.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.designpattern.prototype; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Builder; 5 | import lombok.Data; 6 | 7 | @AllArgsConstructor 8 | @Data 9 | @Builder 10 | public class CheeseCake implements Cake{ 11 | 12 | /** 13 | * 糖果 14 | */ 15 | private String sugar; 16 | 17 | /** 18 | * 黄油 19 | */ 20 | private String butter; 21 | 22 | /** 23 | * 芝士 24 | */ 25 | private String cheese; 26 | 27 | /** 28 | * 用户姓名 29 | */ 30 | private String name; 31 | 32 | @Override 33 | public Cake prepareCake() { 34 | Cake cake = null; 35 | 36 | /** 37 | * 克隆存在的实例 38 | */ 39 | try { 40 | cake = (Cake)super.clone(); 41 | } catch (CloneNotSupportedException e) { 42 | e.printStackTrace(); 43 | } 44 | return cake; 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/designpattern/responsibilitychain/AbstractLeaveHandler.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.designpattern.responsibilitychain; 2 | 3 | /** 4 | * @program: cookbook 5 | * @description: 请假责任链抽象处理类 6 | * @author: Byron 7 | * @create: 2019/07/11 09:34 8 | */ 9 | public abstract class AbstractLeaveHandler { 10 | /**直接主管审批处理的请假天数*/ 11 | protected int MIN = 1; 12 | /**部门经理处理的请假天数*/ 13 | protected int MIDDLE = 3; 14 | /**总经理处理的请假天数*/ 15 | protected int MAX = 30; 16 | 17 | /**领导名称*/ 18 | protected String handlerName; 19 | 20 | /**下一个处理节点(即更高级别的领导)*/ 21 | protected AbstractLeaveHandler nextHandler; 22 | 23 | /**设置下一节点*/ 24 | protected void setNextHandler(AbstractLeaveHandler handler){ 25 | this.nextHandler = handler; 26 | } 27 | 28 | /**处理请假的请求,子类实现*/ 29 | abstract void handlerRequest(LeaveRequest request); 30 | 31 | 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/designpattern/responsibilitychain/DeptManagerLeaveHandler.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.designpattern.responsibilitychain; 2 | 3 | /** 4 | * @program: cookbook 5 | * @description: 部门经理处理类 6 | * @author: Byron 7 | * @create: 2019/07/11 09:48 8 | */ 9 | public class DeptManagerLeaveHandler extends AbstractLeaveHandler { 10 | 11 | public DeptManagerLeaveHandler(String name) { 12 | this.handlerName = name; 13 | } 14 | 15 | @Override 16 | protected void handlerRequest(LeaveRequest request) { 17 | if(request.getLeaveDays() <= this.MIDDLE){ 18 | System.out.println("部门经理:" + handlerName + ",已经处理;流程结束。"); 19 | return; 20 | } 21 | 22 | if(null != this.nextHandler){ 23 | this.nextHandler.handlerRequest(request); 24 | }else{ 25 | System.out.println("审批拒绝!"); 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/designpattern/responsibilitychain/DirectLeaderLeaveHandler.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.designpattern.responsibilitychain; 2 | 3 | /** 4 | * @program: cookbook 5 | * @description: 直接主管处理类 6 | * @author: Byron 7 | * @create: 2019/07/11 09:46 8 | */ 9 | public class DirectLeaderLeaveHandler extends AbstractLeaveHandler{ 10 | public DirectLeaderLeaveHandler(String name) { 11 | this.handlerName = name; 12 | } 13 | 14 | @Override 15 | protected void handlerRequest(LeaveRequest request) { 16 | if(request.getLeaveDays() <= this.MIN){ 17 | System.out.println("直接主管:" + handlerName + ",已经处理;流程结束。"); 18 | return; 19 | } 20 | 21 | if(null != this.nextHandler){ 22 | this.nextHandler.handlerRequest(request); 23 | }else{ 24 | System.out.println("审批拒绝!"); 25 | } 26 | 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/designpattern/responsibilitychain/GManagerLeaveHandler.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.designpattern.responsibilitychain; 2 | 3 | /** 4 | * @program: cookbook 5 | * @description: 总经理处理类 6 | * @author: Byron 7 | * @create: 2019/07/11 09:49 8 | */ 9 | public class GManagerLeaveHandler extends AbstractLeaveHandler { 10 | public GManagerLeaveHandler(String name) { 11 | this.handlerName = name; 12 | } 13 | 14 | @Override 15 | protected void handlerRequest(LeaveRequest request) { 16 | if(request.getLeaveDays() <= this.MAX){ 17 | System.out.println("总经理:" + handlerName + ",已经处理;流程结束。"); 18 | return; 19 | } 20 | 21 | if(null != this.nextHandler){ 22 | this.nextHandler.handlerRequest(request); 23 | }else{ 24 | System.out.println("审批拒绝!"); 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/designpattern/responsibilitychain/LeaveRequest.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.designpattern.responsibilitychain; 2 | 3 | import lombok.*; 4 | 5 | /** 6 | * @program: cookbook 7 | * @description: 请假请求类 8 | * @author: Byron 9 | * @create: 2019/07/11 09:44 10 | */ 11 | @Setter 12 | @Getter 13 | @NoArgsConstructor 14 | @AllArgsConstructor 15 | @Builder 16 | public class LeaveRequest { 17 | /**天数*/ 18 | private int leaveDays; 19 | 20 | /**姓名*/ 21 | private String name; 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/designpattern/responsibilitychain/ResponsibilityTest.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.designpattern.responsibilitychain; 2 | 3 | /** 4 | * @program: cookbook 5 | * @description: 责任链模式测试案例 6 | * @author: Byron 7 | * @create: 2019/07/11 09:59 8 | */ 9 | public class ResponsibilityTest { 10 | public static void main(String[] args) { 11 | LeaveRequest request = LeaveRequest.builder().leaveDays(3).name("小明").build(); 12 | 13 | 14 | AbstractLeaveHandler directLeaderLeaveHandler = new DirectLeaderLeaveHandler("县令"); 15 | DeptManagerLeaveHandler deptManagerLeaveHandler = new DeptManagerLeaveHandler("知府"); 16 | GManagerLeaveHandler gManagerLeaveHandler = new GManagerLeaveHandler("京兆尹"); 17 | 18 | directLeaderLeaveHandler.setNextHandler(deptManagerLeaveHandler); 19 | deptManagerLeaveHandler.setNextHandler(gManagerLeaveHandler); 20 | 21 | directLeaderLeaveHandler.handlerRequest(request); 22 | 23 | 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/designpattern/responsibilitychain/package-info.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.designpattern.responsibilitychain; 2 | 3 | /* 4 | 责任链模式 5 | */ -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/designpattern/segregation/IMachine.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.designpattern.segregation; 2 | 3 | /** 4 | * 施乐公司系统机器接口 5 | */ 6 | public interface IMachine { 7 | /** 8 | * 打印 9 | */ 10 | public void print(); 11 | 12 | /** 13 | * 装订 14 | */ 15 | public void staple(); 16 | 17 | /** 18 | * 扫描 19 | */ 20 | public void scan(); 21 | 22 | /** 23 | * 复印 24 | */ 25 | public void photoCopy(); 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/designpattern/segregation/XeroxMachine.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.designpattern.segregation; 2 | 3 | public class XeroxMachine implements IMachine { 4 | @Override 5 | public void print() { 6 | System.out.println("打印任务..."); 7 | } 8 | 9 | @Override 10 | public void staple() { 11 | System.out.println("装订任务..."); 12 | } 13 | 14 | @Override 15 | public void scan() { 16 | System.out.println("扫描任务..."); 17 | } 18 | 19 | @Override 20 | public void photoCopy() { 21 | System.out.println("复印任务..."); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/designpattern/singleton/Singleton.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.designpattern.singleton; 2 | 3 | /** 4 | * 单例模式实例 5 | * 1. 构造器私有化 6 | * 2. 提供静态方法供外部获取单例实例 7 | * 3. 延迟初始化实例 8 | */ 9 | public class Singleton { 10 | 11 | private static Singleton instance; 12 | 13 | // 构造器私有化 14 | private Singleton(){ 15 | 16 | } 17 | 18 | // 提供静态方法 19 | public static Singleton getInstance(){ 20 | 21 | // 懒加载初始化,在第一次使用时才创建实例 22 | if(instance == null){ 23 | instance = new Singleton(); 24 | } 25 | return instance; 26 | } 27 | 28 | 29 | public void display(){ 30 | System.out.println("Hurray! I am create as a Singleton!"); 31 | } 32 | 33 | 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/designpattern/singleton/SingletonSynchronized.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.designpattern.singleton; 2 | 3 | /** 4 | * 单例模式实例 5 | * 1. 构造器私有化 6 | * 2. 提供静态方法供外部获取单例实例 7 | * 3. 延迟初始化实例 8 | */ 9 | public class SingletonSynchronized { 10 | 11 | private static SingletonSynchronized instance; 12 | 13 | // 构造器私有化 14 | private SingletonSynchronized(){ 15 | 16 | } 17 | 18 | // 提供静态方法 19 | public static synchronized SingletonSynchronized getInstance(){ 20 | 21 | // 懒加载初始化,在第一次使用时才创建实例 22 | if(instance == null){ 23 | instance = new SingletonSynchronized(); 24 | } 25 | return instance; 26 | } 27 | 28 | 29 | public void display(){ 30 | System.out.println("Hurray! I am create as a SingletonSynchronized!"); 31 | } 32 | 33 | 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/designpattern/singleton/SingletonSynchronizedOptimized.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.designpattern.singleton; 2 | 3 | /** 4 | * 单例模式实例 5 | * 1. 构造器私有化 6 | * 2. 提供静态方法供外部获取单例实例 7 | * 3. 延迟初始化实例 8 | */ 9 | public class SingletonSynchronizedOptimized { 10 | 11 | private static SingletonSynchronizedOptimized instance; 12 | 13 | // 构造器私有化 14 | private SingletonSynchronizedOptimized(){ 15 | 16 | } 17 | 18 | // 提供静态方法 19 | public static SingletonSynchronizedOptimized getInstance(){ 20 | 21 | // 将同步锁范围缩小,降低性能损耗 22 | if(instance == null){ 23 | synchronized (SingletonSynchronizedOptimized.class){ 24 | if(instance == null){ 25 | instance = new SingletonSynchronizedOptimized(); 26 | } 27 | } 28 | } 29 | return instance; 30 | } 31 | 32 | 33 | public void display(){ 34 | System.out.println("Hurray! I am create as a SingletonSynchronizedOptimized!"); 35 | } 36 | 37 | 38 | } 39 | -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/designpattern/singleton/package-info.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.designpattern.singleton; 2 | 3 | /** 4 | 单例模式 5 | */ -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/designpattern/state/DeadState.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.designpattern.state; 2 | 3 | public class DeadState implements PlayerState { 4 | 5 | @Override 6 | public void action(Player p) { 7 | p.dead(); 8 | } 9 | } -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/designpattern/state/GameContext.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.designpattern.state; 2 | 3 | public class GameContext { 4 | private Player player = new Player(); 5 | 6 | public void gameAction(String state) { 7 | if (state == "healthy") { 8 | player.attack(); 9 | player.fireBumb(); 10 | player.fireGunblade(); 11 | player.fireLaserPistol(); 12 | } else if (state == "survival") { 13 | player.survive(); 14 | player.firePistol(); 15 | } else if (state == "dead") { 16 | player.dead(); 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/designpattern/state/GameContextUpgrade.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.designpattern.state; 2 | 3 | public class GameContextUpgrade { 4 | private PlayerState state = null; 5 | private Player player = new Player(); 6 | 7 | public void setState(PlayerState state) { 8 | this.state = state; 9 | } 10 | 11 | public void gameAction() { 12 | state.action(player); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/designpattern/state/HealthyState.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.designpattern.state; 2 | 3 | public class HealthyState implements PlayerState { 4 | 5 | @Override 6 | public void action(Player p) { 7 | p.attack(); 8 | p.fireBumb(); 9 | p.fireGunblade(); 10 | p.fireLaserPistol(); 11 | } 12 | } -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/designpattern/state/Player.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.designpattern.state; 2 | 3 | public class Player { 4 | public void attack(){ 5 | System.out.println("Attack"); 6 | } 7 | 8 | public void fireBumb() { 9 | System.out.println("Fire Bomb"); 10 | } 11 | 12 | public void fireGunblade() { 13 | System.out.println("Fire Gunblade"); 14 | } 15 | 16 | public void fireLaserPistol() { 17 | System.out.println("Laser Pistols"); 18 | } 19 | 20 | public void firePistol() { 21 | System.out.println("Fire Pistol"); 22 | } 23 | 24 | public void survive() { 25 | System.out.println("Surviving!"); 26 | } 27 | 28 | public void dead() { 29 | System.out.println("Dead! Game Over"); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/designpattern/state/PlayerState.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.designpattern.state; 2 | 3 | public interface PlayerState { 4 | void action(Player p); 5 | } 6 | -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/designpattern/state/SurvivalState.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.designpattern.state; 2 | 3 | public class SurvivalState implements PlayerState { 4 | 5 | @Override 6 | public void action(Player p) { 7 | p.survive(); 8 | p.firePistol(); 9 | } 10 | } -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/designpattern/state/package-info.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.designpattern.state; 2 | /** 3 | * 状态模式 4 | */ -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/designpattern/strategy/InsertionSort.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.designpattern.strategy; 2 | 3 | import java.util.Arrays; 4 | 5 | public class InsertionSort implements SortingStrategy { 6 | 7 | @Override 8 | public void sort(int[] numbers) { 9 | System.out.println("Insertion Sort!"); 10 | 11 | for (int i = 1; i < numbers.length; i++) { 12 | int temp = numbers[i]; 13 | int j; 14 | for (j = i - 1; (j >= 0) && (numbers[j] > temp); j--) { 15 | numbers[j + 1] = numbers[j]; 16 | } 17 | numbers[j + 1] = temp; 18 | } 19 | 20 | System.out.println(Arrays.toString(numbers)); 21 | } 22 | } -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/designpattern/strategy/SelectionSort.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.designpattern.strategy; 2 | 3 | import java.util.Arrays; 4 | 5 | public class SelectionSort implements SortingStrategy { 6 | 7 | @Override 8 | public void sort(int[] numbers) { 9 | System.out.println("Selection Sort!"); 10 | 11 | int i, j, first, temp; 12 | for (i = numbers.length - 1; i > 0; i--) { 13 | first = 0; 14 | for (j = 1; j <= i; j++) { 15 | if (numbers[j] > numbers[first]) { 16 | first = j; 17 | } 18 | } 19 | temp = numbers[first]; 20 | numbers[first] = numbers[i]; 21 | numbers[i] = temp; 22 | } 23 | 24 | System.out.println(Arrays.toString(numbers)); 25 | } 26 | } -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/designpattern/strategy/SortingContext.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.designpattern.strategy; 2 | 3 | public class SortingContext { 4 | private SortingStrategy strategy; 5 | 6 | public void setSortingMethod(SortingStrategy strategy) { 7 | this.strategy = strategy; 8 | } 9 | 10 | public SortingStrategy getStrategy() { 11 | return strategy; 12 | } 13 | 14 | public void sortNumbers(int[] numbers){ 15 | strategy.sort(numbers); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/designpattern/strategy/SortingStrategy.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.designpattern.strategy; 2 | 3 | public interface SortingStrategy { 4 | 5 | public void sort(int[] numbers); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/designpattern/template/MexicanPizza.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.designpattern.template; 2 | 3 | public class MexicanPizza extends Pizza { 4 | @Override 5 | public void chooseBread() { 6 | System.out.println("Choosing Mexican Pizza Bread!"); 7 | } 8 | 9 | @Override 10 | public void addIngredients() { 11 | System.out.println("Adding Mexican Pizza Ingredients!"); 12 | } 13 | } -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/designpattern/template/Pizza.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.designpattern.template; 2 | 3 | public abstract class Pizza { 4 | public abstract void chooseBread(); 5 | public abstract void addIngredients(); 6 | 7 | public void heating() { 8 | System.out.println("Heating for 10 minutes!"); 9 | } 10 | 11 | public void addTopinngs() { 12 | System.out.println("Adding Topinngs!"); 13 | } 14 | 15 | public void addCheese() { 16 | System.out.println("Adding Cheese!"); 17 | } 18 | 19 | // Template method 20 | public final void preparePizza() { 21 | chooseBread(); 22 | addIngredients(); 23 | heating(); 24 | addCheese(); 25 | addTopinngs(); 26 | } 27 | } -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/designpattern/template/SweetCornPizza.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.designpattern.template; 2 | 3 | public class SweetCornPizza extends Pizza { 4 | @Override 5 | public void chooseBread() { 6 | System.out.println("Choosing SweetCorn Pizza Bread!"); 7 | } 8 | 9 | @Override 10 | public void addIngredients() { 11 | System.out.println("Adding SweetCorn Pizza Ingredients!"); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/designpattern/template/package-info.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.designpattern.template; 2 | 3 | /* 4 | 模板模式 5 | */ -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/designpattern/wrapper/Car.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.designpattern.wrapper; 2 | 3 | 4 | public interface Car { 5 | void run(); 6 | 7 | void stop(); 8 | } 9 | -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/designpattern/wrapper/QeqCar.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.designpattern.wrapper; 2 | 3 | /** 4 | * @program: cookbook 5 | * @author: Byron 6 | * @create: 2019/07/29 7 | */ 8 | public class QeqCar implements Car { 9 | @Override 10 | public void run() { 11 | System.out.println("Qeq go..."); 12 | } 13 | 14 | @Override 15 | public void stop() { 16 | System.out.println("Qeq stop!"); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/designpattern/wrapper/WrapperCar.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.designpattern.wrapper; 2 | 3 | /** 4 | * @program: cookbook 5 | * @author: Byron 6 | * @create: 2019/07/29 7 | */ 8 | public class WrapperCar implements Car { 9 | 10 | private Car car; 11 | 12 | public WrapperCar(Car car) { 13 | this.car = car; 14 | } 15 | 16 | @Override 17 | public void run() { 18 | System.out.println("wapper run..."); 19 | } 20 | 21 | @Override 22 | public void stop() { 23 | car.stop(); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/designpattern/wrapper/WrapperTest.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.designpattern.wrapper; 2 | 3 | import org.hibernate.validator.constraints.br.TituloEleitoral; 4 | import org.junit.Test; 5 | 6 | import java.io.FileInputStream; 7 | 8 | import static java.lang.System.in; 9 | 10 | /** 11 | * @program: cookbook 12 | * @author: Byron 13 | * @create: 2019/07/29 14 | */ 15 | public class WrapperTest { 16 | 17 | @Test 18 | public void 装饰器模式测试(){ 19 | Car car = new WrapperCar(new QeqCar()); 20 | car.run(); 21 | car.stop(); 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/java8/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Byron4j/CookBook/1979653ec7eeee95c8422494e5af732e11b30efb/src/main/java/org/byron4j/cookbook/java8/.DS_Store -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/java8/basic/CompareJava8AndPreVersion.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.java8.basic; 2 | 3 | import org.junit.Test; 4 | 5 | /** 6 | * 比较java8与之前的编码方式 7 | */ 8 | public class CompareJava8AndPreVersion { 9 | 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/javaagent/Javassist3ClassLoader.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.javaagent; 2 | 3 | public class Javassist3ClassLoader { 4 | 5 | public void say(){ 6 | System.out.println("Hello!"); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/javaagent/Javassist3ClassLoaderTest2.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.javaagent; 2 | 3 | import javassist.*; 4 | 5 | public class Javassist3ClassLoaderTest2 { 6 | 7 | public static void main(String[] args) throws NotFoundException, CannotCompileException, IllegalAccessException, InstantiationException, ClassNotFoundException { 8 | ClassPool pool = ClassPool.getDefault(); 9 | // 使用ClassPool创建Loader 10 | Loader cl = new Loader(pool); 11 | 12 | CtClass ct = pool.get("org.byron4j.cookbook.javaagent.Rectangle"); 13 | ct.setSuperclass(pool.get("org.byron4j.cookbook.javaagent.Point")); 14 | 15 | Class c = cl.loadClass("org.byron4j.cookbook.javaagent.Rectangle"); 16 | Object o = c.newInstance(); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/javaagent/Javassist3ClassLoaderTest3.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.javaagent; 2 | 3 | import javassist.*; 4 | 5 | public class Javassist3ClassLoaderTest3 { 6 | 7 | public static void main(String[] args) throws Throwable { 8 | Translator t = new MyTranslator(); 9 | ClassPool cp = ClassPool.getDefault(); 10 | Loader loader = new Loader(); 11 | loader.addTranslator(cp, t); 12 | loader.run("org.byron4j.cookbook.javaagent.Point", args); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/javaagent/MyClassLoader.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.javaagent; 2 | 3 | public class MyClassLoader extends ClassLoader{ 4 | } 5 | -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/javaagent/MyTranslator.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.javaagent; 2 | 3 | import javassist.*; 4 | 5 | public class MyTranslator implements Translator { 6 | @Override 7 | public void start(ClassPool pool) throws NotFoundException, CannotCompileException { 8 | System.out.println("org.byron4j.cookbook.javaagent.MyTranslator.start invoked!" ); 9 | } 10 | 11 | @Override 12 | public void onLoad(ClassPool pool, String classname) throws NotFoundException, CannotCompileException { 13 | // 在类加载前执行该方法,所以可以改变类的定义 14 | CtClass cc = pool.get(classname); 15 | cc.setModifiers(Modifier.PUBLIC); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/javaagent/Point.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.javaagent; 2 | 3 | public class Point { 4 | public static void main(String[] args){ 5 | System.out.println("org.byron4j.cookbook.javaagent.Point#main invoked!"); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/javaagent/Rectangle.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.javaagent; 2 | 3 | public class Rectangle{ 4 | } 5 | -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/javaagent/cahpter4/package-info.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.javaagent.cahpter4; 2 | /* 3 | 自省和定制 4 | */ -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/javaagent/package-info.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.javaagent; 2 | 3 | /* 4 | javaagent示例 5 | */ -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/javacore/anno/AnnoDemo.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.javacore.anno; 2 | 3 | public class AnnoDemo { 4 | @Deprecated 5 | private static void sayHello(){ 6 | 7 | } 8 | 9 | @SuppressWarnings("finally") 10 | public String finallyTest(String str) 11 | { 12 | try 13 | { 14 | str+="."; 15 | } 16 | finally 17 | { 18 | return str.toUpperCase(); 19 | } 20 | } 21 | 22 | public static void main(String[] args){ 23 | AnnoDemo.sayHello(); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/javacore/anno/ChildClass.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.javacore.anno; 2 | 3 | public class ChildClass extends SuperClass{ 4 | 5 | } 6 | -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/javacore/anno/Demo.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.javacore.anno; 2 | 3 | import java.lang.annotation.Repeatable; 4 | 5 | 6 | @Repeatable(Role.class) 7 | public @interface Demo { 8 | String role() default "B"; 9 | } 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/javacore/anno/Due.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.javacore.anno; 2 | 3 | public @interface Due { 4 | String value(); 5 | } 6 | -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/javacore/anno/FK1.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.javacore.anno; 2 | 3 | @Demo(role="SSS") 4 | @Due("Hi") 5 | public class FK1 { 6 | } 7 | -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/javacore/anno/Role.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.javacore.anno; 2 | 3 | public @interface Role { 4 | Demo[] value(); 5 | } 6 | -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/javacore/anno/SuperClass.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.javacore.anno; 2 | 3 | import lombok.Data; 4 | 5 | @Demo 6 | public class SuperClass { 7 | } 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/javacore/anno/Td.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.javacore.anno; 2 | 3 | public @interface Td { 4 | } 5 | -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/javacore/anno/jsr250/PostConstructDemo.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.javacore.anno.jsr250; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | import lombok.ToString; 6 | 7 | import javax.annotation.PostConstruct; 8 | 9 | @Setter 10 | @Getter 11 | @ToString 12 | public class PostConstructDemo { 13 | 14 | private int age; 15 | 16 | @PostConstruct 17 | public void setAge(){ 18 | age = 10; 19 | } 20 | 21 | public static void main(String[] args){ 22 | System.out.println(new PostConstructDemo()); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/javacore/anno/package-info.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.javacore.anno; 2 | /** 3 | 注解 4 | */ -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/javacore/anno/resolver/BusinessLogic.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.javacore.anno.resolver; 2 | 3 | @ByronAnno("类") 4 | public class BusinessLogic { 5 | @ByronAnno("方法") 6 | public void sayHello(){ 7 | System.out.println("org.byron4j.cookbook.javacore.anno.resolver.BusinessLogic.sayHello!"); 8 | } 9 | 10 | public static void main(String[] args){ 11 | Class clazz = BusinessLogic.class; 12 | if( clazz.isAnnotationPresent(ByronAnno.class) ){ 13 | // 存在 ByronAnno 注解的话 14 | ByronAnno byronAnno = (ByronAnno)clazz.getAnnotation(ByronAnno.class); 15 | System.out.println("注解值为:" +byronAnno.value()); 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/javacore/anno/resolver/ByronAnno.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.javacore.anno.resolver; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | 8 | @Retention(RetentionPolicy.RUNTIME) 9 | @Target({ElementType.TYPE, ElementType.METHOD}) 10 | public @interface ByronAnno { 11 | String value() default "ok"; 12 | } 13 | -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/javacore/dynamicproxy/cglibproxy/BookStore.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.javacore.dynamicproxy.cglibproxy; 2 | 3 | public class BookStore { 4 | public void buyBook(){ 5 | System.out.println("购买书籍。"); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/javacore/dynamicproxy/jdkproxy/DynamicAnno.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.javacore.dynamicproxy.jdkproxy; 2 | 3 | import java.lang.annotation.*; 4 | 5 | @Documented 6 | @Retention(RetentionPolicy.RUNTIME) 7 | @Target(ElementType.METHOD) 8 | public @interface DynamicAnno { 9 | } 10 | -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/javacore/dynamicproxy/jdkproxy/Hello.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.javacore.dynamicproxy.jdkproxy; 2 | 3 | public interface Hello { 4 | 5 | @DynamicAnno 6 | public void sayHello(); 7 | } 8 | -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/javacore/dynamicproxy/jdkproxy/HelloImpl.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.javacore.dynamicproxy.jdkproxy; 2 | 3 | public class HelloImpl implements Hello { 4 | 5 | @Override 6 | public void sayHello() { 7 | System.out.println("目标方法:Hello."); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/javacore/enums/BasicOperation.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.javacore.enums; 2 | 3 | public enum BasicOperation implements OperationI{ 4 | PLUS("+"){ 5 | @Override 6 | public double apply(double x, double y) { 7 | return x + y; 8 | } 9 | }, MINUS("-") { 10 | @Override 11 | public double apply(double x, double y) { 12 | return x - y; 13 | } 14 | }, TIMES("*") { 15 | @Override 16 | public double apply(double x, double y) { 17 | return x * y; 18 | } 19 | }, DIVIDE("/") { 20 | @Override 21 | public double apply(double x, double y) { 22 | return x / y; 23 | } 24 | }; 25 | 26 | // 属性 27 | private String symbol; 28 | BasicOperation(String symbol){ 29 | this.symbol = symbol; 30 | } 31 | 32 | 33 | } 34 | -------------------------------------------------------------------------------- /src/main/java/org/byron4j/cookbook/javacore/enums/EnumSetDemo.java: -------------------------------------------------------------------------------- 1 | package org.byron4j.cookbook.javacore.enums; 2 | 3 | import java.util.EnumSet; 4 | import java.util.Set; 5 | 6 | public class EnumSetDemo { 7 | public enum Style{ 8 | BOLD, 9 | ITALIC, 10 | UNDERLINE, 11 | STRIKETHROUGH 12 | } 13 | 14 | public void applyStyle(Set