面试-Docker
Docker常见命令
问:Docker常见命令
答:
1. docker ps:查看运行中的容器
2. docker ps -a:查看所有容器包括停止了的
3. docker pull xxx:下载容器xxxx
4. docker start xxx:启动容器xxx
5. docker stop xxx:停止容器xxx
6. docker restart xxx:重启容器xxx
答:
1. docker ps:查看运行中的容器
2. docker ps -a:查看所有容器包括停止了的
3. docker pull xxx:下载容器xxxx
4. docker start xxx:启动容器xxx
5. docker stop xxx:停止容器xxx
6. docker restart xxx:重启容器xxx
答:
1. cd:切换目录
2. ls:查看文件
3. tail -f:实时看日志
4. vim:修改配置文件
5. grep:过滤日志关键字
6. jps、kill:查看、杀死Java进程
7. netstat:查看端口
8. tar:压缩解压
9. java -jar xxx.jar:运行jar包
平时用cd、ls操作文件、vim改配置、tail -f实时看日志、grep查报错、netstat看端口、kill杀进程、运行jar包用java -jar、打包解压用tar。
答:
1. fanout 广播:群发所有队列
2. direct 直连:精准匹配
3. topic 主题:模糊通配匹配
答:
1. 确保消息到RabbitMQ:开启发送确认机制,保证消息成功到达
2. 确保消息路由到正确的队列:路由失败通知
3. 确保消息在队列正确的存储:交换器、队列、消息都需要持久化
4. 确保消息从队列中正确的投递到消费者:手动确认,交给消费者自己来确认
答:使用对称加密(加密和解密的密钥相同)或者非对称加密(公有密钥加密,私有密钥解密),给前端一个公钥让他把数据加密后传到后台,后台负责解密后处理数据。
答:
1. 使用了一些设计模式
2. 解决线上BUG:CPU飙高、内存泄露、线程死锁
3. 调优:慢接口、慢SQL、缓存方案
4. 组件封装:分布式锁、接口幂等、分布式事务
答:
1. Byte(1)
2. Short(2)
3. Int(4)
4. Long(8)
5. Float(4)
6. Double(8)
7. Char(2)
8. Boolean(1)
答:JVM内存结构主要分为堆内存、方法区和栈。
1. 堆内存是JVM中最大的一块内存地址。所有new出来的对象都存储在该区域。
2. 栈就是暂存数据的地方,栈中只保存基础数据类型的对象和自定义对象的引用,每个栈中的数据都是私有的,其它栈不能访问。
3. 方法区存放了要加载的类的信息如类名、修饰符、静态变量、构造函数等
答:
1. 一级缓存是MyBatis默认开启的缓存机制,它是指在同一个SqlSession内的缓存。当进行相同的查询时,如果该查询的结果已经在当前SqlSession的本地缓存中存在,则直接从缓存中获取结果,而不再去数据库查询。本地缓存的作用域是SqlSession,当SqlSession关闭时,本地缓存也会被清空。
2. 二级缓存是指在SqlSessionFactory层面的缓存,它可以被多个SqlSession共享。当多个SqlSession执行相同的查询时,如果查询结果已经存在于二级缓存中,则直接从缓存中获取结果,而不会再去数据库查询。二级缓存的作用域是SqlSessionFactory,在整个应用的生命周期内有效。需要注意的是,二级缓存需要在MyBatis的配置文件中明确地配置开启。
答:索引(index)是帮助数据库高效获取数据的数据结构。MySQL数据库默认采用的是B+Tree的数据结构。其所有的数据都存储在叶子节点,非叶子节点仅用于索引数据。叶子节点形成了一个双向链表,便于数据的排序及区间范围查询。
-- 创建索引语句
CREATE INDEX 索引名 ON 表名(列名1, 列名2...);
-- 创建表的时候加索引
CREATE TABLE 表名 (
列名1 数据类型,
列名2 数据类型,
列名3 数据类型,
-- 唯一索引
UNIQUE KEY 索引名 (列名2),
-- 普通索引(KEY和INDEX 等价,KEY更简洁)
KEY 索引名 (列名2)
);
答:Redis是一个基于Key-Value结构存储的非关系型数据库。数据类型有String、List、Set、Hash、SortedSte有序集合。其基于内存存储速度很快。使用场景有缓存、分布式锁、保存token、消息队列、延迟队列等