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