本文主要是介绍原来SqlSession只是个甩手掌柜?看完直接跪服,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
## 容器化时代来了
虚拟化技术已经走过了三个时代,没有容器化技术的演进就不会有 Docker 技术的诞生。
![](http://www.www.zyiz.net/i/li/?n=2&i=images/20210630/1625058217942698.jpg)
(1)物理机时代:多个应用程序可能会跑在一台机器上。
![](http://www.www.zyiz.net/i/li/?n=2&i=images/20210630/1625058218543848.jpg)
(2)虚拟机时代:一台物理机器安装多个虚拟机(VM),一个虚拟机跑多个程序。
![](http://www.www.zyiz.net/i/li/?n=2&i=images/20210630/1625058218845345.jpg)
(3)容器化时代:一台物理机安装多个容器实例(container),一个容器跑多个程序。
![](http://www.www.zyiz.net/i/li/?n=2&i=images/20210630/1625058218100114.jpg)
容器化解决了软件开发过程中一个令人非常头疼的问题,用一段对话描述:
> 测试人员:你这个功能有问题。
>
> 开发人员:我本地是好的啊。
开发人员编写代码,在自己本地环境测试完成后,将代码部署到测试或生产环境中,经常会遇到各种各样的问题。明明本地完美运行的代码为什么部署后出现很多 bug,原因有很多:不同的操作系统、不同的依赖库等,总结一句话就是因为本地环境和远程环境不一致。
容器化技术正好解决了这一关键问题,它将软件程序和运行的基础环境分开。开发人员编码完成后将程序打包到一个容器镜像中,镜像中详细列出了所依赖的环境,在不同的容器中运行标准化的镜像,从根本上解决了环境不一致的问题。
## 容器化技术的尖刀武器
![](http://www.www.zyiz.net/i/li/?n=2&i=images/20210630/1625058219850506.jpg)
* **可移植性**:不依赖具体的操作系统或云平台,比如在阿里云或腾讯云直接随意迁移。
* **占地小**:容器只需要其应用程序以及它需要运行的所有容器和库的依赖清单,不需要将所有的依赖库都打包在一起。
* **共享 bin 和 lib**:不同的容器可以共享 bin 和 lib,进一步节省了空间。
## Docker 横空出世
2010年一位年轻小伙子在美国旧金山成立了一家名叫【dotCloud】的公司, 开发了 Docker的核心技术,从此开启了容器技术的时代。
![](http://www.www.zyiz.net/i/li/?n=2&i=images/20210630/1625058220111000.jpg)
后面 dotCloud 公司将自己的容器技术进行了简化和标准化,取名为 Docker,就是大家熟悉的鲸鱼 logo。
![](http://www.www.zyiz.net/i/li/?n=2&i=images/20210630/1625058220280272.jpg)
2013年dotCloud 公司宣布将 Docker 开源,随着越来越多的工程师发现了它的优点, Docker 的人气迅速攀升,成为当时最火爆的开源技术之一。
当前有30%以上的企业在其AWS环境中使用Docker,并且这个数字还在继续增长。
![](http://www.www.zyiz.net/i/li/?n=2&i=images/20210630/1625058220927696.jpg)
## Docker怎么用?
其实大多数人谈论 Docker 时说的是 Docker Engine,这只是一个构建和运行的容器。
在运行容器前需要编写Docker File,通过 dockerFile 生成镜像,然后才能运行 Docker 容器。
Docker File 定义了运行镜像(image)所需的所有内容,包括操作系统和软件安装位置。一般情况下都不需要从头开始编写 Docker File,在 Docker Hub 中有来自世界各地的工程师编写好的镜像,你可以基于此修改。
## 编排系统的需求催生 k8s
尽管Docker为容器化的应用程序提供了开放标准,但随着容器越来越多出现了一系列新问题:
* 如何协调和调度这些容器?
* 如何在升级应用程序时不会中断服务?
* 如何监视应用程序的运行状况?
* 如何批量重新启动容器里的程序?
解决这些问题需要容器编排技术,可以将众多机器抽象,对外呈现出一台超大机器。现在业界比较流行的有:k8s、Mesos、Docker Swarm。
在业务发展初期只有几个微服务,这时用 Docker 就足够了,但随着业务规模逐渐扩大,容器越来越多,运维人员的工作越来越复杂,这个时候就需要编排系统解救opers。
![](http://www.www.zyiz.net/i/li/?n=2&i=images/20210630/1625058220796670.jpg)
一个成熟的容器编排系统需要具备以下能力:
* 处理大量的容器和用户
* 负载均衡
* 鉴权和安全性
* 管理服务通信
* 多平台部署
## k8s与Docker Swarm江湖恩怨
![](http://www.www.zyiz.net/i/li/?n=2&i=images/20210630/1625058221114313.jpg)
如果你非要拿 Docker 和 k8s 进行比较,其实你更应该拿 Docker Swarm 和 k8s 比较。
Docker Swarm 是 Docker 自家针对集群化部署管理的解决方案,优点很明显,可以更紧密集成到 Docker 生态系统中。
虽说 Swarm 是 Docker 亲儿子,但依旧没有 k8s 流行,不流行很大程度是因为商业、生态的原因,不多解释。
## k8s是做什么用的?
K8s是Google研发的容器协调器,已捐赠给CNCF,现已开源。
Google 利用在容器管理多年的经验和专业知识推出了 k8s,主要用于自动化部署应用程序容器,可以支持众多容器化工具包括现在非常流行的Docker。
目前k8s 是容器编排市场的领导者,开源并公布了一系列标准化方法,主流的公有云平台都宣布支持。
一流的厂商都在抢占标准的制高点,一堆小厂商跟着一起玩,这就叫生态了。国内的大厂商都在干嘛呢?抢社区团购市场,玩资本游戏,哎?!
## K8s 架构和组件
k8s 由众多组件组成,组件间通过 API 互相通信,归纳起来主要分为三个部分:
* controller manager
* nodes
* pods
![](http://www.www.zyiz.net/i/li/?n=2&i=images/20210630/1625058221900566.jpg)
* **Controller Manager**,即控制平面,用于调度程序以及节点状态检测。
* **Nodes**,构成了Kubernetes集群的集体计算能力,实际部署容器运行的地方。
* **Pods**,Kubernetes集群中资源的最小单位。
## Docker与k8s 难舍难分
Docker 和 k8s 在业界非常流行,都已经是事实上的标准。
Docker 是用于构建、分发、运行容器的平台和工具。
而 k8s 实际上是一个使用 Docker 容器进行编排的系统,主要围绕 pods 进行工作。Pods 是 k8s 生态中最小的调度单位,可以包含一个或多个容器。
Docker 和 k8s 是根本上不同的技术,两者可以很好的协同工作。
## 开发实践,灵魂追问
**(1)没有 k8s 可以使用 docker 吗?**
可以。实际上一些小型公司,在业务不太复杂的情况下都是直接使用 Docker。尽管 k8s 有很多好处,但是众所周知它非常复杂,业务比较简单可以放弃使用 k8s。
**(2)没有 Docker 可以使用 k8s 吗?**
k8s 只是一个容器编排器,没有容器拿什么编排?!
k8s 经常与 Docker 进行搭配使用,但是也可以使用其他容器,如RunC、Containerted 等。
**(3)Docker Swarm 和 k8s 怎么选?**
选 k8s。2019年底Docker Enterprise已经出售给Mirantis,Mirantis声明要逐步淘汰Docker Swarm,后续会将 k8s 作为默认编排工具。
# 最后的内容
在开头跟大家分享的时候我就说,面试我是没有做好准备的,全靠平时的积累,确实有点临时抱佛脚了,以至于我自己还是挺懊恼的。(准备好了或许可以拿个40k,没做准备只有30k+,你们懂那种感觉吗)
**如何准备面试?**
**1、前期铺垫(技术沉积)**
程序员面试其实是对于技术的一次摸底考试,你的技术牛逼,那你就是大爷。大厂对于技术的要求主要体现在:基础,原理,深入研究源码,广度,实战五个方面,也只有将原理理论结合实战才能把技术点吃透。
下面是我会看的一些资料笔记,希望能帮助大家由浅入深,由点到面的学习Java,应对大厂面试官的灵魂追问,**有需要的话就戳这里:[蓝色传送门](https://docs.qq.com/doc/DSmxTbFJ1cmN1R2dB)打包带走吧。**
> 这部分内容过多,小编只贴出部分内容展示给大家了,见谅见谅!
* Java程序员必看《Java开发核心笔记(华山版)》
![](http://www.www.zyiz.net/i/li/?n=2&i=images/20210630/1625058222690982.jpg)
* Redis学习笔记
![](http://www.www.zyiz.net/i/li/?n=2&i=images/20210630/1625058224175970.jpg)
* Java并发编程学习笔记
四部分,详细拆分并发编程——并发编程+模式篇+应用篇+原理篇
![](http://www.www.zyiz.net/i/li/?n=2&i=images/20210630/1625058256768198.jpg)
* Java程序员必看书籍《深入理解 ava虚拟机第3版》(pdf版)
![](http://www.www.zyiz.net/i/li/?n=2&i=images/20210630/1625058265647490.jpg)
* 大厂面试必问——数据结构与算法汇集笔记
![](http://www.www.zyiz.net/i/li/?n=2&i=images/20210630/1625058300615609.jpg)
其他像Spring,SpringBoot,SpringCloud,SpringCloudAlibaba,Dubbo,Zookeeper,Kafka,RocketMQ,RabbitMQ,Netty,MySQL,Docker,K8s等等我都整理好,这里就不一一展示了。
![](http://www.www.zyiz.net/i/li/?n=2&i=images/20210630/1625058301407182.jpg)
**2、狂刷面试题**
技术主要是体现在平时的积累实用,面试前准备两个月的时间再好好复习一遍,紧接着就可以刷面试题了,下面这些面试题都是小编精心整理的,贴给大家看看。
①大厂高频45道笔试题(智商题)
![](http://www.www.zyiz.net/i/li/?n=2&i=images/20210630/1625058303664709.jpg)
②BAT大厂面试总结(部分内容截图)
![](https://upload-images.jianshu.io/upload_images/22932333-c067cdeac6b9985a?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![](https://upload-images.jianshu.io/upload_images/22932333-63031aa8b29de8da?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
③面试总结
![](http://www.www.zyiz.net/i/li/?n=2&i=images/20210630/1625058360191761.jpg)
![](http://www.www.zyiz.net/i/li/?n=2&i=images/20210630/1625058362272953.jpg)
**3、结合实际,修改简历**
程序员的简历一定要多下一些功夫,尤其是对一些字眼要再三斟酌,如“精通、熟悉、了解”这三者的区别一定要区分清楚,否则就是在给自己挖坑了。当然不会包装,我可以将我的简历给你参考参考,如果还不够,那下面这些简历模板任你挑选:
![](http://www.www.zyiz.net/i/li/?n=2&i=images/20210630/1625058362421651.jpg)
以上分享,希望大家可以在金三银四跳槽季找到一份好工作,但千万也记住,技术一定是平时工作种累计或者自学(或报班跟着老师学)通过实战累计的,千万不要临时抱佛脚。
另外,面试中遇到不会的问题不妨尝试讲讲自己的思路,因为有些问题不是考察我们的编程能力,而是逻辑思维表达能力;最后平时要进行自我分析与评价,做好职业规划,不断摸索,提高自己的编程能力和抽象思维能力。
**以上文章中,提及到的所有的笔记内容、面试题等资料,均可以免费分享给大家学习,有需要的话就[戳这里打包带走](https://docs.qq.com/doc/DSmxTbFJ1cmN1R2dB)吧。**
这篇关于原来SqlSession只是个甩手掌柜?看完直接跪服的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!