猿创征文|点亮技术之路的三盏灯
目录
前言
第一盏灯:学习&运气
第二盏灯:技术&信任
第三盏灯:思维&沟通
前言
也许,我是幸运的,可以说几乎每一次的技术储备,都能在关键时刻起到“救命稻草”的作用。
从一名刚入职的java开发人员,到技术骨干,然后担任技术组长,技术经理,技术总监,每一次跳跃都会带来一次技术视野的提升,技术视野的打开,又会带来下一次的机遇。
第一盏灯:学习&运气
工作之初,接触的第一个JDK版本为1.5,先后历经了1.6、1.7、1.8 三个大版本的更迭,当时使用的IDE是Eclipse,集成的tomcat版本也需要跟着调整,也正是在这个过程中, 养成了技术之间横向对比的习惯,包括后来在spring、mysql、activiti、lucene、mq、mongodb进行版本选择时,发挥了重要的作用。
有时候也会有些额外收获,比如在进行spring版本比对时,无意间会想到spring里会有循环依赖的问题,出于好奇,也会抽一部分时间了解下如何解决。
创建两个service,在ServiceA中注入ServiceB,在ServiceB中注入ServiceA,这样ServiceA和ServiceB便相互引用,也就形成了循环依赖。
代码如下:
package com.zhufeng.service;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;/*** @author 月夜烛峰*/
@Service
public class ServiceA {@Autowiredprivate ServiceB serviceB;
}
package com.zhufeng.service;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;/*** @author 月夜烛峰*/
@Service
public class ServiceB {@Autowiredprivate ServiceA serviceA;
}
实现流程:
因为事先了解过spring的生命周期,借着这个机会,又可以对spring的refresh()进行更进一步的了解,技术的深度与广度在无意间逐步增强、增进。
@Overridepublic void refresh() throws BeansException, IllegalStateException {synchronized (this.startupShutdownMonitor) {// Prepare this context for refreshing.prepareRefresh();// Tell the subclass to refresh the internal bean factory.ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();// Prepare the bean factory for use in this context.prepareBeanFactory(beanFactory);try {// Allows post-processing of the bean factory in context subclasses.postProcessBeanFactory(beanFactory);// Invoke factory processors registered as beans in the context.invokeBeanFactoryPostProcessors(beanFactory);// Register bean processors that intercept bean creation.registerBeanPostProcessors(beanFactory);// Initialize message source for this context.initMessageSource();// Initialize event multicaster for this context.initApplicationEventMulticaster();// Initialize other special beans in specific context subclasses.onRefresh();// Check for listener beans and register them.registerListeners();// Instantiate all remaining (non-lazy-init) singletons.finishBeanFactoryInitialization(beanFactory);// Last step: publish corresponding event.finishRefresh();}catch (BeansException ex) {if (logger.isWarnEnabled()) {logger.warn("Exception encountered during context initialization - " +"cancelling refresh attempt: " + ex);}// Destroy already created singletons to avoid dangling resources.destroyBeans();// Reset 'active' flag.cancelRefresh(ex);// Propagate exception to caller.throw ex;}finally {// Reset common introspection caches in Spring's core, since we// might not ever need metadata for singleton beans anymore...resetCommonCaches();}}}
谁能想到,在这个加班节奏中等,上下级关系融洽,工作氛围良好的公司,居然会突然决定会进行一次规模较大的架构整合,要求一个月给出架构方案、技术选型、开发周期,三个月进行技术可行性论证评审。
鉴于我的技术储备及学习能力,毫无疑问的成为了这次项目的技术负责人,从此点亮了技术之路的第一盏灯。
第二盏灯:技术&信任
说是试探,其实心里真是没底。
高并发(500TPS以上)、高可用是刚需,网络安全方面需要考虑网络分区、用户权限分级、流量监控及应对常见的网络攻击;技术架构需要考虑各个技术组件的兼容性、实用性、稳定性,以及底层架构的统一实现;应用架构还有考虑各个应用之间的各种对接规则、发版规则,接口规范等。
一番分析就一句话:路漫漫其修远兮,吾将上下而求索......
整个技术团队在一片迷茫中继续前行,没有想到同在“温水”中泡澡的我们,居然在这一刻还能够相互鼓励,曾连续几天都奋斗到凌晨凌两三点,大半夜三点多去“KTV”一顿狼嚎之后,回来继续鸡血。
之前的技术积累,在这一刻开始了各种爆发,当理论开始落地且能够落地的时候,会很明显的感受到一种向上的升力,情不自禁的拖着自己前行。
很多底层的技术知识开始弥补,底层基础决定上层架构,各种各样的灵感在高压下不断涌现,每一次沟通、辩论都会有新的东西,更是再一步巩固了先前的技术体系。
一个月内不仅给出了架构方案,而且是三套,可根据优先级进行筛选,当然也比较顺利的完成了后续的技术架构评审。
这一次工作完成直接导致了职位的升迁,可以说技术是硬实力,决定了可以争取到这个机会,对技术的态度与坚持,赢得了一批志同道合的朋友同事的认可,有信心继续走下去,这种信任与鼓励又反过来影响了自己,相互影响相互扶持。
于是,点亮了自己的第二盏灯。
架构搭建、架构重构、平台搭建这种工作,后面又负责了多次,基于前面的实践与落地,底气十足,尤其是将原有业务应用体系全部采用springcloud技术体系进行架构重构时,更是轻车熟路,迎来了技术之路的新的高度。
第三盏灯:思维&沟通
从最开始自己的单打独斗,然后组团攻坚,对技术的掌握、使用、认知都开始发生变化,到最后将技术能力凝练到可以灵活解决业务问题,并对其中的原理、逻辑都能讲的明明白白的时候,也会顺带不断打破职业瓶颈,继续提升。
近期围绕IO举行了一次技术沙龙,围绕各种IO流的快慢进行讨论,也谈到了kafka使用NIO的各种优势,但是大家各执一词,讨论很僵持,究竟哪种IO好用,没有得出让大家认同的结果,这个时候的思维方式,很容易体现出技术掌握能力;沟通表达能力,又能体现对技术的理解能力。
于在以下环境我们开始了一波实际的测试
环境准备:在Mac中创建Linux虚拟机
系统版本:centos7.9(aarch64)处理器: 4核
系统内存:8G
磁盘大小:128G
凡是参与讨论的IO我们都加入进行对比,总共五个,以读取1G文件测试为主进行测试。缓冲字节从32字节开始,递增至 8M进行对比,结果图如下:
数据信息:
数据分析:
从读取的数据信息中可以看到,在缓存字节4K之前,MappedByteBuffer占据优势,字节数越少优势越明显,缓冲字节在4K之后,不分伯仲。
注意:
bufferedInputStream默认有8K缓冲字节,可认为整个测试过程中,虽然效率上MappedByteBuffer不分伯仲,缓冲字节都为8K,因此不具备可比性。
经过这样一番效果认证,后续又通过监控磁盘IO、系统缓存、虚拟内存等一系列的数据监控,用数据说明了各个IO在各种条件下的运行效果,最后达成了一致。
继续成长,在技术这条路上继续努力,或者说也是架构师这条路,就是如今的第三盏灯,本质上就是一种解决问题的能力,不在局限于某一具体的技术,开始在行业内继续充电了解技术更迭,也在技术团队中授人以渔提高整体技术能力。
一路走来,自己是幸运的,遇到了很多机遇,在很多时候也做了很好的选择,也庆幸自己在学习的过程中很好的做了一些积累,在关键时候不至于囊中羞涩。
技术之路,曲曲折折,做好选择,放手努力,等一个机会,前面躺过的坑,其实也可以帮助填平后面的路。
猿创征文|点亮技术之路的三盏灯相关推荐
- 猿创征文|当我在追光 我与光同航--我与Java的技术成长之路
文章目录 前言 材料转码 初识JAVA 大学建议 1. 参加比赛 2. 坚持创作 3.养成看书的习惯 Java路线 1. java基础 2. 数据库 3. javaWeb 4. 框架 前言 今天借着官 ...
- 猿创征文|收到谷歌开发者大会正式邀请(Java学生的自学之路)
文章目录 一.前言 二.收到谷歌邮件 三.感想 四.学习之路 1. 坚持看网课并整理笔记 2.勤加练习 3.坚持总结 4.刷题技巧 5.心态调整 五.结语 一.前言 上一次通过了CSDN内部筛选后,在 ...
- 猿创征文|前路有光,初心莫忘,从编程小白,到如今小有所成,我这一路是如何走来的?
前言 无论是谁,对于编程来说,一开始看都很难看懂的,这也是为什么这个行业,属于互联网高薪行业代表的原因之一. 我是属于自学编程的非科班码农,在我看来,自学编程应该重点思考下自己的学习方式以及是否对 J ...
- 猿创征文|六年一日,我的焚膏继晷之路
猿创征文|我在Python领域的焚膏继晷之路 一.自我介绍 二.我和师父的机缘 三.拜师 or 闹剧? 四.我在CSDN的收获 五.关于我的学习 六.我的憧憬 一.自我介绍 大家好,我是 热爱科技的刘 ...
- 猿创征文|工作中遇到技术盲区后的自我成长
猿创征文|工作中遇到技术盲区后的自我成长 1.立场 我是一名python后端开发程序员,在一家创业公司中兢兢业业工作快两年了,从软件架构.开发.测试.部署.运维一手经办,到开发文档.API接口.开发周 ...
- 猿创征文|我的前端学习之旅【来自一名大四老学长的真情流露】
猿创征文 | 我的前端学习之旅 自我介绍 我浑噩的大一大二(是不是另一个你) 我的大三生活 大三上(学习过程.学习方法.推荐网站) 大三下(技术提升.荣誉证书.推荐比赛) 我与 CSDN 的机缘(从小 ...
- 猿创征文|我的Go成长之路道阻且长
猿创征文|我的Go成长之路道阻且长 自从2016年09月04日加入CSDN,已经整整六年了,回顾自己不太长的技术成长之路(毕竟还是00后),前前后后捣鼓过网络安全.人工智能.区块链.舆情分析.可以说是 ...
- 猿创征文 | DevOps运维的10个日常使用工具分享
猿创征文 | DevOps运维的10个日常使用工具分享 一.DevOps介绍 1.DevOps的简介 2.个人分享的10个工具导航 二.jenkins 1.jenkins介绍 2.jenkins的优点 ...
- 猿创征文|工具百宝箱-代码编辑器-版本控制工具-终端神器-项目与事务跟踪工具-SFTP客户端
工具没有绝对意义上的好坏之分,只有需求适合与否,这些需求可能包括:功能.价格.安全.服务.技术等诸多方面. 技术在更新迭代,开发者工具也在更新迭代.一个高效趁手的工具在工作上锦上添花.给大家推荐一下我 ...
最新文章
- SpringBoot 2.0 多图片上传加回显
- .net中的对象序列化(1): 序列化是什么, 以及一个简单的例子
- mysql 存储过程循环一张表的所有记录_MySQL数据库知识汇总
- VMware Tools installation cannot be started manually while Easy Install is in progress.
- 优秀自我简介200字_全球战疫 翰墨传情——东方盛世杯网络公益书画展优秀作品【二】...
- c mysql日期时间格式_[单选] 妊娠期血液成分发生改变,下述哪项是正确的()...
- 【二十二】win 10 :Jmeter 报告可视化 —— 配置 Jmeter 接口 HTML 可视化测试报告,Jenkins + Jmeter + Ant 自动化集成环境搭建
- POJ 2039 Floyd
- Oracle 统计信息收集
- android ndk opencv 3,opencv_and_opencv_contrib
- Visual Studio启动、附加进程调试,多个Web Application时启动多个WebServer关闭方法
- Matlab逻辑运算符/与/或/非/异或/all/any
- 微信机器人API开发
- Composer安装包
- 【积跬步以至千里】Markdownpad2报错: Html Rendering Error:An error occurred with the HTML rendering component。
- java代理模式实现
- Numeric 数据类型
- 如何做出一个微信小程序
- 一文看懂DAG技术的现状与趋势
- duck typing java_進一步思考Duck typing
热门文章
- 自媒体人不知怎么剪辑视频,这6个神器助你秒变视频达人!
- 【超详细】弱电工程综合布线系统培训资料
- VBA将一个表格拆分成多个新表格
- 技校计算机专业都学什么课程,技校人工智能主要学什么 人工智能专业是什么...
- node.js 详解
- hualinux ros 1.1:RouterOS如何入门及推荐资料
- 基于51单片机的产品数量自动计量系统protues仿真
- java基础起步(一)
- Hadoop官方文档翻译—— YARN ResourceManager High Availability 2.7.3
- 苹果手机html吊起拍照,苹果手机拍照教程,教你如何用iPhone拍出大片