如何快速掌握一门框架
- 问自己:为什么选择学习此框架,使用它能解决哪些问题,有没有更适合的框架,与他相关联的框架有哪些?
- 入门:找官网阅读入门文档,主要掌握基本框架搭建,环境搭建,学习基础语法;
- 深入:在网络中寻找适合自己的学习资源,文档教程,****;
- 实战:学习使用代码托管平台,寻找优秀的开源项目;
- 实战:选择合适的开源项目,感受框架的魅力;
- 实战:学习最好的方式就是模仿,拿来主义没毛病,改造项目;
- 提升:如何优雅的提问,并与大佬讨论技术问题;
- 提升:学会思考能力,搜索能力,提高解决问题的能力;
- 出师:最后注意这几点。
问自己
学习一门框架前,先问自己下面三个问题:
- 为什么会产生此框架?
- 此框架有什么作用?
- 学习此框架需要必备那些知识?
其实这样问自己也很正常。学习一门框架不是看两篇博客就会的,也是需要花费一些时间的。一部分是看别人的文档,教程等,另一方面是自己思考和动手练习。
学习一门框架可能是工作需要,可能是更新个人技能树,可能为了找工作。不管出于何种目的,这些外部因素都是促使你不断学习的动力。框架并不是什么高深的东西,它也是来源于基础知识。框架的诞生肯定是为了解决某个问题,然后框架的开发者通过一些规则去实现框架,最后输出框架文档,并推广给更多开发者使用。
一门框架也并不是孤立存在的,往往是多种框架结合在一起使用的。例如SpringCloud
家族包括很多子项目,Eureka 注册中心 、Hystrix 服务熔断降级 、Zuul 微服务网关 、Config Server 分布式配置、Sleuth 链路追踪等。多个框架的组合使用才能完成实际的应用场景。 例如满足前端功能需要,可能会用到多种框架和技术, Node.js、Vue、ElementUI、Vue Router、Vuex 等。
入门
框架入门分为三个阶段:
- 完全模仿阶段
- 独立开发功能模块
- 独立搭建项目脚手架
完全模仿阶段这个阶段是最难的阶段,一个好老师是你坚持学习此框架的动力。好老师有三种:博客教程、官方文案、****。掌握框架基础语法和主要特性,就表示此阶段已完成。
独立开发功能模块
这个阶段是提升最快的阶段,上个阶段完全模仿是参考别人的代码,自己实现功能。这个阶段是我们实现我们设计的的功能。掌握框架对异常、错误处理、断言、日志和调试的支持,对单元测试的支持。独立搭建项目脚手架
这个阶段是掌握框架工作原理的阶段,项目框架搭建需要考虑集成那些插件,插件之间是如何工作。项目启动需要那些依赖,依赖之间的版本又存在那些关联。通过断点调试我们可以掌握框架的工作原理。
在网络中如何寻找适合自己的学习资源呢?一些必备的技能必须掌握。掌握下面这些网站优化的命令很有必要。
搜索引擎命令:
blog.csdn.net springboot #csdn 上搜索包含 springboot 关键字allinurl:java mysql #完全包含 java mysql 关键词的页面inurl:java mysql #包含 java mysql 关键词的页面allintitle:oracle 甲骨文 #查询标题完全包含 oracle 甲骨文关键词的页面intitle:oracle 甲骨文 #查询标题包含 oracle 甲骨文关键词的页面
我总结了一些自学的网络资源:
自学教程网站
视频网站
系列教程
- github 上搜索系列教程
- 各大博客网站:知乎、csdn、思否等搜索关键内容。
深入
官网学习
为什么要首先在官网进行学习呢?因为官网是第一手的学习资源。在搜索引擎中搜索xx 官网
,就可以找到对应的网站。有些伙伴可能会说好多框架的官网都是英文,看一会就没有动力了。学习技术最好要养成阅读英文文档的习惯。多年经验告诉,一些网上找不到解决方案的问题,往往在官网仔细搜索,都能找到问题的答案。
小窍门
:谷歌浏览器有翻译功能,可以适当使用一下。
多动手
进入官网后,找 Getting started
、Example
字样的文档。官网的教程一般讲的都比较详细,先阅读官方文档,然后在动手练习,最后就可以做到举一反三。最重要的还是要抓住框架的共性,我们要在动手的同时去思考。比如前端开发,单页面最近本的通用问题有哪些?路由、模块化、组件化、前后台数据交互等。
实战
4.1 代码托管平台
现在市面上的代码托管平台特别多,例如:Github,码云(Gitee), Gitlab,码市(coding)等,代码托管都免费。这么多的代码托管平台,优秀开源项目特别多,我们就要学会使用这些平台,寻找自己需要的项目。这里以Github
使用为例。
搜索栏搜索
在Github
搜索栏,按照搜索栏的语法,快速找到自己需要的内容,常用的命令如下:
stars:>=300 language:vue #搜项目language:java location:china #搜索开发者examples path:/docs/ language:vue #搜索 vue 项目中 docs 目录下包含 examples 内容的文件issues:node #问题搜索awesome springboot #搜索一些优秀的框架、教程、项目等
更多用法参考:Github 上搜索信息
搜热门
在Github
中 explore
标签下,有 主题(Topic)
和 热门(Trending)
。Topic
页面包括最新、最流行的讨论主题,有技术性的话题,也有一些非技术的话题,这里就是世界编程爱好者讨论技术的区域 。Trending
汇总了每天、每周、每月的热门项目和热门开发者。页面也支持多种筛选条件,方便我们快速找到心仪开源项目。
Github 插件
Google
浏览器添加一些插件,让我们在线查看项目结构,源码内容。插件有:Octotree
、OctoLinker
、Sourcegraph
等。Sourcegraph
插件效果如下图
4.2 选择开源项目
如何选择适合自己的开源项目?首先要明确目的选择哪类项目:系列教程型项目,综合应用的项目。
- 系列教程一般是细化框架的每个功能点,更加深入的掌握框架的使用方法。
- 综合应用关注点主要实战,不仅包括框架的一些特性,可能也会涉及到其他多种框架的使用。
其次如果寻找开源项目,要找比较活跃的项目,文档要丰富,代码提交记录也要较新一些。
4.3 改造项目
学习最好的方式就是模仿,拿来主义没毛病,先掌握了已有项目,再由点及面掌握更多知识点。要改造项目首要阅读项目说明,理解项目是如何工作的。
掌握项目
1.阅读README.md
,文档会说明项目实现了什么功能,使用了哪些技术和框架,也可能会说明项目搭建步骤。通过README.md
我们对项目会有一个整体的认识。
2.项目根目录可能会包含doc
目录,这个目录也会包含项目说明文档。
3.源码目录寻找单元测试,通过运行单元测试,掌握项目功能。
4.按照文档本地运行项目,用一个功能点分析项目的三流:数据流,业务流,控制流。
5.适当画图来帮助你理解源码,在理清主干后,可以将整个流程画成一张流程图或者标准的 UML 图,帮助 记忆和下一步的阅读。
6.深入了解项目的配置管理、高级功能以及最佳实践。
改造项目
成功运行项目包含的Example
,尝试根据你的理解和需要修改 Example
,测试高级功能等。确定要改造的功能点,通过断点调试,分析代码逻辑知道完全掌握作者的思想。多阅读项目文档,关键注释等能容。掌握了现有功能就可以看是添加我们需要的功能了。
提升
5.1 优雅的提问
遇到问题并不可怕,遇到问题才是提升个人能力的时候。
提问前
- 尝试在网络中搜索你的问题,建议使用
Google
。 - 尝试在官方网站搜索相关问题。
- 尝试阅读指导手册,常见问题文件等来查找答案。
- 尝试结合自身经验,假设并通过试验来验证答案。
- 建议阅读源代码来解决问题。
提问时
- 礼多不怪,有时还是特别有帮助的。
- 用清晰、精准的语句来阐述自己的问题。
- 描述问题的现象,并说明你的猜想。
- 说明你对问题的思考,并做过哪些尝试。
问题解决
向所有帮助过你的人发送一份邮件,详细描述问题是怎么发生的,中间做过哪些尝试,最终是怎样定位和解决问题的。并再一次向他们表示感谢。
开源社区提问
What steps will reproduce the problem? 问题的重现步骤?1. 2. 3. What is the expected output? What do you see instead? 你期待的结果是什么?实际看到的又是什么?What version of the product are you using? On what operating system? 你正在使用产品的哪个版本?在什么操作系统上?Please provide any additional information below.提供更多问题的信息。
5.2.提升个人能力
思考能力
学习的第一步就是模仿,跨过模仿的阶段进入闻一知十 ,这个阶段就会开始体现思考能力。首先要见多识广
,掌握的东西多了,大脑在计算(思考)的时候都是基于已有知识进行重新排列组合的 。
- 增加背景知识量,多阅读技术资讯,博客,开源项目源码等。
- 提高知识熟悉程度,10 万小时就可以塑造行业专家,也是有一些道理的。
- 增强知识结构性,例如项目无法访问,我们会想到,服务是否启动,网络是否连通,端口是否可用等。
- 提高对背景知识的梳理能力,通过工具
Xmind
整理知识,提高整理思维的效率。
搜索能力
现在社会,搜索能力越来越成为一个人的必备素养,大部分场景下,解决问题 ≈ 搜索。
搜索问题前需要明确两点:
- 分析问题,因为一些问题并不能直接搜索到答案。
- 将搜索的问题转化为关键词。
解决问题的能力
1.正确解决问题的方式:
分析问题 => 猜想 => 验证猜想 => 找到原因 => 构建解决方案 => 验证解决方案 => 解决
2.提升相关知识的掌握程度,分析与解决问题的能力就能明显提高。
有时困惑我们的问题在释给其他人听时候,突然就发现问题产生的原因。
出师
最后注意下面三个点,使用框架对你已不是难事。
6.1.在线问题定位
线上问题定位包括:日志分析,进程监控,远程调试。
Linux 服务器上的常用命令
history|grep docker #查看操作历史包括 docker 字符串的命令top #实时动态地查看系统的整体运行情况df -h #查看磁盘使用情况df -i #查看 inode 使用情况free -m #示系统中物理上的空闲和已用内存ps -elf | grep tomcat #查看进程统计信息tail -f xx.log #循环读取文件内容ll -ah #查看目录下所有文件netstat -anp|grep 8080 #查看端口使用情况ip addr #查看 ip 地址
6.2.版本问题
注意编译器版本、框架版本、服务器、各种工具包的版本问题。注意配置文件的使用细节,不同版本会有一些升级或者删改。当你怎么也检查不出配置文件的错在哪里的时候,找一些开源项目调试别人的代码,寻找答案。
6.3.了解容器技术
掌握一些微服务的知识相关技术,例如:Docker,Kubernetes 等,微服务在未来也是一个大热门,不管是项目构建,自动化测试,自动化部署都离不开容器技术的支撑。
学以致用
这里以SpringBoot
框架为例,讲解如何快速掌握一门框架。
7.1 认识框架
1.为什么会产生此框架?SpringBoot
是 Java 语言的一款微服务框架。由于Spring
是一个轻量级的企业开发框架,主要用于整合和管理其他框架,随着项目业务的扩展,需要整合的框架也越来越多,Spring 框架就更加繁杂。在这种情况下,Spring 团队将主流框架的整合配置预先写好,再通过简单的几个参数实现框架的快速整合。Spring boot 框架就应运而生。
2.此框架有什么作用?
大大减少 Spring 与其他框架整合的代码,也实现了 Spring 开发的 Web 应用的快速部署(jar 可以独立运行)。提高代码开发效率。它提供了许多插件,方便快速的构建项目,方便嵌入式或内存数据库接入。与 Spring 生态系统(Spring ORM,Spring Security,Spring JDBC,Spring Data 等)集成非常容易。
3.学习此框架需要必备那些知识?
框架是基于编程语言的,首先需要掌握 Java 基本语法,Java 开发工具 Eclipse,Idea 等。其次需要掌握 MVC 框架的原理,MVC 框架的目的就是将用户展示页面与业务逻辑分离开,使代码可扩展性强、可复用率高、可维护成本低。最后需要掌握设计模式:单例模式、适配器模式、代理模式、观察者模式、装饰者模式。
7.2 框架入门
1.完全模仿阶段
对于 SpringBoot 框架需要掌握:数据源配置、Thymeleaf 模板使用、单元测试编写、项目打包部署方式。
2.独立开发功能模块
SpringBoot 框架实现人员信息列表功能,需要画前端 Thymeleaf 模板页面,需要添加数据库配置,需要写后台获取人员信息接口。
3.独立搭建项目脚手架
参考开源项目,阅读官方文档独立搭建项目脚手架。通过断点调试我们可以掌握框架的工作原理。
7.3 实战
1.在 Github
上找 SpringBoot
项目。搜索框中输入 awesome springboot
,可找到很多关于 SpringBoot
的开源项目。搜索栏输入 stars:>=1000 springboot
,意思是搜索标星大于 1000 的 springboot 项目。2.运行项目这里我找到了 mBlog
开源项目,它是一款开源 Java 博客系统, 采用 spring-boot、spring-data-jpa、shiro、freemarker、bootstrap 等框架,正好是一个综合的实战项目。
掌握 Git 常用操作
git clone https://github.com/langhsu/mblog.git //克隆项目到本地git add <filename> //缓冲区添加文件git commit //提交文件git push //推送项目到远程
本地运行项目
a.将项目导入开发工具 Idea,Eclipse 等工具,使用 maven 工具构建项目。
b.修改项目配置文件,数据库连接信息,端口等。
c.找到 BootApplication
类,"右键" -> "运行" main
方法。
d.浏览器访问 http://localhost:8080/admin 管理员账号 admin 密码 12345
服务器部署
SpringBoot 微服务项目有三种部署方式:
- 外部 Tomcat 部署方式,修改项目打包格式为
war
,将打包后的war
文件放到 Tomcat 的 webapp 目录,运行 tomcat 即可运行项目。 - Jar 形式部署,服务器执行
nohup java -jar xxx.jar --server.port=8080
即可运行项目。 - Docker 容器部署,运行 docker-compose up -d 命令即可启动项目。
自定义扩展
我有这些想法:首页分页接口默认返回 15 条数据,我想让分页接口返回 9 条数据;首页右侧我想添加自定义个人分类,联系站长,你可能感兴趣,友情链接等板块。想让博客在多终端自适应,保证样式的不错乱,修改后台接口等等。这里以修改默认分页为例。
a.猜想:后端一次获取所有数据,前端做分页展示。前端传递分页参数,获取当前页面的分页数据。
b.浏览器(谷歌)打开Debug
调试窗口,查看请求http://www.mhtclub.com/api/hots?size=9
可知,每页数据条数是前端传递的参数。
c.前端向后端发送获取分页数据的请求,那就要找前端代码。通过上面的请求提取关键字 api/hots
,在IDE
中全局搜索内容。找到的代码如下:
seajs.use('sidebox', function (sidebox) { sidebox.init({ <#--latestUrl : '${base}/api/latests',--> latestUrl : '${base}/api/tags', hotUrl : '${base}/api/hots', hotTagUrl : '${base}/api/hot_tags', latestCommentUrl:'${base}/api/hot_users', size :15, // callback onLoadHot : function (i, data) { return jQuery.format(li_template, i + 1, data.id, data.title); }, onLoadLatest : function (i, data) { return jQuery.format(hotTag_li_template, i + 1, data.name, data.posts); }, onLoadLatestComment : function (i, data) { return jQuery.format(hotuser_li_template, data.id, data.avatar, data.username); } });
看到这里答案已经很明确了,size
属性就表示默认分页数。
d.问题解决了,现在回过头来看上面的这段代码。seajs
是什么东东,它是怎么工作的?使用搜索引擎会找到我们想要的答案。
例子很简单,我想说的是这种思维方式。最终改造后的博客项目如下图:
7.4 归纳总结
学习框架要善于思考和总结。
- 掌握框架的三种流:数据流,业务流,控制流。数据流掌握的框架的数据流转,可以快速掌握接口的功能,业务流让我们快速理解业务,控制流让我快速掌握框架的控制逻辑。
- 多种方式都能实现功能时,选择自己不熟悉的方式实现功能。
- 记录在学习框架时遇到的问题。反思一下,为什么会是问题,是自己没有掌握的内容,还是自己使用的方式不对,下次遇到类似的问题改怎样去思考。
- 记录自己是如何解决问题的。这种解决问题的方式是否能解决所有问题,如果改动较少代码的时候如何进行全局修改。
最后
我有一个公众号:不安分的猿人,如果需要什么学习资源可以找我哦!我每周也进行开源项目部署教程分享,副业赚钱的思考分享等。很高兴认识你,我们互相学习哈!
如果你需要搭建个人博客,我刚刚创建了一场 Gitchat :8 种方式搭建博客,总有一款适合你
阅读全文: http://gitbook.cn/gitchat/activity/5e3aa356acb33a5c802548b8
您还可以下载 CSDN 旗下精品原创内容社区 GitChat App ,阅读更多 GitChat 专享技术内容哦。