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

高处不胜寒,只有站在更高的地方,才能欣赏更多的风景,当年老时再回味这一切,你会发现这都是值得的。
文章目录
- 程序员该如何学习技术
- 「查阅文档」
- 「阅读源码」
- 「勇于尝试」
「查阅文档」

这是我认为是最快也最好的学习方法。对于自己工作中常用到的技术,抽时间把官方文档通读一遍(其实篇幅都不大),绝对收获满满,因为官方文档内藏很多细节,真的值得一读。没事的时候多翻翻自己使用的框架/系统/平台的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…...
Java 语言特性(面试系列1)
一、面向对象编程 1. 封装(Encapsulation) 定义:将数据(属性)和操作数据的方法绑定在一起,通过访问控制符(private、protected、public)隐藏内部实现细节。示例: public …...
关于nvm与node.js
1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...
【AI学习】三、AI算法中的向量
在人工智能(AI)算法中,向量(Vector)是一种将现实世界中的数据(如图像、文本、音频等)转化为计算机可处理的数值型特征表示的工具。它是连接人类认知(如语义、视觉特征)与…...
零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...
tree 树组件大数据卡顿问题优化
问题背景 项目中有用到树组件用来做文件目录,但是由于这个树组件的节点越来越多,导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多,导致的浏览器卡顿,这里很明显就需要用到虚拟列表的技术&…...
均衡后的SNRSINR
本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt 根发送天线, n r n_r nr 根接收天线的 MIMO 系…...
iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈
在日常iOS开发过程中,性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期,开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发,但背后往往隐藏着系统资源调度不当…...
Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
Oracle11g安装包
Oracle 11g安装包 适用于windows系统,64位 下载路径 oracle 11g 安装包...
通过MicroSip配置自己的freeswitch服务器进行调试记录
之前用docker安装的freeswitch的,启动是正常的, 但用下面的Microsip连接不上 主要原因有可能一下几个 1、通过下面命令可以看 [rootlocalhost default]# docker exec -it freeswitch fs_cli -x "sofia status profile internal"Name …...
