当前位置: 首页 > 编程日记 > 正文

阿里P7架构师的成长之路

前言

系统架构师是近几年来在国内外迅速成长并发展良好的一个职位,它的重要性及给互联网行业所带来的影响是不言而喻的。很多程序员把成为一名优秀的架构师作为自己职业生涯奋斗的目标,但很多人努力却用不对地方,前段时间我与在阿里的P7架构师谈到了这个问题,并且整理出来,希望对在迷茫期的程序员有所帮助。

1、问:阿里的技术专家P7从招聘层面上来说,比如工作年限、项目经历、技术能力等需要达到什么样的要求?

答:工作年限是5-10年,在技术上有扎实的基础能力,有技术亮点,用过的框架要知道其技术原理,具备分布式系统的开发经验,能独立解决各种技术问题,比较强的实战能力。

阿里的P5要求能独立负责一个模块,P6要求能独立负责一个系统,P7要求能架构和负责多个系统,并规划系统的未来能力,在某个领域达到专家水平,可以是某个业务领域,也可以是某个技术领域。

2、问:工作中,产品方案设计的时候,经常会存在多方分歧,有分歧就会存在妥协,如何合理地坚持自己的观点,如何合理地做出妥协?

答:方案没有对错,每个方案都有它的优点和缺点,要分析别人方案的优缺点,先肯定对方方案的优点,再针对缺点提出如何解决这个问题,还是说不解决这个缺点。一起讨论出最合适的方案,而不是要争论谁对谁错。

3、问:我就是在业务团队,偏技术,框架听起来很酷但遥远,能否分享几个知识点?

答:在业务团队也可以做很多框架,比如可配置化支持业务的框架、自动生成添加删除修改页面的框架、业务数据校验的框架,只要多思考如何快速支持业务,就能找到合适的业务框架。可以从几个点出发:配置化支持业务、页面自动生成、流程标准化等。

4、问:最近在学习Spring源码,看了几本书,可以跟着作者的思路看源码,但是看完不久就忘了,其实是没有太多的应用场景,对于看源码,有什么好的方法吗? 答:可以用这个思路,比如让你来设计一个Spring框架你会如何来设计,Spring Core最重要的就是IOC和AOP。自己可以尝试实现下简单的IOC和AOP功能,然后再去对比看下Spring是如何实现的,这样即使忘记了Spring的代码,但是仍然能基础其实现原理。

5、问:对于三十岁的程度员,如果还想再深入做技术,有什么建议?

答:技术人员一定要有危机感,无论多大年纪仍然要持续地学习,我也已经三十多了,每周会花点时间学习点技术。但是年纪大了,其实时间不会那么多,所以要提高学习的效率,掌握一些学习方法,并且要静下心来学习。

学技术什么时间都不晚,因为总有新技术冒出来,但是一些永远不变的技术可以优先学习,比如各种协议(TCP,HTTP,一致性hash协议)、实现原理、算法等。

6、问:自己也实现过IOC和AOP的一些小案例,但是实现比较简单,IOC是基于一个Map来实现的,AOP使用CgLib实现,但是再看Spring Core的源码时,还是感觉很吃力,嵌套层次太多,Debug多次,还是比较吃力,怎么办?

答:技术人员一定要有个特质就是死磕,有的技术人员可能花2个星期解决一个技术BUG,就是对着源码一点点看,要能入定,带着问题去看源码会更轻松。

另一方面,要给自己制定学习计划,比如要学习哪些技术、每天学习什么、达到什么程度。工作中用一些方法减少杂乱无难度的工作内容,比如白天不答疑,或只在固定的时间答疑,写FAQ减少答疑,少参与一些会议,不实时去回即时通讯软件。

7、问:你觉得成为一个架构师应该具备什么样的技能?

答:我结合自己多年的项目经验总结出来的技能体系,希望能帮助迷茫的程序员,找到正确的学习路线,学习方向大概有七点。

构成架构师的技能体系

一、源码知识点

源码分析对于很多人来说很枯燥,生涩难懂,下图详细介绍了源码中所用到的经典设计思想及常用设计模式,帮助大家找到分析源码的切入点,了解大牛是如何写代码的。

二、分布式架构

分布式系统的任务是把多台机器有机地组合、连接起来,让其协同完成一件任务,可以是计算任务,也可以是存储任务。

从分布式架构原理,到分布式架构策略、分布式架构中间件,最后在加上分布式架构实战,让程序员可以在技术深度和技术广度上得到飞跃的提升。但分布式系统是一个复杂且宽泛的研究领域,学习一两门在线课程,看几本书是不能完全覆盖其所有内容的。

三、微服务架构技能

当今微服务架构非常流行,其核心思想是服务拆分与解耦,降低复杂性。微服务强调将功能合理拆解,尽可能保证每个服务的功能单一, 根据各个服务自身资源需求,单独布署,单独作横向扩展,将各个服务做到灵活、可复用。

微服务架构解决了传统单体式架构的弊端,但其实施的本身面临很多陷阱和挑战,涉及到设计、开发、测试、部署、运行和运维等各个方面,一旦使用不当,则会导致整个微服务架构改造的效果大打折扣,甚至失败。对于这些问题,我总结出微服务需要学习的知识点,如下图所示:

四、并发编程

并发编程几乎是所有互联网公司面试必问问题,并发编程是Java程序员最重要的技能之一,也是最难掌握的一种技能。它要求编程者对计算机最底层的运作原理有深刻的理解,同时要求编程者逻辑清晰、思维缜密,这样才能写出高效、安全、可靠的多线程并发程序。目前网上没有系统的全面的并发编程学习大纲,我搜集了很多资料总结出一个较全面的学习大纲:

五、性能优化

大家都知道,性能一直是让程序员比较头疼的问题。当系统架构变得复杂而庞大之后,性能方面就会下降,如果想成为一名优秀的架构师,性能优化就是你必须思考的问题。

必须要明白的是:没有两个应用程序可以使用相同的优化方式,也没有完美的优化 java 应用程序的参考路径,,坚持采用适当的方式处理性能优化。想要达到最高的性能优化,作为一个 Java 开发人员,需要对 Java 虚拟机(JVM)和底层操作系统有正确的理解。而在此之前要理解性能优化的知识体系,如下图所示:

六、实践一个双十一电商项目

电商项目目的是把所学的分布式、微服务、性能调优等知识运用起来,只有在项目中你才能巩固知识,提升自己。实践电商项目会利用云服务器搭建真实的开发和部署环境,让你从零到项目实战,体验真实的企业级项目开发过程,让你具备独立开发和搭建分布架构系统的能力。

七、Java开发必知工具

古语云:工欲善其事必先利其器,不管是小白,还是资深开发,都需要先选择好的工具。特别是一名优秀的架构师必须有适合自己的工具,工程化专题的学习能帮助你和团队提升开发效率,让自己有更多时间来思考。

Git:可以更好地管理你和你团队的代码。

Maven:可以更好地管理jar包和项目的构建等。

Jenkins:可以更好地持续编译,集成,发布你的项目。

Sonar:一个开源的代码质量分析平台,便于管理代码的质量,可检查出项目代码的漏洞和潜在的逻辑问题(提升代码的质量,更加高效地提升开发效率)。

为了让学习变得轻松高效, 现在给大家提供一个学习平台,让你在实践中积累经验掌握原理。主要方向是JAVA架构师,在这里你可以学习Java工程化、高性能及分布式、深入浅出、性能调优、Spring,MyBatis,Netty源码分析和大数据等知识点。可以加QQ:3136292260,或是关注微信公众号:Java资讯库,发送“架构”,免费的大型互联网Java技术视频分享给大家。

相关文章:

cad的文字嵌入线条_带你玩转CAD!

CAD画图已经成为化工人的必备技能。什么,这么多CAD必备技巧你居然还不知道?我该拿什么拯救你,我最最最最最最亲爱的旁友!!!下面给大家整理了50个相见恨晚的CAD技巧,带你玩转CAD!&…

BZOJ1315 : Ural1557Network Attack

找到一棵dfs搜索树,给每条非树边一个随机非0权值,每条树边为所有经过它的树边的权值的异或。 那么有2种情况是合法的: 1.一条边权值为0,一条边权值非0。 2.两条边异或和为0。 排序后统计即可,时间复杂度$O(m\log m)$。…

android原生跳转到外网

2019独角兽企业重金招聘Python工程师标准>>> super.onCreate(savedInstanceState); setContentView(R.layout.main); Intent intent new Intent(); intent.setAction("android.intent.action.VIEW"); Uri uri Uri.parse("…

linux上使用strace查看C语言级别的php源码【一种方法】

如果你希望看到C语言级别的php代码就需要使用strace 这个默认是安装了的,如果没有安装可以 #yum install strace查看httpd进程 #ps auxw | grep httpd有多个,必须停止apache [rootlocalhost usr]# /usr/local/webserver/apache2/bin/apachectl stop启动…

iphone8p百度云认证_探秘百度数据工厂Pingo的多存储后端数据联合查询技术

作者介绍:张志宏,2013年加入百度大数据部,曾作为核心成员参与百度大数据平台的搭建。目前是百度数据工厂Pingo核心团队的技术负责人。Pingo是来自百度的离线大数据集成开发平台,使用Spark作为计算引擎,深度整合了资源调…

JavaScript文件中调用AngularJS内部方法或改变$scope变量

需要在其他JavaScript文件中调用AngularJS内部方法或改变$scope变量,同时还要保持双向数据绑定; 首先获取AngularJS application: 方法一:通过controller来获取app var appElement document.querySelector([ng-controllermainCon…

web类协议脚本-飞机订票系统示例

以下是LR自带的飞机订票系统的Demo,希望能帮助大家。 Action() {int iRand;int iTmp;char *strTmpA;char *strTmpB;char *strTmpC;char *position;if ((strTmpA (char *)malloc(100 * sizeof(char))) NULL) { lr_output_message ("Insufficient memory avail…

ACCEPT()和ACCEPT4()

ACCEPT章节:Linux 程序员手册 (2) 更新:2010-09-10到 易美翻译 翻译名字accept - 通过套接口接受一个连接 概要 #include Esys/types.h> /* 参看 “注意小节” */ #include Esys/socket.h>int accept(int sockfd, struct sockaddr *addr, socklen…

没有提示_华为手机发出莫名的提示音,打开什么也没有?原来是它们在作怪

不知道你们有没有遇到过这样的情况,在使用手机的过程中会出现一个非常奇怪的现象:当你听到手机发出声音,打开手机却发现什么通知也没有?这一度让我感到很困扰,本着“打破砂锅问到底”的精神,终于让我找到了…

近段时间佛我就偶尔无

jo建瓯市金佛玩手机欧力紧凑度 我株型紧凑我阿九倨傲四局李嘉诚转载于:https://juejin.im/post/5b8e5263e51d4538e2278c9b

php内核探索方法与资源

PHP内核探索 TIPI深入理解PHP内核 风雪之隅PHP源码分析 《php扩展开发及内核应用》 百度XLQ Gods blog codinglabsPHP内核探索:从SAPI接口开始PHP内核探索:一次请求的开始与结束PHP内核探索:一次请求生命周期PHP内核探索:单进程SA…

feign调用走不走网关全局拦截_feign服务端出异常客户端处理的方法

在使用feign进行远程方法调用时,如果远程服务端方法出现异常,客户端有时需要捕获,并且把异常信息返回给前端,而如果在开启熔断之后,这个异常会被消化,所以说,如果希望拿到服务端异常&#xff0c…

配置Cesium编译环境

1、安装node.js https://nodejs.org/en/ 2、配置node.js 在node.js安装目录下新建node_global、node_cache两个文件夹,并把node_global添加到环境变量 eg.D:\app\nodejs npm config set prefix D:\app\nodejs\node_global npm config set cache D:\app\nodejs\node_…

迷你世界电锯机器人_迷你世界:三分钟制作超简单飞翔石像机器人报道!

更多游戏资讯,请点击上方蓝字查询!哈喽,大家好,还记得我之前分享的超简单的石像机器人吗?不记得了吗?我再帮助大家回忆回忆,之前研游酱分享的石像机器人总共是分两篇文章,一个是不会…

J2EE 第二阶段项目之编写代码(四)

我的任务就是项目统计。 1 效益统计 1 教育效益统计表 (教育效益统计表,增,改,查看,查) 2 农牧林效益统计表 (农牧林效益统计表,增,改,查看,查) 3…

PHP安装扩展mcrypt以及相关依赖项 【PHP安装PECL扩展的方法】

一:Mcrypt简介 Mcrypt是PHP的一个扩展,完成了常用加密算法的封装。其实该扩展是对mcrypt标准类库的封装,mcrypt完成了相当多的常用加密算法,如DES, TripleDES, Blowfish (default), 3-WAY, SAFER-SK64, SAFER-SK128, TWOFISH, TEA…

Javascript到PHP加密通讯的简单实现

互联网上大多数网站,用户的数据都是以明文形式直接提交到后端CGI,服务器之间的访问也大都是明文传输,这样可被一些别有用心之人通过一些手段监听到。对安全性要求较高的网站,比如银行和大型企业等都会使用HTTPS对通讯过程进行加密…

MYSQL添加新用户 MYSQL为用户创建数据库 MYSQL为新用户分配权限

2019独角兽企业重金招聘Python工程师标准>>> 1.新建用户 //登录MYSQL >mysql -u root -p >密码 //创建用户 mysql> insert into mysql.user(Host,User,Password) values(‘localhost’,jeecn’,pa…

uml具有多种视图_UML建模与架构文档化

UML(统一建模语言) 是用元模型描述的,元模型是4层元模型体系结构模式中的一层。此模式的其他层次分别是元-元模型层、模型层和用户对象层。在原模型层,UML元模型 又被分解为三个子逻辑包:基础包(核心、扩展机制和数据模型)、行为元素包(描述模…

insert into与insert ignore以及replace into的区别

insert ignore表示,如果表中已经存在相同的记录,则忽略当前新数据; INSERT INTO有无数据都插入,如果主键则不插入; REPLACE INTO 如果是主键插入则会替换以前的数据; 例 1.insert语句一次可以插入多组值,每组值用一对…

德国SNS交友/视频网站Poppen.de的技术架构分享

Poppen.de是一个德国的 交友/ 聊天/ 视频 的SNS网站, 部分内容NSFW,网站采用了很多我们熟悉的技术,像Nginx ,MySQL,CouchDB,Erlang,Memcached的,RabbitMQ(消息服务器),采用了Graphit…

对数函数定义域和值域_呆哥数学每日一题 —— 复合函数值域

如果想要获取往期每日一题电子版,可以加我微信:daigemath366,备注:知乎 每日一题呆哥解析:这是一个函数和复合函数的综合问题首先我们先把原函数的值域求出来先直接求导:导数不容易判断单调性,我…

一些常用工具地址,随时更新中~

2019独角兽企业重金招聘Python工程师标准>>> 一些常用工具地址的备份: 一款比较全的先到化界面编辑器Neditor:https://gitee.com/notadd/neditor 前端ui组件库,类似element ui。iView:https://www.iviewui.com &#…

UNIX环境编程

linux函数分析查询工具1.优先推荐linux 中man命令2.一个不错的中文Linux手册:http://cpp.ezbty.org/manpage3.在线查英文Man手册:http://www.kernel.org/doc/man-pages/http://man7.org/linux/man-pages/dir_all_alphabetic.htmlhttp://linux.about.com/…

WCF优化的几个常规思路

前几天用WCF做项目时发现了一个效率问题,由于系统对效率要求较高,困扰了很长时间终于将问题解决了,写下来为以后的兄弟们参考,第一次写博客有不准确的地方还望同行们多喷多指点,先行谢过啦... 问题场景是这样的&#x…

使复选框选中_勾选复选框单元格变色,自动计数,在Excel中是如何实现的?

Excel中,我们经常会使用复选框来打勾打叉,这是复选框最基本的功能,相信很多小伙伴都会,但今天我跟大家分享的是复选框的其他操作技巧,勾选复选框变色,统计人数。下图中,我们要利用复选框是否打钩…

[短文速读] 重载有暗坑,JVM是如何执行方法的

前言 这将是一个系列文章。原因是自己写了很多文章,也看了很多文章。从最开始的仅仅充当学习笔记,到现在认认真真去写文章去分享。中间发现了很多事情,其中最大发现是:收藏不看!总是想着先收藏以后有时间再看&#xff…

一笔画问题【数据结构-图论】

回家路上听到2个人在说:田字怎么一笔写成,并且笔划不重复。 田 我回家想了许久,觉得无论如何走正常的途径肯定是不行的,投机取巧脑筋急转弯的我不讨论。 那么是否可以找到数学定理? 其实就是欧拉七桥问题:1…

解析并符号 读取dll_Spring IOC容器之XmlBeanFactory启动流程分析和源码解析

一. 前言Spring容器主要分为两类BeanFactory和ApplicationContext,后者是基于前者的功能扩展,也就是一个基础容器和一个高级容器的区别。本篇就以BeanFactory基础容器接口的默认实现类XmlBeanFactory启动流程分析来入门Spring源码的学习。二. 概念要点1. 概念定义Be…

安装多个gcc

删除gcc #yum remove gcc 安装最新的 #yum install gcc 查找gcc源 可先通过“yum list compat-gcc*”查看版本,然后再利用“yum install compat-gccXXX”安装 #yum list compat-gcc* #sudo yum install compat-gcc-34.i686 查看gcc版本 #gcc -v #gcc34 -v参考&…