2019年Java中高级面试题总结(7),228道系列查漏补缺!

2019年Java面试题中高级系列228道java

Java面试题(一)程序员

第一篇更新1~20题的答案解析面试

第二篇更新21~50题答案解析正则表达式

第三篇更新51~95题答案解析算法

Java面试题(二)sql

第四篇更新1~20题答案解析编程

第五篇更新21~50题答案解析设计模式

第六篇更新51~80题答案解析数组

v2-2e56e74b6aded508ff4d925ae688a767_b.jpg

Java 面试题(二)缓存

8一、说出几条 Java 中方法重载的最佳实践?

8二、在多线程环境下,SimpleDateFormat 是线程安全的吗?

8三、Java 中如何格式化一个日期?如格式化为 ddMMyyyy 的形式?

8四、Java 中,怎么在格式化的日期中显示时区?

8五、Java 中 java.util.Date 与 java.sql.Date 有什么区别?

8六、Java 中,如何计算两个日期之间的差距?

8七、Java 中,如何将字符串 YYYYMMDD 转换为日期?

8九、如何测试静态方法?(答案)

90、怎么利用 JUnit 来测试一个方法的异常?

9一、你使用过哪一个单元测试库来测试你的 Java 程序?

9二、@Before 和 @BeforeClass 有什么区别?

9三、怎么检查一个字符串只包含数字?解决方案

9四、Java 中如何利用泛型写一个 LRU 缓存?

9五、写一段 Java 程序将 byte 转换为 long?

9六、在不使用 StringBuffer 的前提下,怎么反转一个字符串?

9七、Java 中,怎么获取一个文件中单词出现的最高频率?

9八、如何检查出两个给定的字符串是反序的?

9九、Java 中,怎么打印出一个字符串的全部排列?

100、Java 中,怎样才能打印出数组中的重复元素?

10一、Java 中如何将字符串转换为整数?

10二、在没有使用临时变量的状况如何交换两个整数变量的值?

10三、接口是什么?为何要使用接口而不是直接使用具体类?

10四、Java 中,抽象类与接口之间有什么不一样?

10五、除了单例模式,你在生产环境中还用过什么设计模式?

10六、你能解释一下里氏替换原则吗?

10七、什么状况下会违反迪米特法则?为何会有这个问题?

10八、适配器模式是什么?何时使用?

10九、什么是“依赖注入”和“控制反转”?为何有人使用?

1十、抽象类是什么?它与接口有什么区别?你为何要使用过抽象类?

1十一、构造器注入和 setter 依赖注入,那种方式更好?

1十二、依赖注入和工程模式之间有什么不一样?

11三、适配器模式和装饰器模式有什么区别?

11四、适配器模式和代理模式以前有什么不一样?

11五、什么是模板方法模式?

v2-5d3ffbea5de58f2d1dab49ee365657fb_b.png


本次更新81~115题的答案解析

8一、说出几条 Java 中方法重载的最佳实践?

下面有几条能够遵循的方法重载的最佳实践来避免形成自动装箱的混乱。

a)不要重载这样的方法:一个方法接收 int 参数,而另个方法接收 Integer 参数。

b)不要重载参数数量一致,而只是参数顺序不一样的方法。

c)若是重载的方法参数个数多于 5 个,采用可变参数。

8二、在多线程环境下,SimpleDateFormat 是线程安全的吗?

不是,很是不幸,DateFormat 的全部实现,包括 SimpleDateFormat 都不是线程安全的,所以你不该该在多线程序中使用,除非是在对外线程安全的环境中使用,如 将 SimpleDateFormat 限制在ThreadLocal 中。若是你不这么作,在解析或者格式化日期的时候,可能会获取到一个不正确的结果。所以,从日期、时间处理的全部实践来讲,我强力推荐 joda-time 库。

8三、Java 中如何格式化一个日期?如格式化为 ddMMyyyy的形式?

Java 中,可使用 SimpleDateFormat 类或者 joda-time 库来格式日期。DateFormat 类容许你使用多种流行的格式来格式化日期。参见答案中的示例代码,代码中演示了将日期格式化成不一样的格式,如 dd-MM-yyyy 或 ddMMyyyy。

8四、Java 中,怎么在格式化的日期中显示时区?

使用SimpleDateFormat来实现格式化日期,可是DateFormat 的全部实现,包括 SimpleDateFormat 都不是线程安全的,所以你不该该在多线程序中使用,除非是在对外线程安全的环境中使用,如将SimpleDateFormat 限制在 ThreadLocal 中。若是你不这么作,在解析或者格式化日期的时候,可能会获取到一个不正确的结果。所以,从日期、时间处理的全部实践来讲,强力推荐 joda-time 库。

8五、Java 中 java.util.Date 与 java.sql.Date 有什么区别?

8六、Java 中,如何计算两个日期之间的差距?

8七、Java 中,如何将字符串 YYYYMMDD 转换为日期?

8九、如何测试静态方法?

可使用 PowerMock 库来测试静态方法。

90、怎么利用 JUnit 来测试一个方法的异常?

对须要测试异常的代码使用try,catch语句块。好比:public void testException(){try{Long.parseLong(null);} catch(NumberFormatException expected){}}而后使用Junit的fail函数,对于没有抛出预期异常的代码

9一、你使用过哪一个单元测试库来测试你的 Java 程序?

9二、@Before 和 @BeforeClass 有什么区别?

@Before :在每一个测试方法以前都执行一次, 方法须要声明为public

@beforeclass :只在类中执行一次, 必须声明为public static

9三、怎么检查一个字符串只包含数字?解决方案

用Java自带的函数、用正则表达式、用ascii码判断

9四、Java 中如何利用泛型写一个 LRU 缓存?

这是一种混合的数据结构,咱们须要在哈希表的基础上创建一个链表。可是Java已经为咱们提供了这种形式的数据结构-LinkedHashMap!它甚至提供可覆盖回收策略的方法。惟一须要咱们注意的事情是,改链表的顺序是插入的顺序,而不是访问的顺序。可是,有一个构造函数提供了一个选项,可使用访问的顺序。

9五、写一段 Java 程序将 byte 转换为 long?

9六、在不使用 StringBuffer 的前提下,怎么反转一个字符串?

9七、Java 中,怎么获取一个文件中单词出现的最高频率?

这是一道算法面试题,Java中文的比较多。

一、将文件内容存入String字符串中。 二、利用split()函数分割字符串,由于直接替换英文空格或者,逗号分隔就能够了,中文相似,分隔获得一个数组。 三、遍历数组中全部的单词,统计结果Map 中,key=单词,value=单词出现的次数。 四、使用TreeSet类型,对Map中的结果进行排序,依据统计次数。 五、输出最高的排序的前N名结果

9八、如何检查出两个给定的字符串是反序的?

思路主要是,从开始字符,和另一个从末尾字符比较,先判断长度是否相同,不一样直接不可能反文。而后再比较。

9九、Java 中,怎么打印出一个字符串的全部排列?

100、Java 中,怎样才能打印出数组中的重复元素?

v2-5a0bfd956d6001519b1e279b834a2733_b.png

10一、Java 中如何将字符串转换为整数?

String s="123";

int i;

第一种方法:i=Integer.parseInt(s);

第二种方法:i=Integer.valueOf(s).intValue();

10二、在没有使用临时变量的状况如何交换两个整数变量的值?

加减法、乘除法、异或法。欢迎你们关注个人公种浩【程序员追风】,2019年多家公司java面试题整理了1000多道400多页pdf文档,文章都会在里面更新,整理的资料也会放在里面。v2-5a0bfd956d6001519b1e279b834a2733_b.png

10三、接口是什么?为何要使用接口而不是直接使用具体类?

接口用于定义 API。它定义了类必须得遵循的规则。同时,它提供了一种抽象,由于客户端只使用接口,这样能够有多重实现,如 List 接口,你可使用可随机访问的 ArrayList,也可使用方便插入和删除的 LinkedList。接口中不容许写代码,以此来保证抽象,可是 Java 8 中你能够在接口声明静态的默认方法,这种方法是具体的。

10四、Java 中,抽象类与接口之间有什么不一样?

Java 中,抽象类和接口有不少不一样之处,可是最重要的一个是 Java 中限制一个类只能继承一个类,可是能够实现多个接口。抽象类能够很好的定义一个家族类的默认行为,而接口能更好的定义类型,有助于后面实现多态机制。

10五、除了单例模式,你在生产环境中还用过什么设计模式?

这须要根据你的经验来回答。通常状况下,你能够说依赖注入,工厂模式,装饰模式或者观察者模式,随意选择你使用过的一种便可。不过你要准备回答接下的基于你选择的模式的问题。

10六、你能解释一下里氏替换原则吗?

首先,这是编译器的要求,若是不这么作,没法经过编译。其次,面向对象的编程,其中继承有个大原则,任何子类的对象均可以当成父类的对象使用。

10七、什么状况下会违反迪米特法则?为何会有这个问题?

迪米特法则建议“只和朋友说话,不要陌生人说话”,以此来减小类之间的耦合。

10八、适配器模式是什么?何时使用?

适配器模式提供对接口的转换。若是你的客户端使用某些接口,可是你有另一些接口,你就能够写一个适配去来链接这些接口。

10九、什么是“依赖注入”和“控制反转”?为何有人使用?

控制反转(IOC)是 Spring 框架的核心思想,用我本身的话说,就是你要作一件事,别本身可劲 new 了,你就说你要干啥,而后外包出去就好~依赖注入(DI) 在我浅薄的想法中,就是经过接口的引用和构造方法的表达,将一些事情整好了反过来传给须要用到的地方~

1十、抽象类是什么?它与接口有什么区别?你为何要使用过抽象类?

a.接口用于规范,抽象类用于共性.

b.声明方法的存在而不去实现它的类被叫作抽象类

c.接口(interface)是抽象类的变体。在接口中,全部方法都是抽象的。

1十一、构造器注入和 setter 依赖注入,那种方式更好?

每种方式都有它的缺点和优势。构造器注入保证全部的注入都被初始化,可是setter 注入提供更好的灵活性来设置可选依赖。若是使用 XML 来描述依赖,Setter 注入的可读写会更强。经验法则是强制依赖使用构造器注入,可选依赖使用 setter 注入。

1十二、依赖注入和工程模式之间有什么不一样?

虽然两种模式都是将对象的建立从应用的逻辑中分离,可是依赖注入比工程模式更清晰。经过依赖注入,你的类就是 POJO,它只知道依赖而不关心它们怎么获取。使用工厂模式,你的类须要经过工厂来获取依赖。所以,使用 DI 会比使用工厂模式更容易测试。

11三、适配器模式和装饰器模式有什么区别?

虽然适配器模式和装饰器模式的结构相似,可是每种模式的出现意图不一样。适配器模式被用于桥接两个接口,而装饰模式的目的是在不修改类的状况下给类增长新的功能。

11四、适配器模式和代理模式以前有什么不一样?

这个问题与前面的相似,适配器模式和代理模式的区别在于他们的意图不一样。因为适配器模式和代理模式都是封装真正执行动做的类,所以结构是一致的,可是适配器模式用于接口之间的转换,而代理模式则是增长一个额外的中间层,以便支持分配、控制或智能访问。

11五、什么是模板方法模式?

模板方法提供算法的框架,你能够本身去配置或定义步骤。例如,你能够将排序算法看作是一个模板。它定义了排序的步骤,可是具体的比较,可使用Comparable 或者其语言中相似东西,具体策略由你去配置。列出算法概要的方法就是众所周知的模板方法。


最后

欢迎你们一块儿交流,喜欢文章记得关注我点个赞哟,感谢支持!

相关文章
相关标签/搜索