SpringBoot基础学习之初识Springboot和微服务

前言

小伙伴们,大家好,我是狂奔の蜗牛rz,当然你们可以叫我蜗牛君,我是一个练习Java半年时间的小菜鸟,同时还有一个伟大的梦想,那就是有朝一日,成为一个优秀的Java架构师。
这个SpringBoot基础学习系列用来记录我学习SpringBoot框架基础知识的全过程 (这个系列是参照B站狂神的SpringBoot最新教程来写的,由于是之前整理的,但当时没有发布出来,所以有些地方可能有错误,希望大家能够及时指正!)
之后我将会以一天一更的速度更新这个系列,还没有学习SpringBoot的小伙伴可以参照我的博客学习一下;当然学习过的小伙伴,也可以顺便跟我一起复习一下基础。
最后,希望能够和大家一同进步吧!加油吧!少年们!

1.微服务阶段

Springboot系列基础学习的第一站便是了解微服务,因为学习了SpringBoot,我们就正式步入微服务的学习历程了;在了解微服务前,先和大家一同回顾一下之前学习的知识,以及这个阶段的学习路线计划!

1.1 知识回顾和学习路线

1.1.1 知识回顾

JavaSE:OOP

MySQL:持久化

HTML+CSS+JS+jQuery+框架:视图,框架不熟练,CSS不好

JavaWeb:独立开发MVC三层架构的网站了 (原始)

SSM:框架简化了我们的开发流程,配置也开始较为复杂

War:TomCat运行

Spring再简化:SpringBoot-jar;内嵌TomCat;微服务架构

服务器越来越多:SpringCloud

1.1.2 学习路线

SpringBoot基础学习之初识Springboot和微服务_第1张图片

怎么样,看完这个学习路线,你是否对微服务阶段的学习有了一个大致了解,对自己完成微服务阶段的学习是否充满了信心,奈何本人没文化,送大家一句可能已经听烂的、著名唐代大诗人李白的诗句:乘风破浪会有时,直挂云帆济沧海!

1.2 回忆Spring

1.2.1 什么是Spring?

Spring是一个(由悉尼音乐博士Rod Johson提出的,于2003年兴起的为解决企业级应用开发的复杂性而创建的,为简化开发而生的),以IOC (控制反转) 和AOP (面向切面编程) 为核心的轻量级的 (Java开发的开源) 框架

1.2.2 Spring是如何简化Java开发的

为了降低Java开发的复杂性,Spring采用了以下4种关键策略

  • 基于POJO (Plain Odinary Java Object简单Java对象】) 的轻量级和最小入侵性编程
  • 通过IOC (控制反转),DI (注入依赖) 和面向接口实现松耦合
  • 基于切面 (AOP【面向切面编程】) 和惯例进行声明式编程
  • 通过切面和模板减少样式代码

蜗牛君,蜗牛君,你这铺垫也太长了,怎么还没到重点,你是不是在水博客呀?啊这,难道才第一篇,我就开始水啦?不要急,不要急,我这不是 为对学习路线迷茫,或者已经忘记Spring框架的小伙伴们考虑一下吗?
下面就到正题啦,接下来登场的就是今天的主角,SpringBoot框架,一个被Spring家族寄予厚望的新生代框架,一经推出,就受到了大家的称赞和广泛使用!

1.3 SpringBoot初识

1.3.1 什么是SpringBoot?

  • 基于Spring4.0设计,不仅继承了Spring框架原有的优秀特性
  • 而且还通过简化配置来进一步简化了Spring应用的整个搭建和开发过程
  • 通过集成大量的框架使得依赖包的版本冲突,以及引用的不稳定性等问题得到了很好的解决

1.3.2 SpringBoot特点

  • 可以创建独立的Spring应用程序,并且基于其Maven和Gradle插件,可以创建可执行的JARs和WARs
  • 内嵌Tomcat或Jetty等Servlet容器
  • 提供自动配置的"starter"项目对象模型(POMS)以简化Maven配置
  • 尽可能自动配置Spring容器
  • 提供准备好的特征,如指标、健康检查和外部化配置
  • 绝对没有代码生成,不需要XML配置

1.3.3 重要策略

1.开箱即用 (Out of box)

开箱即用 (Out of box):指在开发过程中,通过在Maven项目的pom文件中添加相关依赖包,然后使用对用注解来代替繁琐的XML配置文件以管理对象的生命周期

作用:使得开发人员摆脱了复杂的配置工作以及依赖的管理工作,更加专注于业务逻辑

2.约定优于配置

约定优于配置 (Convention over configuration):是一种由SpringBoot本身来配置目标结构,由开发者在结构中添加信息的软件设计范式

优点:减少了大量的XML配置,并且可以将代码编译、测试和打包等工作自动化

缺点:降低了部分灵活性,降低了BUG定位的复杂性

1.3.4 知识扩充

在学习微服务之前,为了缓和一下气氛,给大家讲个有关编程的题外话,记得蜗牛君前段时间看到央视的一个新闻报导,说的内容就是21世纪的新星农民工是"码农"。

很多初学编程的小伙伴可能对"码农"这个名词比较陌生,那到底啥是码农呢?

哈哈,其实字面意思翻译过来就是敲代码的农民,那么"码农"和程序员到底有什么区别呢?

真正的"程序" = 数据结构 + 算法 (集合框架):这是程序员

我们的"程序" = 面向对象 + 框架:这是码农

说白了就是只会敲代码和使用框架的就是码农 (啊,这说的不就是我们吗?),而只有熟练的使用数据结构和算法,这才是真正的程序员。当然,这也不是在贬低"码农",这其实就是在告诉大家一件事情,数据结构和算法,是决定一个程序员深度和高度的关键。


所以,我们的学习目标也应该是朝这个方向发展和进步!加油吧!编程人!

1.4 微服务

1.4.1 什么是微服务?

1.维基百科定义

  • 一种软件开发技术–面向服务的体系结构 (SOA) 架构样式的一种变体
  • 将应用程序构造为一组松散耦合的服务
  • 微服务体系结构中,服务细粒度的协议轻量级的

2.简单理解

  • 微服务 (或微服务架构) 是一种云原生架构方法 (或者是一种架构风格)

  • 其中单个应用程序由许多松散耦合且可独立部署的较小组件或者服务组成

要说起微服务架构,咱得先得了解一下单体应用架构,那什么是单体应用架构嘞,请大家往下看!

1.4.2 单体应用架构

1.什么是单体应用架构?

所谓单体应用架构 (All In One) 是指,将一个应用服务中的所有应用服务都封装在一个应用中

无论是ERP (Enterprise Resource Planning企业资源计划】)、CRM (Customer Relationship Management客户关系管理】),都把数据库访问,Web访问等等,各个功能放到一个war包内

2.单体应用架构的优缺点

优点

  • 易于开发和测试,也十分方便部署
  • 需要拓展时,只需要将war包复制多份,然后放到多个服务器上,在做个负载均衡就可以了

缺点

  • 哪怕是修改了一个非常小的地方,都需要停掉整个服务,重新打包、部署这个应用的war包
  • 特别是对于一个大型应用,不可能把所有的内容都放在一个应用里面,如何维护、如何分工合作都是问题

1.4.3 知识扩充

MVC 三层架构 --> MVVM 微服务架构

业务:Service,UserService :模块

SpringMVC :Controller :提供接口

1.4.4 微服务架构

1.发展结构图

SpringBoot基础学习之初识Springboot和微服务_第2张图片

微服务其实就是把业务拆分,拆分成模块,然后进行组合

2.All in One架构方式

  • All in One架构方式,先把所有的功能单元放在一个应用里,再把整个应用部署到服务器上
  • 如果负载能力不行,将整个应用进行水平复制,进行扩展,然后再进行负载均衡

3.微服务架构

概念

  • 所谓微服务架构,就是打破之前All in One的架构方式,把每个功能元素独立出来
  • 把独立出来的功能元素的动态组合,需要的功能元素才拿来组合,需要多一些时,可以整合多个功能元素,所以微服务架构是对功能元素进行复制,而没有对整个应用进行复制

好处

  • 节省了调用资源
  • 每个功能元素的服务都是一个可替换的、可独立升级的软件代码

4.案例说明

用户下单:Controller 耗时1秒

消息队列:由于不可能让用户等待10秒,因此需要使用消息队列做异步请求

仓库冻结:资金冻结;验证:购买成功,仓库数量减少,仓库解冻,资金解冻 耗时10秒

软件设计原则:高内聚,低耦合

1.4.5 如何构建微服务

1.构建微服务

一个大型系统的微服务架构,就像一个复杂交织的神经网络,每一个神经元就是一个功能元素,它们各自完成自己的功能,然后通过http相互请求调用

比如一个电商系统,查缓存、连接数据库、浏览页面、结账、支付等服务都是一个个独立的功能服务,都被微化了,它们作为一个个微服务共同构建了一个庞大的系统

2.构建微服务优缺点

优点:如果修改其中一个功能,只需要更新升级其中一个功能服务单元即可

缺点:但是这种庞大的系统架构给部署和运维带来很大难度

3.Spring分布式服务

Spring为我们带来了构建的大型分布式微服务的全套、全程产品

  • 构建一个个功能独立的微服务应用单元,使用SpringBoot可以帮助我们快速构建一个应用
  • 大型分布式网络服务的调用,这部分由SpringCloud来完成,实现分布式
  • 在分布式中间,进行流式数据计算、批处理,有Spring Cloud Data Flow
  • Spring提供了整个从开始构建应用到大型分布式应用全流程方案

SpringBoot基础学习之初识Springboot和微服务_第3张图片

  • API Gateway:API网关
  • breaker dashboard: 服务熔断机制
  • config dashboard:服务云端配置
  • microservices:微服务
  • service registry:服务注册
  • distributed tracing:分布式追踪
  • message broker:消息代理
  • databases:数据库

4.知识拓展

最后再跟大家聊点别的,现在正值金九银十招聘季,想必很多大四的或者准备跳槽的小伙伴们都在准备秋招吧,或者有一些小伙伴已经成功拿到自己心仪的offer啦!

蜗牛君目前是大四,最近也是正在找实习的工作,在不断的笔试和面试洗礼中,蜗牛君屡战屡败,屡败屡战,但最终也是成功拿到了三家中型公司的offer。因为不是什么大厂,所以这里我就不说名字啦,但是在面试过程中也收获了很多经验教训,接下来跟大家聊一聊一些有关面试的小技巧吧!

  • 这里笔试我就不多说了,一般都是该招聘岗位的一些基础知识,我当时应聘的是Java开发实习生,所有考的都是Java基础方面的知识,最后可能还有几道算法题,如果不是面大厂,它也不会出很难的算法题,就是一些相对简单,考查你基础知识的算法题

一般面试的流程也是首先自我介绍,然后你回答面试官的问题,最后结束前你再向面试官咨询薪资和工作和相关问题

自我介绍

  • 蜗牛君其实是个社恐,第一次面试是线上视频面试,这也是我人生第一次面试,当时就挺紧张的,自我介绍也是说的不够好 (没办法,社恐人克服这个问题的方法就是多练习吧,你可以先把自我介绍的内容想好,然后对着镜子介绍,说的多了自然就不紧张了!)
  • 如果有的小伙伴不知道要说什么,我就给大家分享一下我最近的面试总结下来的自我介绍流程:

自我介绍其实就是首先介绍一下自己的名字,然后介绍自己的所学专业 (如果你的大学不错的话,可以提一下自己就读的院校),接着介绍你在校所学的主要课程,然后是想要应聘的工作岗位,当然,你也可以跟面试官聊一聊自己的爱好啥的,最好是跟你这个专业有关的爱好 (不要说自己喜欢打王者或者吃鸡啥的,这可不能算爱好,也不是你的加分项哦!)

回答问题

如果是技术面的话,这个流程就是经典的你问我答环节,面试官会向你提问一些跟你本专业或者应聘岗位有关的专业知识。

由于是校招,所以面试官重点考查你的是其实基础知识,不会问比较深入或者刁钻的问题 (当然并不是说这些就不用看了,像一些底层原理以及源码,这些平时还是要多啃一啃的,不仅有利于对某些比较抽象的知识的理解,同时也是我们能够谈薪的资本,这个能够让面试官看到你的知识广度和深度),像框架源码和项目经验这些都是加分项,如果提到了就跟面试官多聊一聊!

还有一点要注意的就是,这个其实很多面试小白会经常犯的错误 (当然蜗牛君在第一次面试时也犯了同样的错误):

那就是在跟面试官技术面时,很多小伙伴们表现的好像是警察在审讯犯人一样,或者是老师在提问学生的感觉,往往都是面试官问一句,你回答一句,然后就没有了,不舍得做一些扩充 (是不是某些小伙伴就是这样的,当然蜗牛君第一次面试也是这样),但是这样不仅会让气氛变得很尴尬,而且我们也会更加紧张,同时也不能给面试官留下深刻印象。

那正确的做法是什么呢?我们先来聊一聊什么才是一场好的面试?

其实一场好的面试,应该是面试官负责引导,而你是面试的主导,而不是让面试官主导这场面试,如果这样的话,一场面试下来,面试官说的话可能比你还要多,比如面试官的说话时间占了面试时间的60%,而你只占了40%,你可以认为这是一场非常失败的面试。如果一场面试下来,你的说话时间占了80%,而面试官只占了20%,这就是一场非常成功的面试!

正确的做法如下:

比如面试官在问了一个很简单的问题时,比如面向对象的三大特征是什么?很多小伙伴都知道,不就是封装、继承和多态吗?没什么难度,但是,面试官在问完这个问题后,我们就应该想到他下一步会问什么?大概是封装、继承和多态的具体解释了。
这时,你可以主动出击,先发制人,对面试官说,您好,面试官,我可以简单解释一下我对封装、继承和多态的理解吗?那这时候面试官一般都会选择听你解释,所以你就可以跟他解释一下自己对这些特性的理解。
虽然这个是典型的Java面试八股文题,但是你又不能表现的像背书一样,你可以结合一些实际的例子来进行解释,让他看到你思考的过程,这样不仅能让面试官看到你不一样的思路,同时也会加深对你的好印象!
当然主动出击还有一个好处,那就是你可以在面试官抛出一个问题后,在回答了他问题的同时,还能做出你自己的一些知识扩展,不仅让面试官看到你对这部分知识和概念的深刻理解,也能避免让面试官来主导这场面试,因为如果你多做扩展,你会发现,一场面试下来,你回答的都是自己会的问题,每个问题也都回答的很充分,而且面试官问你的问题数量也会减少一部分!这一波操作可以说是一石二鸟,一箭双雕!

咨询问题

技术聊的差不多后,最后的环节就是咨询问题了,一般面试官都会问你,我的问题问完了,你有什么问题想问我的吗?

这时候,你不要着急问,先想清楚了再问,比如实习的薪资待遇,是否有五险一金?实习工资是除税之后的吗?工作时间怎样安排的?会经常加班或者出差吗?有员工宿舍和食堂吗?这些你比较关心的问题,最后结束了,别忘记给面试官说声谢谢,大概就是这么个流程了!

以上就是蜗牛君对面试技巧的全部分享内容了,希望对一些正在找或者即将要找实习或者工作的小伙伴们有帮助!祝大家都能够拿到自己心仪的offer!所以,加油吧,打工人!


好了,今天的有关Springboot和微服务初始的学习就到此结束啦,欢迎小伙伴们积极学习和讨论,喜欢的可以给蜗牛君点个关注,顺便来个一键三连,我们下期见,拜拜啦!


参考视频链接:https://www.bilibili.com/video/BV1PE411i7CV(【狂神说Java】SpringBoot最新教程IDEA版通俗易懂)

你可能感兴趣的:(SpringBoot基础学习,spring,boot,spring,cloud,spring,5,java,面试)