【面试】面试题汇总
后端
JAVA
1、集合的类型
image-20230516122609729
2、集合中四种线程安全的结构
Vector :
就比ArrayList多了个同步化机制(线程安全)
Hashtable : 就比HashMap多了个线程安全
ConcurrentHashMap : 是一种高效但是线程安全的集合
Stack :
栈,也是线程安全的,继承于Vector,已过时,不建议使用
3、queue常用方法
添加元素
addFirst(E e) 在数组前面添加元素
addLast(E e) 在数组后面添加元素
offerFirst(E e) 在数组前面添加元素,并返回是否添加成功
offerLast(E e) 在数组最后添加元素,并返回是否添加成功
删除元素
removeFirst() 删除第一个元素,并返回删除元素的值,如果元素为
null,将抛出异常
pollFirst() 删除第一个元素,并返回删除元素的值,如果元素为
null,将返回 null
removeLast() 删除最后一个元素,并返回删除元素的值,如果为
null ...
【SpringCloud】SpringCloud概述
微服务概述
简而言之,微服务体系结构风格是一种将单个应用程序开发为一组小服务的方法,每个服务都在自己的进程中运行,并与轻量级机制(通常是HTTP资源API)通信。这些服务是围绕业务能力构建的,并通过完全自动化的部署机制进行独立部署。这些服务的集中管理最低限度,可以用不同的编程语言编写,并使用不同的数据存储技术--詹姆斯·刘易斯和马丁·福勒(2014)
特点
微服务是一种架构风格
一个应用拆分为一组小型服务
每个服务运行在自己的进程内,也就是可独立部署和升级
服务之间使用轻量级HTTP交互
服务围绕业务功能拆分
可以由全自动部署机制独立部署
去中心化,服务自治。服务可以使用不同的语言、不同的存储技术
微服务支撑维度需要的技术
服务调用
服务降级
服务注册与发先
服务熔断
负载均衡
服务消息队列
服务网关
配置中心管理
自动化构建部署
服务监控
全链路追踪
服务定时任务
调度操作
Spring Cloud简介
符合微服务技术维度
SpringCloud=分布式微服务架构的站式解决方案,是多种微服务架构落地技术的集合 ...
【SpringCloudAlibaba】SpringCloudAlibaba概述
SpringCloud Alibaba 简介
【实战】RabbitMQ订单未支付x分钟自动取消
技术点
RabbitMQ: 死信队列,脑瓜子空空就点 传送门
进行回忆呗!
实现原理
1、用户下单之后,投递一个订单消息存放在订单队列里,该消息过期时间为x分钟,一直未被订单消费者消费,消息会转移到死信交换机路由到死信队列中,被我们的死信消费者x分钟后消费
2、死信消费者在根据订单号码查询支付订单状态,如果是未支付情况下,则将该订单设置未超时。
对筛选出来的订单号码进行核对校验
订单中是否存在
携带订单号码调用支付宝查询订单支付状态是否为待支付
更新该订单号码状态
超时消费流程图
代码
定义配置类
1、定义订单交换机,订单队列,设置订单交换机绑定订单队列
2、定义死信订单交换机,死信订单队列,设置死信订单交换机绑定死信订单队列
3、设置订单队列的死信订单交换机
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061@Configurationpublic class Que ...
【ES6】ES6语法
let定义变量
1、变量不可重复声明
12let star = '苹果' let star = '瓶子'//报错
2、块级作用域
大括号内都属于作用域内
1{ let girl = '周扬青' }
3、不存在变量提升
var命令会发生”变量提升“现象,即变量可以在声明之前使用,值为undefined。
12console.log(num) // undefinedvar num = 1
let命令不存在变量提升的行为,它所声明的变量一定要在声明后使用,否则报错。
12console.log(num) // Cannot access 'num' before initializationvar num = 1
4.不影响作用域链
const 关键字
1、声明必须赋初始值
1const ONE = 1;
2、标识符一般为大写
1const ONE = 1;
3、常量值不能修改
12const ONE = 1;const ONE = 0; //报错
4、 ...
【k3s】K3s安装与部署
概述
K3s 是一个轻量级的 Kubernetes
发行版,它针对边缘计算、物联网等场景进行了高度优化。
优点
打包为单个二进制文件。
使用基于 sqlite3
的轻量级存储后端作为默认存储机制。同时支持使用
etcd3、MySQL 和 PostgreSQL 作为存储机制。
封装在简单的启动程序中,通过该启动程序处理很多复杂的
TLS 和选项。
默认情况下是安全的,对轻量级环境有合理的默认值。
添加了简单但功能强大的batteries-included功能,例如:本地存储提供程序,服务负载均衡器,Helm
controller 和 Traefik Ingress controller。
所有 Kubernetes control-plane
组件的操作都封装在单个二进制文件和进程中,使 K3s
具有自动化和管理包括证书分发在内的复杂集群操作的能力。
最大程度减轻了外部依赖性,K3s 仅需要 kernel 和
cgroup 挂载。
由来
据说希望安装的 Kubernetes 在内存占用方面只是一半的大小。Kubernetes
是一个 1 ...
【MQ】MQ概念与选用
MQ的概念
MQ(message queue),从字面意思上看,本质是个队列,FIFO
先入先出,只不过队列中存放的内容是message
而已,还是一种跨进程的通信机制,用于上下游传递消息。在互联网架构中,MQ
是一种非常常见的上下游“逻辑解耦+物理解耦”的消息通信服务。使用了
MQ 之后,消息发送上游只需要依赖 MQ,不用依赖其他服务。
消息队列的作用
1、流量消峰
举个例子,如果订单系统最多能处理一万次订单,这个处理能力应付正常时段的下单时绰绰有余,正常时段我们下单一秒后就能返回结果。但是在高峰期,如果有两万次下单操作系统是处理不了的,只能限制订单超过一万后不允许用户下单。使用消息队列做缓冲,我们可以取消这个限制,把一秒内下的订单分散成一段时间来处理,这时有些用户可能在下单十几秒后才能收到下单成功的操作,但是比不能下单的体验要好
2、应用解构
以电商应用为例,应用中有订单系统、库存系统、物流系统、支付系统。用户创建订单后,如果耦合调用库存系统、物流系统、支付系统,任何一个子系统出了故障,都会造成下单操作异常。当转变成基于消息队列的方式后,系统 ...
【MQ】RabbitMQ
RabbitMQ概念
RabbitMQ
是一个消息中间件:它接受并转发消息。你可以把它当做一个快递站点,当你要发送一个包裹时,你把你的包裹放到快递站,快递员最终会把你的快递送到收件人那里,按照这种逻辑
RabbitMQ是一个快递站,一个快递员帮你传递快件。RabbitMQ与快递站的主要区别在于,它不处理快件而是接收存储和转发消息数据。
四大核心概念
生产者
产生数据发送消息的程序是生产者
交换机
交换机是 RabbitMQ
非常重要的一个部件,一方面它接收来自生产者的消息,另一方面它将消息推送到队列中。交换机必须确切知道如何处理它接收到的消息,是将这些消息推送到特定队列还是推送到多个队列,亦或者是把消息丢弃,这个得有交换机类型决定
队列
队列是 RabbitMQ 内部使用的一种数据结构,尽管消息流经
RabbitMQ和应用程序,但它们只能存储在队列中。队列仅受主机的内存和磁盘限制的约束,本质上是一个大的消息缓冲区。许多生产者可以将消息发送到一个队列,许多消费者可以尝试从一个队列接收数据。这就是我们使用队列的方式
消费者
消费与接收具有相似的含义。消费 ...
【设计模式】23 种设计模式
设置模式介绍
设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。
设计模式的使用
设计模式在软件开发中的两个主要用途。
1) 开发人员的共同平台
设计模式提供了一个标准的术语系统,且具体到特定的情景。例如,单例设计模式意味着使用单个对象,这样所有熟悉单例设计模式的开发人员都能使用单个对象,并且可以通过这种方式告诉对方,程序使用的是单例模式。
2)最佳的实践
设计模式已经经历了很长一段时间的发展,它们提供了软件开发过程中面临的一般问题的最佳解决方案。学习这些模式有助于经验不足的开发人员通过一种简单快捷的方式来学习软件设计。
设计模式的类型
序号
模式 & 描述
包括
1
创建型模式
这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用
new
运算符直接实例化对象。这使得程序在判断针对某个给定实例需要创建哪些对象时更加灵活。
工厂模式(Factory
Pattern) 抽象工厂模式(A ...