Java面试题

来源:互联网 发布:关口知宏并不喜欢中国 编辑:程序博客网 时间:2024/06/05 03:30

原文:http://blog.csdn.net/jackfrued/article/details/44921941

39、如何实现字符串的反转及替换?

答:方法很多,可以自己写实现也可以使用String或StringBuffer/StringBuilder中的方法。有一道很常见的面试题是用递归实现字符串反转,代码如下所示:

    public static String reverse(String originStr) {        if(originStr == null || originStr.length() <= 1)             return originStr;        return reverse(originStr.substring(1)) + originStr.charAt(0);    }

40、怎样将GB2312编码的字符串转换为ISO-8859-1编码的字符串?

String s1 = "你好";String s2 = new String(s1.getBytes("GB2312"), "ISO-8859-1");

41、日期和时间:
- 如何取得年月日、小时分钟秒?
- 如何取得从1970年1月1日0时0分0秒到现在的毫秒数?
- 如何取得某月的最后一天?
- 如何格式化日期?
答:
问题1:创建java.util.Calendar 实例,调用其get()方法传入不同的参数即可获得参数所对应的值。Java 8中可以使用java.time.LocalDateTimel来获取,代码如下所示。

public class DateTimeTest {    public static void main(String[] args) {        Calendar cal = Calendar.getInstance();        System.out.println(cal.get(Calendar.YEAR));        System.out.println(cal.get(Calendar.MONTH));    // 0 - 11        System.out.println(cal.get(Calendar.DATE));        System.out.println(cal.get(Calendar.HOUR_OF_DAY));        System.out.println(cal.get(Calendar.MINUTE));        System.out.println(cal.get(Calendar.SECOND));        // Java 8        LocalDateTime dt = LocalDateTime.now();        System.out.println(dt.getYear());        System.out.println(dt.getMonthValue());     // 1 - 12        System.out.println(dt.getDayOfMonth());        System.out.println(dt.getHour());        System.out.println(dt.getMinute());        System.out.println(dt.getSecond());    }}

问题2:以下方法均可获得该毫秒数。

Calendar.getInstance().getTimeInMillis();System.currentTimeMillis();Clock.systemDefaultZone().millis(); // Java 8

问题3:代码如下所示。

Calendar time = Calendar.getInstance();time.getActualMaximum(Calendar.DAY_OF_MONTH);

问题4:利用java.text.DataFormat 的子类(如SimpleDateFormat类)中的format(Date)方法可将日期格式化。Java 8中可以用java.time.format.DateTimeFormatter来格式化时间日期,代码如下所示。

import java.text.SimpleDateFormat;import java.time.LocalDate;import java.time.format.DateTimeFormatter;import java.util.Date;class DateFormatTest {    public static void main(String[] args) {        SimpleDateFormat oldFormatter = new SimpleDateFormat("yyyy/MM/dd");        Date date1 = new Date();        System.out.println(oldFormatter.format(date1));        // Java 8        DateTimeFormatter newFormatter = DateTimeFormatter.ofPattern("yyyy/MM/dd");        LocalDate date2 = LocalDate.now();        System.out.println(date2.format(newFormatter));    }}

补充:Java的时间日期API一直以来都是被诟病的东西,为了解决这一问题,Java 8中引入了新的时间日期API,其中包括LocalDate、LocalTime、LocalDateTime、Clock、Instant等类,这些的类的设计都使用了不变模式,因此是线程安全的设计。如果不理解这些内容,可以参考我的另一篇文章《关于Java并发编程的总结和思考》。

42、打印昨天的当前时刻。
答:

import java.util.Calendar;class YesterdayCurrent {    public static void main(String[] args){        Calendar cal = Calendar.getInstance();        cal.add(Calendar.DATE, -1);        System.out.println(cal.getTime());    }}

在Java 8中,可以用下面的代码实现相同的功能。

import java.time.LocalDateTime;class YesterdayCurrent {    public static void main(String[] args) {        LocalDateTime today = LocalDateTime.now();        LocalDateTime yesterday = today.minusDays(1);        System.out.println(yesterday);    }}

43、比较一下Java和JavaSciprt。

答:JavaScript 与Java是两个公司开发的不同的两个产品。Java 是原Sun Microsystems公司推出的面向对象的程序设计语言,特别适合于互联网应用程序开发;而JavaScript是Netscape公司的产品,为了扩展Netscape浏览器的功能而开发的一种可以嵌入Web页面中运行的基于对象和事件驱动的解释性语言。JavaScript的前身是LiveScript;而Java的前身是Oak语言。
下面对两种语言间的异同作如下比较:

  • 基于对象和面向对象:Java是一种真正的面向对象的语言,即使是开发简单的程序,必须设计对象;JavaScript是种脚本语言,它可以用来制作与网络无关的,与用户交互作用的复杂软件。它是一种基于对象(Object-Based)和事件驱动(Event-Driven)的编程语言,因而它本身提供了非常丰富的内部对象供设计人员使用。
  • 解释和编译:Java的源代码在执行之前,必须经过编译。JavaScript是一种解释性编程语言,其源代码不需经过编译,由浏览器解释执行。(目前的浏览器几乎都使用了JIT(即时编译)技术来提升JavaScript的运行效率)
  • 强类型变量和类型弱变量:Java采用强类型变量检查,即所有变量在编译之前必须作声明;JavaScript中变量是弱类型的,甚至在使用变量前可以不作声明,JavaScript的解释器在运行时检查推断其数据类型。
  • 代码格式不一样。

补充:上面列出的四点是网上流传的所谓的标准答案。其实Java和JavaScript最重要的区别是一个是静态语言,一个是动态语言。目前的编程语言的发展趋势是函数式语言和动态语言。在Java中类(class)是一等公民,而JavaScript中函数(function)是一等公民,因此JavaScript支持函数式编程,可以使用Lambda函数和闭包(closure),当然Java
8也开始支持函数式编程,提供了对Lambda表达式以及函数式接口的支持。对于这类问题,在面试的时候最好还是用自己的语言回答会更加靠谱,不要背网上所谓的标准答案。

49、列出一些你常见的运行时异常?

答:
- ArithmeticException(算术异常)
- ClassCastException (类转换异常)
- IllegalArgumentException (非法参数异常)
- IndexOutOfBoundsException (下标越界异常)
- NullPointerException (空指针异常)
- SecurityException (安全异常)

  • finalize:Object类中定义的方法,Java中允许使用finalize()方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在销毁对象时调用的,通过重写finalize()方法可以整理系统资源或者执行其他清理工作。

面试题 - 说出下面代码的运行结果。(此题的出处是《Java编程思想》一书)

class Annoyance extends Exception {}class Sneeze extends Annoyance {}class Human {    public static void main(String[] args)         throws Exception {        try {            try {                throw new Sneeze();            }             catch ( Annoyance a ) {                System.out.println("Caught Annoyance");                throw a;            }        }         catch ( Sneeze s ) {            System.out.println("Caught Sneeze");            return ;        }        finally {            System.out.println("Hello World!");        }    }}/*Caught AnnoyanceCaught SneezeHello World!*/
0 0
原创粉丝点击