“
这篇文章是帮助你成为架构师系列文章其中一篇,偏向0-5年工作的IT程序员员、架构师同学。
如果你能掌握这个系列提到的内容的70%左右,去阿里拿个P7问题不大,阿里的P7基本能拿到60W左右的年薪。
提醒一点,不要小看和不重视基础,就犹如高屋建瓴一个道理,地基有多深,楼才能建多高。
1.程序设计要求(全部精通)
1.常用数据结构和算法
性表,链表,哈希表是常用的数据结构,在进行Java开发时,JDK已经为我们提供了一系列相应的类来实现基本的数据结构。
Java提供了几个能有效地组织和操作数据的数据结构,这些数据结构通常称为Java集合框架。在平常的学习开发中,灵活熟练地使用这些集合框架,可以很明显地提高我们的开发效率。但是,你要过关,这些都是精通,不是熟悉,下面的都是这样,请切记。
2.面向对象编程(是精通不是熟悉)
面向对象
面向对象(Object Oriented)是一种新兴的程序设计方法,或者是一种新的程序设计规范(paradigm),其基本思想是使用对象、类、继承、封装、多态等基本概念来进行程序设计。从现实世界中客观存在的事物(即对象)出发来构造软件系统,并且在系统构造中尽可能运用人类的自然思维方式。
对象
对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位。一个对象由一组属性和对这组属性进行操作的一组服务组成。
类的实例化可生成对象,一个对象的生命周期包括三个阶段:生成、使用、消除。
当不存在对一个对象的引用时,该对象成为一个无用对象。Java的垃圾收集器自动扫描对象的动态内存区,把没有引用的对象作为垃圾收集起来并释放。当系统内存用尽或调用System.gc( )要求垃圾回收时,垃圾回收线程与系统同步运行。
类
类是具有相同属性和方法的一组对象的集合,它为属于该类的所有对象提供了统一的抽象描述,其内部包括属性和方法两个主要部分。在面向对象的编程语言中,类是一个独立的程序单位,它应该有一个类名并包括属性和方法两个主要部分。
Java中的类实现包括两个部分:类声明和类体。
类声明
[public][abstract|final] class className [extends superclassName] [implements interfaceNameList]{……}
成员变量限定词的含义:
static: 静态变量(类变量)
final: 常量;transient: 暂时性变量,用于对象存档,用于对象的串行化
volatile: 贡献变量,用于并发线程的共享
方法的实现也包括两部分内容:方法声明和方法体。
方法声明
方法声明中的限定词的含义:
static: 类方法,可通过类名直接调用
abstract: 抽象方法,没有方法体
final: 方法不能被重写
native: 集成其它语言的代码
synchronized: 控制多个并发线程的访问
方法声明包括方法名、返回类型和外部参数。其中参数的类型可以是简单数据类型,也可以是复合数据类型(又称引用数据类型)。
方法体
方法体是对方法的实现,它包括局部变量的声明以及所有合法的Java指令。方法体中声明的局部变量的作用域在该方法内部。若局部变量与类的成员变量同名,则类的成员变量被隐藏。
为了区别参数和类的成员变量,我们必须使用this。this用在一个方法中引用当前对象,它的值是调用该方法的对象。返回值须与返回类型一致,或者完全相同,或是其子类。当返回类型是接口时,返回值必须实现该接口。
构造方法
构造方法是一个特殊的方法。Java 中的每个类都有构造方法,用来初始化该类的一个对象。
面向对象的基本特性
封装
封装最好理解了。封装是面向对象的特征之一,是对象和类概念的主要特性。封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。
继承
继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。通过继承创建的新类称为“子类”或“派生类”,被继承的类称为“基类”、“父类”或“超类”。
要实现继承,可以通过“继承”(Inheritance)和“组合”(Composition)来实现。
多态
多态性(polymorphisn)是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。
实现多态,有两种方式,覆盖和重载。覆盖和重载的区别在于,覆盖在运行时决定,重载是在编译时决定。并且覆盖和重载的机制不同,例如在 Java 中,重载方法的签名必须不同于原先方法的,但对于覆盖签名必须相同。
重载(Overloading)
方法重载是让类以统一的方式处理不同数据类型的手段。
一个类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义。调用方法时通过传递给它们的不同参数个数和参数类型来决定具体使用哪个方法。
返回值类型可以相同也可以不相同,无法以返回型别作为重载函数的区分标准。
重写(Overriding)
子类对父类的方法进行重新编写。如果在子类中的方法与其父类有相同的的方法名、返回类型和参数表,我们说该方法被重写 (Overriding)。
如需父类中原有的方法,可使用super关键字,该关键字引用了当前类的父类。
子类函数的访问修饰权限不能低于父类的。
3.设计模式(加粗部分一定要掌握)
请注意加粗部分为需要精通掌握
创建型模式
- 工厂模式(Factory Pattern)
- 抽象工厂模式(Abstract Factory Pattern)
- 单例模式(Singleton Pattern)
- 建造者模式(Builder Pattern)
- 原型模式(Prototype Pattern)
结构型模式
这些设计模式关注类和对象的组合。继承的概念被用来组合接口和定义组合对象获得新功能的方式。
- 适配器模式(Adapter Pattern)
- 桥接模式(Bridge Pattern)
- 过滤器模式(Filter、Criteria Pattern)
- 组合模式(Composite Pattern)
- 装饰器模式(Decorator Pattern)
- 外观模式(Facade Pattern)
- 享元模式(Flyweight Pattern)
- 代理模式(Proxy Pattern)
行为型模式
这些设计模式特别关注对象之间的通信。
- 责任链模式(Chain of Responsibility Pattern)
- 命令模式(Command Pattern)
- 解释器模式(Interpreter Pattern)
- 迭代器模式(Iterator Pattern)
- 中介者模式(Mediator Pattern)
- 备忘录模式(Memento Pattern)
- 观察者模式(Observer Pattern)
- 状态模式(State Pattern)
- 空对象模式(Null Object Pattern)
- 策略模式(Strategy Pattern)
- 模板模式(Template Pattern)
- 访问者模式(Visitor Pattern)
J2EE 模式
这些设计模式特别关注表示层。这些模式是由 Sun Java Center 鉴定的。
- MVC 模式(MVC Pattern)
- 业务代表模式(Business Delegate Pattern)
- 组合实体模式(Composite Entity Pattern)
- 数据访问对象模式(Data Access Object Pattern)
- 前端控制器模式(Front Controller Pattern)
- 拦截过滤器模式(Intercepting Filter Pattern)
- 服务定位器模式(Service Locator Pattern)
- 传输对象模式(Transfer Object Pattern)
4.建模语言和建模工具:UML(必须画的溜溜的)
所有UML图形
- UML 基础: 类图
- UML 基础: 序列图
- UML 基础: 组件图
- 绘制整洁的 UML 图
- 用例建模技巧
- UML 序列图简介
- 养成良好的绘制 UML 序列图的习惯
- 利用 UML 进行实体关系建模
UML建模工具
- Rose
- PowerDesigner
- Edraw(我的选择):我喜欢画图得漂亮
- eclipse自带..还有很多
- 在线UML画图工具:processon等
5.高质量编码能力:重用性,低耦合,可扩展性,高性能,可维护性。
我们评价高质量代码有三要素:可读性、可维护性、可变更性。我们的代码要一个都不能少地达到了这三要素的要求才能算高质量的代码。
这些内容,需要你日常工作中不断去总结和优化,先记好。
可读性强
- 不要编写大段的代码
- 代码如人,逻辑差的人都喜欢这样干,如果你喜欢这样写代码,你将很快被暴露,会被鄙视死的。
- 释义名称与注释
- 按照我的话就是,要脸还是不要脸,你自己看着办
可维护性
- 代码不能写死
- 预测可能发生的变化
可变更性
- 通过提高代码复用提高可维护性
- 利用设计模式提高可变更性
- 职责驱动设计和领域驱动设计
以上是官方说明,我觉得就是这个意思。
6.集成开发,版本控制,构建等工具:eclipse, svn, git,maven 等
这些我相信每个人都使用的马溜溜的,我会在稍后推荐大家我使用的开发必用开发工具。
7.java相关的基础知识和高级知识
- Java语言基础:异常处理,泛型,reflection
- Java高级特性和类库:class loader,bytecode,nio, juc 等
- Java多线程编程
- Java网络与服务器编程
- 开源产品和技术
- JVM原理和调优
我已经写过了一篇,java相关的必掌握的高级知识,里面更详尽,从程序员进阶到架构师,史上最全进阶详解(上篇)
架构设计要求
大型网络应用结构:消息中间件,负载均衡,集群技术,数据同步…
可容灾分布式系统设计能力………还有很多,如果需要掌握架构,请查看这篇文章从程序员进阶到架构师,最全进阶详解(下篇)-大型网站架构篇