很多工作一定年限的程序员感觉自己到了瓶颈不知道怎么去突破,其实这个时候就要冲破传说中的架构师。
架构师是个很神秘人物,那么架构师的技术一般在什么程度呢?怎样才能被称为架构师?
技术深度
技术框架
-
看过哪些开源框架的源码
-
为什么要用Redis,Redis有哪些优缺点?Redis如何实现扩容?
-
Netty是如何使用线程池的,为什么这么使用
-
为什么要使用Spring,Spring的优缺点有哪些
-
Spring的IOC容器初始化流程
-
Spring的IOC容器实现原理,为什么可以通过byName和ByType找到Bean
-
Spring AOP实现原理
-
消息中间件是如何实现的,技术难点有哪些
系统架构
分布式系统
-
分布式事务,两阶段提交。
-
如何实现分布式锁
-
如何实现分布式Session
-
如何保证消息的一致性
-
负载均衡
-
正向代理(客户端代理)和反向代理(服务器端代理)
-
CDN实现原理
-
怎么提升系统的QPS和吞吐量
实战能力
-
有没有处理过线上问题?出现内存泄露,CPU利用率标高,应用无响应时如何处理的。
-
开发中有没有遇到什么技术问题?如何解决的
-
如果有几十亿的白名单,每天白天需要高并发查询,晚上需要更新一次,如何设计这个功能。
-
新浪微博是如何实现把微博推给订阅者
-
Google是如何在一秒内把搜索结果返回给用户的。
-
12306网站的订票系统如何实现,如何保证不会票不被超卖。
-
如何实现一个秒杀系统,保证只有几位用户能买到某件商品。
软能力
总结一下:
-
表示层:spring mvc 3.1 + annotation
-
控制层:spring 3.1
-
持久层:hibernate 3.6 +jdbcTemplate
-
后台列表控件:displaytag 1.2
-
Ajax框架: DWR 3
-
JS框架 : Jquery
-
缓存机制:spring 3.1 cache + ehcache/memcached
-
静态化机制: Freemarker静态化/spring mvc伪静态化
-
页面技术: EL + JSTL +JSP
-
安全框架 spring security
-
搜索引擎: Lucene
-
中文分词:IKAnalyzer
-
模板引擎: apache tiles 2.22
-
Linux、nginx、php、mysql,几乎是标配
-
部署视图所需:
-
数据库: mysql
-
Web 服务器: windows 下用apache, linux 下用ngnix
-
应用服务器: Tomcat Jboss,tomcat,weblogic
想成为架构师不是懂了一大堆技术就可以了,这些是解决问题的基础、是工具,不懂这些怎么去提解决方案呢?这是成为架构师的必要条件。
架构师还要针对业务特点、系统的性能要求提出能解决问题成本最低的设计方案才合格,人家一个几百人用户的系统,访问量不大,数据量小,你给人家上集群、上分布式存储、上高端服务器为了架构而架构,这是最扯淡的,架构师的作用就是第一满足业务需求,第二最低的硬件网络成本和技术维护成本。
架构师还要根据业务发展阶段,提前预见发展到下一个阶段系统架构的解决方案,并且设计当前架构时将架构的升级扩展考虑进去,做到易于升级;否则等系统瓶颈来了,出问题了再去出方案,或现有架构无法扩展直接扔掉重做,或扩展麻烦问题一大堆,这会对企业造成损失。
下面是我总结出的几个系统学习图谱: