互联网专业人才的数量满足不了市场大规模的需求,所以这个行业工作机会多、薪酬水平高的同时流动性也非常大。作为互联网行业的三大巨头,百度、阿里巴巴、腾讯对于互联网人才有很大的吸引力,他们的员工也是众多互联网同行觊觎的资深工程师、管理者人选。根据脉脉数据研究院独家提供给界面新闻的数据,我们制作了一份明星互联网公司人才迁徙图表,通过采访进一步验证数据所呈现的趋势,并总结了7个有趣的发现。
BAT互跳频繁,有人在集邮吗?
从图表里不难看出相比流去其他公司,BAT互跳更为频繁。百度和腾讯在为阿里巴巴输送最多人才的公司中分别排第一和第三,而腾讯又是阿里巴巴人跳槽最多的去处;百度和阿里巴巴是为腾讯输送最多人才的两家公司,而腾讯人一转头又跳去了百度和阿里;百度对阿里和腾讯员工的吸引力好像较小,这两家公司并没有进入为百度输送最多人才公司的前三,但是百度人去腾讯和阿里却十分普遍。
“涨工资最好的方式是跳槽嘛。因为互联网圈子很小,有名的也就这几家,你不是从这家跳到那家去,就是那家跳到这家来。”前阿里员工冯锐(化名)告诉界面记者,毕竟无论从薪资待遇、平台规模、工作稳定性还是工作内容来说,国内其他互联网公司少有能超过BAT的,再加之资本寒冬影响下有些人可能趋于保守,“从BAT出去的员工,很多会因为不适应而再次跳槽,二进宫三进宫的也很常见。”
虽说是集邮般的互跳,不同公司的员工在选择去向时仍显示出了一定偏好。就这次的数据和采访来看,我们得出了一个跳槽链:阿里人最爱去腾讯,腾讯人最爱去百度,百度人最爱去滴滴,滴滴人流回百度。
而要想成为一个具有实力的程序员一定离不开下面几点:
写代码.
写很多代码.
针对各种不同的需求不同的应用场景写各种代码.
不断思考为什么要这样写,
不断反思如何组织这些代码,如何降藕,如何提高效率.
直到你可以闭着眼睛一个人把一整个应用系统写下来
然后持续运维、变更
在运维和变更中继续反思如何组织代码,为什么要这样耦合.
然后你会发现,你的主要工作变成了教别人怎么写,教别人不要这样写.
恭喜你,你可以算是狗屎了.(架构)
理论上能帮助你的,大概有 算法与数据结构 和 设计模式.
笑话一则:
某程序员自我介绍:"我是程序员",客户说,"程先生,你好",程序员说:"别客气,叫我序员".架构师自我介绍到:"我是架构师",客户说,"贾先生,您好",架构师说:"别客气,叫我狗屎".(架构)
Java架构师工作硬技能实力
所谓架构师,思考的是全局的东西,是如何组织你的系统,以达到业务要求,性能要求,具备可扩展性(scalability),可拓展性(extendability),前后兼容性等.可能涉及到的东西包括了从硬件到软件的方方面面,实在是一言难尽.
如果你立志做架构,首先打好基础,从最底层开始.然后发展到各种技术和语言,什么都要懂两点,要全面且不肤浅.为什么不是懂一点?你要看得透彻,必须尽量深入一些.别人懂一点,你要做架构师,必须再多懂一点.比如你发现golang很流行,别人可能写一个helloworld就说自己玩过golang,但你至少要尝试写一个完整的应用.不肯下苦功,如何高人一头?
另外你要非常深入地了解至少一门语言,如果你的目标是java,就学到极致,作为敲门砖,先吃饱了才能谈理想.而Java学到极致势必涉及到设计模式,算法和数据结构,多线程,文件及网络IO,数据库及ORM,不一而足.这些概念放之一切语言都适用.先精一门,为全面且不肤浅打基础.如果你想学习架构师的知识加扣扣群561614305
另外就是向有经验的架构师学习,和小伙伴们讨论辩论争论.
其实最重要的能力就是不断学习.在思考新的技术是否能更好地解决你们遇到的问题之前,你首先得知道并了解新的技术.
说了半天,架构师很多时候是被迫上位的,并不是你学了这个和那个之后你就成为架构师了,这并不是RPG游戏.
既然java架构师,首先你要是一个高级java攻城尸,熟练使用各种框架,并知道它们实现的原理.jvm虚拟机原理、调优,懂得jvm能让你写出性能更好的代码;池技术,什么对象池,连接池,线程池...:;java反射技术,写框架必备的技术,但是有严重的性能问题,替代方案java字节码技术;nio,没什么好说的,值得注意的是"直接内存"的特点,使用场景;java多线程同步异步;java各种集合对象的实现原理,了解这些可以让你在解决问题时选择合适的数据结构,高效的解决问题,比如hashmap的实现原理,好多五年以上经验的人都弄不清楚,还有为什扩容时有性能问题?不弄清楚这些原理,就写不出高效的代码,还会认为自己做的很对;总之一句话越基础的东西越重要,很多人认为自己会用它们写代码了,其实仅仅是知道如何调用api而已,离会用还差的远.
熟练使用各种数据结构和算法,数组、哈希、链表、排序树...,一句话要么是时间换空间要么是空间换时间,这里展开可以说一大堆,需要有一定的应用经验,用于解决各种性能或业务上的问题;有时间再补充.
熟练使用linux操作系统,必备,没什么好说的 .
熟悉tcp协议,创建连接三次握手和断开连接四次握手的整个过程,不了解的话,无法对高并发网络应用做优化; 熟悉http协议,尤其是http头,我发现好多工作五年以上的都弄不清session和cookie的生命周期以及它们之间的关联.
系统集群、负载均衡、反向代理、动静分离,网站静态化 .
分布式存储系统nfs,fastdfs,tfs,Hadoop了解他们的优缺点,适用场景 .
分布式缓存技术memcached,redis,提高系统性能必备,一句话,把硬盘上的内容放到内存里来提速,顺便提个算法一致性hash .
工具nginx必备技能超级好用,高性能,基本不会挂掉的服务器,功能多多,解决各种问题.
数据库的设计能力,mysql必备,最基础的数据库工具,免费好用,对它基本的参数优化,慢查询日志分析,主从复制的配置,至少要成为半个mysql dba.其他nosql数据库如mongodb.
还有队列中间件.如消息推送,可以先把消息写入数据库,推送放队列服务器上,由推送服务器去队列获取处理,这样就可以将消息放数据库和队列里后直接给用户反馈,推送过程则由推送服务器和队列服务器完成,好处异步处理、缓解服务器压力,解藕系统.
以上纯粹是常用的技术,还有很多自己慢慢去摸索吧;因为要知道的东西很多,所以要成为一名合格的架构师,必须要有强大的自学能力,没有人会手把手的教给你所有的东西.
想成为架构师不是懂了一大堆技术就可以了,这些是解决问题的基础、是工具,不懂这些怎么去提解决方案呢?这是成为架构师的必要条件.
Java架构师软实力
架构师需要对整体结构的把握. 需要用专业的技能, 尽量把业务逻辑和技术逻辑分离. 把数据和流程分离. 解耦能力, 敏锐的发现问题的能力, 能够把握性能, 功能和成本之间的关系. 从整体上把握产品,技术能力, 全局把控的能力,解读、分析、解决问题的能力,技术前瞻能力,还需要一定的沟通能力,为人处事、包括项目管理.