移动互联网时代,IT 系统变得愈加复杂,对我们程序员的要求也是越来越高,技术不断更新,我们还不能停止学习,停下来了就会被打上一个‘不合格的程序员’的标签,如何成为一位「不那么差」的程序员?「不那么差」的程序员又需要掌握一些什么知识呢?这篇文章就与大家聊一聊这个话题。
以下内容仅代表我从业以来所积累的相关经验,不对不全的地方还请大家海涵,下面我会从硬技能、软实力这些方面尽量阐述我所认为的 “不那么差的程序员” 应当做到哪些技能。
技术栈
作为一名码代码的程序员,怎么说干的还是技术活。既然是技术活那专业实力就得过硬,下面我会按照相关类别谈谈我们应该掌握哪些东西。
计算机基础
主要需要掌握网络与操作系统方面相关的知识(这些知识前期是比较枯燥的)但只要你还在做计算机相关的工作,这些都是绕不开的,当哪天这些知识不经意的帮助到你时你会庆幸当初正确的选择。
数据结构与算法
这块当初在大学时也是最不受待见的一门课程,也是我唯一挂过的科目。
记得当时每次上课老师就让大家用 C 语言练习书上的习题,看着一个个拆开都认识的字母组合在一起就六亲不认我果断选择了放弃。这也造成现在的我每隔一段时间就要看二叉树、红黑树、栈、队列等知识,加深印象。
这一块内容可能会在应届生校招时发挥较大作用,在工作中如果你的本职工作是 Java Web 开发的话,这一块涉猎的几率还是比较低。不过一旦你接触到了模型设计、中间件、高效存储、查询等内容这些也是绕不过的坎。
Java 基础
Java基础则是走向Java高级的必经之路。
实际工作中高频次的东西有以下几点
-
基本容器
-
IO、NIO
-
常见的设计模式
-
Java多线程
-
良好的单测习惯
多线程并发内容
有了扎实的基础之后就要了解多线程、并发相关的内容了。
会用了之后也要考虑为啥多线程会出现的问题,这时就需要理解内存模型、可见性之类的知识点。同样的解决方式又有哪些?各自的优缺点也需要掌握。
JVM 虚拟机
想要深入 Java ,JVM 是不可或缺的。对于大部分工作 1~3 年的开发者来说直接接触这一些内容是比较少的,到了 3~5 年这个阶段就必须得了解了。
-
JVM内存划分,知道哪块内存存放哪些内容;线程安全与否;内存不够怎么处理等
-
不同情况的内存溢出、栈溢出,以及定位解决方案
-
分代的垃圾回收策略。
-
线上问题定位及相关解决方案
-
一个类的加载、创建对象、垃圾回收、类卸载的整个过程
以上问题都是我们需要掌握的
数据库
做WEB应用开发的老哥肯定要和数据库打不少交道,而且通常来说一个系统最先出现瓶颈往往都是数据库,说数据库是压到系统的最后—根稻草—点也不为过。
所以对数据库的掌握也是非常重要。以MySQL数据库为例,这三点必须知道:
-
索引的数据结构及原理、哪些字段应当创建索引
-
针对于一个慢SQL的优化思路
-
数据库水平垂直拆分的方案,需要了解业界常用的MyCAT、sharding-sphere等中间件
分布式技术
随着互联网的发展,传统的单体应用越来越不适合现有场景。因此分布式技术出现了,这块涵盖的内容也很多很广,至少一些像CAP定理什么的这些基本理论还是要知道。
最后当然就是要懂一点架构了
相信程序员都有一个架构师的梦想。
要成为一个架构师,就上面列举的样样需要掌握,底层到操作系统、算法;上层到应用、框架都需要非常精通。(PPT 架构师除外)
俗话说:种一棵树,最好的时间是十年前,其次是现在。如果你现在还不是技术大牛,就不应该停止学习,至少在这个技术不断更新的时代,不会让后浪拍的太惨,前段时间我在腾讯工作的老哥私下传我一份他们内部的程序员全栈知识点进阶笔记,里面的内容真的非常全面,市面上很少会见到这么全的笔记,差距不止一点点。
为了不影响大家的阅读体验,只能以截图形式展示出来了,有需要完整版的小伙伴可以点赞评论支持一下,然后私信关键词“面试”获取
Java全栈知识
-
Java基础
-
多线程并发
-
Java虚拟机
-
数据结构与算法
- Spring框架
-
网络协议与Netty网络框架
-
微服务
-
消息中间件
-
Zookeeper/Kafka
大数据方面
-
Hadoop
-
Spark
-
Storm
- YARN
-
云计算
最后
这份笔记涵盖JAVA基础,Netty&RPC网络框架,数据结构与算法,SSM框架,网络协议,分布式,微服务,消息中间件,数据库,设计模式,还包含大数据以及云计算内容。如果你在进阶路上没有一个清晰的思路,把这份笔记里的里内容吃透技术会提升一个档次,对于大牛来说也是查漏补缺的好东西。
总之,计算机编程行业是终生学习的行业!所以说,如果您还在考虑进来,请好好考虑,如果开始从事这个行业,请一步一个脚印,认真学下去,相信我们都会成为心目中的技术大牛!!!加油!!!(未来的外卖员们)