热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

我与JavaBoy的10年从小白到资深架构

我与JavaBoy的10年-从小白到资深架构- HI ! 大家好,我是你们的新朋友老王随聊。正值Java的27岁生日之际,今年也恰好是老王与Java相识的第10个年头了,而这1



 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岁生日快乐!




祝JAVA  BOY 27 岁生日快乐!???



1、我与Java的初识 ???

转眼毕业已经10年了,回想当年大学的生活,忙碌而充实。

我大学读的是计算机专业,有幸在大二的时候接触到了Java这门面向对象编程语言。起初主要使用的编程语言还是C和C++,真正爱上Java是在大三上半学期,当时参加了ACM东北三省级联赛并获得了第三名的成绩,这也让我下定决心开始研究Java。

在平时我也会参加学校和周边兄弟学校组织的各大小赛事,时不时的会获取些奖励。正是这些大大小小的比赛,让我对Java产生了更加浓厚的兴趣。

另外,我也会加入校内的一些实验室,跟着学长和老师去实践一些Java相关的实际项目,尤其是参与升级和运维学校内部网站这件事让自己学到了比较多的实战经验。这些经历也为后续自己面试大企业打下了很好的基础。

在最后毕设的时候,自己用Java Swing写了一个模拟百度浏览器的Case,通过这次毕设,将之前所学的Java零散知识点更加系统化,进一步加深了对Java应用的了解。虽然如今对Java Swing这种C/S模式的应用已经停留在教学阶段(实际生产开发已不再使用),但里面一些优秀设计思路依然值得我们学习借鉴。


2、我的Java进阶之路 ???

这部分内容是关于我进入职场之后的一些经历,从技术发展层面可概括为三个阶段。


2.1 第一阶段:拓宽Java技术栈 ???

用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架构师之路打下了坚实的基础。


2.2 第二阶段:实践Java大数据 ???

用3~4年深耕技术和并落地到业务当中。

在15年左右大数据Hadoop技术开始盛行。在经历了3年左右的应用系统开发之后,想着转战这个全新的战场。带着一腔热情和不可知的未来,我最终踏入了大数据领域。

这一干就是4年之久。期间经历过准实时Spark技术和流式框架Flink技术的应用落地。处理的数据量也从刚开始的几百万,到上千万、上百亿的量级。在这期间,也阅读了很多技术书籍《Hadoop大数据存储与分析》、《Spark快速大数据分析》、《Flink原理实战与性能优化》等。

当然大数据技术的应用必须有业务场景的需求落地才能体现其价值。回顾自己做大数据技术的历程,让我收获到的不仅仅是与Java相关的大数据技术体系,同时自己对数据分析方面也有了新的认知,比如什么是数据挖掘,哪些数据有价值等等。另外在技术层面思考也更加全面,比如哪些场景下应该使用哪些设计模式,会结合公司实际业务发展乃至未来的发展,形成一套具有可操作可落地的技术选型。


2.3 第三阶段:走向Java架构师之路 ???

不经一番寒彻骨,哪得梅花扑鼻香。千锤百炼还坚劲, 任尔东西南北风。

用3~4年完成Java技术人向Java架构师的蜕变,我根据个人经历总结以下三点:


2.3.1 熟悉Java相关的优秀框架设计 ???

Java架构师之路非一日练就而成,首先要对行业相关核心技术栈比较了解,比如RPC分布式框架Dubbo、Thrift等。Dubbo前面我也讲过,是非常优秀的设计框架。尤其是它的设计模式、设计思路对于我们如何去做好系统架构设计非常有帮助。

另外也需要了解一些Java大数据方面的技术,学习里面的一些优秀设计思维。比ElaseticSearch、工作流引擎Activiti、消息中间件JMS编码接口、ActiveMQ,还有前面提到的Spark和Flink等等。这些都是基于Java语言写的,所以对于Java出身的开发者来说,学习门槛相对低不少。

只有对各种技术框架设计思路有所了解,我们才能设计出符合业务发展所需的系统。


2.3.2 熟悉相关业务及周边系统 ???

作为一名优秀的Java架构师,除自身技术过硬外,还需要深入了解周边相关业务知识和业务系统,至少能对关键业务节点清楚掌握。这样在设计系统或做架构调整的时候,才能做到有的放矢、有章可循。技术选型一定是结合实际业务需求场景的,否则只能属于闭门造车,浪费时间。甚至有些时候需要架构师对公司业务具备一定前瞻性,这样才能很好的设计出满足未来业务发展所需的系统。


2.3.3 具备勇于担当的精神 ???

除了有过硬的Java技术及丰富的业务知识外,责任心和勇于担当也是作为Java架构师必须要有的品质。

我参加并组织了多次618和双11大促系统备战,深知系统调用链路长,上下游依赖多等复杂性,即使如此,也必须保持系统性能高可用。基于此,尽管在前期准备工作非常充分的情况下,在大促获得启动之后,依然会有一些新的问题出现,比如秒杀导致系统性能出现了瓶颈,C端大量请求异常等。在这样紧张和高压的情况下,作为一名架构师有义务去担起这个责任,带领大家积极应对问题,并能快速给出相应解决方案。


3、对Java语言未来的展望 ???

 随着5G技术已逐渐进入人们的视野,随之而来的是万物互联的时代。物联网产业的飞速发展,带动大数据、云计算、人工智能等领域的蓬勃发展,另外各种语言也应运而生,但相信Java语言会以其功能强大、简单易用、安全稳健等特性,在新的领域展现出新的风采。

我认为Java语言未来发展前景仍旧十分广阔。主要应用领域有三大方向:大数据、云平台和人工智能所以,什么时候学习Java语言都不会晚,想进入这三大行业的抓紧行动起来吧!


4、源代码——祝Java Boy 27岁生日快乐! ???

 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);
}
}
}





推荐阅读
  • PHP自学必备:从零开始的准备工作与工具选择 ... [详细]
  • 浏览器作为我们日常不可或缺的软件工具,其背后的运作机制却鲜为人知。本文将深入探讨浏览器内核及其版本的演变历程,帮助读者更好地理解这一关键技术组件,揭示其内部运作的奥秘。 ... [详细]
  • 深入解析Java虚拟机的内存分区与管理机制
    Java虚拟机的内存分区与管理机制复杂且精细。其中,某些内存区域在虚拟机启动时即创建并持续存在,而另一些则随用户线程的生命周期动态创建和销毁。例如,每个线程都拥有一个独立的程序计数器,确保线程切换后能够准确恢复到之前的执行位置。这种设计不仅提高了多线程环境下的执行效率,还增强了系统的稳定性和可靠性。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 本文详细探讨了使用纯JavaScript开发经典贪吃蛇游戏的技术细节和实现方法。通过具体的代码示例,深入解析了游戏逻辑、动画效果及用户交互的实现过程,为开发者提供了宝贵的参考和实践经验。 ... [详细]
  • 本文深入解析了Java面向对象编程的核心概念及其应用,重点探讨了面向对象的三大特性:封装、继承和多态。封装确保了数据的安全性和代码的可维护性;继承支持代码的重用和扩展;多态则增强了程序的灵活性和可扩展性。通过具体示例,文章详细阐述了这些特性在实际开发中的应用和优势。 ... [详细]
  • Java环境中Selenium Chrome驱动在大规模Web应用扩展时的性能限制分析 ... [详细]
  • HTML 页面中调用 JavaScript 函数生成随机数值并自动展示
    在HTML页面中,通过调用JavaScript函数生成随机数值,并将其自动展示在页面上。具体实现包括构建HTML页面结构,定义JavaScript函数以生成随机数,以及在页面加载时自动调用该函数并将结果呈现给用户。 ... [详细]
  • POJ 2482 星空中的星星:利用线段树与扫描线算法解决
    在《POJ 2482 星空中的星星》问题中,通过运用线段树和扫描线算法,可以高效地解决星星在窗口内的计数问题。该方法不仅能够快速处理大规模数据,还能确保时间复杂度的最优性,适用于各种复杂的星空模拟场景。 ... [详细]
  • 在最近的学习过程中,我对Vue.js中的Prop属性有了更深入的理解,并认为这一知识点至关重要,因此在此记录一些心得体会。Prop属性用于在组件之间传递数据。由于每个组件实例的作用域都是独立的,无法直接引用父组件的数据。通过使用Prop,可以将数据从父组件安全地传递到子组件,确保数据的隔离性和可维护性。 ... [详细]
  • 每日前端实战:148# 视频教程展示纯 CSS 实现按钮两侧滑入装饰元素的悬停效果
    通过点击页面右侧的“预览”按钮,您可以直接在当前页面查看效果,或点击链接进入全屏预览模式。该视频教程展示了如何使用纯 CSS 实现按钮两侧滑入装饰元素的悬停效果。视频内容具有互动性,观众可以实时调整代码并观察变化。访问以下链接体验完整效果:https://codepen.io/comehope/pen/yRyOZr。 ... [详细]
  • 在本文中,我们将为 HelloWorld 项目添加视图组件,以确保控制器返回的视图路径能够正确映射到指定页面。这一步骤将为后续的测试和开发奠定基础。首先,我们将介绍如何配置视图解析器,以便 SpringMVC 能够识别并渲染相应的视图文件。 ... [详细]
  • 本文总结了JavaScript的核心知识点和实用技巧,涵盖了变量声明、DOM操作、事件处理等重要方面。例如,通过`event.srcElement`获取触发事件的元素,并使用`alert`显示其HTML结构;利用`innerText`和`innerHTML`属性分别设置和获取文本内容及HTML内容。此外,还介绍了如何在表单中动态生成和操作``元素,以便更好地处理用户输入。这些技巧对于提升前端开发效率和代码质量具有重要意义。 ... [详细]
  • 深入解析InnoDB中的多版本并发控制机制
    多版本并发控制(MVCC)是InnoDB存储引擎中的一项关键技术,通过维护数据在不同时间点的多个版本,确保了事务的隔离性和一致性。每个读取操作都能获得一个与事务启动时一致的数据视图,从而提高了并发性能并减少了锁竞争。此外,MVCC还支持多种隔离级别,如可重复读和读已提交,进一步增强了系统的灵活性和可靠性。 ... [详细]
  • 在ASP.NET MVC项目中,通过实战解决了Ajax请求500错误及多表数据查询的问题。具体而言,将页面分为两个部分,用户点击右侧导航栏时,通过Ajax请求动态加载数据,并在右侧显示相应的页面内容。最初尝试使用Partial Action方法,但遇到了500错误。通过详细排查和调试,最终成功解决了这一问题,并实现了预期功能。此外,还优化了多表数据查询的性能,确保系统的高效运行。 ... [详细]
author-avatar
拍友2602921297
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有