文/楠木大叔

技术更迭,一往无前。技术人总是要不断学习以适应社会的发展和行业对我们的要求。每隔一段时间,就会有纷至沓来的新技术,新知识,新概念,我们应该如何应对,是被逼到墙角,还是主动出击?

导读

  • 从一道小题说起
  • 空杯心态
  • 不下水,就学不会游泳
  • 漫无目的的学习纯属浪费时间
  • 没有深度思考的学习就是自嗨
  • 只输入不输出的学习就是耍流氓
  • 天下武功,为快不破
  • 万物即可为题
  • 结语
  • 参考

人之为学有难易乎?学之,则难者亦易矣;不学,则易者亦难矣。——《为学》

从一道小题说起

作为一个技术出身的码农,我总是对小镇做题家是嗤之以鼻的。然而,经历多年的学习和工作洗礼之后,我似乎又从小镇做题家身上看到一些不一样的东西,那就是做题是一种相对靠谱的学习方式。特别是近年来,在新技术的学习上,我逐渐开始认可和实践这种方式。各位客官先不要反驳,请听我慢慢道来。



笔者在学习SpringAOP的时候,非常认真的地研读过《Spring实战》一书中关于AOP相关知识点,也参阅过相关技术博客文章并在实践中有过应用,相关文章可查阅笔者文章:

自认为已经能够基本理解AOP的概念和应用场景,但是直到遇到这道题,笔者才发现自己对Spring AOP的理解其实依然浮于表面。

尽管类似的例子在《Spring实战》这本书上有涉及,如下


但是在大多数的技术博文中亦或是整理的面试考点中,基本都是摘抄书本术语和总结一些概念居多(当然能够沉下心来去读懂源码的同学请绕行)。这就会给新手们一种错觉,AOP思想不过如此。

AOP的相关术语

  • jointpoint(连接点):是指那些被拦截到的点。在spring中是指方法,因为spring只支持方法类型的连接点。
  • pointcut(切入点):对哪些joinpoint进行拦截
  • advice(通知/增强):拦截到的jionpoint所做的事情。方法层面的。
    • 前置通知
    • 后置通知
    • 异常通知(抛出异常)
    • 最终通知(无论如何都执行)
    • 环绕通知(方法执行的前后都通知,甚至可以阻止目标方法执行)
  • introduction(引介):特殊的通知,类层面的。
  • target(目标对象):代理的目标对象
  • weaving(织入):把增强应用到目标对象来创建新的代理对象的过程
  • proxy(代理):被AOP织入增强后产生的结果代理类
  • aspect(切面):切入点+通知的结合
    • advisor:一般的切面,advice本身就是一个切面,对目标类所有方法进行拦截
    • PointcutAdvisor:代表具有切点的切面,可以指定拦截目标类哪些方法
    • IntroductionAdvisor:引介切面

短短总结,其实涉及了众多知识点,如果没有仔细品读和思考,恐怕是很难吃透的。所以,笔者反思,平时阅读和学习新知识的一些问题,很多时候容易大而化之,停留表面——毕竟技术书籍不像小说,可以快速阅读完。有时候自认为理解了,实则不然。知识点其实需要一个载体来承载,比如一个实际应用实战,或者一道理论题目。否则就是纸上谈兵,无法落地。技术的学习本身是理论和实践结合的。所以,要想多快好省的学习,笔者推荐通过理论学习,并结合做一些实战性强的题目。这样的目的如下:

  • 快速熟悉各种应用场景
  • 检验理论知识
  • 聚焦

空杯心态

你就像这只杯子一样,里面装满了自己的看法和成见。如果你不先把杯子空掉,叫我如何对你说禅呢?

南隐是一位禅师。一天,一位学者来向他问禅,但自己喋喋不休。南隐则默默无语,以茶相待。他将茶水注入这位客人的杯子,满了也不停下来,而是继续往里面倒,眼睁睁看着茶水不停地溢出杯外。客人着急地说:“已经满出来了,不要再倒了!”

南隐说:“你就像这只杯子一样,里面装满了自己的看法和成见。如果你不先把杯子空掉,叫我如何对你说禅呢?”。

"空杯心态"是我最近几年比较爱提及的一个词,学习新知识,对新手来说,是没有思想包袱的,但是对于老鸟,建议空杯心态,否则容易沉迷过去的知识体系,走弯路。

不下水,就学不会游泳

绝大多数的人,面对陌生事物,往往会怀有畏惧感。

我没有接触过PS,那么如果让我去设计一个海报,就会心生畏惧。我没有用过Java,让我去写Java的项目,我总是处于观看而不敢亲自下去写...

过去的数年中,笔者长时间从事C#项目研发,但是最近两年由于工作项目的需要,需要学习Python,Java等语言。这里以学习Java为例。

笔者学习Java真的是一波三折,不敢说自己有多大期望,就是希望能够做一个小小的网站。第一次想学Java,大概是16~17年左右,因为没有人指导,必然是要走弯路的,在windows上从搭建环境到跑起来第一个spring web的hello,world,足足花了一周多的时间。有兴趣的朋友可以去看那篇纪实文章

出师不利,被Spring的各种配置虐的一无是处。然后更多的是看书,再加上没有在实战中应用的需求,基本放弃使用。几年后,无独有偶,遇见另外一个技术还不错的同事,他也刚好有这段经历,不过他当年他坚持了一周都没有把Spring跑起来,令人唏嘘。

去年,因为工作原因又开始使用Java,此时Springboot已经大行其道。便又开始投入Sprigboot的学习中,没话说,Springboot的确是大大降低了学习门槛。有了实际应用场景,加上工作的方面的推进,这一次真正开始上手了,基本熟悉了整个项目搭建和开发流程,总算能够独立完成一个网站的开发和部署。

面对一个陌生领域,大部分人总是会有畏难心理,左顾右盼,甚至无从下手。这个时候,你只需要考虑是否有学的价值,如果有,那么就毫不犹豫的先干起来,否则,从心态上你就会选择躺平。

漫无目的的学习纯属浪费时间

漫无目标,无书不读的人,他们的知识是很难精湛的。

"好读书,不求甚解",这也许是陶渊明先生的自谦的说法。普通人,特别是技术人真不要仿效。技术工作及其严谨,差之毫厘,谬以千里。学习上来不得半点马虎。

我很钦佩热爱学习的人,他们博览群书,对新技术总是第一批尝鲜的人。但是也有另一种,喜欢读书,但是很盲目和无目的。

我有一个很爱学习的同事,在公司,中午就会看书,下班回到家也看,公司组织团建出去也看。但是我最近留意了一下,半月过去,我发现他的阅读进展并不是很快,依然还停留在半个月前的那个章节。很多企业都会组织读书会,就是大家建一个群,组织有兴趣的同事一起读书,群里相互监督,固定时间打卡。笔者曾经供职的一家公司,老总亲自搞了一个52读书班,什么意思呢?就是每个人一年要读52本书,平均下来就是一周一本书。最后完成目标的人会授予奖章,当然是有人完成的。所以,从这个角度来看,我这个同事读书效率是极低的。甚至这种不连续性还会带来兴趣的热度的下降,最终半途而废。

如果您确实有充足的闲散时间,那么您随心的读书总比刷手机娱乐八卦强。但如果您是真正想学习的人,特别是学习新技术。因为这种学习的结果只有会和不会,对于技术人来说半瓶水和小白没有没有本质区别。

艾宾浩斯遗忘曲线表明,遗忘在学习之后立即开始,最初的遗忘速度很快,随着时间的推移,遗忘的速度逐渐下降,达到一定速度后就不再遗忘。


所以,当你决定要学习的时候,一定要给自己有个规划,要有里程碑,要有截止日期。一定要保持学习的连续性和连贯性。

没有深度思考的学习纯属自嗨

学而不思则罔,思而不学则殆。

学习的渠道和资源从未如此丰富。记得多年以前,我们在各大技术群里提问总会有人帮你解答,但不知从什么时候开始,"不懂就问百度"成了一种神回复。


你想学什么技术,网络上总能找到相关学习资源。但是,伴随而来的可能是更多参差不齐的搜索结果。新手无法辨别搜索结果的信度,走点弯路还好,但是时间却实实在在浪费了。

所以,在学习新知识的时候,官网和原著优先。合理利用网络资源和相关辅助教程,技术博客等。同时切记随大流,尽信书不如无书。

对于一些较为晦涩的技术知识点,你就算阅读一百遍也不一定能够理解,只有从场景的角度出发去深度思考,才能理解和吃透。

在没有深度思考之前你会觉得的自己无所不能,在深度思考之后,你会觉得自己只是勉强入门。

不以输出为目的的学习都是耍流氓

学习,是指通过阅读、听讲、思考、研究、实践等途径获得知识和技能的过程。

没有结果的学习本身就没有意义,在终身学习的时代,在技术知识发展日新月异的时代,很多知识和技能一样是有生命周期的。你今天学习了某个新知识,获得了一项新技能,3~5年之后,这项技能可能在行业里面已经没有用武之地了。

学习是一个过程,需要投入人力,物力,时间和金钱,一切没有结果的学习都是毫无意义的。那我们如何来分辨我们是否是真的努力呢?答案就是——输出,输出,大量的输出,用作品说话。你总不能说我学会了,但就是做不出来吧!这不就是耍流氓吗?

一鼓作气,趁热打铁

若有恒,何必三更眠五更起;最无益,莫过一日曝十日寒。

除了少数天才,学习新知识本来就不是一件快乐的事情。懒惰,拖延是人的本性,能够长期坚持学习的绝非常人。所以当我们开始要学一个知识或新技能的时候,不管是外部还是内部的驱动,一定会有"三分钟热度"。

比如,人工智能时代已经来临,行业压力让你觉得不学习就有失业风险。所以,你想学习Python来适应时代的发展。你买了教材,甚至还订阅了相关的在线视频课程。

刚开始,你全身都是劲儿,教材,安装开发环境,甚至还订阅了相关的在线视频课程,忙得不亦说乎。这种热度一般不会太持久,除非你的领导要求你学习,并在工作中使用。否则,没人能保证这个热度是否能够坚持到周五。

笔者的建议,要充分利用这个三分钟热度,快速把构建项目并跑起来,做一个能够有一定价值的demo,持续交互。比如,一个爬虫,一个可以用在工作中的自动化工具等。

一方面趁热打铁,一方面有成就感,同时也输出了。

万物即可为题

前面笔者提到,知识点其实需要一个载体来承载,比如一个实际应用实战,或者一道理论题目。否则就是纸上谈兵,无法落地。

过去在高校,我们学习都会有考试题目,那些题目更加理论化,属于"背多分"类型。但是进入工作岗位,特别是技术工作岗位,这就行不通了。因为技术工作不仅要强调过程,还要强调结果,只有过程和结果都对才是完成。

一直以来,前辈们都在强调动手实践的重要性,但是往往忽略了新手们并没有代入感。举个例子,所有人都明白学好英语的方式就是多说口语。但是实际上大多数都是“哑巴式英语”,道理都懂,语法倍儿棒,就是没法落地。

所以,题目一定是理论和实践相结合的,一定是符合实际应用场景的。这样的题目,才具有代入感,否则就是为学而学。

选择性的刷一些高质量的技术题目,绝对是提升认知的,并且事半工倍。

2021-06-12 于天府软件园

结语

以上只是笔者个人对学习技术的一点看法和思考,一家之言,姑妄言之姑妄听之。欢迎大家共同探讨和文明交流。

参考


从实力的角度出发来思考这道AOP题目的更多相关文章

  1. 与焊接厂交流——从生产角度出发的PCB设计心得

    上周的时候,去了趟加工厂盯电路板的焊接进度.然后在闲余的时候,跟焊接厂的工程师交流了一下,工程师从生产的角度,说了几个值得注意的事项: 1.元件的焊盘应该要窄长,不能过宽.因为,在过机表贴时,焊盘上的 ...

  2. 毕大从自身设计HSF的角度出发谈服务化这回事

    服务化的过去.现在和未来 原创: bluedavy HelloJava  9月18日 服务化毫无疑问是技术圈一直火热的buzzword,而且其实已经非常多年了,这在日益更新的技术圈还挺神奇的,作为在服 ...

  3. [html] 前端角度出发做好SEO需要考虑什么

    Meta标签优化 主要包括主题(Title),网站描述(Description),和关键词(Keywords).还有一些其它的隐藏文字比如Author(作者),Category(目录),Languag ...

  4. 从前端角度出发有哪些注意事项有利于SEO?

    1.提高页面加载速度. 能用css解决的不用背景图片,背景图片也尽量压缩大小,可以几个icons放在一个图片上,使用background-position找到需要的图片位置.可以减少HTTP请求数,提 ...

  5. 分享一道我认为非常有思考价值JavaScript题目

    这是一道综合性的题目,如果你能快速清晰的分析整理出来,那我相信你对JavaScript是有一定的理解的了.我会先将题目的图片截取出来,供大家思考,在结尾在给出我的分析过程和答案,作个总结. 好,废话不 ...

  6. 李洪强iOS经典面试题142-第三方框架及其管理

    李洪强iOS经典面试题142-第三方框架及其管理   第三方框架及其管理 使用过CocoaPods吗?它是什么?CocoaPods的原理? CocoaPod是一个第三方库的管理工具,用来管理项目中的第 ...

  7. 广州APP开发外包公司哪家比较好?广州达到信息技术有限公司技术到底怎么样?

        广州APP开发公司哪家比较好,广州手机APP软件开发公司广州达到信息表示:用户的刚性需求是公司使用手机APP软件盈利的根本前提和基础,所以开发一款手机APP应用时必须从客户的角度来思考.因此公 ...

  8. API Design

    REST API Design Guidelines V 1.0.201208 Draft 5 Last Updated: 08/31/2012 1       简介 本文档旨在规范REST API的 ...

  9. caffe2 教程入门(python版)

    学习思路 1.先看官方文档,学习如何使用python调用caffe2包,包括 Basics of Caffe2 - Workspaces, Operators, and Nets Toy Regres ...

随机推荐

  1. Python中shodan模块的使用

    关于shodan的安装和使用,传送门--> 渗透测试之Shodan的安装和使用 常用 Shodan 库函数 shodan.Shodan(key) :初始化连接API Shodan.count(q ...

  2. <JVM中篇:字节码与类的加载篇>01-Class字节码文件结构

    笔记来源:尚硅谷JVM全套教程,百万播放,全网巅峰(宋红康详解java虚拟机) 同步更新:https://gitee.com/vectorx/NOTE_JVM https://codechina.cs ...

  3. MindSpore保存与加载模型

    技术背景 近几年在机器学习和传统搜索算法的结合中,逐渐发展出了一种Search To Optimization的思维,旨在通过构造一个特定的机器学习模型,来替代传统算法中的搜索过程,进而加速经典图论等 ...

  4. MySQL redo与undo日志解析

    前言: 前面文章讲述了 MySQL 系统中常见的几种日志,其实还有事务相关日志 redo log 和 undo log 没有介绍.相对于其他几种日志而言, redo log 和 undo log 是更 ...

  5. JVM虚拟机 类加载过程与类加载器

    目录 前言 类的生命周期 类加载过程 加载 连接 验证 准备 解析 初始化 类加载器 三大类加载器 双亲委派模型 概念 为什么要使用双亲委派模型 源码分析 反双亲委派模型 参考 前言 类装载器子系统是 ...

  6. CRM帮助B2B企业持续改善战略决策「上篇」

    数据一直都是企业和客户的热点话题.客户期望得到更加个性化的感受,企业则期望使用数据来持续改善战略决策和给予更好的服务 B2B企业如何更合理地利用客户资料: 数据采集 长期以来,B2C行业的企业都是通过 ...

  7. 进程间IPC通信-stop waiting for thing to happen,go out and make them happen!!!

    进程间通信: System V IPC对象: ipcs -q:查看消息队列   ipcs -m:查看共享内存 ipcs -s:查看信号灯集 ipcrm -q:删除消息队列   ipcrm -m:删除共 ...

  8. C++PRIMER第二章前半部分答案

    C++PRIMER第二章前半部分答案 哈哈哈,为什么是前半部分呢,后半部分还在学习中,重新系统性的学习c++,共同进步嘛,不多说,跟我一起来看看吧,第三章开始才是新手收割的时候,慢慢来~~ 2.1&a ...

  9. 用JIRA管理你的项目——(一)JIRA环境搭建

    JIRA,大家应该都已经不陌生了! 最初接触这个工具的时候,我还在一味地单纯依靠SVN管理代码,幻想着SVN可以有个邮件通知,至少在项目成员进行代码修改的时候,我可以第一时间通过邮件获得这个消息! 当 ...

  10. PyCharm和JDK安装与配置(windows)

    原创 PyCharm和JDK安装与配置(windows) mb5cd21e691f31a关注0人评论2024人阅读2020-03-20 21:08:41   一.PyCharm安装与配置 PyChar ...