前言
最近一段时间发现经常看到很多人,对Spring源码比较感兴趣,日常开发中,无论你做什么什么项目,大部分都离不开Spring生态的那一套东西,所以很多人对Spring底层源码实现很感兴趣,但是有些从来没有接触过源码的开发者,在看Spring源码的过程中确实及其难受的,为什么,大部分人看源码基本都是debug一点一点去看的,最后发现,越追越离谱,越追越深,到最后都追到JDK源码了,也没有明白是什么意思!
对于学习源码,我的看法是,先去完全的熟悉它的用法,想一下如果让你来实现,你会怎么实现!有了这些想法之后,再去看源码去印证你自己的观点,远比你自己去死扣源码快的多。
而且,我问过一些读者还有同事,我发现有很多人,看源码容易陷入一个误区,就是刚开始看源码就死扣着一个细节不放,非得搞懂,我并不是说这样看源码有什么不对,但是在没有对整个框架有一个全局了解的情况下,不要这样看,你应该先把它的大体框架给搞清楚,在后再分功能一步一步的了解每一个功能项!这样做,首先你对整个框架的架构有了一个模糊的认识,再扣细节的途中有时候即使你不知道这个代码在干什么,你也隐约能猜出来,再通过debug 与自己的猜测相互印证,最终达到事半功倍的效果。当然这个建议只针对刚开始看源码的同学,如果你看的源码很多了,那么你肯定又自己的一套学习方法,可以的话,可以在评论区分享一下。
为了帮助一些萌新们或者想要了解Spring源码的小伙伴,我会把Spring的一些大体逻辑分析一下,让你了解整个Spring的骨架!
第一个暴击:Spring
上一份Spring的手绘思维脑图(就像是个知识大纲总结),预览一下Spring的知识点,心里有个谱。不过这边我是采用的截图方式,为了把全部的内容都截取出来,所以整个就比较小,可能不是很清晰。
Spring面试真题(七大模块:一般问题+IOC+Beans+注解+数据访问+AOP+MVC)
- 一般问题
1. 不同版本的 Spring Framework 有哪些主要功能?
2. 什么是 Spring Framework?
3. 列举 Spring Framework 的优点
4. Spring Framework 有哪些不同的功能?
5. Spring Framework 中有多少个模块,它们分别是什么?
6. 什么是 Spring 配置文件?
7. Spring 应用程序有哪些不同组件?
8. 使用 Spring 有哪些方式?
- IOC
9. 什么是 Spring IOC 容器?
10. 什么是依赖注入?
11. 可以通过多少种方式完成依赖注入?
12. 区分构造函数注入和 setter 注入。
13. spring 中有多少种 IOC 容器?
14. 区分 BeanFactory 和 ApplicationContext。
15. 列举 IoC 的一些好处。
16. Spring IoC 的实现机制。
- Beans
17. 什么是 spring bean?
18. spring 提供了哪些配置方式?
19. spring 支持集中 bean scope?
20. spring bean 容器的生命周期是什么样的?
21. 什么是 spring 的内部 bean?
22. 什么是 spring 装配?
23. 自动装配有哪些方式?
24. 自动装配有什么局限?
- 注解
25. 什么是基于注解的容器配置?
26. 如何在 spring 中启动注解装配?
27. @Component, @Controller, @Repository, @Service 有何区别?
28. @Required 注解有什么用?
29. @Autowired 注解有什么用?
30. @Qualifier 注解有什么用?
31. @RequestMapping 注解有什么用?
- 数据访问
32. spring DAO 有什么用?
33. 列举 Spring DAO 抛出的异常。
34. spring JDBC API 中存在哪些类?
35. 使用 Spring 访问 Hibernate 的方法有哪些?
36. 列举 spring 支持的事务管理类型
37. spring 支持哪些 ORM 框架?
- AOP
38. 什么是 AOP?
39. 什么是 Aspect?
40. 什么是切点(JoinPoint)
41. 什么是通知(Advice)?
42. 有哪些类型的通知(Advice)?
43. 指出在 spring aop 中 concern 和 cross-cutting concern 的不同之处
44. AOP 有哪些实现方式
45. Spring AOP and AspectJ AOP 有什么区别?
46. 如何理解 Spring 中的代理?
47. 什么是编织(Weaving)?
- MVC
48. Spring MVC 框架有什么用?
49. 描述一下 DispatcherServlet 的工作流程
50. 介绍一下 WebApplicationContext
完整的答案解析如下(总共有18页)
Spring进阶学习笔记
- Spring高级源码笔记
- Spring实战(第3版)
第二个暴击:SpringCloud
思维脑图–SpringCloud微服务实战思维脑图(xmind)
SpringCloud面试真题
问题一:什么是 Spring Cloud?
问题二:使用 Spring Cloud 有什么优势?
问题三:服务注册和发现是什么意思?Spring Cloud 如何实现?
问题四:负载平衡的意义什么?
问题五:什么是 Hystrix?它如何实现容错?
问题六:什么是 Hystrix 断路器?我们需要它吗?
问题七:什么是 Spring Cloud Bus?我们需要它吗?
问题八:什么是 Netflix Feign?它的优点是什么?
完整的答案解析如下(总共6页)
SpringCloud进阶学习
- SpringCloud Alibaba微服务笔记
- SpringCloud参考指南
第三个暴击:SpringBoot
思维脑图–SpringBoot思维脑图(xmind)
SpringBoot面试真题
问题一:Spring Boot、Spring MVC 和 Spring 有什么区别?
问题二:什么是自动配置?
问题三:什么是 Spring Boot Stater ?
问题四:你能否举一个例子来解释更多 Staters 的内容?
问题五:Spring Boot 还提供了其它的哪些 Starter Project Options?
问题六:Spring 是如何快速创建产品就绪应用程序的?
问题七:创建一个 Spring Boot Project 的最简单的方法是什么?
问题八:Spring Initializr 是创建 Spring Boot Projects 的唯一方法吗?
问题九:为什么我们需要 spring-boot-maven-plugin? 问题十:如何使用 SpringBoot 自动重装我的应用程序?
问题十一 :什么是嵌入式服务器?我们为什么要使用嵌入式服务器呢?
问题十二:如何在 Spring Boot 中添加通用的 JS 代码?
问题十三:什么是 Spring Data?
问题十四:什么是 Spring Data REST?
问题十五:path=”users”, collectionResourceRel=”users” 如何与 Spring Data Rest 一起使用?
问题十六:当 Spring Boot 应用程序作为 Java 应用程序运行时,后台会发生什么?
问题十七:我们能否在 spring-boot-starter-web 中用 jetty 代替 tomcat?
问题十八:如何使用 Spring Boot 生成一个 WAR 文件?
问题十九:如何使用 Spring Boot 部署到不同的服务器?
问题二十:RequestMapping 和 GetMapping 的不同之处在哪里?
问题二十一:为什么我们不建议在实际的应用程序中使用 Spring Data Rest?
问题二十二:在 Spring Initializer 中,如何改变一个项目的包名字?
问题二十三:可以配置 application.propertierde 的完整的属性列表在哪里可以找到?
问题二十四:JPA 和 Hibernate 有哪些区别?
问题二十五:业务边界应该从哪一层开始?
问题二十六:使用 Spring Boot 启动连接到内存数据库 H2 的 JPA 应用程序需要哪些依赖项?
问题二十七:如何不通过任何配置来选择 Hibernate 作为 JPA 的默认实现?
问题二十八:指定的数据库连接信息在哪里?它是如何知道自动连接至 H2 的?
问题二十九:我们如何连接一个像 MySQL 或者Orcale 一样的外部数据库?
问题三十:Spring Boot 配置的默认 H2 数据库的名字是上面?为什么默认的数据库名字是 testdb?
问题三十一:如果 H2 不在类路径里面,会出现上面情况?
问题三十二:你能否举一个以 ReadOnly 为事务管理的例子?
问题三十三:发布 Spring Boot 用户应用程序自定义配置的最好方法是什么?
问题三十四:配置文件的需求是什么?
问题三十五:如何使用配置文件通过 Spring Boot 配置特定环境的配置?
答案解析如下(21页)
SpringBoot进阶学习
- 深入浅出SpringBoot
- Spring Boot教程
最后一个:SpringMVC
思维脑图–SpringMVC思维脑图
SpringMVC面试真题
1. 什么是 SpringMvc?
2. Spring MVC 的优点:
3. SpringMVC 工作原理?
4. SpringMVC 流程?
5. SpringMvc 的控制器是不是单例模式,如果是,有什么问题,怎么解决?
6. 如果你也用过 struts2.简单介绍下 springMVC 和 struts2 的区别有哪些?
7. SpingMvc 中的控制器的注解一般用哪个,有没有别的注解可以替代?
8. @RequestMapping 注解用在类上面有什么作用?
9. 怎么样把某个请求映射到特定的方法上面?
10. 如果在拦截请求中,我想拦截 get 方式提交的方法,怎么配置?
11. 怎么样在方法里面得到 Request,或者 Session?
12. 我想在拦截的方法里面得到从前台传入的参数,怎么得到?
13. 如果前台有很多个参数传入,并且这些参数都是一个对象的,那么怎么样快速得到这个对象?
14. SpringMvc 中函数的返回值是什么?
15. SpringMVC 怎么样设定重定向和转发的?
16. SpringMvc 用什么对象从后台向前台传递数据的?
17. SpringMvc 中有个类把视图和数据都合并的一起的,叫什么?
18. 怎么样把 ModelMap 里面的数据放入 Session 里面?
19. SpringMvc 怎么和 AJAX 相互调用的?
20. 讲下 SpringMvc 的执行流
答案解析如下(4页)
技术学习总结
学习技术一定要制定一个明确的学习路线,这样才能高效的学习,不必要做无效功,既浪费时间又得不到什么效率,大家不妨按照我这份路线来学习。
最后面试分享
大家不妨直接在牛客和力扣上多刷题,同时,我也拿了一些面试题跟大家分享,也是从一些大佬那里获得的,大家不妨多刷刷题,为金九银十冲一波!
18047441564)]
[外链图片转存中…(img-VZ5tXm84-1618047441564)]
[外链图片转存中…(img-dwLKjuJ0-1618047441565)]
最后面试分享
大家不妨直接在牛客和力扣上多刷题,同时,我也拿了一些面试题跟大家分享,也是从一些大佬那里获得的,大家不妨多刷刷题,为金九银十冲一波!
[外链图片转存中…(img-bX5Po1oL-1618047441566)]
[外链图片转存中…(img-wgkBPfUx-1618047441567)]
最后,若需要完整pdf版,可以点赞本文后点击这里免费领取