Java工程师以后发展路径是啥?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java工程师以后发展路径是啥?相关的知识,希望对你有一定的参考价值。
最近有些网友问我如何自学 Java 后端,还有些是想从别的方向想转过来,但都不太了解 Java 后端究竟需要学什么,究竟要从哪里学起,哪些是主流的 Java 后端技术等等,导致想学,但又很迷茫,不知从何下手。我就以过来人的经历,写在这篇博客里,不一定都对,但都是我根据自己的经历总结出来的,供你们的参考。
Java 基础
Java 是一门纯粹的面向对象的编程语言,所以除了基础语法之外,必须得弄懂它的 oop 特性:封装、继承、多态。此外还有泛型、反射的特性,很多框架的技术都依赖它,比如 Spring 核心的 Ioc 和 AOP,都用到了反射,而且 Java 自身的动态代理也是利用反射实现的,这里我特意写了一篇 Java动态代理原理分析。此外还有 Java 一些标准库也是非常常见,比如集合、I/O、并发,几乎在 Web 开发中无处不在,也是面试经常会被问到的,所以在自学 Java 后端之前,不妨先打好这些基础,另外还有 Java8 的一些新特性,也要重点关注,比如 Lambda 表达式、集合的 Stream 流操作、全新的 Date API 等等,关于新特性,我也写了几篇关于这方面的博客,请自行找吧,就不贴出来了。
关于书籍推荐,我是不建议初学者一开始就拿着「Java 编程思想」啃的,因为当初我就是那个当天下午决定自学 Java,晚上就抱着这本书啃的人,说实话,我当时真的不懂它在说啥,因为我没有一点的面向对象语言编程的基础,而这本书又写得太博大精深了,在当时的我来说,完全是天书,但是我认为它仍然是 Java 界的圣经,每读一次都有所收获。我在这里推荐你们一开始先看「Java 核心技术」,这本书讲得比较通俗易懂,初学者比较能接受。
关于视频推荐,我当初就是听某客的毕向东老师讲的 Java 基础教程,毕老师讲的实在是太生动有趣了,不知不觉把我带进 Java 的坑里无法自拔,有时候我会听他视频时笑出声来,也许是我那段自学阶段最有趣的时刻了。
数据库
关于 sql 方面:SQL 教程、mysql 教程
我是了解了一些基础语法之后,就直接跟着视频的老师做一些表操作实战练习了,比如单表查询、多表查询等。我建议学 sql 切勿眼高手低,需多加练习,不要只看懂了就行,因为工作中写得一手简练的 sql 是非常重要的。在这里我说下我在项目一直秉承着 sql 语句是能避免多表查询就避免多表查询,能够分开多条语句就分开多条语句,因为这里涉及到多表查询性能和数据库扩展的问题。
关于 JDBC 方面:JDBC 教程、 JDBC 获取连接对象源码分析
你需要弄懂 JDBC API 的用法,其实它只是一组规范接口,所有数据库驱动只要实现了 JDBC,那么我们就可以通过标准的 API 调用相应的驱动,完全不用知道驱动是怎么实现的,这就是面向接口编程的好处。而且对于 JDBC 我是直接看视频去理解的,跟着视频做了一个基于 Apache Dbutils 工具做了一个具有事务性的小工具,我特意用思维导图总结了一下:
Web 基础
曾经开源中国创始人红薯写了一篇文章「初学 Java Web 开发,请远离各种框架,从 Servlet 开发」,我觉得他说的太对了,在如今 Java 开发中,很多开发者只知道怎么使用框架,但根本不懂 Web 的一些知识点,其实框架很多,但都基本是一个套路,所以在你学习任何框架前,请把 Web 基础打好,把 Web 基础打好了,看框架真的是如鱼得水。
关于 Http 协议,这篇文章就写得很清楚:Http协议
关于 Web 基础这方面数据推荐,我当时是看的是「Tomcat 与 Java Web 开发技术详解」,很详细地讲解了整个 Java Web 开发的技术知识点,但现在看来,我觉得里面讲的有一些技术确实有点老旧了,不过可以了解一下 Java Web 开发的历史也是不错的。所以在 Web 基础这方面我都是看某客的崔老师讲的「超全面 Java Web 视频教程」,讲得很详细很生动,还有实战项目!
关于 JSP,你只要了解它其实就是一个 Servlet 就行了,关于它的一些标签用法,我认为可以直接忽略,因为现在互联网几乎没哪间公司还用 JSP,除了一些老旧的项目。现在都是流行前后端分离,单页应用,后端只做 API 接口的时代了,所以时间宝贵,把这些时间重点放在 Servlet 规范上面吧。
关于 Tomcat,它是一个 Web 容器,我们写的后端项目都要部署到Web容器才能运行,它其实是一个遵循 Http,通过 Socket 通信与客户端进行交互的服务端程序:Tomcat结构及处理请求过程
Web 主流框架
Java Web 框架多如牛毛,等你有一定经验了,你也可以写一个 Web 框架,网上很多说 Spring、Struts2、Hibernate 是 Java 三架马车,我只想说,那是很久远的事情了,我严重不推荐 Struts2、Hibernate,相信我,一开始只需要上手 Spring、SpringMVC、Mybatis 就可以了,特别是 Spring 框架,其实 Spring 家族的框架都是很不错的。
但是提醒一点就是,千万不要沉迷于各种框架不能自拔,以会多种用法而沾沾自喜,导致知其然而不知其所以然。
Spring其核心思想就是 IOC 和 AOP:
谈谈对 Spring IOC 的理解
Spring 面向切面编程
SpringMVC 它的思想是全部请求统一用一个 Servlet 去做请求转发与控制,这个 Servlet 叫 DispatcherServlet:
SpringMVC 初始化过程
SpringMVC 处理请求过程
Mybatis 它可实现动态拼装 sql,避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集:
mybatis 入门教程
Mybatis 深入浅出系列
Web 框架进阶
使用了 SSM 框架后,你会觉得框架也不过这么回事,如果你对 Spring 有过大概了解,你也会产生想写一个「山寨版」Spring 的心思了,一个轻量级 Web 框架主要具备以下功能:
可读取用户自定义配置文件,并以此来初始化框架;
具备 Bean 容器,管理项目的类的对象生命周期;
具备依赖注入,降低类之间的耦合性;
具备 AOP 功能,使项目可进行横向编程,可不改变原有代码的情况增加业务逻辑;
具备 MVC 框架模式。
其实除了 SSM 之外,Web 框架可谓是百家齐放,其中以 Spring 全家桶最为耀眼,在这里我极力推荐两个 Spring 家族框架:SpringBoot 和 SpringCloud。
SpringBoot 弥补了 Spring 配置上的缺点,再也不用为繁杂的 xml 费劲精力了,堪称是 Java 后端开发的颠覆者,推荐书籍「Java EE 开发的颠覆者:SpringBoot实战」
SpringBoot 构建 web 项目
SpringBoot 自动化配置源码分析
自定义 SpringBoot Starter
spring-boot-starter-tutorial
SpringCloud 是一个微服务架构,能够将项目按照业务分成一个个微服务,每个微服务都可独立部署,服务之间互相协调。当一个项目越来越大时,随之而来的是越来越难以维护,此时将项目拆分成若干个微服务、单独维护、单独部署,也可以降低项目不同业务间的耦合度。推荐书籍「Spring Cloud 与 Docker 微服务架构实战」,这本书将 Docker 与微服务完美地结合在一起,堪称完美!
Spring Cloud 中文官网
史上最简单的 Spring Cloud 教程
我写的有关于 Spring Cloud 的博客:
SpringCloud微服务架构之服务注册与发现
SpringCloud微服务架构之服务消费者
SpringCloud微服务架构之断路器
SpringCloud微服务架构之服务网关
其它技术
Redis:一个高性能的 key-value 数据库,当有并发量很高的请求时,将数据缓存在 Redis 中,将提高服务器的响应性能,大大减轻数据库的压力。
redis 中文官网
redis 教程
Git:世界上最先进的分布式版本控制系统,建议所有初学者从命令行开始使用 Git!关注 stormzhang 公众号「googdev」,回复「github」,即可免费获取一份 GitHub 教程电子书,我觉得写得很不错。
Git 官网
最全 Git 教程
Git 的一些常用命令
Maven:一个用于构建项目的工具,将项目间的依赖通过 xml 完美地组织到一起,可通过编译插件将项目编译成字节码文件。还有类似的 Gradle 也是不错的选择。
maven 的 pom.xml 文件详解
Linux:至少要求常用的命令会用,能够在 linux 环境下部署项目。
Linux 命令大全
最全的 SSH 连接远程终端教程
Docker:简直是项目部署神器啊,来不及解释了,看我 Docker 系列博客,开启 Docker 之旅吧!推荐书籍「Docker 技术入门与实战」,中国首部 Docker 著作!
Docker 实战(一)
Docker 实战(二)
Docker 实战(三)
docker-deploy-tutorial
开发工具
工欲善其事,必先利其器,以下是我推荐的一些开发工具:
Intellij IDEA:Java 开发最好的 IDE,这个是公认的,我一开始是用 Eclipse 的,后来用了 Intellij IDEA,才发现 Eclipse 就是一坨屎,所以我以过来人劝你们不要使用 Eclipse,直接 Intellij IDEA!
IntelliJ IDEA 使用教程
Iterm2:macOS 最好用的终端!
Iterm2 使用指南
Chrome:人生苦短,请用 Chrome,来不及解释了,快上车!
Postman:很好用的一个接口调试工具。
1.技术经理: 专注于技术的实现
2.产品经理: 专注于产品的设计
3.项目经理:技术 + 产品, 对整个项目负责, 管理团队, 推进项目的进展
4.架构师: 技术经理的更高一级, 为整个系统设计框架
结合嵌入式行业认识,谈谈嵌入式软件工程师的发展路径
谈谈自己对嵌入式行业的认识以及对当前市场行情、人才需求的看法。
关于嵌入式,它涉及到全社会生活的方方面面,一个嵌入式装置一般都由嵌入式计算机系统和执行装置组成,嵌入式计算机系统是整个嵌入式系统的核心,由硬件层、中间层、系统软件层和应用软件层组成。执行装置也称为被控对象,它可以接受嵌入式计算机系统发出的控制命令,执行所规定的操作或任务。
嵌入式系统是一种专用的计算机系统,作为装置或设备的一部分。通常,嵌入式系统是一个控制程序存储在ROM内存中的嵌入式处理器控制板。事实上,所有带有数字接口的设备,如手表、微波炉、录像机、汽车等,都使用嵌入式系统,有些嵌入式系统还包含操作系统,但大多数嵌入式系统都是由单个程序实现整个控制逻辑。
从应用对象上加以定义,嵌入式系统是把软件和硬件结合,还可以包含机械的专业知识。国内普遍认同的嵌入式系统定义为:以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。
嵌入式开发的相关领域:
当今嵌入式行业内,主要有一些比较流行热门的领域,这些领域的人才缺口较大,容易受到企业的欢迎:
① 数字图像压缩技术:这是嵌入式最重要最热门的应用领域之一,主要是应掌握MPEG编解码算法和技术,如DVD、MP3、PDA、高精电视、机顶盒等都涉及MPEG高速解码问题。
② 通信协议及编程技术:这包括传统的TCP/IP协议和热门的无线通信协议。首先,大多数嵌入式设备都要连入局域网或Internet,所以首先应掌握 TCP/IP协议及其编程,这是需首要掌握的基本技术;其次,无线通信是目前的大趋势,所以掌握无线通信协议及编程也是是很重要的。无线通信协议包括无线 局域网通信协议802.11系列,Bluetooth,以及移动通信(如GPRS、GSM、CDMA等)。
③ 网络与信息安全技术:如加密技术,数字证书CA,以及各种网络安全设备,包括硬件防火墙,入侵检测IDS,还有防毒墙,IPS等,中国在这方面还是没有自己优势的,我们陈院长好象正在往这方面发展.
④ DSP技术:DSP是Digital Signal Process数字信号处理的意思,DSP处理器通过硬件实现数字信号处理算法,如高速数据采集、压缩、解压缩、通信等。数字信号处理是电子、通信等硬件 专业的课程,对于搞软件的人若能了解一下最好。目前DSP人才较缺。如果有信号与系统、数字信号处理等课程基础,对于学习MPEG编解码原理会有很大帮助。
职位方面,职位有主要有五个方面:
① 系统设计工程师
② 硬件工程师
③ 底层驱动工程师
④ Linux系统工程师
⑤ 应用设计工程师
薪资方面,在嵌入式行业中,具有10年工作经验的高级嵌入式工程师年薪在30万元左右。即使是初级的嵌入式软件开发人员,平均月薪也达到了3000—5000元,中高级的嵌入式工程师月薪平均超过10000元。参考国内招聘网大量的招募信息,嵌入式硬件工程师普遍在7000元左右,嵌入式软件工程师在10000元左右。
对于专业知识需求,因所选专业为嵌入式软件,故广集招聘网的招聘信息后,此处只罗列出和嵌入式软件相关的:
① 关于ARM:ARM A7/A8/9或A57 Cotex-A9 STM8 STM32
② 关于编程语言:精通C/C++语言,熟悉汇编
③ 常用软件:keil、atmel studio、Candence、PADS、Altium Designer
④ 协议相关:TCP/IP、USB、USART、I2C、SPI等,熟悉基于socket的网络通信
⑤ 通行通信接口编程:RS232,RS485,以太网
⑥ 操作系统相关:
1.掌握LINUX或uCOS 、rt-thread某一操作系统的使用与开发
2.能独立进行内核的移植和驱动编写。
3.内核系统移植/调试及应用程序开发工作
⑦ 辅助:
1.能阅读硬件原理图和芯片数据手册
2.可熟练使用示波器等常用嵌入式开发仪器
⑧ 其他:
1.良好的代码编写习惯和文档编写能力
2.良好的沟通和协调能力
3.能够阅读英文技术文档
关于学习之路,结合市场需求和网络上的资料,梳理了一份适合自己的学习路线。
① Linux开发基础学习
虚拟机搭建、Linux宿主机安装、Linux命令、服务器搭建Samba,NFS、VI编辑器
② Linux编程
GCC/GDB、Makefile、交叉编译环境搭建+C语言强化+Linux系统编程
③ 51单片机/AVR单片机入门
GPIO、中断服务程序、定时器、状态机编程、按键、OLED
④ ARM体系结构与编程
ARM处理器编程
⑤ Linux系统内核分析
⑥ Linux驱动程序开发
总结:由薪资和待遇看来,当前市场人才缺口还是较大,需求量逐年上升;但由于嵌入式不像移动互联开发(如安卓开发、C#开发等)纯软件的开发思维,而是涉及到底层硬件学习又兼顾驱动程序的编程,枯燥的硬件电路学习和繁杂的驱动程序编写,造成了嵌入式入门的困难。在我看来,在当今物联网的趋势和政策下,物体与物体的联系越来越密切,未来的嵌入式开发势必占据IT行业的半壁江山,扭转现在移动互联当红的现状,形成全民物联、全民嵌入的风气,呈现一幅繁荣的景象。但学习嵌入式需要有足够的耐心和毅力,需要学会举一反多,并建立牢固的知识基础,所以,在未来面对求职市场之前,我会坚持学习底层知识,敢于提问,敢于解决问题,多参加电子类比赛,尽最大努力提升自己的实力。最后,写下自己的座右铭:
让坚持成为一种习惯,让放弃成为一种奢侈。
以上是关于Java工程师以后发展路径是啥?的主要内容,如果未能解决你的问题,请参考以下文章