上一页 1 ··· 23 24 25 26 27 28 29 30 31 ··· 55 下一页
摘要: 下面有几条可以遵循的方法重载的最佳实践来避免造成自动装箱的混乱。 a)不要重载这样的方法:一个方法接收 int 参数,而另个方法接收 Integer 参 数。 b)不要重载参数数量一致,而只是参数顺序不同的方法。 c)如果重载的方法参数个数多于 5 个,采用可变参数。 阅读全文
posted @ 2020-07-11 21:46 咔啡 阅读(297) 评论(0) 推荐(0)
摘要: 这是我在使用 Java 中 Collectionc 类的一些最佳实践: a)使用正确的集合类,例如,如果不需要同步列表,使用 ArrayList 而不是 Vector。 b)优先使用并发集合,而不是对集合进行同步。并发集合提供更好的可扩展性。 c)使用接口代表和访问集合,如使用 List 存储 Ar 阅读全文
posted @ 2020-07-11 21:42 咔啡 阅读(314) 评论(0) 推荐(0)
摘要: Spring 是一个开源应用框架,旨在降低应用程序开发的复杂度。它是轻量级、松 散耦合的。它具有分层体系结构,允许用户选择组件,同时还为 J2EE 应用程序 开发提供了一个有凝聚力的框架。它可以集成其他框架,如 Structs、Hibernate、 EJB 等,所以又称为框架的框架。 阅读全文
posted @ 2020-07-11 21:38 咔啡 阅读(1411) 评论(0) 推荐(0)
摘要: 因为有强制的规范指定需要同时重写 hashcode 与 equal 是方法,许多容器类, 如 HashMap、HashSet 都依赖于 hashcode 与 equals 的规定。 阅读全文
posted @ 2020-07-11 21:34 咔啡 阅读(174) 评论(0) 推荐(0)
摘要: 每种方式都有它的缺点和优点。构造器注入保证所有的注入都被初始化,但是 setter 注入提供更好的灵活性来设置可选依赖。如果使用 XML 来描述依赖, Setter 注入的可读写会更强。经验法则是强制依赖使用构造器注入,可选依赖使用 setter 注入。 阅读全文
posted @ 2020-07-11 21:31 咔啡 阅读(1349) 评论(0) 推荐(0)
摘要: 不能,虽然你可以调用 System.gc() 或者 Runtime.gc(),但是没有办法保证 GC 的执行。 阅读全文
posted @ 2020-07-11 21:30 咔啡 阅读(600) 评论(0) 推荐(0)
摘要: JVM 中堆和栈属于不同的内存区域,使用目的也不同。栈常用于保存方法帧和局 部变量,而对象总是在堆上分配。栈通常都比堆小,也不会在多个线程之间共享, 而堆被整个 JVM 的所有线程共享。 阅读全文
posted @ 2020-07-11 21:28 咔啡 阅读(364) 评论(0) 推荐(0)
摘要: final 是一个修饰符,可以修饰变量、方法和类。如果 final 修饰变量,意味着该 变量的值在初始化后不能被改变。finalize 方法是在对象被回收之前调用的方法, 给对象自己最后一个复活的机会,但是什么时候调用 finalize 没有保证。finally 是一个关键字,与 try 和 cat 阅读全文
posted @ 2020-07-11 21:27 咔啡 阅读(255) 评论(0) 推荐(0)
摘要: PriorityQueue 保证最高或者最低优先级的的元素总是在队列头部,但是 LinkedHashMap 维持的顺序是元素插入的顺序。当遍历一个 PriorityQueue 时,没有任何顺序保证,但是 LinkedHashMap 课保证遍历顺序是元素插入的顺 序。 阅读全文
posted @ 2020-07-11 21:26 咔啡 阅读(476) 评论(0) 推荐(0)
摘要: poll() 和 remove() 都是从队列中取出一个元素,但是 poll() 在获取元素失败 的时候会返回空,但是 remove() 失败的时候会抛出异常。 阅读全文
posted @ 2020-07-11 21:25 咔啡 阅读(1185) 评论(0) 推荐(0)
摘要: 这两个类有许多不同的地方,下面列出了一部分: a) Hashtable 是 JDK 1 遗留下来的类,而 HashMap 是后来增加的。 b)Hashtable 是同步的,比较慢,但 HashMap 没有同步策略,所以会更快。 c)Hashtable 不允许有个空的 key,但是 HashMap 允 阅读全文
posted @ 2020-07-11 21:24 咔啡 阅读(271) 评论(0) 推荐(0)
摘要: 是双向链表,你可以检查 JDK 的源码。在 Eclipse,你可以使用快捷键 Ctrl + T, 直接在编辑器中打开该类。 阅读全文
posted @ 2020-07-11 21:22 咔啡 阅读(3288) 评论(0) 推荐(1)
摘要: 接口用于定义 API。它定义了类必须得遵循的规则。同时,它提供了一种抽象, 因为客户端只使用接口,这样可以有多重实现,如 List 接口,你可以使用可随机 访问的 ArrayList,也可以使用方便插入和删除的 LinkedList。接口中不允许写 代码,以此来保证抽象,但是 Java 8 中你可以 阅读全文
posted @ 2020-07-11 21:20 咔啡 阅读(1207) 评论(0) 推荐(1)
摘要: 重载和重写都允许你用相同的名称来实现不同的功能,但是重载是编译时活动, 而重写是运行时活动。你可以在同一个类中重载方法,但是只能在子类中重写方 法。重写必须要有继承。 阅读全文
posted @ 2020-07-11 21:18 咔啡 阅读(436) 评论(0) 推荐(0)
摘要: 虽然两种都可以实现代码复用,但是组合比继承共灵活,因为组合允许你在运行 时选择不同的实现。用组合实现的代码也比继承测试起来更加简单。 阅读全文
posted @ 2020-07-11 21:16 咔啡 阅读(287) 评论(0) 推荐(0)
摘要: 可以使用 PowerMock 库来测试静态方法。 阅读全文
posted @ 2020-07-11 21:14 咔啡 阅读(448) 评论(0) 推荐(0)
摘要: 适配器模式提供对接口的转换。如果你的客户端使用某些接口,但是你有另外一 些接口,你就可以写一个适配去来连接这些接口。 阅读全文
posted @ 2020-07-11 21:12 咔啡 阅读(501) 评论(0) 推荐(0)
摘要: 组合模式使用树结构来展示部分与整体继承关系。它允许客户端采用统一的形式 来对待单个对象和对象容器。当你想要展示对象这种部分与整体的继承关系时采 用组合模式。 阅读全文
posted @ 2020-07-11 21:08 咔啡 阅读(317) 评论(0) 推荐(0)
摘要: 模板方法提供算法的框架,你可以自己去配置或定义步骤。例如,你可以将排序 算法看做是一个模板。它定义了排序的步骤,但是具体的比较,可以使用 Comparable 或者其语言中类似东西,具体策略由你去配置。列出算法概要的方 法就是众所周知的模板方法。 阅读全文
posted @ 2020-07-11 21:05 咔啡 阅读(247) 评论(0) 推荐(0)
摘要: 不是,非常不幸,DateFormat 的所有实现,包括 SimpleDateFormat 都不是 线程安全的,因此你不应该在多线程序中使用,除非是在对外线程安全的环境中 使用,如 将 SimpleDateFormat 限制在 ThreadLocal 中。如果你不这么做, 在解析或者格式化日期的时候, 阅读全文
posted @ 2020-07-11 21:03 咔啡 阅读(729) 评论(0) 推荐(0)
摘要: 接口用于规范,抽象类用于共性. 声明方法的存在而不去实现它的类被叫做抽象类 接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。 阅读全文
posted @ 2020-07-11 20:59 咔啡 阅读(338) 评论(0) 推荐(0)
摘要: 虽然两种模式都是将对象的创建从应用的逻辑中分离,但是依赖注入比工程模式 更清晰。通过依赖注入,你的类就是 POJO,它只知道依赖而不关心它们怎么获 取。使用工厂模式,你的类需要通过工厂来获取依赖。因此,使用 DI 会比使用 工厂模式更容易测试。 阅读全文
posted @ 2020-07-11 20:55 咔啡 阅读(421) 评论(0) 推荐(0)
摘要: 访问者模式用于解决在类的继承层次上增加操作,但是不直接与之关联。这种模 式采用双派发的形式来增加中间层。 阅读全文
posted @ 2020-07-11 20:52 咔啡 阅读(217) 评论(0) 推荐(0)
摘要: 受检查异常编译器在编译期间检查。对于这种异常,方法强制处理或者通过 throws 子句声明。其中一种情况是 Exception 的子类但不是 RuntimeException 的子类。非受检查是 RuntimeException 的子类,在编译阶 段不受编译器的检查。 阅读全文
posted @ 2020-07-11 19:31 咔啡 阅读(726) 评论(0) 推荐(0)
摘要: Java 8 在 Java 历史上是一个开创新的版本,下面 JDK 8 中 5 个主要的特性: Lambda 表达式,允许像对象一样传递匿名函数 Stream API,充分利用现代多核 CPU,可以写出很简洁的代码 Date 与 Time API,最终,有一个稳定、简单的日期和时间库可供你使用 扩展 阅读全文
posted @ 2020-07-11 19:30 咔啡 阅读(421) 评论(0) 推荐(0)
摘要: DDD 原理 – 微服务面试问题 阅读全文
posted @ 2020-07-11 19:26 咔啡 阅读(220) 评论(0) 推荐(0)
摘要: IoC 的一些好处是:它将最小化应用程序中的代码量。它将使您的应用程序易于测试,因为它不需要单元测试用例中的任何单例 或 JNDI 查找机制。它以最小的影响和最少的侵入机制促进松耦合。它支持即时的实例化和延迟加载服务。 阅读全文
posted @ 2020-07-11 19:20 咔啡 阅读(702) 评论(0) 推荐(0)
摘要: Spring 配置文件是 XML 文件。该文件主要包含类信息。它描述了这些类是如何 配置以及相互引入的。但是,XML 配置文件冗长且更加干净。如果没有正确规划 和编写,那么在大项目中管理变得非常困难。 阅读全文
posted @ 2020-07-11 19:17 咔啡 阅读(1125) 评论(0) 推荐(0)
摘要: 为了创建一个 advice 对象而链接一个 aspect 和其它应用类型或对象,称为编 织(Weaving)。在 Spring AOP 中,编织在运行时执行。 阅读全文
posted @ 2020-07-11 19:13 咔啡 阅读(901) 评论(0) 推荐(0)
摘要: 构造器依赖注入:构造器依赖注入通过容器触发一个类的构造器来实现 的,该类有一系列参数,每个参数代表一个对其他类的依赖。Setter 方法注入:Setter 方法注入是容器通过调用无参构造器或无参 static 工厂 方法实例化 bean 之后,调用该 bean 的 setter 方法,即实现了基 于 阅读全文
posted @ 2020-07-11 19:10 咔啡 阅读(924) 评论(0) 推荐(0)
摘要: 开闭原则要求你的代码对扩展开放,对修改关闭。这个意思就是说,如果你想增 加一个新的功能,你可以很容易的在不改变已测试过的代码的前提下增加新的代 码。有好几个设计模式是基于开闭原则的,如策略模式,如果你需要一个新的策 略,只需要实现接口,增加配置,不需要改变核心逻辑。一个正在工作的例子是 Collec 阅读全文
posted @ 2020-07-11 19:00 咔啡 阅读(1162) 评论(0) 推荐(0)
摘要: 一个公共的顶级类的源文件名称与类名相同,而嵌套静态类没有这个要求。一个 嵌套类位于顶级类内部,需要使用顶级类的名称来引用嵌套静态类,如 HashMap.Entry 是一个嵌套静态类,HashMap 是一个顶级类,Entry 是一个嵌 套静态类。 阅读全文
posted @ 2020-07-11 18:55 咔啡 阅读(294) 评论(1) 推荐(0)
摘要: 类的内部可以有多个嵌套公共静态类,但是一个 Java 源文件只能有一个顶级公 共类,并且顶级公共类的名称与源文件名称必须一致。 阅读全文
posted @ 2020-07-11 18:52 咔啡 阅读(354) 评论(0) 推荐(0)
摘要: 事实上,随着新功能的增加,弹簧变得越来越复杂。如果必须启动新的 spring 项 目,则必须添加构建路径或添加 maven 依赖项,配置应用程序服务器,添加 spring 配置。所以一切都必须从头开始。 Spring Boot 是解决这个问题的方法。使用 spring boot 可以避免所有样板代码 阅读全文
posted @ 2020-07-11 18:51 咔啡 阅读(224) 评论(0) 推荐(0)
摘要: Version Feature Spring 2.5 发布于 2007 年。这是第一个支持注解的版本。 Spring 3.0 发布于 2009 年。它完全利用了 Java5 中的改进,并为 JEE6 提供了支 持。 Spring 4.0 发布于 2013 年。这是第一个完全支持 JAVA8 的版本。 阅读全文
posted @ 2020-07-11 18:49 咔啡 阅读(824) 评论(0) 推荐(0)
摘要: 依赖注入,是 IOC 的一个方面,是个通常的概念,它有多种解释。这概念是说你 不用创建对象,而只需要描述它如何被创建。你不在代码里直接组装你的组件和 服务,但是要在配置文件里描述哪些组件需要哪些服务,之后一个容器(IOC 容 器)负责把他们组装起来。 阅读全文
posted @ 2020-07-11 18:46 咔啡 阅读(1865) 评论(0) 推荐(0)
摘要: DOM 解析器将整个 XML 文档加载到内存来创建一棵 DOM 模型树,这样可以 更快的查找节点和修改 XML 结构,而 SAX 解析器是一个基于事件的解析器, 不会将整个 XML 文档加载到内存。由于这个原因,DOM 比 SAX 更快,也要 求更多的内存,不适合于解析大 XML 文件。 阅读全文
posted @ 2020-07-11 18:43 咔啡 阅读(404) 评论(0) 推荐(0)
摘要: AOP 核心就是切面,它将多个类的通用行为封装成可重用的模块,该模块含有一 组 API 提供横切功能。比如,一个日志模块可以被称作日志的 AOP 切面。根据需 求的不同,一个应用程序可以有若干切面。在 Spring AOP 中,切面通过带有 @Aspect 注解的类实现。 阅读全文
posted @ 2020-07-11 18:32 咔啡 阅读(165) 评论(0) 推荐(0)
摘要: 轻量级 - Spring 在代码量和透明度方面都很轻便。IOC - 控制反转 AOP - 面向 切面编程可以将应用业务逻辑和系统服务分离,以实现高内聚。容器 - Spring 负 责创建和管理对象(Bean)的生命周期和配置。MVC - 对 web 应用提供了高 度可配置性,其他框架的集成也十分方便 阅读全文
posted @ 2020-07-11 18:02 咔啡 阅读(779) 评论(0) 推荐(0)
摘要: 虽然 JDK 1.7 不像 JDK 5 和 8 一样的大版本,但是,还是有很多新的特性, 如 try-with-resource 语句,这样你在使用流或者资源的时候,就不需要手动关 闭,Java 会自动关闭。Fork-Join 池某种程度上实现 Java 版的 Map-reduce。 允许 Swit 阅读全文
posted @ 2020-07-11 17:38 咔啡 阅读(245) 评论(0) 推荐(0)
上一页 1 ··· 23 24 25 26 27 28 29 30 31 ··· 55 下一页