文章来自:五月的仓颉
五月的仓颉 是一位非常优秀,乐于分享的大神,目前就职阿里
原文链接:https://www.cnblogs.com/xrq730/p/9159586.html

阿里面试成功已经过去一个月了,入职也已经过去十多天了,趁着周末写点东西和大家进行一下分享,本文会写到以下的内容:

  • 个人一路走来的经历
  • 未来的一些思考
  • 我自己理解五年这个时间节点一名优秀程序员应当具备的技术素质
  • 小广告时间

那这次加入的BU是菜鸟,一个非常有发展前景的公司。

从校园出发,走向阿里


工作五年,标题却是”四年努力”,实际上确实是这样,2013年从母校杭州师范大学毕业之后,我和很多刚毕业的同学一样,会没有目标、找不到方向、不知道未来到底要做什么,所以大约有一年的时间是很迷茫的,工作也就那样吧,得过且过。

大约一年过后,也就14年样子,那个时候公司还在西湖科技园,也许是自己的上进心作祟、也许是母校学长马云情怀作祟,有一段时间每天沿着石祥路回家,就想着这辈子我一定要凭借着自己的努力进入阿里,而且这种想法每天每天越来越强烈。

就像我公众号里面写的,4年前其实并没有现在这么多面试经或者程序员成长经,虽然有心,但是并不知道朝哪个方向去努力。于是想了一个办法:花了一个礼拜时间,把51job、猎聘这些那时候比较有名的招聘网站里面的Java岗位通通看了一遍,把每个岗位描述都写下来,并进行整理和总结,列了一份比较大的提纲,作为自己的学习目标。

在这之后,开启了算是比较疯狂的2015年吧,那一整年只有一个关键字—-学习。一整年除了几个极重要的人,几乎没有和同事、朋友出去玩过,八九点下了班回去就开始学习到十一二点、工作中比较空余的时间学习、双休日学习、各种大小长假学习,反正各种能利用到的时间都用来学习了,各种JDK源码、多线程、Java虚拟机这些都看了个遍,前前后后看过的书不下10本,像虚拟机这本书我好像有说过几次,PDF+实体书看了不下五遍,这个博客也是从15年开始写的。

学习是寂寞、枯燥的,这段时间里其实有太多次想要放弃,但每次也都熬了过来,可以分享给大家一个感悟:花一年自己逼自己一下,让一切优异的品质成为你的习惯。像我现在,就感觉努力、上进、钻研、好奇心这些已经是骨子里的东西了,研究一个技术点,不整理成一篇博文,我都不认为自己掌握了这个技术点。

至于工作,经过15年这一年的学习,由于个人水平的长进,16年到18年间,在工作中领导也愿意给我机会,会写一些底层的东西、会做一些系统性的设计、也有机会带几个人的小团队,在这一过程中,慢慢发现基本功并不能说明所有问题,因为必然会遇到没碰到过的东西、会遇到一些更复杂的问题,然后通过查资料、研究、寻找解决方案、解决问题进一步提升自己的能力。

个人技术成长,工作中成长(实际解决问题能力)一定是缺一不可的,就像前几天我们大部门老大分享的:什么是好的技术,能解决实际问题的技术就是好的技术。

18年年中,对的时间遇到一个对的部门、对的领导、对的团队,梦想照进现实

希望我分享的个人成长经历,能对看到的人有一些鼓励、有一些感触,如果让我总结一下,那么希望告诉大家两点:

  • 相信你自己,我这样学校一般又不聪明的人都能走到今天这一步,那么大多数人一定都能走到我这一步,而且能走得比我更远、更好
  • 世界上没有什么是努力办不到的,如果有,那么就更努力一些吧

五年之后,何去何从


在之前写过的一篇文章《面试感悟—-一名3年工作经验的程序员应该具备的技能》一文中,有一段专门写了对程序员的几个阶段的理解,当时是工作三年写的,一转眼两年过去了,我自己也差不多工作五年了,在这个节点上,结合自己的认识,说一下第五年开始,一个程序员应该朝哪个方向努力。

首先,前五年,如果一个程序员大致能做到一下几点(后面还会详谈):

  • 具有扎实的基本功
  • 能快速完成领导交给你的代码开发任务
  • 能在遇到问题的时候有正确的解决思路
  • 能对公司的新人进行一定辅导,包括但不限于技术点分享、代码评审、需求分析、表结构设计等

那么,从第五年开始,我认为可以、也应当朝更高的层次进行迈进,前一个层次如果更多是偏重个人,那么这个层次我认为更多应该偏重团队,简单罗列一下大致上应该有:

  • 系统设计能力,或许在之前给一个功能,能从DB设计–>服务端开发–>前端开发一栈把事情都做好,那么之后,在领导给出具体一块大业务,比如想做一个淘宝商城的会员模块,能充分分析出整个功能并把功能拆分成一个一个的点、能对每一个点之间的交互画出交互图、能梳理清楚数据库的ER关系图、能把工作合理分配给同事进行开发
  • 带领团队能力,大致就是把控整体开发节奏,保证在约定时间点前进行交付,不出现延期的情况
  • 大而博不如小而美,会10门技术、每门技术掌握到6分,不如会5门技术、2门技术掌握到8分,我感觉整个行业什么都会一点的人比较多,把一门技术进行深入研究的比较少,毕竟掌握也许只需要1星期,深耕或许需要1个月甚至更久。在五年这个节点,我认为选择一到两个自己感兴趣的方向进行深入研究会是一个比较好的选择

这是我自己的思考,也是我在第五年开始对自己的要求,希望这一些思考也能给大家带来一些启发。

五年节点,我理解的优秀程序员应当具备的技术素质

网上有很多所谓的Java程序员面试经,其实看下来的感觉就是没多大用,面试是没有套路的,每一个面试官问的东西也都不一样,如果根据那些面试问题去学习和准备,那真的是只见树木不见森林,对个人提升没有太大提高。

那么,在五年这个阶段,一个优秀的程序员应当具备怎样的技术素质呢?按照我个人的理解,主要就是基本功+项目

为什么之前说针对面试题进行学习和准备作用不大,因为我认为我们关注的不应当是题,而是题背后的一个一个的方向,这也就是我认为的基本功。那从基本功的角度来说,罗列一下我能想到的,包括但不限于以下内容:

  • 工作相关使用到的JDK类及其相关源码、机制
  • 设计模式,设计模式在工作中用到了哪些,具体使用场景
  • 并发类的相关知识,线程安全、锁机制、信号量、闭锁、栅栏、线程池等
  • 框架相关,Spring相关机制、Spring MVC相关机制、MyBatis相关机制、使用的细节点、框架实现原理等
  • JVM,内存布局、垃圾识别算法、垃圾回收算法、垃圾收集器、类加载机制、内存模型、出现内存问题时定位问题的方法等
  • 数据库的基本数据类型、索引机制、各引擎区别、锁机制、慢SQL定位及优化等
  • 缓存机制,这里的机制指的是缓存加载、缓存击穿、缓存雪崩这些机制及其相关应对方案,用过Redis、MemCache的最好理解一下它们的原理或者缓存提供的一些高级功能,集群如何实现
  • 分布式的一些知识,比如CAP理论、数据一致性的几种解决方案、分布式事务如何处理、分库分表怎么做、现有的相关解决方案等
  • NIO的作用,epoll模型是否知道一些,Netty的相关机制、Netty相比原生NIO的优点、半包拆包、断线重连解决方案等
  • Web相关,Get与Post的区别、转发与重定向的区别、跨域问题如何解决、如何保证接口幂等性等
  • 网络层相关,三次握手和四次握手、全连接队列和半连接队列、负载均衡算法等
  • 其他中间件,MQ作用和使用场景、服务化治理框架的作用和使用场景、配置中心的作用和使用场景等
  • 数据结构,数组、链表、栈、队列、树等优缺点,在什么场景下使用什么数据结构
  • Linux相关知识,基本命令的使用,排查日志、定位问题,项目或者第三方组件的基本运维等

坦白讲,以上的这些东西全都掌握也不可能,哪怕面试官肯定也有很多不会的,但这就是基本功,能多掌握一点多掌握一点,技多不压身,至于别人如何评价你,就留给别人去评价吧,做好自己能做好的就行了。我在之前写过的文章中反复强调深度+广度,深度优先、广度次之,有了深度+广度,在开发过程中我们可以尽快完成需求,在遇到问题情况下我们可以第一时间找到应对方案。

在三年的时间点,能掌握上述的知识点我认为已经是非常非常优秀的了,但这两年的经历让我意识到的是,到了五年的时间点,如果只是具备这些硬性技能,还是不够,这两年更多的应当是在项目上进行积累,也就是前面说的项目,大致上应该有:

  • 独立完成复杂业务,或者完成一个已有项目中的大功能点,这就需要有根据业务对功能进行分解、分析的能力
  • 独立排查复杂问题,在项目运行过程中,一定不可能安然无事,除开业务性的问题,CPU 100%是否能独立排查、内存溢出是否能独立排查、应用死锁或者DB死锁能否独立排查、API调用时间长能否独立排查,以上问题排查完毕能否及时解决
  • 带领团队的能力,可能这时候带领的是1~2个人的小团队,即使一个小团队,也能考验带团队、任务合理分配的能力

可能上面的要求有点高,可能工作中未必有这样的机会,但是不要抱怨,机会永远留给有能力、有准备的人,我们首先想的不应该是等待别人交给你一件有挑战性的事情,你在做这件事情的情况下去提升自己,而应当是先提升自己的素质,然后让别人放心把有挑战性的事情交给你来做。

回到我之前写的,为什么16年到18年间,领导愿意给我机会去进行尝试,首先就是因为个人水平的提升。

最后的最后


最后,我想的是,无论进入了BAT还是进入了FLAG,都绝不是技术道路的终点,不是可以高枕无忧地躺在过去的功劳簿上、无忧无虑过完下辈子的资本,相反,必须更努力,才能在一群同样优秀的人中脱颖而出。

四年努力,梦归阿里,和大家聊聊成长感悟相关推荐

  1. 五月的仓颉-四年努力,梦归阿里,和大家聊聊成长感悟

    转载 原文地址 https://www.cnblogs.com/xrq730/p/9159586.html

  2. 推荐系统(十四)多任务学习:阿里ESMM(完整空间多任务模型)

    推荐系统(十四)多任务学习:阿里ESMM(完整空间多任务模型) 推荐系统系列博客: 推荐系统(一)推荐系统整体概览 推荐系统(二)GBDT+LR模型 推荐系统(三)Factorization Mach ...

  3. 阿里高级技术专家宋意:平凡人在阿里十年的成长之旅

    宋意 读完需要 14 分钟 速读仅需 5 分钟 阿里妹导读:不管是什么角色,成长是我们每个人都必须经历的过程.作为一个技术人,成长不仅是技术上的不断精进,也包括日常工作中的方方面面. 本文分享阿里巴巴 ...

  4. 校招萌新在阿里妈妈是如何成长的

    " 又是一年校招季,相信很多同学都对未来充满了期待,面对未知,可能也会有一点紧张.想知道去年此时的"你们"现在怎么样了吗?我们采访了7位阿里妈妈技术团队的2021届校招生 ...

  5. 任何一种进步的过程都是反人性的,甚至是痛苦的。所以我们要努力做到在快乐中学习与成长。首先要对世界产生强烈的好奇心,兴趣是自己最好的老师!

    任何一种进步的过程都是反人性的,甚至是痛苦的.所以我们要努力做到在快乐中学习与成长.首先要对世界产生强烈的好奇心,兴趣是自己最好的老师!

  6. 三年努力,梦归阿里!

    点击上方"蓝字", 右上角选择"设为星标" 周一至周五早11点半!精品文章准时送上! 本文转载自公众号:石杉的架构笔记 感谢Crawley同学分享自己的面试经历 ...

  7. 金三银四过后整理出的阿里最新Java程序员面试题目(2018.4月)

    目录 技术一面(23问) 技术二面(3大块) 性能优化(21点) 项目实战(34块) JAVA方向技术考察点(15点) JAVA开发技术面试中可能问到的问题(17问) 阿里技术一面 Java IO流的 ...

  8. 追寻凌云梦——对话阿里云总裁王坚

    文 / 刘江 王坚其人 被同事习惯地称为"博士"的王坚是一位颇具传奇色彩的技术领袖.这位1962年出生的杭州本地人个子却很高,学者气十足,说话思维敏捷,声音洪亮.小时候成绩并不出众 ...

  9. 阿里架构师的成长之路,Java开发者的技术梦要如何实现

    写在开篇: 不管是开发.测试.运维,每个技术人员心里都有一个成为技术大牛的梦,毕竟"梦想总是要有的,万一实现了呢"!正是对技术梦的追求,促使我们不断地努力和提升自己. 然而&quo ...

最新文章

  1. 设计模式-行为-Iterator(迭代器)模式
  2. 04.通过qss文件设置setStyleSheet
  3. python wrapper_Python functools之partial, update_wrapper, wraps
  4. 《Troubleshooting Windows 7 Inside Out》文摘-1
  5. python怎么读取中文文件-Python中使用不同编码读写txt文件详解
  6. Vue3+ts+vite 国际化处理
  7. mysql学生信息管理系统设计_学生信息管理系统的设计与实现(MyEclipse,MySQL)
  8. Web 网页通信之长连接、长轮询
  9. Android9 点击按键KeyEvent.KEYCODE_CAMERA没反应
  10. 惠普HP Officejet K7103 打印机驱动
  11. 什么牌子的洗地机最适合家用?洗地机品牌排行榜前十名推荐
  12. linux 16.04 安装与使用vscode试水
  13. bars 除障句完整_精选每日一句早安问候语语录49句
  14. IP数据报的分片和重组
  15. S32K144(13)PDB
  16. 使用Windows Defender Atp进行威胁狩猎
  17. ibase4J分布式架构使用eclipse部署
  18. un8.22:前端页面详情页面(代码篇)。
  19. 为什么越来越多人选择3D打印模型手办
  20. informatica客户端连接报错pcsf_46008

热门文章

  1. 锐捷云课堂助力海南农垦中学 根治计算机教室“老病根”
  2. mysql隔离级别与悲观锁、乐观锁
  3. unix环境高级编程-进程间通信
  4. 2016网易实习生编程题:n个骰子的和等于m
  5. 用dedecms自定义表单创建简易自助预约系统
  6. Yik-Chung Wu ---Time synchronization for wireless sensor networks
  7. 在一台服务器绑定多个IP
  8. 使用idea创建gradle的springboot工程
  9. 协程概念,原理(c++和node.js实现)
  10. new/delete和malloc/free的区别