如何成为一名合格的JAVA程序员?
作者:互联网
作为一名码代码的技术工人,我们干的是技术活。那么如何才能技术过硬?成为一名合格的程序员!
下面我会按照相关类别谈谈我们应该掌握哪些。
1、计算机基础
一名和电脑打交道的工种,计算机是我们赖以生存的工具。所以一些基础技能是我们应该和必须掌握的。
比如网络相关的知识。其中就包含了 TCP 协议,它和 UDP 的差异。需要理解 TCP 三次握手的含义,拆、粘包等问题。当然上层最常见的 HTTP 也需要了解,甚至是熟悉。
接着是操作系统相关知识。由于工作后你写的大部分代码都是运行在 Linux 服务器上,所以对于这个看它脸色行事主你也得熟悉才行。比如进程、线程、内存等概念;服务器常见的命令使用,这个没啥窍门就是得平时多敲敲多总结。
当作为一个初学者学习这些东西时肯定会觉得枯燥乏味,大学一般在讲专业课之前都会有这些基础学科。我相信大部分同学应该都没怎么仔细听讲,因为确实这些东西就算是学会了记熟了也没有太多直接的激励。但当你工作几年之后会发现,只要你还在做计算机相关的工作,这些都是绕不开的,当哪天这些知识不经意的帮助到你时你会庆幸当初正确的选择。
2、数据结构与算法
算法方面,算法和数据结构是计算机学习的基石。无论你学习计算机的任何方向,没有扎实的算法和数据结构,肯定学习起来就捉襟见肘了。
数据结构和算法是内功,这门内功基本上是可以融入到任何语言中去的,甚至是数据库系统,看一遍你就知道Java中的集合为什么要这么设计等,对时间和空间的理解能上升个层次。
程序=数据结构+算法,不学不要怪别人叫你码农。
《数据结构与算法》推荐给大家
3、Java 基础
这里大部分的读者都是 Java 相关,所以这个强相关的技能非常重要。
Java 基础则是走向 Java 高级的必经之路。
这里抛开基本语法不谈,重点讨论实际工作中高频次的东西。
- 基本容器,如:HashMap、ArrayList、HashSet、LinkedList 等,不但要会用还得了解其中的原理。这样才能在不同的场景选择最优的设计。
- IO、NIO 也是需要掌握。日常开发中大部分是在和磁盘、网络(写日志、数据库、Redis)打交道,这些都是 IO 的过程。
- 常见的设计模式如:代理、工厂、回调、构建者模式,这对开发灵活、扩展性强的应用有很大帮助。
- Java 多线程是非常重要的特性,日常开发很多。能理解线程模型、多线程优缺点、以及如何避免。
- 良好的单测习惯,很多人觉得写单测浪费时间没有意义。但正是有了单测可以提前暴露出许多问题,减少测试返工几率,提高代码质量。
- 良好的编程规范
4、多线程应用
有了扎实的基础之后来谈谈多线程、并发相关的内容。
想让自己的 title 里加上“高级”两字肯定得经过并发的洗礼。
这里谈论的并发主要是指单应用里的场景,多应用的可以看后文的分布式内容。
多线程的出现主要是为了提高 CPU 的利用率、任务的执行效率。但并不是用了多线程就一定能达到这样的效果,因为它同时也带来了一些问题:
- 上下文切换
- 共享资源
- 可见性、原子性、有序性等。
一旦使用了多线程那肯定会比单线程的程序要变得复杂和不可控,甚至使用不当还会比单线程慢。所以要考虑清楚是否真的需要多线程。
会用了之后也要考虑为啥多线程会出现那样的问题,这时就需要理解内存模型、可见性之类的知识点。
同样的解决方式又有哪些?各自的优缺点也需要掌握。
谈到多线程就不得不提并发包下面的内容 java.util.concurrent。
最常用及需要掌握的有:
- 原子类:用于并发场景的原子操作。
- 队列。常用于解耦,需要了解其实现原理。
- 并发工具,工具使用以及原理。
- 线池使用以及相关原理。
- 锁相关内容 的使用及原理。
这一块的内容可以然我们知道写 JDK 大牛处理并发的思路,对我们自己编写高质量的多线程程序也有很多帮助。
推荐《Java 并发编程的艺术》很好的并发入门书籍。
5、JVM 虚拟机
想要深入 Java ,JVM 是不可或缺的。对于大部分工作 1~3 年的开发者来说直接接触这一些内容是比较少的。
到了 3~5 年这个阶段就必须得了解了,以下内容我觉得是必须要掌握的:
- JVM 内存划分,知道哪块内存存放哪些内容;线程安全与否;内存不够怎么处理等。
- 不同情况的内存溢出、栈溢出,以及定位解决方案。
- 分代的垃圾回收策略。
- 线上问题定位及相关解决方案
- 一个类的加载、创建对象、垃圾回收、类卸载的整个过程。
掌握这些内容真的对实际分析问题起到巨大帮助。
对此强力推荐 《深入理解Java虚拟机》,这本书反反复复看过好几遍,每个阶段阅读都有不同的收获。
6、数据库
做 WEB 应用开发的同学肯定要和数据库打不少交道,而且通常来说一个系统最先出现瓶颈往往都是数据库,说数据库是压到系统的最后一根稻草一点也不为过。
所以对数据库的掌握也是非常有必要。拿互联网用的较多的 MySQL 数据库为例,一些必须掌握的知识点:
索引的数据结构及原理、哪些字段应当创建索引。
针对于一个慢 SQL 的优化思路。
数据库水平垂直拆分的方案,需要了解业界常用的 MyCAT、sharding-sphere 等中间件。
常规使用可以参考《阿里巴巴 Java 开发手册》中的数据库章节,想要深入了解 MySQL 那肯定得推荐经典的《高性能 MySQL》一书了。
7、懂点架构
相信大家都有一个架构师的梦想。
架构师给人的感觉就是画画图纸,搭好架子,下面的人员来添砖加瓦最终产出。
但其实需要的内功也要非常深厚,就上面列举的样样需要掌握,底层到操作系统、算法;上层到应用、框架都需要非常精通。(PPT 架构师除外)
首先分布式肯定得掌握,毕竟现在大部分的架构都是基于分布式的。
这其中就得根据 CAP 理论结合项目情况来选择一致性还是可用性,同时如何做好适合现有团队的技术选型。
如何学习
现在来聊聊如何学习,这也是被问的最多的一个话题。
而关于学习讨论的最多的也是看视频还是看书?
1、视频
不得不承认视频是获取知识最便捷的来源,毕竟包含了图、文、声。
我其实入门看的是高淇老师的java300集刚入门的小伙伴可以试试看哦,在B站是免费的教学视频,还是2021最新版本呢!
2、看书
当你对最基础的知识有了一定的了解后你再开始看书这时候会有很大的提升,这里我就不推荐了需要的同学可以看看我其他的文章有写到哦
3、English 挺重要
再来谈谈英语的重要性,
别怕自己英语差就学不了编程,真正常用的就那些词语。
这句话虽没错,但英语在对 IT 这行来说还是有着极大的加分能力。
拿常见的 JDK 里的源码注释也是纯英文的,如果英语还不错的话,一些 Spring 的东西完全可以自学,直接去 Spring 官网就可以查看,甚至后面出的 SpringCloud,官方资料就是最好的教程。
再有就是平时查资料时,有条件的可以尝试用 Google + 英文 搜索,你会发现新的世界。
不然也不会有面向 Google/Stack Overflow 编程。
英语不好的同学好努力学习学习啦!
标签:数据结构,Java,合格,并发,数据库,程序员,算法,JAVA,多线程 来源: https://www.cnblogs.com/sxt-20210809/p/15171827.html