传统行业程序员的深度焦虑?——快来互联网行业吧!

前言

很多在传统行业摸爬滚打的程序员愈来愈焦虑了,有些甚至睡不着觉。为何?传统行业的程序员们天天进行的都是业务代码的编写,接触不到更新更好的技术;公司的效益并很差,如未达到目标收益,只能进行“瘦身”,技术人员也很恐慌;看到BAT等互联网企业飞速发展,程序员的待遇也水涨船高,不免眼红,可是如何转型却一头雾水。前端

下面就几个方面和你们谈谈传统行业的技术人员如何转型互联网。linux

传统行业和互联网行业的区别?

传统IT行业首要的目的是作项目,是为某一个客户解决实践需求,供给个性化的效果。nginx

企业的中心竞争力是项目经历,IT技能仅仅解决问题的一种方法,因此要求在解决问题的前提下,控制好开发成本,确保体系安稳、兼容、可拓展。于是传统IT企业通常选用成熟、安稳的体系架构布置计划。和现有的体系确保兼容性,也是传统IT企业对技能坚持慎重的缘由之一。程序员

互联网IT行业的首要目的是作产品,是解决某一类人的某一类需求,供给通用的解决计划。算法

企业的中心竞赛力是用户量(流量),事务逻辑相对比对简略,在可以解决问题的前提下,互联网企业有必要把产品作的更能吸引用户、留住用户。互联网IT企业对技能的要求是提供比竞赛对手更漂亮、更好用、更安稳的产品。为了在残酷的竞争中坚持竞争优点,互联网企业也更情愿采用新技能、新架构。互联网企业的的事务量大,对实时性要求高,也是互联网企业需求采用新技能的重要缘由。sql

 

程序员从传统行业转到互联网行业的缘由?

一方面,很多程序员都有必定的技术追求,喜欢关注流行技术。好比动态语言、Ruby、Python、nginx、并发、大数据。但这些东西离传统行业的工做内容很是远,天天和寄存器,底层驱动,还有跟芯片厂商封装了无数层的SDK打交道。很多程序员的进取心也被磨灭的差很少了。数据库

传统软件行业技术更新的很慢,而且在工做中没法接触到更多新的技术内容。“被过期”的几率比较大。因此,很多程序员都打算转行。编程

另外一方面,世界上并不缺乏程序员借助互联网成功走向人生巅峰的案例,比尔·盖茨、雷军、马化腾、周鸿祎、李彦宏等等都曾经是技术人员,遇上了互联网蓬勃发展的浪潮,实现了自我价值,创建起属于本身的“商业帝国”。缓存

传统行业的程序员的晋升周期可能会很是长,5年,甚至10年时间才能作到高位。你们身边应该有过相似状况:年末评级时,个人贡献是最大,但永远是上面的人评价最高。互联网行业的状况要好不少,给那些有能力、肯努力的程序员们提供了另外一种快速实现自我价值的可能。以上几位互联网大佬就是最好的证实。安全

从传统行业到互联网行业,你还差多远?

有一个广泛的现象,来自于传统行业的技术人员,大多数掌握的技能是SSH,稍微资深一点的工程师对J2EE规范有所了解,他们仍然在使用J2EE规范的EJB, JPA, JMS, JCA, JAAS等技术,数据库基本上使用Oracle,DB2,Sqlserver等等。

传统行业的技术人员通常都是在完善的框架下面进行业务模块填充,所以,一个传统的开发人员会包揽一个模块从前台到后台全部的工做,这包括:HTML, JS, CSS, EJB, JPA, SQL, PLSQL等等。

仅仅是这些技术还不够,若是咱们要一步跨入互联网,还须要以这些技术为基础,进一步扩展技术视野,对欠缺的技术广度和深度进行补足。

下面就传统行业技术人员的现状,及转型互联网行业须要掌握哪些技术进行一些探讨:

消息队列

那么若是你在传统行业掌握了JMS规范定义的消息队列技术,你只须要再往前走一步,请深刻学习开源的Kafka、RockitMQ、ActiveMQ、RabbitMQ、MemcacheQ、Redis、ZeroMQ、MSQ等。

缓存

除了要学习分布式缓存,例如:Redis、Memcache自己的功能和技术点外,最主要的要有缓存分片的思想,在互联网里大多数的热数据都是缓存在缓存服务中的,这须要大量的缓存服务器,单台机器是不能知足需求的,那缓存分片是一个大话题,缓存分片的实现方式通常有以下3种:

  • 经过代理层实现,例如Codis,在代理层实现数据的路由,对应用层透明。
  • 客户端分片,实现简单、使用简单、支持分片、复制、失效转移等功能。
  • 缓存服务器支持的高可用模式,例如:Redis 3.x、Sentinel等。

服务框架

在互联网的世界里,几乎全部的公司都实现了服务化,服务化致使的问题就是一致性问题,如何解决高并发系统的一致性呢?我在本身创建的Java架构群895244712中进行了一些解答,感兴趣能够加入了解。

最近微服务变得愈来愈流行,微服务其实是服务化的一个延续,是更细致化的服务化的架构,微服务的服务框架的表明是Spring Cloud,它与Netflix集成,提供了限流、熔断、仓壁隔离、失效转移等为服务化中必不可少的高级特性,你们能够到 官网文档 进一步学习Spring Cloud相关技术。

数据库

在传统行业,大多数人开发人员都使用Oracle, DB2, Sqlserver数据库,其实,从功能和性能上来说,他们都不亚于Mysql, 甚至比Mysql更优秀,可是Mysql是免费的,这使得Mysql获得互联网行业的青睐。

在互联网行业里面对性能追求到达了极致,所以会要求开发人员对数据库原理有所了解,其中最重要的部分就是索引,我也经过视频分享了《揭开Mysql B+Tree索引神秘面纱》的原理,一样的,加群便可得到。

负载均衡

刚才谈到,高并发系统,压力山大的时候怎么办?思想只有一个分而治之( divide-and-conquer)。所以,负载均衡则很是重要,传统行业以销售产品为盈利模式,所以,大多数项目在须要负载均衡的时候,多使用F5硬件负载均衡。

那么互联网呢?多采用软负载均衡,你必须了解LVS,nginx, Apache, Varnish, Haproxy等七层和三四层负载均衡原理和产品。

JVM

在互联网行业作Java开发,必定要对JVM有所了解,而且进行深刻的研究,例如:GC,类加载,Hotspot编译器,多线程、并发和锁,IO和NIO等。这些对后续性能调优等也会有很是大的帮助。

大数据与云计算

做为一个IT从业人员,必定要跟上技术潮流,像云计算,大数据,CAP, BASE, 选主算法等概念不得不去了解,对于热点技术不得不研究,例如: Hadoop, Hbase, Zookeeper, Openstack, Dooker, Kafka, Storm等。

性能评估和容量估算

若是你决定要来互联网一显身手,你必须学会性能评估和容量估算,这包括对前端机、缓存、消息队列、数据库等各个性能指标的估算,例如:吞吞量,响应时间,内存,CPU,IO,网络IO等。

为了确保架构设计的合理性,性能和容量评估是在架构设计初期完成的,用来证实架构方案可行,可是在项目实施中和实施后,还须要对项目的进行压测,来证实项目按照既定的目标而推荐和完成。

互联网架构方法论

在互联网行业里,处理大规模高并发的用户请求的核心思想只有一个,那就是“分而治之”,所以,一般业务被拆分为多个职责单一的服务,在某一个单服务里,业务逻辑并不复杂,可是对非功能质量需求的要求较高,这一般表如今性能、可用性等方面,所以互联网的架构设计中首要考虑的是非功能质量,这和传统行业注重功能和业务流程的状况有所不一样。.

技术攻关和线上应急

在互联网企业里,大多数产品都是针对用户端的,用户端的产品的特色是拥有海量的用户、产品要可以处理海量用户产生的大规模高并发的用户请求,所以会对产品的可用性比较敏感,在这种环境下,技术攻关和线上应急显得尤其重要。linux命令、脚本及Java虚拟机命令都是须要掌握的。

看到这里你会豁然开朗

但愿这篇文章可以帮助更多的传统行业的从业人员转入互联网,在互联网的大舞台上展示你的才能,最后,附赠一张我在互联网行业里多年经验总结的《Java技能图谱》,你们能够根据其中的思惟导图来深刻学习各项知识点,每一个知识点都须要系统的学习,或者看一本书或者查询相关的资料,切记要积累知识的广度的同时也要有必定的深度。

ps:须要高清大图的朋友能够加群895244712获取,群内也会分享一些上述知识点的资料给到你们学习,愿共勉!

这张Java技术学习路线图包括了上面说的这些知识点,分为七大模块,分别是

源码分析
大部分程序员都会「写」代码,或者至少会抄代码和改代码。可是,会读代码的并很少。正确阅读源码是咱们必须掌握的知识。

分布式结构
随着咱们的业务量愈来愈大和越重要,单体的架构模式已经没法对应大规模的应用场景,并且系统中决不能存在单点故障致使总体不可用,因此只有垂直或是水平拆分业务系统,使其造成一个分布式的架构,利用分布式架构来冗余系统消除单点的故障,从而提升整个系统的可用性。

微服务架构
关于微服务架构的取舍
一、在合适的项目,合适的团队,采用微服务架构收益会大于成本。
二、微服务架构有不少吸引人的地方,但在拥抱微服务以前,也须要认清它所带来的挑战。
三、须要避免为了“微服务”而“微服务”。
四、微服务架构引入策略 – 对传统企业而言,开始时能够考虑引入部分合适的微服务架构原则对已有系统进行改造或新建微服务应用,逐步探索及积累微服务架构经验,而非全盘实施微服务架构。

并发编程
只有深刻了解最底层的运做原理,增强逻辑思惟,这样才能写出高效、安全、可靠的多线程并发程序。

性能优化
咱们不只仅对项目要指挥若定,还要能解决一切性能问题。只有深刻学习JVM底层原理,Mysql底层优化以及Tomcat调优,才能达到知其然,知其因此然的效果。除了性能优化以外,也能提供通用的常见思路以及方案选型的考虑点,在方案选型时的意识、思惟以及作各类权衡的能力。

项目实战
要想立足于互联网公司,且能在互联网浪潮中不被淹没,对于项目的开发实战演练是没必要可少的技能,也是对自身能力的一个衡量,有多少的量对等于得到多少的回报。看似简单的一个项目需求图谱,其中的底层原理,实现原理又能知道多少?

总结

以上是目前互联网最主流的技术知识体系,也是目前BAT用的最多的Java技术体系,只要熟练掌握了这些技术知识,完成从传统行业到互联网行业的转型没有什么问题。

除技术以外,更重要的是学习能力、技术视野、发展定位、管理能力等其余辅助能力的全面提高,只有这样,咱们才能在飞速发展的互联网行业站稳脚跟,不被淘汰。

相关文章
相关标签/搜索