Redis 面试题

1.什么是 Redis?

Redis is an open source (BSD licensed), in-memory data structure store used as a database, cache, message broker, and streaming engine.

Redis是一个开源的内存数据结构存储,被用作数据库、缓存、消息代理和流媒体引擎。

2.Redis的内存占用量是多少?

我们看几个例子(都是使用64位实例得到的。

  • 一个空的实例使用~3MB的内存。
  • 100万个小键->字符串值对使用~85MB的内存。
  • 100万个键->哈希值,代表一个有5个字段的对象,使用~160 MB的内存。

3.为什么Redis将其整个数据集保存在内存中?

在过去,Redis的开发者尝试了虚拟内存和其他系统来允许大于RAM的数据集,但最终我们很高兴能做好一件事:数据从内存中提供,磁盘用于存储。所以现在还没有计划为Redis创建一个磁盘上的后端。Redis是当前设计的结果。

4.你能将Redis与基于磁盘的数据库一起使用吗?

可以,一个常见的设计模式是在Redis中保存频繁写的小数据(以及你需要Redis数据结构以有效方式为你的问题建模的数据),而大块的数据保存到 SQL或最终一致的磁盘数据库。同样,有时Redis被用来在内存中获取存储在磁盘数据库中的相同数据子集的另一个副本。这看起来类似于缓存,但实际上是一个更高级的模型,因为通常Redis数据集与磁盘数据库数据集一起更新,而不是在缓存错过时刷新。

5.如何减少Redis的整体内存用量?

如果可以的话,使用Redis的32位实例。同时善用小的哈希值、列表、排序集和整数集,因为Redis能够在少数元素的特殊情况下以更紧凑的方式表示这些数据类型。

6.如果Redis的内存用完了会怎样?

Redis有内置的保护措施,允许用户设置内存使用的最大限制,使用配置文件中的maxmemory选项,对Redis可以使用的内存进行限制。如果达到这个限制,Redis将开始对写命令回复错误(但会继续接受只读命令)。

你也可以配置Redis在达到最大内存限制时驱逐键值。

继续阅读

(翻译)Spring Boot 面试题

1. 概述

自推出以来,Spring Boot一直是Spring生态系统中的一个重要角色。这个项目凭借其自动配置能力使我们的生活变得更加轻松。

在本教程中,我们将介绍一些在求职面试中可能出现的与Spring Boot有关的最常见问题。

2. 题目

Q1. 什么是Spring Boot,其主要特点是什么?

Spring Boot本质上是一个建立在Spring框架之上的快速应用开发框架。凭借其自动配置和嵌入式应用服务器支持,再加上其享有的大量文档和社区支持,Spring Boot是迄今为止Java生态系统中最受欢迎的技术之一。

这里有几个突出的特点。

  • 启动器 – 一组依赖性描述符,可以一次性包括相关的依赖性
  • 自动配置 – 一种基于classpath上的依赖关系自动配置应用程序的方法
  • 执行器 – 获得生产就绪的功能,如监控
  • 安全性
  • 记录

Q2. Spring和Spring Boot之间的区别是什么?

Spring框架提供了多种功能,使Web应用的开发更加容易。这些功能包括依赖性注入、数据绑定、面向方面的编程、数据访问等等。

多年来,Spring越来越复杂,这种应用所需的配置量可能令人生畏。这就是Spring Boot的用武之地–它使配置一个Spring应用程序变得轻而易举。

从本质上讲,Spring是没有主见的,而Spring Boot对平台和库有主见,让我们快速上手。

下面是Spring Boot带来的两个最重要的好处。

  • 根据它在classpath上找到的库自动配置应用程序
  • 提供生产中的应用程序常见的非功能特性,如安全或健康检查

请查看我们的其他教程,了解普通Spring和Spring Boot的详细比较

继续阅读

(翻译)Spring MVC 面试题

1. 简介

Spring MVC是Spring公司在Servlet API基础上建立的原创Web框架。它提供了模型-视图-控制器架构,可用于开发灵活的Web应用。

在本教程中,我们将重点讨论与之相关的问题,因为它经常是Spring开发者求职面试的一个话题。

关于Spring框架的更多问题,你可以查看我们面试问题系列中另一篇与Spring有关的文章

2.基础 Spring MVC 题

Q1. 为什么我们要使用Spring MVC?

Spring MVC实现了清晰的关注点分离,使我们能够轻松开发和单元测试我们的应用程序。

像如下概念:

  • Dispatcher Servlet
  • Controllers
  • View Resolvers
  • Views, Models
  • ModelAndView
  • Model and Session Attributes

是完全相互独立的,它们只负责一件事。

因此,MVC给了我们相当大的灵活性。它是基于接口的(有提供的实现类),我们可以通过使用自定义接口来配置框架的每一部分。

另一件重要的事情是,我们并没有被束缚在一个特定的视图技术上(例如JSP),而是可以选择我们最喜欢的技术。

另外,我们不只在Web应用开发中使用Spring MVC,在创建RESTful Web服务时也是如此。

继续阅读