Spring 测试 Spring 测试 Junit Junit是一个Java语言的单元测试框架,被开发者用于实施对应用程序的单元测试,加快程序编制速度,同时提高编码的质量。 注解 123456public class TestDemo { @Test void fun1(){ System.out.println("测试"); } 2022-05-26 Software Language Java SpringFramework Spring
Dubbo 原理 Dubbo 原理 RPC 原理 一次完整的RPC调用流程(同步调用)如下: 服务消费方(client)调用以本地调用方式调用服务。 client stub 接收到调用后负责将方法,参数等组装成能够进行网络传输的消息体。 client stub 找到服务地址,并将消息发送到服务端。 server stub 收到消息后进行解码。 server stub 根据解码结果调用本地的服务。 本地服务执 2022-05-26 Software BackEnd Distributed Dubbo
Dubbo 高可用 Dubbo 高可用 宕机时的处理 监控中心宕掉不影响使用,只是丢失部分采样数据。 数据库宕掉后,注册中心仍能通过缓存提供服务列表查询,但不能注册新服务。 注册中心对等集群,任意一台宕掉后,将自动切换到另一台。 注册中心全部宕掉后,服务提供者和服务消费者仍能通过本地缓存通讯。 服务提供者无状态,任意一台宕掉后,不影响使用。 服务提供者全部宕掉后,服务消费者应用将无法使用,并无限次重连等待服务提供者 2022-05-26 Software BackEnd Distributed Dubbo
红黑树(RBT) 红黑树(RBT) 基于BST存在的问题,一种新的树——平衡二叉查找树(Balanced BST)产生了,平衡树在插入和删除的时候,会通过旋转操作将高度保持在logN,其中两款具有代表性的平衡树分别为AVL树和红黑树,AVL树由于实现比较复杂,而且插入和删除性能差,在实际环境下的应用不如红黑树。 红黑树(Red-Black Tree,以下简称RBTree)的实际应用非常广泛,比如Linux内核中的 2022-05-26 Software DataStruct 树
Java ReentrantLock与AQS Java ReentrantLock与AQS Java中的大部分同步类(Lock,Semaphore,ReentrantLock等)都是基于AbstractQueuedSynchronizer(简称为AQS)实现的,AQS是一种提供了原子式管理同步状态,阻塞和唤醒线程功能以及队列模型的简单框架。 ReentrantLock ReentrantLock特性概览 ReentrantLock意思为 2022-05-26 Software Language Java JavaSE 多线程
Raft 选举算法 Raft 选举算法 Raft 算法是分布式系统开发首选的共识算法。 主要在分布式集群架构下进行领导者(主节点)的确认,比如现在流行的组件 Etcd, Consul, Nacos, RocketMQ, RedisSentinel 底层都是采用 Raft 算法来确认集群中的主节点,再通过主节点向其他节点下发指令。 Raft 算法是通过一切以领导者为准的方式,实现一系列值的共识和各节点日志的一致。 2022-05-26 Software BackEnd Distributed
换k张 换k张 问题描述 给出一个可重集合,并希望你从中选出一个尽可能大的子集使得其中没有两个数是"连续”的(连续是指即这两个数之差的绝对值不超过 1) 输入描述:第一行有一个整数 n (1<=n<=100000),代表小团给你的可重集大小,第二行有 n 个空格隔开的整数(范围在 1 到 200000 之间),代表小团给你的可重集。 输出描述:输出满足条件的最大子集的大小。 12 2022-05-26 Software Algorithm 动态规划
BST(二叉查找树) BST(二叉查找树) 二叉查找树(Binary Search Tree,简称BST)是一棵二叉树,它的左子节点的值比父节点的值要小,右节点的值要比父节点的值大,它的高度决定了它的查找效率。 在理想的情况下,二叉查找树增删查改的时间复杂度为O(logN)(其中N为节点数),最坏的情况下为O(N),当它的高度为logN+1时,我们就说二叉查找树是平衡的。 BST的查找操作 12345678910 2022-05-26 Software DataStruct 树
Dubbo admin Dubbo admin 为了让用户更好的管理监控众多的dubbo服务,官方提供了一个可视化的监控程序dubbo-admin Docker 创建数据库 创建名为dubbo_admin的Schema 执行SQL语句./dubbo-admin-server/src/main/resources/schema.sql 12345678910CREATE TABLE IF NOT EXISTS `m 2022-05-26 Software BackEnd Distributed Dubbo
Dubbo 配置 Dubbo 配置 配置覆盖关系 方法级优先,接口级次之,全局配置再次之。 如果级别一样,则消费方优先,提供方次之。 其中,服务提供方配置,通过URL经由注册中心传递给消费方。 dubbo:application 应用信息配置,对应的配置类:org.apache.dubbo.config.ApplicationConfig 属性 对应URL参数 类型 是否必填 缺省值 作用 描述 2022-05-26 Software BackEnd Distributed Dubbo
JVM 垃圾收集策略与算法 JVM 垃圾收集策略与算法 程序计数器,虚拟机栈,本地方法栈随线程而生,也随线程而灭,栈帧随着方法的开始而入栈,随着方法的结束而出栈,这几个区域的内存分配和回收都具有确定性,在这几个区域内不需要过多考虑回收的问题,因为方法结束或者线程结束时,内存自然就跟随着回收了。 而对于 Java 堆和方法区,我们只有在程序运行期间才能知道会创建哪些对象,这部分内存的分配和回收都是动态的,垃圾收集器所关注的正 2022-05-26 Software Language Java JavaSE JVM
Java Concurrent集合 Java Concurrent集合 使用java.util.concurrent包提供的线程安全的并发集合可以大大简化多线程编程。 尽量使用Java标准库提供的并发集合,避免自己编写同步代码。 针对List,Map,Set,Deque等,java.util.concurrent包也提供了对应的并发集合类: interface non-thread-safe thread-safe 2022-05-26 Software Language Java JavaSE 多线程
HTTP 与 HTTPS HTTP 与 HTTPS HTTP与HTTPS的区别 HTTPS协议需要到CA申请证书,一般免费证书较少,因而需要一定费用。 HTTP是超文本传输协议,信息是明文传输,HTTPS则是具有安全性的SSL加密传输协议。 HTTP和HTTPS使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443 HTTP 页面响应速度比 HTTPS 快,主要是因为 HTTP 使用 TCP 三次握手建立 2022-05-26 Network HTTP
中间人攻击 中间人攻击 中间人攻击(Man-in-the-MiddleAttack,简称"MITM攻击”)是指攻击者与通讯的两端分别创建独立的联系,并交换其所收到的数据,使通讯的两端认为他们正在通过一个私密的连接与对方直接对话,但事实上整个会话都被攻击者完全控制,在中间人攻击中,攻击者可以拦截通讯双方的通话并插入新的内容。 大多数的加密协议都专门加入了一些特殊的认证方法以阻止中间人攻击,例如,SS 2022-05-26 Network HTTP
Maven 问题解决 Maven 问题解决 依赖冲突 原因:假设有如下依赖关系: A->B->C->D1(log 15.0):A中包含对B的依赖,B中包含对C的依赖,C中包含对D1的依赖,假设是D1是日志jar包,version为15.0 E->F->D2(log 16.0):E中包含对F的依赖,F包含对D2的依赖,假设是D2是同一个日志jar包,version为16.0 当pom.xm 2022-05-26 Software Language Java Maven
Spring 缓存 Spring 缓存 从3.1开始,Spring引入了对Cache的支持。 配置 pom.xml 1234<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId&g 2022-05-26 Software Language Java SpringFramework Spring
Spring 日志 Spring 日志 Slf4j Slf4j是一个日志框架,它是对所有日志框架制定的一种规范,标准,接口,并不是一个框架的具体的实现,因为接口并不能独立使用,它需要和具体的日志框架来配合使用。 在Java中具体的日志实现有Log4j,Log4j2,Slf4j,JDKLog,Logback等等。 Logback Spring Boot默认使用的日志框架。 日志级别 日志级别从低到高分为TRA 2022-05-26 Software Language Java SpringFramework Spring
Java 线程同步 Java 线程同步 临界资源问题 多个线程共享的数据称为临界资源,由于是线程调度程序负责线程的调度,程序员无法精确控制多线程的交替次序,如果没有特殊控制,多线程对临界资源的访问将导致数据的不一致性。 以堆栈操作为例,涉及出栈和进栈两个操作,程序代码如下: 1234567891011121314public class Stack { int idx = 0; char[] 2022-05-26 Software Language Java JavaSE 多线程
Java 断言 Java 断言 断言(Assertion)是一种调试程序的方式,在Java中,使用assert关键字来实现断言。 断言在软件开发中是一种常用的调试方式,很多开发语言中都支持这种机制,一般来说,断言用于保证程序最基本,关键的正确性,断言检查通常在开发和测试时开启,为了保证程序的执行效率,在软件发布后断言检查通常是关闭的,断言是一个包含布尔表达式的语句,在执行这个语句时假定该表达式为true,如果表 2022-05-26 Software Language Java JavaSE 异常处理
圆环回原点问题 圆环回原点问题 问题描述 圆环上有 10 个点,编号为 0~9,从 0 点出发,每次可以逆时针和顺时针走一步,问走 n 步回到 0 点共有多少种走法。 123输入: 2输出: 2解释:有2种方案,分别是0->1->0和0->9->0 代码实现 1234567891011121314151617181920public class Solution { p 2022-05-26 Software Algorithm 动态规划