其实都是在做一个项目,项目是一个大型的多节点部署的项目,做了好几个版本,中间用到了很多技术和框架,也用了一些管理工具和敏捷实践。我这里不是来说项目的,因为最近看了一些招聘信息,结合项目中用到的一些知识和管理措施,作为一个程序员,需要去实时评估下自己当前的能力是否能跟上时代的步伐,所以,总结了下作为一个中高级Java开发人员或架构师,到底需要掌握哪些技能。
当一个资深开发者变得更高级时会发生什么?一般的,他们会被提拔为“架构师”。有时一个架构师不一定必须成为一个开发者,只要他们拥有更宽广的视角。“最后,总有一个人任命为“架构师”的职位,他要开发的系统和正在开发的系统做出架构上的决策。在一些更大的公司,还有“架构师议会”,每个团队指定的架构师们聚在一起决定着一些明智的事情。
但是我不认为专门设立“架构师”这样的职位是一个好的主意。架构师应该是建筑行业的一个职位,这是无可厚非的,因为不能在项目中期改变和调整原有的架构。但是软件架构是十分灵活的,会在开发的过程中需要不断的进行调整,不应该预先就严格地定义好。而且开发工作和架构设计是如此的紧密关联,所以说某个人决定“什么要做”和“什么不要做”是不科学也不严谨的。这会带来各种各样的问题,主要是因为架构师经常无法全面的考虑到具体的实现是怎么样。如果一个架构师长时间不写代码,他们更加倾向于忽略“实现细节”,转而仅仅考虑抽象设计。但是,抽象总是会造成遗漏,只考虑抽象而不考虑特定的实现这样的解决方案很少可行有效的。
我主张的第一个观点就是:如果你不知道如何详细地编写所有代码地情况下,你就无法在成为一个优秀的架构师。大多数情况下都不是“简单地编码”。如果你已经成为架构师多年,同时也多年没有写过代码了,那几乎可以肯定你不是一个优秀的架构师。
1、对于Java基础技术体系(包括JVM、类装载机制、多线程并发、IO、网络)有一定的掌握和应用经验。
JVM内存分配、JVM垃圾回收;
类装载机制;
性能优化:
反射机制;
多线程;
IO/NIO;
网络编程;
常用数据结构和相关算法:
2、java架构工程师 对面向对象的软件开发思想有清晰的认识、熟悉掌握常用的设计模式;
设计模式:单例模式;工厂模式;代理模式;模板方法模式;责任链模式等
3、熟练掌握目前流行开源框架(spring/springmvc/ibatis),并且对其核心思想、实现原理有一定认知;
开源框架:spring;
开源框架:hibernate;
4、熟悉Oracle、MySQL等数据库开发与设计以及缓存系统REDIS或 Memcached的设计和研发;
关系数据库:oracle
关系数据库:PostgreSQL
缓存系统:Redis(Nosql)
缓存系统:Memcached
5、java架构工程师 熟悉底层中间件、分布式技术(包括缓存、消息系统、热部署、JMX等)
底层中间件:
应用服务器:Jetty(Tomcat)
消息中间件:ActiveMQ、RabbitMQ
事务处理中间件:
数据访问中间件:ODBC
工作流中间件:JBPM
分布式技术:
缓存系统:
消息系统:
Restful:
热部署:
JMX:
6、至少一种Java 应用服务器如tomcat
Jetty:
7、精通shell编程,熟练应用awk、sed、grep、strace、tcudump、gdb等常用命令;
8、有大型分布式、高并发、高负载(大数据量)、高可用性系统设计开发经验
分布式:(多节点部署)
高并发:
高负载(大数据量):
高稳定:
高可用:
9、对配置管理和敏捷研发模式有所了解
配置管理工具:
SVN:
Github:
10、业务能力:
java架构工程师
系统升级、双机、部署、容灾、备份恢复、DFX
加分技术:
脚本语言:python
远程调用:
精通Internet基本协议(如TCP/IP、HTTP等)内容及相关应用
有一定安全意识并了解常见的安全问题解决方案
熟悉常见的一些解决方案及其原理:单点登录、分布式缓存、SOA、全文检索、消息中间件,负载均衡、连接池、
nosql、流计算等
架构之路任重而道远。程序设计和架构设计是互通的,每个人都可以从设计好一个程序往设计好一个系统架构前进。如果现在还无从下手的,我推荐大家可以从领域驱动设计这个概念入手,这是由业务为导向的设计方式,可以对培养设计出落地的架构有很大的帮助。希望可以给大家一些思路和启发。最后引用“俞军”一句名言,我们作为架构师要有“怀疑精神:自我迭代”的心。
想要学习高性能及分布式、深入浅出。性能调优、Spring,MyBatis,Netty源码分析可以加群:668395460
1、具有1-5工作经验的,面对目前流行的技术不知从何下手,需要突破技术瓶颈的可以加群。
2、在公司待久了,过得很安逸,但跳槽时面试碰壁。需要在短时间内进修、跳槽拿高薪的可以加群。
3、如果没有工作经验,但基础非常扎实,对java工作机制,常用设计思想,常用java开发框架掌握熟练的,可以加群。
4、觉得自己很牛B,一般需求都能搞定。但是所学的知识点没有系统化,很难在技术领域继续突破的可以加群。