Redian新闻
>
吃下这个,Spring面试算啥?

吃下这个,Spring面试算啥?

公众号新闻

你好,我是yes。


打开本文的朋友,可能都跟 Java 打过交道。其实,Spring 是 Java 开发的事实平台,我们说用 Java 编程,其实是在 Spring 框架上编程。

Spring 不仅是最常用的开源框架,面试中出现频率也比较高。但经过多年发展,它已成为枝繁叶茂的大树,面对“葱葱郁郁”的源代码,很多人经常会迷失其中……

我在学习和使用 Spring 的时候,经历过这三个阶段:

  • 刚开始使用时,很快就遇到瓶颈了;

  • 当我开始阅读源码、了解原理解决困惑后,仍然处于似懂非懂的程度;

  • 后来就
    尝试自己动手写 Spring
    ,遇到问题想破脑袋后翻查 Spring 的源代码,在一遍一遍地挫折借鉴中打通关节,终于豁然开朗了!

都说学习一种技能最好的形式,就是用自己的方式复现,但是手撸 Spring 框架这件事我们真的能做到吗?

当然可以,如果我们只是实现一个「微型」的 Spring 框架的话,还是可以搞定的。

具体怎么做呢?请听我娓娓道来

我的经验是,理论是要补充的,而且要体系化;其次,实践非常重要,学习 Spring 一定不要去死看书。

我们的目标是掌握 Spring 框架,所以我们不用去独创什么概念和结构,而是老老实实按照 Spring 的结构模仿着手写。自己动手,尽量少用现成的包,以刀耕火种的方式写程序,这可以让我们彻底地理解底层原理。

在这里,我推荐一张「中国 Java 研发工程师鼻祖」之一郭屹梳理的「手写 MiniSpring 体系图」,内容自于他的《手把手带你写一个 MiniSpring》专栏,建议先码后看。

 


他采用快速迭代的开发模式,从一个最简单的程序开始,一步步堆积演化,每写一小段代码,都是一个可运行的框架。在不断迭代中完善框架功能,去实现 Spring 框架的核心:IOC、MVC、JDBC Template 和 AOP

在一步步迭代过程中,将 Spring 的底层原理融入代码中,一层层对照 Spring 框架的现有结构,让原理理解起来不再困难。


 

关于作者 - 郭屹

作为一个 30 年技术老兵,他可以称为中国 Java 研发工程师鼻祖之一:曾在 Sun Microsystems 公司 Java 研发中心担任 J2EE 研发工程师,同时他也是 JDBC Driver、Minis 开发者,Norming 软件国际的 CTO。

在长达 30 余年的编程生涯中,他经历了Java 技术的飞速发展,积累了丰富的行业经验和技术实践,有 MiniSpring、MiniTomcat、MiniRedis、MiniLanguage 等几款开源作品。除此之外,他还十分乐于分享自己的知识和经验,一直以来都在通过写作、讲演等方式推动着编程社区的发展。

当我知道他要出专栏时,非常惊喜,所以专栏一上线,我就订阅了。

总的来说,他从 Spring 核心源码讲起,带你系统掌握 IoC、AOP 等核心功能,跟着学下来,只用 8 周,就可以搭建一个可用的 Spring 框架。今天上新特惠,只需一顿饭钱,推荐你学一下:

 

 

这个课程是怎么设计的?

手写 MiniSpring 的课程大体上分成四大部分:IoC 容器、MVC、JDBC Tempalte 和 AOP。这四大部分就是 Spring 框架的核心了。学好这些,今后你扩展到更多方面也会很容易。

第一部分:IoC容器

IoC 容器是 Spring 核心中的核心,Spring 抽象出 Bean这个概念,用一个容器管理所有的 Bean,并解决上层应用的业务对象之间的耦合问题。后面所有的特性都依赖于 Bean 的概念和这个容器。因此即使我们简单地说 Spring 框架就是一个 IoC 容器也未尝不可。

这个部分从一个极简容器开始,逐步扩展增强,最终实现一个完整的 IoC 容器,包含 Spring 框架对应的核心功能,实现 Bean 的管理。基于这个核心,逐步扩展到 MiniSpring 的其他特性。打好这个基础,后面的学习会事半功倍。

第二部分:MVC

MVC 是 Spring 支持 Web 模式的程序结构,它是基于 Servlet 技术实现的。基本思路是利用 Servlet 机制,用一个单一的 Servlet 拦截所有请求,然后把任务分派给不同的业务类处理,实现原始的 MVC 结构

在这一部分将 MVC 与第一部分的 IoC 容器结合起来,构成一个更大、更完整的框架。在一步步的构造过程中,他重点讲解大师们怎么逐步拆解这个 Servlet 的功能,把专业的事情交给专门的部件去做,最后构建成一个完整的体系。

第三部分:JDBC Tempalte

JDBC Tempalte 是 Spring 对数据访问的一个实现,重点分析 Spring 的实现方法,体现 Rodd Johnson 对简洁实用原则的把握。这一部分,我们会学习如何提取出一个 JDBC 访问的模板,来固化访问数据库的流程,怎么自动绑定参数值,简化上层应用程序。在此基础之上,我们还将了解到如何通过数据库连接池提高访问性能,以及模仿 MyBatis 将 SQL 语句配置到外部文件中。

通过这部分的学习,我们可以了解到,整个 JDBC Template 的实现都是运用了前面 IoC 管理 Bean 的方式,将数据的访问抽象成一个个 Bean,注入到系统中。由此,更能深刻体会到 IoC 容器的功用。

第四部分:AOP

AOP 是 Spring 框架中实践面向切面编程的探索。面向对象和面向切面,两者一纵一横,编织成完整的程序结构。在这一部分,我们将了解到 Spring AOP 所采用的一个实现方式:JDK 动态代理。我们会学习动态代理的原理,以及如何用这个技术动态插入业务逻辑。

最后我们将再一次看到 AOP 与 IoC 的结合,使用 BeanPostProcessor 可以通过自动化机制生成动态代理。这时你就会体会到,我前面说的“IoC 是 Spring 框架核心中的核心”。

在这一步一步地演化过程中,我们对 Spring 的模仿逐渐成型

具体内容可以看看目录:

 

在学习 Spring 框架的过程中,分析程序结构,阅读源代码,还能让我们体会到世界顶级程序员作品的精妙之处,我们的水平有本质的提升。

更进一步,我们自己在工作中,了解了这些底层技术,就会有意识地去借鉴这些大师们的结构,让我们自己能承担更加困难、更加复杂的工作。模仿出一个 MiniSpring 框架,一定能加深你对 Spring 框架底层的原理设计模式的认知。

课程原价 ¥99

今日早鸟到手,仅需 ¥69

点击「阅读原文」我们一起去领略 Spring 的风采!

微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
美股SPAC|3月份有4家SPAC完成IPO 15家SPAC宣布开始业务合并落地窗算啥?这房子整面墙都能打开!字节面试 Spring 容器实例化Bean的方法,我这样回答直接给了37K一个老海归的“逃出”Spring循环依赖那些事儿(含Spring详细流程图)炸几个火箭算啥,这才刚开始天赋“易昺(bǐng)”,创造历史!天窗算啥?这房子的顶和墙都能掀开!一文详解Prompt学习和微调(Prompt Learning & Prompt Tuning)SpringBoot+Flowable 快速实现工作流,so easy!Court Ruling Sparks Debate Over Promoting Work on Social Media吃在邮轮Spring Cloud 面试的 25 连环炮!那些我们吃下肚的「假食物」 都是用甚么做的?Agustín Hernández:中美洲建筑背景下的未来主义巨构日本著名大胃王去世!人称“魔女”,10分钟吃下399碗面,却不敌大肠癌。 近几年意外离世的网红“大胃王”,谁最不幸?别只会 SpringMVC 了!Spring 又官宣了一个更牛逼的替代框架!西雅图周末不无聊|华州春天最盛大的庆祝活动Washington Spring Fair来啦!别再自己瞎写工具类了,SpringBoot 内置工具类应有尽有,建议收藏!!2023 內心成熟的人,看誰都顺眼!秋招面试 | 难度大增!NG面试将至多达10轮!深入剖析 Spring Boot 的 SPI 机制女子对丈夫不爽,竟把离婚表格撕碎熬成粥,直接吃下去…这!??马上报名|直播+录播+专属题库,轻松搞定数据/量化金融Coding面试!最新消息!今年NG面试至多可达10轮!Chinese Professor Suspended For Racist, Homophobic Speech关于Prompt Engineering你该了解啥?OpenAI应用研究负责人帮你梳理了惊呆!我们吃下肚的“假食物” 都是用什么做的?难诉相思,送谢莉斯老师回国, 十年签证可办了仅剩1席|直播+录播+专属题库,轻松搞定数据/量化金融Coding面试!美股SPAC|创新排放监测提供商 Spectaire Inc. 将通过与 SPAC合并上市英国2年工签算啥,澳洲PSW让你毕业后待4年!和 if else说再见,SpringBoot 这样做参数校验才足够优雅!请ChatGPT「预测乐透号码」真的中奖了 他曝超神试算法
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。