Java全栈思维导图
2022-05-11 11:52:02 76 举报
AI智能生成
Java全栈思维导图 不断更新中……
作者其他创作
大纲/内容
课堂提问
Day02
变量选小的更好吗?(不一定)
VUE
环境配置
单文件开发
API风格
选项式API
组合式API
注意:不使用构建工具的引入方式,无法使用组合式API
不使用构建工具
若不想经过构建流程就可以使用 Vue,请直接复制下面的代码到一个 HTML 文件中,
并在浏览器中打开它:
并在浏览器中打开它:
全局构建
子主题
代码规范
阿里巴巴Java开发手册
Git工具
作用
命令
使用命令版
使用UI版
IDEA 使用 Git
Maven
是什么
maven是自动化构建工具。
maven是自动化构建工具。
作用
1)自动化构建
2)实现jar包的管理
3)实现项目结构设计
1)自动化构建
2)实现jar包的管理
3)实现项目结构设计
坐标
pom文件
pom---project object model 项目对象模型,
对使用maven工具创建的项目进行了相关的定义,是maven项目的核心
pom---project object model 项目对象模型,
对使用maven工具创建的项目进行了相关的定义,是maven项目的核心
项目构建操作
构建过程包含有主要的一些步骤:清理、编译、测试、报告、打包、安装、部署
构建过程包含有主要的一些步骤:清理、编译、测试、报告、打包、安装、部署
生命周期
Maven项目关系
1)继承关系
2)聚合关系
1)继承关系
2)聚合关系
编程思想
编程统一规范
编码工具使用规范
编码规范
提交代码规范等
编码工具使用规范
编码规范
提交代码规范等
做模块开发
动态规划 / 回溯
大事化小,小事做好
动态规划 / 回溯
大事化小,小事做好
“深度优与广度”
尽量少走圆周,向圆心走
学核心设计、算法、数据结构
微机原理、操作系统、接口、数电
数学……
尽量少走圆周,向圆心走
学核心设计、算法、数据结构
微机原理、操作系统、接口、数电
数学……
提升编码逻辑
尽可能多的考虑bad case
自己总结适合自身的经验
尽可能多的考虑bad case
自己总结适合自身的经验
代码复杂度平衡
可读性与简洁性平衡
时间与空间平衡
可读性与简洁性平衡
时间与空间平衡
设计模式与六大原则
Docker
简介
1)云概念——>容器
2)容器——>发展史(CE开源免费、EE收费有服务)
3)容器——>虚拟化——>VM vs Docker
4)容器架构
1)云概念——>容器
2)容器——>发展史(CE开源免费、EE收费有服务)
3)容器——>虚拟化——>VM vs Docker
4)容器架构
是什么
Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容
器
Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容
器
学习过程链接
Docker安装
Docker命令
查看版本号
docker --version
docker --version
查看Docker运行状态
systemctl status docker.service
systemctl status docker.service
查看镜像构建历史
docker history
docker history
容器
docker ps(-a)、start、stop
docker run hello-world
docker run -d centos /bin/bash -c "while true; do sleep 1; echo Huawei; done"
会循环打印 需要在开一个终端stop
会循环打印 需要在开一个终端stop
执行docker run命令运行一个容器。
“-d”参数可在后台运行容器;
“-p”参数将宿主机8080端口映射到容器80端口。
“-d”参数可在后台运行容器;
“-p”参数将宿主机8080端口映射到容器80端口。
镜像
docker image inspect ubuntu命令查看ubuntu镜像分层结构
查看镜像
docker images
docker images
docker commit命令:可将一个运行中的容器保存为镜像。
Docker会缓存已有镜像的镜像层,构建或下载镜像时,如果某镜像层已存在,则直接使用无须重新创建或下载。
DockerFile
文件指令集
文件指令集
Dockerfile是包含若干指令的文本文件,可以通过这些指令创建出dokcer image。
文件构建镜像
docker build
docker build
使用“registry”镜像构建本地镜像仓库
docker run -d -p 1000:5000 -v /root/myregistry:/var/lib/registry registry
registry是docker hub上维护的镜像,,其服务端口是5000。-v参数将宿主机
的/root/myregistry目录映射到容器的/var/lib/regisgtry目录,用于存放镜像数据
registry是docker hub上维护的镜像,,其服务端口是5000。-v参数将宿主机
的/root/myregistry目录映射到容器的/var/lib/regisgtry目录,用于存放镜像数据
网络
问题
docker容器的状态有以下哪些
created
exited
running
paused
created
exited
running
paused
处于exited状态的容器,会占用系统什么资源?
分页资源
分页资源
删除所有终止状态容器的命令是什么?
docker container prune
docker container prune
docker attach和docker exec的区别
资料……
Dockerfile中的每个RUN指令执行后,都会生成一个对应的镜像层。
是的
是的
容器镜像中的镜像层,实际上是rootfs的一部分,也就是Linux操作系统文件与目录的一部分?
每一个镜像层都是Linux操作系统文件与目录的一部分
每一个镜像层都是Linux操作系统文件与目录的一部分
通过docker commit构建镜像时,容器的hostname等信息,会被添加到新的镜像中。
hostname 不同
hostname 不同
课程大纲分析
JavaSE
环境配置
jdk配置
环境变量配置Path、JAVA_HOME
IDEA工具
idea安装
setting设置
项目配置
推荐插件
Java运行体系
JDK、JRE、JVM
Java基础语法
语法规则
Java基础数据类型
基本数据类型和引用数据类型的理解
数据类型转换
Java引用数据类型
变量、常量
运算符、表达式
运算符:三目运算符
表达式
语句
条件语句
if、elseif、else
?:
switch case
循环语句
介绍:3种循环语句
while
do while
先执行循环体,在执行控制表达式
for
增强for循环:for each
for 和 for(;;){}
break 和 continue
是什么:结束循环语句
区别:break结束本层循环,continue结束本次循环
带标号的break和continue
引包、打包语句
import
是什么:引入程序所需要的类
如:import java.io.*;
特殊情况:如果要同时使用不同包下相同类名,这是需要使用到全限定名,即包名+类名
package
是什么:指明所定义的类属于哪个包,通常作为源程序的第一条语句
如:package test;
在循环中删除数组元素(1-10,删除奇数)
空语句
;
字符串和数组
数组
是什么:数组中元素类型相同,下标从0开始,数组是特殊对角
注意下标使用范围,小心越界问题;
注意下标使用范围,小心越界问题;
创建:1.用new来创建数组 2.默认赋初值
字符串
是什么:字符串是复合数据类型。在程序中经常会用到字符串及对字符串的各种操作,如字符串的连接、比较、截取、查找和替换等。Java提供了Java.lang.String类来对字符串进行这一系列的操作,以及StringBuffer类
字符串常量池,new和""的区别
相关操作:
相关操作等
字符串操作类:
String 不频繁变动的字符串
StringBuilder 单线程字符串拼接
StringBuffer 多线程环境下字符串拼接
String 不频繁变动的字符串
StringBuilder 单线程字符串拼接
StringBuffer 多线程环境下字符串拼接
String拼接 StringBuilder、StringBuffer拼接效率,三者的区别
字符串 地址存储
总结:
对于直接声明的字符串,形如:String x = ""; 则变量x直接指向常量池中;
对于new出来的字符串,new String(""); 则存储于堆中,但存储的是指向常量池的引用;
intern方法可以向常量池存储字符串,并返回一个常量池的引用对象;
对于直接声明的字符串,形如:String x = ""; 则变量x直接指向常量池中;
对于new出来的字符串,new String(""); 则存储于堆中,但存储的是指向常量池的引用;
intern方法可以向常量池存储字符串,并返回一个常量池的引用对象;
面向对象
语言发展方向
机器指令。。。。自然语言
类与对象的概念
面向对象与面向过程
面向过程 :
过程化开发
核心思想:分层实现各函数。
面向对象:
将问题域的事物 抽象出属性 和行为 定义到一个代码单元(类)
运行时 通过类产生对象。。。。
过程化开发
核心思想:分层实现各函数。
面向对象:
将问题域的事物 抽象出属性 和行为 定义到一个代码单元(类)
运行时 通过类产生对象。。。。
目的
解耦合 降低模块间的耦合度
代码复用 可以实现比面向过程更大规模的开发。
代码复用 可以实现比面向过程更大规模的开发。
五个核心概念
(自我理解)
(自我理解)
类
将某一类的事务共性抽取出来,特征抽离成属性,行为抽离成方法;共同组成一个类
对象
某类事物的某个具体体现:如具体的某一个人;具体的某一个人有具体的特征属性值,如性别女、年龄18等,有具体的行为方法内容,如吃饭吃馒头、睡觉6小时等
封装
将某一类事物的独有的不愿被外部获知的特征、行为私有化,如不愿被别人知道的年龄,不愿被别人知道的不良行为。该特征或行为可以在某一其他行为中体现出来。如不愿被别人知道的年龄,在查验身份信息时需要做出行为透露出……
继承
如同人类的DNA遗传,子代会遗传有父代的特征、行为;也可以有自己的特征、行为。并且是单一继承,一个人只有一个父母
多态
把人抽象看作是一类事物的类。不同的人作为不同的类可以继承自这个总的人类,产生不同的具体的人的对象,不同的人都继承有吃饭相同的行为名称,但是具体行为的内容不尽相同,有人爱吃甜,有人爱吃辣,酸甜苦辣都可以由人这个大的父类来承载,并体现出来,形如多态体现。多态体现一般指运行期多态体现,即人间百态
类的定义语法
继承和实现
extends: 一个类继承另一个类
implements: 一个类实现一些接口(interface)的方法,用以变相实现多重继承
修饰符
private
私有权限 只能被该类自身访问
default
默认权限(或称包权限) 只能被同一包中的类访问
protect
保护权限 只能被同一包中的类、该类的子类访问
public
公共权限 能被所有类访问
abstract
抽象类
可以定义抽象方法和普通方法
抽象类可以继承其他抽象类
注意事项
优点:实现公共特性的提取,使具体类可以从抽象类自动得到缺省实现,复用性强,简化代码 缺点:单继承,使子类的功能的扩展性大打折扣
final
最终成员 值在程序的执行过程中不会改变的变量,或不允许被子类重写的方法。
final类: 不能有子类(即该类不能被继承)
final变量: 定义一个不能被重新赋值的变量,final经常和static一起使用
final方法: 方法不能被子类重写(overwrite)
final类: 不能有子类(即该类不能被继承)
final变量: 定义一个不能被重新赋值的变量,final经常和static一起使用
final方法: 方法不能被子类重写(overwrite)
static
静态成员 直接通过类(而不必创建对象)就能使用该成员。
无论创建了某个类的多少个对象,static变量/方法只有一份
对于非static变量/方法,每个对象都有一份
不属于对象,而属于类,如图,存在JVM内存的方法区中
无论创建了某个类的多少个对象,static变量/方法只有一份
对于非static变量/方法,每个对象都有一份
不属于对象,而属于类,如图,存在JVM内存的方法区中
扩展
native
本地方法,通过本地方法接口调用本地方法库,如获取时间、等待方法等,用于执行如C、C++的代码
synchronized
用于多线程程序中的协调和同步,加同步锁,可以加入代码块,或者变量等
传参问题
是什么
形式参数 Vs. 实际参数:
方法定义中括号内的参数为形式参数
方法调用中括号内的参数为实际参数
形式参数 Vs. 实际参数:
方法定义中括号内的参数为形式参数
方法调用中括号内的参数为实际参数
关于形参与实参
方法调用中的实参个数、顺序、类型必须与形参一致,如果不一
致,系统会试图将实参转换为形参的类型,如果不能转换,则出错
方法调用中的实参个数、顺序、类型必须与形参一致,如果不一
致,系统会试图将实参转换为形参的类型,如果不能转换,则出错
原则(Java是值传递)
1. 方式调用时,将实参的值依次传递给对应的形参
2. 在方法内修改形参,不会影响实参的值(因为实参、形参各自暂居着不同的存储
空间):编程演示
3. 注意和C语言的“传地址”相区别
1. 方式调用时,将实参的值依次传递给对应的形参
2. 在方法内修改形参,不会影响实参的值(因为实参、形参各自暂居着不同的存储
空间):编程演示
3. 注意和C语言的“传地址”相区别
int、String、对象传参区别
属性变量、局部变量、参数作用域
是什么
变量的作用域是指能够访问该变量的上下边界
可以在类的任何位置声明变量
Java中的变量可以分为:成员变量、局部变量
变量的作用域是指能够访问该变量的上下边界
可以在类的任何位置声明变量
Java中的变量可以分为:成员变量、局部变量
成员变量
在类中声明,其作用域从声明处
开始,类结束处为止
属性变量是类范围的一种 “全局变量”
在类中声明,其作用域从声明处
开始,类结束处为止
属性变量是类范围的一种 “全局变量”
局部变量
在方法、复合语句中声明,方法
的形参也是局部变量
1. 在方法中声明的变量的作用域:声明处开
始,方法结束处为止
2. 在复合语句中声明的变量的作用域:声明
处开始,复合语句结束处为止
3. 形参的作用域:该方法内有效
在方法、复合语句中声明,方法
的形参也是局部变量
1. 在方法中声明的变量的作用域:声明处开
始,方法结束处为止
2. 在复合语句中声明的变量的作用域:声明
处开始,复合语句结束处为止
3. 形参的作用域:该方法内有效
访问原则:就近原则
C语言的野变量
随机,不确定
重载 、重写
重载
是什么
一个类中,多个方法的名字相同,但参数不同
一个类中,多个方法的名字相同,但参数不同
条件
1. 同一个类或父子类中,函数名称相同、但其参数不同;
2. 参数不同:参数个数或类型不同
3. 返回值不同不能构成重载;
4. 函数其他修饰符不同也不构成重载;
1. 同一个类或父子类中,函数名称相同、但其参数不同;
2. 参数不同:参数个数或类型不同
3. 返回值不同不能构成重载;
4. 函数其他修饰符不同也不构成重载;
重写
是什么
子类重写父类的方法
使用父类来接收不同子类对象,调用同一种方法,实现多态
子类重写父类的方法
使用父类来接收不同子类对象,调用同一种方法,实现多态
构造方法
语法特征
用以创建对象/实例化对象(new)
1. 对象的创建通过构造方法(constructor)来实现,其可以在对象被创建时,做一些初
始化工作
2. 构造方法的名字与类名相同
3. 构造方法没有返回值类型(连void关键字都没有)
4. 构造方法可以有多个(但参数个数或类型不一样),构成构造方法的重载(overload)
如果没有为类编写任何构造方法,则系统会自动为类创建一个无参的构造方法(即默认的构造方法)
如果类存在有参的构造方法,则系统不会自动创建默认构造方法
1. 对象的创建通过构造方法(constructor)来实现,其可以在对象被创建时,做一些初
始化工作
2. 构造方法的名字与类名相同
3. 构造方法没有返回值类型(连void关键字都没有)
4. 构造方法可以有多个(但参数个数或类型不一样),构成构造方法的重载(overload)
如果没有为类编写任何构造方法,则系统会自动为类创建一个无参的构造方法(即默认的构造方法)
如果类存在有参的构造方法,则系统不会自动创建默认构造方法
同一个类写多个构造
构造方法的重载
如何调用父类的构造方法 和普通方法
super关键字的使用
当前类有多个构造方法。如何相互调用
this关键字的使用
抽象类
是什么
抽象类是未完成的类 未完成的工作(即抽象方法)交由其子类去完成
仅仅抽象类可以包含抽象方法
抽象类是未完成的类 未完成的工作(即抽象方法)交由其子类去完成
仅仅抽象类可以包含抽象方法
抽象方法
仅仅写出了方法的修饰符、名字、参数、返回类型等,没有编写方法体(即没有方法实现)
仅仅写出了方法的修饰符、名字、参数、返回类型等,没有编写方法体(即没有方法实现)
原则
1. 抽象类不能被实例化,即不能创建具体对象
2. 抽象类可以包含普通方法(即有方法体)
3. 子类继承抽象类时,必须重写抽象方法,否则仍为抽象类
4. 抽象类可以继承其他抽象类
1. 抽象类不能被实例化,即不能创建具体对象
2. 抽象类可以包含普通方法(即有方法体)
3. 子类继承抽象类时,必须重写抽象方法,否则仍为抽象类
4. 抽象类可以继承其他抽象类
多态与抽象类
1. 之所以类可以包含抽象方法,是因为很多情况下,父类无法预期其各个子类的某一行为的具体表现形式(因为子类在这一行为上表现出了多种形态),仅仅只能给出这种行为的一般说明
2. 抽象类为子类规定了统一的形式(那些抽象方法),子类如果不想成为抽象类,必须去实现/重写抽象类(父类)的所有抽象方法。
1. 之所以类可以包含抽象方法,是因为很多情况下,父类无法预期其各个子类的某一行为的具体表现形式(因为子类在这一行为上表现出了多种形态),仅仅只能给出这种行为的一般说明
2. 抽象类为子类规定了统一的形式(那些抽象方法),子类如果不想成为抽象类,必须去实现/重写抽象类(父类)的所有抽象方法。
注意事项
优点:实现公共特性的提取,使具体类可以从抽象类自动得到缺省实现,复用性强,简化代码 缺点:单继承,使子类的功能的扩展性大打折扣
接口
是什么
描述具有同一个能力的多个事物
1. 接口是对abstract类的进一步扩展
2. 接口中的方法都是未实现的(抽象方法),目的是在实现接口的类之间建立一种协议
3. 接口中的变量都是常量
4. 接口变量默认都是“public static final”
描述具有同一个能力的多个事物
1. 接口是对abstract类的进一步扩展
2. 接口中的方法都是未实现的(抽象方法),目的是在实现接口的类之间建立一种协议
3. 接口中的变量都是常量
4. 接口变量默认都是“public static final”
接口与抽象类的异同点?
命名: 以able结尾,形容具备某种能力,见名知意
Object
万类之祖
Object 类的13个方法
异常
是什么
Exception:是指Java程序在运行时刻可能发生的错误。
异常是否发生,一般取决于程序要处理的数据,如:
1.除数是否为0 编程演示
1.要读写的文件是否存在
2.内存占用过多,虚拟机报错
异常是否发生,一般取决于程序要处理的数据,如:
1.除数是否为0 编程演示
1.要读写的文件是否存在
2.内存占用过多,虚拟机报错
为什么要有异常
设计良好的程序应该能处理异常,使得程序不会因为异常的发生而产生对用户不友好或非预期的结果。
流程
抛出(throw)
Java运行环境会生成一个该种异常的一个对象(该对象含有异常信息)
Java运行环境会生成一个该种异常的一个对象(该对象含有异常信息)
捕获(catch)
Java虚拟机接收到异常对象时,会寻找能处理这种异常的代码:
若有,则将上述异常对象交给该代码处理;若无,则由Java虚拟机做默认处理。
Java虚拟机接收到异常对象时,会寻找能处理这种异常的代码:
若有,则将上述异常对象交给该代码处理;若无,则由Java虚拟机做默认处理。
分类
Throwable:Java中错误和异常的父类。
Error:由Java虚拟机产生,程序不必处理(也处理不了)。
Exception:所有异常的父类,此类异常发生时,必须写代码来捕获和处理。(如
前述的 FileNotFoundException)
RuntimeException:运行时异常,产生较为频繁,若处理,会增加编程工作量,
所以,程序处不处理该类异常均可。(如前述的 ArithmeticException)
Error:由Java虚拟机产生,程序不必处理(也处理不了)。
Exception:所有异常的父类,此类异常发生时,必须写代码来捕获和处理。(如
前述的 FileNotFoundException)
RuntimeException:运行时异常,产生较为频繁,若处理,会增加编程工作量,
所以,程序处不处理该类异常均可。(如前述的 ArithmeticException)
常见异常
常见运行时异常(可不用捕获处理)
OutOfMemoryError 内存溢出
NullPointerException 空指针
IndexOutOfBoundsException 数组下标越界
NullPointerException 空指针
IndexOutOfBoundsException 数组下标越界
其他异常(需要捕获处理)
IOException 输入输出异常
SQLException SQL异常
ClassNotFoundException 类未找到
SQLException SQL异常
ClassNotFoundException 类未找到
异常与错误的理解
异常:指程序运行中出现的不期而至的各种状况
如文件找不到、网络连接失败、用户输入非法等。
影响了正常的程序执行流程,但不至于程序崩溃
错误:错误不是异常,而是脱离程序员控制的问题。
例如当栈溢出时,一个错误就发生了
如文件找不到、网络连接失败、用户输入非法等。
影响了正常的程序执行流程,但不至于程序崩溃
错误:错误不是异常,而是脱离程序员控制的问题。
例如当栈溢出时,一个错误就发生了
规则
1.父类的方法没有声明异常,子类在重写该方法的时候不能声明异常;
2.子类继承父类不能扩大异常的类型
2.子类继承父类不能扩大异常的类型
注意事项
1.只在必要使用异常的地方才使用异常,不要用异常去控制程序的流程
2.切忌使用空catch块
3.尽量捕获更具体的异常类
4.注意catch块的顺序
5.异常处理尽量放在高层进行,特别是高层提供数据有问题时
6. finally 块中永远不要抛出任何异常
2.切忌使用空catch块
3.尽量捕获更具体的异常类
4.注意catch块的顺序
5.异常处理尽量放在高层进行,特别是高层提供数据有问题时
6. finally 块中永远不要抛出任何异常
语法结构
try-catch-finally
try块放入调用方法的语句
catch块加入处理异常的代码
finally部分无论是否发生异常均被执行,常用于释放占用资源
finally中不要写return
catch块加入处理异常的代码
finally部分无论是否发生异常均被执行,常用于释放占用资源
finally中不要写return
try with-resources
JDK1.7开始,java引入了 try-with-resources 声明,将 try-catch-finally 简化为 try-catch,这其实是一种语法糖,在编译时会进行转化为 try-catch-finally 语句。新的声明包含三部分:try-with-resources 声明、try 块、catch 块。它要求在 try-with-resources 声明中定义的变量实现了 AutoCloseable 接口,这样在系统可以自动调用它们的close方法,从而替代了finally中关闭资源的功能
抛出异常
throws
函数声明,告诉调用者环境此函数的代码可能抛出某异常
throw
手动抛出指定异常
自定义异常
所有异常都必须是 Throwable 的子类。
如果希望写一个检查性异常类,则需要继承 Exception 类。
如果你想写一个运行时异常类,那么需要继承 RuntimeException 类。
如果希望写一个检查性异常类,则需要继承 Exception 类。
如果你想写一个运行时异常类,那么需要继承 RuntimeException 类。
IO
流的概念
输入、输出谐是流;数据传递谐是流;
键盘、屏幕、音箱、打印机、网络、USB等各种外围接口都用流作封装
键盘、屏幕、音箱、打印机、网络、USB等各种外围接口都用流作封装
IO类家谱
输入流 InputXXX。向程序提供数据
输出流 OutputXXX。 程序向外界提供数据
字节流:xxxxStream xxxxStream 。二进制数据
字符流:xxxReader xxxWriter 。字符数据
缓冲流:bufferedXXXXX 。读写速度不匹配
打印流:printStream printWriter 。指定输出格式
输出流 OutputXXX。 程序向外界提供数据
字节流:xxxxStream xxxxStream 。二进制数据
字符流:xxxReader xxxWriter 。字符数据
缓冲流:bufferedXXXXX 。读写速度不匹配
打印流:printStream printWriter 。指定输出格式
常量
操作系统磁盘目录分隔符
File.separator
桌面文件路径
System.getProperty()方法获取系统变量
System.getProperty("user.home")
FileSystemView是JFileChooser到文件系统的网关。
Java许可证持有者可能希望提供不同的FileSystemView实现来更好地处理给定的操作系统。
FileSystemView.getFileSystemView()..getHomeDirectory().toString()
File.separator
桌面文件路径
System.getProperty()方法获取系统变量
System.getProperty("user.home")
FileSystemView是JFileChooser到文件系统的网关。
Java许可证持有者可能希望提供不同的FileSystemView实现来更好地处理给定的操作系统。
FileSystemView.getFileSystemView()..getHomeDirectory().toString()
对象序列化/反序列化
序列化
将Java对象转换为字节序列,以便于存储或网络传输的过程。反之,将存储介质
或网络输入的字节序列转换为Java对象的过程叫反序列化。
将Java对象转换为字节序列,以便于存储或网络传输的过程。反之,将存储介质
或网络输入的字节序列转换为Java对象的过程叫反序列化。
持久化
将程序内存数据存入持久化介质的过程。或反之
将程序内存数据存入持久化介质的过程。或反之
语法
规则
Socket
是什么
网络内不同主机间的进程进行双向通信的端点
网络通信程序的API。
网络通信程序的API。
分类
TCP
是什么
传输控制协议。建立数据链路的双向通信。保证通信数据有序到达。其传输过程类似打电话
传输控制协议。建立数据链路的双向通信。保证通信数据有序到达。其传输过程类似打电话
实现步骤
UDP
是什么
数据报文协议 。建立数据报文,提交给网络。网络自行发送到目的地。属于不可靠传输。其传输过程类似信件邮递。
数据报文协议 。建立数据报文,提交给网络。网络自行发送到目的地。属于不可靠传输。其传输过程类似信件邮递。
实现步骤
正则表达式
是什么
概念:定义了一种字符串匹配模式、语法。这种语法可以。。。。
用途:数据输入验证:电子邮件地址格式;电话号码格式;身份证号码;。。
用途:数据输入验证:电子邮件地址格式;电话号码格式;身份证号码;。。
语法
语法:
句点、() 、[]与{}; 否、或; 匹配次数;转移\ ;
常用符号 \d \W \s ...
句点、() 、[]与{}; 否、或; 匹配次数;转移\ ;
常用符号 \d \W \s ...
使用
API: java.util.regex
Pattern、 Matcher
Pattern.compiler()
patter比较器匹配输入字符串返回True、false
Pattern、 Matcher
Pattern.compiler()
patter比较器匹配输入字符串返回True、false
集合
选用建议:
1 数据结构需求选型
(键值对、单值;FILO、FIFO、链表、散沙;是否存放重复值;排序)
2 是否支持多线程
3 读写性能?
1 数据结构需求选型
(键值对、单值;FILO、FIFO、链表、散沙;是否存放重复值;排序)
2 是否支持多线程
3 读写性能?
三种重点集合:
List:有序列表,元素可以重复
Map: 键值对 键不能重复
Set: 无序集、元素不重复
List:有序列表,元素可以重复
Map: 键值对 键不能重复
Set: 无序集、元素不重复
使用语法:
基本迭代 List Map :DIY
常规操作: 排序、搜索、Max、Min、截取
基本迭代 List Map :DIY
常规操作: 排序、搜索、Max、Min、截取
数据结构: 线性表、树*、图
比较和排序
Comparable 集合元素实现接口
Comparator 第三方实现接口,灵活
Collections.sort() Arrays.sort()
Comparator 第三方实现接口,灵活
Collections.sort() Arrays.sort()
HashSet与TreeSet使用场景
反射
是什么
反射的使用场合:框架读配置文件实例化bean、IDE中可视化编程; 测试中。。。
反射的使用场合:框架读配置文件实例化bean、IDE中可视化编程; 测试中。。。
语法:
Class
FIeld
Method
Consructor
Array:动态创建数组
Class
FIeld
Method
Consructor
Array:动态创建数组
使用
1 获得类结构信息
2 生成类对象
3 调用对象方法
缺点:运行性能低; 模糊了程序逻辑结构
1 获得类结构信息
2 生成类对象
3 调用对象方法
缺点:运行性能低; 模糊了程序逻辑结构
多线程
是什么
批处理系统、多任务系统
程序、进程、线程
批处理系统、多任务系统
程序、进程、线程
语法
继承 Thread 类、实现 Runnable 接口
通过start启动线程
继承 Thread 类、实现 Runnable 接口
通过start启动线程
概念
线程状态:新生 可运行、阻塞、死亡
线程优先级:setPriority
后台线程:setDeamon
创建后台线程的线程结束时,后台线程也随之消亡
join()
阻塞指定线程等到另一个线程完成以后再继续执行
sleep()
使线程停止运行一段时间,将处于阻塞状态
阻塞的时间由指定的毫秒数决定
yield()
让当前正在执行的线程暂停
该方法不会阻塞线程,而是将线程转入可运行状态
线程状态:新生 可运行、阻塞、死亡
线程优先级:setPriority
后台线程:setDeamon
创建后台线程的线程结束时,后台线程也随之消亡
join()
阻塞指定线程等到另一个线程完成以后再继续执行
sleep()
使线程停止运行一段时间,将处于阻塞状态
阻塞的时间由指定的毫秒数决定
yield()
让当前正在执行的线程暂停
该方法不会阻塞线程,而是将线程转入可运行状态
数据库
MySQL
关系型数据库
创建数据库; CREATE DATABASE 数据库名 ...;
drop database <数据库名>;
drop database <数据库名>;
建表、
主键:唯一标识每个数据
索引:提高查询速度
视图:
触发器:
存储过程 :
主键:唯一标识每个数据
索引:提高查询速度
视图:
触发器:
存储过程 :
查询语句:
数据结构定义: DDL
create table table_name (column_name column_type,...);
drop table table_name ;
alter table ...
数据结构定义: DDL
create table table_name (column_name column_type,...);
drop table table_name ;
alter table ...
数据操作: DML
insert into tablename()values()
delete from tablename where...
update tabbeName set ... where..
insert into tablename()values()
delete from tablename where...
update tabbeName set ... where..
JDBC
是什么
JDBC(Java Database Connectivity,java数据库连接),是一种执行SQL语句的Java API,
由一些接口和类构成的API。
J2SE的一部分,由java.sql,javax.sql包组成(查看JDK文档)
JDBC(Java Database Connectivity,java数据库连接),是一种执行SQL语句的Java API,
由一些接口和类构成的API。
J2SE的一部分,由java.sql,javax.sql包组成(查看JDK文档)
步骤
注册驱动 (只做一次)
建立连接(Connection)
创建执行SQL的语句(Statement)
执行语句
处理执行结果(ResultSet)
释放资源
注册驱动 (只做一次)
建立连接(Connection)
创建执行SQL的语句(Statement)
执行语句
处理执行结果(ResultSet)
释放资源
防止SQL注入
预处理 PrepareStatement
预处理 PrepareStatement
数据库事务
ACID
原子性
一致性
隔离性
持久性
一致性
隔离性
持久性
1.事务
connection.setAutoCommit(false);//打开事务。
connection.commit();//提交事务。
connection.rollback();//回滚事务。
connection.setAutoCommit(false);//打开事务。
connection.commit();//提交事务。
connection.rollback();//回滚事务。
2.保存点
当只想撤销事务中的部分操作时可使用SavePoint
SavePoint sp = connection.setSavepoint();
connection.rollerbak(sp);connection.commit();
当只想撤销事务中的部分操作时可使用SavePoint
SavePoint sp = connection.setSavepoint();
connection.rollerbak(sp);connection.commit();
3.JTA
跨越多个数据源的事务,使用JTA容器实现事务。
分成两阶段提交。
javax.transaction.UserTransaction tx = (UserTransaction)ctx.lookup(“jndiName");
tx.begin();
//connection1 connection2 (可能来自不同的数据库)…
tx.commit();//tx.rollback();
跨越多个数据源的事务,使用JTA容器实现事务。
分成两阶段提交。
javax.transaction.UserTransaction tx = (UserTransaction)ctx.lookup(“jndiName");
tx.begin();
//connection1 connection2 (可能来自不同的数据库)…
tx.commit();//tx.rollback();
事务隔离级别
connection.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);
V:可能出现,X:不会出现
connection.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);
V:可能出现,X:不会出现
存储过程
CallableStatement(从PreperedStatement扩展来)
cs = connection.prepareCall(“{call psname(?,?,?)}”);
cs.registerOutParameter(index, Types.INTEGER);
cs.setXXX(i, xxxx);
cs.executeUpdate();
int id=cs.getInt(index);
CallableStatement(从PreperedStatement扩展来)
cs = connection.prepareCall(“{call psname(?,?,?)}”);
cs.registerOutParameter(index, Types.INTEGER);
cs.setXXX(i, xxxx);
cs.executeUpdate();
int id=cs.getInt(index);
其他API
1.得到新增主键值
PreparedStatement.getGeneratedKeys()
2.批处理,可以大幅度提升大量增、删、改的速度。
PreparedStatement.addBatch();
PreparedStatement.executeBatch();
3 和4 代价高(数据库游标实现)
3.可滚动的结果集
4.可更新的结果集
5. 数据库元信息
DatabaseMetaData和ParameterMetaData
数据库和数据集
1.得到新增主键值
PreparedStatement.getGeneratedKeys()
2.批处理,可以大幅度提升大量增、删、改的速度。
PreparedStatement.addBatch();
PreparedStatement.executeBatch();
3 和4 代价高(数据库游标实现)
3.可滚动的结果集
4.可更新的结果集
5. 数据库元信息
DatabaseMetaData和ParameterMetaData
数据库和数据集
数据源和连接池
网络爬虫
分类
1.通用网络爬虫
深度优先策略
广度优先策略
2.聚焦网络爬虫
3.增量式网络爬虫
4.深层网络爬虫
1.通用网络爬虫
深度优先策略
广度优先策略
2.聚焦网络爬虫
3.增量式网络爬虫
4.深层网络爬虫
爬虫与反爬
Java实现
HttpClient
Jsoup
HttpClient
Jsoup
Mybatis
是什么
轻量级ORM框架。
特点:自由度高;自定义映射、自定义sql。。
轻量级ORM框架。
特点:自由度高;自定义映射、自定义sql。。
配置文件
连接数据库信息
Mapper的位置
连接数据库信息
Mapper的位置
Mapper文件
每个表的 CURD方法封装
仅接口描述,实现类mybatis自动生成、调用(底层技术:反身寸)
每个表的 CURD方法封装
仅接口描述,实现类mybatis自动生成、调用(底层技术:反身寸)
映射文件
数据表与实体类(bean)的对应关系
mybatis自动生成实体类对象 并(根据映射文件)调用实体setter方法将数据存入实体类对象
实体类(bean):承载mabatis从数据库取得的数据;
数据表与实体类(bean)的对应关系
mybatis自动生成实体类对象 并(根据映射文件)调用实体setter方法将数据存入实体类对象
实体类(bean):承载mabatis从数据库取得的数据;
动态SQL
要执行的SQL语句
mybatis“特色”语法的SQL书写(重点)
parameterType: 参数类型
resultType: resultMap 结果类型
动态SQL使用 IF choose foreach
要执行的SQL语句
mybatis“特色”语法的SQL书写(重点)
parameterType: 参数类型
resultType: resultMap 结果类型
动态SQL使用 IF choose foreach
整合Spring
spring帮助mybatis管理bean
spring帮助mybatis管理bean
反向工程
pom:依赖项
pom:插件
修改生成策略xml
运行maven中的插件:mybatis-generator:genaerntor
生成结果检测:实例类、映射文件、CRUD接口
pom:依赖项
pom:插件
修改生成策略xml
运行maven中的插件:mybatis-generator:genaerntor
生成结果检测:实例类、映射文件、CRUD接口
Spring
概念:
Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。
Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。
特点
1、轻量
物理内存/运行内存占用小 非侵入式(动态代理模式)
2、控制反转Ioc
松耦合 也叫DI:依赖注入;
松耦合、解耦合:开发设计的永远方向
3、面向切面
分离业务逻辑与系统级服务
例如审计(auditing)、事务(transaction)管理、日志 Logging、全局异常配置
4、容器
Spring包含并管理应用对象的配置和生命周期
5、框架
简单的组件配置、组合成为复杂的应用。
应用对象被声明式地组合,典型地是在一个XML文件里。
提供了很多基础功能(事务管理、持久化框架集成等等)
1、轻量
物理内存/运行内存占用小 非侵入式(动态代理模式)
2、控制反转Ioc
松耦合 也叫DI:依赖注入;
松耦合、解耦合:开发设计的永远方向
3、面向切面
分离业务逻辑与系统级服务
例如审计(auditing)、事务(transaction)管理、日志 Logging、全局异常配置
4、容器
Spring包含并管理应用对象的配置和生命周期
5、框架
简单的组件配置、组合成为复杂的应用。
应用对象被声明式地组合,典型地是在一个XML文件里。
提供了很多基础功能(事务管理、持久化框架集成等等)
配置管理演变历史:
1 写死的代码常量(硬编码);
耦合性太高 运行期无法改变
2 xml 、property、json;
运行期可以改变 松耦合
3 注解 ;
方便 让框架帮助我们解耦
1 写死的代码常量(硬编码);
耦合性太高 运行期无法改变
2 xml 、property、json;
运行期可以改变 松耦合
3 注解 ;
方便 让框架帮助我们解耦
Ioc
定义
在spring配置中定义bean
(运行spring程序,spring读取配置文件,自动创建bean对象存入Ioc容器)
应用项目中通过Autowrited注解注入Ioc中的bean到使用的代码处
在spring配置中定义bean
(运行spring程序,spring读取配置文件,自动创建bean对象存入Ioc容器)
应用项目中通过Autowrited注解注入Ioc中的bean到使用的代码处
语法
1、bean的生成:无参构造、有参构造
2、bean的配置 id name alias
3、import
4、注解方式
@Required @Autowired @Qualifier
5、指定被Ioc管理的类
配置文件+扫描包+注解
1、bean的生成:无参构造、有参构造
2、bean的配置 id name alias
3、import
4、注解方式
@Required @Autowired @Qualifier
5、指定被Ioc管理的类
配置文件+扫描包+注解
常用注解
@Component
@Service 服务层
@Controller 控制层
@Repository 数据访问层
@Configuration 配置文件
@bean 方法上 new 要加入bean的
@Component
@Service 服务层
@Controller 控制层
@Repository 数据访问层
@Configuration 配置文件
@bean 方法上 new 要加入bean的
@Required @Autowired @Qualifier的使用
@Required 注解适用于 bean 属性的 setter 方法
@Autowired(required=false) setter, 构造器, 成员变量自动注入
@Autowired 和 @Qualifier("bean的id") 一起使用
@Required 注解适用于 bean 属性的 setter 方法
@Autowired(required=false) setter, 构造器, 成员变量自动注入
@Autowired 和 @Qualifier("bean的id") 一起使用
@Resource注释、@PostConstruct和@PreDestroy的使用与问题
javax.annotation.Resource 不是Spring的
当多个bean类名相同时使用
@PostConstruct和@PreDestroy
这两个注解修饰的方法会在bean初始化和销毁的时候调用。
javax.annotation.Resource 不是Spring的
当多个bean类名相同时使用
@PostConstruct和@PreDestroy
这两个注解修饰的方法会在bean初始化和销毁的时候调用。
Spring 中@Component 和@Bean 的区别
@Component 注解作用于类,而@Bean注解作用于方法
@Component 注解作用于类,而@Bean注解作用于方法
IOC 和 DI 有无关系?如果有,是什么关系?
利用 dom4j 模拟spring ioc实现
Aop
是什么
代理方式,代码的灵活扩展
一方(对象)代替另一方(对象)实现功能
代理方式,代码的灵活扩展
一方(对象)代替另一方(对象)实现功能
两种方式
1、jdk 方式借助 jdk 中提供的类(java.lang.reflect.Proxy)、接口等功能实现;
2、cglib 方式属于框架提供 这种代理方式不需要接口,只需要类(项目没有接口,只有类)
1、jdk 方式借助 jdk 中提供的类(java.lang.reflect.Proxy)、接口等功能实现;
2、cglib 方式属于框架提供 这种代理方式不需要接口,只需要类(项目没有接口,只有类)
核心概念
通知(Advice): AOP 框架中的增强处理。通知描述了切面何时执行以及如何执行增强处理。
连接点(Join point): 连接点表示应用执行过程中能够插入切面的一个点,这个点可以是方法的调用、
异常的抛出。在 Spring AOP 中,连接点总是方法的调用。
切点(PointCut): 可以插入增强处理的连接点。
切面(Aspect): 切面是通知和切点的结合。
织入(Weaving): 将增强处理添加到目标对象中,并创建一个被增强的代理对象
通知(Advice): AOP 框架中的增强处理。通知描述了切面何时执行以及如何执行增强处理。
连接点(Join point): 连接点表示应用执行过程中能够插入切面的一个点,这个点可以是方法的调用、
异常的抛出。在 Spring AOP 中,连接点总是方法的调用。
切点(PointCut): 可以插入增强处理的连接点。
切面(Aspect): 切面是通知和切点的结合。
织入(Weaving): 将增强处理添加到目标对象中,并创建一个被增强的代理对象
作用
作用:业务代码 <--解耦--> 样板代码\系统功能代码
作用:业务代码 <--解耦--> 样板代码\系统功能代码
事务注解
@Transactional
@Transactional
SpringMVC
MVC是什么
是一种设计模式。它将应用划分三类模块
是一种设计模式。它将应用划分三类模块
请求流程
作用
将视图和业务解耦合;独立开发、独立维护;
我们的web开发分为前端、后台;可归功于MVC架构;
将视图和业务解耦合;独立开发、独立维护;
我们的web开发分为前端、后台;可归功于MVC架构;
Web开发基础问题
HTTP协议:单向。浏览器(客户端)发请求,WEB服务器做出响应返回数据;
WEB服务器不能向客户端主动返回数据;(解决方案:webscoket)
HTTP协议:单向。浏览器(客户端)发请求,WEB服务器做出响应返回数据;
WEB服务器不能向客户端主动返回数据;(解决方案:webscoket)
Http请求流程
客户端----> 服务器WEB容器(8080)---->某WEB应用(web.xml)
web.xml -----Servlet类---doGet|doPost|doDelete--->返回数据给客户端
客户端----> 服务器WEB容器(8080)---->某WEB应用(web.xml)
web.xml -----Servlet类---doGet|doPost|doDelete--->返回数据给客户端
基于Spring的WEB请求流程
客户端----> {服务器WEB容器(8080)---->某WEB应用(web.xml)
web.xml(所有请求映射给spring一个处理类 )}---->Controller类
注:{}内的部分被springboot封装了;
客户端----> {服务器WEB容器(8080)---->某WEB应用(web.xml)
web.xml(所有请求映射给spring一个处理类 )}---->Controller类
注:{}内的部分被springboot封装了;
SpringBoot
定义
SpringBoot是一个服务于框架整合与配置的框架,目标是简化配置文件
SpringBoot是一个服务于框架整合与配置的框架,目标是简化配置文件
SpringBoot集成Mybatis
@MapperScan
@MapperScan
IDEA+SpringBoot+Maven构建项目
其中的依赖项:有父子继承关系;展开来说就是帮助我们管理一堆堆jar
其中的依赖项:有父子继承关系;展开来说就是帮助我们管理一堆堆jar
yml解释
收藏
0 条评论
下一页