7.设计模式-建造者模式
零落成泥碾作尘,只有香如故。
——陆游《卜算子》
## 设计模式-建造者模式
1. 通过案例引入建造者模式盖房项目需求
需要建房子:我们简化这一过程为打桩、砌墙、封顶。
房子有各种各样的,比如普通房,高楼,各种房子的过程虽然一样,但是要求不要相同的。
传统方式解决盖房需求AbstractHouse123456789101112131415161718192021222324/** * @Date 2020/6/14 10:51 * @Version 10.21 * @Author DuanChaojie */public abstract class AbstractHouse { // 打地基 public abstract void buildBasic(); // 砌墙 public abstract void buildWalls(); // 封顶 public abstract void roofed(); public void build(){ buildBasic(); ...
8.IO流之序列化流
东风恶、欢情薄,一怀愁绪,几年离索。错!错!错!
——陆游《钗头凤》
IO流之序列化流1. 概述Java 提供了一种对象序列化的机制。用一个字节序列可以表示一个对象,该字节序列包含该 对象的数据 、 对象的类型 和 对象中存储的数据 等信息。字节序列写出到文件之后,相当于文件中持久保存了一个对象的信息。
反之,该字节序列还可以从文件中读取回来,重构对象,对它进行反序列化。 对象的数据 、 对象的类型 和 对象中存储的数据 信息,都可以用来在内存中创建对象。
看图理解序列化
2. ObjectOutputStream类
java.io.ObjectOutputStream 类,将Java对象的原始数据类型写出到文件,实现对象的持久存储。
序列化对象。
构造方法
public ObjectOutputStream(OutputStream out) : 创建一个指定OutputStream的ObjectOutputStream。
构造举例,代码如下:
123FileOutputStream fileOut = new FileOutputStream("employee ...
8.JVM本地方法栈和本地方法接口
何日请缨提锐旅,一鞭直渡清河洛。却归来、再续汉阳游,骑黄鹤。
——岳飞《满江红》
JVM本地方法栈和本地方法接口1. 本地方法接口1.1 什么是本地方法
简单地讲,一个Native Method是一个Java调用非Java代码的接囗。一个Native Method是这样一个Java方法:该方法的实现由非Java语言实现,比如C。这个特征并非Java所特有,很多其它的编程语言都有这一机制,比如在C++中,你可以用extern “C” 告知 C++ 编译器去调用一个C的函数。
"A native method is a Java method whose implementation is provided by non-java code."–本地方法是一个非Java的方法,它的具体实现是非Java代码的实现。
在定义一个native method时,并不提供实现体(有些像定义一个Java interface),因为其实现体是由非java语言在外面实现的。
本地接口的作用是融合不同的编程语言为Java所用,它的初衷是融合C/C++程序。
1.2 ...
8.MySql高级之索引的使用
有悲欢离合,月有阴晴圆缺,此事古难全。
——苏轼《水调歌头》
MySql高级之索引的使用
索引是数据库优化最常用也是最重要的手段之一, 通过索引通常可以帮助用户解决大多数的MySQL的性能优化问题。
1. 验证索引提升查询效率
在我们准备的表结构tb_item 中, 一共存储了 300 万记录;
12-- 根据ID查询 select * from tb_item where id = 1999\G;
查询速度很快, 接近0s , 主要的原因是因为id为主键, 有索引;
根据 title 进行精确查询
查看SQL语句的执行计划 :
处理方案 , 针对title字段, 创建索引 :
1create index idx_item_title on tb_item(title);
索引创建完成之后,再次进行查询 :
More Actions
通过explain , 查看执行计划,执行SQL时使用了刚才创建的索引
2. 索引的使用2.1 准备环境1234567891011121314151617181920212223242526 ...
8.CSS三大特性
[toc]
CSS 三大特性1. CSS层叠性
所谓层叠性是指多种CSS样式的叠加。是浏览器处理冲突的一个能力,如果一个属性通过两个相同选择器设置到同一个元素上,那么这个时候一个属性就会将另一个属性层叠掉。
原则:
样式冲突,遵循的原则是就近原则。 那个样式离着结构近,就执行那个样式。
样式不冲突,不会层叠。
CSS层叠性最后的执行口诀: 长江后浪推前浪,前浪死在沙滩上。
2. CSS继承性
子标签会继承父标签的某些样式,如文本颜色和字号。 想要设置一个可继承的属性,只需将它应用于父元素即可。
简单的理解就是: 子承父业。
注意:
恰当地使用继承可以简化代码,降低CSS样式的复杂性。比如有很多子级孩子都需要某个样式,可以给父级指定一个,这些孩子继承过来就好了。
子元素可以继承父元素的样式(text-,font-,line-这些元素开头的可以继承,以及color属性)
CSS继承性口诀: 龙生龙,凤生凤,老鼠生的孩子会打洞。
3. CSS优先级(重点)
定义CSS样式时,经常出现两个或更多规则应用在同一元素上,此时,
选择器相同,则执行层叠性 ...
8.设计模式-适配器模式
薄悻不来门半掩,斜阳。负你残春泪几行。
——冯延巳《南乡子》
设计模式-适配器模式
适配器模式(Adapter Pattern)将某个类的接口转换成客户端期望的另一个接口表示, 主的目的是兼容性,让原本因接口不匹配不能一起工作的两个类可以协同工作。其别名为包装器(Wrapper)。
适配器模式属于结构型模式
主要分为三类: 类适配器模式、对象适配器模式、接口适配器模式
工作原理
适配器模式:将一个类的接口转换成另一种接口.让原本接口不兼容的类可以兼容
从用户的角度看不到被适配者,是解耦的
用户调用适配器转化出来的目标接口方法,适配器再调用被适配者的相关接口方法
用户收到反馈结果,感觉只是和目标接口交互,如图
1. 类适配器模式
基本介绍:Adapter 类,通过继承 src 类,实现 dst 类接口,完成 src->dst 的适配。
以生活中充电器的例子来讲解适配器,充电器本身相当于 Adapter,220V 交流电相当于 src (即被适配者),我们的dst(即 目标)是 5V 直流电。
类图:
代码实现类适配接口Voltage5V123456789/ ...
9.IO流之打印流
胡未灭,鬓先秋,泪空流。此生谁料,心在天山,身老沧洲。
——陆游《诉衷情》
## IO流之打印流
1. 概述平时我们在控制台打印输出,是调用 print 方法和 println 方法完成的,这两个方法都来自于java.io.PrintStream 类,该类能够方便地打印各种数据类型的值,是一种便捷的输出方式。
2. PrintStream类构造方法
public PrintStream(String fileName) : 使用指定的文件名创建一个新的打印流。
构造举例,代码如下:PrintStream ps = new PrintStream("ps.txt");
改变打印流向
System.out 就是PrintStream类型的,只不过它的流向是系统规定的,打印在控制台上。不过,既然是流对象,我们就可以玩一个”小把戏”,改变它的流向。
123456789101112public class PrintDemo { public static void main(String[] args) throws IOException ...
9.设计模式-桥接模式
江头未是风波恶,别有人间行路难!
——辛弃疾《鹧鸪天》
## 设计模式-桥接模式
1. 案例引出桥接模式
现在对不同手机类型的不同品牌实现操作编程(比如:开机、关机、上网,打电话等);
传统方案解决手机操作问题分析
扩展性问题( 类爆炸),如果我们再增加手机的样式(旋转式),就需要增加各个品牌手机的类,同样如果我们增加一个手机品牌,也要在各个手机样式类下增加。
违反了单一职责原则,当我们增加手机样式时,要同时增加所有品牌的手机,这样增加了代码维护成本
解决方案–就是设计模式中的桥接模式。
2. 桥接模式2.1 桥接模式基本介绍
桥接模式(Bridge 模式)是指:将实现与抽象放在两个不同的类层次中,使两个层次可以独立改变。
是一种结构型设计模式。
Bridge 模式基于类的最小设计原则,通过使用封装、聚合及继承等行为让不同的类承担不同的职责。它的主要特点是把抽象(Abstraction)与行为实现(Implementation)分离开来,从而可以保持各部分的独立性以及应对他们的功能扩展。
2.2 桥接模式原理类图
Client 类:桥接模式的调用者
抽象类(Abs ...
JDBC
- JDBC* 概念:定义了一套操作所有关系型数据库的规则,即接口;
* 快速入门:
导入驱动jar包
注册驱动
获取数据库连接对象
定义sql
获取执行sql语句的对象Statement
执行sq,接受返回结果
处理结果
释放资源
12345678910111213141516//1.导入驱动jar包//2.注册驱动Class.forName("com.mysql.jdbc.Driver");//3.获取数据库连接对象Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/day17","root","");//4.定义sql语句String sql="update user set username='张三' where id=1";//5.获取执行sql对象StatementStatement stmt=con.createStatement();//6.执行sqlin ...
Tomaca和Nginx部署
[toc]
tomcat和ngnix在服务器上的部署1. 部署过程中使用的命令12345678910111213141516171.解压tomcat和ngnix安装包: tar -zxvf apache-tomcat-8.5.49.tar.gz //解压到当前文件夹里面 tar -zxvf apache-tomcat-8.5.47.tar.gz -C /root/soft/tomcat/ //解压到/root/soft/tomcat/文件夹下2.动态地查看tomcat日志 tail -f catalina.out 3.查看tomcat端口占用情况 ps -ef | grep tomcat4.杀死线程 kill 9 xxxxx5.编辑配置文件server.xml修改端口号 vi server.xml (1. i 2. 修改 3. esc 4.shift : 5 wq + enter )6.启动nginx,在sbin下 ./nginx7.修改nginx配置nginx.conf文件后,重新加载 ./nginx - ...