如何学习的

不可否认,无论是谁都不是全知全能的,日常开发也远没有你们想的那么诗情画意,哪怕大佬也很少敢直播敲代码。为什么?因为他们不想让别人发现:哦!原来大佬写代码也要边写边百度。

但不可否认,大佬就是比我们厉害。

所以,最终是什么拉开了大佬与我们的差距呢?个人认为是:

  • 快速学习
  • 知识迁移

要做到以上两点,可以从知识的广度和深度分别入手。

为什么要拓展知识的广度?

如果你平时善于观察和总结,会发现在编程世界中有很多思想是一样的,这也是为什么Java程序员能够在一两周内就掌握Python并开发出一个爬虫程序的原因。回到Java,其实问题还是一样。如果你从来没有接触过读写分离,你可能打死都想不到它可以作为解决高并发的策略之一。但是一旦你接触过了Redis的主从模式实现读写分离,那么往后学习Canal、Binlog啥的都会十分轻松,只需要记下具体的配置步骤,注意一些坑即可。又比如你接触过MySQL的redo log、undo log,那么接触SEATA分布式事务时也会非常轻松,因为SEATA几乎就是在宏观上进行“抄袭”。

如何拓展知识的广度?

那么问题来了,如何较为不痛苦地、持续地拓展我们知识的广度呢?

注意,为什么我强调“较为不痛苦地”、“持续地”?很多人以为学习之所以难,是因为知识本身难,门槛高,学不会就是学不会。但以我多年的自学经验,更多时候学习之所以难,是因为它难以坚持,尤其在这个充满诱惑的时代。

大家觉得看视频痛苦还是啃书本痛苦?我想大部分离开学校的人都会觉得啃书本更为痛苦。所以我推荐本身自制力不佳的同学,可以尝试看视频学习。而我,最常逛的视频网站就是B站。可以毫不夸张地说,如果我一天有10小时在学习,那么其中8小时肯定在B站,边看边做笔记。

我习惯总结工作中遇到的问题,然后去B站搜索相应的视频,先给自己的大脑塞进一些基本概念,然后回过头敲代码、看源码,如果卡住了,再百度再看视频。比如有一段时间我对公司项目中配置的线程池比较感兴趣,研究源码发现无论如何都避不开FutureTask这个类,于是点进源码看了一会儿,卡住了。随手打开B站搜索:

图片.png

有了大概的概念后,又百度了几篇文章,讲得一般,但多少解答了一些疑惑。

这样的例子还有很多很多,比如Redis、SQL优化等,在你脑中完全没有概念时,都可以先去B站找一些靠谱的机构发布的视频学习。比如B站也有黑马程序员、尚硅谷,甚至还有一些盗版视频。请大家多多支持正版,因为我们国家知识版权还没有特别完善,盗版特别严重,作为创作者真的很不容易,辛辛苦苦录制一两个月的视频被两块钱贱卖,久而久之赚不到钱就不创作了,最终受伤害的还是读者。

考虑到视频本身信息密度较低,大家可以和我一样倍速播放。B站默认最多2倍速,我推荐大家安装一个chrome插件,可以任意倍速:

Video Speed Controller-视频加速播放

图片.png

一般新手可能只能承受1.5倍,所以B站原生的就行了。我老有一种迷信,这个加速的骚操作其实在加快时间流逝,否则我头发怎么掉得这么快。

如何拓展知识的深度?

所谓知识的深度,其实主要指的是你要对底层实现有所了解,也就是养成看源码的习惯。但不要为了看源码而硬啃,你应该带着目的去看,而且要大胆地猜测+小心地求证。我原先也很排斥看源码,但去年业余时间看了近三星期的Spring源码后,就突然免疫了,总之不会那么排斥,起码心里不会觉得源码很神圣,而是像看同事的代码一样,很习惯地就点进去了。

但有几点会阻碍我们看源码:

  1. 设计模式
  2. 数据结构

对于Spring源码而言,更多的是设计模式,而JDK源码则涉及很多数据结构。有必要的话,可以稍微了解一些常用的设计模式和数据结构:

  • 模板方法模式
  • 策略模式
  • 工厂模式
  • 动态代理
  • 观察者模式
  • 责任链模式
  • 装饰者模式
  • 链表

如果感兴趣,你可以去B站搜索一些设计模式相关的视频。

图片.png

第二个视频出自李建忠老师,讲得是真的好,所谓大象无形,完全不拘泥具体的语言,从思想层面给你剖析每一种设计模式。不足的地方在于采用C++作为教学语言,虽然不影响理解,但是初学者看不到具体的应用代码,未免遗憾。

第三个视频出自马士兵老师。这个视频我记得原先是腾讯课堂收费的,我还买过,499。看了几集就没看了,但内容还是不错的,Java语言教学,言简意赅通俗易懂。不足的地方在于个别设计模式讲得很简略,但瑕不掩瑜,因为我也觉得有些设计模式并不适合用在业务代码中。

如果还想深究,可以看看尚硅谷的视频或者菜鸟教程,但个人觉得没必要,你能在实战中应用模板方法模式、策略模式就已经很厉害了。它们也是我认为最有用、最可能被用在业务代码中的两种设计模式。

至于数据结构,我还没好好学过,就不推荐了,大家自己感兴趣就去找找吧。

学完设计模式后,如果你想看Spring源码的话,可以继续在B站搜索:

图片.png

简直不要太多。

我说一下看Spring源码的一些注意点:

  • 先主干,后分支
  • 挑感兴趣的看,实际工作用不到的别看

看所谓的架构师课程解析Spring源码时,不要一直被牵着鼻子走,什么Spring如何解决循环依赖,个人觉得除了应付面试,意义不大。

你应该先搞懂主干流程,顺着项目启动顺序,观察Spring如何加载BeanDefinition、如何实例化、会经过哪些BeanPostProcessor。

搞明白主干流程后,再去研究@Component、@Bean、@Import这些标签在上述流程中的什么位置起作用的。

加入容器后,有兴趣可以继续研究@Transactional、@Scheduled、@Async等常用注解的底层实现,做到知其然知其所以然。

最后稍微翻一下AOP的源码。

关于JDK源码,主要关注JUC即可,可以看马士兵老师的视频。

图片.png

应付面试足够了。

日常状态

坐地铁可以打开掘金随手搜一些感兴趣的文章,比如BIO、NIO或者Redis缓存啥的,打发时间。一些微信公众号也可以看看,但现在公众号质量越来越低了。我一般推荐大家购买各大平台口碑较好的专栏,系统学习一波。不要嫌贵,也就几十块钱,就当充会员去广告,这样你就不用忍受公众号突如其来的硬广(把人骗进去关门打狗,哎)...

最后,最重要的还是自己看完多敲一些Demo验证。私以为,如果你能设计Demo验证自己的想法,就代表你已经学会独立思考,起码不会人云亦云,被带偏都不知道。

学习时应该把自己当做一块磁铁,把每一个视频有用的、通用的知识点吸出来,写成博客或笔记,整理成自己的通用模块,不断完善改进,以后做项目可以直接拷贝过去,类似中学时代的错题集,真的很好用。

热门文章

暂无图片
编程学习 ·

C语言二分查找详解

二分查找是一种知名度很高的查找算法,在对有序数列进行查找时效率远高于传统的顺序查找。 下面这张动图对比了二者的效率差距。 二分查找的基本思想就是通过把目标数和当前数列的中间数进行比较,从而确定目标数是在中间数的左边还是右边,将查…
暂无图片
编程学习 ·

GMX 命令分类列表

建模和计算操作命令: 1.1 . 创建拓扑与坐标文件 gmx editconf - 编辑模拟盒子以及写入子组(subgroups) gmx protonate - 结构质子化 gmx x2top - 根据坐标生成原始拓扑文件 gmx solvate - 体系溶剂化 gmx insert-molecules - 将分子插入已有空位 gmx genconf - 增加…
暂无图片
编程学习 ·

一文高效回顾研究生课程《数值分析》重点

数值分析这门课的本质就是用离散的已知点去估计整体,就是由黑盒子产生的结果去估计这个黑盒子。在数学里这个黑盒子就是一个函数嘛,这门课会介绍许多方法去利用离散点最大化地逼近这个函数,甚至它的导数、积分,甚至微分方程的解。…
暂无图片
编程学习 ·

在职阿里5年,一个28岁女软测工程师的心声

简单的先说一下,坐标杭州,14届本科毕业,算上年前在阿里巴巴的面试,一共有面试了有6家公司(因为不想请假,因此只是每个晚上去其他公司面试,所以面试的公司比较少) ​ 编辑切换为居中…
暂无图片
编程学习 ·

字符串左旋c语言

目录 题目: 解题思路: 第一步: 第二步: 第三步: 总代码: 题目: 实现一个函数,可以左旋字符串中的k个字符。 例如: ABCD左旋一个字符得到BCDA ABCD左旋两个字符…
暂无图片
编程学习 ·

设计模式--观察者模式笔记

模式的定义与特点 观察者(Observer)模式的定义:指多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。这种模式有时又称作发布-订阅模式、模型-视图模式&#xf…
暂无图片
编程学习 ·

睡觉突然身体动不了,什么是睡眠痽痪症

很多朋友可能有这样的体验,睡觉过程中突然意识清醒,身体却动弹不了。这时候感觉非常恐怖,希望旁边有一个人推自己一下。阳光以前也经常会碰到这样的情况,一年有一百多次,那时候很害怕晚上到来,睡觉了就会出…
暂无图片
编程学习 ·

深入理解C++智能指针——浅析MSVC源码

文章目录unique_ptrshared_ptr 与 weak_ptrstd::bad_weak_ptr 异常std::enable_shared_from_thisunique_ptr unique_ptr 是一个只移型别(move-only type,只移型别还有std::mutex等)。 结合一下工厂模式,看看其基本用法&#xff…
暂无图片
编程学习 ·

@TableField(exist = false)

TableField(exist false) //申明此字段不在数据库存在,但代码中需要用到它,通知Mybatis-plus在做写库操作是忽略它。,.
暂无图片
编程学习 ·

Java Web day15

第十二章文件上传和下载 一、如何实现文件上传 要实现Web开发中的文件上传功能,通常需要完成两步操作:一.是在Web页面中添加上传输入项;二是在Servlet中读取上传文件的数据,并保存到本地硬盘中。 需要使用一个Apache组织提供一个…
暂无图片
编程学习 ·

【51nod 2478】【单调栈】【前缀和】小b接水

小b接水题目解题思路Code51nod 2478 小b接水 题目 输入样例 12 0 1 0 2 1 0 1 3 2 1 2 1输出样例 6解题思路 可以发现最后能拦住水的都是向两边递减高度(?) 不管两个高积木之间的的积木是怎样乱七八糟的高度,最后能用来装水的…
暂无图片
编程学习 ·

花了大半天写了一个UVC扩展单元调试工具

基于DIRECTSHOW 实现的,用的是MFC VS2019. 详见:http://www.usbzh.com/article/detail-761.html 获取方法 加QQ群:952873936,然后在群文件\USB调试工具&测试软件\UVCXU-V1.0(UVC扩展单元调试工具-USB中文网官方版).exe USB中文网 USB中文…
暂无图片
编程学习 ·

贪心(一):区间问题、Huffman树

区间问题 例题一:区间选点 给定 N 个闭区间 [ai,bi]请你在数轴上选择尽量少的点,使得每个区间内至少包含一个选出的点。 输出选择的点的最小数量。 位于区间端点上的点也算作区间内。 输入格式 第一行包含整数 N,表示区间数。 接下来 …
暂无图片
编程学习 ·

C语言练习实例——费氏数列

目录 题目 解法 输出结果 题目 Fibonacci为1200年代的欧洲数学家,在他的着作中曾经提到:「若有一只免子每个月生一只小免子,一个月后小免子也开始生产。起初只有一只免子,一个月后就有两只免子,二个月后有三只免子…
暂无图片
编程学习 ·

Android开发(2): Android 资源

个人笔记整理 Android 资源 Android中的资源,一般分为两类: 系统内置资源:Android SDK中所提供的已经定义好的资源,用户可以直接拿来使用。 用户自定义资源:用户自己定义或引入的,只适用于当前应用的资源…
暂无图片
编程学习 ·

零基础如何在短时间内拿到算法offer

​算法工程师是利用算法处理事物的职业 算法(Algorithm)是一系列解决问题的清晰指令,也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。 如果一个算法有缺陷,或不适合于某个问题,执…
暂无图片
编程学习 ·

人工智能:知识图谱实战总结

人工智能python,NLP,知识图谱,机器学习,深度学习人工智能:知识图谱实战前言一、实体建模工具Protegepython,NLP,知识图谱,机器学习,深度学习 人工智能:知识图…
暂无图片
编程学习 ·

【无标题】

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注…