Java程序员日常积累-向大神学习(二)

--./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(先左后右最后根)

你可能感兴趣的:(经验)