Vue组件简介
组件(Component)是 Vue.js 最强大的功能之一。
组件可以扩展 HTML 元素,封装可重用的代码,提高代码的复用性。
组件系统让我们可以用独立可复用的小组件来构建大型应用,几乎任意类型的应用的界面都可以抽象为一个组件树
示例123456789101112131415161718192021<div id="app"> <student></student></div><script> const student = Vue.extend({ template: `<h1>你好 {{ msg }}</h1>`, data() { return { msg: 'XSS' } } }) let vm = ...
消息队列交互模型
消息队列两种模式点对点模式
点对点模式特点:
每个消息只有一个接收者(Consumer)(即一旦被消费,消息就不再在消息队列中)
发送者和接收者间没有依赖性,发送者发送消息之后,不管有没有接收者在运行,都不会影响到发送者下次发送消息;
接收者在成功接收消息之后需向队列应答成功,以便消息队列删除当前接收的消息;
发布订阅模式
发布/订阅模式特点:
每个消息可以有多个订阅者;
发布者和订阅者之间有时间上的依赖性。针对某个主题(Topic)的订阅者,它必须创建一个订阅者之后,才能消费发布者的消息。
为了消费消息,订阅者需要提前订阅该角色主题,并保持在线运行;
Kafka简介
Kafka是由Apache软件基金会开发的一个开源流平台,由Scala和Java编写
Apache Kafka是一个分布式流平台。一个分布式的流平台应该包含3点关键的能力:
发布和订阅流数据流,类似于消息队列或者是企业消息传递系统
以容错的持久化方式存储数据流
处理数据流
上图,我们可以看到:
Producers:可以有很多的应用程序,将消 ...
最近项目收获1、Web消息格式前言 在Web项目开发中,我们都会和前端约定好,消息转换格式,便利于项目消息传输与使用,在此之前,我都是使用统一消息格式的类对象进行消息转换,而这次使用ResponseBodyAdvice接口,及逆行消息格式自动转换,并且自定义注解,在加上注解的类上或者是方法上,可以不进行消息类型的转换
ResponseBodyAdvice的使用ResponseBodyAdvice接口和RequestBodyAdvice接口类似, RequestBodyAdvice是请求到Controller之前拦截,做相应的处理操作, 而ResponseBodyAdvice是对Controller返回的{@code @ResponseBody}or a {@code ResponseEntity} 后,{@code HttpMessageConverter} 类型转换之前拦截, 进行相应的处理操作后,再将结果返回给客户端.
源码12345678910111213141516public interface Response ...
java
未读HTTP、HTTPS、以及跨域
HTTPS相对HTTP协议来说,不是特别安全,HTTPS可以解决以下问题
常规的 HTTP 通信,有以下的问题1.窃听风险 (eavesdropping): 第三方可以获知通信内容2.篡改风险(tampering): 第三方可以修改通信内容。3.冒充风险 (pretending) :第三方可以冒充他人身份参与通信.
https的设计
1.所有信息都是加密传播,第三方无法窃听。2.具有校验机制,一旦被篡改,通信双方会立刻发现3.配备身份证书,防止身份被冒充。
HTTP简介 HTTP 的全称是 HyperText Transfer Protocol (超文本传输协议)的缩写,是一种建立在 TCP 上的无状态连接。HTTP 是互联网的基础协议,用于客户端与服务器之间的通信,它规定了客户端和服务器之间的通信格式,包括请求与响应的格式。
基本的工作流程是客户端发送一个 HTTP 请求,服务端收到请求开始处理,处理结束返回给客户端结果,客户端对结果进行处理并展示。
请求报文格式主要由请求头,请求行,请求体组成
响应报文格式主要由状态行、响应头、响应正文 ...
java
未读自定义线程池线程池的意义:
降低资源消耗,复用已创建的线程,降低开销、控制最大并发数;
隔离线程环境,可以配置独立线程池,将较慢的线程与较快的隔离开,避免相互影响;
实现任务线程队列缓冲策略和拒绝策略;
实现某些与时间相关的功能,如定时执行和周期执行等。
结构图
自定义阻塞队列
阻塞队列使用一个双端队列实现,方便进行操作
参数
任务队列 ArrayDeque
锁 ReentrantLock
生产者、消费者条件变量
最大容量 Capcity
具体实现123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 ...
CAS及原子操作概述CAS(Compare-and-Swap),即比较并替换,是一种实现并发算法时常用到的技术,Java并发包中的很多类都使用了CAS技术。CAS也是现在面试经常问的问题,本文将深入的介绍CAS的原理。
CAS与volatile
结合CAS和volatile可以实现无锁并发,适用于线程数少、多核CPU的场景下使用
volatile获取共享变量时,为了保证该变量的可见性,需要使用volatile修饰。
它可以用来修饰成员变量和静态成员变量,它可以避免线程从自己的工作缓存中查找变量的值,必须到主存中获取它的值,线程操作volatile变量都是操作主存。即一个线程对volatile变量的修改,对另一个线程可见。
CAS必须借助volatile才能读取到共享变量的最新值来实现Compare-and-Swap的效果。
特点优点:
可以保证变量操作的原子性
并发量低时,CAS效率高于synchronized
在线程对共享资源占用时间较短的情况下,使用CAS机制效率也会较高
缺点:
无法解决ABA问题
可能会消耗较高的CPU
不能保证代码块的原子性
乐观锁 ...
JMMJMM内存模型
Java Memory Model
java内存模型,用来屏蔽操作系统和各种硬件的内存访问差异,以实现Java程序在各种平台下运行都能达到一致的内存访问效果
Java内存模型规定所有的变量都存储在主内存中,包括实例变量,静态变量,但是不包括局部变量和方法参数。每个线程都有自己的工作内存,线程的工作内存保存了该线程用到的变量和主内存的副本拷贝,线程对变量的操作都在工作内存中进行。线程不能直接读写主内存中的变量。
不同的线程之间也无法访问对方工作内存中的变量。线程之间变量值的传递均需要通过主内存来完成。
注意:这里所说的主存和计算硬件主存相似,但是java的这片区域是虚拟机的一部分
JMM定义了什么JMM围绕了三个特征建立起来的,分别是原子性、可见性、有序性,这三个特征是java并发的基础
原子性定义:原子性指的是一个操作是不可分割,不可中断的,一个线程在执行时不会被其他线程干扰。
123int i = 0;i++;i = i+1;
第一个操作是原子性的,基本复制语句;
第二个,多个线程会发生竞态,Check then Act 先检查后执行,i+ ...