学习技术5步走:javascript
a.概念 是什么 ,能干啥 ,有啥用css
b.为啥要用? 有啥优点前端
c.流程+原理 (面试最重要的点) 底层代码vue
d.如何使用 核心api(会不会用方法 ,注解)java
e.和项目结合 。mysql
1.关系型数据库,隔离级别默认使用可重复读react
2.事务四大特性:原子性,一致性,隔离性,持久性jquery
3.索引:ios
索引是查询变快的缘由:B+Tree,不用扫描整张表获得须要的数据,没有用索引的时候,须要遍历双向链表来定位对应的页,而有了索引,则能够经过一层层“目录”定位到对应的页上。nginx
index----普通索引,unique---- 惟一索引,primary key ---- 主键索引,组合索引,全文索引
4.存储引擎 MyISAM 和 InnoDB
默认使用InnoDB,支持事务,外键,MyISAM不支持。
如今通常都选用InnoDB,主要是InnoDB最小的锁粒度是行锁,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.客户端和服务器端之间数据传输的格式规范,请求-响应协议,无状态协议(指协议对于事务处理没有记忆能力),解决办法:一、Cookie 二、经过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.选择符:id选择器(#myid)、类选择器(.myclassname)、标签选择器(div, h1, p)、相邻选择器(h1 + p)、子选择器(ul > li)、后代选择器(li a)、通配符选择器(*)、属性选择器(a[rel=”external”])、伪类选择器(a:hover, li:nth-child)
1.脚本语言(不须要编译),用于加强HTML页面,以交互式和动态的方式呈现网页
2.跨平台,不依赖于操做系统,仅须要浏览器的支持。
3.DOM处理网页内容,BOM与浏览器交互
4.回调函数:能够做为参数传递给另外一个函数的函数,并在某些操做完成后执行。
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、H五、小程序等多个平台。
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 中简化表达式的方法
使网页实现异步更新。
过滤器,
监听器,
分布式版本控制系统,通常工做流程以下:
一、git clone 克隆远程资源到本地目录,做为工做目录;
二、而后在本地的克隆目录上添加或修改文件;
三、若是远程修改了,须要同步远程的内容,直接git pull就能够更新本地的文件;
四、本地在修改以后,能够经过git status 查看修改的文件。而后使用git add 添加修改的文件暂到缓冲区;
五、在添加以后,可使用git commit添加到当前的工做区;
六、在修改完成后,若是发现错误,能够撤回提交并再次修改并提交;
七、git push将本地的修改推送到远程的git服务器。
1.集中式版本控制器
1.主要服务于基于Java平台的项目构建、依赖管理和项目信息管理,为了避免重复造轮子。
2.优秀的项目构建工具,配置文件 :pom.xml
3.clean,package,install
1.快捷键:
Ctrl+Alt+V :自动建立变量也就是=号前的变量定义
Alt+回车:导入包自动修正
Ctrl+Alt+L: 格式化代码
Ctrl+P: 提示参数
Ctrl + F : 在当前文件进行文本查找
Ctrl + Shift + F : 全局查找
Ctrl + R : 在当前文件进行文本替换
Ctrl + Shift + R : 全局替换
Ctrl + Shift + Z : 取消撤销
F2 : 跳转到下一个高亮错误 或 警告位置
反射是框架设计的灵魂
1.开源框架,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。用Spring来建立对象,整合其余框架,经过反射建立对象。
2.Spring是为了解决企业级应用开发的复杂性而建立的,简化开发:
1.基于POJO的轻量级和最小入侵性编程
2.经过IOC,依赖注入(DI)和面向接口实现解耦
3.基于切面(AOP)和惯例进行声明式编程
4.经过切面和模板减小样式代码
3.IOC控制反转,直接在spring容器中拿对象,DI依赖注入(将对象之间的依赖关系交由框架处理,减低组件的耦合性),构造器注入、setter方法注入、根据注解注入
4.AOP面向切面编程,动态代理,接口jdk,继承cglib,实现程序功能的统一维护,事务管理(配置文件中添加事务管理器和开启注解,@Transaction),日志
5.注解:
一、声明bean的注解
@Component 组件,没有明确的角色 @Service 在业务逻辑层使用(service层) @Repository 在数据访问层使用(dao层) @Controller 在展示层使用,控制器的声明(Controller层)
二、注入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.构建一个个功能独立的微服务应用单元,使用SpringBoot能够帮咱们快速构建一个应用
2.简化了spring的开发过程,开箱即用(远离繁琐的配置),约定优于配置(由SpringBoot自己来配置),自动装配原理。
3.application.yml配置文件:服务名,数据库链接,端口号
4.注解:
@SpringBootApplication 启动类 @EnableAutoCfiguration 根据添加jar依赖猜想你想如何配置spring @Autowired 自动注入 @ComponentScan 自动扫描包 @RestController 以json的格式输出 @ResponseBody 异步请求的时候常使用,用于构建restful的API @Repository DAO组件 @service 业务层 @PathVariable 自动赋值 @PequestParam 获取请求参数的值
1.微服务框架的规范,大型分布式网络服务的调用,由SpringCloud来完成,实现分布式
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.业务流程说明以下:
一、客户端请求认证服务进行认证。
二、认证服务认证经过向浏览器cookie写入token(身份令牌)
认证服务请求用户中心查询用户信息。
认证服务请求Spring Security申请令牌。
认证服务将token(身份令牌)和jwt令牌存储至redis中。
认证服务向cookie写入 token(身份令牌)。
三、前端携带token请求认证服务获取jwt令牌****
前端获取到jwt令牌并存储在sessionStorage。
前端从jwt令牌中解析中用户信息并显示在页面。
四、前端携带cookie中的token身份令牌及jwt令牌访问资源服务
前端请求资源服务须要携带两个token,一个是cookie中的身份令牌,一个是http header中的jwt令牌
前端请求资源服务前在http header上添加jwt请求资源
五、网关校验token的合法性
用户请求必须携带token身份令牌和jwt令牌
网关校验redis中token是否合法,已过时则要求用户从新登陆
六、资源服务校验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.应用场景:
一、 http服务器。Nginx是一个http服务能够独立提供http服务。能够作网页静态服务器。
二、 虚拟主机。能够实如今一台服务器虚拟出多个网站。例如我的网站使用的虚拟主机。
三、 反向代理,负载均衡。当网站的访问量达到必定程度后,单台服务器不能知足用户的请求时,须要用多台服务器集群可使用nginx作反向代理。而且多台服务器能够平均分担负载,不会由于某台服务器负载高宕机而某台服务器闲置的状况。
1.做用:
2.异步,减轻后端Web服务器的压力
3.多进程机制,好处是各个进程之间相互独立,不须要加锁,减小了使用锁对性能形成影响,同时下降编程的复杂度,下降开发成本。
4.负载均衡做用:
一、转发功能:按照必定的算法【权重、轮询】,将客户端请求转发到不一样应用服务器上,减轻单个服务器压力,提升系统并发量。
二、故障移除:经过心跳检测的方式,判断应用服务器当前是否能够正常工做,若是服务器期宕掉,自动将请求发送到其余应用服务器。
三、恢复添加:如检测到发生故障的应用服务器恢复工做,自动将其添加处处理用户请求队伍中。
5.负载均衡配置:
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.附带任意数量的参数