Java后端开发学习路线
2022-06-05 20:17:10 78 举报
AI智能生成
Java后端开发学习路线包括以下几个阶段:1. Java基础语法和面向对象编程;2. 数据库基础知识和SQL语句编写;3. Web开发技术,如HTML、CSS、JavaScript等;4. Servlet和JSP技术,用于构建Web应用程序;5. Spring框架,用于管理Java应用程序的依赖关系和事务处理;6. Hibernate框架,用于实现对象关系映射(ORM)和持久化数据;7. MyBatis框架,用于简化数据库操作;8. Spring Boot框架,用于快速构建基于Spring的应用程序;9. 分布式系统和微服务架构。
作者其他创作
大纲/内容
编程基础
Java语言(javaSE)
语言基础 图形化(Swing)/省略
基础语法
常量和变量
注释
// /**/ /***/
关键字
常量
字面值常量
5大普通常量(整,小,串,字符,布)+空常量
自定义常量
finnal
变量
概念
在程序的运行过程中其值可以在某个范围发生改变的量
变量的本质是内存中的一小块区域被
数据类型 变量名 = 初始化值
数据类型(限制变量的变化范围)
数据类型
基本类型
byte:一个字节 -2^7~2^7-1 -128~128(十进制)
short:两个字节 两个字节 -2^15~2^15-1
int:4个字节 -2^31~2^31-1
long:8个字节 -2^63~2^63-1
double:8个字节 1.7*10^(-308)~1.7*10^(+308)
char:2个字节 0~2^16-1
boolean:一个字节 true,false
float:4个字节 3.4*10^(-38)~3.4*10^(+38)
(优化内存)
计算机中最小的储存单元是字节(Byte“B”),每个字节包含8个位(bit“比特”)
1B = 8bit 1KB = 1024B 1MB = 1024KB
引用类型
类
接口
数组
类型转换
自动类型转换
小转大
强制类型转换
大转小“目标类型 变量名 = (目标类型)大类型数据”
标识符
运算符
算数运算符
+ - * / % ++ --(表达式类型就是表达式结果类型)
'0'=48,'9'=57.'A'=65,'Z'=90.'a'=97,'z'=122
赋值运算符
基本赋值运算符
=
扩展赋值运算符
好处:省略了强制类型转换的操作
+=
-=
/=
*=
%=
关系运算符
==
<
>
>=
<=
!=
逻辑运算符
&& : 逻辑与,并且
|| : 逻辑或,或者
! : 逻辑非,表示否定
三元运算符
(关系表达式)?表达式1:表达式2;
流程控制
顺序结构
从上往下,从左往右
选择结构
if区间值判断
switch固定值判断
switch(值)
循环结构
for
while
do while
方法(函数)
1.方法名
2.返回值类型
3.参数列表(引用类型或基本类型)
4.修饰符
方法调用(注意输出)
方法重载
方法名相同,其他不同 案例:全参构造,空参构造
数组
概念
存储同一种数据类型多个元素的容器
可以是基本类型也可以是引用类型
格式
数据类型 [] 数组名 = new 数据类型[长度]
数据类型 [] 数组名 = new 数据类型[]{元素1,元素2,.....}
数据类型 [] 数组名 = {元素1,元素2,.....}
面向对象
抽象类
abstract
方法必须全部重写
封装
定义
将一系列相关事务共同的属性(变量)和行为(方法)提取出来,放到一个类中,隐藏(private)对象的属性和实现细节, 仅对外提供公共的访问方式(set,get)
绝不能让其它类中的直接访问类中的数据(变量)程序仅仅通过对象的方法与对象的数据进行交互(this)
继承
extends
子类 对名 = new 子类
体现“是一个”
多态
父类 对名 = new 子类
重写
接口
一个功能
接口名 对象名 = new 实现类
普通类,抽象类,必须重写所有方法
变量为“公共的静态的常量”
public abstract
implements
API常用类
Object
Object()//构造方法
hashCode()//获取对象的哈希码值
equals()//比较两个对象是否相等
toString()//获取对象的字符串形式
getClass()//获取对象的字节码文件
Scanner
Scanner(InpuStream)
hasNextXxx()//判断是否有下一个输入项
nextXxx()//返回下一个输入项
nextLine()//String形的,获取下一“行”数据
next()//获取下一“个”输入 项
String
String(byte[])
String(char[])
equalsIgnoreCase(String)
startWith(String)
isEmpty()
length()
charAt(int )
indxOf(String)
lastIdexOf(String)
Substring(int)
substring(int,int)
getBytes()
toCharArray()
ValueOf(...)
replace(old,new)
split(String)
trim()
equals(String)
StringBuilder
StringBuilder()
StringBuilder(String)
append()
toString()
reverse()
基本类的包装类
装箱 ,拆箱
Integer.parseInt(String)
Double.parseDouble(String)
.....................
APL文档网址
Java简单的程序设计的程度,在另一方面说明了API的使用程度
关键字
break(终止一层循环)
continue(结束本次循环,继续下次循环)
return(结束整个方法)
集合
单列集合
collection接口
Iist集合(接口)
ArrayList(实现类)
应用(实例化)List l = new ArrayList()(多态)
特点:可重复,有序(存取顺序相同)
Set集合(接口)
HashSet(实现类)
不可重复,无序
Set <T> s = new HashSet<>();
唯有重写equals和hashCode才可去重
add();get(x);
collections(工具类)
sort(List<T(类型)>) 根据元素的自然顺序,将指定列表按升序排序
max(Collection<T>) 返回集合的最大元素
reverse(List<T>) 反转List集合元素
shuffle(List<T>) 使用默认的随即源随机置换指定的列表
双列集合
Map集合(接口)
HashMap(实现类)
元素由键值对(Entry)构成
key(键“唯一性”)不可以重复,value(值)可以重复
Map<T1,T2> m = new HashMap<>();
put();keySet();get();iterator();
使用集合的步骤
1,创建集合对象
2,创建元素对象
3,将元素对象添加到集合对象中
4,遍历集合
增强for循环
格式
迭代器
iter
转型
迭代器对象: Iterator it = list.iterator();//再遍历集合的同一时刻不可添加或者删减元素(不可并发修改)
列表迭代器对象: ListIterator it = list.listIterator();必须调用列表迭代器的方法实现
列表迭代器可避免并发修改异常
hasNext() next()
泛型
即任意类型,又叫参数类型,对具体类型起到辅助作用
表示该集合中存放指定类型的元素
1.类型安全 2.代替了手动类型转换
泛型一般只和集合类结合使用
演示: List<String> t = new ArrayList<>();
异常
概述
即非常情况,异常就是程序出现的错误
分类
Throwable(顶层)
(可能)Exception(可预料的)
合理的应用程序可能需要捕获的问题
(错误)Error(不可预料的)
合理的应用程序不应该捕获的问题
处理方式
JVM默认方式
在控制台打印错误信息,并终止程序
开发中处理方式
try.....catch(finally)
捕获,自己处理
finally高于retuen
throws
抛出,交给调用者(即调用方法者)自己处理
ALT+回车 如果一个类或接口中的方法没有抛异常,那么他们的子类或实现类重写的方法就不能抛异常,必须要自己trycatch
IO
概念“作用
用来做数据传输的一项技术,方式
I(Input),O(output)
输入流:读数据 输出流:写数据
在本地磁盘和网络上操作数据
分类
流向
输入流(读取数据)
输出流(往外写数据)
操作方式
字符流
Reader(抽象类)
FileReader类(普通字符输入流)
BufferedReader类(高效字符输入流)
Writer(抽象类)
FileWriter类(普通字符输出流)
BufferedWriter类(高效字符输出流)
字节流
InputStream(抽象类)
FileInputStream类(普通字节输入流)
BufferedInputStream类(高效字节输入流)
OutputStream(抽象类)
FileOutputStream类(普通字节输出流)
BufferedOutputStream类(高效字节输出流)
File类
概念
文件,文件夹,一个File对象代表代表磁盘上的某个文件或文件夹
构造方法
File(String pathname)
:\\x\\
:/x/
File(String parent,String child)
File(File parent,String child)
成员方法
创建
createNewFile():创建文件
mkdir()“单级”,mkdirs()“多级”,:创建目录(文件夹)
如果不存在就创建,返回true。否则不创建,返回false
判断
isDirectory():判断File对象是否为目录“文件夹 ”
isFile(),:判断File对象是否为文件
exists():判断File对象是否存在
获取
getAbsolutePath():
获取绝对路径
绝对路径:以盘符开头的路径
getPath();
获取相对路径
相对路径:一般是相对于当前项目路径来讲的
getName();
获取文件名
list();
获取指定目录下所有文件名或者文件夹名称数组(String)"一级"
listFiles();
获取指定目录下所有文件或者文件夹(名字)File数组(File)”多级,多功能“
字符流
读
Reader r = new FileReader("路径");
方法
异常处理;IOException
int x = r.read(); (注意:read出现一次读写一次)读取一个字符,返回该字符代表的整数,若到达流的末尾,返回—1
r.close();关闭资源
char [] chs = new char[长度];
int len = r.read(chs);一次读写一个字符数组 (返回读到的有效字符的个数)
写
Writer w = new FileWriter("文件名")
方法
异常处理;IOException
void write(int ch) :一次写一个字符
void write(char[] chs,int indx,int len):一次写一个指定的字符数组(indx起始字符)
void write(String str):一次读写一个字符串
w.close();释放资源
拷贝文件(Rreader读Writer写)一次读一个字符
代码
如果目的地文件不存在,程序会自动创建
拷贝文件(Rreader读Writer写)一次读一个字符数组
代码
字符缓冲流Buffered
普通用法(拷贝文件)
一次读写一行
字符流只能拷贝纯文本文件
普通字节流(拷贝文件)
一次读写一个字节
一次读取一个字节数组
高效字节流(拷贝文件)
用不同方式实现字节流,字符流读写文件
JVM虚拟机
类加载机制
字节码执行机制
JVM内存模型
GC垃圾回收
JVM性能监控与故障定位
JVM调优
概念
定义
1.在软件层面屏蔽不同操作系统在底层硬件与指令的区别
2.Java程序的运行环境(Java二进制字节码的运行环境)
好处
1.一次编写,到处运行
2.自动内存管理
3.数组下标越界检查
4.多态
组成
1.类装载子系统
2.运行时数据区(内存区)
1.元空间(方法区)
2.堆
3.虚拟机栈(线程)
概念:线程运行需要的内存空间,方法运行时使用的内存
一个线程需要一个虚拟机栈,多个线程需要多个虚拟机栈
一个栈内是由多个栈帧组成(一个栈帧就代表一个方法的调用运行时需要的内存(先进后出))
每个线程只能有一个活动栈帧,对应着当前正在执行的那个方法
如果方法内局部变量没有逃离方法的作用访问,他是线程安全的
如果是局部变量引用了对象,并逃离方法的作用方法,需要考虑线程安全
4.程序计数器(寄存器)
作用:记住下一条jvm指令的执行地址,然后解释器直接根据计数器取下一条jvm指令
特点:
1.线程私有,每个线程都有自己的计数器
2.不会出现内存溢出
5.本地方法栈
3.字节码执行引擎
反射
基本概念
在程序运行期间,根据类的字节码文件对象来获取类的成员并使用的一项技术
类加载器
概念:负责将类的字节码文件(.class)加载到内存中,并生成对应的Class对象
运行场景:1.创建类的实例 2.访问某个类的静态成员 3.初始化子类 4.反射方式创建类的Class对象
Class是一个类(其对象被称为字节码文件对象 Java.long.Class)
每个Class对象对应一个字节码文件
.class是类的字节码文件后缀
Class对象可以获取构造器对象
常用函数
静态函数 forName("类的正名")
getConsturctor(Class<?>...parameterTypes)
getDeclaredConsturctor(Class<?>...parameterTypes)
getConsturctors()
getMethod(String name,Class<?>...ParameterTypes)
getDeclaredMethod(String name,Class<?>...parameterTypes)
getMethods()
getField(String name)
getDeclaredField(String name)
getDeclaredFields()
Constructor<T>类
1.其对象称为构造器对象,属于java.base模块、java.lang.reflact包
常用函数
String getName()
T newInstance(Object...initargs)
Method类
常用函数
String getName()
Object invoke(Object obj,Object...args)
Field类
常用函数
void set(Object obj,Object value)
void setAccessible(boolean flag)
作用
通过类加载器分析类
加载并初始化一个类
查看类的所有属性和方法
查看并使用对象
查看一个对象的所有属性和方法
使用对象的任意属性和方法
应用场景
构建通用的工具
搭建具有高度灵活性和扩展性的系统框架
用法
1.先获取Class对象
根据对象获取
根据类名获取
根据类名字符串获取
获取Class对象的三种方式
1. 对象名.getClass();
2. 类名.class;(依据类的静态属性)
3. Class类的静态方法 Class.forName("类的正名")
再使用
获取构造方法并使用
2通过Class对象获取构造器对象
3.根据构造器对象和参数,创建对应的目标对象
newInstance(Object...initargs)
4.打印结果
使用成员方法
2通过Class对象获取构造器对象
3.根据构造器对象和参数,创建对应的目标对象(newInstance(Object...initargs))
4.获取该类成员方法对象,然后调用此方法
5.打印结果
使用成员变量
2通过Class对象获取构造器对象
3.根据构造器对象和参数,创建对应的目标对象
4.设置目标对象的各个变量值
计算机协议
APP协议
IP协议、ICMP协议
TCP、UDP协议
DNS/HTTP/HTTPS协议
Session/Cookie
网络编程
网络编程三要素
1.IP地址
IPv4
IPv6
常用命令
ipconfig
ping IP地址
127.0.0.1
InetAddress类
Static getByName(String host)
String getHostName()
String getHostAddress()
2.端口
端口号
3.协议
UDP协议
发送端
1.创建发送端的DatagramSocket对象
2.创建数据,并把数据打包(DategramPacket)
3.调用DatagramSocket对象的方法发送数据
4.释放资源
接收端
1.创建接受端的DatagramSocket对象
2.创建“箱子”,用于接收数据(DatagramPacket)
3.调用DatagramSocket对象的方法接收数据并把数据打包
4.解析数据包,并把数据打印在数据台
5.释放资源
实例
UDP的三种通信方式
单播
详解在上面发送端备注里
组播
组播代码实现步骤
广播
广播代码实现步骤
子主题
TCP协议
客户端(发送端)
1.创建客户端的Socket对象与指定的服务器连接
2.获取输出流,写数据
3.释放资源
服务器端(接收端)
1.创建的服务器端的SeverSocket对象
2.监听客户端连接,返回一个Socket对象
3.获取输入流读数据,并把数据打印在控制台上
4.释放资源
主体代码
执行流程
1.先执行服务器端Socket对象
2.执行到appect()方法,等待与客户端建立连接,开始执行客户端所有代码
3.读取数据,然后关闭两端通道
流程图
三次握手
子主题
四次挥手
子主题
实例联系
例1
客户端
服务器端
例2
客户端
服务器端
多线程
相关概念
*.(多线程技术就是同时执行多个应用程序)是指从软件或硬件上实现多个线程并发执行的技术
*.(多线程技术需要硬件的支持)具有多线程能力的计算机因有硬件支持而能够在同一时间执行多个线程,提升性能、
并行
在同一时刻,多个指令在多个CPU上“同时”执行
并发
在同一时刻,多个指令在单个CPU上“交替”执行
进程
正在运行的软件(应用程序)
1.独立性:进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位
2.动态性:进程的实质是指程序的一次的执行过程,进程是动态产生,动态消亡的
3.并发性:任何进程都可以同其他进程一起并发执行
线程
是进程中的单个顺序控制流,是一条执行路径
单线程:一个进程如果只有一条执行路径,则称为单线程程序
多线程:一个进程如果只有多条执行路径,则称为多线程程序
Thread线程类,一个thread对象就是一个线程对象。run函数是通过start函数调用的
运行底层过程
start()函数:给予调用它的线程对象执行资格(只有执行资格没有执行权,执行权需要靠其线程对象本身去和CPU抢)
实现方案
1.继承Thread类
重写run()
多线程开启后执行的是run方法里面的代码
run方法是用来封装被线程执行的代码(不可直接调用)
start
启动线程;然后由JVM调用此线程的run()方法
2.实现Runnable接口
1.定义一个x类实现Runnable接口
2.在定义的x类中重写run()
3.创建定义的x类的对象(创建了一个参数的对象)
4.创建Thread类的对象(创建了一个线程的对象),把x对象作为构造方法的参数传递给各个线程
5.启动线程
Callable接口和Future接口
1.创建Callable接口实现类X
注意Callable接口泛型,这里泛型表示返回值的数据类型
2.在X类中重写call()
call方法有返回值,表示线程完毕之后的结果
3.创建X类的对象
4.创建FutureTast类的对象,将X类对象作为FutureTast类对象构造方法的参数
FutureTast类是Future接口的实现类
FutuerTast类有泛型,泛型与Callable接口泛型保持一致
5.创建Thread类的对象,将FutureTast类对象作为Thread类对象构造方法的参数
6.启动线程
Therad对象.start();
7.获取线程完毕结果
FutureTast对象.get(); (千万不可在start()之前调用)
需要用相应类型获取FutureTast对象.get(),然后打印
三种实现方式优缺点对比
Runnable接口,Callable接口
优点
扩展性强,实现该接口的同时还可以继承其他的类
缺点
编程比较复杂,不能直接使用Thread类中的方法
继 承 T h r e a d 类
优点
编程比较简单,可以直接使用Thread类中的方法
缺点
可扩展性差,不能在继承其他的类
线程类(Thread)的常见方法
获取名称
getName(); 返回此线程的名称
有默认名字Thread-编号
设置名字
setName(String name);将此线程名称更改为参数name
1.可在实现类中直接调用
2.可以在子类调用父类构造方法,然后通过构造方法设置线程名称
获取当前线程的对象
public static Thread currentThread();
返回对当前正在执行的线程对象的引用
currentThread()可以调用getName()获取对象名称
适用与Runnable接口和Callable接口(因为他们不可以直接调用Thread里的私有方法)
如果一个类或者接口中的方法没有抛出异常,那么他的子类或者实现类重写的方法就必须自己try catch异常(依然可用ALT+回车)
线程休眠
public static void sleep(long time):让线程休眠指定的时间,单位为毫米秒
守护线程/后台线程/备胎线程
public final void steDaemon(boolean on)
设置为守护(服务线程或者副线程)线程
守护线程:当普通线程执行完毕之后,守护线程也没有执行下去的必要(因为CPU的关系,备胎线程不会立马结束,会针扎一会)
线程调度
线程并发运行
分时调度模型
所有线程轮流使用CPU的使用权,平均分配每个线程占用CPU的时间片
抢占式调度模型
优先让优先级高的线程使用CPU,如果线程的优先级相同,那么会随机选一个。优先级高的线程获取的CPU时间片相对多一些
public final void setPriority(int newPriority):设置线程的优先级
public final int getPriority():获取线程的优先级
线程的生命周期(多线程中,执行任意一行代码时,其执行权都有可能被抢走)
多线程的安全问题(锁)
来源:一般是由操作共享数据时争夺CPU的执行权引起的
同步代码块
代码
同步方法
格式: 修饰符 synchronized 返回值类型 方法名 (参数){}
与同步代码块的区别
1.同步代码块可以锁住指定代码,同步方法是锁住方法中的所有代码
2.同步代码块可以指定锁对象,同步方法不能指定锁对象
例子
同步方法的锁对象是this
静态同步方法的锁对象是“类名.class”
Lock接口
实现类:ReentrantLock
实例
死锁
实例
生产者消费者(等待唤醒机制)
思路分析
等待和唤醒的函数(Object类里)
void wait() : 使当前线程进入等待状态,直到另一个线程对象唤醒(直到另一个对象调用notify()或notifyAll()
void notify():唤醒正在等待状态的一个线程
void notifyAll():唤醒正在等待状态的所有线程
自主设计例一
例一面向对象版
并发容器
原子类
JUC并发工具类
线程池
数据结构和算法
数据结构
字符串
数组
堆、栈、队列
二叉树
哈希
图
线性表
顺序表
链表
算法
simple
comparable接口
冒泡
相邻的元素进行比较(换位)
创建API
选择
与最小值索引换位排序
API
插入
common
API
逆置
complex
希尔排序
common
API
归并
递归排序
分治
快速排序
设计模式
相关
设计模式概述
软件设计模式产生背景
软件设计模式概念
学习设计模式的必要性
设计模式分类
创建型模式
结构型模式
行为型模式
UML图
UML类图
概述
作用
表示方式
关联关系
一般关联关系
单向关联
双向关联
自关联
聚合关系
组合关系
依赖关系
继承关系
实现关系
软件设计原则
开闭原则
里氏代换原则
依赖倒转原则
接口隔离原则
迪米特法则
合成复用原则
创建者模式5
单利
原型
工厂方法
抽象工厂
建造者
结构型模式7
代理
适配器
桥接
装饰者
外观
享元
组合
行为型模式11
模板方法
策略
命令
责任链
状态
观察者
中介者
迭代器
访问者
备忘录
解释器
综合实例
自定义Spring框架
分析Spring核心功能结构
确定Spring核心功能使用的设计模式
功能实现
Spring IOC
SQL/数据库
数据库概念
关系型数据库
非关系型数据库
数据库术语
DBMS
DBA
DBS
MySQL启动与关闭
CMD管理员
net stop mysql
net start mysql
此电脑--》管理---》服务
MySQL的管理工具
可视化工具 : SQLyog、 Navicat
自带的命令行工具: mysql Command line Client
常用命令
`1Cd
Mysql逻辑结构
SQL
基本语法
在mysql Command line Client或者Navicat等工具中都可以编写SQL语句
SQL指令不区分大小写
每条SQL指令结束都以分号结尾
SQL指令与指令之间以空格进行分割
SQL指令不限制换行
数据类型
数值类型
tinyint
smallint
mediumint
int/intteger
bigint
float
double
decimal(总位数,小数位数)
字符类型
char
varchar
tinyblob
blob
mediumblob
longblob
tinytext
text
longtext
日期类型
date
time
year
datetime
timestamp
字段约束
not null
unique
primary key
foreign key
例
外键约束----级联操作
primary key(列名1,列名2,....);
分类
DDL
操作数据库
show databases;
show create database 名字;
create database 名字;
create database if not exists 名字;
alter database 名字 character set 字符集;
drop database 名字;
drop database is exists 名字;
use 数据库名字;
create database 名字 character set 字符集;
操作数据表及字段
create table 表名(列名 数据类型,列名 数据类型......)
例子
show tables;
desc 表名;
drop table 表名;
drop table is exists 表名;
alter table 旧表名 rename to 新表名;
alter table 名字 character set 字符集;
alter table 名字 add 列名 列的数据类型;
alter table 表名 modify 列名 数据类型;
alter table 表名 change 旧列名 新列名 新列名的数据类型;
alter table 表名 drop 列名;
alter table 表名 drop primary key;
alter table 表名 modify 列名 数据类型 primary key;
alter table 表名 add constraint 逻辑外键字段名 foreign key(列名) references 要关联的表名(要关联的表的列名);
列名 int primary key auto_increment;
DML
insert into 表名 (字段名,字段名....) values(value,value.......)
insert into 表名 values(值1,值2,值3....)
delete from 表名 where 条件;
delete from 表名;
update 表名 set 列名=新值 where 条件;
update 表名 set 列名=新值;
update 表名 set 列名=新值,列名=新值,列名=新值.... where 条件
DQL
单表查询
select 列名1,列名2... from 表名;
select * from 表名;
where 子句
=
<
>
!=
<=
>=
多条件(用and/or/not连接)
LIKE子句
操作查询数据的结果
计算列
对计算列重新命名
as:通用取别名(都可以用)也可以隐藏
distinct :消除查询结果的重复项(位置在列名前)
排序
正序:order by
逆序:order by 排序的列名 desc
聚合函数
count() : select count(列名) from 表名;
max()
min()
sum()
avg()
日期函数
now()或sysdate()
字符串函数
concat(列名1.列名2...)
upper()
lower()
sunstring(列名,开始截取那位,长度)
分组查询group by
select 被分组的字段或聚合函数 from 表名 (where子句)group by 分组依据的字段;
select 被分组的字段或聚合函数 from 表名 (where子句)group by 分组依据的字段 order by 列名(依据此列明对分组好的结果排序);
.......... group by havaing 条件.......
分列查询limit
select 列名 from tablename (where子句) limit 起始位 , 步长;
select 列名 from tablename (where子句) limit (pageName-1)*pageSize,pageSize
数据表的关联关系
例
一对一关联
1:主键关联
2:唯一外键
一对多关联
外键约束
多对一关联
外键约束
多对多关联
连接查询
inner join 内连接
格式:select * from 表名 inner join 被连接的表名;
格式:select * from 表名 inner join 被连接的表名 where 表名.外键=被链接的表名.另一张表的主键;
格式:select * from 表名 inner join 被连接的表名 on 表名.外键=被链接的表名.另一张表的主键(where子句);
left join 左连接
格式:select * from 表名 left join 被连接的表名 on 表名.外键=被链接的表名.另一张表的主键(where子句);
right join 右连接
格式:select * from 表名 left join 被连接的表名 on 表名.外键=被链接的表名.另一张表的主键(where子句);
数据表别名
不用前
用之后
子查询
例1
例:多条件
union关键字
DCL
SQL高级
存储过程
索引
触发器,视图
数据库设计
数据库的设计步骤
数据库的设计范式
E-R图
PowerDesigener工具、PDMan
事务特性ACID
事务隔离级别
事务管理
操作系统
进程、线程
并发、锁
内存原理和调度
I/O原理
项目设计
1.吃透需求
2.步骤梳理
3.代码实现
4。调试错误
基本步骤
先设计
需求分析
概要设计
再编码
1.底层框架代码
2.顶层业务逻辑代码
研发工具
集成开发环境 Eclipse“个人当前阶段认为它的存在很尴尬'
Intellij IDEA
VSCode
Linux系统
基础
Linux网络连接的三种方式
桥接模式
NAT模式
主机系统
centOS安装
虚拟机克隆
方式一:直接拷贝一份安装好的虚拟机文件。“ZYJ.linux.虚拟机”
方式2:使用VMware的克隆操作,克隆时需要关闭正在运行的Linux系统
VMtoos安装
虚拟机快照
Linux目录结构
/bin
/sbin
/home
/root
/lib
/lost+found
/etc
/usr
/boot
/proc
/srv
/sys
/tmp
/dev
/media
/mnt
/opt
/usr/local
/var
/selinux
实操
远程
远程登录
远程文件传输
vi和vim编译器
打开:vim空格
插入:I,o,O,a,A,r,R
命令行模式:esc+:
开机、重启和用户登录注销
shutdown -h now
su+空格+用户名
用户管理
添加用户:useradd空格用户名
添加指定目录用户:useradd空格-d空格目录空格用户名
修改/添加密码:passwd空格用户名
显示当前所在的目录:pwd
删除用户并删除其用户文件下的所有目录:userdel -r 用户名
删除用户但保留其用户文件下的所有目录:userdel 用户名
实用指令
定时任务调度
磁盘分区、挂载
进程管理
RPM和YUM
网络配置
用户管理
高级
日志管理
定制自己的Linux
Linux内核源码&内核升级
Linux备份与恢复
Linux可视化管理webmin和bt运维工具
Linux入侵检测&权限划分&系统优化
Linux面试题
服务器领域
大数据定制篇之Shell脚本编程
Linux之Java定制篇
JDK安装
IDEA安装
Tomcat安装
MySQL安装
项目管理/建构工具
Gradle
Maven
代码管理工具
SVN
Git
应用框架
后端
SSM
Spring
IoC
AOP
SpringMVC
MyBatis
Spring Boot
自动配置、开箱即用
整合Web
整合数据库(事物wenti)
整合权限
Shiro
Spring Security
整合各种中间件
Redis、MQ、RPC框架、NIO框架
服务器软件
Web服务器
Nginx(特别重要)
应用服务器
Tomcat
Jetty
Undertow
中间件
缓存
Redis
5大基础数据类型
事物
管道
持久化
集群
消息队列
RocketMQ
RabbitMQ
Kafka
RPC框架
Dubbo
gRPC
Thrift
Spring Cloud
Netty
数据库框架
ORM层框架
Mybatis
Hibernate
JPA
连接池
Druid
HikariCP
C3P0
分库分表
MyCAT
Sharding-JDBC
Sharding-Sphere
搜索引擎
ElasticSearch
Solr
分布式/微服务
服务发现/注册
Eureka
Consul
Zookeeper
Nacos
网关
Zuul
Gateway
服务调用(负载均衡)
Ribbon
Feign
熔断/降级
Hystrix
配置中心
Config
APollo
Nacos
认证和鉴权
Spring Security
OAuth2
SSO单点登录
分布式事物
JTA接口
Atomikos组件
2PC、3PC
XA模式
TCC模式
tcc-transaction
Byte-TCC
EasyTransaction
Seata
SAGA模式
ServiceComb
Seata
LCN模式
tx-lcn
任务调度
Quartz
Elastic-Job
链路追踪和监控
Zipkin
Sleuth
Skywalking
日志分析与监控
ELK
ElasticSearch
Logstash
Kibaba
虚拟化/容器化
容器技术
Docker
容器编排技术
Kubernetes
Swarm
javaweb
前端
三大件
HTML5
基础语法
标签
整体结构
DOCTYPE(版本状态)
<!DOCTYPE html>(html5版本申明)
常用标签
标题和水平线
body标签
<body bgcolor="pink"></body>
bgcolor背景颜色
text字体颜色
1.颜色名2.rgb3.16进制
标题标签
<h1>小标题<h1>
<h1><h2>.........<h6>(依次从大到小,会自动换行)
h1标签可以被搜索引擎获取到,如果有多个,可能会进入搜索引擎的黑名单
水平线标签
<hr width="" align="" size=""/>
hr是单标签
width(宽度 1. % 2. px)
align(对其方式 1.left 2.right 3.center)
size(水平线粗细)
段落
<p></p>
段落会自动换行
常用属性
<p align=""></p>
left
right
center
justify
换行
<br />
加几个换几行
列表
无序列表
<ul> <li></li> </ul>
常用属性:type
square
circle
disc
无序列表
<ol> <li></li> <ol>
常用属性:type
1
a
A
i
I
div
层,块级元素,标签会自动换行
默认宽度占整个屏幕的宽度,高度取决于内容
<div></div>
<div align=""></div>
div中元素的对其方式
left
right
center
justify
span
<span></span>
行内元素,标签不会自动换行
空间大小根据内容决定
格式化标签
font
常用属性
color(颜色)
sise(尺寸大小)
face(字体风格)
pre
<b></b>和<strong></strong>
<i></i>斜体
<u></u>下划线
<sub></sub>下标
<sup></sup>上标
a
常用属性
href
本地磁盘路劲
网页路径
target
self(当前窗口)
blank(新窗口)
parent(父窗口)
top(顶层窗口)
锚点
回到顶部
回到指定位置
图片
img
src
title
border
height
width
alt
alidn
表格
<table></table>
width
align
height
border
<tr></tr>
align
valign
bgcolor
<td></td>
<th></th>
表单
<form></form>
属性
action
method
target
name
子标签<input/>
常用属性
type
disable禁用
value
readlony
maxlength
<textarea></textarea>
cols
rows
<lable></lable>
<button>提交标签</button>
属性:type
可嵌套img标签做小图标
<select><option>下拉框</option></select>
<select>外层标签</select>
name
multiple
size
disable
<option>内层标签</option>
selected
value
字符实体
<小于号
>大于号
空格
版权©
标签的分类
块级标签
换行,段落,水平线,标题,列表,div,表格,表单,pre
行内标签
span,font,加粗,下划线,倾斜....,图片,a标签,表单里的子标签input,textarea........,
行内块级标签
可将以上标签设置为行内块级标签
CSS
CSS基本使用
基本语法
注释
使用
行内式
嵌入式
引入外联样式文件
CSS选择器
通用选择器
元素选择器
id选择器
类选择器
分组选择器
组合选择器
后代选择器
子代选择器
相邻兄弟选择器
普通兄弟选择器
CSS常用属性
背景
backdround-color
backdround-image:url
backdround-repeat
backdround-size
文本
颜色
对齐方式
文本修饰
去除文本修饰
首行缩进
字体
字体样式font-family:
字体大小font-size:
字体风格font-style:
字体粗细font-weight:
display属性
bolck
none
inline
inline-block
浮动float
none
left
right
style="clear:both"
盒子模型
padding
内边距有上下左右四条线,可以单独设置样式
border
例子
border-color:
border-width:
border-style:
边框有上下左右四条线,可以单独设置样式
border-collapse:设置表格边框
margin
顺序上右下左
案例
人物简历
JavaScript
表单
ECMAscript
基本用法
行内js
内部js
外部js
零碎
onclick(点击元素时触发)
alert('内容')
console.log("内容")
基础语法
语句和注释
标识符和关键字
变量
变量声明
只有用var声明的变量才会有变量声明
数据类型
数值型
undefined
null
布尔
字符串
object
类型转换
自动类型转换
函数转换
显示转换
toString();
toFixed(参数);(参数表示保留几位小数)
Number("")
String();
+“”
运算符
算数运算符
+
-
*
/
%
++
--
赋值和扩展运算符
=
+=
-=
*=
/=
%=
比较运算符
==
===
>
<
<=
>=
!=
逻辑运算符
&&
||
!
三元运算符
表达式?语句1:语句2
控制语句
if
switch
while
do while
for
break,continue和Java中一样
数组
数组的定义和赋值
var 数组名 = [值1,值2,值3];
var 数组名 = new Array(值1,值2,值3);
var 数组名 = new Array(size);
数组名.length= 长度
设置属性
数组的遍历
for循环(和Java一样)
for in
格式
forEach
格式
数组函数
数组名.函数名();
push();
unshift();
pop();
shift();
reverse();
join();
indexOf(元素):
slice(index,index);
splice();
concat();
函数
函数的定义
函数声明语句
格式:function 函数名([参数列表]){}
函数定义表达式
var 变量名 = function([ 参数列表]){}
Function构造函数
var 变量名 = function([ 参数列表,语句体]);
函数的参数、调用与return语句
函数的作用域
对象
对象的创建
格式
1.字面量形式创建:var 对象名 = {}
2.通过new object对象创建
3.通过Object对象中的create函数创建对象
比较
对象的序列化与反序列化
序列化
例子
反序列化
例子
this
事件
事件类型
常用事件
1oad
onload
onblur
onfocus
onchange
onclick
onmouseover
onmouseout
onkeyup
onkeydown
事件流
事件顺序
事件捕获
事件冒泡
事件处理程序
HTML事件处理程序
DOM 0级事件处理程序
DOM2级事件
Dom对象
Bom对象
组件化框架
Vue
React
Angular
Node
模板框架
JSP/JSTL
Thymeleaf
FreeMarker
BootStrap
基础套餐
基础库
jQuery
Ajax
servlet
HTTP协议
respones headers(16)请求头
request headers(10)响应头
http://(规则)+ip或域名:端口 / 项目路径/项目里的资源的路径?参数
http请求协议
请求行
HTTP响应协议
HTTP消息头
referer
location
refresh
Tomcat
开启步骤
目录结构
bin(脚本)
conf(相关配置文件)
sever设置端口
tomcat-users设置权限(xml)
lib jar包
logs日志文件
webapps tomcat自带项目 做的项目可以放此目录下
work-localhost 放JSP生成的源码
idea配置tomcat
Servlet的实现
创建Web项目
例子
@WebServlet注解
value(对外访问路劲)
子主题
cookie
HttpSession
ServletContext
文件上传和下载
JSP
过滤器
监听器
Maven
SVN
FreeMarker
Spring
运维知识(工作时间学习)
Web服务器
Nginx
应用服务器
Tomcat
Jetty
Undertow
CDN加速
持续集成/持续部署
JenKins
代码质量检查
sonar
日志收集和分析
ELK
大捷
徒手撕源码
光脚造轮子
闭着眼睛深度调优
寄语
11.26
自由主题
收藏
0 条评论
下一页