自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Java后端架构V

专注于分享Java后端架构技术知识点以及最新大厂面试题合集

  • 博客(185)
  • 收藏
  • 关注

原创 常见的负载均衡算法的实现与应用

面试需要掌握那些技能?所谓负载均衡就是将外部发送过来的请求均匀或者根据某种算法分配到对称结构中的某一台服务器中。负载均衡可以分为硬件负载均衡和软件负载均衡,常见的硬件负载均衡有F5、Array等,但是这些设备都比较昂贵。相比之下,利用软件来实现负载均衡就比较简单了,常见的像是 Nginx 的反向代理负载均衡。这篇文章并不去细说 Nginx 这类软件的具体配置,只是着重来了解几种常见的负载均衡算法的实现(本文使用Java描述)与应用。

2023-08-16 14:29:36 228

原创 字节面试常问:你对算法有了解么?说下排序算法?

桶排序 (Bucket sort)的工作的原理:假设输入数据服从均匀分布,将数据分到有限数量的桶里,每个桶再分别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排)。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。快速排序的基本思想:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。

2023-06-01 10:29:35 211 1

原创 聊一下你对海量数据处理的方法?

bit:位byte:字节int 类型为 4 byte,共32位bit,unsigned int也是1G= 2^30 =10.7亿所谓海量数据处理,就是指数据量太大,无法在较短时间内迅速解决,或者无法一次性装入内存。而解决方案就是:针对时间,可以采用巧妙的算法搭配合适的数据结构,如 Bloom filter/Hashmap/bit-map/堆/数据库/倒排索引/trie树;针对空间,大而化小,分而治之(hash映射),把规模大化为规模小的,各个击破。

2023-06-01 10:22:36 259

原创 阿里面试常问:谈谈微服务的数据库设计思路?

微服务设计的一个关键是数据库设计,基本原则是每个服务都有自己单独的数据库,而且只有微服务本身可以访问这个数据库。它是基于下面三个原因。理想的设计是你的数据库只有你的服务能访问,你也只调用自己数据库中的数据,所有对别的微服务的访问都通过服务调用来实现。当然,在实际应用中,单纯的服务调用可能不能满足性能或其他要求,不同的微服务都多少需要共享一些数据。

2023-06-01 10:18:47 198

原创 面试常问:什么是熔断?什么是服务降级?

服务熔断的作用类似于我们家用的保险丝,当某服务出现不可用或响应超时的情况时,为了防止整个系统出现雪崩,暂时停止对该服务的调用。

2023-06-01 10:18:09 137

原创 面试常问题:谈谈在项目中,如何应对高并发流量?

应对大流量的一些思路。

2023-06-01 10:13:09 390

原创 阿里面试真题:你讲讲分布式事务问题的几种方案?

如果你要操作别的服务对应的库,不允许直连别的服务的库,违反微服务架构的规范,你随便交叉胡乱访问,几百个服务的话,全体乱套,这样的一套服务是没法管理的,没法治理的,可能会出现数据被别人改错,自己的库被别人写挂等情况。比如说我们,一般来说跟钱相关的,跟钱打交道的,支付、交易相关的场景,我们会用 TCC,严格保证分布式事务要么全部成功,要么全部自动回滚,严格保证资金的正确性,保证在资金上不会出现问题。如果你要操作别人的服务的库,你必须是通过调用别的服务的接口来实现,绝对不允许交叉访问别人的数据库。

2023-06-01 10:10:10 92

原创 阿里八股文面试题:分库分表之后,id 主键如何处理?

分库分表后需要一个全局唯一的 id 来支持。

2023-06-01 10:07:47 99

原创 阿里面试真题:说几种常用的分布式 ID 解决方案

在复杂的分布式系统中,ID就是大量的数据和消息的唯一标识。举个例子,数据库的ID字段在单体的情况下可以使用自增来作为ID,但是对数据分库分表后一定需要一个唯一的ID来标识一条数据,这个ID就是分布式ID。对于分布式ID而言,也需要具备分布式系统的特点:高并发,高可用,高性能等特点。

2023-06-01 10:07:22 190

原创 面试八股文原型题:什么是CAP 定理,为什么CAP不能同时被满足?

在分布式系统中,不同的节点分布在不同的子网络中,由于一些特殊的原因,这些子节点之间出现了网络不通的状态,但他们的内部子网络是正常的。从而导致了整个系统的环境被切分成了若干个孤立的区域。这就是分区。为什么只能3选 2假设有一个系统如下:整个系统由两个节点配合组成,之间通过网络通信,当节点 A 进行更新数据库操作的时候,需要同时更新节点 B 的数据库(这是一个原子的操作)。上面这个系统怎么满足 CAP 呢?

2023-06-01 10:01:52 160

原创 面试题:分布式系统接口,如何避免表单的重复提交?

怎么实现承载更多用户量的系统,通常来讲分为两个大方向,互相配合实现。硬件架构改进,主要是使用阿里云这种多组件的云环境:通过负载均衡SLB,模版克隆的云服务器ECS,云数据库RDS,共享对象存储OSS等不同职责的云产品组合实现。软件架构优化主要是软件代码开发的规范:业务解耦合,架构微服务,单机无状态化,文件存储共享等在软件开发时候需要对于接口服务的“幂等性”进行实现。

2023-06-01 09:50:12 113

原创 百度面试必问:谈谈项目中单点登录的实现原理?

单点登录在现在的系统架构中广泛存在,它将多个子系统的认证体系打通,实现了一个入口多处使用,而在架构单点登录时,也会遇到一些小问题,在不同的应用环境中可以采用不同的单点登录实现方案来满足需求。

2023-05-31 10:23:40 162

原创 面试官:谈谈为什么要拆分数据库?有哪些方法?

垂直切分是根据业务来拆分数据库(即不同业务的表存在不同的数据库),同一类业务的数据表拆分到一个独立的数据库,另一类的数据表拆分到其他数据库。比如说一个新零售的电商数据库,我们可以把跟商品相关的数据表拆分成一个数据库,然后在这些数据表的基础之上,构建出商品系统。比如用JAVA或者PHP语言,创建出一个商城系统。然后把跟进销存相关的数据表拆分到另外一个数据库上,再用程序构建出仓库系统。垂直切分解决了什么问题垂直切分可以降低单节点数据库的负载。

2023-05-31 10:21:53 85

原创 阿里面试官必问:说说双重检查加锁单例模式为什么两次判断?

为什么是双重校验锁实现单例模式呢?也就是第一个if(singleton==null),这个是为了提高代码执行效率,由于单例模式只要一次创建实例即可,所以当创建了一个实例之后,再次调用getInstance方法就不必要进入同步代码块,不用竞争锁。直接返回前面创建的实例即可。

2023-05-31 10:17:06 356

原创 面试必问题:单例模式有几种写法?

懒汉模式是变种最多的单例模式。所谓懒汉即先不初始化单例,等第一次使用的时候再初始化,即“懒加载”。懒汉模式的核心就是懒加载。好处是启动速度快、节省资源,一直到实例被第一次访问,才需要初始化单例;小坏处是写起来麻烦,大坏处是线程不安全,if语句存在竞态条件。最粗暴的犯法是用synchronized关键字修饰getInstance()方法,这样能达到绝对的线程安全。变种1的好处是写起来简单,且绝对线程安全;坏处是并发性能极差,事实上完全退化到了串行。

2023-05-31 10:16:12 54

原创 面试官常问:请你谈谈单例模式的优缺点,注意事项,以及使用场景?

单例模式(Singleton),是一种常用的软件设计模式。在应用这个模式时,单例对象的类必须保证只有一个实例存在。许多时候整个系统只需要拥有一个全局对象,这样有利于我们协调系统整体的行为。比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息。这种方式简化了在复杂环境下的配置管理。

2023-05-31 10:08:42 148

原创 面试官:你能详细说一下三种单例模式实现么?

有两个问题需要注意:1、如果单例由不同的类装载器装入,那便有可能存在多个单例类的实例。假定不是远端存取,例如一些servlet容器对每个servlet使用完全不同的类装载器,这样的话如果有两个servlet访问一个单例类,它们就都会有各自的实例。2、如果Singleton实现了java.io.Serializable接口,那么这个类的实例就可能被序列化和复原。不管怎样,如果你序列化一个单例类的对象,接下来复原多个那个对象,那你就会有多个单例类的实例。

2023-05-31 10:02:48 39

原创 面试官:你了解设计模式么?请详细说下?

设计模式是一套经过反复使用的代码设计经验,目的是为了重用代码、让代码更容易被他人理解、保证代码可靠性。设计模式使得代码编写真正工程化,它是软件工程的基石。其实还有两类:并发型模式和线程池模式。

2023-05-31 09:56:21 117

原创 TCP协议面试10连炮,讲真,是真的顶!

TCP 的三次握手,其实是确认双方的两样能力:发送的能力和接收的能力。过程如下:从最开始双方都处于CLOSED状态。然后服务端开始监听某个端口,进入了LISTEN状态。然后客户端主动发起连接,发送 SYN , 自己变成了SYN-SENT状态。服务端接收到,返回SYN和ACK(对应客户端发来的SYN),自己变成了SYN-REVD。之后客户端再发送ACK给服务端,自己变成了ESTABLISHED状态;服务端收到ACK之后,也变成了ESTABLISHED状态。

2023-05-31 09:48:03 76

原创 面试官常问:谈谈你对零拷贝的理解?

零拷贝如果简单用java里面对象的概率来理解的话,其实就是使用的都是对象的引用,每个引用对象的地方对其改变就都能改变此对象,永远只存在一份对象。为帮助开发者们提升面试技能、有机会入职BATJ等大厂公司,特别制作了这个专辑——这一次整体放出。

2023-05-31 09:43:51 130

原创 面试官:请你谈谈关于IO同步、异步、阻塞、非阻塞的区别?

同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别?其实不同的人给出的答案都可能不同,比如wiki,就认为asynchronous IO和non-blocking IO是一个东西。这其实是因为不同的人的知识背景不同,并且在讨论这个问题的时候上下文(context)也不相同。所以,为了更好的回答这个问题,先限定一下本文的上下文。本文讨论的背景是Linux环境下的network IO。

2023-05-31 09:41:29 213

原创 面试常问tcp/ip等问题,看这篇文章就够了!

要说http就绕不开tcp,TCP协议对应于传输层,而HTTP协议对应于应用层,从本质上来说,二者没有可比性。但是,http是基于tcp协议的。【注意】中断连接端可以是Client端,也可以是Server端。因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。

2023-05-29 17:52:04 593

原创 【雾都重庆】三年后端小妹面试懂车帝,直呼太简单(BIO、NIO、AIO、Netty)

Java中I/O是以流为基础进行数据的输入输出的,所有数据被串行化(所谓串行化就是数据要按顺序进行输入输出)写入输出流。简单来说就是java通过io流方式和外部设备进行交互。在Java类库中,IO部分的内容是很庞大的,因为它涉及的领域很广泛:标准输入输出,文件的操作,网络上的数据传输流,字符串流,对象流等等等。比如程序从服务器上下载图片,就是通过流的方式从网络上以流的方式到程序中,再到硬盘中。同步并阻塞。

2023-05-29 17:43:53 133

原创 那些常问的网络编程面试题(TCP、UDP、Socket、HTTP)

TCP/IP即传输控制/网络协议,是面向连接的协议,发送数据前要先建立连接(发送方和接收方的成对的两个之间必须建 立连接),TCP提供可靠的服务,也就是说,通过TCP连接传输的数据不会丢失,没有重复,并且按顺序到达。UDP它是属于TCP/IP协议族中的一种。是无连接的协议,发送数据前不需要建立连接,是没有可靠性的协议。因为不需要建立连接所以可以在在网络上以任何可能的路径传输,因此能否到达目的地,到达目的地的时间以及内容的正确性都是不能被保证的。

2023-05-29 17:26:05 65

原创 ZooKeeper面试十三连环炮,你能顶得多久?

ZooKeeper是一个分布式应用程序协调服务。Zookeeper提供了文件系统和通知机制。Zookeeper提供一个多层级的节点命名空间(节点称为znode)。与文件系统不同的是,这些节点都可以设置关联的数据,而文件系统中只有文件节点可以存放数据而目录节点不行。Zookeeper为了保证高吞吐和低延迟,在内存中维护了这个树状的目录结构,这种特性使得Zookeeper不能用于存放大量的数据,每个节点的存放数据上限为1M。

2023-05-29 16:58:06 175

原创 Dubbo面试八连炮,你能答上来多少?

Dubbo是阿里巴巴开源的基于 Java 的高性能 RPC 分布式服务框架,现已成为 Apache 基金会孵化项目。致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用的,只有在分布式的时候,才有dubbo这样的分布式服务框架的需求,并且本质上是个服务调用的东西,说白了就是个远程服务调用的分布式框架(告别Web Service模式中的WSdl,以服务者与消费者的方式在dubbo上注册)。

2023-05-29 16:53:18 35

原创 面试必问:你来说说Redis两种持久化方式的优缺点

每次保存 RDB 的时候,Redis 都要 fork() 出一个子进程,并由子进程来进行实际的持久化工作。虽然 AOF 重写也需要进行 fork() ,但无论 AOF 重写的执行间隔有多长,数据的耐久性都不会有任何损失。虽然 Redis 允许你设置不同的保存点(save point)来控制保存 RDB 文件的频率, 但是, 因为RDB 文件需要保存整个数据集的状态, 所以它并不是一个轻松的操作。在这种情况下, 一旦发生故障停机, 你就可能会丢失好几分钟的数据。

2023-05-29 16:50:16 33

原创 面试必问:怎么保证缓存和数据库一致性?

存储的速度是有区别的。缓存就是把低速存储的结果,临时保存在高速存储的技术。如图所示,金字塔更上面的存储,可以作为下面存储的缓存。

2023-05-29 16:47:04 117

原创 面试必问:谈谈你对缓存的使用和理解?

所谓的服务,一层应用 + 一层数据,应用从数据层获取数据然后加工输出。数据层,通常我们指的是持久化介质上的持久化存储。它有多种形式的,可以是文件,或者数据库。数据存储在持久化介质上,而应用运行与内存中。内存和持久化介质是两个有着量级速度差别的不同介质,由此,应用和数据之间便有了“矛盾”。由此,我们说的缓存,必然要是存放于内存中的,这样它便能距离应用更近,更快的给出应用所需要的数据,以获得更快的服务响应。当然,并不是缓存完全隔绝持久层数据。缓存,伴随而生的一个词叫做命中率。

2023-05-29 16:44:56 109

原创 面试官常问:Redis中是如何实现分布式锁的?

其次,由于我们对锁设置了过期时间,即使锁的持有者后续发生崩溃而没有解锁,锁也会因为到了过期时间而自动解锁(即key被删除),不会发生死锁。我们可以看到,RedissonLock是可重入的,并且考虑了失败重试,可以设置锁的最大等待时间, 在实现上也做了一些优化,减少了无效的锁申请,提升了资源的利用率。如果存储锁对应key的那个节点挂了的话,就可能存在丢失锁的风险,导致出现多个客户端持有锁的情况,这样就不能实现资源的独享了。需要获取以下这些面试题答案以及学习资料得话麻烦关注+好评之后。

2023-05-29 16:43:38 248

原创 汇总那些Redis 面试常见的问题以及答案

缓存穿透是指缓存和数据库中都没有的数据,而用户不断发起请求,如发起为id为“-1”的数据或id为特别大不存在的数据。这时的用户很可能是攻击者,攻击会导致数据库压力过大。如何解决呢?接口层增加校验,如用户鉴权校验,id做基础校验,id<=0的直接拦截;从缓存取不到的数据,在数据库中也没有取到,这时也可以将key-value对写为key-null,缓存有效时间可以设置短点,如30秒(设置太长会导致正常情况也没法使用)。这样可以防止攻击用户反复用同一个id暴力攻击。

2023-05-29 16:37:20 59

原创 面试官必问:谈谈 Redis 的过期策略?

在日常开发中,我们使用 Redis 存储 key 时通常会设置一个过期时间,但是 Redis 是怎么删除过期的 key,而且 Redis 是单线程的,删除 key 会不会造成阻塞。要搞清楚这些,就要了解 Redis 的过期策略和内存淘汰机制。Redis采用的是定期删除 + 懒惰删除策略。

2023-05-28 14:12:29 253

原创 面试官最喜欢问:你知道Redis的字符串是怎么实现的吗?

Redis虽然是用C语言写的,但却没有直接用C语言的字符串,而是自己实现了一套字符串。目的就是为了提升速度,提升性能,可以看出Redis为了高性能也是煞费苦心。Redis构建了一个叫做简单动态字符串(Simple Dynamic String),简称SDS。SDS?下面画个图来说明,一目了然。Redis的字符串也会遵守C语言的字符串的实现规则,即最后一个字符为空字符。然而这个空字符不会被计算在len里头。SDS的最厉害最奇妙之处在于它的Dynamic。动态变化长度。

2023-05-28 14:09:03 118

原创 面试官常问:详细说说对MQ消息队列的理解

MQ的使用场景有很多,但是比较核心的就是:解耦、异步、削锋。举例,有ABCDE五个系统,BCDE系统都需要调用A系统的接口获取数据,这样A系统跟其他四个系统严重耦合,需要时时刻刻考虑其他四个系统要是挂了怎么办,需不需要重新发送数据给他们,这个时候的A系统内心是崩溃的。

2023-05-28 14:07:37 34

原创 面试官常问:消息队列中,如何保证消息的顺序性?

保证消息是有顺序的,这是生产系统中常见的问题。

2023-05-28 13:58:09 214

原创 面试官必问:为什么需要消息队列?使用消息队列有什么好处?

当系统中出现“生产“和“消费“的速度或稳定性等因素不一致的时候,就需要消息队列,作为抽象层,弥合双方的差异。“ 消息 ”是在两台计算机间传送的数据单位。消息可以非常简单,例如只包含文本字符串;也可以更复杂,可能包含嵌入对象。消息被发送到队列中,“ 消息队列 ”是在消息的传输过程中保存消息的容器。举几个例子:(1) 业务系统触发短信发送申请,但短信发送模块速度跟不上,需要将来不及处理的消息暂存一下,缓冲压力。就可以把短信发送申请丢到消息队列,直接返回用户成功,短信发送模块再慢慢去消息队列中取消息进行处理。

2023-05-28 13:56:06 226

原创 面试官喜欢问:Spring,SpringMVC,SpringBoot,SpringCloud有什么区别和联系?

Spring是核心,提供了基础功能,核心是控制反转(IOC)和面向切面(AOP); Spring MVC 是基于Spring的一个 MVC 框架,主要处理web开发的路径映射和视图渲染,属于Spring框架中WEB层开发的一部分 ; Spring Boot 是为简化Spring配置的快速开发整合包,是一套快速配置开发的脚手架,能快速开发单个微服务; Spring Cloud是构建在Spring Boot之上的服务治理框架,关注于全局的微服务整合和管理,将多个SpringBoot单体微服务进行整合以及管

2023-05-28 13:53:07 65

原创 面试官常问:你能说出SpringBoot自动装配的原理吗?

SpringBoot所有自动配置类都是在启动的时候进行扫描并加载,通过spring.factories可以找到自动配置类的路径,但是不是所有存在于spring,factories中的配置都进行加载,而是通过@ConditionalOnClass注解进行判断条件是否成立(只要导入相应的stater,条件就能成立),如果条件成立则加载配置类,否则不加载该配置类。

2023-05-28 13:50:21 205

原创 面试官常问:Spring AOP有哪些通知类型,它们的执行顺序是怎样的?

在基于Spring AOP编程的过程中,基于AspectJ框架标准,spring中定义了五种类型的通知,它们分别是:前置通知 (@Before)。返回通知 (@AfterReturning)。异常通知 (@AfterThrowing)。后置通知 (@After)。环绕通知 (@Around) :(优先级最高)通知执行顺序将上面的所有通知类型写入同一个切面中,它的执行顺序为:需要获取以下这些面试题答案以及学习资料得话麻烦关注+好评之后直接点击此链接→即可免费获取哦~~

2023-05-28 13:48:39 290

原创 面试官:Spring的Bean实例化过程应该是怎样的?

在所有的准备工作完成之后,如果我们的Bean还有一定的初始化逻辑,那么Spring将允许我们通过两种方式配置我们的初始化逻辑:配置init-method参数一般通过配置init-method方法比较灵活。

2023-05-28 13:46:10 44

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除