15道非常经典的Java面试题
程序员文章站
2022-06-07 08:10:04
...
试题如下:
参考答案:
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); } }