15道非常经典的Java面试题

原创
2016/07/29 02:31
阅读数 1W

试题如下:

参考答案:

import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * Created by ysc on 7/26/16.
 */
public class Interview {
    private static void one(){
        String str1 = "hello";
        String str2 = "he"+new String("llo");
        System.err.println(str1==str2);
        System.out.println("1. false");
    }
    private static void two(){
        int i = Integer.MAX_VALUE;
        System.err.println((i+1)<i);
        System.out.println("2. 存在一个i, 使得(i+1)<i");
    }
    private static void three(){
        System.err.println("gc is not a Java Thread, it is a native thread");
        Thread.getAllStackTraces().keySet().forEach(thread -> System.out.println(thread.getName()+"->"+thread.isDaemon()+" "+thread.getPriority()));
        System.out.println("3. gc线程是daemon线程");
    }
    private static volatile int count = 0;
    private static void four(){
        ExecutorService executorService = Executors.newCachedThreadPool();
        for(int j=0; j<10; j++){
            executorService.submit(()->{
                for(int i=0; i<1000000; i++){
                    count++;
                }
            });
        }
        System.out.println("count should be: "+10000000+", actual be: "+count);
        System.out.println("4. volatile不能保证线程安全");
    }
    private static void five(){
        ArrayList<Integer> list = new ArrayList<>(20);
        list.add(1);
        System.out.println("debug code, not execute grow method");
        System.out.println("5. list grow 0 times");
    }
    private static void six() {
        System.out.println("BufferedReader's constructor only accepts a Reader instance");
        System.out.println("6. new BufferedReader(new FileInputStream(\"a.dat\")); is wrong");
    }
    private static void seven() {
        try{
            if(true){
                throw new IOException();
            }
        }catch (FileNotFoundException e){
            System.out.print("FileNotFoundException!");
        }catch (IOException e){
            System.out.print("IOException!");
        }catch (Exception e){
            System.out.print("Exception!");
        }
        System.out.println("\n7. IOException!");
    }
    private static void eight() {
        System.out.println("String s;System.out.println(s); error: variable s might not have been initialized\nRecompile with -Xlint:unchecked for details.");
        System.out.println("8. 由于String s没有初始化, 代码不能编译通过");
    }
    private static void nine() {
        System.out.println("5"+2);
        System.out.println("9. 52");
    }
    private static void ten() {
        int i = 2;
        int result = 0;
        switch(i){
            case  1:
                result = result + i;
            case  2:
                result = result + i * 2;
            case  3:
                result = result + i * 3;
        }
        System.out.println("result="+result);
        System.out.println("10. 10");
    }
    private static class Null{
        public static void hello(){
            System.out.println("hello");
        }
        public static void main(String[] args) {
            ((Null)null).hello();
            Null _null = (Null)null;
            _null.hello();
        }
    }
    private static class StringExample1{
        String str = new String("good");
        char[] ch = {'a', 'b', 'c'};
        public void change(String str, char[] ch){
            str = "test ok";
            ch[0] = 'g';
        }

        public static void main(String[] args) {
            StringExample1 ex = new StringExample1();
            ex.change(ex.str, ex.ch);
            System.out.print(ex.str+" and ");
            System.out.print(ex.ch);
            System.out.println();
        }
    }
    private static class StringExample2{
        public static void change(String str){
            str = "welcome";
        }

        public static void main(String[] args) {
            String str = "1234";
            change(str);
            System.out.println(str);
        }
    }
    private static class ForLoop{
        static boolean foo(char c){
            System.out.print(c);
            return true;
        }

        public static void main(String[] args) {
            int i=0;
            for(foo('A');foo('B')&&(i<2);foo('C')){
                i++;
                foo('D');
            }
            System.out.println();
        }
    }
    private static class HelloA{
        public HelloA(){
            System.out.println("HelloA");
        }

        { System.out.println("I'm A class"); }

        static {
            System.out.println("static A");
        }
    }
    private static class HelloB extends HelloA{
        public HelloB(){
            System.out.println("HelloB");
        }

        { System.out.println("I'm B class"); }

        static {
            System.out.println("static B");
        }

        public static void main(String[] args) {
            System.out.println("main start");
            new HelloB();
            new HelloB();
            System.out.println("main end");
        }
    }
    public static void main(String[] args) {
        one();
        two();
        three();
        four();
        five();
        six();
        seven();
        eight();
        nine();
        ten();
        Null.main(null);
        StringExample1.main(null);
        StringExample2.main(null);
        ForLoop.main(null);
        HelloB.main(null);
    }
}

 

展开阅读全文
打赏
17
293 收藏
分享
加载中
6666
2017/04/01 11:38
回复
举报

引用来自“_Sven”的评论

第一题JDK8是true,jdk6是false,jdk7应该是跟6一样。反正我一致没有这样判断过1

为啥我用jdk8第一题还是false
2016/09/20 20:30
回复
举报
马克
2016/08/14 11:33
回复
举报
杨尚川博主
扩展一下第一题:
String str1 = "i++";
String str2 = "i"+new String("++");
String str3 = "i"+new String("++").intern();
String str4 = "i"+new String("++").toString();
String str5 = "i"+"++";
String str6 = "i++";
System.out.println(str1==str2);
System.out.println(str1==str3);
System.out.println(str1==str4);
System.out.println(str1==str5);
System.out.println(str1==str6);
2016/08/11 09:35
回复
举报

引用来自“huqihong”的评论

引用来自“清源”的评论

引用来自“sharedata”的评论

遇到这样的面试,建议转身就走:因为实际工作中你不会这么来写程序的。
即使在京东总部我面试过数百人,也从未使用试卷。好的面试官聊聊就知道你水平,如果他做不到就说明他的水平有问题,或者就是变态用变态试题来装逼。

@sharedata赞同

赞同,这样面试非常不科学

支持
2016/08/11 09:27
回复
举报

引用来自“清源”的评论

引用来自“sharedata”的评论

遇到这样的面试,建议转身就走:因为实际工作中你不会这么来写程序的。
即使在京东总部我面试过数百人,也从未使用试卷。好的面试官聊聊就知道你水平,如果他做不到就说明他的水平有问题,或者就是变态用变态试题来装逼。

@sharedata赞同

赞同,这样面试非常不科学
2016/08/06 08:57
回复
举报

引用来自“打雷要下雨LEO”的评论

引用来自“zonghua”的评论

引用来自“sharedata”的评论

遇到这样的面试,建议转身就走:因为实际工作中你不会这么来写程序的。
即使在京东总部我面试过数百人,也从未使用试卷。好的面试官聊聊就知道你水平,如果他做不到就说明他的水平有问题,或者就是变态用变态试题来装逼。
哎哟,请问京东在深圳有分公司吗

有,深圳工作比较辛苦,因为深圳不让骑电瓶车!
0开飞机不可以吗
2016/08/04 14:08
回复
举报

引用来自“zonghua”的评论

引用来自“sharedata”的评论

遇到这样的面试,建议转身就走:因为实际工作中你不会这么来写程序的。
即使在京东总部我面试过数百人,也从未使用试卷。好的面试官聊聊就知道你水平,如果他做不到就说明他的水平有问题,或者就是变态用变态试题来装逼。
哎哟,请问京东在深圳有分公司吗

有,深圳工作比较辛苦,因为深圳不让骑电瓶车!
2016/08/04 03:04
回复
举报

引用来自“_Sven”的评论

第一题JDK8是true,jdk6是false,jdk7应该是跟6一样。反正我一致没有这样判断过1

好难啊!下次可能会有答案要区分api版本、虚拟机实现以及各个平台,甚至虚拟机附带参数!
2016/08/04 02:48
回复
举报
第一题JDK8是true,jdk6是false,jdk7应该是跟6一样。反正我一致没有这样判断过1
2016/08/03 11:08
回复
举报
更多评论
打赏
63 评论
293 收藏
17
分享
返回顶部
顶部