![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
蚂蚁课堂的视频笔记
文章平均质量分 93
红烧咸鱼丶
一个没有梦想的废物咸鱼
展开
-
分布式缓存架构(3)-Redis事务&主从复制&哨兵机制
Redis的主从复制概述:redis的复制功能是支持多个数据库之间的数据同步。一类是主数据库,一类是从数据库,主数据库可以进行读写操作,当发生写操作的时候自动将数据同步到从数据库,而从数据库一般是只读的,并且接受主数据库同步过来的数据,一个主数据库可以有多个从数据库,而一个从数据库只能有一个主数据库。通过redis的复制功能可以很好的实现数据库的读写分离,提高服务器的负载均衡能力。主...原创 2019-11-03 03:24:38 · 193 阅读 · 0 评论 -
分布式缓存架构(2)-SpringBoot整合Redis
分布式Redis缓存什么是redis非关系型数据库,NOSQL可以设置有效期,是内存数据库,同时也可以将其持久化,保证数据的高可用Redis是由意大利人开发的一款内存高速缓存数据库,该数据库由C语言编写,Redis是一个key-value存储系统,他支持丰富的数据类型。如:string,list,set,zset(有序set),hashredis采用的是基于内存的采用单进程单线程模型的...原创 2019-11-01 16:50:09 · 149 阅读 · 0 评论 -
分布式缓存架构(1)-初始分布式缓存架构EhCache
为什么要使用缓存?为了减轻服务器端的压力缓存应用在什么地方?浏览器访问图片自带缓存技术CDN内容分发的时候做静态资源缓存代理缓存(Nginx)使用缓存技术的目的是为了减轻服务器端的压力。我们今天是在应用层去做缓存,就是代码层面实现缓存Session保存在服务器端,保存在单个JVM中,返回sessionId,将sessionId保存在响应头中,客户端存...原创 2019-10-28 17:38:16 · 212 阅读 · 0 评论 -
互联网安全架构(6)-基于OAuth2.0协议方式
Oauth2.0协议一般是用在互联网API开放平台上的,比如第三方联合登录等会用到Oauth2.0联合协议为什么会有Oauth2.0?因为在互联网开放平台中,接口互相调用,保证安全性的问题什么是开放平台?暴露公网IP提供API接口常见的开放平台:支付宝,微信,蚂蚁金服,百度等开放平台适合于大型互联网公司不同的开放平台对接的Oauth2.0的协议流程都是相同的,无非...原创 2019-10-27 01:30:29 · 192 阅读 · 0 评论 -
互联网安全架构(5)-基于AccessToken方式实现API设计
以一个小需求开始:现在A公司与B公司进行合作,B公司需要调用A公司开放的外网接口获取数据,如何保证外网开放接口的安全性?如何保证外网开放接口的安全性(1)搭建API网关接口,控制接口访问权限(2)开放平台设计,oAuth2.0协议。第三方联合登录的时候会使用,是用来针对API是否能够让外网访问到的权限,做安全认证(3)采用Https加密传输协议,使用Nginx配置Https证书...原创 2019-10-26 14:06:40 · 1189 阅读 · 1 评论 -
互联网安全架构(4)-纯手互联网API接口幂等框架
纯手写API互联网幂等框架表单重复提交rpc远程调用的时候网络发生延迟的时候,可能会有重试机制针对上面的情况,我们就要设计程序的幂等性(幂等性:保证接口唯一,数据的唯一性,不重复)幂等性幂等性就是保证数据唯一的意思,保证幂等性就是防止了接口不能重复提交API接口幂等性的问题核心在于服务器的防御...原创 2019-10-25 12:10:57 · 213 阅读 · 0 评论 -
互联网安全架构(1)-Web常用攻击手段之XSS脚本&SQL注入攻击
XSS什么是XSS攻击手段XSS攻击使用JS脚本注入进行攻击;比如说在提交表单之后,展示到另一个界面,可能会受到XSS脚本注入,读取本地的cookie远程发送给黑客服务器端简单来说XSS就是想尽一切办法将可以执行的代码注入到网页中去,别入在输入框中写JS代码,恶意执行等CSRF是跨站请求的伪造,攻击者利用用户已经登录目标网站之后,诱导用户访问一个攻击的页面,利用目标网站对用户的信任,盗取...原创 2019-10-23 15:08:25 · 258 阅读 · 0 评论 -
互联网高并发解决方案(3)--实战操作CDN内容分发
传统方式请求静态资源宽带传输速度和整个客户端与服务器的访问距离是有关系的,距离越远传输速度越慢传统方式架构的弊端:(1)带宽传输压力大(2)因为所有用户全部聚集到同一个地区服务器上访问,无法保证整体的系统高可用(3)因为如果客户端与服务器端传输距离越远,那么宽带传输非常消耗资源,导致用户体验非常差,响应慢;距离越远传输速率越慢WEB前端优化方案(1)网站动静分离,将静态资源放到...原创 2019-10-19 17:26:03 · 236 阅读 · 1 评论 -
互联网高并发解决方案(2)--高并发服务限流特技
高并发服务的限流特技在开发高并发的系统的时候可以使用:缓存,降级,限流进行系统的保护。(1)缓存:目的是提升系统的访问速度和增大系统能处理的容量。(2)降级:当服务出现问题的时候或者影响到核心的流程性能的时候就需要暂时的屏蔽掉,待高峰或者问题解决之后再打开。(发生服务熔断后就使用服务的降级,服务熔断是直接不执行,服务降级是发生错误返回一个用户的响应)(3)限流:有些场景并不能使用缓存和降...原创 2019-10-17 20:19:11 · 318 阅读 · 0 评论 -
互联网高并发解决方案(1)-基于Hystrix实现服务隔离与降级
Hystrix实现服务的隔离这里讲解的主要是如何在RPC服务调用中防止雪崩效应我们在微服务中就是使用Hystrix来实现保护服务,提高容错Hystrix是一个服务保护框架,在分布式中可以实现服务的容错(容错指的是服务发生不可用的时候,出错之后的处理方案,就是预备方案),他可以减少与服务的依赖关系(这里并不是业务上的依赖,指的是A调用B,B调用C,C不可用,本应该导致A和B也不可用,但是借由...原创 2019-10-15 11:45:46 · 194 阅读 · 0 评论 -
高性能Nginx服务器(7)----Nginx+Tomcat 实现动静分离
动静分离动态资源静态化和这个不是一回事,动态资源静态化使用Freemark做的什么是网站的动静分离架构模式网站的动静分离就是将动态资源与静态资源相分离。动静分离也是属于高并发解决方案的一种。动态资源和静态资源的区别?静态资源:当用户多次访问这个资源的时候,资源的代码永远不会改变的资源。动态资源:当用户多次访问这个资源的时候,资源的源代码可能会发生改变。注意:这里并不是...原创 2019-10-11 22:44:03 · 145 阅读 · 0 评论 -
高性能Nginx服务器(6)----lvs+Keepalived+Nginx双机主从热备
加上LVS的负载均衡的简介(1)客户端的域名会解析成IP地址到LVS中(2)LVS是做四层(基于TCP层的负载均衡器),由LVS转发到Nginx中(3)其中Nginx可以是一主一备,一主多从,多主多从等,起到了集群的作用。Nginx集群肯定是有主从关系的,不可能只有主没有从,因为需要在主nginx不能用的情况下,做故障转移(4)这里我们配置一主一备,通常情况下,备机是不会被访问的,只有在主...原创 2019-10-11 22:03:01 · 554 阅读 · 0 评论 -
高性能Nginx服务器(5)----基于Nginx1.9实现TCP反向代理与负载均衡(四层负载均衡)
我们之前的nginx负载均衡都是七层负载均衡,基于HTTP(应用层),这节课我们讲的是基于TCP(四层负载均衡),简单说我们这节课讲的负载均衡都是基于Socket实现的(Socket就是基于TCP实现的)。...原创 2019-10-11 22:02:41 · 327 阅读 · 1 评论 -
高性能Nginx服务器(4)----基于Consul+Upsync+Nginx实现动态负载均衡
动态负载均衡就相当于不去修改nginx的配置,就可以改变nginx的上游服务器。动态负载均衡的实现方案Consul+Consul-template发现这种方案,每次发现配置之后需要reload nginx,重启nginxConsul+OpenResty:该方案实现无需reload动态负载均衡Consul+upsync+nginx:推荐该方案,实现无需reload nginx,可...原创 2019-10-11 22:02:26 · 363 阅读 · 0 评论 -
高性能Nginx服务器(3)----linux环境部署Nginx服务器
nginx rewriteNginx提供了全局变量或者自己设置的变量,结合正则表达式和标志位实现url的重写以及重定向,rewrite只能放在server{},location{},if{}中,并且只能对域名后面的除去传递的参数外的字符串起作用。rewrite主要的功能就是实现URL的重写,Nginx的Rewrite规则采用PCRE,perl兼容正则表达式的语法规则匹配,如果需要Nginx的...原创 2019-10-11 22:02:11 · 342 阅读 · 0 评论 -
高性能Nginx服务器(2)----负载均衡
location正则表达式nginx的localtion的作用是匹配路径的地址location指令的作用是根据用户请求的URI来执行不同的应用,也就是根据用户请求的网站URL进行匹配,匹配成功即进行相关的操作。location的语法:(1)以=开头表示精确的匹配(2)=/ 表示/后面的路径地址不能带任何字符串,否则匹配不上(3)^~开头表示uri以某个常规字符串开头,不是正...原创 2019-10-11 22:01:54 · 133 阅读 · 0 评论 -
微服务框架(7)----基于SpringBoot2.0版本框架-基于SpringBoot2.0版本框架-手写SpringBoot框架
SpringBoot再介绍SpringBoot让我们的Spring应用变得更轻量化。比如:你可以仅仅依靠一个Java类来运行一个Spring引用,你也可以打爆你的应用未JAR并通过使用java -jar 来运行你的Spring Web应用。SpringBoot是一个快速整合第三方框架Spring Boot的主要优点:(1)为所有Spring开发者更快的入门(2)开箱即用,提供各种默认配...原创 2019-10-11 22:01:17 · 178 阅读 · 0 评论 -
并发编程多线程基础(草稿3)
第一节volatile与synchronized最大的区别就是volatile保证了可见性,但是不能保证原子性(线程安全),而synchronized即保证了原子性,又保证了可见性。volatile禁止重排序功能,但是synchronized不会禁止重排序volatile与synchronized的区别:(重要)(1)synchronized保证了内存的可见性和操作的原子性(2)vol...原创 2019-08-20 08:38:33 · 159 阅读 · 0 评论 -
微服务框架(2)----基于SpringBoot2.0版本框架-整合Web视图层&Lombok插件.
Freemarker的作用就是将动态页面转换成伪的静态html页面,提高效率使用Freemarker整合spring boot2导入Freemarker的maven依赖的时候无需指明版本,因为Spring Boot的parent会自动做版本规范,自己提供了版本因为我们的目的是要跳转页面所以不能使用@RestController应该是使用@Controller后缀是==*.ftl==,...原创 2019-09-19 10:08:42 · 156 阅读 · 0 评论 -
微服务框架(3)----基于SpringBoot2.0版本框架-多数据源分布式事务管理(jta+atomikos)
SpringBoot整合MyBatis可以不在mapper层加上@Mapper,直接加@MapperScan(basePackages={})扫包,若有多个包,用逗号隔开推荐使用@MapperScan的方式SpringBoot的事务管理,整合@transactional单数据源的情况下,SpringBoot默认集成事务,只要在方法上或者类的上面加上@Transactional即可,默...原创 2019-09-26 17:15:45 · 523 阅读 · 1 评论 -
微服务框架(4)----基于SpringBoot2.0版本框架-项目打包与热部署原理
SpringBoot的yml使用SpringBoot默认读取application.yml或者application.properties文件yml文件比propertiess的配置文件更加的简约yml更加具有层次结构server: port: 8090 context-path: /xiyou写完一个之后冒号后面一定要有一个空格如果要有父子关系(如上面的server...原创 2019-09-26 17:16:09 · 380 阅读 · 1 评论 -
微服务框架(5)----基于SpringBoot2.0版本框架-基于SpringBoot2.0版本框架-性能优化
SpringBoot的性能优化问题JVM的参数调优扫包优化(比较重要)默认Tomcat容器修改Undertow,吞吐量Undertow(吞吐量8000)比Tomcat(吞吐量5000)要好扫包优化扫包优化不属于运行优化,而是属于启动优化@SpringBootApplication注解等同于@ComponentScan+@EnableAutoConfiguration+@Confi...原创 2019-09-26 17:16:26 · 251 阅读 · 0 评论 -
微服务框架(6)----基于SpringBoot2.0版本框架-基于SpringBoot2.0版本框架-监控中心
SpringBoot监控中心概述SpringBoot的监控中心针对了微服务服务器的监控,服务器的内存变化(堆内存,线程,日志管理等),检测服务配置连接地址是否可用(模拟访问和懒加载的情况下,用到的时候才会连接,到时候配置错误就会报错,MyBatis是懒加载的,JPA不是),针对现在有多少个bean(spring中管理的对象),统计SpringMVC的映射数量,即统计有多少个@RequestMa...原创 2019-09-26 17:48:30 · 158 阅读 · 0 评论 -
高性能Nginx服务器(1)----反向代理
DNS域名解析域名最终通过DNS解析变为IP地址,所以我们也可以通过公网IP直接访问网站外网访问通过Nginx反向代理访问真实服务器的地址,其中真实服务器的地址只能在内网访问。nginx是一个单独的服务器,他可以隐藏真实的IP地址http://www.baidu.com 类似百度这种网站,我们是直接访问的,并没有加端口号,原因是取的默认端口号,80,默认端口号80是不需要写的,如果不是...原创 2019-10-01 23:42:48 · 294 阅读 · 0 评论 -
微服务框架(1)----基于SpringBoot2.0版本框架-引入&Web开发组件
SpringBoot简介SpringBoot让我们的Spring应用更加的轻量化;比如:我们可以靠一个Java类来运行一个Spring的引用。也可以通过运行jar包的方式java -jar 来运行自己的Spring Web应用。Spring Boot的优点:(1)为所有Spring开发者更快的入门(2)开箱即用,提供各种默认配置来简化项目配置(3)内嵌式容器简化Web项目(4)没有冗...原创 2019-09-17 14:48:01 · 370 阅读 · 0 评论 -
源码分析(10)---纯手写JDK1.7版本的HashMap集合框架
JDK1.7版本的hashMap集合是由数组+单链表组成的,注意这里是单链表。HashMap底层实现原理(JDK1.7)HashMap只允许一个为null的keyHashMap的扩容是当前table数组的两倍HashMap实际存储的元素个数:数组长度大小*负载因子,只要大于这个数目就进行扩容HashMap在扩容的时候,会重新计算hash值,并且对hash的位置进行重新排序,因此,为...原创 2019-09-17 14:47:47 · 192 阅读 · 0 评论 -
性能优化专题(1)----Java内存结构与垃圾回收机制算法分析
Java内存结构HotSpot VM是一个最常用的Java虚拟机垃圾回收机制,内存调优主要都是围绕着堆来谈的。堆主要存放对象的实例,以及数组堆还分为新生代和老年代,新生代又分为from区,S0区和S1区。方法区主要存放一些永久数据,静态,常量信息都会在方法区中存在,垃圾回收机制一般不会在方法区回收,但不代表不去回收。方法区也是可以被JVM回收的。运行常量池是方法区的一部分。什么是...原创 2019-08-29 14:32:28 · 148 阅读 · 0 评论 -
设计模式专题(4)----策略模式&&原型模式
第一节 什么是原型设计模式原型模式是一个创建型的模式。第二节 原型应用的场景原型模式属于创建型的设计模式Spring中使用到了原型,其实就是scope为多例,这就是原型(本质上使用clone技术)。原型可以将其理解为克隆(clone),为我们创建了一个对象原型设计模式的应用场景:(1)类初始化需要消化非常多的资源,这个资源包括数据,硬件资料等。通过原型拷贝避免这些消耗(2...原创 2019-08-29 14:31:44 · 508 阅读 · 0 评论 -
设计模式专题(3)----建造者&模板方法&适配器&外观模式(也叫门面模式)
第二节 建造者模式概述建造者模式也是创建型模式的一种。同工厂模式类似,但是简单工厂模式不是23种的一种。建造者模式是将一个复杂的对象的构建与他的表示分离,使得同样的构建过程可以创建不同的表示。建造者应用场景:去肯德基,汉堡,可乐,薯条,炸鸡翅等是不变的,而其组合是经常变化的,生成所谓的套餐。套餐可能经常发生改变,我们可以把套餐当做一个整体,就是一个复杂的对象,套餐的组成...原创 2019-08-22 23:45:49 · 717 阅读 · 0 评论 -
设计模式专题(2)----工厂模式与代理模式(重要)
第一节 简单工厂模式不是23种设计模式的一种工厂模式分为简单工厂模式,工厂方法,抽象工厂模式工厂模式的好处:工厂模式是我们最常用的实例化对象模式,是用工厂方法代替new操作的一种模式。利用工厂模式可以降低程序的耦合性,为后期的维护提供了很大的便利。将选择实现类,创建对象同意管理和控制。从而将调用者跟我们的实现类解耦。工厂与容器的概念:容器存储的是一个大块的东西,工厂是...原创 2019-08-22 00:26:54 · 618 阅读 · 0 评论 -
设计模式专题(1)---- 反射机制与单例模式的五种创建方式
第一节 课程概述反射机制的讲解单例设计模式有7种,我们只讲5种单例模式可以通过反射攻击,我们如何防止反射攻击23个设计模式,分为三种:创建型模式,结构型模式,行为型模式工厂模式,抽象工厂模式,单例模式,原型模式,适配器模式,装饰器模式,代理模式,外观模式,策略模式,模板方法模式,观察者模式第二节与第三节 什么是反射机制什么是反射?反射机制其实是正在运行的程序,动态获取类...原创 2019-08-22 00:07:20 · 940 阅读 · 0 评论 -
并发编程多线程基础(草稿5)--Callable、Future
第一节 线程池的复习为什么线程池用阻塞队列不用非阻塞队列?(用BlockingQueue)因为当我们把超过核心线程的任务存放在阻塞队列的时候,如果当前队列中的任务已经存满了,我们也会判断其当前正在执行的核心线程是否过期超时,如果超时就会干掉核心线程所执行的任务,让队列中的任务可以继续被核心线程执行,然后待入队列的任务入队,此时我们使用的是阻塞队列,当队列满的时候,我们会进行阻塞而不是直接退出...原创 2019-08-20 08:39:21 · 122 阅读 · 0 评论 -
并发变成多线程基础(草稿2)
java内置模型第一节内置锁:指的就是synchronized的锁显示锁:指的就是lock对象的锁第二节线程安全问题:当多个线程共享同一个全局变量,当我们做写的操作的时候,可能会受到其他线程的干扰,读操作是不会发生线程安全问题的。不能保证线程的可见性,即一个线程修改了变量,另一个线程可能取到的值是该线程修改之前的值。会造成脏读。解决线程安全问题:内置锁(synchr...原创 2019-08-20 08:38:14 · 98 阅读 · 0 评论 -
并发变成多线程基础(草稿1)
多线程的概念我们需要了解什么是多线程,同步和异步的概念,线程安全问题,线程之间的通信(wait和notify),jdk1.8的并发包,线程池的原理分析,锁的概念(多种类型的锁)线程与进程的概念:线程就是一条执行路径,进程是一个独立的应用执行程序比如一个.exe程序多线程不是真正的在一起执行,而是由CPU随机切换不同的进程,时间轮转片切换,单核的情况下其实只能执行一条进程。我们通常...原创 2019-08-20 08:37:43 · 94 阅读 · 0 评论 -
并发编程多线程基础(草稿7)-- disruptor框架
第四节(前三节是讲锁的,放到了上一个草稿中) disruptor概述Disruptor是一个开源的并发框架,是一个高性能的异步处理框架,或者可以认为是最快的消息框架(轻量的JMS),也可以认为是一个观察者模式的实现,或者事件监听模式的实现。性能要高于BlockingQueue,BlockingQueue原理用的是悲观锁,disruptor用的是乐观锁。disruptor是用事件监听实现的...原创 2019-08-20 08:40:07 · 245 阅读 · 0 评论 -
并发编程多线程基础(草稿4)--线程池讲解
并发编程之线程池原理分析第一节并发队列(先进先出)(1)ConcurrentLinkedQueue(实体类) 非阻塞式队列(2)BlockingQueue(接口) 阻塞式队列阻塞:会进行等待 BlockingQueue非阻塞:不会进行等待阻塞式队列和非阻塞式队列的区别:添加,出列的时候,如果超出了队列的总数,这时候阻塞式队列会进行等待,非阻塞式队列不会等待,...原创 2019-08-20 08:38:56 · 116 阅读 · 0 评论 -
性能优化专题(2)----垃圾收集器性能监控工具实战参数调优案例分析
常见的JVM参数配置JVM提供了很多的参数进行JVM各个方面内存大小的设置,为Java应用进行优化提供了诸多的工具。常见的参数配置:-XX:+PrintGC:每次触发GC的时候打印相关的日志-XX:+UseSerialGC:串行回收-XX:+PrintGCDetails:更详细的GC日志-Xms:堆的初始值-Xmx:堆的最大可用值-Xmn:新生代堆的最大可用值;如果Eden...原创 2019-08-30 10:25:16 · 279 阅读 · 0 评论 -
性能优化专题(3)----动态字节码技术
JDK可视化工具jconsolejps命令:可以监控现在有多少个Java程序正在运行。jconsole是Java的JDK自带的jconsole的启动方法(1)命令行的启动,使JDK在Path上,运行jconsole即可(2)GUI shell启动,找到JDK安装路径,打开bin文件夹,双击jconsole我们的安装路径在双击jconsole运行此时我们没有运...原创 2019-09-02 01:32:32 · 157 阅读 · 0 评论 -
源码分析(9)---纯手写基于ArrayList、LinkedList实现HashMap
HashMap的相关原理介绍在JDK1.7中HashMap是由数组加链表实现的,此时的链表不同于LinkedList,LinkedList而在1.7之后,则由数组加红黑树实现官方测试JDK1.8的HashMap的性能比JDK1.7的HashMap性能提高了15%-根据上图可以看到:(1)紫色表示的是数组,hash数组(桶),数组元素是每个链表的头结点。(2)绿色的代表的是链表,...原创 2019-09-15 14:29:47 · 208 阅读 · 0 评论 -
源码分析(8)---纯手写基于链表的方式实现LinkedList集合
LinkedList和ArrayList相比较,LinkedList适合做增删,而ArrayList适合做查询。因为ArrayList的底层是数组实现的,添加和删除操作会利用拷贝技术实现,LinkedList的底层是用链表为底层实现的。ArrayList会考虑数组的扩容问题,但是LinkedList不需要考虑,因为底层是链表实现的。ArrayList是数组实现,所以是连续的内存;但是Link...原创 2019-09-15 14:28:26 · 207 阅读 · 0 评论