程序员怎么尽快学会某项技术,达到应付面试水平?

此方法具有普适性,我正在用这个方法学习金融知识,效果还不错。


Update 2: 关于小黄鸭学习法

在第三步中,我们需要复述思维导图的内容,以达到透彻理解的目的,这其实就是小黄鸭学习法。

简而言之就是把知识讲解给别人,比如一只玩具小黄鸭。。。检验自己是否完全理解一个知识的最好方式就是教会一只小黄鸭。

这个方法是有神经学依据的。据我所知,人脑非常善于为不合理的事情找一个合理的解释,也就是所谓的脑补

具体研究过程可以去看一些裂脑人的实验记录,当右脑出现负面情绪时,左脑并不知道发生了什么(因为左右脑的信息交换通道被切断),但最终左脑会脑补出一个“合理”的解释,并相信那就是事实,然而这个解释实际上是错误的。

因此当你学会了一个知识点之后,你的大脑会产生“朕已完全学会”这样的假象。

然而当你尝试给别人讲解该知识点时,就会发现其实还有很多解释不通的地方,这种情况基本上100%会出现。

另外,在编程实践中,用这种方法可以快速排查故障,快速弄懂复杂的代码等等。

打个比方,如果你看不懂一段代码背后的业务逻辑或实现细节,那么可以试着用几句话来精确描述这段代码的功能和实现手段。如果能做到这一点,说明你已经懂了。

不要以为这是多此一举,人脑不可能在任何时候都保持清醒。在实际开发中,我们的大脑并不会用自然语言来处理代码,而是直接进行逻辑和抽象思维。这就产生了很多脑补,你对代码的理解很有可能是错误的,想必很多人都经常遇到。

这个方法看起来有点蠢,实际上非常有用。


Update 3: 关于结构化思维

玩知乎快6年,好不容易有了个千赞的答案,就再说点干货。

之前我们使用了结构化思维的一些手段(思维导图),但这仅仅是冰山一角。对于程序员来说,具备良好的结构化思维习惯会显著提高生产力,它的作用比小黄鸭学习法还要大,我已经在自己身上验证过多次。

大家可以自行在知乎搜索“结构化思维”来进行深入学习,有很多优秀的答案。接下来我只说说自己常用的几种思维方式以及在编程中的实施。


5W1H法

这个方法会的人比较多,这里主要介绍一下在编程实践中怎么进行5W1H分析。遇到一个问题或需求,按照以下步骤分析:

  1. 写一个列表,每一项分别为What, Why, Where, When, Who, How

  2. What:简短的用几句话精准的描述出问题的内核是什么,需求的本质是什么。这是总体纲领,确保你在后续的工作中不会走偏。

  3. Why:用一两句话描述为什么要做这件事。这可以确保你做的事情有意义,并且目标是正确的。

  4. Where:在空间维度上静态的分析问题。宏观上,问题涉及到哪些组件;微观上,该问题涉及到哪些关键的类、方法、配置等等。原则上你可以把任何与空间有关的因素都扔进这个篮子里,分析的越全面越好。

  5. When:在时间维度上动态的分析问题。宏观上,组件之间怎么互相通讯;微观上,上述的代码何时被触发等等。原则上你可以把任何与时间有关的因素都扔进这个篮子,同样分析的越全面越好。Where和when常常会有重叠的因素,这个不要紧,随便你放哪里都行。

  6. Who:在人物关系这个维度上分析问题。一般这一步比较直观,列举出问题涉及到的人、人与人之间的关系以及每个人的职责即可。这样你遇到事情就能够找到正确的人。

  7. How:用一个列表来描述怎么完成这件事。这一步其实是一个总结,把前面五个维度的因素综合到一起,来找出一个优质省力的解决方案,然后按照解决方案来实施即可。

5W1H思维法最大的好处就是强制你去进行多个维度的全面思考。就像我之前说的,我们的大脑很喜欢脑补,如果不能明确的一条一条去分析,我们的大脑就会进行各种跳跃性的思维,最终遗漏了很多因素。在稍微复杂的项目里,你可能连需求的内核是什么都弄不清楚,别问我是怎么知道的。


链路法

我自己总结的一个方法,对程序进行线性的因果分析。无论是单线程、多线程还是复杂的系统,用静态眼光来看,程序都是线性的,这是此方法的依据。具体步骤:

  1. 组成链路

遇到一个问题或需求时,先用5W1H法进行多维度分析,再把Where篮子里的因素按照When因素来粗略排序,一个一个链接起来。如果你对自己的工作足够了解,这一步应该会比较快。

2. 分析链路

按照你遇到问题的类型来进行不同的分析:

  • 如果遇到的是一个故障排查问题,那么仔细观察链路的每个节点,根据问题上下文,从最有可能出问题的几个节点开始验证和推断,缩小问题半径,直到找出问题所在。其实很多人进行故障排查时都在这么做。

  • 如果遇到的是一个改祖传屎山的需求,那么进行链路分析时就需要寻找代码中的太极节点。所谓太极点,就是能够以小博大的关键部位。我们都知道祖传代码改的越多越容易出毛病,为了安全着想,我们一定要尽量控制修改范围。找到这些太极点,就可以在少量的改动下,完成需求。

  • 如果遇到的是一个测试的需求,那么可以对链路中的每个节点进行扩展分析,列举出每个节点可能出现的边界条件、异常情况等等,再写测试用例来覆盖到这些节点。

链路法最大的好处就是让你不再依靠直觉去做事,在各个阶段都知道自己在做什么。有时候直觉很重要,尤其是故障排查时,但如果你只依靠直觉,那么肯定会遗漏掉很多有用的信息。如果你只依靠直觉去改代码,那么最终结果大概率不是最优解,无形中会增加很多测试和验证成本。


其他方法

STAR法:此方法常常用来向别人描述某一个具体的事情或问题。在沟通中用的比较多,但在具体编程中用的不多所以请自行搜索。

总结

阿里伤透我心,疯狂复习刷题,终于喜提offer 哈哈~好啦,不闲扯了

image

1、JAVA面试核心知识整理(PDF):包含JVMJAVA集合JAVA多线程并发,JAVA基础,Spring原理微服务,Netty与RPC,网络,日志,ZookeeperKafkaRabbitMQ,Hbase,MongoDB,Cassandra,设计模式负载均衡数据库一致性哈希JAVA算法数据结构,加密算法,分布式缓存,Hadoop,Spark,Storm,YARN,机器学习,云计算共30个章节。

image

2、Redis学习笔记及学习思维脑图

image

3、数据面试必备20题+数据库性能优化的21个最佳实践

image

-oplNREre-1714774316085)]

2、Redis学习笔记及学习思维脑图

[外链图片转存中…(img-5UtrG3G9-1714774316085)]

3、数据面试必备20题+数据库性能优化的21个最佳实践

[外链图片转存中…(img-cpMhLJJb-1714774316086)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

  • 30
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值