仅个人专用学习笔记

Java Web学习笔记

Springboot 和 Spring MVC区别

1、Spring MVC 提供了一种轻度耦合的方式来开发web应用,属于Spring的一个模块,是web框架;项目中实际运行的代码

2、Spring Boot实现了自动配置,降低了项目搭建的复杂度;只是配置工具、整合工具、辅助工具

综上:Spring是一个“引擎”;Spring MVC是基于Spring 的一个MVC框架;Spring Boot是基于Spring4的条件注册的一套快速开发整合包


文章目录

Java Web学习路线:

​ Java Web,是用Java技术来解决相关或联网领域的技术总和。web包括:web服务器换和web客户端两部分。Java在客户端的应用有java applet,但是使用的较少,Java在服务器端的应用就比较丰富,例如:Servlet,JSP和第三方框架等。所以总体来说,Java Web主要实在服务器端的应用。在B/S架构中Java语言来编写Server中的内容以及数据库的搭建和数据的存储,使Server能与browser进行通信。

​ 项目开发主要采用前后端分离,核心思想是前端html页面通过ajax调用后端的restuful API接口并使用JSON数据进行交互

单页面应该(spa)只有一张页面,用户与应用程序交互仅动态更新页面web应用程序

1、计算机基础

(1)TCP/IP协议
  • 底层通信协议
  • 很多消息中间件遵循的协议就是基于该协议创建的,eg:RabbitMQ遵循的AMQP协议
(2)进程、线程
  • 进程是系统进行资源分配和调度的最基本单元
  • 线程是进程的一部分
  • 一个进程中可以有多个线程,多个线程共享进程的全部资源
(3)计算机底层原理
(4)Linux命令行
关 机 和 重 启 : \textcolor{Purple}{关机和重启:}
shutdown -h now   //立即关机
shutdown -h 5    //5分钟后关机
poweroff    //立即关机

shutdown -r now    //立即重启
shutdown -r 5    //5分钟后重启
reboot    //立即重启
logout    //注销
帮 助 命 令 : \textcolor{Purple}{帮助命令:}
  • help命令用于显示shell内部的帮助信息,对于外部命令的帮助信息只能使用man或info命令查看;
  • man命令查看Linux中的指令帮助、配置文件帮助和编程帮助等信息,比help信息更详细;
  • info指令是man指令的详细内容
shutdown --help    //查询关机命令使用方法
inconfig --help    //查看网卡信息

注:一般任何命令后加了“--help”执行都会显示出这个命令的使用方法,包括参数的含义

man shutdown    //查看关机命令使用方法
注:man shutdown打开命令说明书后,使用按键q退出
目 录 切 换 : \textcolor{Purple}{目录切换:}
cd/    //切换到根目录
cd/usr    //切换到根目录下的usr目录
cd~    //切换到home目录
cd-    //切换到上次访问目录
目 录 查 看 : \textcolor{Purple}{目录查看:}
ls    //查看当前目录下的所有目录和文件
ls -a    //查看当前目录下的所有目录和文件(包括隐藏文件)
ls -l 或 ls ll    //列表查看当前目录下的所有目录和文件(列表查看,显示更多信息)
ls /dr    //查看当前目录下的所有目录和文件 eg:ls /usr
目 录 的 增 删 查 改 : \textcolor{Purple}{目录的增删查改:}
  • mkdir【增】
  • rm [-rf] 【删】:可删除文件或目录
  • find 【查】
  • mv 和 cp 【改】
mkdir aaa    //在当前目录下创建一个名为aaa的目录
mkdir /usr/aaa    //在指定目录下创建一个名为aaa的目录

rm -f aaa    //递归删除当前目录下的aaa目录
rm -rf aaa   //递归删除当前目录下的aaa目录(不询问)
rm -rf*    //将当前目录下的所有目录和文件全部删除

find/目录/参数/文件名称    //查找目录或文件

mv 当前目录名称 新目录名称 //将当前目录改为新目录(重命名)eg:mv aaa bbb将aaa改为bbb
mv 目录名称 目录新位置  //目录剪切
cp -r 目录名称 目录拷贝目标位置  //目录拷贝
文 件 的 增 删 查 改 : \textcolor{Purple}{文件的增删查改:}
  • touch 【增】
  • rm -rf 【删】
  • cat或more或less或tail 【查】
  • vi或vim【改】
touch aa.txt    //在当前目录中创建一个名为aa.txt的文件

rm -rf aa    //删除文件

cat 文件或文件路径    //从第一行显示文件内容
tac 文件或文件路径    //从最后一行显示文件内容
more 文件名    //一页一页翻动文件,百分比显示
less 文件名    //可以往前翻动文件
tail -n 数字 文件名    //指定行数或者动态查看,只查看文件最后【数字】行

vi或vim 文件名    //打开文件   →    按键:i/o/a进入编辑模式

==注:==基本上vi分为三种状态:

1)命令行模式[command mode]:控制屏幕光标移动,字符、字或行的查找、移动复制某区段及进入Insert mode下,或者到last line mode。

  • [1]控制光标移动: -

  • [2]删除当前行:dd -

  • [3]查找:/字符

  • [4]进入编辑模式:i,o,a

  • [5]进入底行模式::

2)编辑模式[Insert mode]:在此模式下,可以做文字输入,按ESC键可回到命令行模式。

3)底行模式[last line mode]:将文件保存或者退出vi,也可以设置编辑环境,eg:寻找字符串、列出行号等。

  • [1]退出编辑::q
  • [2]强制退出::q!
  • [3]保存并退出::wq
压 缩 文 件 操 作 : \textcolor{Purple}{压缩文件操作:}
  • Windows的压缩文件扩展名:文件名.zip文件名.rar
  • Linux的打包文件:文件名.tar
  • Linux的压缩文件:文件名.gz
  • Linux的打包并压缩文件:文件名.tar.gz
tar [-zcvf] 打包压缩后的文件名  需要打包的文件    //eg:tar -zcvd aaa.tar aba.txt
tar [-zxvf] 需解压的压缩文件名    //eg:tar -zxvf aaa.tar

注释:

z:调用gzip压缩命令进行压缩

x:代表解压

c:打包文件

v:显示运行过程

f:指定文件名

查 找 命 令 : \textcolor{Purple}{查找命令:}
ps -ef | grep sshd   //查找指定ssh服务进程
ps -ef | grep sshd | grep -v grep    //查找指定服务进程,排除grep本身
ps -ef | grep sshd -c    //查找指定进程个数

find . -name "*.log" -ls   //在当前目录查找以`.log` 结尾的文件,并显示详细信息
find . type f -name ".log"    //查找当前目录,以``.log`结尾的普通文件
find /root/ -perm 600   //查找/root/目录下权限为600的文件
find . type d | sort    //查找当前所有目录并排序
find . -size +100M    //查找当前目录大于100M的文件

updatedb
locate /etc/sh    //搜索etc目录下所有以sh开头的文件
locate pwd    //查找好pwd相关的所有文件

whereis ls //将和ls文件相关的文件全都查找出来  定位可执行文件、源代码文件、帮助文件在文件系统中的位置

which pwd //查找pwd命令所在的路径 在path变量指定的路径中,搜索某个系统命令位置,并返回第一个搜索结果
which java    //查找path中java的路径
s u 、 s u d o : \textcolor{Purple}{su、sudo:} susudo
  • su 用于用户之间的切换,但是切换前的用户依然保持登录状态。如果是root向普通或虚拟用户切换不需要密码,反正普通用户切换到其他任何用户都需要密码验证(缺点:如果某个用户需要使用root权限,则必须将root密码告诉此用户)。
su test    //切换到test用户,但是路径还是/root目录
su -test    //切换到test用户,但是路径变为/home/test
su :    //切换到root用户,但是路径还是原来的路径
su - :    //切换到root用户,并且路径也为/root

vi /etc/sudoer 或 visudo
  • sudo 是为所有想使用root权限的普通用户设计,可以让普通用户具有临时使用root权限的权利,仅需输入自己账户的密码即可。
系 统 服 务 : \textcolor{Purple}{系统服务:}
service iptables status    //查看iptables服务状态
service iptables start    //开启iptables服务
service iptables stop    //停止iptables服务
service iptables restart   //重启iptables服务

chkconfig iptables off   //关闭iptables服务的开机自启动
chkconfig iptables on    //开启iptables服务的开机自启动 
其 他 命 令 : \textcolor{Purple}{其他命令:}
pwd    //查看当前目录路径
ps -ef    //查看所有正在运行的进程
kill pid 或 kill -9 pid   //结束进程
inconfig 或 inconfig | more    //查看网卡信息
ping ip    //查看与某台机器的连接情况
netstat -an    //查看当前系统的端口
netstat -an | grep 8080    //查看指定端口
setup    //配置网络
service network restart    //重启网络
su - 用户名    //切换用户
chkconfig iptables off    //关闭防火墙
Ctrl l    //清屏

2、Java基础

(1)三大特性:封装(属性私有化),继承(代码复用),多态(接口+抽象 interface+abstruct)

(2)集合:List列表,Map键值对映射,Set(也是列表,只是列表内的数据不能有重复)

img

  • List列表

    img

    • List是一个接口(继承了Collection接口):
    public interface List<E> extends Collection<E>{...}
    
    • Java遍历List集合的4种方式
    public class Test {
    
        public static void main(String[] args) {
            // 循环遍历List的4中方法
            List<String> strList = new ArrayList<>();
            strList.add("aaa");
            strList.add("bbb");
            strList.add("ccc");
            // 1. 普通遍历方式
            for (int i = 0; i < strList.size(); i++) {
                System.out.println(strList.get(i));
            }
            // 2.增强的for循环
            for (String str : strList) {
                System.out.println(str);
            }
            // 3. 使用Iterator迭代器
            Iterator<String> it = strList.iterator();
            while (it.hasNext()) {
                String str = (String) it.next();
                System.out.println(str);
            }
            // 4. java8 Lambda方式
            // strList.forEach(System.out::println);//和下面的写法等价
            strList.forEach(str -> {
                System.out.println(str);
            });
        }
    }
    
    • LinkedList
  • Set列表

  • Map列表

(3)并发:前期简单过一下线程和锁,后面再继续深入

(4)I/O:文件I/O

(5)数据结构+算法:可以专门去Leecode网站刷一刷

(6)三大框架:Struts、Hibernate、Spring

注: ①java中的TODO用法:类似于一个标签,标记需要处理或完成的任务【设置任务标签:Window→preference→java→complier→task tags】

代码里面加入//FIXME 表示优先级别比较高,需要处理的缺陷问题的任务

代码里面加入//XXX 表示虽然任务已经完成但是还需要优化处理的任务

代码里面加入//DONE表示这个任务已经处理完了,其实可以删除这个标签了

在【Windows→show View→Tasks】中看已查看标记的任务

推荐书籍:Java书单-核心篇

3、SSM框架 (SpringBoot拓展看Java后端笔记)

属于web的核心,Spring + Spring MVC + Mybatis

i、Spring

Spring 是Java EE轻量级开源框架,用于简化Java企业级应用的开发难度好开发周期,Spring现在用的不多(xml配置比较繁琐)。推荐Spring Boot,但是Spring核心理念一样,两个核心理念一样,DI(依赖注入)和AOP(面向切面编程);Bean的生命周期;IOC(控制反转)

==注:==DI(依赖注入)其实是一种关系模式,存在在IoC容器中,IoC根据其依赖关系创建对象。

Sping项目结构
Spring体系结构

img[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rQCiKi1B-1644819433065)(data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)]

1)Data Access/Integration(数据访问/集成)

包括JDBC、ORM、OXM、JMS和Transactions模块

  • JDBC模块:提供了一个JDBC 的样例模板
  • ORM模块:“对象—关系”映射框架无缝集成的API,包括JPA、JPO、Hibernate和Mybatis
  • OXM模块:将Java对象映射成XML数据,或将XML数据映射成Java对象
  • JMS模块:异步通信
  • Transactions事务模块:支持编程和声明式事务管理

2)Web模块

包括Web、Servlet、WebSocket和Portlet组件

  • Web模块:
  • Servlet模块:提供Spring MVC Web

3)Core Container(Spring 的核心容器)

提Beans模块、Core核心模块、Context上下文模块和SpEL表达式模块组成

  • 提供了框架的基础部分,包括控制反转和依赖注入
  • 封装Spring框架的底层部分,包括资源访问、类型转换及一些常用工具类
  • 接口
  • 支持访问和修改属性值,方法调用,支持访问及修改数组

Springd项目结构和SpringBoot基本结构相似

控制反转(IoC)——容器

管理所有Java对象的实例化和初始化,降低代码之间的耦合度,它类似于Bean工厂,生产出Spring Bean,在Spring框架中有两种类型的IoC容器,分别是BeanFactoryApplicationContext

  • BeanFactory容器由org.springframework.beans.factory.BeanFactory 接口定义,在加载配置文件时不会立即创建Java对象,只有在程序运行使用时被创建。
  • ApplicationContext是BeanFactory接口的子接口,对其拓展

BeanFactory接口与ApplicationContext接口的区别:

BeanFactory接口

1)Spring的原始接口,对原始接口的实现类功能比较单一

2)BeanFactory接口实现类的容器,在每次获得对象时才会创建对象

ApplicationContext接口

1)每次容器启动时就会创建容器中配置的所有对象

2)提供的功能较多

3)从类的路径下加载配置文件:ClassPathXmlApplicationContext

从硬盘的绝对路径下加载配置文件:FileSystemXmlApplication

实 现 I o C 思 想 需 要 D I 做 支 持 \textcolor{red}{实现IoC思想需要DI做支持} IoCDI

  • 该容器管理的对象成为Bean
Spring实例化bean的三种方式

(1)空参数构造【构造器实例化创建】

<beans xmlns:xsi="http://www.w3.org/2001/SMLSchema-instance" xmlns="http://www.springframework.org.schema/beans" xsi:schemLocation>
	<!--空参数构造创建-->
  <bean name="hello" class="cn.itcats.spring.hello.HelloWorld"></bean>
</beans>

(2)静态工厂创建【即调用静态方法创建】——调用UserFactory类的静态createUser方法创建名为user的对象,放进容器

<bean name="user" class="cn.itcats.UserFactory" factory-method="createUser"></bean>

(3)实例工厂创建【调用非静态方法创建】——需要配置两个bean,因为无法通过类名调用静态方法

<bean name="user2" factory-bean="userFactory" factory-method="createUser"></bean>
 
<bean name=“userFactory” class=“cn.itcats.UserFactory”></bean>
DI依赖注入

注入方式:1)set方式注入 2)构造方法 3)字段注入

<beans>
 	<!-- set方式注入--> <!--学生类-->
	<bean name="student" class="cn.itcats.spring.domain.Studnet">
		<!--值类型注入:为Student对象中名为name属性注入 Carrie 作为值-->
		<property name="name" value="Carrie"></property>
		<property name="grade" value="90"></property>
		<!--引用类型注入:为teacher属性注入下方配置的teacher对象-->
		<property name="teacher" ref="teacher"></property>
	</bean>

	<!--教师类-->
	<bean name="teacher" class="cn.itcats.spring.domain.Teacher">
		<property name="name" value="Mrs.Zhang"></property>
		<property name="className" value="Technology"></property>
	</bean>
</beans>
<!--使用构造函数注入-->
<bean name="student2" class="cn.itcats.spring.domain.Student">
  	<!--name属性:构造函数的参数名称-->
  	<!--index属性:构造函数的参数索引-->
  	<!--type属性:构造函数的参数类型-->
  	<constructor-arg name="name" index="1" type="java.lang.String" value="Carrie"></constructor-arg>
  	<constructor-arg name="grade" index="0" type="java.lang.Integer" value="65"></constructor-arg>
  	<constructor-arg name="teacher" index="2" ref="teacher"></constructor-arg>
</bean>

注入类型:1)值类型value注入 2)引用类型ref注入

Spring的三种配置方式

1)基于XML的配置

  • spring.XML

2)基于注解的配置

3)基于Java的配置

Spring中的AOP事务

①四大基本特性【ACID】:1)原子性【Atomicity】 2)一致性【Consistency】 3)隔离性【Isolation】 4)持久性【Durability】

②事务分为编程式事务控制和声明式事务控制

编程式事务事务控制【自己手动控制】

JDBC代码:

​ Conn.setAutoCommit(false); //设置手动控制事务

Hibernate代码:

​ Session.beginTransaction(); //开启一个事务

声明式事务控制【Spring自身有提供对事务的管理】——常用

1)基于XML方式的声明式事务管理 2)基于注解方式的声明式事务管理

③五大通知类型:1)前置通知 2)环绕通知:控制事务、权限控制 3)后置通知:记录日志[方法已经成功调用] 4)异常通知:异常处理、控制事务 5)最终通知:记录日志

ii、Mybatis:
  • Mybatis,流行的ORM(对象关系映射),将Java对象映射到数据库;基于Java的持久层框架,负责java对象和数据实体之间的映射

    Mybatis以SQL语句为核心的不完全的关系型映射框架。消除了所有JDBC代码和参数的手工设置

iii、Spring MVC
  • Spring MVC :Web的三层架构:Model(模型->数据库实体对象),View(视图->展示),Contriller(控制器->处理情趣)

推荐书籍:Spring实战(第五版)【Spring概念深入理解】、Spring Boot实战【Spring Boot入门参考】

推荐视频:Spring5-B站-狂神说、Spring Boot2-B站-尚硅谷

4、数据库

Mysql,最流行的关系型数据库之一

  • SQL语法
  • 事物特性:ACID(Atomicity原子性、Consistency一致性、Isolation隔离性、Durability持久性)
  • 索引,主键,外键

Redis,非关系型数据库,高性能的key-value数据库,主要用于缓存

MongoDB,一个文档型的非关系型数据库,数据以JSON格式存储(可嵌套),存储和查询都很方便,减少了Mysql中多表联查的操作

5、前端

前端需要大致接触,不需要向前端开发那么专业

(1)Vue
  • vue,是一套自下而上的渐进式JS框架
    • 支持模板语法,支持响应式(不用再手动刷新页面,当修改了某个变量,视图会自动刷新)
    • 结构化代码,会使html代码变得干净许多
(2)html
  • html+css+js:前端基础
-HTML文档结构

​ 1)HTML文档头部<header>

​ 2)HTML文档主体部分<body>

​ html标记大部分都是成对出现:有开始标记,有结束标记

​ 换行标记:<br>

​ 段落标记:<p>

​ 标题:<hn>n取整数,n的取值为1-6,随着数字越大,标题字体越小

​ 字体font:<font> 字体加粗:<b> 字体斜体:<i> 字体下划线:<u> 字体删除线:<strike>

​ 下角标:<sub> 上角标:<sup>

-HTML图像标记

<img src = "绝对路径|相对路径" width height></img> 尽可能使用相对路径

-超链接标记

<a href = "目标资源路径" target="_blank"> </a><a href = "目标资源路径" target="_self"> </a>

超链接有文字超链接,也有图片超链接:在两者之间继续使用

-HTML列表

有序列表<ol>、无序列表<ul>

列表项:<li>

列表显示效果类型:<ul或ol type = "dise\a\i\circle\square">

-表格标记

表格<table>

<body>
	<table borer="1">
 		<caption>表格标题</captionc>
      <!--仅出现一次,每一列的第一行为标题,会自动加粗-->
		<tr>
           	<th>标题1</th>
          	<th>标题2</th>
          	<th>标题3</th>
		</tr>
      
      <!--行数-->
		<tr>     
          	 <!--列数-->
			<td>内容1</td>    
			<td>内容2</td>
			<td>内容3</td>
		</tr>
      <!--行数-->
      	 <tr>     
           	 <!--列数-->
			<td>内容4</td>    
			<td>内容5</td>
			<td>内容6</td>
		 </tr>
  </table>
</body>
-表单标记

表单<form>

  • 文本框(text)、密码框(password)、单选按钮(radio)、复选框(checkbox)、下拉列表(select)、文件上传标记(file)、多行文本(textarea)
  • 表单提交方式:get默认方式,表单提交的数据会在地址栏显示,提交数据有大小限制:128K;post表提交的数据不会在地址栏显示,提交数据无大小限制
  • checkselect表示被默认选中
<body>
	<fieldset>
	     <legend><h2>新用户注册页面</h2></legend>
	     <form action="login.html" method="post" onsubmit="return validateForm(this)">
	     	<p>用户账号:<input type="text" name="username" /></p>
	     	<p>用户口令:<input type="password" name="password" /></p>
	     	<p>确认口令:<input type="password" name="confirmpwd" /></p>
	     	<p>真实姓名:<input type="text" name="" /></p>
	     	<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;别:
					<input type="radio" name="sex" value="male" />&nbsp;&nbsp;
	     			<input type="radio" name="sex" value="female" />&nbsp;&nbsp;
					<input type="radio" name="sex" value="other" />保密</p>
	     	<p>教育程度:<select name="education">
	     		<option value="0">--请选择教育程度--</option>
	     		<option value="xx">小学</option>
	     		<option value="cz">初中</option>
	     		<option value="gz">高中</option>
	     		<option value="bk">本科</option>
	     		<option value="ss">硕士</option>
	     		<option value="bs">博士</option>
	     		</select></p>
	     	<p>个人爱好:<input type="checkbox" name="hobby" value="trip">旅游
	     				<input type="checkbox" name="hobby" value="music">音乐
	     				<input type="checkbox" name="hobby" value="sports">运动
	     				<input type="checkbox" name="hobby" value="read">阅读
	     				<input type="checkbox" name="hobby" value="game">游戏
	     	</p>
	     	<p>自我介绍:<textarea name="self introduction" cols="50" rows="7" ></textarea></p>
	     	<p align="center"><input type="submit" value="注册" onclick="skip()"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <input type="reset" value="取消">
	     <form>
	</fieldset>
	</body>

注: 表的标题在上方居中,图的标题在其下方居中

-HTML框架

框架frameset :基本组成部分就是frame,当然,frameset是可以嵌套另一个frameset,主要通过frameset将整个网页按照划分多个区域

  • 一般情况下,frameset框架不写在<body>
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>显示用户基本信息页面</title>
		<style type="text/css">
		</style>
	</head>
	<frameset rows="15%,*">
	<frame src="title.html" scrolling="no" />
		<frameset cols="20%,*">
			<frameset rows="10%,*">
				<frame src="welcome.html">
				<frame src="click.html" scrolling="no"/>
				<frame name="main" src="informantion.html"/>
			</frameset>
		</frameset>
	</frameset>
	<body>
		<fieldset>
		</fieldset>
	</body>
</html>
(3)css:层叠样式表
  • CSS有内部样式表和外部样式表两种:

    • CSS内部样式表是嵌入在当前页面中,只会对当前的内容进行修饰;
    • CSS外部样式表是以引用的方式链接到当前页面或多个页面中,因此,凡是引用该CSS样式的页面,都可以使用

    id选择器方式呈现:#tagName id=“tagName”

    类选择器:.tagName class=“tagName”

    注: 如果要对html已有标记进行修饰,则为可以直接使用该标记作为本央视的tagName

    <!DOCTYPE html>
    <html>
    	<head>
    		<meta charset="utf-8">
    		<title></title>
    		<style type="text/css">
    		</<style type="text/css">
    			a{
    				font-size: 16px;
    				color: blue;
    				<!--超链接下划线取消-->
    				text-decoration: none;  
    			}
    			a:hover{
    				color: burlywood;
    				text-decoration: none;
    			}
    		</style>
    	</head>
    	<body>
    		<p><a href="http://www.baidu.com" target="main">百度首页</a></p>
    		<p><a href="http://www.163.com">网易首页</a></p>
    		<p><a href="http://www.sina.com.cn">新浪首页</a></p>
    	</body>
    </html>
    
(4)js

​ JS:轻量级编程语言,可插入HTML页面的编程代码

  • node.js:基于Chrome V8引擎的JS运行时,用来构建易于扩展到网络应用;可跨平台、类库较多,单线程,需要在系统配置环境变量path,添加根目录

    查 看 n o d e 和 n p m 版 本 : \textcolor{Purple}{查看 node 和 npm 版本:} nodenpm

    node -v
    npm -v
    

    运 行 前 端 界 面 : \textcolor{Purple}{运行前端界面:}

    npm install  //安装node模块在本地目录node_modules下
    npm run 
    npm run <name>
    

    补充:

    npm包管理工具:
    node package manager一个一个服务器中存储共享代码,创建者用npm publish将代码提交在registry上,其他人想要使用该代码就运行npm install下载,之后会额外出现在node_moduies目录下

  • BootStrap,很流行的前端框架,AdminLTE后台管理模板

推荐书籍:Vue官网

6、消息中间件

主要用于分布式系统,处理消息的收发

主流的有RabbitMQ ,Kafka,RocketMQ;

只需要学习一两个,但应用场景不一样

**RabbitMQ **主要用在企业内部,适合对数据一致性,可靠性要求高的场景(推荐),基于AMQP协议,高可用、高可靠

**Kafka **主要用在大数据方面,对数据的偶尔丢失,重复是可以容忍,适合目前互联网的大数据业务(推荐),基于发布订阅的容错消息系统

RocketMQ 是阿里基于Kafka的思想设计而成的,适用于高可用、高吞吐量的场景,eg:电商系统

推荐书籍:RabbitMQ 官网(看完前6个章节,对消息队列有大致的思路)

7、RPC框架

全称:Remote Procedure Call,即远程过程调用;

目前市面上流行的RPC框架有Dubbo和SpringCloud,两个最好都学习

  • Dubbo是阿里开源的一个项目,只支持Java
  • SpringCloud是基于多个组件构成的微服务架构,只支持Java

8、Java后端

  • 微服务结构(SpringBoot+Zookeeper+Docker+Jenkins)

    Docker架构:类似于轻量级的虚拟机

    image(静态定义)、container(镜像运行时的实体)【可以被创建-启动-停止-删除-暂停】、reposition(保存镜像)

(1)SpringBoot学习笔记
Spring Boot的基础结构共三个文件
  • src/main/java 程序开发的编写业务程序以及主程序入口
  • src/main/resources 存放静态文件和配置文件
  • src/test/java 测试程序
搭建一个Spring Boot项目

1)通过访问:https://start.spring.io/ 选择构建工具、开发语言以及项目信息;点击GENRATE,它会自动配好信息,生成项目模板,解压后,使用IDEA或Eclipse按照Maven项目的方式导入;img

  • demain文件夹主要用于实体[Entity]与数据访问层[Repository]
  • service层,主要用于业务类代码
  • controller层,负责页面访问控制

3)在src/main/resources文件下创建一个Application.java,用于做一些框架配置

4)在pom.xml文件中添加web依赖

<dependencies>
  		<!--web依赖-->
		<dependency>
    		<groupId>org.springframework.boot</groupId>
    		<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
</dependencies>

注: 一般pom.xml文件中默认有两个模块:

  • spring-boot-starter:核心模块,包括主动配置支持、日志和yaml
  • spring-boot-starter-test:测试模块,包括JUnit、Hamcrest、Mockito

5)在src/main/java的controller目录下添加一个controller.java

package cn.Carrie.Demo.Controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {
    @GetMapping("/hello")
    public String hello() {
        return "Hello Spring Boot!";
    }  
}

6)启动主入口[maven项目中会自带一个主入口文件]

遇到的问题:无法在主入口启动DemoApplication.java,调试controller.java已成功,说明接口已经连接上,原因为JDK版本不一致,解决办法一将系统中JDK环境变量全部卸载,重新安装。但是由于在pom文件中,java version版本不一致。最后,解决办法:自己在导入项目模板时,java version 的版本过高,与自己所配置的JDK不一致。修改pom文件的版本即可

7)maven项目的基本结构

img

Spring Boot配置文件优先级

==注:==→优先级指的是配置属性生效的优先级,不是读取文件的优先级;

​ →所有配置文件都去读取的话,生效属性优先级高的读取的优先级反而低

  • 默认位置配置文件的优先级
    ①–file:./config/
    ②–file:./
    ③–classpath:/config/
    ④–classpath:/

img

  • properties和yml优先级:properties > yml
  • 若启动命令带–spring.config.location–,则配置文件从其他地方读取,以上所有属性都会失效
Spring Boot返回Json数据及数据封装

Spring Boot中默认使用的json解析框架是Jackson。而Jackson框架对常用数据类型

Java Web的安全框架

Java Web有两大安全性框架

  • Spring Secuirty:认证(who)、授权(你能干什么)、攻击防护(防止伪造身份),创建大量的filter和interceptor来进行请求的验证和拦截,以此来达到安全的效果
  • Shiro:Apache下开源,是Java安全框架,可以用来实现身份验证、授权、加密和会话管理
(2)Zookeeper学习笔记
(3)Docker学习笔记
(4)
(5)XM文件头部的xmlns:xsi详解
  • xmlns表示默认的命名空间:Namepace【全称:XML Namespace】,可以保证全局唯一性的字符串(直接利用统一资源标识符【URL】)
  • xmlns:xsi定义了一个空间命名前缀xsi对应的唯一字符串http://www.w3.org/2001/XMLSchema-instance

==注:==URI是地址(类似于网络地址),URL是资源信息,URL是URI的一个子集,表示“统一资源定位符”,不仅是唯一标识资源,还提供了定位该资源的信息

(6)Maven开源项目:
-Maven环境配置:
项目要求
JDKMaven3.3要求JDK 1.7或以上
磁盘Maven自身安装需要大约10MB空间
内存没有最低要求
-Maven POM

POM(Project Object Module)是Maven工程的基本工作单元 ,是一个XML文件,用于描述项目如何构建,申明项目依赖等。执行任务或目标时,Maven会在当前目录中查找POM,读取后,获得所需配置信息,然后执行目标;该文件用于管理:源代码、配置文件、开发者的信息好和角色、问题追踪系统、组织信息、项目授权、项目的url、项目的依赖关系等。在Maven项目中可以没有代码,project可以什么都没有,但必须包含pom.xml文件。

所 有 P O M 文 件 都 需 要 p r o j e c t 元 素 和 四 个 必 须 字 段 : g r o u p I D 、 a r t i f a c t I D 、 v e r s i o n 、 m o d e l V e r s i o n \textcolor{green}{ 所有POM文件都需要project元素和四个必须字段:groupID、artifactID、version 、modelVersion} POMprojectgroupIDartifactIDversionmodelVersion

特殊元素进行合并而不是覆盖:dependences、developers、contributors、plugin列表(包括plugin下面的reports)、resources

节点描述
project工程的根标签
version工程的版本号
groupID工程组的标识,一般由域和公司名称组成
artifactID工程的名称,工程的标识
modelVersion模型版本需要设置为4.0

搭建maven项目必须填写groupID和artifictID,这两个统称为坐标。 g r o u p I D \textcolor{cornflowerblue}{groupID} groupID会分成多个段,eg:以两段为例,第一段为域名,域分为org(非营利性组织)、cn(中国)、com(商业组织);第二段为公司名称,类似向Apache公司旗下的Tomcat项目:groupID为org.apache,域为org,公司名称:apache。 a r t i f i c t I D \textcolor{cornflowerblue}{artifictID} artifictID就是所做项目或工程的名称。

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
            http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    
    <!-- 基本设置 The Basics -->
    <groupId>...</groupId>
    <artifactId>...</artifactId>
    <version>...</version>
    <packaging>...</packaging>
    <dependencies>...</dependencies>
    <parent>...</parent>
    <dependencyManagement>...</dependencyManagement>
    <modules>...</modules>
    <properties>...</properties>
    
    <!-- 构建过程的设置 Build Settings -->
    <build>...</build>
    <reporting>...</reporting>
    
    <!-- 项目信息设置 More Project Information -->
    <name>...</name>
    <description>...</description>
    <url>...</url>
    <inceptionYear>...</inceptionYear>
    <licenses>...</licenses>
    <organization>...</organization>
    <developers>...</developers>
    <contributors>...</contributors>
    
    <!-- 环境设置 Environment Settings -->
    <issueManagement>...</issueManagement>
    <ciManagement>...</ciManagement>
    <mailingLists>...</mailingLists>
    <scm>...</scm>
    <prerequisites>...</prerequisites>
    <repositories>...</repositories>
    <pluginRepositories>...</pluginRepositories>
    <distributionManagement>...</distributionManagement>
    <profiles>...</profiles>
</project>
1.1基本配置(the Basics)
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"  
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0  
                      http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <!-- 
        含义:组织标识,定义了项目属于哪个组,风向标,坐标,或者说若把本项目打包
        用途:此名称则是本地仓库中的路径,列如:otowa.user.dao,在M2_REPO目录下,将是: otowa/user/dao目录
        命名规范:项目名称,模块,子模块
    -->
    <groupId>com.sd</groupId>
    <!-- 
        含义:项目名称也可以说你所模块名称,定义当面Maven项目在组中唯一的ID
        用途:例如:user-dao,在M2_REPO目录下,将是:otowa/user/dao/user-dao目录
        命名规范:唯一就好
    -->
    <artifactId>sd-echarts-datashow</artifactId>
    <!-- 
        含义:项目当前的版本号,也就是项目名称
        用途:例如:0.0.1-SNAPSHOT,在M2_REPO目录下,将是:otowa/user/dao/user-dao/0.0.1-SNAPSHOT目录
    -->
    <version>2.0.1-SNAPSHOT</version>
    <!-- 打包的格式,可以为:pom , jar , maven-plugin , ejb , war , ear , rar , par -->
    <packaging>war</packaging>
    <!-- 元素声明了一个对用户更为友好的项目名称 -->
    <name>maven</name>
</project>
1.2POM之间的关系——继承、聚合和依赖

1.2.1继承

设项目project A的pom.xml文件

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">  
  <modelVersion>4.0.0</modelVersion>  
  <groupId>com.tiantian.mavenTest</groupId>  
  <artifactId>projectA</artifactId>  
  <packaging>jar</packaging>  
  <version>1.0-SNAPSHOT</version>  
</project> 

情况一:有项目project A和project B,且project B与project A的pom.xml文件处于同一个目录下(父子关系),即:project B在project A的子目录下,project B文件中需要有<parent></parent>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">  
  <parent>  
    <groupId>com.tiantian.mavenTest</groupId>  
    <artifactId>projectA</artifactId>  
    <version>1.0-SNAPSHOT</version>  
  </parent>  
  <modelVersion>4.0.0</modelVersion>  
  <groupId>com.tiantian.mavenTest</groupId>  
  <artifactId>projectB</artifactId>  
  <packaging>jar</packaging>  
  <version>1.0-SNAPSHOT</version>  
</project>  

情况二:有项目project A和project B,但是两个项目处于同一目录(非父子关系),project B中需要有<parent><relativePath></relativePath></parent>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">  
  <parent>  
    <groupId>com.tiantian.mavenTest</groupId>  
    <artifactId>projectA</artifactId>  
    <version>1.0-SNAPSHOT</version>  
       <relativePath>../projectA/pom.xml</relativePath>  
  </parent>  
  <modelVersion>4.0.0</modelVersion>  
  <groupId>com.tiantian.mavenTest</groupId>  
  <artifactId>projectB</artifactId>  
  <packaging>jar</packaging>  
  <version>1.0-SNAPSHOT</version>  
</project>  

1.2.2聚合

聚合:在A类中包含可以引用B类(类中的类)是has-a的关系,eg:A类对象中包含许多信息,同时也包含B类的对象;B类自己本身也包含许多信息。

情况一:有项目project A和project B,且project B与project A的pom.xml文件处于同一个目录下(父子关系),即:project B在project A的子目录下,project B中需要有<packing>pom</packing><modules><module>project B</module></modules>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  
  <modelVersion>4.0.0</modelVersion>  
  <groupId>com.tiantian.mavenTest</groupId>  
  <artifactId>projectA</artifactId>  
  <version>1.0-SNAPSHOT</version>  
  <packaging>pom</packaging>  
  <modules>  
       <module>projectB</module>  
  </modules>  
</project> 

情况二:有项目project A和project B,但是两个项目处于同一目录(非父子关系),project B中需要有<packing>pom</packing><modules><module>../project B</module></modules>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  
  <modelVersion>4.0.0</modelVersion>  
   
  <groupId>com.tiantian.mavenTest</groupId>  
  <artifactId>projectA</artifactId>  
  <version>1.0-SNAPSHOT</version>  
  <packaging>pom</packaging>  
  <modules>  
       <module>../projectB</module>  
  </modules>  
</project>  

1.2.3聚合和继承同时存在

有项目project A 和project B,需要将project B继承project A,同时把project B聚合到project A中,此时project A 和project B存在在同一个目录下,project A需要添加<modules><module>../project B</module></modules>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  
  <modelVersion>4.0.0</modelVersion>  
  <groupId>com.tiantian.mavenTest</groupId>  
  <artifactId>projectA</artifactId>  
  <version>1.0-SNAPSHOT</version>  
  <packaging>pom</packaging>  
  <modules>  
       <module>../projectB</module>  
  </modules>  
</project> 

project B需要新增一个parent元素,即<parent><relativePath>../project A/pom.xml</relativePath></parent> 以及<packing>jar<packing>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  
  <modelVersion>4.0.0</modelVersion>  
  <parent>  
       <groupId>com.tiantian.mavenTest</groupId>  
       <artifactId>projectA</artifactId>  
       <version>1.0-SNAPSHOT</version>  
       <relativePath>../projectA/pom.xml</relativePath>  
  </parent>  
  <groupId>com.tiantian.mavenTest</groupId>  
  <artifactId>projectB</artifactId>  
  <version>1.0-SNAPSHOT</version>  
  <packaging>jar</packaging>  
</project>  

1.2.4依赖(重点)

依赖关系列表(dependency list)

项目之间的依赖通过dependences元素下的dependency元素,定义一次dependency元素就是定义一个依赖关系,每一个依赖关系中,需要包含groupIdartifactIdversion 三个节点。文件格式为<dependencies><dependency>+groupID+artifictID+version</dependency></dependencies>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  
  <modelVersion>4.0.0</modelVersion>  
  <groupId>com.tiantian.mavenTest</groupId>  
  <artifactId>projectB</artifactId>  
  <version>1.0-SNAPSHOT</version>  
  <packaging>jar</packaging>  
  
      <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-spring-boot-starter</artifactId>
            <version>${shiro.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <!--redis高级客户端依赖-->
        <dependency>
            <groupId>io.lettuce</groupId>
            <artifactId>lettuce-core</artifactId>
        </dependency>
      </dependencies>
</project>
-Maven构建配置文件

配置文件分为三种类型:项目级【定义在项目的POM文件pom.xml中】,在pom.xml文件中使用activeProfiles或者profiles元素指定,可以通过各种方式触发;用户级【定义在Maven的设置文件中】;全局【定义在Maven全局的设置xml文件中】

注: 配置文件采用的是<profiles>节点

追求:三高(高并发、高可用、高性能),安全,存储,业务等

9、工具

Navicat,数据库的图形化管理工具

Git,版本管理工具

Eclipse、Intellij IDEA,web,VScode开发工具

把精力放在java基础,设计模式,jvm原理,spring+springmvc原理及源码,linux,mysql事务隔离与锁机制,mongodb,http/tcp,多线程,分布式架构(dubbo,dubbox,spring cloud),弹性计算架构,微服务架构(springboot+zookeeper+docker+jenkins),java性能优化,以及相关的项目管理等等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 算法个人学习笔记pdf是一种以电子文档形式呈现的算法学习笔记资源。在这个pdf中,个人学习者可以记录和整理自己在学习算法过程中的思考、心得和解题方法。在这个学习笔记pdf中,个人学习者可以自由地添加和编辑自己的学习内容,包括算法的原理、算法实现的代码以及相应的思路和分析。通过这种方式,个人学习者可以更系统地学习和理解算法,并且能够随时查看自己的学习进展和学习成果。 通过编写和整理算法个人学习笔记pdf,个人学习者可以更好地理解和应用学习到的算法知识。这种记录和整理的过程可以帮助个人学习者更深入地思考问题和解决问题的方法,同时也可以帮助个人学习者更好地复习和回顾已学习的算法知识。 对于其他学习者来说,算法个人学习笔记pdf也是一个宝贵的学习资源。其他学习者可以通过查阅个人学习者的学习笔记pdf,借鉴和学习其中的思路和方法。这样可以帮助其他学习者更好地理解和应用算法知识,同时也可以促进知识的分享和交流。 总的来说,算法个人学习笔记pdf是一个为个人学习者提供记录和整理学习过程的工具,同时也是一个为其他学习者提供学习资源和参考的媒介。通过编写和整理算法个人学习笔记pdf,个人学习者可以更好地学习和理解算法知识,同时也可以促进算法知识的分享和交流。 ### 回答2: 算法个人学习笔记pdf是一份记录个人学习算法的文档,具有以下特点和优势。 首先,这份学习笔记是以PDF格式保存的,这意味着可以在任何设备上方便地查看和阅读,无需依赖特定的平台或软件。无论是在电脑、平板还是手机上,都可以轻松地浏览和学习。 其次,这份学习笔记个人整理的,因此具有个性化的特点。不同的人在学习算法时可能会关注和理解的重点有所不同,通过个人学习笔记,可以反映出个人对算法知识的理解和思考。这样的学习笔记对于个人学习和复习过程非常有帮助。 此外,这份学习笔记应当具有清晰的结构和逻辑。算法知识通常是有层次结构的,基本的知识点和概念通常是必须掌握的基础,而进阶的知识则需要在掌握基础知识的基础上构建。学习笔记应当按照这个结构和逻辑进行组织,便于学习者理解和掌握。 最后,这份学习笔记应当具有实例和练习题。算法知识的学习不能停留在理论层面,还需要通过实际的例子和练习题进行实践和巩固。学习笔记应当包含这些实例和练习题,并给出相应的解析和答案,方便学习者进行练习和巩固。 总而言之,算法个人学习笔记pdf是一份方便、个性化、结构清晰、包含实例和练习题的文档,对于学习者来说非常有价值。 ### 回答3: 算法学习笔记PDF是一份用于记录个人学习算法的文档。通过编写学习笔记,我可以对算法的理论和实践有更深入的理解和掌握。 首先,在学习算法的过程中,理论与实践结合是非常重要的。在学习笔记中,我可以记录下算法的原理和相关的数学推导,以及对应的代码实现和应用场景。通过这样的记录方式,我可以更好地理解算法的本质和使用方式。 其次,学习笔记可以帮助我回顾和巩固所学的知识。通过整理和总结学习笔记,我可以梳理出算法的基础知识和重要思想,并将其记忆固定下来。同时,学习笔记也可以作为复习的资料,提供方便快捷的回顾方式。 此外,学习笔记还可以促进自我思考和学习方法的改进。在编写笔记的过程中,我可以思考和提出自己的问题,并通过查阅相关资料和与他人讨论,来找到问题的答案和解决方案。这样的思考过程可以帮助我提高问题解决的能力和学习效果。 最后,学习笔记可以与他人分享和交流。通过分享学习笔记,我可以与其他学习者进行交流和讨论,互相学习和提高。同时,学习笔记也可以作为自己学习和成长的见证,激励自己坚持学习和进步。 总之,算法个人学习笔记PDF是一份记录、回顾、思考和分享的文档,对于个人的算法学习具有重要的意义。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值