不少程序员想成为一名架构师,可是对于其中的技能掌握程度,以及编程功底的要求?设计能力的要求有哪些?前端
我简要从如下6点经验来谈,从技能的角度抛砖引玉。mysql
1.数据结构相关的哈希表、链表、二叉树等等git
2.常见的算法有哪些?至少下图的算法我认为应该要掌握。程序员
好比:HashMap如何扩容,重点就是考底层数据结构。web
这些都算是编程基本功底:多线程、JVM、并发容器、并发类、NIO等。面试
其实web开发这个领域,若是你要掌握好了,发展也很是不错的。算法
好比:如今的H五、小程序等,对于掌握前端技术的开发人员,竞争力也是杠杠的。sql
固然做为后端开发人员,多掌握点前端的技术,那也是必须的。mongodb
重点就看图了,这里涉及的技术仍是蛮多的,mysql、oracle、nosql相关的mongodb,以及现在你们都熟知的分库分表、读写分离等技术。shell
这些都是你们熟知的,我补充点设计相关的:数据库设计范式、索引、事务、数据库相关的慢查询、长事务。
这些也算是数据库技术的编程功底。
Java程序员对于下图应该都是比较熟悉的,这些框架与工具都是常用。
谈到设计,就不得不提到项目中的概要设计和详细设计,这就会涉及到UML。
除此以外,整个项目的设计,这个时候考验你的架构设计能力。
这里的架构设计,包含的系列很是多,特别是Redis、应用程序拆分、拆分后涉及到的RPC微服务等技术,以及后端数据库的拆分技术,以及拆分后的分布式集群部署。
对工做1-3年的程序员来讲,依据我的状况提早规划将来职业发展方向,这很重要。譬如,在将来3-5年甚至更久,工做要作到什么程度?往哪一个方向发展?经过怎样的路径才能实现目标?若是沉浸在当下“程序员高薪”的论调中岁月静好,总归有一天会面临网上热议的“程序员中年危机”,以致于最后不得不步入转行或提早退休的尴尬局面。
做为常常跟IT人接触的我,我一直认为这个话题对程序员很是重要,今天和你们详细聊聊。
人生和职场就像下象棋,你只有明确了目标才不会在每一步上迷茫,之全部迷茫,是由于不清楚本身最终想要什么,下一个阶段的目标在哪里?
- 某公司表示薪资上浮20%-30%,我应该跳槽加入吗?
- 我最近收到了几个offer,应该去哪一家更好?
- 从大公司去小公司,是否值得去尝试?
- 想成为架构师,但不知道本身的技术是否能胜任?
- 从程序员转行,但不知道将来本身的竞争力会变弱吗?
- ……
其实,追求短时间利益(眼前)或长期利益(将来),取决于你本身的决定。
个人建议是,不要在你经历以后,再去回顾职业生涯,初期跳槽涨薪确实很快,但到了中后期,跳槽再也带不来前期的涨幅,反而在频繁的跳槽过程当中,失去了不少机会,技能与业务的能力也没能积累沉淀下来,这将直接致使不少人在即将步入中年时感到异常焦虑,不知道本身将来的路何去何从。
跳槽和转行若是仅仅只是工做逃避的手段,将来你将面临更大的焦虑,将来也根本谈不上什么有什么核心竞争力。但若是跳槽和转行,是谋定然后动,围绕你的主线职业去发展,这是彻底不同的结果。
总之,在职业的选择上,毫不能有“逃避”二字,逃避将会让你无处藏身,你只有明白了这个道理,你才会去克服眼前的困难,学会承担,这样的人生才有将来。
每个程序员都有一个架构师的梦想,这个方向是不少技术人的第一选择,从年薪十几万的程序员成长为年薪几十万甚至过百万的架构师,给力的薪酬已足以让很多程序员心动不已。若将来你想成为架构师,那么如今至少须要清楚了解架构师的主要职责是什么?有目标有方向地坚持学习。
往管理方向发展的职业路径,项目经理主要侧重于项目管理工做,主要能力是计划、沟通及组织协调。沟通和表达是开发人员短柄,因此想往此线路发展的同窗,从平常的工做、生活中就得逐步增强锻炼这方面能力。
技术经理须要带领团队前行,在国内的技术经理,大部分都在30岁左右。通常,程序员在30岁是一个职业分水岭。
技术经理的这个阶段的工做重点再也不是专一于技术,而是在培养团队,带领团队为主。若是你没有让团队的成员变得更好,没有分享,没有利益分享的想法,没有去帮助你们成长的想法,这样的程序员不太适合这个岗位。
总之,这个职位成全你们而不是本身才是重点。
若是你对技术发展路径、管理发展路径都不感兴趣,那么不妨考虑转产品经理,移动互联网时代,产品经理的角色愈来愈重要,一个好的产品经理有可能带给公司颠覆性的发展,收入各方面也还不错,我认识的一些程序员,也有转行作产品经理,而且作得还不错的。
须要有必定的技术能力和团队管理能力。CTO的工做更偏业务、偏管理,以及商业等,主要职责包括团队管理、开发流程、公司战略、业务增加以及各种技术疑难问题的解决等,能够说是一个比较全方位的发展方向,一句话,CTO的主要职能是管理+技术+业务+商业的综合发展。
建议看源码以及debug配合掌握实现原理。
CDN与分布式缓存的设计原理实际上是一致的,重点你须要掌握二者之间的区别和使用场景。
分布式技术涉及范围比较广,例如相关的消息中间件就会涉及到3个以上,为何要选择Kafka或者
RabbitMQ,选择和比较须要掌握。
除此以外,不少内部系统还会涉及到JBPM工做流中间件等。
大型分布式就会设计到高并发解决方案,如下有相关的知识。
单点登陆、分布式缓存、SOA、全文检索、消息中间件,负载均衡、链接池、流计算等。
例如秒杀系统等如何设计。
无论选择什么样的路径,都离不开提早规划、充分准备,机会总会留给有准备的人。程序员是个相对公平的职业,你若怒放,蝴蝶自来,薪酬也会随能力获得明显增幅,那么你们在应对中年危机时更加游刃有余了。
《 淘宝面试回来,想对程序员们谈谈 》