学习技术5步走:
a.概念 是什么 ,能干啥 ,有啥用
b.为啥要用? 有啥优势
c.流程+原理 (面试最重要的点) 底层代码
d.如何使用 核心api(会不会用方法 ,注解)
e.和项目结合 。
1.关系型数据库,隔离级别默认使用可重复读
2.事务四大特性:原子性,一致性,隔离性,持久性
3.索引:
索引是查询变快的原因:B+Tree,不用扫描整张表得到需要的数据,没有用索引的时候,需要遍历双向链表来定位对应的页,而有了索引,则可以通过一层层“目录”定位到对应的页上。
index----普通索引,unique---- 唯一索引,primary key ---- 主键索引,组合索引,全文索引
4.存储引擎 MyISAM 和 InnoDB
默认使用InnoDB,支持事务,外键,MyISAM不支持。
现在一般都选用InnoDB,主要是MyISAM的全表锁,读写串行问题,并发效率锁表,效率低,MyISAM对于 读写密集型应用一般是不会去选用的。
5.delete、drop、truncate
当你不再需要该表时,用 drop;
当你仍要保留该表,但要删除所有记录时,用 truncate;
当你要删除部分记录时, 用 delete.
注意: 对于有主外键关系的表,不能使用truncate而应该使用不带where子句的delete语句,由于truncate不记录在日志中,不能够激活触发器
6.分布式ID生成器
雪花算法生成唯一主键值
分库分表是不要使用自带的自增,会有可能不同文章生成同样的id,使用分布式ID生成器
1.隔离级别默认读取已提交
1.事务:MySQL在innodb存储引擎的行级锁的情况下才可支持事务,默认是自动提交,而Oracle完全支持事务,默认不自动提交
? 2.分页查询:MySQL是直接在SQL语句中写"select... from ...where...limit x, y",有limit就可以实现分页;而Oracle则是需要用到伪列ROWNUM和嵌套查询
? 3.事务隔离级别:MySQL是可重复读的隔离级别,而Oracle是读取已提交的隔离级别
? 4.保存数据的持久性:MySQL是在数据库更新或者重启,会丢失数据,Oracle把提交的sql操作线写入了在线联机日志文件中,保持到了磁盘上,可以随时恢复
1.客户端和服务器端之间数据传输的格式规范,请求-响应协议,无状态协议(指协议对于事务处理没有记忆能力),解决办法:1、Cookie 2、通过Session会话保存。无连接(限制每次连接只处理一个请求)
2.常见Http协议状态:
200:请求被正常处理
301:永久性重定向
400:请求报文语法有误,服务器无法识别(例:接口接受数字,请求发送的中文)
403:请求的对应资源禁止被访问
404:服务器无法找到对应资源
500:服务器内部错误,无法完成请求 ,逻辑,代码等错误
1.7个HTTP方法:GET、POST、PUT、DELETE、PATCH、HEAD、OPTIONS
2.网络通信规范,rest风格是用来描述接口的,http 接口按照rest风格设计就是 restfull http
3.幂等性:不论你请求多少次,资源的状态是一样的。
1.脚本语言(不需要编译),用于增强HTML页面,以交互式和动态的方式呈现网页
2.跨平台,不依赖于操作系统,仅需要浏览器的支持。
3.DOM处理网页内容,BOM与浏览器交互
1.是一个简洁而快速的JavaScript库,
2.方便获取DOM元素
3.统一Ajax操作
1.商业级数据图表,它是一个纯JavaScript的图标库
1.构建用户界面的渐进式框架,核心是双向数据绑定,组件化
2.MVVM设计模式即model,view,viewmodel,它是数据驱动模式,即所有的一切通过操作数据来进行,而尽量避免操作dom树。
3.axios异步
1.基于Vue2.0开发,提供了丰富的PC端组件
1.前端页面渲染
1.是一个使用 Vue.js
开发跨平台应用的前端框架,开发者编写一套代码,可编译到iOS
、Android
、H5
、小程序等多个平台。
1.在客户端保存,保存用户名密码
1.在服务端保存
2.session 的运行依赖 session id,而 session id 是存在 cookie 中的,也就是说,如果浏览器禁用了 cookie ,同时 session 也会失效(但是可以通过其它方式实现,比如在 url 中传递 session_id)
1.介绍
负责处理客户请求,把结果返回给客户。交互式的浏览和生成数据,生成动态web内容,必须实现Servlet接口,用来处理网络请求的一套规范.
2.生命周期
1.收到请求后检查是否存在后创建Servlet实例对象
2.调用Servlet对象的init()
3.调用service()将请求(HttpServletRequest)和响应(HttpServletResponse)对象作为参数传递进去
4.WEB应用程序被停止或重新启动之前,调用destroy()
3.forward()与redirect()区别?
forward():转发,一次请求,共享request数据,服务器行为,地址栏不变
redirect():重定向,两次请求,不能共享数据,客户端行为,地址栏改变
1.动态网页技术标准,部署于服务器,响应客户端发送的请求,根据请求动态的生成web网页,实现以静态页面为模板动态生成其中部分内容,是Servlet技术的扩展,HTML+Java片段
2.处理 JSON,通常需要配套使用 JQuery 控件
3.和Servlet相比,Jsp的可读性强,容易看得懂
4.有九个内置对象:request、response、out、session、application、pageContext、config、page、exception
它提供了在 JSP 中简化表达式的方法
使网页实现异步更新。
过滤器,
监听器,
分布式版本控制系统,一般工作流程如下:
1、git clone 克隆远程资源到本地目录,作为工作目录;
2、然后在本地的克隆目录上添加或修改文件;
3、如果远程修改了,需要同步远程的内容,直接git pull就可以更新本地的文件;
4、本地在修改之后,可以通过git status 查看修改的文件。然后使用git add 添加修改的文件暂到缓冲区;
5、在添加之后,可以使用git commit添加到当前的工作区;
6、在修改完成后,如果发现错误,可以撤回提交并再次修改并提交;
7、git push将本地的修改推送到远程的git服务器。
1.集中式版本控制器
1.主要服务于基于Java平台的项目构建、依赖管理和项目信息管理,为了不重复造轮子。
2.优秀的项目构建工具,配置文件 :pom.xml
3.clean,package,install
1.快捷键:
Ctrl+Alt+V :自动创建变量也就是=号前的变量定义
Alt+回车:导入包自动修正
Ctrl+Alt+L: 格式化代码
Ctrl + F : 在当前文件进行文本查找
Ctrl + Shift + F : 全局查找
Ctrl + R : 在当前文件进行文本替换
Ctrl + Shift + R : 全局替换
Ctrl + Shift + Z : 取消撤销
F2 : 跳转到下一个高亮错误 或 警告位置
反射是框架设计的灵魂
1.开源框架,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。用Spring来创建对象,整合其他框架,通过反射创建对象
2.IOC控制反转,直接在spring容器中拿对象,DI依赖注入(将对象之间的依赖关系交由框架处理,减低组件的耦合性),构造器注入、setter方法注入、根据注解注入
3.AOP面向切面编程,动态代理,接口jdk,继承cglib,实现程序功能的统一维护,事务管理(配置文件中添加事务管理器和开启注解,@Transaction),日志
4.注解:
1、声明bean的注解
@Component 组件,没有明确的角色
@Service 在业务逻辑层使用(service层)
@Repository 在数据访问层使用(dao层)
@Controller 在展现层使用,控制器的声明(Controller层)
2、注入bean的注解
@Autowired:由Spring提供
@Configuration
@Value
1.和 Spring 其他框架无缝集成,是一个实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过把Model,View,Controller分离,将web层进行职责解耦
2.SpringMVC的流程:
(1)用户发送请求至前端控制器DispatcherServlet;
(2) DispatcherServlet收到请求后,调用HandlerMapping处理器映射器,请求获取Handle;
(3)处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给 DispatcherServlet;
(4)DispatcherServlet 调用 HandlerAdapter处理器适配器;
(5)HandlerAdapter 经过适配调用 具体处理器(Handler,也叫后端控制器);
(6)Handler执行完成返回ModelAndView;
(7)HandlerAdapter将Handler执行结果ModelAndView返回给DispatcherServlet;
(8)DispatcherServlet将ModelAndView传给ViewResolver视图解析器进行解析;
(9)ViewResolver解析后返回具体View;
(10)DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)
(11)DispatcherServlet响应用户。
3.SpringMvc和AJAX相互调用:通过Jackson框架就可以把Java里面的对象直接转化成Js可以识别的Json对象。
4.POST请求中文乱码:在web.xml中配置一个CharacterEncodingFilter过滤器,设置成utf-8
5.GET请求中文乱码:修改tomcat配置文件添加编码与工程编码一致
6.异常处理:抛给Spring框架
7.常用的注解:
@RequestMapping:用于处理请求 url 映射的注解,可用于类或方法上。用于类上,则表示类中的所有响应请求的方法都是以该地址作为父路径。
@RequestBody:注解实现接收http请求的json数据,将json转换为java对象。
@ResponseBody:注解实现将conreoller方法返回对象转化为json对象响应给客户。
@RequestParam:用在方法的参数前面
? @PathVariable: 获取路径参数
1.半ORM(对象关系映射)框架,内部封装了JDBC,将实体类映射成数据库中的记录
2.sql写在xml,统一管理,优化
3.使用:依赖,application.yml配置,SpringBoot启动类包扫描,dao继承BaseMapper
Mybatis-Plus
1.性能损耗小:启动即会自动注入基本CURD ,性能无损耗,直接面向对象操作
2.自动热加载:Mapper对应的xml可以热加载,大大减少重启Web服务器时间,提升开发效率
3.性能分析:自带Sql性能分析插件,开发测试时,能有效解决慢查询
4.全局拦截:提供全表delete、update操作智能分析阻断
5.避免Sql注入:内置Sql注入内容剥离器,预防Sql注入攻击
6.与Mybatis的不同,依赖,配置文件
1.对象/关系映射能力强,对于关系模型要求高的软件,如果用hibernate开发可以节省很多代码,提高效率。
1.用于表的基本CRUD。
1.简化了spring的开发过程,开箱即用(远离繁琐的配置),约定优于配置(由SpringBoot本身来配置)。
2.application.yml配置文件:服务名,数据库连接,端口号
3.注解:
@SpringBootApplication 启动类
@EnableAutoCfiguration 根据添加jar依赖猜测你想如何配置spring
@Autowired 自动注入
@ComponentScan 自动扫描包
@RestController 以json的格式输出
@ResponseBody 异步请求的时候常使用,用于构建restful的API
@Repository DAO组件
@service 业务层
@PathVariable 自动赋值
@PequestParam 获取请求参数的值
1.微服务框架的规范
2.功能:服务注册与发现,负载均衡,服务熔断与限流,智能路由,控制总线,链路监控
CAP:分布式系统中,一致性(c),可用性(a),分区容错性(p),p是必须保证的
1.服务注册与发现,AP原则
2.两大组件:Eureka Server,Eureka client
3.应用启动后向Server发送心跳,周期三十秒,90秒没收到会移除服务节点,自我保护:为网络异常时保持高可用设计的,不会注销服务实例,直至心跳恢复
4.集群:Eureka Server启动时默认注册自己,配置多个相互注册,高并发,高可用
5.将微服务注册进Eureka:
首先你要创建一个eureka的服务端,弄一个Model,然后给它的pom文件加上依赖
启动类上加上注解:@EnableEurekaServer
编写yml配置文件
在被调用端的启动类上加上注解:@EnableDiscoveryClient
1.客户端负载均衡
2.ribbon 负责获取注册中心的远程服务信息以及提供负载均衡功能
1.轻量级rest客户端,就像restTemplate 的简化,Web Service客户端
2.
1.RPC 分布式服务框架,CP原则
2.服务方与消费方远程调用,将核心业务抽取出来,作为独立的服务,分布式
3.配置方式:(1)Spring 配置方式 (2)Java API 配置方式
4.Dubbo中zookeeper做注册中心,如果注册中心集群都挂掉,发布者和订阅者之间还能通信么:
可以通信的,启动dubbo时,消费者会从zk拉取注册的生产者的地址接口等数据,缓存在本地。每次调用时,按照本地存储的地址进行调用;挂掉是不要紧的,但前提是你没有增加新的服务,如果你要调用新的服务,则是不能办到的。
1.注册中心
2.zk会出现这样一种情况,当master节点因为网络故障与其他节点失去联系时,剩余节点会重新进行leader选举。问题在于,选举leader的时间太长,30 ~ 120s, 且选举期间整个zk集群都是不可用的,这就导致在选举期间注册服务瘫痪。在云部署的环境下,因网络问题使得zk集群失去master节点是较大概率会发生的事,虽然服务能够最终恢复,但是漫长的选举时间导致的注册长期不可用是不能容忍的。
1.网关,用户认证
2.业务流程说明如下:
1、客户端请求认证服务进行认证。
2、认证服务认证通过向浏览器cookie写入token(身份令牌)
认证服务请求用户中心查询用户信息。
认证服务请求Spring Security申请令牌。
认证服务将token(身份令牌)和jwt令牌存储至redis中。
认证服务向cookie写入 token(身份令牌)。
3、前端携带token请求认证服务获取jwt令牌****
前端获取到jwt令牌并存储在sessionStorage。
前端从jwt令牌中解析中用户信息并显示在页面。
4、前端携带cookie中的token身份令牌及jwt令牌访问资源服务
前端请求资源服务需要携带两个token,一个是cookie中的身份令牌,一个是http header中的jwt令牌
前端请求资源服务前在http header上添加jwt请求资源
5、网关校验token的合法性
用户请求必须携带token身份令牌和jwt令牌
网关校验redis中token是否合法,已过期则要求用户重新登录
6、资源服务校验jwt的合法性并完成授权
资源服务校验jwt令牌,完成授权,拥有权限的方法正常执行,没有权限的方法将拒绝访问。
1.安全认证服务框架,原理就是在访问我们的系统前加了一系列的过滤器
1.客户应用向授权服务器请求令牌与授权服务器颁发令牌的过程标准化,OAuth2会提供授权请求,访问令牌和刷新令牌
2.应用场景:
第三方应用授权登录:在APP或者网页接入一些第三方应用时,时长会需要用户登录另一个合作平台,比如 QQ,微博,微信的授权登录。
原生app授权:app登录请求后台接口,为了安全认证,所有请求都带token信息,如果登录验证、请求后台数据。
前后端分离单页面应用(spa):前后端分离框架,前端请求后台数据,需要进行oauth2安全认证,比如使用vue、react后者h5开发的app。
1.路由,过滤器()核心功能
2.加在整个微服务最前沿的防火墙和代理器,隐藏微服务IP端口信息,从而加强保护,本身也是一个微服务,需要注册到Eureka服务注册中心
3.实现请求的鉴权,IP黑白名单,特定地址拦截
1.业务复杂访问量高的时候用的多,我们可以很方便的实现资源隔离、限流、超时设计、服务降级等服务容灾措施,并且还提供了强大的监控,可以查看各个熔断器的允许情况。
2.雪崩效应:服务与服务之间的依赖,当一个服务出现问题,造成系统中的其他服务出现问题,甚至导致系统奔溃。
3.服务容灾:资源隔离、超时设定、服务降级、服务限流
4.Hystrix提供了一个HystrixCommand用来包装调用请求。
5.如何使用:
在spring boot中使用Hystrix,只需要引入spring-cloud-starter-hystrix,
然后添加注解使用Hystrix,@EnableCircuitBreaker,@EnableHystrixDashboard
最后在需要使用熔断器的地方标记注解即可。
@HystrixCommand(groupKey = "xxx", fallbackMethod = "yyy")
public String doSomething()
1.轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。
1.消息中间件,集群,解耦(生产与消费通过MQ)、异步、削峰、(就像菜鸟驿站)
2.场景:不需要同步且耗时长的操作
3.缺点:降低了系统的稳定性:本来系统运行好好的,消息队列挂了,系统可用性会降低;
增加了系统的复杂性:一致性问题、如何保证消息不被重复消费、如何保证消息可靠性传输等。
4.Spring Boot默认集成
5.工作模式:简单,工作队列,发布订阅,路由,通配符
1.存放高热点,经常查询的数据,经常修改或财务数据不放这里,支持事务
2.自身是Map,数据key:value格式
3.数据类型:String,Hash,List,Set,zset(有序集合)
4.持久化:把内存的数据写到硬盘中,RDB(默认,性能好),AOF(安全)
5.架构:单机,主从复制,哨兵,集群
1.分布式文件存储的数据库,非关系型数据库,存储Json格式数据 ,数据格式灵活。
2.最终一致性,更能保证用户的访问速度
3.文档结构的存储方式,能够更便捷的获取数据
4.不支持事务操作,磁盘空间占用比较大
5.内置GridFS,分布式文件系统,可以支持海量的数据存储。
1.用户通过浏览器向web服务器发送http请求,web服务器解析http请求将请求路径的文件返回给浏览器,浏览器再将文件渲染显示给我们看,因此web服务器的作用就是返回服务端的静态文件。
1.是servlet容器,是web服务器
2.在传统的Web项目中,并发量小,用户使用的少。所以在低并发的情况下,用户可以直接访问tomcat服务器,然后tomcat服务器返回消息给用户。
3.应用场景:
1、 http服务器。Nginx是一个http服务可以独立提供http服务。可以做网页静态服务器。
2、 虚拟主机。可以实现在一台服务器虚拟出多个网站。例如个人网站使用的虚拟主机。
3、 反向代理,负载均衡。当网站的访问量达到一定程度后,单台服务器不能满足用户的请求时,需要用多台服务器集群可以使用nginx做反向代理。并且多台服务器可以平均分担负载,不会因为某台服务器负载高宕机而某台服务器闲置的情况。
1.是性能非常好的反向代理服务器,用来做负载均衡。隐藏真实服务端
2.异步,减轻后端Web服务器的压力
3.多进程机制,好处是各个进程之间相互独立,不需要加锁,减少了使用锁对性能造成影响,同时降低编程的复杂度,降低开发成本。
4.nginx负载均衡的就是微服务网关暴露的接口,网关也是一个服务,nginx负载均衡网关保护的ip和端口
5.负载均衡作用:
1、转发功能:按照一定的算法【权重、轮询】,将客户端请求转发到不同应用服务器上,减轻单个服务器压力,提高系统并发量。
2、故障移除:通过心跳检测的方式,判断应用服务器当前是否可以正常工作,如果服务器期宕掉,自动将请求发送到其他应用服务器。
3、恢复添加:如检测到发生故障的应用服务器恢复工作,自动将其添加到处理用户请求队伍中。
6.负载均衡配置:
1.查看进程: ps-ef|grep
2.查看端口: netstat -anp|grep
3.压缩: tar -czf
4.解压: tar -xvzf
5.创建目录:mkdir
6.查看日志: 实时日志:tail -f XXX.log(查看tomcat运行日志:tail -f catalina.out)
搜索关键字附近日志:cat -n filename | grep "关键字"
1.虚拟机,
1.是 Linux操作系统品牌
1.Docker的思想来自于集装箱,可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
2.Web 应用的自动化打包和发布。自动化测试和持续集成、发布。
3.更快速的交付和部署,高效的部署和扩容,更高的资源利用率,更简单的管理
1.分布式全文检索引擎
2.基于Lucene,开箱即用,简化操作,对外提供Restful 接口来操作索引、搜索。
3.head插件是ES的一个可视化管理插件,用来监视ES的状态,并通过head客户端和ES服务进行交互,比如创建映射、创建索引等
4.使用logstash采集数据,同步索引库,删除信息无法使用logstash,在service方法删除课程信息时将索引库中的也删除
5.数据分散,汇总到一张表来让logstash采集数据,部署集群
6.IK分词器
1.模板引擎,模板+数据
2.模板:好说,提前编写出来;数据:编辑页面信息时定义一个dataUrl(例:由开发轮播图管理的程序员提供),读页面信息远程请求http地址,拿到数据
3.过程:1.静态化程序读取页面信息拿到dataUrl,2.远程请求获取数据模型,3.获取页面模板,MongoDB的分布式文件系统GridFS,4.通过FreeMarker的API生成静态化文件
1.配置管理中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性。
1.接口测试
2.与Nginx整合开发接口文档
1.http接口测试工具
2.能够发送任何类型的HTTP 请求 (GET,HEAD, POST,PUT。。。)
3.附带任意数量的参数
原文:https://www.cnblogs.com/shuita/p/12823190.html