【后端开发面试题】每日 3 题(二)

news/2025/3/4 1:50:07/

✍个人博客:Pandaconda-CSDN博客
📣专栏地址:https://blog.csdn.net/newin2020/category_12903849.html
📚专栏简介:在这个专栏中,我将会分享后端开发面试中常见的面试题给大家~
❤️如果有收获的话,欢迎点赞👍收藏📁,您的支持就是我创作的最大动力💪

1. 编程语言特性相关(以 Java 为例)

题目: 请解释 Java 中的多态性,并给出一个简单的示例。

答案:

多态性是面向对象编程的一个重要特性,它允许不同的对象对同一消息做出不同的响应。Java 中的多态性主要通过继承和接口实现,具体表现为方法的重写和方法的重载。

以下是一个通过方法重写实现多态性的简单示例:

java">// 定义一个父类
class Animal {public void makeSound() {System.out.println("Animal makes a sound");}
}// 定义一个子类
class Dog extends Animal {@Overridepublic void makeSound() {System.out.println("Dog barks");}
}// 定义另一个子类
class Cat extends Animal {@Overridepublic void makeSound() {System.out.println("Cat meows");}
}public class PolymorphismExample {public static void main(String[] args) {Animal animal1 = new Dog();Animal animal2 = new Cat();animal1.makeSound();  // 输出: Dog barksanimal2.makeSound();  // 输出: Cat meows}
}

2. 缓存相关

题目: 请解释 Redis 中的缓存穿透、缓存击穿和缓存雪崩,并说明如何解决这些问题。

答案:

  • 缓存穿透:指客户端请求的数据在缓存和数据库中都不存在,这样每次请求都会直接打到数据库上,可能会导致数据库压力过大甚至崩溃。解决方法有:

    • 布隆过滤器:在访问缓存之前,先通过布隆过滤器判断数据是否可能存在,如果不存在则直接返回,避免访问数据库。

    • 缓存空值:当数据库中查询不到数据时,也将空值缓存起来,并设置一个较短的过期时间。

  • 缓存击穿:指某个热点数据在缓存中过期,此时大量请求同时访问该数据,这些请求会直接打到数据库上,导致数据库压力过大。解决方法有:

    • 设置热点数据永不过期:对于一些热点数据,可以不设置过期时间,或者使用后台线程定时更新缓存

    • 加互斥锁:当发现缓存过期时,先获取一个互斥锁,只有获取到锁的线程才能去数据库查询数据并更新缓存,其他线程等待缓存更新完成后再从缓存中获取数据。

  • 缓存雪崩:指大量缓存数据在同一时间过期,导致大量请求直接打到数据库上,引起数据库压力过大甚至崩溃。解决方法有:

    • 设置随机过期时间:为不同的缓存数据设置不同的过期时间,避免大量数据同时过期。
      使用多级缓存:例如同时使用 Redis 和本地缓存,当 Redis 缓存失效时,可以先从本地缓存中获取数据。

    • 限流和降级:在缓存雪崩发生时,对请求进行限流,或者对一些非核心业务进行降级处理,保证数据库的稳定运行。

3. 系统设计相关

题目: 设计一个简单的短链接服务系统,说明其主要组成部分和工作流程。

答案:

主要组成部分

  • URL 存储数据库:用于存储原始 URL 和对应的短链接信息,通常使用关系型数据库(如 MySQL)或非关系型数据库(如 Redis)。
  • 短链接生成器:负责将原始 URL 转换为短链接,一般使用哈希算法或自增 ID 结合 Base62 编码等方式生成短链接。
  • Web 服务器:接收用户的请求,处理短链接的生成和跳转逻辑。
  • 缓存系统:用于缓存短链接和原始 URL 的映射关系,提高系统的响应速度。

工作流程

  1. 生成短链接:用户提交原始 URL 到 Web 服务器,Web 服务器调用短链接生成器生成一个唯一的短链接,并将原始 URL 和短链接的映射关系存储到 URL 存储数据库中,同时将映射关系缓存缓存系统中。
  2. 短链接跳转:当用户访问短链接时,Web 服务器首先从缓存系统中查找对应的原始 URL,如果找到则直接重定向到原始 URL;如果缓存中不存在,则从 URL 存储数据库中查找,找到后将结果返回给用户并更新缓存系统。如果数据库中也不存在该短链接,则返回错误信息。

http://www.ppmy.cn/news/1576424.html

相关文章

SDN架构详解

目录 1)经典的IP网络-分布式网络 2)经典网络面临的问题 3)SDN起源 4)OpenFlow基本概念 5)Flow Table简介 6)SDN的网络架构 7)华为SDN网络架构 8)传统网络 vs SDN 9&#xf…

如何在docker中的mysql容器内执行命令与执行SQL文件

通过 docker ps -a 查询当前运行的容器,找到想执行命令的容器名称。 docker ps -a若想执行sql文件,则将sql文件放入当前文件夹下后将项目内的 SQL 文件拷贝到 mysql 容器内部的 root下。 sudo docker cp /root/enterprise.sql mysql:/root/然后进入 my…

Ubuntu下QT安装和调试的常见问题(二)__cannot__find__IGL

1、错误提示 2、参考链接 https://blog.csdn.net/AAA123524457/article/details/82668194 3、解决操作 运行命令:sudo apt install libgl1-mesa-dev Rebuild后通过了调试,以下是程序运行后呈现的效果,如图:

华为AP 4050DN-HD的FIT AP模式改为FAT AP,家用FAT基本配置

在某鱼买了两台华为AP 4050DN-HD , AP是二手的 , 在AC上上过线 , 所以就不能开机自选为FIP模式了 我没有AC无线控制器 , 就是买一个自己玩 , AP又是FIT瘦AP模式 ,所以我就想把AP的瘦AP模式改为FAT胖AP模式 1. 准备工作 1.1下载好对应软件,进入到 企业业务网站去下…

在 Centos7 上部署 ASP.NET 8.0 + YOLOv11 的踩坑实录

本文将详细记录我在CentOS 7上部署ASP.NET 8.0结合YOLOv11目标检测项目过程中遇到的问题及解决方案,旨在为有类似需求的开发者提供参考。 1. 背景 随着人工智能技术的迅猛发展,目标检测成为了众多应用场景中的核心技术之一。YOLO(You Only L…

【git】提交修改、回撤、回滚、Tag 操作讲解,与reset (--soft、--mixed、--hard) 的区别

Git 提交修改、回撤、回滚、Tag 操作详解 1. git commit --amend -m "message" 作用:修改最近一次提交的信息或内容。 适用场景: 提交后发现 commit message 写错了。提交后发现 少 add 了文件,想直接加进上一次提交。 示例 1&…

蓝桥杯刷题(Cows in a Skyscraper G,炮兵阵营)

[USACO12MAR]Cows in a Skyscraper G 题目描述 A little known fact about Bessie and friends is that they love stair climbing races. A better known fact is that cows really dont like going down stairs. So after the cows finish racing to the top of their favor…

Python 鼠标轨迹 - 防止游戏检测

一.简介 鼠标轨迹算法是一种模拟人类鼠标操作的程序,它能够模拟出自然而真实的鼠标移动路径。 鼠标轨迹算法的底层实现采用C/C语言,原因在于C/C提供了高性能的执行能力和直接访问操作系统底层资源的能力。 鼠标轨迹算法具有以下优势: 模拟…