程序员怎么尽快学会某项技术,达到应付面试水平?,2024年阿里Web前端岗面试必问

这一步也很重要,一直停留在表层技术并不能帮你拿到一个好的offer。

5. 出去装X吧

等你对思维导图了然于胸,并且有了一定深度之后,就去面试吧,很大可能会把面试官忽悠住,以为你是个隐藏王者。我靠这个方法硬生生把Redis从零学到了源码级,蚂蚁金服的面试官都被我忽悠瘸了。

晶体记忆是个什么鬼?我的感觉就是一个知识体系已经被大脑完全吸收并且压缩成一个结晶。处于这种状态时你会觉得这个知识体系就那么大一点,但你真的去扩展回忆时,会发现里面的内容真特么多,而且都是已掌握的。


Update 1:此方法不一定适合所有人

打铁还需自身硬,用这种速成方法首先你得有不错的基础,否则在研究面试题解法这一步你就坚持不下来,因为看不懂原理。靠死记硬背永远都过不了面试。

保留好这些知识图谱,它们都是你的财富。找到工作后也最好每天抽一个分支出来复习,在深冬冰封之际,我等食物链底层的码农要时刻保持武器的锋利,自己足够强悍才能抵御风险

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


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. 组成链路

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
img

数据结构与算法

这一块在笔试、面试的代码题中考核较多,其中常考的数据结构主要有:数组、链表、队列、栈、Set、Map、哈希表等,不同数据结构有不同的方法以及储存原理,这些算是技术岗的必备知识。算法部分主要分为两大块,排序算法与一些其他算法题

排序算法根据考频高低主要有:快速排序、归并排序、堆排序、冒泡排序、插入排序、选择排序、希尔排序、桶排序、基数排序、Timsort这十种,这类考核点要么是算法的时间、空间复杂度、稳定度,要么是直接手写代码,故在理解算法原理的同时,对JS语言版的排序算法代码也要加强记忆。

  • 二叉树层序遍历
  • B 树的特性,B 树和 B+树的区别
  • 尾递归
  • 如何写一个大数阶乘?递归的方法会出现什么问题?
  • 把多维数组变成一维数组的方法
  • 知道的排序算法 说一下冒泡快排的原理
  • Heap 排序方法的原理?复杂度?
  • 几种常见的排序算法,手写
  • 数组的去重,尽可能写出多个方法
  • 如果有一个大的数组,都是整型,怎么找出最大的前 10 个数
  • 知道数据结构里面的常见的数据结构
  • 找出数组中第 k 大的数组出现多少次,比如数组【1,2, 4,4,3,5】第二大的数字是 4,出现两次,所以返回 2
  • 合并两个有序数组
  • 给一个数,去一个已经排好序的数组中寻找这个数的位 置(通过快速查找,二分查找)

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img

找,二分查找)

[外链图片转存中…(img-fxFyVCK7-1712959982731)]

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-UDp8meP1-1712959982731)]

  • 11
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java程序员面试中可能会问到二叉树的高度,这是一个常见的问题。二叉树是一种数据结构,它由节点组成,每个节点最多有两个子节点。二叉树的高度表示从根节点到最深节点的距离。以下是Java实现二叉树高度的代码示例: ``` public class BinaryTreeHeight { //定义二叉树节点 class Node { int data; Node left; Node right; public Node(int data) { this.data = data; left = null; right = null; } } //计算二叉树高度的方法 public int getHeight(Node root) { if (root == null) { return 0; } else { int leftHeight = getHeight(root.left); int rightHeight = getHeight(root.right); return Math.max(leftHeight, rightHeight) + 1; } } //测试方法 public static void main(String[] args) { BinaryTreeHeight tree = new BinaryTreeHeight(); Node root = tree.new Node(1); root.left = tree.new Node(2); root.right = tree.new Node(3); root.left.left = tree.new Node(4); root.left.right = tree.new Node(5); System.out.println("二叉树的高度是:" + tree.getHeight(root)); } } ``` 在这个示例中,我们定义了一个Node类来表示二叉树的节点,它包含节点值以及左右子节点。然后,我们定义了一个getHeight()方法来计算二叉树的高度。在计算高度时,我们使用递归来遍历左右子树,并计算它们的高度。最后,我们返回左右子树中较大的高度加1作为二叉树的高度。 在面试中,你可能会被问到如何在二叉树中查找一个节点、如何插入和删除一个节点等问题。因此,在准备Java程序员面试时,建议你熟悉二叉树的基本操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值