设计模式
本博客大部分内容来于免费在线学习设计模式
本文为设计模式学习笔记
1:设计模式概念设计模式是软件设计中常见问题的典型解决方案。它们就像能根据需求进行调整的预制蓝图,可用于解决代码中反复出现的设计问题。是解决特定问题的一般性概念。
设计模式可以使面向对象保持结构良好
设计模式是针对软件设计中常见问题的工具箱,其中的工具就是各种经过实践验证的解决方案。即使你从未遇到过这些问题,了解模式仍然非常有用,因为它能指导你如何使用面向对象的设计原则来解决各种问题。
设计模式定义了一种让你和团队成员能够更高效沟通的通用语言。
算法和设计模式的区别:算法更像是菜谱: 提供达成目标的明确步骤。而模式更像是蓝图: 你可以看到最终的结果和模式的功能,但需要自己确定实现步骤。
2:分类
创建型模式提供创建对象的机制,增加已有代码的灵活性和可复用性。
结构型模式介绍如何将对象和类组装成较大的结构,并同时保持结构的灵活和高效。
行为模式负责对象间的高效沟通和职责委派。
3:六大原则
开闭原则:一个软件实体如类、模块和函数应该对修改封闭,对扩展开放。
单一职责原则:一个类只做一件事,一个类应该只 ...
POI和EasyExcel
本博客代码已上传gitee仓库 失铭 / poi练习
简介POI介绍
apache官网百度百科:Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。
基本功能:
结构:
HSSF - 提供读写Microsoft Excel格式档案的功能。
XSSF - 提供读写Microsoft Excel OOXML格式档案的功能。
HWPF - 提供读写Microsoft Word格式档案的功能。
HSLF - 提供读写Microsoft PowerPoint格式档案的功能。
HDGF - 提供读写Microsoft Visio格式档案的功能。
EasyExcel介绍
EasyExcel官网
EasyExcel是一个基于Java的简单、省内存的读写Excel的开源项目。在尽可能节约内存的情况下支持读写百M的Excel。github地址:https://github.com/alibaba/easyexcel
Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都存 ...
SpringCloud
本博客练习项目已上传 gitee->失铭/SpringCloud 练习
微服务概述什么是微服务
引用 ThoughtWorks 公司的首席科学家 Martin Fowler Microservices 文中的介绍
In short, the microservice architectural style is an approach to developing a single application as a suite of small services, each running in its own process and communicating with lightweight mechanisms, often an HTTP resource API. These services are built around business capabilities and independently deployable by fully automated deployment machinery. There is a bare minimum of ce ...
Spring+Mybatis+Druid
Spring+Mybatis+Druid创建项目选择Spring Initializr创建项目,选择jdk版本和默认的Service URL
填写项目的Group,Artifact信息选择Web中的Spring Web和Sql中的Spring Data JDBC,Mybatis,MySQL四个依赖然后填写项目信息点击Finish
导入依赖添加Druid依赖
12345<dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.23</version></dependency>
修改配置文件修改datasource.properties文件
1234567891011121314151617181920212223242526272829303132333435#datasource<!-- mysql8.0以上版本 -->spring.dat ...
日志
JDK Logging从jdk1.4起,JDK开始自带一套日志系统。JDK Logging最大的优点就是不需要任何类库的支持,只要有Java的运行环境就可以使用。
日志能够很好的代替我们在调试过程的System.out.pringln(),日志能够避免反反复复添加输入语句的繁琐和更准确的输入想要的结果。日志的优点有很多:
可以设置输出样式,避免自己每次都写”ERROR: “ + var;
可以设置输出级别,禁止某些级别输出。例如,只输出错误日志;
可以被重定向到不同服务器,用于在控制台中显示,用于存储文件等;
可以按包名控制日志级别,只输出某些包打印的日志;
可以……
但是因为JDK Logging和其他的日志相比比较简陋,所以在商业中很少使用JDK logging
一种由7个日志级别
级别
含义
SEVERE
严重
WARNING
警告
INFO
信息
CONFIG
配置
FINE
良好
FINER
较好
FINEST
最好
默认情况下,只记录前三个级别,也可以调整其他级别,例:使用logger.setLevel(Level.FINE)调整 ...
SpringBoot自动配置
序言Spring Boot的出现,得益于“约定大于配置”的理念,没有繁琐的配置、难以集成的内容(大多数流行第三方技术都被集成),这是基于Spring 4.x提供的按条件配置Bean的能力。
自动配置作为SpringBoot的精髓,不仅仅是“面试”中会问到自动配置的原理,如果能理解自动配置的原理,将无往不利。
本文使用SpringBoot版本为:2.3.3
工作原理@SpringBootApplication首先,我们都知道SpringBoot项目运行标记 @SpringBootApplication 注解的类 的main方法来启动SpringBoot应用,那么从这里开始着手
@SpringBootApplication: Spring Boot应用标注在某个类上说明这个类是SpringBoot的主配置类,SpringBoot就应该运行这个类的main方法来启动SpringBoot应用。
在xxxApplication.java文件中查看@SpringBootApplication注解(按住ctrl+点击注解)
12345678910111213141516171819// S ...
SpringBoot基础
SpringBoot简介SpringBoot是一种全新的框架,目的是为了简化Spring应用的初始搭建以及开发过程。该框架使用特定的方式(集成starter,约定大于配置)来进行配置,从而使开发人员不需要再定义样板化的配置。SpringBoot提供了一种新的编程范式,可以更加快速便捷地开发Spring项目,在开发过程当中可以专注于应用程序本身的功能开发,而无需在Spring配置上花太大的工夫。
SpringBoot基于Sring4进行设计,继承了原有Spring框架的优秀基因。SpringBoot并不是一个框架,而是一些类库的集合。maven或者gradle项目导入相应依赖即可使用SpringBoot,而无需自行管理这些类库的版本。
简化Spring应用开发的框架整个Spring应用技术栈的大整合J2EE开发的一站式解决方案
SpringBoot优缺点优点:
快速构建独立运行的Spring项目以及与主流框架的继承。
使用嵌入式的Servlet容器,应用无需达成war包。
starters自动依赖和版本控制
大量的自动配置,简化开发,也可修改默认值
无需配置xml,无代码生成
准生 ...
MySQL索引
概念索引是一种特殊的数据库结构,由数据表中的一列或多列组合而成,可以用来快速查询数据表中有某一特定值的记录。
打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一个人力三轮车。
通过索引,查询数据时不用读完记录的所有信息,而只是查询索引列。否则,数据库系统将读取每条记录的所有信息进行匹配。拿汉语字典的目录页(索引)打比方,我们可以按拼音、笔画、偏旁部首等排序的目录(索引)快速查找到需要的字。
因此,使用索引可以很大程度上提高数据库的查询速度,还有效的提高了数据库系统的性能。
索引分类
普通索引:index:加速查找
唯一索引
主键索引:primary key:加速查找+约束(不为空且唯一)
唯一索引:unique:加速查找+约束 (唯一)
联合索引
primary key(id,name):联合主键索引
unique(id,name):联合唯一索引
index(id,name):联合普通索引
全文索引fulltext :用于搜索很长一篇文章的时候,效果最好。
空间索引spatial :了解就好,几乎不用
哪些类适合建立索引 ...
MySQL引擎
转自MyISAM与InnoDB 的区别(9个不同点)
前言MySQL中,常用的引擎主要就是2个:
InnoDB
MyIASM
MyISAM是默认存储引擎(Mysql5.1前)。由早期的ISAM(Indexed Sequential Access Method:有索引的顺序访问方法)所改良 。 每个MyISAM在磁盘上存储成三个文件,每一个文件的名字均以表的名字开始,扩展名指出文件类型。
InnoDB,是MySQL的数据库引擎之一,为MySQL AB发布binary的标准之一。InnoDB由Innobase Oy公司所开发,2006年五月时由甲骨文公司并购。与传统的ISAM与MyISAM相比,InnoDB的最大特色就是支持了ACID兼容的事务(Transaction)功能,类似于PostgreSQL。目前InnoDB采用双轨制授权,一是GPL授权,另一是专有软件授权。
InnoDB和MyIASM区别
MyIASM
InnoDB
事务支持
不支持
支持
外键约束
不支持
支持
索引结构
非聚集索引
聚集索引
保存行数
保存
不保存
全文索引
支持
不支持 ...
线程同步
为什么需要同步在大多数实际的多线程应用中,两个或两个以上线程需要共享对统一数据的存取。如果两个线程同时修改一个对象,可能就是导致数据不准确,使对象状态混乱,引起程序错误。因此加入同步锁以避免在该线程没有完成操作之前,被其他线程的调用,从而保证了该变量的唯一性和准确性。
代码示例:
123456789101112131415161718192021222324252627282930313233343536373839// 模拟三个人买票,一人买10张public class BuyTicket { public static void main(String[] args) { UnsafeBuyTicket unsafeBuyTicket = new UnsafeBuyTicket(); new Thread(unsafeBuyTicket, "我").start(); new Thread(unsafeBuyTicket, "你").start(); new T ...