如何成为信息安全专家?
(1)学习一门编程语言,最好是c或java。
(2)了解一下基本的加密、签名、认证原理、流程,譬如RSA、DES、SHA-1、MD5、CA。
(3)用编程语言把基本加密方法实现了。
(4)在外行眼里,你已经是专家了,但在行内人眼里,你已经有成为专家的入门资格了。
(5)进入360或类似的安全公司(目前看来,360在安全领域的人才还是最多的)偷师。
(6)进入招商银行或类似银行(中国第一代网银设计,安全性最好的还得是招行)学习行业经验。
(7)关注国际密码学和信息安全大会的一些前沿技术,国内可以留意一下王小云教授的研究成果。
(8)我估计信息安全领域,没啥人还能忽悠到你了。
从程序员到高级系统架构师该如何进阶?
首先要做的是打牢基础,在此基础上依次进行以下步骤:
1. 了解技术的底层实现
2. 了解常用基本框架
3. 对所在领悟的架构、业务熟悉
4. 对行业发展熟悉
以上都做到熟悉掌握后,加上5-10年工作经验,就有可能成为工程师。
对程序员来说,未来想要避开中年危机,那么你就有必要尽早做好自己的职业发展规划(越早越好)。架构师是技术团队的核心,薪酬高、技术牛。因此,很多程序员从刚进入这个行业起,就在心里深埋下了架构师的梦想,想起多年前我就曾在上海徐家汇美罗城的某快餐摊前,向女票立下了“要成为一名牛逼的架构师”的豪言。很幸运,牛皮变成了现实,一路坚持、一路坎坷,当年的女票成了LP,而我也实现了自己的架构师梦想,本篇我将通过梳理架构师职责与必备能力,给立志追逐梦想的程序员们分享一些学习方向。
一、架构师职责
曾有人这样形容架构师的重要性:架构师的工作就像是他打造一棵树的主干和枝干,然后程序员们让这棵树上长出树叶和果实。架构师,是一个既需要掌控整体又要洞悉局部瓶颈,并依据具体的业务场景给出解决方案的团队领导型人物,他需要参与项目开发的全部过程,包括需求分析、架构设计、系统实现、集成、测试和部署各个阶段,负责在整个项目中对技术活动和技术说明进行指导和协调。架构师职责简单来说有三点:
1、确认需求与拆分系统
在项目开发过程中,架构师需要依据用户需求,将完整的系统拆分为子系统和组件,形成不同的逻辑层或服务,确定各层的接口、层与层相互之间的关系,对整个系统分层进行“纵向”分解,对同一逻辑层分块进行“横向”分解。
2、技术选型
通过对系统的一系列的分解,最终形成了软件的整体架构,依据整体架构需要进行技术选型。
3、制作技术规格说明
在整个研发过程中始终保持与开发人员保持沟通,以保证开发者依照原定的架构意图去实现各项功能。
二、架构师需具备能力
1、架构师能力图谱
从初级程序员进阶到中级程序员、高级程序员,最终成为一名架构师,这是一个不断经验积累的过程,需同时兼具技术实力(技术广度与技术深度),除此之外,其它软实力也不容忽视,下图列举了一个架构师需具备的各项能力及占比。
架构师能力图谱就不一 一进行详解,感兴趣可以评论交流。
2、架构师技术能力
一个能担负起企业级应用、称得上资深的架构师,至少需要精通1-2门技术语言,同时具备一定的技术广度。粗略说来涉及技术范围如下:
1)、集合框架(源码)
- List
- ArrayList
- LinkedList
- Set:HashSet、TreeSet
- Map:TreeMap、ConcurrentHashMap
- Collection的synchronized等方法
2)、工具类
- Google guava(推荐)
- Apache common lang/BeanUtils/Collctions/IO
- JSON
- fastjson
- gson
- jackson
3)、框架
- Spring:IOC、AOP、常用注解
- SpringMVC
- Mybatis
- Shiro
- Netty
4)、安全
- 单项散列算法:MD5、SHA
- 对称加密:DES
- 非对称加密:RSA、HTTPS
5)、JVM
- Java虚拟机(Hotspot实现)
- 类加载机制
- 内存模型
- GC:回收算法、垃圾收集器
- 调优
- 工具:jstack、jmap、jconsole
6)、并发编程
- Executor框架
- Fork/join
- happen-before
- 数据结构:ConcurrentHashMap
- 线程池:参数设置、原理、拒绝策略
- 线程状态
- Lock/synchronized
- 原子操作类
- 并发工具类:CountDownLatch、Semaphore、CyclicBarrier、Exchanger
- IO、BIO、AIO、NIO
7)、数据
NoSQL:MongoDB
分布式缓存:Memcached、Redis(推荐)
关系数据库
- MySQL
- 引擎
- InnoDB(支持事务)
- 分库分表
- Cobar
- Mycat
8)、SQL优化
- 索引
- 主键索引
- 组合索引
- explain
- 存储过程
- SQL注入:使用#而不使用$
9)、事务隔离级别(ACID)
- 原子性
- 一致性
- 隔离性
- 持久性
10)、锁
- 表锁
- 行锁
- 悲观锁
11)、大数据
- Hadoop
- Hbase
- Spark
- Storm/JStorm
12)、算法与数据结构
- 数组
- 链表
- 栈
- 队列
- 树
- 二叉树
- B Tree/B+ Tree
- 红黑树
- 哈希
13)、分布式系统
- 从集中到分布式
- 分布式Session:Session复制、Session绑定、Session服务器(靠谱)
- 分布式缓存:Redis、一致性Hash算法
- 数据库:读写分离、主从热备、分库分表、一致性
- 分布式事务、CAP、BASE、2PC/3PC
- 分布式锁
- Redisson
- 负载均衡、硬件、F5、软件、LVS、Nginx
- 消息队列:RabbitMQ、ZeroMQ、ActiveMQ、Kafka(推荐)
- 服务化:服务注册与发现、Zookeeper
- 架构
- 微服务
- Spring Boot
- Dubbo
- RPC
- SOA
- 虚拟化
- Docker
从程序员进阶成为高级架构师,并非一蹴而就,需要系统化、阶段性学习,并且在实战项目中融会贯通,这如同打怪通关,我们得一关一关突破,每攻破一个关口,技能值就增长一点,直至大获全胜。坚持学习加上点滴积累,最终成就梦想。原创码字不易,觉得不错请点赞支持,送你【分布式架构设计23期原创集合】,回复【架构】,立即领取。
由普通程序员进阶到高级架构师,是一个量变到质变的过程。除了公司内部晋升机制或职业跳槽机遇之外,最关键的是个人能力的成长。在软件行业干了十多年,下面我尝试给大家一些建议。
1.不断地丰富理论知识。从广度和深度两个维度,不断地拓展和深挖基础理论,领先技术,行业方案,最优方法。
2.不断地熟悉业务知识。离开业务,纯技术无法落地。比如写金融软件的就要有金融知识,写电子软件的就要有数电知识,写通信软件的就要有通信知识。
3.多总结多提炼。将经历转化成经验,进而转化为知识力量。项目经验不仅仅是经验,更是知识体系中重要的组成部分。
4.以全局的,瞻远的,扩展的,系统的角度去审视代码系统与模块,对框架,消息,协议,标准,方案都要熟悉,并常常试着不同的角度去审阅,理解,消化。
5.手中有码,心中无码。这是一种架构师高级境界,理论与代码互通,说论得码,见码知论。
愿各位程序员都能晋升到架构师,甚至专家,总工程师,CTO。谢谢大家。