HI ! 大家好,我是你们的新朋友老王随聊。正值Java的27岁生日之际,今年也恰好是老王与Java相识的第10个年头了, 而这10年老王从自己的亲身经历见证了Java技术的快速发展。
关于我与Java的故事,老王从Java技术学习的三个阶段聊聊这10年来我是如何从一个编程小白成长为一名资深架构师,我相信这些经历不论是对在校学生、或即将踏入职场的同学、亦或是正处于职场上升期的朋友都必然会有一些帮助和启发~~
文章末尾有来自老王送给Java Boy的彩蛋!
目录
1、我与Java的初识
2、我的Java进阶之路
2.1 第一阶段:拓宽Java技术栈
2.2 第二阶段:实践Java大数据
2.3 第三阶段:走向Java架构师之路
2.3.1 熟悉Java相关的优秀框架设计
2.3.2 熟悉相关业务及周边系统
2.3.3 具备勇于担当的精神
3、对Java语言未来的展望
4、源代码——祝Java 27岁生日快乐!
转眼毕业已经10年了,回想当年大学的生活,忙碌而充实。
我大学读的是计算机专业,有幸在大二的时候接触到了Java这门面向对象编程语言。起初主要使用的编程语言还是C和C++,真正爱上Java是在大三上半学期,当时参加了ACM东北三省级联赛并获得了第三名的成绩,这也让我下定决心开始研究Java。
在平时我也会参加学校和周边兄弟学校组织的各大小赛事,时不时的会获取些奖励。正是这些大大小小的比赛,让我对Java产生了更加浓厚的兴趣。
另外,我也会加入校内的一些实验室,跟着学长和老师去实践一些Java相关的实际项目,尤其是参与升级和运维学校内部网站这件事让自己学到了比较多的实战经验。这些经历也为后续自己面试大企业打下了很好的基础。
在最后毕设的时候,自己用Java Swing写了一个模拟百度浏览器的Case,通过这次毕设,将之前所学的Java零散知识点更加系统化,进一步加深了对Java应用的了解。虽然如今对Java Swing这种C/S模式的应用已经停留在教学阶段(实际生产开发已不再使用),但里面一些优秀设计思路依然值得我们学习借鉴。
这部分内容是关于我进入职场之后的一些经历,从技术发展层面可概括为三个阶段。
用2~3年拓宽技术视野。
踏入职场后,我除了主语言Java一直未离手之外,期间也学习了其他不同的编程语言。从前端H5\JS\CSS、到Python、PHP等, 最后到底层数据库MySQL、Oracle等相关脚本开发和SQL优化。开发的应用类型也从PC端到延伸到了移动端。
我记得大概在12年左右,当时正是各种新技术层出不穷的时候。尤其是基于Java语言开发的Android应用甚是火热。可能天生骨子里习惯尝试新鲜事物吧,最后我转向这个新技术。对我而言只是技术的平移,学习门槛也不会太高。
日常也会学习与Java相关的优秀框架,比如 SpringMVC、Mybatis、Maven、RabbiMQ、Log4j、Ehcache等。另外我也会去读一些比较系统化的Java相关书籍,比如《Java23种设计模式》、《Java虚拟机》、《Java高并发程序设计》、《Spring源码深度解析》等等。
我很庆幸自己能持续不断的学习并运用到实践中,这为我走向Java架构师之路打下了坚实的基础。
用3~4年深耕技术和并落地到业务当中。
在15年左右大数据Hadoop技术开始盛行。在经历了3年左右的应用系统开发之后,想着转战这个全新的战场。带着一腔热情和不可知的未来,我最终踏入了大数据领域。
这一干就是4年之久。期间经历过准实时Spark技术和流式框架Flink技术的应用落地。处理的数据量也从刚开始的几百万,到上千万、上百亿的量级。在这期间,也阅读了很多技术书籍《Hadoop大数据存储与分析》、《Spark快速大数据分析》、《Flink原理实战与性能优化》等。
当然大数据技术的应用必须有业务场景的需求落地才能体现其价值。回顾自己做大数据技术的历程,让我收获到的不仅仅是与Java相关的大数据技术体系,同时自己对数据分析方面也有了新的认知,比如什么是数据挖掘,哪些数据有价值等等。另外在技术层面思考也更加全面,比如哪些场景下应该使用哪些设计模式,会结合公司实际业务发展乃至未来的发展,形成一套具有可操作可落地的技术选型。
不经一番寒彻骨,哪得梅花扑鼻香。千锤百炼还坚劲, 任尔东西南北风。
用3~4年完成Java技术人向Java架构师的蜕变,我根据个人经历总结以下三点:
Java架构师之路非一日练就而成,首先要对行业相关核心技术栈比较了解,比如RPC分布式框架Dubbo、Thrift等。Dubbo前面我也讲过,是非常优秀的设计框架。尤其是它的设计模式、设计思路对于我们如何去做好系统架构设计非常有帮助。
另外也需要了解一些Java大数据方面的技术,学习里面的一些优秀设计思维。比ElaseticSearch、工作流引擎Activiti、消息中间件JMS编码接口、ActiveMQ,还有前面提到的Spark和Flink等等。这些都是基于Java语言写的,所以对于Java出身的开发者来说,学习门槛相对低不少。
只有对各种技术框架设计思路有所了解,我们才能设计出符合业务发展所需的系统。
作为一名优秀的Java架构师,除自身技术过硬外,还需要深入了解周边相关业务知识和业务系统,至少能对关键业务节点清楚掌握。这样在设计系统或做架构调整的时候,才能做到有的放矢、有章可循。技术选型一定是结合实际业务需求场景的,否则只能属于闭门造车,浪费时间。甚至有些时候需要架构师对公司业务具备一定前瞻性,这样才能很好的设计出满足未来业务发展所需的系统。
除了有过硬的Java技术及丰富的业务知识外,责任心和勇于担当也是作为Java架构师必须要有的品质。
我参加并组织了多次618和双11大促系统备战,深知系统调用链路长,上下游依赖多等复杂性,即使如此,也必须保持系统性能高可用。基于此,尽管在前期准备工作非常充分的情况下,在大促获得启动之后,依然会有一些新的问题出现,比如秒杀导致系统性能出现了瓶颈,C端大量请求异常等。在这样紧张和高压的情况下,作为一名架构师有义务去担起这个责任,带领大家积极应对问题,并能快速给出相应解决方案。
随着5G技术已逐渐进入人们的视野,随之而来的是万物互联的时代。物联网产业的飞速发展,带动大数据、云计算、人工智能等领域的蓬勃发展,另外各种语言也应运而生,但相信Java语言会以其功能强大、简单易用、安全稳健等特性,在新的领域展现出新的风采。
我认为Java语言未来发展前景仍旧十分广阔。主要应用领域有三大方向:大数据、云平台和人工智能。所以,什么时候学习Java语言都不会晚,想进入这三大行业的抓紧行动起来吧!
Java Swing源代码:
import javax.swing.*;
import java.awt.*;
public class HappyBirthday extends JFrame {
public HappyBirthday() {
this.getContentPane().setBackground(Color.WHITE);
this.setFont(new Font("华文行楷", Font.BOLD, 30));
this.setBounds(500, 250, 500, 450);
this.setContentPane(new Paint());
setVisible(true);
}
public static void main(String[] args) { //主函数
HappyBirthday hap = new HappyBirthday(); //实例化主类
java.awt.EventQueue.invokeLater(new Runnable() { //运行图形化界面
public void run() {
hap.setVisible(true);
}
});
}
class Paint extends JPanel {
public void paint(Graphics g) {
// //画出蛋糕的主体(下部分)
g.setColor(Color.pink);
g.fillOval(100, 150, 240, 120);
g.setColor(Color.green);
g.fillOval(110, 160, 220, 100);
g.setColor(Color.red);
g.fillOval(120, 170, 200, 80);
g.setColor(Color.yellow);
g.fillOval(130, 180, 180, 60);
g.setColor(Color.pink);
g.fillOval(140, 190, 160, 40);
g.setColor(Color.orange);
g.fillOval(150, 200, 140, 20);
//画出蛋糕的主体(上部分)(分成椭圆和矩形)
g.setColor(Color.orange);
g.drawRect(160, 150, 120, 40);
g.fillOval(160, 150, 120, 60);
g.fillOval(160, 150, 120, 60);
g.fillRect(160, 150, 120, 60);
g.fillOval(160, 120, 120, 60);
//描线
g.setColor(Color.pink);
g.drawArc(100, 160, 240, 120, 0, -180);
g.drawArc(100, 180, 240, 120, 0, -180);
g.drawArc(100, 200, 240, 120, 0, -180);
g.drawArc(100, 220, 240, 120, 0, -180);
g.drawLine(100, 210, 100, 280);
g.drawLine(340, 210, 340, 280);
//将上部分背面的线抹去
g.setColor(Color.orange);
//写字
g.setColor(Color.pink);
g.setFont(new Font("华文行楷", Font.BOLD, 30));
g.drawString("JAVA27岁", 150, 310);
g.setColor(Color.red);
g.setFont(new Font("华文行楷", Font.BOLD, 20));
g.drawString("生乐快乐", 180, 180);
g.setColor(Color.GRAY);
g.setFont(new Font("华文行楷", Font.PLAIN, 8));
g.drawString("From 老王", 220, 200);
}
}
}