大厂程序员是如何学习技术的?(程序员进大厂有多难)
大家好呀,我是 飞鱼
很多同学每次学新东西新技术的时候不知道怎么学?
自己看文章博客也看不懂,都是直接去看的视频。
有的时候视频看完也会尝试写简单的Demo。
但是放入自己的需求里面又不会写了,时常感觉学的东西好晦涩,看不懂。
其实是没有掌握学习的方法:
可以先写几个简单的Demo练练手,放入你的需求,多思考。
多看别人是怎么实现的,也可以问问组里的更有经验的,都是可以学习的。
学习一门编程技术,我觉得可以分为两部分:
API(使用)和底层原理:
举例比如 Java 中的 Synchronized 关键字:
用法就是锁住某一块区域,这就是
Synchronized的 API。它最底层其实就是通过 C++ 中的
ObjectMonitor类来实现的Monitor锁。
学 API 是为了平时工作干活(拧螺丝)的时候能灵活运用。
底层原理是为了面试(造火箭),还有就是平时出现问题,知道怎么去排查。
所以学 1 门技术,只需要把这两点学清楚就行。
那应该怎么去学呢?
首先,想学 1 门新技术,之前完全没有接触过,这个时候我们可以找个入门文章或者入门 Demo 来看一看,先入个门。
比如你要学一门编程语言,肯定是需要写一下 Hello World。
这个时候你已经掌握了这门语言是怎么跑起来的了,怎么输出数据了。
你现在不需要去纠结这个 Hello World 是怎么运行的,这个阶段了解这些完全没必要,浪费你学习的激情。
下一步你要做的是应该找一下这个技术对应的入门书籍或者入门视频教程:
不要找那种非常晦涩难懂的,找用法讲解的就行,当你学完之后,可以再找几个练习做一做。
学完用法 API 之后,可以了解下这门技术的原理了:
比如想知道 Java 是怎么运行的,你可以去看看 JVM。
想知道 Java 中的
ArrayList是怎么实现的,你可以去网上搜下对应的原理讲解或者自己去看 JDK 的源码。这里不需要每个细枝末节都去纠结原理,学一些核心的、常见的就行了。
这 3 块,入门 Demo、用法 API、核心底层原理,你学完之后,基本上就已经掌握了这个技术了。
对于新手,会非常纠结的一个点,就是学了后面忘了前面:
这里完全没必要焦虑,因为编程不是闭卷考试,忘了就忘了。
记得有这个东西就行了,当你要用的时候,去查一下就好了(多用AI)。
其实等你工作后,那些常用的语法,你用的次数多了,想忘都忘不掉。
题目描述
给你一个区间数组
intervals,其中intervals[i] = [starti, endi],且每个starti都 不同 。区间
i的 右侧区间 是满足startj >= endi,且startj最小 的区间j。返回一个由每个区间
i对应的 右侧区间 下标组成的数组。如果某个区间
i不存在对应的 右侧区间 ,则下标i处的值设为-1。
代码实现
class Solution {
publicint[] findRightInterval(int[][] intervals) {
int n = intervals.length;
int[] res = newint[n];
Map map = new HashMap<>();
for (int i = 0; i < n; i++) {
map.put(intervals[i][0], i);
}
Arrays.sort(intervals, (a, b) -> {
return a[0] - b[0];
});
for (int[] interval : intervals) {
int target = interval[1];
//二分查找
int l = 0, r = n - 1;
while (l < r) {
int m = (l + r) >> 1;
if (intervals[m][0] >= target) r = m;
else l = m + 1;
}
int index = map.get(interval[0]);
if (target <= intervals[l][0]) {
res[index] = map.get(intervals[l][0]);
}
else res[index] = -1;
}
return res;
}
}