
Java学习日志
文章平均质量分 72
说是日志,可能会拖成周记,年记。。。
铁剑库丹
这个作者很懒,什么都没留下…
展开
-
2022年5月22日-Java的结语
没什么好写的,把平时记得tips放上来作为这一章的句号吧!Servlet在一个组件转发给另外一个组件之前,通过response输出的响应内容是没有意义的。在转发之前的通过out对象输出的内容最终不会输出到浏览器,这是由于RequestDispatcher在转发之前清空了输出缓冲区。但如果在转发之前输出的信息超出了缓冲区,或者调用了out对象的flush()方法,此响应内容已经输出到了客户端(称之为响应信息已提交),此时如果实施转发操作会抛出运行时异常。数据库String url="jdbc:m原创 2022-05-22 18:13:02 · 250 阅读 · 0 评论 -
2021年10月9日-设计模式之责任链模式
第二十四章:责任链模式一、情景引入作为学生会某部门干事,现在需要递交经费申请请求。经费如果数额不大的话就由部长审批,如果数额较大需找主席审批,如果数额很大需找辅导员审批。我们可以选择 if 语句来解决这个问题,首先我们自己根据数额判断一下应该找谁审批,然后把这个请求给他。不过,问题来了,如果申请人我不知道数额标准怎么办。比如你不能要求每个去政府机构办事的公民都熟读办事标准吧!所以能不能将请求和处理请求之间解耦呢(+_+)?现在我们使用责任链模式重新解决这个问题。申请人我直接吧请求给部长或者主席或者原创 2021-10-09 11:31:23 · 99 阅读 · 0 评论 -
2021年10月8日-设计模式之策略模式
第二十三章:策略模式一、情景引入现在我们要做一个 rpg 游戏,rpg 游戏有多种职业,这些职业的行为会有所不同。请看下述方式实现各个职业有什么问题:角色抽象类:abstract public class Character { public abstract void display(); public abstract void attack(); public abstract void cure(); public void flee() {原创 2021-10-08 20:46:11 · 90 阅读 · 0 评论 -
2021年10月8日-设计模式之状态模式
第二十二章:状态模式一、模式简介一个事物有不同的状态,比如人有高兴、悲伤、生气等状态。人处于这些不同的状态会有不同的行为,如高兴时会唱歌、生气时会跺脚等等。而且这些状态会随着行为的发生而相互转换,如生气时跺脚人的状态就由生气转变为冷静。如果我们在一个方法中使用 if 语句来描述这些状态的改变,势必会有大量 if 的嵌套,而且后续增加新的状态还要修改代码不符合开闭原则。所以我们使用状态模式来代替 if 语句基本类图:State:抽象状态类,里面声明了各个行为CurrentStateA、Cur原创 2021-10-08 19:24:11 · 69 阅读 · 0 评论 -
2021年10月7日-设计模式之解释器模式
第二十一章:解释器模式一、模式简介1)编译原理中:一个算术表达式通过词法分析器形成词法单元,而后这些词法单元通过语法分析器构建语法分析树,最终形成一个抽象的语法分析树。词法分析器和语法分析器都可以看作是解释器2)解释器模式:给定一个语言,定义它的文法的一种表示,并定义一个解释器,使用这个解释器来解释语言中的表达式3)应用场景:一些重复出现的问题可以用一种简单的语言来表达(正则表达式)一个简单语法需要解释的场景(运算表达式计算)一个需要解释执行的语言中的句子表示为一个抽象语法树(编译器、解释器原创 2021-10-07 22:02:22 · 87 阅读 · 0 评论 -
2021年10月7日-设计模式之备忘录模式
第二十章:备忘录模式一、模式简介如何让一个已经被修改的对象恢复到修改前的状态?能想到的方法就是在这个对象修改前,我们根据此对象现在的状态,new 一个新的对象。不过这样会暴露类的内部结构,不符合迪米特法则。所以我们将 new 这个动作封装成类中的一个方法就是备忘录模式原理类图:Caretaker 用来管理备忘录对象二、实际案例现在要求实现浏览器的返回上一页的功能WebPage 类@Datapublic class WebPage { private String cont原创 2021-10-07 19:50:19 · 90 阅读 · 0 评论 -
2021年9月29日-设计模式之中介者模式
第十九章:中介者模式一、模式简介随着系统越做越大,我们的类也越来越多。每个类或多或少会调用另外几个类中的方法。如下图:可以说是相当杂乱的,尤其是这些调用关系是分散在各个类中所以为了是各个类解耦,我们将这些逻辑调用独立出来放到一个叫中介者的类中。中介者这个类就规定了这些同事类的调用关系。所以一旦一个同事类需要调用另一个同事类的方法,只需发消息给中介者类,由中介者类来调用另一个同事类的方法。所以现在的关系就像下图:所以中介者这个类会很复杂,不好写二、模式实例让我们看一个猫和铲屎官的例子,猫和原创 2021-09-29 20:55:52 · 111 阅读 · 0 评论 -
2021年9月29日-设计模式之观察者模式
第十八章:观察者模式一、模式简介观察者模式有两个组成部分:观察者(Observer)和 被观察者(Subject)Subject 就像一个内容创作者,Observer 如果订阅了它,Subject 内部就将这个 Observer 保存在内部一个集合中。Subject 可以有很多 Observer,一旦 Subject 创作的内容更新,就可以调用每个 Observer 自己的更新方法将新创作的内容推送给每个 Observer二、模式实例现在我们有一个 up 主,他有很多订阅者,每次发一个新视频他需原创 2021-09-29 17:13:24 · 82 阅读 · 0 评论 -
2021年9月28日-设计模式之迭代器模式
第十七章一、模式简介1)迭代器我们使用容器技术时经常使用,可以说是既熟悉又陌生,属于行为型模式2)迪米特法则要求一个类应该暴露的信息越少越好,所以当我们的一个集合类想要遍历元素而不暴露内部结构就可以采取迭代器模式3)迭代器提供一种遍历集合元素的统一接口,用一致的方法遍历集合元素模式基本类图:所以迭代器模式非常简单,只需实现两个接口即可。因为不同的集合,它内部的数据结构是不一样的,所以每个具体的集合类应有自己的迭代器实现二、模式实例这两年垃圾分类越来越严格了,所以我们今天实现一个垃圾桶的类,原创 2021-09-28 23:13:54 · 94 阅读 · 0 评论 -
2021年9月27日-设计模式之访问者模式
第十六章:访问者模式一、基本介绍现在我们有这么几个类:足球类、篮球类、排球类。现在需要实现获取各个球重量的功能。那么直接在各个球类中加一个获取重量的方法就行了。那么问题来了,现在又需要获取各个球的颜色。那我们还是修改各个类增加个新方法?那如果以后有更多的新需求还是这么做?这显然违反了 OCP 原则。所以我们使用访问者模式解决这个问题。访问者模式基本类图:Visitor 里面的 operation 的数量往往对应着具体 Element 的种类数每新增一个需求只需新建一个 ConcreteVis原创 2021-09-27 20:07:08 · 81 阅读 · 0 评论 -
2021年9月27日-设计模式之命令模式
第十五章:命令模式一、基本介绍1)命令模式有三个组成部分:命令发起者(Invoker)、命令(Command)、命令接收者(Receiver)2)消除了命令发起者和接收者之间的耦合3)命令模式还支持撤销的操作基本类图:二、模式实例实现指挥官可以向士兵发送命令,指挥行动的功能Command 抽象类public abstract class Command { abstract public void execute(); abstract public void undo原创 2021-09-27 16:36:44 · 120 阅读 · 0 评论 -
2021年9月26日-设计模式值模板方法
第十四章:模板方法一、基本介绍现在我现在需要写一个程序来让机器人做奶茶,做奶茶的过程可以分为加奶粉、冲泡、加配料、包装几个过程。无论是做一杯什么口味的奶茶,它的步骤都是这几步,所以我就可以定义一个抽象类,做奶茶的各个步骤声明成抽象方法,不过大致的制作流程在这个抽象类中做实现类图如下:二、具体实现MilkyTea 抽象类public abstract class MilkyTea { // 方法的调用逻辑由父类决定 void make() { addPowder(原创 2021-09-26 20:52:03 · 90 阅读 · 0 评论 -
2021年9月25日-设计模式之代理模式
第十三章:代理模式一、基本介绍1)提供一个目标对象的代理,可以通过这个代理对象间接访问目标对象,而且还可以在目标对象已有的功能上扩展功能2)被代理对象可以是远程对象、创建开销大的对象或需要安全控制的对象3)代理模式主要分为:静态代理和动态代理,动态代理包括 JDK 代理、Cglib 代理二、静态代理静态代理很简单,要求代理对象的目标对象要有共同的父类,即它们是兄弟关系静态代理类图:具体实现代码:父类接口public interface AbstractTeacher { voi原创 2021-09-25 20:14:05 · 95 阅读 · 0 评论 -
2021年9月24日-设计模式之享元模式
第十二章:享元模式一、基本概念1)享元模式(Flyweight Pattern),也叫蝇量模式:使用共享技术有效的支持大量细粒度对象2)常用于系统底层开发,解决系统的性能问题。例如:数据库连接池,字符串常量池,缓冲池等。3)享元模式能够解决重复对象内存浪费问题。当需要相似对象时,不需要新建对象,而是从缓冲池中取。二、原理类图Flyweight 是抽象的享元角色,同时定义出对象的外部状态和内部状态ConcreteFlyweight 是具体的享元角色UnsharedConcreteFlywe原创 2021-09-24 17:18:50 · 72 阅读 · 0 评论 -
2021年9月22日-设计模式之组合模式
第十章:组合模式一、问题引入现在要求打印一学校学生会信息,打印的信息包括校学生会、学生会各部门以及各部门的组成人员。不难发现,打印的三个部分属于整体和部分的关系,例如学生会各部门组成了校学生会。所以针对这个问题,我们使用组合模式。二、组合模式组合模式一般类图:Component 是所有组成部分的抽象类,里面定义了一些操作子节点的方法Leaf 即叶子节点,表示内部不再有组成部分的节点,例如学生会成员Composite 即非叶子节点,其内部仍有其他的组成部分三、解决案例Compone原创 2021-09-22 17:51:15 · 69 阅读 · 0 评论 -
2021年9月22日-设计模式之装饰者模式
第九章:装饰者模式一、问题引入现在是这么个情况:有这么几个机器人,这几个机器人分别会安装主机、安装显示器、装系统。现在我想要一个既能安装主机、又能安装显示器的机器人。如果用继承的方式新建一个类是可以完成要求的,但是如果后续又需要一个既能安装显示器又能装系统的机器人的话又要新建一个类。随着我们的需求增加,类的数量会越来越多。所以针对这个问题,我们选择装饰者模式。装饰者模式又称包装模式(Wrapper Pattern),属于结构型设计模式。该模式可以让一个对象动态的增加新功能(代理模式???)二、装饰者原创 2021-09-22 15:47:26 · 88 阅读 · 0 评论 -
2021年9月19日-设计模式之桥接模式
第十章:桥接模式一、问题引入现奶茶店有上述多种奶茶(实际情况可能更多),如果需要我们设计一个点奶茶的程序,传统的方案如上图所示,采用继承的方式,让每一种奶茶都对应一个子类。问题也显然一见,这样做会导致类爆炸。我们看到,一杯奶茶主要有两个特点,即尺寸和所加的配料,这两个特点相乘就导致了很多的类,所以为了减少类的数量,我们将这两个特点拆成两种类。将奶茶的尺寸作为桥接类(两个特点最后当然要组合起来才能构成一杯具体的奶茶,所以两个特点类必有一个桥接类)。二、桥接模式类图如下:MilkyTea 抽象类原创 2021-09-19 21:18:18 · 181 阅读 · 0 评论 -
2021年9月19日-设计模式之适配器模式
第七章:适配器模式一、适配器概述1)适配器模式(Adapter)可以帮助某个类转换成使用者期望的另一个接口表示(这段话不好理解,看下面的例子就理解了),别名又叫包装器(Wrapper)2)适配器模式属于结构型模式,分为三类:类适配器模式、对象适配器模式、接口适配器模式二、类适配器模式1. 类适配器模式实例现有一手机需要使用 5v 的接口充电,但是现在只提供 220v 的电源,所以我们就需要一个适配器。类图如下:Voltage220 类public class Voltage220 {原创 2021-09-19 16:22:00 · 79 阅读 · 0 评论 -
2021年9月18日-设计模式之创建者模式
第六章:建造者模式一、问题引入现在要求我们生产电脑,有笔记本电脑、台式电脑。电脑的生产过程工序繁多,不过好在各种电脑的生产过程大致相似。传统实现方式:电脑抽象类:@Data@ToStringpublic abstract class Computer { private String mainboard; private String memery; private String cpu; private String gpu; private Stri原创 2021-09-18 17:01:11 · 115 阅读 · 0 评论 -
2021年9月17日-设计模式之原型模式
第五章:原型模式一、问题引入有一个 Sheep 对象,现要求克隆两份一模一样的对象常规做法:Sheep 对象@Data@ToString@AllArgsConstructorpublic class Sheep implements Cloneable{ private int id; private String name; private int age; private boolean male;}使用 new 来克隆对象public stati原创 2021-09-17 22:11:43 · 87 阅读 · 0 评论 -
2021年9月17日-设计模式之工厂模式
第四章:工厂模式一、简单工厂模式简单工厂模式属于创建型模式,是工厂模式家族中最简单实用的模式来看一下没有工厂之前的代码Pizza 类public abstract class Pizza { public abstract void prepare(); public abstract void bake(); public abstract void cut(); public void box() { System.out.println("披萨原创 2021-09-17 20:24:28 · 55 阅读 · 0 评论 -
2021年9月15日-设计模式之单例模式
第三章:单例设计模式一、设计模式概述1)《设计模式》是经典书籍,作者是 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides Design(俗称:“四人组 GOF”)2)设计模式——design pattern,是某类问题的通用解决方案3)设计模式分为三种类型,共 23 种创建者模式:单例模式、抽象工厂模式、原型模式、建造者模式、工厂模式结构型模式:适配器模式、桥接模式、装饰者模式、组合模式、外观模式、享元模式、代理模式行为型模式:模原创 2021-09-15 20:11:06 · 100 阅读 · 0 评论 -
2021年9月14日-设计模式之UML
第二章:UML 类图一、UML 概念1)UML —— Unified modeling language,统一建模语言用来软件分析和设计,帮助软件开发人员进行思考和记录思路2)UML 是一套符号的规定,用来描述软件模型中各个元素和它们之间的关系二、UML 图分类名称组成用例图-静态结构图类图、对象图、包图、组件图、部署图动态行为图交互图(时序图和协作图)、状态图、活动图三、UML 类图1)用于描述系统中的类(对象)本身和类(对象)之间的各种静态关系2原创 2021-09-14 20:36:43 · 92 阅读 · 0 评论 -
2021年9月13日-设计模式之七大原则
第一章:设计模式七大原则一、设计模式目的设计模式是为了让程序具有更好:高内聚、低耦合代码重用性可读性可扩展性或者说可维护性(当新增新的功能时,很方便)可靠性(当增加新的功能后,对原来的功能没影响)二、设计七大原则设计模式为什么这么设计的依据:单一职责原则接口隔离原则依赖倒转原则里氏替换原则开闭原则迪米特法则合成复用原则接下来就详细说明每项原则(‾◡◝)三、单一职责原则一个类,最好只负责一件事,只有一个引起它变化的原因,要求类的颗粒度越小越好。不过实际设计中职责怎原创 2021-09-13 21:13:36 · 71 阅读 · 0 评论 -
2021年7月28日——日志技术(如今)
日志技术——如今日志框架发展史:log4j -->JUL–>JCL–> slf4j --> logback --> log4j2一、SLF4JSLF4J —— Simple Logging Facade For Java,相比较 JCL,SLF4J 能做到绑定所有的日志实现框架。1. 快速入门添加依赖pom.xml<!-- slf4j core --><dependency> <groupId>org.slf原创 2021-07-28 14:18:08 · 116 阅读 · 0 评论 -
2021年7月28日——日志技术(早期)
日志技术——早期一、日志概念记录信息,方便查错调试日志:开发时调试使用系统日志:生产环境找错使用二、Java日志技术1. 门面概念日志框架层出不穷,如果没有统一接口,将大大增加用户的学习成本,扩展性也不好。所以现有日志框架都可以用门面来做到一套编码,任意更换,程序员面向接口编程,不直接使用日志的实现。2. 现有日志框架日志门面JCL、slf4j日志实现JUL(java自带)、logback、log4j、log4j2(log4j的升级版)三、JUL 学习JUL原创 2021-07-28 14:15:21 · 133 阅读 · 0 评论 -
2021年6月19日—— RabbitMQ高级
RabbitMQ 高级一、消息可靠性投递1. Confirm生产者将消息发送给交换机时,交换机不管有没有收到消息都会调用回调函数,表明是否顺利收到消息spring-rabbitmq-producer.xml<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/原创 2021-07-28 13:58:06 · 102 阅读 · 0 评论 -
2021年6月19日——springboot核心功能(七)
六、原理解析1. Profile通过profile可以做到不同的环境自动使用不同的配置文件1.1 application-profileapplication.yaml 配置文件是默认加载的application-xxx.yaml 配置文件则可以做到自由加载有以下三个配置文件:application.properties# 激活 application-dev.yaml 配置文件spring.profiles.active=devapplication-dev.yamlserve原创 2021-06-19 12:00:43 · 82 阅读 · 0 评论 -
2021年6月19日——springboot核心功能(六)
四、单元测试1. JUnit5 组成JUnit 5 = JUnit Platform + JUnit Jupiter + JUnit VintageJUnit Platform: Junit Platform是在JVM上启动测试框架的基础,不仅支持Junit自制的测试引擎,其他测试引擎也都可以接入。JUnit Jupiter: JUnit Jupiter提供了JUnit5的新的编程模型,是JUnit5新特性的核心。内部 包含了一个测试引擎,用于在Junit Platform上运行。J原创 2021-06-19 11:59:03 · 147 阅读 · 0 评论 -
2021年6月19日——springboot核心功能(五)
三、数据访问1. SQL1.1 自动使用HikariDataSource1.1.1 导入JDBC场景pom.xml<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId></dependency><!-- starter并不知道我们使用何种数据库,原创 2021-06-19 11:48:15 · 226 阅读 · 0 评论 -
2021年6月19日——springboot核心功能(四)
二、Web开发7、文件上传7.1 实际操作upload.html<!DOCTYPE html><html lang="zh-CH" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>文件上传</title> </head> <body>原创 2021-06-19 11:45:13 · 359 阅读 · 0 评论 -
2021年6月19日——springboot核心功能(三)
二、Web开发4. 数据响应与内容协商4.1 响应JSON4.1.1 jackson.jar+@ResponseBodyspring-boot-starter-web启动器依赖spring-boot-starter-json,所以不需要任何配置,就可以自动将返回的对象转成json字符串。4.1.2 响应过程适配器中存在很多返回值处理器在执行完方法得到返回之后,通过一下方法处理返回值this.returnValueHandlers.handleReturnValue(returnValue原创 2021-06-19 11:40:18 · 328 阅读 · 0 评论 -
2021年6月19日——springboot核心功能(二)
二、Web开发1. SpringMVC自动配置概览springmvc auto-configuration 自动添加以下功能:ContentNegotiatingViewResolver 和 BeanNameViewResolver支持静态资源访问,包括WebJar自动注册 Converter,GenericConverter,Formatter支持 HttpMessageConverters自动注册 MessageCodesResolver (国际化用)静态index.html 页支持原创 2021-06-19 11:33:34 · 379 阅读 · 0 评论 -
2021年6月19日——springboot核心功能(一)
一、配置文件1. 文件类型1.1 properties“都学到这里了,properties文件应该熟的一塌糊涂了”——鲁迅1.2 yaml参考:YAML文件简介在线编辑网站:YAML在线编辑器1.2.1 基本语法key: value kv之间有空格大小写敏感使用缩进表示层级关系缩进不允许使用tab,只允许空格缩进的空格数不重要,只要相同层级的元素左对齐即可#表示注释字符串无需加引号,如果要加,' '与" "表示字符串内容会被 转义/不转义1.2.3 数据类型纯量:单原创 2021-06-19 11:22:01 · 96 阅读 · 0 评论 -
2021年5月27日——SpringBoot2基础入门
SpringBoot2——基础入门一、Spring 与 SpringBoot1. SpringBoot优缺点1.1 优点创建独立Spring应用内嵌web服务器自动starter依赖,简化构建配置自动配置Spring以及第三方功能提供生产级别的监控、健康检查及外部化配置无代码生成、无需编写XML1.2 缺点人称版本帝,迭代快,需要时刻关注变化封装太深,内部原理复杂,不容易精通2. 如何学习官方参考文档:Spring Boot Reference Documentation原创 2021-05-27 13:25:56 · 141 阅读 · 0 评论