一, 如何定义架构师
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.
还有队列中间件. 如消息推送, 可以先把消息写入数据库, 推送放队列服务器上, 由推送服务器去队列获取处理, 这样就可以将消息放数据库和队列里后直接给用户反馈, 推送过程则由推送服务器和队列服务器完成, 好处异步处理, 缓解服务器压力, 解藕系统.
三, 面试方面
企业应用的系统架构师应该关注的几个方面 (具体情况具体分析, 以下未必准确, 只是参考)
先来一些基础面试题, 您答得出么?
说说 JVM 原理? 内存泄露与溢出区别, 何时产生内存泄露?
用 java 怎么实现有每天有 1 亿条记录的 DB 存储? MySQL 上亿记录数据量的数据库如何设计?
MySQL 支持事务吗? DB 存储引擎有哪些?
mvc 原理, mvc 模式的优缺点, 如果让你设计你会怎么改造 MVC?
hibernate 支持集群吗? 如何实现集群?
tomcat 最多支持并发多少用户?
map 原理, 它是如何快速查找 key 的? map 与 set 区别?
描术算法, 如何有效合并两个文件: 一个是 1 亿条的用户基本信息, 另一个是用户每天看电影连续剧等的记录, 5000 万条. 内存只有 1G???
在 1 亿条用户记录里, 如何快速查询统计出看了 5 个电影以上的用户? ---- 可以参考 位图索引的原理
Spring 如何实现 IoC 与 AOP 的, 说出实现原理?
以上纯粹是常用的技术, 还有很多自己慢慢去摸索吧; 因为要知道的东西很多, 所以要成为一名合格的架构师, 必须要有强大的自学能力, 没有人会手把手的教给你所有的东西. 而下面就是一套架构师的知识体系脑图, 这就需要你自己去吃透, 从底层原理了解透彻. 这样才是一名合格的高级技师.
四, 架构知识体系脑图
1, 阅读源码
阅读, 分析源码是程序员最基本的码代码能力也是码农的根本所在, 学习经典源码中所用到的经典设计思想及常用设计模式, 能够帮你了解大牛是如何写代码的, 从而吸收大牛的代码功力. 在阿里面试中, MyBatis,Spring 等框架的底层原理是经常会被问到的
开源框架解析
2, 分布式架构
阿里巴巴有很多大团队, 这种大团队里有很多小团队, 到小团队之后, 做的业务都不相同, 如果想立足成为一线互联网公司中的万能选手, 最主流的分布式架构中有很多知识都是必须要去了解与学习的. 并且在阿里面试过程中, 面试官会问到实际应用场景的问题: 比如微服务化, 用户量, 并发量, 业务复杂度以及可扩展程度等, 这里不多赘述. 本屌提供一个分布式架构的学习思路也是自己目前还在学习中的体系:
高性能架构专题
3, 微服务架构
微服务是现在互联网架构技术中最火热的话题之一, 也是本屌目前正在学习研究的方向. 在阿里面试过程中, 面试官很少会问到关于微服务相关的问题. 但作为一名开发者, 一名有技术梦想的程序员微服务架构是现在必须要去了解的主流技术, 小编给自己制定了一个微服务技术的学习计划:
微服务架构专题
4, 并发编程
并发编程几乎是所有互联网公司面试必问问题, 并发编程是 Java 程序员最重要的技能之一, 也是最难掌握的一种技能. 它要求编程者对计算机最底层的运作原理有深刻的理解, 同时要求编程者逻辑清晰, 思维缜密, 这样才能写出高效, 安全, 可靠的多线程并发程序. 目前网上没有系统的全面的并发编程学习大纲, 我搜集了很多资料总结出来一个最全面的学习大纲:
并发编程
5, 性能优化
性能一直是让程序员比较头疼的问题. 当系统架构变得复杂而庞大之后, 性能方面就会下降, 特别是阿里巴巴这样的一线互联网公司最为注重, 因此想进入阿里, 性能优化一定是要去深入学习与理解的一环, 本屌在性能优化这一块虽然不能算专家, 也可以自信的说是精通了(注意: 自己的简历上一定不要写精通 xxxx, 要不然面试官会怼死你. 好在本屌这一块还算自信)
性能优化
6. 设计模式
设计模式 (Design pattern) 是一套被反复使用, 多数人知晓的, 经过分类编目的, 代码设计经验的总结. 使用设计模式是为了可重用代码, 让代码更容易被他人理解, 保证代码可靠性. 毫无疑问, 设计模式于己于他人于系统都是多赢的, 设计模式使代码编制真正工程化, 设计模式是软件工程的基石, 如同大厦的一块块砖石一样. 项目中合理的运用设计模式可以完美的解决很多问题, 每种模式在现在中都有相应的原理来与之对应, 每一个模式描述了一个在我们周围不断重复发生的问题, 以及该问题的核心解决方案, 这也是它能被广泛应用的原因.
设计模式
这份架构图是我画出来的, 掌握了以上技术月薪三万基本不难, 想要把这些技术都掌握, 确实不简单. 所以我把这些技术都整理好了, 还特意找了几位朋友录制了一些架构技术视频, 这几位朋友在圈内都有一定知名度, 曾经都在一线互联网公司任职架构师. 这些资料都已经有整理出来, 现免费分享给大家.
部分资料截图
获取方式: 关注转发后加入 QqunJava 进阶之路: 908676731 点击加入. 需要审核通过后方可获取资源.
来源: http://www.jianshu.com/p/d21ae15d8139