程序员该如何学习技术
程序员该如何学习技术
前言
学习是第一生产力,我从来都是这么认为的,人只有只有不断地学习才能意识到自己的缺点和不足,身为程序员,我更认为人们应当抱着终身学习的想法实践下去,这是我所一直践行且相信的。
高处不胜寒,只有站在更高的地方,才能欣赏更多的风景,当年老时再回味这一切,你会发现这都是值得的。
文章目录
- 程序员该如何学习技术
- 「查阅文档」
- 「阅读源码」
- 「勇于尝试」
「查阅文档」
这是我认为是最快也最好的学习方法。对于自己工作中常用到的技术,抽时间把官方文档通读一遍(其实篇幅都不大),绝对收获满满,因为官方文档内藏很多细节,真的值得一读。没事的时候多翻翻自己使用的框架/系统/平台的API,看看有哪些自己不知道或者没用过的功能,想想这个功能可以用来做什么,能不能解决现存的问题,或者优化当下的解决方案。
读过 Spring Boot/Spring 的官方源码之后我才知道:
-
如果你想使用基于XML的配置,SpringBoot 也完全支持,只要先使用
@Configuration
加载核心配置,然后通过@ImportResource
注解就可以使用 XML 配置文件啦。 -
总所周知,Spring Boot的自动配置是出了名的,如果你想了解当前应用的都配置了哪些自动配置,那么可以打开
--debug
开关,这样做可以启用核心日志器进行日志调试并且将具体情况输出到控制台。 -
什么依赖注入方式最好?看过Spring的官方文档就会知道,Spring 官方通常提倡使用构造器注入,因为它能够实现应用程序的组件作为不可变对象并且会确保所需依赖不为
null
。此外,构造器注入组件总是在返回客户端(调用)代码中处于完全初始化状态。但作为旁注,大量的构造器参数是一种糟糕的代码,这意味着类或许有太多的职责,应该重构代码以更好解决适当的关注点分离问题。
如果你是前端工程师,通读 HTTP 协议和 ECMAScript 标准,就能秒杀 95% 的同行,不开玩笑。不过如果实在没时间,我们也可以把官方文档当成工具书,有问题的时候翻一翻,我相信大部分的问题都能通过官方文档找到很好的解决方案
「阅读源码」
都说细节决定成败,所以此方法是深入学习开源技术的唯一途径。程序员只有理解了某个功能在底层是如何实现的,我们才能真正把握这段代码或这个方法又或者是工具类更适合用来做什么,不能用来做什么。
举几个例子,Java 语言中最常用的 String 类,如果你没看过 String 的源码那你不会知道 String类 toString
方法底层实现就是返回了字符串本身;
/*** 此对象(这已经是一个字符串了) 返回自身** @return 字符串本身*/public String toString() {return this;}
Collections 工具类的 sort 方法底层其实调用了 Arrays.sort() 方法进行排序,我第一次看的时候觉得很不可思议,JDK官方在代码复用这点上确实很厉害!
default void sort(Comparator<? super E> c) {Object[] a = this.toArray();// 这里调用了Arrays.sort()方法对数组进行排序Arrays.sort(a, (Comparator) c);// 然后使用迭代器重新设置元素ListIterator<E> i = this.listIterator();for (Object e : a) {i.next();i.set((E) e);}}
此外,HashSet的底层实现你没看过的话,绝对出乎你的意料,其空参构造仅仅就是 new 了一个 HashMap 而已,也就是说 HashSet
近乎就等于 HashMap
。高情商: HashSet
青出于蓝而胜于蓝;低情商: HashSet
就是套皮了的 HashMap
/*** 构造一个新的,空的set集合,其底层的HashMap实例默认初始化容量(16)、加载因子(0.75)*/public HashSet() {map = new HashMap<>();}
有兴趣的话,大家还可以看看 LinkedHashSet
、TreeSet
的底层实现和上面的是近乎一般无二的。
正如就算不明白怎么造汽车,我们也能把车开好。而如果多少知道一点底层的东西,开起来就会更得心应手。当车出现问题时,也不至于完全束手无策,只能蹲在路边等待救援。你Spring框架用了多少年了,却连一行源码都没读过?如果它是你女朋友,估计早该分手了。
「勇于尝试」
每个人都有机会,但不是每个人都有勇气,只要你勇敢地踏出这一步我认为你就成功了一半。这世界上有很多牛逼的程序员不一定是因为学的很多然后学历很高就非常厉害,反而是因为踩到的坑多了,遇到的bug多了,经历了这么多的事物,慢慢地可以应对所有的情况,最终成长为了一个牛逼的大佬 (PS:可能头发也会掉光)
鲁迅曾说过一句话:这世上本没有路,走的人多了,也便有了路。
我认为勇于尝试是学习任何技术的必经之路。在有保护的环境下进行大量的试错,是最高效的学习方法。现在虚拟机技术已经那么成熟,云服务器也很便宜,为什么不能分分钟搭建一个自己的服务器,然后在上面花式作死呢?我相信很多新手都听说过无数次 rm -rf /
的事故,但是你尝试过这个命令么?你知道这个命令输出之后是什么样子吗?你不知道,公司为我们提供的最有价值的东西,其实就是实战的机会。 我们所学习的技术,最终还是需要通过工作来变现,成为我们的经验。通过公司我们可以接触到真实的数据,了解真实的用户,观察真实的系统是怎样运转的,积累真正的经验…… ,给自己投资比什么都划算, 但是所谓的机会,只属于提前准备好的人,而大部分人只会随波逐流, 不要等到工作都安排到你身上了再去尝试。公司不是你的试验田,你也不该拿用户当小白鼠。若是公司没有给你机会,那只能说明你还没有准备好。
相关文章:

程序员该如何学习技术
程序员该如何学习技术 前言 学习是第一生产力,我从来都是这么认为的,人只有只有不断地学习才能意识到自己的缺点和不足,身为程序员,我更认为人们应当抱着终身学习的想法实践下去,这是我所一直践行且相信的。 高处不胜寒…...

springboot+vue交流互动系统(源码+文档)
风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的交流互动系统。项目源码以及部署相关请联系风歌,文末附上联系信息 。 💕💕作者:风歌&a…...
【2023华为OD笔试必会25题--C语言版】《01 预定酒店》——排序、二分查找
本专栏收录了华为OD 2022 Q4和2023Q1笔试题目,100分类别中的出现频率最高(至少出现100次)的25道,每篇文章包括原始题目 和 我亲自编写并在Visual Studio中运行成功的C语言代码。 仅供参考、启发使用,切不可照搬、照抄,查重倒是可以过,但后面的技术面试还是会暴露的。✨✨…...

C语言实现队列--数据结构
😶🌫️Take your time ! 😶🌫️ 💥个人主页:🔥🔥🔥大魔王🔥🔥🔥 💥代码仓库:🔥🔥魔…...

前端CSS经典面试题总结
前端CSS经典面试题总结 2.1 介绍一 下 CSS 的盒子模型?2.2 css 选择器优先级?2.3 垂直居中几种方式?2.4 简明说一下 CSS link 与 import 的区别和用法?2.5 rgba和opacity的透明效果有什么不同?2.6 display:none和visib…...

cookie、session、token的区别是什么
前言 今天就来说说session、cookie、token这三者之间的关系!最近这仨玩意搞得头有点大🤣 1.为什么会有它们三个? 我们都知道 HTTP 协议是无状态的,所谓的无状态就是客户端每次想要与服务端通信,都必须重新与服务端链接…...
leetcode分类刷题 -- 前缀和和哈希
力扣 class Solution { public int subarraySum(int[] nums, int k) { Map<Integer,Integer> map new HashMap<>(); int count0,sum0; map.put(0,1); for(int i:nums){ sum i; if(map.containsKey(sum-k)) count map.get(sum-k); map.compute(sum,(key,v)->…...

浅谈作为程序员如何写好文档:了解读者
我作为从一名懵懂的实习生转变为工程师的工作经历中,伴随着技术经验的成长,也逐渐意识到了编写文档是知识和经验传递给其他人的最有效方式。通过文档,可以分享我的技术知识和最佳实践,使其他人更好地理解我的工作。在这里…...

一文读懂国内首本《牛客2023金融科技校园招聘白皮书》
金融科技人才作为金融数字化转型的关键支撑,但当下金融科技人才培养体系尚未形成,优秀的金融科技人才供不应求,目前存在严重的人才供给问题。 据调研数据统计,96.8%的金融机构存在金融科技人才缺口,54.8%的机构认为新…...

深度学习03-卷积神经网络(CNN)
简介 CNN,即卷积神经网络(Convolutional Neural Network),是一种常用于图像和视频处理的深度学习模型。与传统神经网络相比,CNN 有着更好的处理图像和序列数据的能力,因为它能够自动学习图像中的特征&…...
你真正知道什么是品牌营销么?颠覆你旧有认知
什么是品牌营销,新时代也需要新时代的定义和诠释! 尤其这次疫情加剧了行业竞争,让很多企业都开始重新重视品牌建设,以此实现对产品的价格保护,脱离同质化恶性竞争;提高品牌知名度,实现更高价值…...

pytorch 测量模型运行时间,GPU时间和CPU时间,model.eval()介绍
文章目录 1. 测量时间的方式2. model.eval(), model.train(), torch.no_grad()方法介绍2.1 model.train()和model.eval()2.2 model.eval()和torch.no_grad() 3. 模型推理时间方式4. 一个完整的测试模型推理时间的代码5. 参考: 1. 测量时间的方式 time.time() time.…...

十三、超时重试机制
目录 超时配置和重试机制 FeignClient 、Ribbon 、 Hystrix三个之间配置优先级的关系 配置常用属性 Ribbon超时和重试配置: Ribbon重试次数计算公式: FeignClient 超时配置: Hystrix超时配置: Hystrix超时计算公式: 超时配…...

JAVA常用API - Runtime和System
文章目录 前言 大家好,我是最爱吃兽奶,今天给大家带来JAVA常用API中的Runtime类和System类 那么就让我们一起去看看吧! 一、Rubtime 1.Rubtime是什么? 2.Runtime常用方法 Runtime提供了很多方法,在这里演示两个 public static Runtime getRuntime(): 返回当前运行时环境的…...

ANR实战案例 - FCM拉活启动优化
系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 文章目录 系列文章目录前言一、Trace日志分析二、业务分析1.Firebase源码分析2.Firebase官方查看官方文档Dem…...

Kali-linux查看打开的端口
对一个大范围的网络或活跃的主机进行渗透测试,必须要了解这些主机上所打开的端口号。在Kali Linux中默认提供了Nmap和Zenmap两个扫描端口工具。为了访问目标系统中打开的TCP和UDP端口,本节将介绍Nmap和Zenmap工具的使用。 4.4.1 TCP端口扫描工具Nmap 使…...

判断浏览器是否支持webp图片
.WebP是谷歌主导的开放免费的网络图像格式,其核心编码来自VP8也就是同时支持WebP图片和WebM视频等。 这种图像格式追求的并不是无损画质,而是在有损画质的情况下尽可能的压缩图像体积但也尽量降低清晰度下降。 谷歌资助和发展该图像格式最主要的目的就是…...

【Qt编程之Widgets模块】-007:QTextStream类及QDataStream类
1 概述 QTextStream和QDataStream都是对流进行操作 QTextStream只能普通类型的流操作像QChar、QString、int…,其实就很类似我们c或者c中读写文件的感觉, QDataStream就厉害了,无论是QTextStream的普通类型的流操作还是一些特殊类型的流操作…...
js对map排序,后端返回有序的LinkedHashMap类型时前端获取后顺序依旧从小到大的解决方法
js对map排序,后端返回有序的LinkedHashMap类型时前端获取后顺序依旧从小到大的解决方法 js对map排序,后端返回有序的LinkedHashMap类型时前端获取后顺序依旧从小到大的解决方法 [{"2020": [{"id": 39,"createTime": &quo…...

JMX vs JFR:谁才是最强大的JVM监控利器?
大家好,我是小米!今天我们来聊一聊JVM监控系统,特别是关于JMX和JFR的使用。你是否有过在线上应用出现性能问题时,无法准确获取关键指标的困扰呢?那么,不妨听听我给大家带来的解决方案。 什么是JMX 首先&a…...

Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...
Linux链表操作全解析
Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

LeetCode - 394. 字符串解码
题目 394. 字符串解码 - 力扣(LeetCode) 思路 使用两个栈:一个存储重复次数,一个存储字符串 遍历输入字符串: 数字处理:遇到数字时,累积计算重复次数左括号处理:保存当前状态&a…...

汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...
linux 下常用变更-8
1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...
【决胜公务员考试】求职OMG——见面课测验1
2025最新版!!!6.8截至答题,大家注意呀! 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:( B ) A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

uniapp微信小程序视频实时流+pc端预览方案
方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度WebSocket图片帧定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐RTMP推流TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...

前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...
快刀集(1): 一刀斩断视频片头广告
一刀流:用一个简单脚本,秒杀视频片头广告,还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农,平时写代码之余看看电影、补补片,是再正常不过的事。 电影嘛,要沉浸,…...

[ACTF2020 新生赛]Include 1(php://filter伪协议)
题目 做法 启动靶机,点进去 点进去 查看URL,有 ?fileflag.php说明存在文件包含,原理是php://filter 协议 当它与包含函数结合时,php://filter流会被当作php文件执行。 用php://filter加编码,能让PHP把文件内容…...