错过金三银四 你还要错过金九银十吗?面试大纲总结

Java架构师,应该算是一些Java程序员们的一个职业目标了吧。很多码农码了五六年的代码也没能成为架构师。那成为Java架构师要掌握哪些技术呢,总体来说呢,有两方面,一个是基础技术,另一个就是组织能力和提出解决方案能力了。我就跟大家来简要地说说吧。

如果你是想成为Java架构师,那么你首先要是一个Java高级攻城狮。也就是说,基础必须牢固,对Java的了解全面而且深入。

熟练使用各种框架,并知道它们实现的原理。

Jvm虚拟机原理、调优操作,懂得jvm能让你写出性能更好的代码;

池技术也是要掌握的,对象池、连接池、线程池都要会;

Java反射技术,写框架必备的技术;

Java各种集合对象的实现原理,了解这些可以让你在解决问题时选择合适的数据结构,高效地解决问题,写出代码;

nio,注意“直接内存”的特点,使用场景。

还没完,除了上边那些,你还要熟练使用各种数据结构和算法,数组、哈希、链表、排序树等等都是;熟练使用Linux操作系统,也是必备的;熟悉各种协议,比如tcp协议,创建连接三次握手和断开连接四次握手的整个过程,不了解就没法对高并发网络应用做优化,http协议,session和cookie的生命周期与关联;熟悉系统集群、负载均衡、反向代理、动静分离,网站静态化;懂得分布式存储系统nfs,fastdfs,tfs,Hadoop了解他们的优缺点,适用场景,以及分布式缓存技术memcached,redis,提高系统性能必备。

以上这些够了吗?当然不。还有呢,工具nginx必备技能超级好用,高性能,基本不会挂掉的服务器,功能多多,解决各种问题;掌握数据库的设计能力,Mysql必备,最基础的数据工具,主要是免费且好用,对它基本的参数优化,慢查询日志分析,主从复制的配置,至少要成为半个mysql dba,其他数据库也要至少略懂一二;还有队列中间件也要会操作,如消息推送,可以先把消息写入数据库,推送放队列服务器上,由推送服务器去队列获取处理,这样就可以将消息放数据库和队列里后直接给用户反馈,推送过程则由推送服务器和队列服务器完成,好处异步处理、缓解服务器压力,解藕系统。

说了这么多,其实都还是纯粹的基础技术,并且还没有列全。要想成为架构师,除了这些之外,就还要具备我们说的组织能力和解决问题的能力了。

架构师思考的是全局的东西,是如何组织系统,以达到业务要求、性能要求。架构师要针对业务特点、系统的性能要求提出解决问题成本最低的设计方案。为了架构而架构,这是绝对不可取的。你想啊,人家一个几百人用户的系统,访问量不大,数据量也不大,你给人家上集群、分布式储存、高端服务器,肯定能到达性能要求,但是成本高啊。要知道,架构师的作用,一是满足业务需求,二是最低的硬件网络成本和技术维护成本。

架构师还要根据业务发展阶段,提前预见发展到下一个阶段系统架构的解决方案,并且设计当前架构时将架构的升级扩展考虑进去,做到易于升级;否则等系统瓶颈来了,出问题了再去出方案,或现有架构无法扩展直接扔掉重做,或扩展麻烦问题一大堆,这会对企业造成损失。

架构师是经过程序员,开发员,高级开发员等一步步积累而来。一个好的架构师不太可能看一些书就能短期内看会。建议平时写代码时,多思考,而不是仅仅满足于完成功能。可以试着用不同的方法去实现一个功能,分析优缺点。看别人的代码时也要学会别人为什么这么写。等到有了些积累,可以去系统地学些design pattern,并逐渐运用到工作中。熟练后你会发现自己可以写变种的pattern了。到这一步你已经积累了不少需求分析的经验,也能够把需求中的问题抽象出来,代码已经能很好的重用了。这就已经踏入架构师的门槛了,接下来,你要做的是培养自己预测需求变化的能力。当你的设计总是能够以最小的代价适应需求的改变时,就是个合格的架构师了。

第一阶段:java基础知识要牢固,java编程思想,设计模式,effective java这些都算是基础知识。在这基础上,要结合多种项目经验,利用实践来提高基础能力。

第二阶段:开阔眼光,借鉴优秀的项目或开源代码。例如jstorm、hadoop等开源软件,可以下载后利用业余时间研读,提升能力。

第三阶段:结合业务进行架构设计和实践,并多与行业高手交流,提升领域建模等能力

选一个方向,然后多阅读一些高质量代码,站在前辈架构师的肩膀上,才能比较快速的进步,长时间的技术积累,业务项目的积累,合理的方案解决通用问题。多读多写多思考。多读的目的是开拓自己的视野,让自己具备举一反三触类旁通的能力。多写是脚踏实地,避免夸夸其谈纸上谈兵。多思考是融会贯通所读所写。

架构师的学习之路也正式开始。

01

阅读源码

程序员每天都和代码打交道。经过数年的基础教育和职业培训,大部分程序员都会「写」代码,或者至少会抄代码和改代码。但是,会读代码的并不在多数,会读代码又真正读懂一些大项目的源码的,少之又少。这也造成了很多错误看源码的方式。

那要如何正确的分析源码呢?

我们的目标应该放在最常用的框架上面,下面就介绍两个:一个是Spring,另一个是大家用来觉得一直不怎么出问题的Mybatis。

△spring源码

△mybatis源码

02

分布式架构

随着我们的业务量越来越大和越重要,单体的架构模式已经无法对应大规模的应用场景,而且系统中决不能存在单点故障导致整体不可用,所以只有垂直或是水平拆分业务系统,使其形成一个分布式的架构,利用分布式架构来冗余系统消除单点的故障,从而提高整个系统的可用性。同时分布式系统的模块重用度更高,速度更快,扩展性更高是大型的项目必不可少的环节。

03

微服务

关于微服务架构的取舍

在合适的项目,合适的团队,采用微服务架构收益会大于成本。微服务架构有很多吸引人的地方,但在拥抱微服务之前,也需要认清它所带来的挑战。需要避免为了“微服务”而“微服务”。微服务架构引入策略 – 对传统企业而言,开始时可以考虑引入部分合适的微服务架构原则对已有系统进行改造或新建微服务应用,逐步探索及积累微服务架构经验,而非全盘实施微服务架构。

04

性能调优

我们不仅仅对项目要运筹帷幄,还要能解决一切性能问题。只有深入学习JVM底层原理,Mysql底层优化以及Tomcat调优,才能达到知其然,知其所以然的效果。除了性能优化之外,也能提供通用的常见思路以及方案选型的考虑点,帮助大家培养在方案选型时的意识、思维以及做各种权衡的能力。

05

开发工具工程化

通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具。程序员的战斗,往往不是一个人的战斗,我们如何在一个平台下高效的去重,进行代码review,对功能进行调整,debug,做到在统一的规划下步步为营,混乱的堆代码的过程中找到自己的记录。这一切都依赖于有效的工具。

06

项目实战

要想立足于互联网公司,且能在互联网浪潮中不被淹没,对于项目的开发实战演练是不必可少的技能,也是对自身能力的一个衡量,有多少的量对等于获得多少的回报。看似简单的一个项目需求图谱,其中的底层原理,实现原理又能知道多少?你搭建一个完整的B2C项目平台到底需要多少知识?这一切都是需要我们考量的。

掌握以上知识,那么你的”架构师梦“也就不远了。

对于上面架构资料感兴趣以及需要架构视频资料的可以考虑加群获取

欢迎工作一到五年的Java工程师朋友们加入Java架构开发:779792048

本群提供免费的学习指导 架构资料 以及免费的解答

不懂得问题都可以在本群提出来 之后还会有职业生涯规划以及面试指导

猜你喜欢

转载自blog.csdn.net/yupi1057/article/details/82497929