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