--./consul agent -dev -client 0.0.0.0
netstat -lnp|grep 8500
kill -9 XXXX
--Ribbon负载均衡服务器:负载均衡+RestTemplate
核心组件:接口IRule:根据特定算法中从服务列表中选取一个要访问的服务。
--LB(Load Balance)负载均衡
集中式LB:Nginx服务端 (医院的大门)
进程内LB:Ribbon本地(科室内的均衡)
--三种服务注册中心比较
eureka:java AP 可配支持服务健康检查 http 已集成
consul:go CP 支持 http/DNS 已集成
zookeeper:java CP 支持 客户端 已集成
---Canal简介--数据同步方案
早期,阿里巴巴B2B公司因为存在杭州和美国双机房部署,存在跨机房同步的业务需求。不过早期的数据库同步业务,主要是基于trigger的方式获取增量变更,
不过从2010年开始,阿里系公司开始逐步的尝试基于数据库的日志解析,获取增量变更进行同步,由此衍生出了增量订阅&消费的业务,从此开启了一段新纪元。
工作原理:mysql主备复制实现
canal模拟mysql slave的交互协议,伪装自己为mysql slave,向mysql master发送dump协议
mysql master收到dump请求,开始推送binary log给slave(也就是canal)
canal解析binary log对象(原始为byte流)
--CAP原则又称CAP定理,指的是在一个分布式系统中, Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可得兼。
一致性(C):在分布式系统中的所有数据备份,在同一时刻是否同样的值。(等同于所有节点访问同一份最新的数据副本)
可用性(A):在集群中一部分节点故障后,集群整体是否还能响应客户端的读写请求。(对数据更新具备高可用性)
分区容忍性(P):以实际效果而言,分区相当于对通信的时限要求。系统如果不能在时限内达成数据一致性,就意味着发生了分区的情况,必须就当前操作在C和A之间做出选择。
CAP原则关注颗粒度是数据,而不是整体系统设计的策略。
CAP原则的精髓就是要么AP,要么CP,要么AC,但是不存在CAP。
--互联网类的企业,对于用户直接的操作,一般要求是每个请求都必须在 200 ms 以内完成,对用户几乎是无感知的。
MySQL 每秒钟最多处理 2k 个
--解决高并发大流量访问的措施:缓存、异步、降级、限流、静态化等
限流:
接入层限流
Nginx限流
API网关
--Angular/React/Vue比较
比较项 | Angular | React | Vue |
作者 | google公司 | facebook公司 | 尤雨溪 |
组织方式 | MVC | 模块化 | 模块化 |
数据绑定 | 强大 | 自由 | 自由 |
自由度 | 较小 | 大 | 较大 |
路由 | 静态路由 | 动态路由 | 动态路由 |
模板能力 | 强大 | 自由 | 自由 |
--RESTful API 介绍 Representational State Transfer(表象层状态转变)
认识RESTful
RESTful只是一种架构方式的约束,给出一种约定的标准,完全严格遵守RESTful标准并不是很多,也没有必要。但是在实际运用中,有RESTful标准可以参考,是十分有必要的。
实际上在工作中对api接口规范、命名规则、返回值、授权验证等进行一定的约束,一般的项目api只要易测试、足够安全、风格一致可读性强、没有歧义调用方便我觉得已经足够了,接口是给开发人员看的,也不是给普通用户去调用。
RESTful6大原则
C-S架构:数据的存储在Server端,Client端只需使用就行。
无状态:http请求本身就是无状态的,基于C-S架构,客户端的每一次请求带有充分的信息能够让服务端识别。
统一的接口:这个才是REST架构的核心,统一的接口对于RESTful服务非常重要。客户端只需要关注实现接口就可以,接口的可读性加强,使用人员方便调用。
一致的数据格式:服务端返回的数据格式要么是XML,要么是Json(获取数据),或者直接返回状态码
系统分层:客户端通常无法表明自己是直接还是间接与端服务器进行连接,分层时同样要考虑安全策略。
可缓存:客户端可以缓存页面的响应内容
按需编码、可定制代码(可选)
RESTful的7个最佳实践
版本:就是将版本放在url,简洁明了,这个只有用了才知道
参数命名规范:可以采用驼峰命名法,也可以采用下划线命名的方式,推荐采用下划线命名的方式
url命名规范:API 命名应该采用约定俗成的方式,保持简洁明了。在RESTful架构中,每个url代表一种资源所以url中不能有动词,只能有名词,并且名词中也应该使用复数。
统一返回数据格式:
code——包含一个整数类型的HTTP响应状态码。
status——包含文本:”success”,”fail”或”error”。HTTP状态响应码在500-599之间为”fail”,在400-499之间为”error”,其它均为”success”(例如:响应状态码为1XX、2XX和3XX)。这个根据实际情况其实是可要可不要的。
message——当状态值为”fail”和”error”时有效,用于显示错误信息。参照国际化(il8n)标准,它可以包含信息号或者编码,可以只包含其中一个,或者同时包含并用分隔符隔开。
data——包含响应的body。当状态值为”fail”或”error”时,data仅包含错误原因或异常名称、或者null也是可以的。
http状态码:HTTP状态码也是有规律的
1**请求未成功
2**请求成功、表示成功处理了请求的状态代码。
3**请求被重定向、表示要完成请求,需要进一步操作。 通常,这些状态代码用来重定向。
4** 请求错误这些状态代码表示请求可能出错,妨碍了服务器的处理。
5**(服务器错误)这些状态代码表示服务器在尝试处理请求时发生内部错误。 这些错误可能是服务器本身的错误,而不是请求出错。
合理使用query parameter
多表、多参数连接查询如何设计URL
--jquery中$ready和window.onload的区别
window.load---必须等待网页中所有的内容加载完毕后(包括图片)才能执行
window.load:不能同时编写多个,以下代码无法正确执行:
window.onload = function(){
alert("offcn");
};
window.onload = function(){
alert("offcn.com");
};
#:结果只输出第二个
$(document).ready(function(){/*.....*/})--网页中所有DOM结构绘制完毕后就执行,可以能DOM元素关联的内容并没有加载完
简写形式:$(function(){/*.....*/})
$(document).ready():能同时编写多个
以下代码正确执行:
$(document).ready(function(){
alert("Hello offcn");
});
$(document).ready(function(){
alert("Hello offcn.com");
});
结果两次都输出
--CentOS7.7 下Nginx 的安装与配置
1.安装必须环境
1 yum install gcc-c++
2 yum -y install pcre*
3 yum -y install openssl*
2.,下载nginx-1.9.9.tar.gz
1 [root@admin ~]# cd /usr/local/
2 [root@admin local]# wget http://nginx.org/download/nginx-1.9.9.tar.gz
3.解压及编译
[root@admin local]# tar -zxvf nginx-1.9.9.tar.gz
4.进入nginx目录
[root@admin local]# cd nginx-1.9.9
5.设置安装目录为 /usr/local/nginx
[root@admin nginx-1.9.9]# ./configure --prefix=/usr/local/nginx --conf-path=/usr/local/nginx/nginx.conf
6.开始编译安装
1 [root@admin nginx-1.9.9]# make
2 [root@admin nginx-1.9.9]# make install
7.启动nginx服务
1 [root@admin ~]# cd /usr/local/nginx
2 [root@admin sbin]# ./nginx
--Java多线程高并发
synchronized:锁定的是对象,不是整块代码
--Redis的使用场景:
记录帖子点赞数,点击数,评论数
缓存近期热帖
缓存文章详情信息
记录用户会话信息
--如何避免SQL注入
使用预处理PreparedStatement
使用正则表达式过滤掉字符中的特殊字符
--怎么确保一个集合不能被修改
可以使用Collections.unmodifiableCollection(Collection c)方法创建一个只读集合
--文件服务器
①自己搭建文件服务器
举例:FastDFS
好处:服务器可以自己维护、自己定制。
缺点:需要投入的人力、物力更多。
适用:规模比较大的项目,要存储海量的文件。
②使用第三方云服务
举例:阿里云提供的OSS对象存储服务。
好处:不必自己维护服务器的软硬件资源。直接调用相关API即可操作,更加轻量级。
缺点:数据不在自己手里。服务器不由自己维护。
适用:较小规模的应用,文件数据不是绝对私密。
--SOA(Service-Oriented Architecture)面向服务的架构
面向服务的架构(SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)进行拆分,并通过这些服务之间定义良好的接口和契约联系起来。
--分布式架构的优缺点:
优点:1、模块化,组件化程度更高,2、性能更高
缺点:1、部署繁琐,2、运维成本比较高,3、会造成数据不一致的情况,要使用分布式事务解决
-- 整合elk,搭建实时日志平台
Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。
Logstash是一个完全开源的工具,他可以对你的日志进行收集、过滤,并将其存储供以后使用(如,搜索)。
Kibana 也是一个开源和免费的工具,它Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志。
--方法的本地调用和远程调用
1、本地调用:项目内部调用,不经过网络的调用
2、远程调用:两个或两个以上的互补以来的项目通过网络相互调用对方的方法。
技术:WebService技术,多种技术的总称
Dubbo+Zookeeper:Dubb 担任服务治理框架的角色,Zookeeper担任服务注册中心的角色
SpringBoot+SpringCloud
--sd-cust项目打包切换环境:gradle install -Denv=test
--npm设置淘宝镜像
npm config set registry https://registry.npm.taobao.org
--bootstrap遮住问题解决:
设置样式:.modal-backdrop{z-index:0;}
--解决js跨域问题:
什么是跨域:
•域名相同端口不同。
•域名不同
解决js的跨域问题可以使用jsonp
--遇到报错信息处理办法
1、不要慌。
2、根据报错信息找到具体错误地方,例如遇到空指针异常,一定要找到那个对象为空。
--生成唯一ID的方案:
1. Uuid,字符串,不推荐使用。
2. 数值类型,不重复。日期+时间+随机数20160402151333123123
3. 可以直接去毫秒值+随机数。可以使用。
4. 使用redis。Incr。推荐使用。
--Spring Cloud Gateway 优点
易于监控。可以在网关收集监控数据并将其推送到外部系统进行分析。
易于认证。可以在网关上进行认证,然后再将请求转发到后端的微服务,而无须在每个微服务中进行认证。
减少了客户端与各个微服务之间的交互次数。
--二叉树
前序顺序是ABC(根节点排最先,然后同级先左后右);中序顺序是BAC(先左后根最后右);后序顺序是BCA(先左后右最后根)