05 2022 档案

摘要:AOP 即面向切面编程,简单地说就是将代码中重复的部分抽取出来,在需要执行的时候使用动态代理技术,在不修改源码的基础上对方法进行增强。 在OOP中,通过分包、分类、分层来封装复用的代码逻辑,这些一般都是核心业务代码。而一些日志记录、性能统计、安全校验、事务管理等辅助代码就难以封装。 如果使用代理模式 阅读全文
posted @ 2022-05-31 00:39 张三丰学Java 阅读(554) 评论(0) 推荐(0) 编辑
摘要:Java 对象 JVM 退出时会全部销毁,如果需要将对象及状态持久化,就要通过序列化实现,将内存中的对象保存在二进制流中,需要时再将二进制流反序列化为对象。 对象序列化保存的是对象的状态,因此属于类属性的静态变量不会被序列化。 常见的序列化有三种: Java 原生序列化 实现 Serializaba 阅读全文
posted @ 2022-05-29 23:58 张三丰学Java 阅读(197) 评论(0) 推荐(0) 编辑
摘要:主要分为字符流和字节流,字符流一般用于文本文件,字节流一般用于图像或其他文件。 字符流包括了字符输入流 Reader 和字符输出流 Writer 字节流包括了字节输入流 InputStream 和字节输出流 OutputStream 字符流和字节流都有对应的缓冲流 字节流也可以包装为字符流,缓冲流带 阅读全文
posted @ 2022-05-29 22:43 张三丰学Java 阅读(23) 评论(0) 推荐(0) 编辑
摘要:什么是 BIO BIO 是同步阻塞式 IO,JDK1.4 之前的 IO 模型。 服务器实现模式为一个连接请求对应一个线程,服务器需要为每一个客户端请求创建一个线程,如果这个连接不做任何事会造成不必要的线程开销。 可以通过线程池改善,这种 IO 称为伪异步 IO。 适用连接数目少且服务器资源多的场景。 阅读全文
posted @ 2022-05-22 23:55 张三丰学Java 阅读(21) 评论(0) 推荐(0) 编辑
摘要:同步和异步是通信机制,阻塞和非阻塞是调用状态。 同步 IO 是用户线程发起 IO 请求后需要等待或轮询内核 IO 操作完成后才能继续执行。 异步 IO 是用户线程发起 IO 请求后可以继续执行,当内核 IO 操作完成后会通知用户线程,或调用用户线程注册的回调函数。 阻塞 IO 是 IO 操作需要彻底 阅读全文
posted @ 2022-05-22 22:45 张三丰学Java 阅读(83) 评论(0) 推荐(0) 编辑
摘要:JDK8 之前底层实现是数组 + 链表,JDK8 改为数组 + 链表/红黑树,节点类型从Entry 变更为 Node。 主要成员变量包括存储数据的 table 数组、元素数量 size、加载因子 loadFactor。 table 数组记录 HashMap 的数据,每个下标对应一条链表,所有哈希冲突 阅读全文
posted @ 2022-05-20 15:46 张三丰学Java 阅读(278) 评论(0) 推荐(0) 编辑
摘要:TreeMap 基于红黑树实现,增删改查的平均和最差时间复杂度均为 O(logn) ,最大特点是 Key 有序。 Key 必须实现 Comparable 接口或提供的 Comparator 比较器,所以 Key 不允许为 null。 HashMap 依靠 hashCode 和 equals 去重,而 阅读全文
posted @ 2022-05-19 11:22 张三丰学Java 阅读(374) 评论(0) 推荐(0) 编辑
摘要:Set 不允许元素重复且无序,常用实现有 HashSet、LinkedHashSet 和 TreeSet。 HashSet HashSet 通过 HashMap 实现,HashMap 的 Key 即 HashSet 存储的元素,所有 Key 都使用相同的 Value ,一个名为 PRESENT 的 阅读全文
posted @ 2022-05-16 15:16 张三丰学Java 阅读(127) 评论(0) 推荐(0) 编辑
摘要:LinkedList 本质是双向链表,与 ArrayList 相比插入和删除速度更快,但随机访问元素很慢。 除继承 AbstractList 外还实现了 Deque 接口,这个接口具有队列和栈的性质。 成员变量都被 transient 修饰,原理和 ArrayList 类似。 LinkedList 阅读全文
posted @ 2022-05-16 15:08 张三丰学Java 阅读(34) 评论(0) 推荐(0) 编辑
摘要:特点 ArrayList 是容量可变的非线程安全列表,使用数组实现,集合扩容时会创建更大的数组,把原有数组复制到新数组。 // 新容量扩大到原容量的大约1.5倍,右移一位相当于原数值除以2,扩容并不是严格的1.5位 int newCapacity = oldCapacity + (oldCapaci 阅读全文
posted @ 2022-05-16 14:42 张三丰学Java 阅读(60) 评论(0) 推荐(0) 编辑
摘要:在(静态)代码块中可以使用(静态)变量,但是被使用的(静态)变量必须在(静态)代码块前面声明。 父类静态代码块和静态变量(先声明的先执行) 子类静态代码块和静态变量(先声明的先执行) 父类普通代码块和普通变量(先声明的先执行) 父类构造方法。 子类普通代码块和普通变量(先声明的先执行) 子类构造方法 阅读全文
posted @ 2022-05-16 14:09 张三丰学Java 阅读(35) 评论(0) 推荐(0) 编辑
摘要:接口和抽象类对实体类进行更高层次的抽象,仅定义公共行为和特征。 语法维度 抽象类 接口 成员变量 无特殊要求 默认 public static final 常量 构造方法 有构造方法,不能实例化 没有构造方法,不能实例化 方法 抽象类可以没有抽象方法,但有抽象方法一定是抽象类。 默认 public 阅读全文
posted @ 2022-05-16 11:32 张三丰学Java 阅读(29) 评论(0) 推荐(0) 编辑
摘要:访问权限控制符 本类 包内 包外子类 任何地方 public √ √ √ √ protected √ √ √ × 无 √ √ × × private √ × × × protected 基类的 protected 成员是包内可见的,并且对子类可见; 若子类与基类不在同一包中,那么在子类中,子类实例可 阅读全文
posted @ 2022-05-16 11:30 张三丰学Java 阅读(17) 评论(0) 推荐(0) 编辑
摘要:内部类可对同一包中其他类隐藏,内部类方法可以访问定义这个内部类的作用域中的数据,包括 private 数据。 内部类是一个编译器现象,与虚拟机无关。 编译器会把内部类转换成常规的类文件,用 $ 分隔外部类名与内部类名,其中匿名内部类使用数字编号,虚拟机对此一无所知。 静态内部类: 属于外部类,只加载 阅读全文
posted @ 2022-05-16 10:37 张三丰学Java 阅读(237) 评论(0) 推荐(0) 编辑
摘要:equals: 检测对象是否相等,默认使用 == 比较对象引用,可以重写 equals 方法自定义比较规则。 equals 方法规范:自反性、对称性、传递性、一致性、对于任何非空引用 x,x.equals(null) 返回 false。 hashCode: 散列码是由对象导出的一个整型值,没有规律, 阅读全文
posted @ 2022-05-15 23:54 张三丰学Java 阅读(93) 评论(0) 推荐(0) 编辑
摘要:类关系 描述 权力强侧 举例 继承 父子类之间的关系:is-a 父类 小狗继承于动物 实现 接口和实现类之间的关系:can-do 接口 小狗实现了狗叫接口 组合 比聚合更强的关系:contains-a 整体 头是身体的一部分 聚合 暂时组装的关系:has-a 组装方 小狗和绳子是暂时的聚合关系 依赖 阅读全文
posted @ 2022-05-13 18:01 张三丰学Java 阅读(32) 评论(0) 推荐(0) 编辑
摘要:重载 重载指方法名称相同,但参数类型个数不同,是行为水平方向不同实现。 对编译器来说,==方法名称和参数列表==组成了一个唯一键,称为方法签名,JVM 通过方法签名决定调用哪种重载方法。 ==(方法签名不包括返回类型)== 不管继承关系如何复杂,重载在编译时可以根据规则知道调用哪种目标方法,因此属于 阅读全文
posted @ 2022-05-13 17:36 张三丰学Java 阅读(83) 评论(0) 推荐(0) 编辑
摘要:概念 面向过程让计算机有步骤地顺序做一件事,是过程化思维,使用面向过程语言开发大型项目,软件复用和维护存在很大问题,模块之间耦合严重。 面向对象相对面向过程更适合解决规模较大的问题,可以拆解问题复杂度,对现实事物进行抽象并映射为开发对象,更接近人的思维。 例如开门这个动作,面向过程是 open(Do 阅读全文
posted @ 2022-05-13 17:24 张三丰学Java 阅读(29) 评论(0) 推荐(0) 编辑
摘要:final方法可以被继承或者重载,但是不能被重写 final可用于声明属性、方法和类,分别表示属性不可变,方法不可重写,类不可继承。 阅读全文
posted @ 2022-05-13 15:43 张三丰学Java 阅读(1203) 评论(0) 推荐(0) 编辑
摘要:所有异常都是 Throwable 的子类,分为 Error 和 Exception。 Error 是 Java 运行时系统的内部错误和资源耗尽错误,例如 StackOverFlowError 和 OutOfMemoryError,这种异常程序无法处理。 Exception 分为受检异常和非受检异常, 阅读全文
posted @ 2022-05-12 17:53 张三丰学Java 阅读(824) 评论(0) 推荐(0) 编辑
摘要:什么是泛型: 泛型本质是参数化类型,解决不确定对象具体类型的问题。泛型在定义处只具备执行 Object 方法的能力。 泛型的好处: 类型安全,放置什么出来就是什么,不存在 ClassCastException 提升可读性,编码阶段就显式知道泛型集合、泛型方法等处理的对象类型 代码重用,合并了同类型的 阅读全文
posted @ 2022-05-07 17:26 张三丰学Java 阅读(36) 评论(0) 推荐(0) 编辑
摘要:注解是一种标记,使类或接口附加额外信息,帮助编译器和 JVM 完成一些特定功能,例如 @Override 标识一个方法是重写方法。 元注解是自定义注解的注解(负责对其它注解进行说明的注解,自定义注解时可以使用元注解) Java 5 定义了 4 个注解,分别是 @Documented、@Target、 阅读全文
posted @ 2022-05-07 15:26 张三丰学Java 阅读(201) 评论(0) 推荐(0) 编辑
摘要:什么是反射: 在运行状态中,对于任意一个类都能知道它的所有属性和方法,对于任意一个对象都能调用它的任意方法和属性,这种动态获取信息及调用对象方法的功能称为反射。 缺点是破坏了封装性以及泛型约束。 反射是框架的核心,Spring 大量使用反射。 Class 类的作用: 在程序运行期间,Java 运行时 阅读全文
posted @ 2022-05-07 15:18 张三丰学Java 阅读(27) 评论(0) 推荐(0) 编辑
摘要:深拷贝会把对象重新复制一份,而浅拷贝不拷贝对象,还是之前的对象 浅拷贝: 只复制当前对象的基本数据类型及引用变量,没有复制引用变量指向的实际对象。 修改克隆对象可能影响原对象,不安全。 深拷贝: 完全拷贝基本数据类型和引用数据类型,安全。 深拷贝和浅拷贝的区别,你真的弄懂了吗? - 知乎用户9t42 阅读全文
posted @ 2022-05-07 14:03 张三丰学Java 阅读(40) 评论(0) 推荐(0) 编辑
摘要:按值调用指方法接收调用者提供的值, 按引用调用指方法接收调用者提供的变量地址。 Java的参数传递,不管是基本数据类型还是引用类型的参数,都是按值传递,没有按引用传递! Java 总是按值调用,方法得到的是所有参数值的副本,传递对象时实际上方法接收的是对象引用的副本。 方法不能修改基本数据类型的参数 阅读全文
posted @ 2022-05-07 11:22 张三丰学Java 阅读(98) 评论(0) 推荐(0) 编辑
摘要:JVM: Java 编译器可生成与计算机体系结构无关的字节码指令,字节码文件不仅可以轻易地在任何机器上解释执行,还可以动态地转换成本地机器代码,转换是由 JVM 实现的,JVM 是平台相关的,屏蔽了不同操作系统的差异。 Java文件编译成Class文件,并且最后由Java虚拟机将Class文件转换成 阅读全文
posted @ 2022-05-07 09:41 张三丰学Java 阅读(53) 评论(0) 推荐(0) 编辑
摘要:平台无关性,摆脱硬件束缚,"一次编写,到处运行"。 相对安全的内存管理和访问机制,避免大部分内存泄漏和指针越界。 热点代码检测和运行时编译及优化,使程序随运行时间增长获得更高性能。 完善的应用程序接口,支持第三方类库。 阅读全文
posted @ 2022-05-07 09:36 张三丰学Java 阅读(19) 评论(0) 推荐(0) 编辑
摘要:使用 {} 相当于使用字符串拼接,存在 SQL 注入的风险。 使用 #{} 相当于使用占位符,可以防止 SQL 注入,不支持使用占位符的地方就只能使用{} ,典型情况就是动态参数。 阅读全文
posted @ 2022-05-07 00:33 张三丰学Java 阅读(32) 评论(0) 推荐(0) 编辑
摘要:二级缓存是Mapper 级别,默认关闭。 使用二级缓存时多个 SqlSession 使用同一个 Mapper 的 SQL 语句操作数据库,得到的数据会存在二级缓存区,同样使用 HashMap 进行数据存储,相比于一级缓存,二级缓存范围更大,多个 SqlSession 可以共用二级缓存,作用域是 Ma 阅读全文
posted @ 2022-05-07 00:32 张三丰学Java 阅读(154) 评论(0) 推荐(0) 编辑
摘要:一级缓存是 SqlSession 级别,默认开启且不能关闭。 操作数据库时需要创建 SqlSession 对象,对象中有一个 HashMap 存储缓存数据,不同 SqlSession 之间缓存数据区域互不影响。 一级缓存的作用域是 SqlSession 范围的,在同一个 SqlSession 中执行 阅读全文
posted @ 2022-05-07 00:29 张三丰学Java 阅读(60) 评论(0) 推荐(0) 编辑
摘要:select、insert、update、delete 标签分别对应查询、添加、更新、删除操作。 parameterType 属性表示参数的数据类型,包括基本数据类型和对应的包装类型、String 和 Java Bean 类型, 当有多个参数时可以使用 #{argn} 的形式表示第 n 个参数。除了 阅读全文
posted @ 2022-05-07 00:28 张三丰学Java 阅读(157) 评论(0) 推荐(0) 编辑
摘要:优点 相比 JDBC 减少了大量代码量,减少冗余代码。 使用灵活,SQL 语句写在 XML 里,从程序代码中彻底分离,降低了耦合度,便于管理。 提供 XML 标签,支持编写动态 SQL 语句。 提供映射标签,支持对象与数据库的 ORM 字段映射关系。 缺点 SQL 语句编写工作量较大,尤其是字段和关 阅读全文
posted @ 2022-05-07 00:26 张三丰学Java 阅读(57) 评论(0) 推荐(0) 编辑
摘要:观察者模式属于行为型模式,也叫发布订阅模式,定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 主要解决一个对象状态改变给其他对象通知的问题,缺点是如果被观察者对象有很多的直接和间接观察者的话通知很耗时, 如果存在循环依赖的话可能导致系统崩溃,另 阅读全文
posted @ 2022-05-07 00:11 张三丰学Java 阅读(31) 评论(0) 推荐(0) 编辑
摘要:模板模式属于行为型模式,使子类可以在不改变算法结构的情况下重新定义算法的某些步骤,适用于抽取子类重复代码到公共父类。 优点是可以封装固定不变的部分,扩展可变的部分。 缺点是每一个不同实现都需要一个子类维护,会增加类的数量。 为防止恶意操作,一般模板方法都以 final 修饰。 HttpServlet 阅读全文
posted @ 2022-05-06 23:51 张三丰学Java 阅读(24) 评论(0) 推荐(0) 编辑
摘要:策略模式属于行为型模式,定义了一系列算法并封装起来,之间可以互相替换。策略模式主要解决在有多种算法相似的情况下,使用 if/else 所带来的难以维护。 优点是算法可以自由切换,可以避免使用多重条件判断并且扩展性良好,缺点是策略类会增多并且所有策略类都需要对外暴露。 在集合框架中,经常需要通过构造方 阅读全文
posted @ 2022-05-06 17:37 张三丰学Java 阅读(30) 评论(0) 推荐(0) 编辑
摘要:适配器模式属于结构型模式,它作为两个不兼容接口之间的桥梁,结合了两个独立接口的功能,将一个类的接口转换成另外一个接口使得原本由于接口不兼容而不能一起工作的类可以一起工作。 缺点是过多使用适配器会让系统非常混乱,不易整体把握。 java.io 包中,InputStream 字节输入流通过适配器 Inp 阅读全文
posted @ 2022-05-06 17:28 张三丰学Java 阅读(38) 评论(0) 推荐(0) 编辑
摘要:装饰器模式属于结构型模式,在不改变原有对象的基础上将功能附加到对象,相比继承可以更加灵活地扩展原有对象的功能。 装饰器模式适合的场景:在不想增加很多子类的前提下扩展一个类的功能。 java.io 包中,InputStream 字节输入流通过装饰器 BufferedInputStream 增强为缓冲字 阅读全文
posted @ 2022-05-06 17:04 张三丰学Java 阅读(28) 评论(0) 推荐(0) 编辑
摘要:代理模式属于结构型模式,一个类代表另一个类的功能,创建具有现有对象的对象,以便向外界提供功能接口,为其他对象提供一种代理以控制对这个对象的访问。 也就是增强和控制访问的作用(不能直接访问该类,但是又需要调用其中的方法并拓展) 优点:是可以增强目标对象的功能,降低代码耦合度,扩展性好。 缺点:是在客户 阅读全文
posted @ 2022-05-04 23:02 张三丰学Java 阅读(31) 评论(0) 推荐(0) 编辑
摘要:单例模式属于创建型模式,一个单例类在任何情况下都只存在一个实例 所以构造方法必须是私有的(阻止对象被new出来) 由自己创建一个静态变量存储实例 只对类进行一次实例化,以后都直接获取第一次实例化的对象 对外提供一个静态公有方法获取实例。 优点是内存中只有一个实例,减少了开销,尤其是频繁创建和销毁实例 阅读全文
posted @ 2022-05-04 17:31 张三丰学Java 阅读(43) 评论(0) 推荐(0) 编辑
摘要:抽象工厂模式指提供一个创建一系列相关或相互依赖对象的接口,无需指定它们的具体类。 也就是,一个工厂可以生产不同等级的产品(具体工厂类中不同方法中创建不同实例,这里的实例对象的类实现了不同的接口) 客户端不依赖于产品类实例如何被创建和实现的细节,主要用于系统的产品有多于一个的产品族,而系统只消费其中某 阅读全文
posted @ 2022-05-04 00:40 张三丰学Java 阅读(33) 评论(0) 推荐(0) 编辑
摘要:工厂方法模式指定义一个创建对象的接口,让接口的实现类决定创建哪种对象,让类的实例化推迟到子类中进行。 也就是,先给一个抽象类的工厂类(里面有一个创建实例的抽象方法),然后再由具体的工厂类继承这个抽象工厂类,实现该抽象方法(在方法里面创建特定的实例),不同的具体工厂类创建的实例不同,这样就更符合开闭原 阅读全文
posted @ 2022-05-03 22:29 张三丰学Java 阅读(55) 评论(0) 推荐(0) 编辑
摘要:简单工厂模式又叫做静态方法模式,因为工厂类定义了一个静态方法 简单工厂模式指由一个工厂对象来创建实例,客户端不需要关注创建逻辑,只需提供传入工厂的参数。 也就是,工厂类当中有一个有参静态方法,然后通过传入的参数来判断创建的实例是哪种。 适用于工厂类负责创建对象较少的情况,缺点是如果要增加新产品,就需 阅读全文
posted @ 2022-05-03 18:15 张三丰学Java 阅读(28) 评论(0) 推荐(0) 编辑
摘要:创建型 在创建对象的同时隐藏创建逻辑,不使用 new 直接实例化对象,程序在判断需要创建哪些对象时更灵活。 包括工厂/抽象工厂/单例/建造者/原型模式。 结构型 通过类和接口间的继承和引用实现创建复杂结构的对象。 包括适配器/桥接模式/过滤器/组合/装饰器/外观/享元/代理模式。 行为型 通过类之间 阅读全文
posted @ 2022-05-02 23:55 张三丰学Java 阅读(18) 评论(0) 推荐(0) 编辑
摘要:开闭原则 OOP(面向对象)中最基础的原则,指一个软件实体(类、模块、方法等)应该对扩展开放,对修改关闭。 强调用抽象构建框架,用实现扩展细节,提高代码的可复用性和可维护性。 单一职责原则 一个类、接口或方法只负责一个职责,降低代码复杂度以及变更引起的风险。 依赖倒置原则 程序应该依赖于抽象类或接口 阅读全文
posted @ 2022-05-02 21:37 张三丰学Java 阅读(31) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示