美文网首页
2018所思所感所悟

2018所思所感所悟

作者: 帅气小伙 | 来源:发表于2019-02-03 01:41 被阅读49次

    在2018年,我学会了如何规划人生。
    在2018年,我学会了如何快速提升技术。
    在2018年,我学会了如何做技术选型。
    在2018年,我学会了如何处理职场关系。
    在2018年,我学会了如何应对工作压力。
    在2018年,我以平稳的心态,获得了职场的晋升。

    金三银四

    2018年3月,一回来上班就有一股离职跳槽的风向,很多人都在议论年终奖和薪酬调整的话题,这股暗流持续涌动着,终于在4月份爆发了。离开的是我的几个大学同学,非常要好的那种,大学我们曾经是一个Team。同样的也包括了我的导师,从我实习一直带领我入门的导师。这个时期,我的心情也很低落,也准备了简历,也进行过面试。也通过了,后来没有去。

    我为何而情绪低落?

    作为一个刚刚步入职场的人来说,确实很容易受到同事离职的影响,下班再也没有人倾诉公司里边发生的琐事,再也没有人能够在你技术遇到难题的时候给你最强劲的火力支援了,顿时间感到了无助。而且同事的离职也很容易让你有一种“公司很不好,福利很差,要尽快离开这个坑”的感觉。特别是我导师的离职,以前都是他给我最正确技术指导,让我少走了很多弯路,也让我快速地成长起来。他走了,我的工作会比以前多出一倍甚至两倍。很慌,于是我就开始整理简历,无心工作了,开始复习一些基础性的东西(JVM特性,设计模式,Spring源码等等),去背面试题。

    最后我停止了面试,选择了继续留在公司

    我看了很多面试的岗位要求,也考虑过很多行业(游戏,金融,教育)。发现自己在整个市场的环境下,真的就是一只蚂蚁。要精通的不精通,要熟悉不熟悉。与其换到一个不熟悉的行业,从头开始。还不如稳扎稳打的在一个行业里积累经验,跳槽之后的薪酬也没有高多少。而且我觉得对于我这种刚刚毕业一年不到的人来说,薪酬并不是首要考虑的东西,要考虑的是自己应该怎样快速地成长起来,用实力来证明自己,而不是用过多的面试技巧去说服别人给你满意的薪酬。大公司固然有大公司的好,福利好,平台广,大牛多,技术宽,但是我进不去,我也不想专门去准备三五个月的面试,这样多没意思。进大公司的机会很多,毕竟他们天天都在招人,机会多得是。

    如何去考虑自己的职业生涯?

    经过了这金三银四,我彻底明确了自己的职业方向。我问了自己的几个问题

    应该如何选择一个什么样的行业?

    我是一名从医学院校毕业的类计算机专业的普通本科生,所以在医疗行业我能够快速适应。而且医疗在未来的发展趋势也挺不错,值得深入了解。医疗行业的信息化程度较其他行业相对落后,具有挑战性和开创性。于是我毫不犹豫地选择了医疗行业。

    应该如何抓住机会?

    职场是一个机遇与挑战并存的地方,在我的处境:
    机遇:我将拥有独立的研发机会(技术选型,系统设计,代码管理等),有可能获得职场的晋升。
    挑战:我并不能胜任以上所有的工作。
    只有迎接挑战,才能获得机遇。

    应该树立怎样的职场形象?

    我爸从小叫教导我,做人要靠谱。所以我要求自己尽量把别人交给我的事情做好。
    每一个技术方案的提出,都要事先做可行性试验。
    每一次技术支援都要求自己,做到出手必成。
    每一天都保持高度的专注,持续的思考,学习新的知识。

    破釜沉舟,志在必得

    在明确了自己的职业方向和未来几年的人生规划后。我开始沉着地应对接下来的工作了,我对我自己说,这个部门以后我做老大。
    数据交换平台,承载着公司对接医院数据的重要组件,一直是我和导师负责维护和升级的。在此之前已经上线25家医院,未来的规模将会去到75家(合同都签了)。

    如何一人维护75家数据交换平台,并且保证他们能快速地落地
    源代码管理(Git管理)

    之前的项目代码只有一个分支(SVN),但是由于每家医院在对接的时候,都有特殊的需求,单纯用SVN进行代码管理很麻烦,于是我采用了Git管理,并且也分支的形式管理,一家医院一个分支。
    (master分支+dev分支+N医院分支)
    在每家医院发现交换平台bug时,在此医院分支修复,修复后合并到dev分支,测试通过后再合并到master分支。
    每次发包都以master分支为基准。
    其他医院非必要情况不升级,升级前要与master分支做比较,合并代码,本地测试通过后再升级。

    项目结构调整,加快迭代速度

    以前由于项目未做模块化划分,导致了代码开发混乱,无明显的分层,维护效率低。定位问题难。于是我花了进2个星期的时间,叫代码换成了mavan的模块化管理。替换了之前自定义的持久层改用mybatis-plus。加快项目的开发速度(单表CRUD+界面)30分钟完成。

    代码健壮性和可拓展性

    之前刚入门,代码写得很垃圾,于是开始运用一些简单的设计模式(动态工厂,模板方法,发布订阅)去重构一些重复的代码,尽量消灭掉。后来运用一些高级的Java特性(泛型,反射,动态代理,策略模式)去重构那些写得不灵活的代码。最终做到了增加一个组件,只需增加一个类,而不需要各种复制粘贴了。

    项目依赖管理

    之前没有做项目依赖管理,导致了各种jar包乱用,导致了war包体积过于庞大,随便引入一个jar包都可能导致项目无法启动。于是我采用了idea的maven依赖树删减不必要的依赖(exclusion ),最终使war体积减少30%,每一个jar包版本都在根pom文件有维护。
    从我导师离开的一个月,经过以上的工作,我已经能从容地面多数据交换平台的维护和升级了,在这段时间里,我的技术得到了很快的提升,因为我懂得了如何去写出更好的代码,如何让自己更快得产出。

    如何让自己的技术快速的提升

    数据交换平台是一个很重要的系统,它的性能和稳定性很关键。但是它始终没有一个集群的功能。它的底层是基于mule的,但是它又是对mule的独立封装。
    于是我去研究了mule的集群原理,很痛苦。真的我连mule的源码都没有跑起来,也是硬着头皮的去看他的官方文档。后来我发现,其实我们可以换种思维去看这些东西。

    源码只是用来印证你的猜想,并不是让你由头到尾的去debug跟踪。

    我看了网上很多的源码分析,他们一贯的做法都是,先把源码clone下来,在本地跑起来,然后一步步debug跟踪,打log。然后更新一篇文章,完了以后就什么都不管了。最终读者看了也是一头雾水。为什么呢?因为源码只是一种实现形式,光去读这些形式的东西,很容易在里头绕弯路,而且很容易搞错了方向。

    学技术要学思想,学理念,不能浮在表面

    就拿mule来说,它的几个重要的概念

    组件名称 组件描述
    mule message mule可以将很多种协议(ftp,http,tcp,udp)转换为统一的mule message
    endpoint mule message 来源的端口
    flow mule处理mule message的处理流程 的总定义
    processer 具体的处理流程
    transform 特殊的processer,mule封装过的
    mule在我看来

    当我们从mule的设计文档明确了简单的设计思想和设计理念后,我们再从源码印证,我学得更深,我学得更透彻。
    回到mule的集群问题

    mule的集群架构

    很明显,mule对应外部的load balance 是基于外部组件的,这一点我们可以运用nginx来解决。那么它的内部是如何实现的?


    共享内存

    我们知道mule内部的传输是基于mule message的,在分布式的传输中必定要对其进行序列化和反序列化,mule为了提高性能,采用了kryo。服务注册采用了hazelcast。


    mule内部集群实现细节
    mule的内部负载均衡的本质是:将flow的每个processer注册到hazelcast,再利用
    hazelcast的服务负载均衡去实现的。
    最终,我综合了各种技术选型,采取了nginx+ignite的技术方案,实现了mule的集群。

    包括后面的kettle学习,rabbitMQ学习,ignite学习。我都采取了这种方式,学得很快。在看他们的源码的时候,我无需将他们的代码跑起来,却能准确得猜测出源码具体的位置。

    区域化医疗,我又一次面临了巨大的挑战

    医疗面向集团化,区域化的趋势越来越明显,公司也承包着很多这样的项目。而对于我来说,是一个巨大的调整。医疗信息的区域化,意味着信息共享,互联互通。而之前的数据交换平台只是作为单独一家医院的设计。区域医疗绕不开的三座大山“病历”,“影像”,"医疗记录",如何做到它们的互联互通和信息共享?

    数据集成,汇聚记录

    医疗记录都沉淀在各个厂商的数据库中,我们要做的就是将他们拿出来,放到一个地方,也就是做数据抽取。开始我们采用了kettle的方式去做数据抽取,但是在实施过程中,效率极低。因为kettle是的图像化操作,虽然简单,但是对于实施人员来说,也是有要求的。而且开发只能远程去调试,由于网络原因,经常中断。导致了数据抽取开发效率低。而且kettle在运行时容易出错,导致数据丢失。这些种种问题都在困扰着我,我几乎在这段时间都是很烦躁。后来我看到了阿里的Dataworks,才明白了什么叫数据治理。
    于是我开始着手设计数据治理平台。其实数据治理平台的理念就是:统一配置,统一监控,统一管理。

    统一配置

    kettle的图像化只能作为特殊的处理手段,不能够运用于大规模的数据抽取,因此我们需要对kettle的组件进行进一步的封装,能够以配置参数的形式就能搞定一个业务的抽取。然后在治理平台做配置的管理和维护。

    统一监控

    每一笔数据的流向都能够实时可视化,实时也就是意味着实时的数据流(kafka)

    统一管理

    数据在某些情况下都是需要转换或检验的,我们要对这些转换规则和校验规则进行统一的管理。

    影像中心,共享图像

    区域影像中心,它并不是一个完整的业务系统,主要功能有三点

    图像采集

    有子程序安装在医院前置机,负责将图像转发都影像中心(采集程序)

    图像存储

    有子程序专门负责接收图像,并根据AETitle标识图像,存储图像相关信息,做医疗机构的区分。并叫图像存储到存储网格中去

    图像查询

    给定业务参数即可得到图像

    病历转换,文件展示

    每家医院的病历格式都是非常复杂的,有文本的,有pdf的,有图片的,有网页的,有你想不到的。于是我们将这些转换交给了每家医院的数据交换平台,由它转换成pdf文件后上传。其他业务系统使用pdf文件作为展现。针对部分非结构的病历,格式难看,建议读取pdf文件原文后,有专门的病历整理。形成一份样式好看的病历。

    从容的心态,面对职场压力

    关注行业动向,了解技术需求

    如何才能做到从容,我觉得你要时刻关注技术的动向,社会技术的革新和需求走向,能够有把握有信心,就算我失业了,也能很快找到工作。

    不断创造价值,能让他人体现你的价值

    有人会为你的努力买单,只要你能够不断地创造价值,我们要对外界输出自己的价值,让别人感受到你在进步,你的突出。

    有自己的职场形象,做最好的自己

    当你迈进公司大门的那一刻,你的职场秀就已经开始了,请让别人对你有良好的印象。

    相关文章

      网友评论

          本文标题:2018所思所感所悟

          本文链接:https://www.haomeiwen.com/subject/flyesqtx.html