前言:
现在IT界跳槽已成常态,跳槽,可能有以下原因:
- 技术达到瓶颈,无法在此公司有好的提升,前几年我感觉基本不会出现,至少我现在没出现。
- 实力与薪资不匹配。
- 和同事 领导不和,如果你在几家公司都这样,要自我检讨一下是不是自己的问题。
仅个人观点,其他诸如地域 情感 兴趣等个人原因不做讨论。
这也导致很多企业在用人时会比较在意员工的稳定性一般外包公司都会比较忙,相对来说,成长应该是比较快的,而你的工作性质偏业务,那么你要想清楚一个问题,以后你的发展轨迹是怎样的?是在技术方向越走越远呢,还是在管理方向发展呢?
一、 微服务架构专题(思维导图)
二、微服务是干什么的
我对于微服务最大的体会就是:对于云平台来说,如果元数据驱动的平台组件是骨骼,那么微服务和触发器就是串联骨骼的经络和血脉没有经络和血脉,一堆组件仅仅是静态的,不能变化,没有反馈,更何谈交互。而一个PaaS平台可以孵化无数个SaaS应用,每个应用都需要使用一套小服务来开发,而为了防止应用搭建复杂化和避免后期难以维护,所以每个服务运行在自己的进程中,并使用轻量级机制通信,通常是HTTP AP(Rest的方式,这就是为什么我能看到那些标签的存在)。好处体现在以下方面:
- 这些服务基于业务能力构建,并能够通过自动化部署机制来独立部署(体现在平台就是微服务站点部署和独立微服务站点部署)
- 这些服务可以使用不同的编程语言实现(只要实现结果,无所谓编程语言,这是我认为现在平台没有充分使用到微服务的地方,也可能是我平时使用其它语言的业务场景较少)
- 这些服务可以使用不同数据存储技术(“非结构化数据和结构化数据都可以按需存储”)
- 这些服务可以保持最低限度的集中式管理(这个厉害了,相当于接口不仅可以在一个项目里复用,甚至在不同项目间复用)
官方有个2pizza理论很有趣: 微 狭义来讲就是体积小、著名的"2 pizza 团队"很好的诠释了这一解释(2 pizza 团队最早是亚马逊 CEO Bezos提出来的,意思是说单个服务的设计,所有参与人从设计、开发、测试、运维所有人加起来 只需要2个披萨就够了 )。 而所谓服务,一定要区别于系统,服务一个或者一组相对较小且独立的功能单元,是用户可以感知最小功能集。
三、微服务的特性
- 每个微服务可独立运行在自己的进程里,一系列独立运行的微服务共同构建起了整个系统
- 每个服务为独立的业务开发,一个微服务一般完成某个特定的功能,比如:订单管理,用户管理等(我用于图书管理系统和工单中心)
- 微服务之间通过一些轻量级的通信机制进行通信,例如通过REST API或者RPC的方式进行调用(这就是Rest标签的由来吧,是一种通信机制)。
四、微服务的特点
- 易于开发和维护。由于微服务单个模块就相当于一个项目,开发这个模块我们就只需关心这个模块的逻辑即可,代码量和逻辑复杂度都会降低,从而易于开发和维护。(部署独立mrest站点,启动迅速,代码量小)
- 启动较快,这是相对单个微服务来讲的,相比于启动单体架构的整个项目,启动某个模块的服务速度明显是要快很多的。(回收应用程序池即可,不到1分钟搞定)
- 局部修改容易部署,在开发中发现了一个问题,如果是单体架构的话,就需要重新发布并启动整个项目,非常耗时间,但是微服务则不同,哪个模块出现了bug只需要解决那个模块的bug就可以了,解决完bug之后,只需要重启这个模块的服务即可,部署相对简单,不必重启整个项目从而大大节约时间。(有了bug直接hotfix这部分的ESB的interface)
- 技术栈不受限,比如订单微服务和电影微服务原来都是用java写的,现在我们想把电影微服务改成nodeJs技术,这是完全可以的,而且由于所关注的只是电影的逻辑而已,因此技术更换的成本也就会少很多。(虽然目前还没有接触到多语言技术扩展,但感觉这个很强)
- 按需伸缩,单体架构在想扩展某个模块的性能时不得不考虑到其它模块的性能会不会受影响,对于微服务来讲,完全不是问题,电影模块通过什么方式来提升性能不必考虑其它模块的情况。
五、微服务(Microservice)架构快速指南
1.微服务技术栈有哪些?
2.微服务架构的缺点是什么?
- 微服务架构可能带来过多的操作。
- 需要DevOps技巧
- 可能双倍的努力。
- 分布式系统可能复杂难以管理。
- 因为分布部署跟踪问题难。
- 当服务数量增加,管理复杂性增加。
3.微服务适合哪种情况?
当你需要支持桌面 web 移动 智能电视 可穿戴时都是可以的,甚至将来你可能不知道但需要支持的某种环境。
4.哪个公司或产品使用微服务架构?
大部分大型网站系统如Twitter, Netflix, Amazon 和 eBay都已经从传统整体型架构monolithic architecture迁移到微服务架构
5.微服务之间是如何独立通讯的?
这依赖需求,通过使用HTTP/REST,数据格式使用JSON 或 Protobuf(Binary protocol),通讯协议是自由的。
6.为什么现在每个人都在谈论微服务?
自从SOA面试15年来,随着RESTful web服务和JSON数据交换格式流行,简单快速建立一个可连接的服务已经越来越方便了。
六、dubbo应用及源码解读面试题
1. Dubbo telnet 命令能做什么?
2. Dubbo必须依赖的包有哪些?
3. Dubbo的管理控制台能做什么?
4. 说说 Dubbo 服务暴露的过程。
5. Dubbo 和 Dubbox 有什么区别?
6. 你还了解别的分布式框架吗?
7. Dubbo 能集成 Spring Boot 吗?
8. 在使用过程中都遇到了些什么问题?
9. 你读过 Dubbo 的源码吗?
10. 你觉得用 Dubbo 好还是 Spring Cloud 好?
七、springboot面试题
1. 如何重新加载Spring Boot上的更改,而无需重新启动服务器?
2. Spring Boot中的监视器是什么?
3. 如何在Spring Boot中禁用Actuator端点安全性?
4. 如何在自定义端口上运行Spring Boot应用程序?
5. 如何实现Spring Boot应用程序的安全性?
6. 如何集成Spring Boot和ActiveMQ?
7. 如何使用Spring Boot实现分页和排序?
8. 什么是Swagger?你用Spring Boot实现了它吗?
9. 如何使用Spring Boot实现异常处理?
10. 您使用了哪些starter maven依赖项?
八、docker虚拟化技术面试题
1. 如何批量删除或者停止运行的容器?
2. 如何查看镜像支持的环境变量?
3. 本地的镜像文件都存放在哪里
4. 构建Docker镜像应该遵循哪些原则?
5. 容器退出后,通过docker ps 命令查看不到,数据会丢失么?
6. 如何临时退出一个正在交互的容器的终端,而不终止它?
7. 很多应用容器都是默认后台运行的,怎么查看它们的输出和日志信息?
8. 使用docker port 命令映射容器的端口时,系统报错Error: No public port ‘80’ published for …,是什么意思?
9. 可以在一个容器中同时运行多个应用进程吗?
10. 如何控制容器占用系统资源(CPU,内存)的份额?
九、springcloud应用及源码解读面试题
1. springcloud如何实现服务的注册和发现
2. SpringCloud和Dubbo有什么区别?
3. springcloud断路器的作用
4. Spring Cloud 有了解多少?
5. 什么是Spring Cloud Bus?我们需要它吗?
6. 使用Spring Cloud有什么优势?
7. springcloud你是什么?
总结
上面提到的面试题我这边都整理成文档放在我新开通的公众号【风平浪静如码】里,海量Java相关文章,学习资料都会在里面更新,整理的资料也会放在里面。
觉得写的还不错的就点个赞,加个关注呗!点关注,不迷路,持续更新!!!