问:工作中,有时候实现一个功能,会去看有没有现成的轮子可用。对于重复造轮子与改造轮子有什么看法?
答:一定会的,其实这也是一个提高技术能力的方法,比如今天想做个日期转换的功能,JDK8有日期的新特性就会考虑直接使用LocalDate.now().format(DateTimeFormatter.BASICISODATE),
以前都是自己写个DateUtils。
如果已有的轮子不满足需求,我觉得可以基于已有的轮子进行改造,提供更多的特性。
在写代码的过程中,永远要思考的是现在业界的技术方案是如何做的,
现在的方案有什么优点或缺点,我能不能直接使用,不能使用的话,是否优化后可用,当然用的时候要了解它的实现原理,做到知其然知其所以然。
问:阿里的技术专家P7从招聘层面上来说,比如工作年限,过往经历,技术能力等需要达到怎样的要求,可否详细讲一下?
答:年限是5-10年,
技术能力有几个方面的要求,扎实的基础能力,在技术上要有技术亮点,用过的框架要知道其技术原理,能独立解决各种技术问题,具备分布式系统的开发经验,比较强的实战能力。
阿里的5要求能独立负责一个模块,6要求能独立负责一个系统,7要求能架构和负责多个系统,并规划系统的未来能力,在某个领域达到专家水平,可以是某个业务领域,也可以是某个技术领域。
独立这两个字要求很高,即遇到任何技术问题,你都能独立解决。
问:工作中,产品方案设计的时候,经常会存在多方分歧,有分歧就会存在妥协,如何合理的坚持自己的观点,如何合理的做出妥协?
答:方案没有对错,每个方案都有他的优点和缺点,要分析出别人方案的优点和缺点,肯定对方方案的优点,再针对缺点提出对方如何解决这个问题,还是说不解决这个缺点。一起讨论出最合适的方案,而不是要争论谁对谁错。
问:我就是在业务团队,偏技术。框架听起来很酷但遥远,能否带入门,给几个知识点?
答:在业务团队也可以做很多框架,比如可配置化支持业务的框架,自动生成添加删除修改页面的框架,业务数据校验的框架,
只要多思考如何快速支持业务,就能找到合适的业务框架。可以从几个点出发,配置化支持业务,页面自动生成,流程标准化等。
问: 最近在学习Spring源码,看了点书,可以跟着作者的思路看源码,但是看完不久就忘了,其实是没有太多的应用场景的,对于看源码,有什么好的方法吗?
答:可以用这个思路,比如让你来设计一个Spring框架你会如何来设计,Spring Core最重要的就是IOC和AOP,
自己可以尝试实现下简单的IOC和AOP功能,然后再去对比看下Spring是如何实现的,这样即使忘记了Spring的代码,但是仍然能基础其实现原理。
问:对于三十岁的程度员,如果还想再深入做技术,有什么建议?
答:技术人员一定要有危机感,无论多大年纪仍然要持续的学习,我也已经三十多了,每周会花点时间学习点技术。
但是年纪大了,其实时间不会那么多,所以要提高学习的效率,掌握一些学习方法和方法论,并且要静下心来持续的学习。
学技术什么时间都不晚,因为总有新技术冒出来,但是一些永远不变的技术可以优先学习,比如各种协议(TCP,HTTP,一致性hash协议),实现原理,算法等。
问:自己也实现过IOC和AOP的一些小案例,但是实现比较简单,IOC是基于一个Map来实现的,AOP使用CgLib实现,但是再看Spring Core的源码时,还是感觉很吃力,嵌套层次太多,Debug多次,还是比较吃力,怎么办?
答:技术人员一定要有个特质就是死磕,有的技术人员可能花2个星期解决一个技术BUG,就是对着源码一点点的看,要能入定。带着问题去看源码会更轻松点。
答:要给自己制定学习计划,
比如要学习哪些技术,每天学习什么,达到什么程度。
工作中用一些方式方法减少杂乱无难度的工作内容,比如白天不答疑,或只在固定的时间答疑,写FAQ减少答疑,少参与一些会议,不实时去回即时通讯软件。
问:你觉得三年经验应该具备什么样的技能?
答:我觉的作为一个开发经验三年经验来说应该要弄懂下面的知识大纲
微服务专题
作为阿里的p7当然要弄懂双十一项目;
要自己能够完全搞懂源码
分布式是必不可少的;
还要学会性能优化
问:上面的知识掌握了可以成为阿里P7的架构师吗?你对于如何学习上面提到的知识有什么建议吗?
答:完全掌握是可以的 ,但是会需要一个比较长的周期,大概是八到十个月左右,我有自己的一个技术分享群:629740746,我会每天在群里给大家分享一个架构的知识点,当然我也自己录制了一些完整的架构,还有一些bat面试点讲解的视频 ,今天作为一个福利,只要你们来我就免费的分享给大家
问:文章里面提到了架构能力,架构能力由什么组成?如何提高架构能力?又如何去设计一个架构?
答:这是个很好的问题,后续可能写一系列的文章来分享下我的看法。
架构分很多种,有业务架构,网络架构,数据架构及中间件架构。 架构能力最关键的是抽象能力,能抽象出系统中不变的部分形成领域模型。而变化的部分都是通过扩展实现的。有点像乐高积木,抽象出各种基本模块,就可以搭建你想要的东西。
那么如何提高架构能力?多学多思多实战,首先掌握架构模式和架构原则,比如分层架构,模块化,或者看些架构的书,《企业应用架构模式》等,然后看已有的系统架构,思考下该系统为什么要这样架构,遵循了哪些原则和模式,这个架构的优缺点有哪些。然后就是自己参与到架构中,和架构师一起讨论设计。