微服务是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成。系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务。在所有情况下,每个任务代表着一个小的业务能力。
问题:微服务有什么用?
解答:解决单体应用规模增加时带来的问题。
微服务 vs 单体应用
- 单体应用将所有功能放在一个单一进程中
- 微服务把每个功能元素放进一个独立的服务中,在多个服务器复制,跨服务器统一管理
- 单体应用优点:稳定,性能,部署
- 单体应用缺点:中心化,耦合,学习成本,伸缩性,持续交付
- 适情况选择单体应用或微服务,不要为了技术而技术
分布式系统如何解释?
简单来说,分布式系统就是一群独立计算机集合共同对外提供服务,但是对于系统的用户来说,就像是一台计算机在提供服务一样。集中式系统集中式系统就是把所有的程序、功能都集中到一台主机上,从而往外提供服务的方式。比如,我们主机的PC电脑,或者手机,我们把各种软件都安装在一台机子上,当我需要什么功能,我就从这台机子上去获取。再比如,我们在学生时代做的课程设计或者开发时的小应用,我们把Web服务器、数据库等都会安装到一台电脑上。好处是,易于理解、方便维护,想要的东西我都放到了一个地方,东西好找啊。当然弊端也是显而易见的,如果这台机子崩了,或者硬盘坏了,那相当与整个系统就奔溃了,而且如果备份也是在这个硬盘上,那相当于招了灭顶之灾。
Web 编程基础
静态Web
概述:静态web内容由web服务器文件系统提供,路径为文件系统的路径,常见的静态web内容有,html,css,js,jpeg等
常用的静态web服务器
- Apache Http Server
- Nginx
- Micrsoft lls
静态web优化
- http资源变化,如 last-modified<--->if-modified-since
- http资源缓存,如ETag<---> if-None-Match
动态Web
概述: 与静态web不同,请求内容通过服务器计算而来的
流行的java web服务器
- servlet容器(tomcat,jetty)
- 非servlet容器(undertow)
动态技术/架构演变
- CGI (common gateway interface)
- Servlet (server applet)
- JSP (java server page)
- MVC (model - view - controller)
问题:mvc 的执行流程?
- 用户通过客户端发送HTTP请求,传至web服务器如tomcat
- servlet(实际是dispacherservlet)充当controller处理分发请求,传至model层
- model层包括了一系列的逻辑处理,包括数据库操作,最后返回一个java beans
- dispachersevlet将结果返回给服务器,服务器返回处理好的view给客户端
- 客户端渲染展示给用户Java学习圈子
模板引擎
velocity: apache 产品,现已不维护
jsp: 使用较广泛,编译流程:.jsp-->.java -->.class 。内部可嵌入java语法,导致耦合度较高
themleaf: 新模板引擎
freemarker: 较稳定的一类
REST理论基础
- 来源:来自于Roy Thomas Fielding 2000年的博士论文 - 《Architectural Styles and the Design of Network-based Software Architectures》
- 概念:REST = RESTful =Representational State Transfer,一种软件架构风格
- 架构属性:性能,可伸缩性,统一接口简化性,组件可修改性,可靠性等等
Springboot Rest 核心接口
定义相关
- @Controller
- @RestController
映射相关
- @RequestMapping(path={映射路径}, produces = {返回response的类型}, consumes={接收request的类型})
- @PathVariable
请求相关
- @RequestParam
- @RequestBody
- @RequestHeader
- @CookieValue
- RequestEntity
响应相关
- @ResponseBody
- ResponseEntity
接口默认返回xml只需添加maven节点
image.png
Servlet 的在web中应用
什么是servlet?
是一种基于java技术的web组件,由容器管理,用于生成动态内容,由java web 服务器加载执行
什么是servlet容器?
Servlet 容器,有时候也称作为 Servlet 引擎,作为Web服务器或应用服务器的一部分。通过请求和响应对话,提供Web 客户端与 Servlets 交互的能力。容器管理Servlets实例以及它们的生命周期。Java学习圈子
Servlet 历史发展如何?
1997年六月,Servlet 1.0 版本发行,最新版本 Servlet 4.0 处于研发状态。
Servlet生命周期
- 初始化:当容器第一次执行时,servlet### init(servletConfig) 方法执行
- 请求处理:Http请求到达容器时,servlet### service(ServletRequest req,ServletResponse rep)方法执行
- 销毁:当容器关闭时,容器将会调用Servlet### destroy() 方法被执行,销毁当前Servlet
Fileter生命周期
- 初始化:当容器启动时,Filter#init(FilterConfig)方法被执行,初始化当前Filter
- 请求处理:当http请求到达容器是,Filter#doFilter(ServletRequest,ServletResponse,FilterChain) 方法被执行,可用来拦截请求,所以会在servlet请求处理之前调用
- 销毁: 当容器关闭时,容器将会调用Filter#destroy 方法被执行,销毁当前Filter
Listener 生命周期
- 监听请求:当监听到Http请求时,Listener## requestInitialized(ServletRequestEvent sre)方法执行一次
- 销毁:当请求执行完毕,并返回结果时,Listener## requestDestroyed(ServletRequestEvent sre) 执行一次
Http请求生命周期大致为:
- Listner--> requestInitialized 方法
- Filter --> init 初始化方法
- Filter --> doFilte 处理方法
- Servlet --> init 初始化方法
- servlet --> service 方法
- listener --> destroy 方法
粉丝福利
十年开发经验,对微服务的学习总结 十年开发经验,对微服务的学习总结上图中的资料都是我精心录制视频,感兴趣的可以加入我的Java学习圈子 免费获取。希望能够在你接下来即将应对的的面试过程中能够尽到一份绵薄之力。
网友评论