第四阶段上课也总结了一些小知识点

一:像这种父类菜单,作用只有一个,就是提供统一的版本号
<parent>

    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.4.2</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

二:跳过测试类打包
<properties>

    <java.version>1.8</java.version>
    <!--跳过测试类打包-->
    <skipTest>true</skipTest>
</properties>

三:springboot程序与当前maven打包/编译有关,没有build标签会出现(没有主菜单的bug显示)

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

四:Ctrl+Shirt+alt+/ 打开热部署那个running文件(别忘了加依赖,带devtoops的那个)

五:Editstarer:搜索依赖工具(或者去网站mavenrepositry)

六:无参和有参构造注解 要么不写,要么全写@NoArgsConstructor @AllArgsConstructor

七:关于lombok面试题:
由于lombok需要安装插件,否则程序无法使用,如果在生产环境下 问linux系统中是否需要提前安装lombok? 答案:不需要
原因:lombok插件在程序的编译期有效. 由.java文件编译为.class文件时有效。linux系统中的运行时xxx.jar包文件 内部都是.class文件

八:%2B代表+

九:继承接口时,切记添加泛型

十:Ajax特点:局部刷新,异步调用。
.ajax()一定要掌握!!!案例如下8种类型下方!!!
(1)type : 定义请求的类型 GET/POST/PUT/DELETE
(2)URL: 指定请求的路径
(3)dataType: 指定返回值类型 一般可以省略
(4)data : ajax向后端服务器传递的数据
(5)success: 设定回调函数一般都会携带参数
(6)async: 异步操作 默认值为true 改为false表示同步操作.
(7)error: 请求异常之后 执行的函数.
(8)cache: ajax是否使用缓存 默认值为true

十一:Ajax呈现常见四种方法:.ajax|.get(1.url网址,2.传递的参数,3.回调函数,4.返回值类型)|.post()|.getJSON()

十二:maven项目打包方式:1.jar包(默认值)2.war包(将依赖中的jar改成war)3.pom(聚合工程)
maven作用:
Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件。
Maven是一站式的项目的管理软件 主要的功能:项目的创建/jar包管理/项目打包/发布/部署等功能.

java编译过程: .java文件---------.class文件-------打包----(.class文件的集合) xxx.jar
1).clean 清空maven中的target目录…
2).compile 通过命令 maven将.java文件转化为.class文件
3).install 将项目打包部署 将项目动态的在target和本地仓库中进行存储.

十三:由于项目较多,如何统一管理?
答案:采用pom(聚合工程)的方式统一管理,打包方式POM

parent:父类jar包 关系:(继承)
common作用:工具API统一管理 关系:(依赖)

十四:分布式系统核心思想: 将项目的功能模块拆分到不同的tomcat服务器中,减少了系统架构的耦合性,提高了扩展性

十五:注意事项 父级项目中没有主启动类所有不需要添加build标签 有main方法时需要添加插件

十六:JAVA四大域对象和jsp九大内置对象总结(百度)
四大域对象排序:PageContext (page域) < request < session < servletContext(application域)

十七:mybatis plus官网(使用MP方式时可以查询配置类)
MP是利用对象的方式操作数据库

十八:写代码流程:先pojo 再mapper(Dao)层及代码(单表直接继承MP,别忘了泛型) 再service 和serviceImpl 最后再controller

十九:(以后工作)业务说明:业务是什么

二十:kindeditor介绍
KindEditor是一套开源的HTML可视化编辑器,主要用于让用户在网站上获得所见即所得编辑效果(图片),兼容IE、Firefox、Chrome、Safari、Opera等主流浏览器。

二十一:RestFul的优点
面试题目: 现在越来越多的企业使用直接使用restFul方式实现业务传参. restFul有什么优点? 为什么不用传统的方式传递数据??
例子: 将业务数据动态的拼接到URL地址中.
http://localhost:8091/addUser/100/tomcat猫/18/女
常规: http://localhost:8091/addUser?id=100&name=“tomcat猫”&age=18&sex=“女”
答案:
1.轻量,直接基于http 利用不同的请求的方式实现不同的CURD操作.面向资源,一目了然,具有自解释性。
2.数据描述简单,一般以xml(现在用的少量 结构复杂),json做数据交换。
3.无状态,在调用一个接口(访问、操作资源)的时候,可以不用考虑上下文,不用考虑当前状态,极大的降低了复杂度。简单、低耦合

二十二:静态代码块的作用:为属性赋值,初始化实例对象
------------------------------------nginx----------------------------------
二十三:反向代理特点(保护了服务端信息)
反向代理服务器是介于用户和服务器之间的
用户直接访问代理服务器,以为代理服务器就是真实的服务器.
用户不清楚真实的服务器到底是谁.
反向代理是服务器端代理.保护了真实的服务器信息.
反向代理主要的作用 访问服务器获得服务器数据的.

二十四:正向代理特点(保护了用户信息)
1.正向代理服务器介于用户和目标服务器之间
2.用户非常清楚的知道服务器网址是谁.
3.服务器端不清楚真实的用户是谁.
4.正向代理一般都是客户端代理.保护了用户的信息.
5.正向代理一般都是为了获取网络资源.例如路由器

二十五:nginx特点
1.占用内存少 tomcat服务器启动200M Nginx服务器启动时 2M
2.并发能力强 tomcat并发能力150-200左右 Nginx并发能力 3-5万/秒
3.Nginx主要的功能做反向代理
4.Nginx可以作为负载均衡服务器使用

二十六:Nginx命令
说明: nginx的命令要求在nginx.exe所在的目录中执行.

1).启动命令 start nginx
2).重启命令 nginx -s reload
3).关闭命令 nginx -s stop

二十七:nginx配置说明

编辑nginx配置文件必须在协议内部完成

#配置图片服务器
server {
    #一般条件下都是80端口
    listen    80; 
    server_name image.jt.com;

    location / {
        # root代表映射文件目录
        root E:/JT_IMAGE;
    }
}

#配置域名代理
server {
    listen 80;
    server_name  manage.jt.com;

    location / {
        #代理 服务器访问地址
        #proxy_pass http://localhost:8091;
        proxy_pass  http://jtWindows;
    }
}

#构建tomcat服务器集群  
#关键字: upstream 定义集群
#默认规则: 1.轮询策略  2.权重 weight=阿拉伯数字  3.IPhash(一般在测试的时候使用,其他时间不用)
#down 如果nginx集中添加down属性 则标识nginx服务器不会再将请求,发给该服务器.
#backup 该属性用来标识备用机,正常的情况下 用户不会再次访问备用,除非当前服务器遇忙/当前服务器宕机.才有可能访问备用机.
# max_fails=1 设定最大的失败次数
# fail_timeout= 失败的超时时间
# 如果nginx请求达到了最大的失败次数,则在规定的时间内,不会再把请求发给tomcat服务器.直到下一个周期.
upstream jtWindows {
    #ip_hash;
    server localhost:8081 max_fails=1 fail_timeout=60s;
    server localhost:8082 max_fails=1 fail_timeout=60s;
    server localhost:8083 max_fails=1 fail_timeout=60s;
}

二十八:HOSTS文件介绍
作用: 在本机可以实现域名与IP地址的映射关系
位置: C:\Windows\System32\drivers\etc
可以通过软件右键管理员运行SwitchHosts修改hosts文件

二十九:项目发布DOS命令:先打包项目(可以打包整个,也可以分着打包)然后复制.war(target里),然后新建文件夹改war包名字
然后目录cmd输入 java -jar xxxx.war
说明:如果项目发布之后鼠标左键点击dos命令窗口可能阻塞当前程序,通过ctrl+c取消阻塞.

三十:
改完nginx需要重新启动一下,切记要重启之前先开启 启动完以后重新启动一下
报502是因为nginx开多了 解决方法:打开任务管理器结束进程树

三十一:Nginx进程项相关说明
说明: 每次启动nginx服务器时,都会启动2个进程项.一个是守护进程/一个是主进程
守护进程: 防止主进程意外关闭的. 内存小的
主进程: 主要提供反向代理服务. 内存大的
要关闭主进程首先要关闭守护进程

------------------------------------Linux-----------------------------------------
三十二:linux(服务器端操作系统)
去公司用库就用桥接模式
在家用自己电脑自己和自己玩 不需要第三方 就用NAT模式

三十三:关于Linux IP地址无法获取说明
说明:由于Linux系统启动时可能没有重启网卡导致Linux IP无法获取. 执行如何linux命令
1.service NetworkManager stop
2.chkconfig NetworkManager off 永久关闭 Manager网卡
3.service network restart 重启network网卡

三十四:
绝对路径:要求从根目录出发(/) 例如:cd /aa
相对路径:从当前目录出发(xxx目录)例如 cd aa
命令之间要加空格

三十五:cd命令集
cd表示切换目录
clear清除命令
ifconfig/ip addr 检查IP地址
pwd 检查并显示当前的位置
tab键 自动补齐(注意唯一性)
cd命令是linux中最基本的命令语句,必须熟练掌握
cd / 返回根目录
cd ~ 用户主目录
cd . 当前目录
cd ..返回到上一级目录
cd /usr/ 进入到usr目录
cd – 返回上一个目录
cd 直接回家

三十六:ls目录和文件
ls –l 详细格式,文件权限,时间
ll 和ls –l作用相同
ls *.txt 查看所有的txt类型文档

三十七:目录操作
mkdir --help 请求帮助
mkdir 创建目录
mkdir a 创建 a目录
mkdir -p a/b 创建 a目录,并在a目录里创建b目录
mkdir -m 777 c 创建一个权限为777的C目录
rmdir 删除目录(如果目录里有文件,则不能用此命令)

三十八:Vi/vim创建(用的最多,Vi可以忽略不用)/查看/编辑文件
命令行:Esc切换到命令行模式。
编辑模式:
按i,在光标前开始编辑
按a,在光标后开始编辑
按o,在当前行的下一行开始编辑
按u, 撤销之前的操作
底行模式:按 shift+:冒号。
:q! 不保存退出
:wq 保存退出
:/world 从当前光标处,向上查找world关键字
:?world 从当前光标处,向后查找world关键字

三十九:删除文件
rm 删除文件
rm n.txt 提示y删除n放弃
rm –f n.txt 不提示
rm –rf dirname 不提示递归删除目录下所以内容
rm –rf * 删除所有文件
rm –rf /* 删除所有子目录所有和文件

四十:复制和移动文件
cp复制文件
cp nginx.conf n.txt
cp –R tomcat1 tomcat2 #复制整个目录
mv 修改文件名,移动文件
mv n.txt m.txt 修改文件名称
(例如mv a.txt a/c.txt 意思是:移动a.txt 到a目录下并且改名为c.txt)

四十一:浏览文件
cat 输出文件所有的内容 可以检索少量的日志文件
more 输出文档所有的内容,分页输出,空格浏览下一屏,q退出
less 用法和more相同,只是通过PgUp、PgOn键来控制
tail 用于显示文件后几号,使用频繁(tail -10 xxxx.log 显示xxxx的最后十行日志信息)
tail -10 nginx.conf 查看nginx.conf的最后10行
tail –f nginx.conf 动态查看日志,方便查看日志新增的信息
ctrl+c 结束查看

四十二:打包命令
tar命令位于/bin目录下,它能够将用户所指定的文件或目录打包成一个文件,但不做压缩。一般Linux上常用的压缩方式是选用tar将许多文件打包成一个文件,再以gzip压缩命令压缩成name.tar.gz的文件。
-c 创建一个新的tar文件
-v 显示运行过程的信息
-f 指定文件名
-z 调用gzip压缩命令进行压缩
-t 查看压缩文件的内容
-x 解开tar文件
tar –cvf n.tar ./* 压缩当前目录下的所有文件和目录,文件名为n.tar
tar –xvf n.tar 解压压缩包中的文件到当前目录(如果长时间未解压成功 Ctrl+C推出)
tar –cvzf m.tar.gz ./* 压缩文件
tar -zxvf m.tar.gz 解压m.tar文件到当前目录
压缩:tar -cvf a.tar ./*
解压:tar -xvf a.tar

四十三:grep命令
grep root /etc/passwd 在文件中查找关键字root
grep root /etc/passwd –-color 高亮显示
grep root /etc/passwd –A5 –B5 高亮显示,A后5行,B前5行
grep -n root /etc/passwd 查找并显示行数
grep -v root /etc/passwd 取反,查出不含root的数据

四十四:编辑JDK环境变量
说明: Linux中需要配置环境变量
文件位置:/etc(高级系统环境变量)/profile(包括了linux系统环境变量的配置信息)
编辑文件命令:vim /etc/profile

设定jdk环境

export JAVA_HOME=/usr/local/src/jdk1.8
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib

让环境变量生效命令(重启环境变量): source /etc/profile

-----------------------------------LinuxMysql--------------------------------
步骤:先安jdk,再安mysql,再修改权限,再关闭防火墙
具体参考csdn博客

四十五:mysql数据库命令(详情请看CSDN闪耀太阳博客关于linux系统mariadb的安装)
万能组合键ctrl+c(取消一切)
yum是linux里的软件商城
1.启动命令 [root@localhost src]# systemctl start mariadb
2.重启命令 [root@localhost src]# systemctl restart mariadb
3.关闭命令 [root@localhost src]# systemctl stop mariadb
4.设定开机自起 [root@localhost src]# systemctl enable mariadb
5.关闭开机自起 [root@localhost src]# systemctl disable mariadb
cd /var/lib/mysql/ 切换到mysql目录

四十六:如果要用sqlyog连接数据库,需要关闭权限和防火墙
权限:
update user set host="%" where host="localhost"; 用sql语句开放权限
select host,user from user; 查询主机地址从用户表中
flush privileges; 刷新权限

防火墙:
firewall-cmd --state 检查防火墙状态

需求: 告诉linux系统以后开机不需要启动防火墙
命令:
1.systemctl disable firewalld.service
2.systemctl enable firewalld.service

手动关闭防火墙
说明:通过命令手动将防火墙关闭
命令:
1.systemctl stop firewalld.service
2.systemctl start firewalld.service

重启防火墙
firewall-cmd --reload

项目上传:
说明: 通过Linux命令 java -jar 8081.war 的方式可以启动服务器.
缺点: 将当前的终端占用了,如果需要执行后续的Linux命令 则需要重新开启终端… 用户体验不便
关闭服务器: ctrl + c

带&的命令
命令: java -jar 8081.war &
解释: &号代表连接. &之前的命令执行成功之后,点击回车可以继续执行后续的命令.
缺点:
1.如果服务器需要打印日志信息,则当前的终端依然会被占用.
2.通过java -jar 方式 表示前台启动.如果客户端的终端关闭,则服务随之关闭…

后端运行命令(以后要用的)
命令: nohup java -jar 8081.war -> 8081.log &
优点:
1.程序的运行不受终端的影响.
2.程序运行都会在后端生成日志信息,不会再次干扰终端使用.
以后项目发布建议采用后端运行的方式.

关于服务检索命令
命令: ps -ef |(管道) grep 服务名称
命令: jps 仅检索带war包的
管道技术的含义:前边查询的结果当做后边的参数来使用

命令: kill PID号 结束进程
kill -15 PID号 较为强硬的结束
kill -9 PID号 终极命令

四十七:利用shell脚本发布项目(当有很多个项目需要发布时,或者很多个服务要启动时)
步骤:
首先在项目根目录输入命令 vim start.sh
然后点i进行插入
然后输入#!/bin/sh
然后输入后端发布命令(nohup...很多项目就复制)
然后按esc
然后:wq保存退出
然后通过输入命令 sh start.sh 进行使用

权限不足:加sudu(暂时使用超级管理员)
--------------------------------------linuxNginx----------------------------------
步骤:先安装nginx 在修改conf文件 在修改hosts文件(如果有域名就不用修改hosts) 再重启访问(切记要在工作目录(nginx/sbin)而不是源码目录(nginx-source))
具体参考博客

1.启动命令: ./nginx
2.重启命令: ./nginx -s reload
3.关闭命令: ./nginx -s stop

--------------------------------------修改虚拟机ip地址----------------------------------
步骤:准备两台虚拟机(直接在原目录中解压一份即可),然后检查(包括ping ipconfig ipaddr)
{如果没有IP展现则执行如下的命令
service NetworkManager stop
chkconfig NetworkManager off 永久关闭 Manager网卡
service network restart 重启network网卡}

然后修改ip地址(切记要在从虚拟机上改130因为改完才能连)步骤:
找到IP地址的目录
cd /etc/sysconfig/network-scripts/
然后ls
然后vim ifcfg-ens33
然后按i修改ip地址为192.168.126.130
然后esc :wq保存退出
然后重启网卡 检查ip地址是否正确
然后通过Mobaxterm通过ip连接

从机只需要安装mysql数据库即可,(不会参考csdn闪耀太阳)
然后启动数据库将数据库设置为开机启动,
然后开放权限(通过sql语句),关闭防火墙(systemctl stop/disable firewalld.service),将防火墙设置成默认不开启(因为这样才能连接上数据库)
说明:

  1. 如果需要远程链接数据库必须通过防火墙
  2. 如果远程链接数据库,数据库中必须开启远程访问权限才行,否则拒绝链接.

------------------------------------数据库备份-------------------------------------
数据库备份分为冷备份和热备份

   冷备份说明

业务场景: 数据库中的记录应该保证尽可能的安全,如果数据丢失则会造成不可挽回的损失!!!
说明: 根据用户的需求 定期的将数据库文件进行备份/转储 从而保证数据的安全.
缺点:
1.该操作需要人工手动的操作
2.冷备份由于不是实时的,所以可能导致数据丢失…
3.如果备份的数据库的文件较大,则备份的时间很久,容易出错.
说明: 数据的冷备份是公司恢复数据最后有效的手段.

   热备份说明

备份步骤:
1.当用户进行了数据的修改时,会将修改的数据写入二进制日志文件.
2.从库通过IO线程 读取主库中的记录.将数据写入到中继日志中.
3.Sql线程读取数据信息.通过sql语句写入到从库中.
数据库备份的功能,是数据库原生自带的服务.所以不需要第三方的干预…

注意事项: 数据库中的二进制日志文件 默认的条件下是关闭的.如需备份,需要手动的开启.

二进制文件位置: vim /etc/my.cnf

定义mysql服务编号 要求必须唯一

server-id=1

定义mysql二进制文件名称

log-bin=mysql-bin
然后重启数据库并检查二进制文件信息
systemctl restart mariadb

说明:主库重启了就会生成新的二进制文件
rm -rf mysql-bin.* 意思是删除多余的二进制文件
SHOW MASTER STATUS; 意思是检查主库状态
然后ls查看

然后实现数据库热备份
一: 首先查看主库(129)
/主库 主要主库重启了就会生成新的二进制文件信息/
命令:SHOW MASTER STATUS;

二: 然后在从库中(130)
/*130 数据库从库 IP地址/端口号/用户名/密码/
二进制文件名称/二进制文件的位置*/
CHANGE MASTER TO MASTER_HOST="192.168.126.129",
MASTER_PORT=3306,
MASTER_USER="root",
MASTER_PASSWORD="root",
MASTER_LOG_FILE="mysql-bin.000001",
MASTER_LOG_POS=245;

/2.启动数据库主从服务/
START SLAVE;

/3.检查主从的状态/
SHOW SLAVE STATUS;

/4.搭建错误 1).关闭主从服务 /
/4.1 关闭主从服务/
STOP SLAVE;
/4.2 检查报错信息 last_sql_error last_io_error 根据日志查询状态/
/4.3 重新搭建主从服务 /

如果还有错报一个No一个YES那就
RESET SLAVE;//重置主从服务(终极奥义)

四十八:重要!!!:当虚拟机(Mobaxterm出现连接超时错误时,首先cmd 测试pingip地址,
然后重启linux虚拟机,可以通过Mobaxterm上的settings找到SSH keepalive按钮关闭这个)

--------------------------------------数据库高可用实现--------------------------------------
server.xml标识的是用户与代理的关联关系
<!--用户标签-->

<user name="root">
    <property name="password">root</property>
    <!--与schema.xml中的配置相同 注意数据库的大小写-->
    <property name="schemas">jtdb</property>
</user>

<user name="user">
    <property name="password">user</property>
    <property name="schemas">jtdb</property>
    <property name="readOnly">true</property>
</user>

</mycat:server>

schema.xml标识的是代理和数据库之间的关联关系.
要素: 数据库IP地址/端口号/数据库名称/用户名/密码.
<!--配置第一台主机主要进行写库操作,在默认的条件下Mycat主要操作第一台主机在第一台主机中已经实现了读写分离.因为默认写操作会发往137的数据库.读的操作默认发往141.如果从节点比较忙,则主节点分担部分压力.

    -->
    <writeHost host="hostM1" url="192.168.126.129:3306" user="root" password="root">
        <!--读数据库1-->
        <readHost host="hostS1" url="192.168.126.130:3306" user="root" password="root" />
        <!--读数据库2-->
        <readHost host="hostS2" url="192.168.126.129:3306" user="root" password="root" />
        
    </writeHost>

常见端口号:8080tomcat服务器|3306mysql数据|80nginx|6379redis|8066数据库代理

启动mycat服务:./mycat start
停止mycat服务:./mycat stop
检查状态信息:./mycat status

           关于mycat 报错说明

通过 cat mycat.log| cat wrapper.log检查服务启动是否正确
负载均衡的含义:有可能第一次访问的是主,也可能访问的是从
---------------------------数据库实现高可用(前提是实现双机热备)-------------------------
IP:192.168.126.129原来是主库现在当从库
IP:192.168.126.130原来是从库现在当主库

/130配置 代表数据库主库/
/查询状态信息/
SHOW MASTER STATUS;

/设置129为从库/
CHANGE MASTER TO MASTER_HOST="198.168.126.130",
MASTER_PORT=3306,
MASTER_USER="root",
MASTER_PASSWORD="root",
MASTER_LOG_FILE="mysql-bin.000001",
MASTER_LOG_POS=468;

/启动主从服务/
START SLAVE;

/检查主从状态/
SHOW SLAVE STATUS;

/如果有错就先停止主从服务/
STOP SLAVE;

/如果需要重新配置 则reset一下/
RESET SLAVE;
具体参考 是否或者博客

---------------------------------------------------redis-----------------------------------------------
数据库分为关系型数据库和非关系型数据库
关系型数据库:mysql数据库|oracle数据库 二维表 行和列
非关系型数据库:mongoDB(主流)|hbase|redis 一维表

数据类型口诀:1-5-8
1代表最多的string字符串类型
5代表五种基本类型(散列(hashes),列表(lists),集合(sets),有序集合(sorted sets)和范围查询)
8代表一共支持八种类型,另外三种不常用( bitmaps,hyperloglogs和地理空间(geospatial)索引半径查询)

步骤:
首先安装redis并改名
然后修改,conf配置文件(修改三处1.将IP绑定注释2.关闭保护模式3.开启后台启动)

Redis入门命令(具体命令参考京淘课前资料redis那有个word文档,也可以参考redis官网)
1.启动命令: redis-server redis.conf
2.进入客户端: redis-cli -p 6379(如果端口号是6379 直接用redis-cli就可以启动) exit退出|quit|ctrl+c
3.关闭redis: redis-cli -p 6379 shutdown(同上)

启动多台redis
命令:
redis-server 6379.conf
redis-server 6380.conf
redis-server 6381.conf

进入到某个客户端里
命令:
redis-cli -p 6379

SetParams:

 *          XX: 数据存在时赋值.
 *          NX: 数据不存在时赋值
 *          EX: 添加超时时间单位秒
 *          PX: 添加超时时间单位毫秒

-----------------------------------------------Aop实现缓存-----------------------------------------------------
Proceedingjoinpoint必须位于参数的第一位(否则就会报a::0 绑定异常)

------------------------------------------------redis策略---------------------------------------------------
RDB模式:
特点:
1.RDB模式是Redis默认的持久化规则.
2.RDB模式记录的是Redis内存数据快照(只保留最新数据)
3.RDB模式定期持久化(时间可调) 可能会导致数据丢失.
4.RDB模式备份效率是最高的.
5.RDB模式备份阻塞式的 在备份时不允许其他用户操作. 保证数据安全性.
命令:
1.主动备份 save 会阻塞用户操作
2.后台备份 bgsave 异步的方式进行持久化操作 不会阻塞.

AOF模式
特点:
1).AOF模式默认的条件下是关闭状态.需要手动开启.
2).AOF模式记录的是用户的操作过程. 可以实现实时持久化.保证数据不丢失.
3).AOF模式维护的持久化文件占用的空间较大.所以持久化效率不高. 并且需要定期的维护持久化文件.
4).AOF模式一旦开启,则redis以AOF模式为主 读取的是AOF文件.

面试题1:
RDB模式记录的是Redis内存数据快照(只保留最新数据)
AOF模式记录的是用户的操作过程. 可以实现实时持久化.保证数据不丢失.

关于redis的面试题
关于flushAll操作:
面试题2:公司新来了个漂亮的实习生. 去生产环境下,误操作了flushall命令,问你作为主管 如何处理?
解决方案:
1.关闭现有的redis服务器
2.编辑redis持久化文件,进入AOF文件中,修改文件信息.,将fluashAll命令删除
3.重启redis服务器

一般条件下:RDB模式和AOF模式都会开启,通过save命令执行RDB持久化方式

面试题3:单线程的redis为什么快?
1)redis运行环境在内存中,纯内存的操作,所以他快
2)单线程操作,避免频繁的上下文切换
3)采用了非阻塞I/O多路复用的机制(动态感知)

redis6.0版本以前都是单线程 6.0以后支持多线程
LRU算法最好用,采用时间方法,内部是双向链表
-------------------------------------Redis默认的内存优化策略------------------------------------
面试题4:什么叫做定期删除+惰性删除策略
1.定期删除:redis默认每隔100ms 检查是否有过期的key,检查时随机的方式进行检查(不是检查左右的数据,因为效率太低)
问题:由于数据众多,可能抽取时没有被选中,可能出现 该数据已经到了超时时间,但是redis并没有马上删除数据

2.惰性策略:当用户获取key的时候,首先检查数据是否已经过了超时时间,如果已经超时,则删除数据
问题:由于数据众多,用户不可能将所有的内存数据都get一遍,必然会出现 需要删除的的数据一直保留在内存中的现象 占用内存资源
3.可以采取上述的内存优化手段,手动删除

-----------------------------------------redis分片机制-----------------------------------------
一致性哈希:
作用:就是解决怎么存储的问题

  1. 均衡性(平衡性)

尽可能均匀分片节点中的数据

  1. 单调性

实现数据的动态迁移

  1. 分散性

由于分布式原因,导致不能获取全部节点信息,使得一个key有多个位置

  1. 负载

是分散性另一种表现形式.表现为一个位置有多个key

--------------------------------------------哨兵机制--------------------------------------------
配置哨兵的前提
说明:实现redis数据同步(配置主从挂载),是实现哨兵配置的前提条件.

     实现主从挂载

先进入主机 redis-cli -p 6379
发起状态检查 info replication
然后进入从机1 redis-cli -p 6380
然后进行挂载命令 SLAVEOF host port
然后进入从机2 redis-cli -p 6381
然后进行挂载 SLAVEOF host port
然后进入主机redis-cli -p 6379
然后检查状态 inforeplication

命令:SLAVEOF host port 例如:SLAVEOF 192.168.126.129 6379

检查主从状态 info replication

       哨兵配置

首先复制文件sentinel.conf文件到sentinel文件夹
然后修改sentinel.conf配置
1).关闭保护模式
protected-mode no
2).开启后端运行
daemonize yes
3).监控主机,设定哨兵投票数
sentinel monitor mymaster 192.168.126.129 6379 1

  1. 设定哨兵选举的时间

sentinel down-after-milliseconds mymaster 10000

       哨兵高可用测试

然后启动哨兵
命令:redis-sentinel sentinel.conf
然后查看 ps -ef |grep redis

       哨兵高可用测试

第一步: 检查redis主机的状态.redis-cli -p 6379 然后info replication
第二步: 关闭redis主机.redis-cli -p 6379 shutdown
第三步: 等待10秒 检查从机是否切换为主机.redis-cli -p 6381然后info replication
第四步: 重启主机,检查是否为新主机的从.redis-server 6379.conf 然后redis-cli -p 6379 然后info replication

分片哨兵总结
1.分片主要实现了内存扩容, 没有高可用的效果.
2.哨兵主要实现了高可用效果, 没有实现内存数据的扩容. 哨兵本身没有高可用的效果.
如何优化: 内存扩容,节点实现高可用 redis集群实现.

---------------------------------------redis集群搭建(重点)-------------------------------------------------
集群搭建具体参考文档(京淘项目课前资料)
redis集群搭建 包括三种模式分别是主从模式 Sentinel(哨兵模式) Cluster模式

批量修改配置文件命令:
:%s/7000/700x/g

当服务多的时侯根据脚本启动服务
vim start.sh

!/bin/sh

redis-server 7000/redis.conf &
然后通过右键复制
.....
:wq保存
启动服务
sh start.sh

关闭服务
vim stop.sh

!/bin/sh

redis-cli -p 7000shutdowm $
复制
.......
:wq保存
然后sh stop.sh

一致性哈希和hash槽算法的区别 在csdn博客上关注有

不同的key有相同的结果叫做碰撞

相关面试题在day15博客上有

关于HTTPS转化问题
说明:由于浏览器出于安全性的考虑,将http协议动态的转化为https协议规范. 但是由于我们没有购买域名.所以无法使用https.应该通知谷歌浏览器禁用https的转化.

操作步骤:

  1. 在浏览器中键入 “chrome://net-internals/#hsts:“
  2. 删除域名

---------------------------------------------------跨域------------------------------------------------
域名协议端口号相同 叫同域名
违反一个叫跨域
跨域方式1:jsonp
跨域方式2:cors

什么是跨域:只有浏览器参与了发送ajax请求 并且违反了同源策略(协议域名端口号都相同)才叫跨域

Httpclient不是跨域

------------------------------ ------------------Httpclient---------------------------------------------
Httpclient:用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包

面试题:
问: HTTPClient是跨域请求吗? 不是 就是远程过程调用…

--------------------------------------------------微服务调用思想--------------------------------------------
步骤:
1.服务启动时,会链接注册中心,将服务数据(服务名称|IP|端口)写入注册中心.
2.注册中心接收用户服务数据之后,动态维护服务列表.
3/4.消费者启动时,链接注册中心,之后将服务列表缓存到本地(缓存到消费者内存中(快)) 方便下次调用.
5.当用户调用服务消费者时.消费者根据当前服务列表的信息,进行负载均衡,挑选其中一个服务进行访问.
6.注册中心为了保证服务列表的正确性,通过心跳检测机制.实时监控所有服务生产者,如果服务器宕机,则注册中心将第一时间更新服务列表.并且全网广播 通知所有的消费者.更新服务列表.
优点:用户每次访问 几乎可以保证访问的服务器都是正确的.

--------------------------------------------------zookeeper安装--------------------------------------------
概念:Zookeeper负责服务的协调调度.当客户端发起请求时,返回正确的服务器地址.

zookeeper是提供一致性的软件

步骤:上传 解压 改名字 编辑conf文件(具体参考课前资料zookeeper安装讲义)

启动zk
跳转到bin目录中 zk启动关闭命令如下.
sh zkServer.sh start 或者 ./zkServer.sh start
sh zkServer.sh stop
sh zkServer.sh status

--------------------------------------------------zookeeper集群安装--------------------------------------------
准备文件夹zkCluster
主要是创建myid (vim myid)
然后修改conf文件
具体参考课前资料文档

ZK集群测试
通过下面的命令启动zk集群.
sh zkServer.sh start zoo1.cfg
sh zkServer.sh stop zoo1.cfg
sh zkServer.sh status zoo1.cfg

搭建集群规则
规则:剩余存活节点的数量>N/2 N代表节点总数
计算:

1个节点 1-1>1/2 假的 一个节点不能搭建集群
2个节点 2-1>2/2 假的 两个节点不能搭建集群
3个节点 3-1>3/2 真的 集群的最小单位就是三台
4个节点 4-1>4/2 真的 大于三台都能搭建集群

为什么集群一般都是奇数台
从容灾性/经济性的角度考虑问题
奇数 3台 3-1 > 3/2 宕机1台可以正常工作
3-2 > 3/2 宕机2台集群崩溃
偶数 4台 4-1 > 2/4 宕机1台可以正常工作
4-2 > 4/2 宕机2台集群崩溃
答: 发现奇数台和偶数台的容灾性相同的,所以搭建奇数台更好.

--------------------------------------------测试zookeeper高可用----------------------------------------
选举原则: myid最大值优先原则
题目: 1,2,3,4,5,6,7个zk节点依次启动
问题1: 谁当主机? 4
问题2: 谁永远不能当主机? 1 2 3
高可用:最大值优先选举

-------------------------------------------------Dubbo框架--------------------------------------------
提供了六大核心能力:
面向接口代理的高性能RPC调用,
智能容错和负载均衡,
服务自动注册和发现,
高度可扩展能力,
运行期流量调度,
可视化的服务治理与运维。

dubbo 不用@Autoware 用@Reference 注入接口的注解
还有@Service 是dubbo家的Service

@Reference(loadbalance="xxxx")
Dubbo框架注入接口的注解 xxxx的位置可以设置
一致性hash算法
类名 : ConsistentHashLoadBalance
作用: 将客户端与服务器进行绑定. 通过一致性hash算法 绑定具体的服务器.
最少访问
类名 : LeastActiveLoadBalance
作用: 按照当前服务器的压力,挑选压力小的进行访问.
随机算法
类名: RandomLoadBalance
作用: 随机实现负载均衡
轮询机制
类名: RoundRobinLoadBalance
作用: 按照服务器的顺序 依次访问

------------------------------------------------微服务框架测试--------------------------------------
服务高可用测试
关闭一个服务提供者,检查用户的访问是否收到影响. 经过测试.用户访问不受影响.

zk高可用测试
将zk主机关闭,检查用户访问是否受限. 经过测试访问不受限制.

zk集群宕机测试
将zk集群全部关闭,检查用户访问是否受限?? 不受影响 因为消费者本地也有服务列表信息(之前缓存的)

++++++++++++++++++++++++++++++++++++++++看控制台先调F12 再刷新页面 后台才可以监控到+++++++++++++++++++++++

-------------------------------------------session和cookie-----------------------------------------
Cookie: 在客户端保存服务器数据,在客户端实现数据共享.
cookie(客户端)特点:自己的域名下,只能看到自己的cookie,默认条件下不能共享

--------------------------------------------杂乱知识补充----------------------------------------------
一:@ResponseBody//将返回值转化为json //代表ajax程序结束

二:QueryWrapper(简称QW)//是MP封装的查询条件构造器
主要处理sql拼接、排序、实体参数查询等
注意!使用的是数据库表字段,不是java属性

三:单点登录:登陆一次就不需要在登陆
用户凭证保存在cookie中 因为cookie只能看到自己家的域名
再实现数据共享

四:程序真正的执行 是由处理器(Handler处理业务)开始执行的

五:boolean false 表示拦截 一般配合重定向方式使用

六:ThreadLocal(是线程安全的)
名称: 本地线程变量
作用: 在同一个线程内,实现数据共享.
编辑工具API:
public class UserThreadLocal {

private static ThreadLocal<User> userThreadLocal = new ThreadLocal<>();

//存数据
public static void set(User user){

    userThreadLocal.set(user);
}

//取数据
public static User get(){

    return userThreadLocal.get();
}

//数据删除  防止内存泄露
public static void remove(){

    userThreadLocal.remove();
}

}

七:打断点 看页面F12 查看错误

八:表单的序列化 可以简化参数的拼写

------------------------------------------------京淘项目总结----------------------------------------------------
4 京淘项目总结
4.1 Maven工作原理
1).maven作用 一站式的项目管理工具 管理jar包 项目打包部署
2).maven 依赖传递性 A --B–C 如何实现的
3).Maven如何保证jar包文件不被篡改 sha1 消息摘要.

4.2 SpringBoot工作原理
1).开箱即用原则? 如何实现的??
2).为属性赋值用法 @Value("${key}")
3).动态导入pro配置文件 @propertySource
4).环境分割 — 环境命名 默认环境选择
5).LOMBOK插件 注解 @Data xxxx
6).SpringBoot整合Mybatis 理解配置文件 别名包/驼峰映射规则
7).SpringBoot整合MybatisPlus ORM思想 对象关系映射.
8).SpringBoot整合web动态资源 JSP 项目打包 war包

4.3 分布式架构设计方案
1).分布式架构设计 按照模块拆分 按照层级拆分
2).理解分布式/集群/高可用的概念
3).构建分布式系统的原则 如何统一管理jar包 如何统一管理工具API

4.4 京淘后端项目搭建
1).业务 商品CURD操作 /商品分类CURD操作
2).VO对象的编辑原则 调用别人的JS 必须按照要求返回JSON.
3).全局异常处理的设计.
4).如何定义系统返回值对象 SysResult对象
5).文件上传案例.

4.5 反向代理服务器
1).什么是反向代理
2).什么是正向代理
3).nginx相关配置 命令 配置
4).hosts文件作用 实现域名与IP地址的映射
5).nginx 负载均衡方式 1.轮询 2.权重 3.iphash
6).nginx 高级属性用法 1.down 2.backup 3.高可用设定.

4.6 Linux
1).命令: cd/cp/mv/mkdir/rm/vim/…
2).安装JDK vim /etc/profile java -version
3).mariadb数据库安装 考虑权限 导入数据库/表 防火墙命令
4).实现manage项目Linux部署.
5).Linux的nginx项目部署
6).实现数据库高可用 数据库主从同步命令 基于Mycat实现数据库高可用.

4.7 Redis相关学习
1).redis命令 支持1-5-8种数据类型
2).redis分片机制 实现内存扩容 一致性hash算法 2^32取值方式
3).redis哨兵机制 实现高可用 哨兵的工作原理 如何监控
4).redis集群配置 redis分区算法. crc16(key)%16384
5).redis持久化策略 RDB快照 /AOF 操作过程
6).redis内存优化策略 LRU/LFU/random/TTL
7).什么是缓存穿透 访问不存在的数据 布隆过滤器算法
8).什么是缓存击穿 访问某个热点数据失效了 多级缓存
9).什么是缓存雪崩 大量的数据同时失效 多级缓存
10).SpringBoot整合redis相关配置.

4.8 实现前端搭建
1).跨域思想 同源策略(协议://域名:端口)
2).跨域解决方案 1.JSONP方式(1.利用script标签 src实现跨域 2.自定义回调函数 3.特殊格式封装)
2.CORS(设定服务端数据共享 设定响应头信息)
3).httpClient 万能的远程过程调用的方法 一般多见于框架底层代码 例如SpringCloud
4).伪静态思想 以.html结尾的请求

4.9 微服务框架
1).SOA思想
2).RPC 远程过程调用 相对本地而言 代词
3).微服务调用思想
4).注册中心 zookeeper服务. 单台—> 集群搭建
5).微服务框架的调用的流程 ZK集群的选举机制/工作原理
6).Dubbo框架 1.中立的接口 2.服务生产者 3.服务器消费者
7).Dubbo负载均衡机制 1.一致性hash 2.最小访问 3.随机策略 4.轮询机制 客户端负载均衡

4.10 业务流程调用
1).基于dubbo 实现商品数据的获取
2).基于dubbo实现jt-sso单点登录 Cookie操作 登录/登出/数据回显
3).完成购物车功能 CRUD操作 购物车中的记录如果存在则更新数量/不存在新增购物车.
4).完成权限控制 基于拦截器
5).利用request对象/ThreadLocal方式动态取值.
6).订单业务逻辑 表3张 为对象的引用赋值. 多张表业务操作 注意事务控制.

主要学习SpringCloud机制… docker容器 MQ技术.


MrXx
4 声望12 粉丝

引用和评论

0 条评论