Java面试题直Docker-Redis
一、描述Linux常用命令(说10个)
cp:复制文件
ls:列出文件目录信息
cd:切换当前目录
mkdir:创建目录
rm:删除目录或文件
find:查找文件或目录
cat:浏览文件内容
more:显示一页内容
less:显示百分比
vi:文件编辑
grep:搜索信息
tar:压缩、解压
二、什么是Docker,Docker解决了哪些问题
Docker 是一个开源的应用容器引擎
简化程序、避免选择恐惧症、节省开支、持续交付和部署、更轻松的迁移
三、常见的Docker命令(镜像、容器、日志)
docker version :显示docker的版本信息
docker images : 显示所有镜像
docker search :搜索镜像名称
docker pull :拉取镜像命令
docker rmi :删除镜像
docker run:新建容器并启动
docker ps : 查看正在运行的容器
docker start 容器id #启动容器
docker restart 容器id #重启容器
docker stop 容器id #停止当前正在运行的容器
docker kill 容器id #强制停止当前容器
四、描述Dockerfile的常用指令(至少说3个)
FROM:指定你所使用的基础镜像
RUN:制作镜像过程中需要的执行命令
EXPOSE:设置暴露端口号
MAINTAINER:描述这个Dockerfile的作者信息
CMD:容器启动的时候执行的初始命令
ENV:设置容器内环境变量
ADD:复制命令,把本机的文件复制到镜像中
COPY:COPY的src部分只能是本地文件
五、Redis是什么?
Redis 是完全开源免费的,遵守BSD协议,是一个高性能(NOSQL)的key-value数据库,ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
六、NOSQL是什么,出现的目的和意义是什么?
NoSQL,泛指非关系型的数据库.
NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题
七、Redis的优点和缺点?
优点:
- 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
- 丰富的数据类型 – Redis支持的类型 String, Hash,List, , Set 及 Ordered Set 数据类型操作。
- 原子性 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。
- 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。
- 高速读写,redis使用自己实现的分离器,代码量很短,没有使用lock(MySQL),因此效率非常高。
缺点:
- 持久化。Redis直接将数据存储到内存中,要将数据保存到磁盘上,Redis可以使用两种方式实现持久化过程。定时快照(snapshot):每隔一段时间将整个数据库写到磁盘上,每次均是写全部数据,代价非常高。第二种方式基于语句追加(aof):只追踪变化的数据,但是追加的log可能过大,同时所有的操作均重新执行一遍,回复速度慢。
- 耗内存,占用内存过高。
八、Redis有哪些应用场景
企业级开发中:
可以用作数据库、缓存、热点数据(经常会被查询,但是不经常被修改或者删除的数据),和消息中间件等大部分功能。
缓存、排行榜、计数器、分布式会话、分布式锁、社交网络、最新列表、消息系统
九、Redis默认在什么情况下会进行持久化操作?
持久化存储是将 Redis 存储在内存中的数据存储在硬盘中,实现数据的永久保存。我们都知道 Redis 是一个基于内存的 nosql 数据库,内存存储很容易造成数据的丢失,因为当服务器关机等一些异常情况都会导致存储在内存中的数据丢失。
自动触发是在满足某些触发条件时候,redis主动进行持久化操作,不需要手动执行命令。自动触发的场景有如下:
(1).使用save相关配置,如redis.conf文件里设置的"save m n"表示m秒之内数据集存在n次修改时,自动触发rdb持久化。
(2).如果配置了主从,从节点执行全量复制操作,主节点自动触发生成RDB文件并发送给从节点。
(3).执行debug reload命令重新加载Redis时,也会自动触发。
(4).默认情况下执行shutdown关闭redis时,如果没有开启AOF持久化功能则自动执行bgsave。
使用save相关配置,执行debug reload命令重新加载Redis时,执行shutdown关闭redis时。
十、Redis内存维护策略?
Redis作为优秀的缓存中间件,而且是基于内存的,会存储大量的数据,即使采用了集群来扩容,也需要随时整理内存,防止内存溢出,保证性能。
两种维护策略:
一:为数据设置超时时间
二:采用LRU算法将不用的数据删除
LRU(least recently used 最新最近使用)是Redis唯一支持的回收方法。
十一、准备一个设计模式(除单例、工厂外)
代理模式概念:
- 代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。
- 客户类需要执行的是目标对象的目标方法,但是真正执行的是代理对象的代理方法,客户类对目标对象的访问是通过代理对象来实现的。当然,代理类与目标类需要实现同一个接口。