Java特性
基础知识
不可变类
基本类型的包装类(例如Integer、Float等)和 String都是不可变类
敏感数据(如密码)放在字符数组比使用String更安全: 因为常量池暴露字符串,垃圾自动回收,程序员无权
== 和equal()和hashcode
值传递、引用传递
引用传递实际上还是值传递,但因为传递的引用值指向的是对象,所以会改变原对象
static关键字
实现一个方法或类
String StringBuffer 、StringBuilder、String
JVM
Hotspot把JVM中的堆空间划分为三个代:年轻代、老年代、永久代
sunJDK把方法区的实现放在了永久代
JMM
设计模式
设计原则
- 找出会变化的部分,把它们从不变的部分分离出来
- 针对接口编程,而不是针对实现编程
- 多用组合,少用继承。即有一个比是一个更好
- 开闭原则: 对扩展开放,对修改关闭
策略模式—— 一组算法被封装成一个算法族
一组算法被封装成一个算法族,这个算法族中的不同算法可以相互替换(用哪个都行,选择不同的具体算法,就是选择不同的策略)
实现:
声明一个接口,不同的算法要实现这个接口
场景举例:
- 出行交通工具的选择——可以开车、步行、骑车...这些不同的算法被封装成一个算法族(即抽象一个GoOut接口,开车、步行...要实现这个接口)
- 不同的促销方式——可以满减、送券、送礼品...这些不同的算法被封装成一个算法族(即抽象一个Promotion接口,满减、送券...要实现这个接口)
观察者模式——出版者+订阅者
装饰者模式——套一个娃,再给它添点功能
工厂模式
简单工厂(静态工厂)模式——客户直接向工厂下单要货
特点:把可变的对象创建过程分离出来,单独放到一个工厂中实现
向用户提供产品,用户只管直接向工厂发送产品类型参数要求,通常是静态工厂即制造产品的过程不能通过继承更改
工厂方法模式——超类中的抽象方法,子类自主实现
工厂方法:在一个超类中