线程、数据库、算法、JVM、分布式、微服务、框架、Spring相关知识
一线互联网P7面试集锦+各种大厂面试集锦
学习笔记以及面试真题解析
============================================================================
开发小明看到测试提交的bug,说:程序在我机器上跑得好好的,怎么到你那就不行了呢?
测试小王看到运维小刘发的问题报告,说:程序在这边测试得好好的,怎么到客户那边就不行了呢?
这其实是软件开发的日常,软件开发的一大麻烦问题就是:环境配置。
一个项目要跑起来,需要大量程序的支持,包括:jdk、tomcat、mysql、redis、nginx等等… 每个程序的环境配置都可能不同,这就很容易导致:在你的机器可以运行,在他的机器上就跑不起来。
那怎么解决这个难题呢?
答案就是:容器化
容器化就是把程序包装起来放到容器中,需要的时候再将容器复制出来,这样容器中的程序环境配置就能保持一致,从根本上解决了环境配置不一致的问题。
想到容器化,有同学可能会想到我们前面使用过的虚拟机,虚拟机克隆后,里面的软件环境配置也是一样的。
虚拟机和容器的架构
可以看到虚拟机和容器最大的区别是:
虚拟机里面多了一个操作系统,而容器和宿主机共享操作系统,更加轻量级。
容器和虚拟机对比
| 特性 | 容器 | 虚拟机 |
| — | — | — |
| 启动时间 | 秒级 | 分钟级 |
| 硬盘使用 | 一般为MB | 一般为GB |
| 性能 | 接近原生 | 弱于原生 |
| 系统支持量 | 单机支持上千个容器 | 一般是几十个 |
容器在资源占用和性能方面比虚拟机更有优势,而虚拟机在系统功能和安全性方面要强于容器。
========================================================================
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。
Docker很像集装箱的运作系统,集装箱就是容器,里面就是我们需要的程序,这些集装箱彼此隔离,需要它们的时候,就从货轮上运过来,由码头工人装配到汽车、火车上,然后发往每个项目所在地。
重要概念:
-
Host 主机(运行Docker的服务器)
-
Daemon 守护进程(在后台执行Docker的操作)
-
Registry 仓库服务注册(远程服务器,保存大量仓库)
-
Repository 仓库(保存镜像文件的位置)
-
Image 镜像(保存进程或软件的文件)
-
Container 容器(镜像运行后的进程)
Docker采用C/S模式(客户端/服务器模式),主要操作有build(构建)、pull(拉取)、run(运行),如用户需要使用mysql,就通过客户端连接主机,主机中的守护进程就会到远程服务注册中拉取mysql,保存到主机中镜像文件中,然后对mysql镜像进行构建,构建完成的镜像就可以创建出mysql容器,运行中的mysql容器就可以为用户提供服务。
========================================================================
1、删除旧版本的docker
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
2、安装依赖包
yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
3、安装docker
yum install docker
4、启动docker
systemctl enable docker
systemctl start docker
5、查看安装结果
docker version
6、配置镜像
加速镜像下载,创建或修改 /etc/docker/daemon.json 文件,修改为如下形式
{
“registry-mirrors”: [
“https://registry.docker-cn.com”,
“http://hub-mirror.c.163.com”,
“https://docker.mirrors.ustc.edu.cn”
]
}
7、重启
systemctl restart docker
===========================================================================
常用Docker命令
docker images 查看镜像
docker search 镜像名称 搜索镜像
docker ps 查看容器
docker stop 容器id 停止容器
docker rm 容器id 删除容器
docker rmi 镜像id 删除镜像
docker run 镜像id 运行镜像
docker pull 镜像名 拉取镜像
docker build 镜像名 . 创建镜像
1) 抓取仓库
docker pull library/hello-world
2) 查看镜像
docker images
4) 运行镜像
docker run hello-world
=============================================================================
1)安装MySQL
docker pull mysql:5.7
2)运行MySQL镜像
docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql镜像ID
-p 后面的端口是本机端口,映射到docker中MySQL的3306端口,后面设置了root密码
-d 是后台运行
3)查看容器ID
docker ps
4)上传数据库脚本到Linux,然后将脚本复制到docker的root目录中
docker cp bookdb.sql 21db7dd6618e:\root
5)进入docker容器
docker exec -it 21db7dd6618e bash
6)进入MySQL
mysql -uroot -p123456
7)设置编码、创建数据库
set names utf8;
create database bookdb;
use bookdb;
8)导入sql脚本
source /root/bookdb.sql;
9)修改远程访问权限:
select host,user,plugin,authentication_string from mysql.user;
ALTER USER ‘root’@‘%’ IDENTIFIED WITH mysql_native_password BY ‘123456’;
flush privileges;
最后
这份《“java高分面试指南”-25分类227页1000+题50w+字解析》同样可分享给有需要的朋友,感兴趣的伙伴们可挑战一下自我,在不看答案解析的情况,测试测试自己的解题水平,这样也能达到事半功倍的效果!(好东西要大家一起看才香)
ALTER USER ‘root’@‘%’ IDENTIFIED WITH mysql_native_password BY ‘123456’;
flush privileges;
最后
这份《“java高分面试指南”-25分类227页1000+题50w+字解析》同样可分享给有需要的朋友,感兴趣的伙伴们可挑战一下自我,在不看答案解析的情况,测试测试自己的解题水平,这样也能达到事半功倍的效果!(好东西要大家一起看才香)
[外链图片转存中…(img-EHj6OemI-1715367751330)]
[外链图片转存中…(img-2689zUtO-1715367751331)]