京东疯狂月薪36k程序员最新Java面试题(常见面试题及答案汇总)

最近金三银四火热进行中,很多跳槽的小伙伴您们的福利来了,最新java面试题和答案分享给您们,看到这篇面试题肯定对你有很多帮助,京东,阿里,字节,百度,美团面试题及答案资料。 觉得文章对你有用可以 点赞+转发+关注。后台小信封回复【444】即可领取整套面试及答案资料。

Java基础篇

1. JDK 和 JRE 的区别是什么?

2. Java中有哪些数据类型?

3. == 和 equals 的区别是什么?

4. 两个对象的 hashCode() 相同,则 equals() 也一定为 true 正确吗?

5. Java 中 final 关键字的作用是什么?

6. String、StringBuffer、StringBuilder 的区别是什么?

7. String str=“donkey” 与 String str=new String(“donkey”) 一样吗?

8. 字符串如何反转?

9. String 类中常用方法都有哪些?

10. 抽象类是什么?

11. 抽象类必须要有抽象方法吗?

12. 普通类和抽象类的区别是什么?

13. 抽象类能使用 final 修饰吗?

14. 接口是什么?

15. 接口和抽象类的区别是什么?

16. Java 中 IO 流分几种?

17. BIO、NIO、AIO 有什么区别?

18. Files 的常用方法都有哪些?

代码图

	// Files.exists():检测文件路径是否存在
	Path path1 = Paths.get("C:\\Users\\e-yangfangchao\\Desktop\\test");
	System.out.println(Files.exists(path1, new LinkOption[]{LinkOption.NOFOLLOW_LINKS})); // true
	// Files.createFile():创建文件
	Path path2 = Paths.get("C:\\Users\\e-yangfangchao\\Desktop\\test\\a.txt");
	try {
	    Path newFilw = Files.createFile(path2);
	} catch (FileAlreadyExistsException e){
	    System.out.println("exists");
	} catch (IOException e) {
	    System.out.println("other wrong");
	}
	// Files.createDirectory():创建文件夹
	Path path3 = Paths.get("C:\\Users\\e-yangfangchao\\Desktop\\test\\newDirectory");
	try {
	    Path newDirectory = Files.createDirectory(path3);
	} catch (FileAlreadyExistsException e) {
	    System.out.println("exists");
	} catch (IOException e){
	    System.out.println("other wrong");
	}
	// Files.delete():删除一个文件或目录
	try {
	    Files.delete(path2);
	} catch (IOException e) {
	    e.printStackTrace();
	}
	// Files.copy():复制文件
	Path source = Paths.get("C:\\Users\\e-yangfangchao\\Desktop\\test\\b.txt");
	Path target = Paths.get("C:\\Users\\e-yangfangchao\\Desktop\\test\\newb.txt");
	try {
	    Files.copy(source,target);
	} catch (FileAlreadyExistsException e) {
	    System.out.println("targetFile already exists");
	} catch (IOException e){
	    System.out.println("other wrong");
	}
	// Files.move():移动文件
	Path source1 = Paths.get("C:\\Users\\e-yangfangchao\\Desktop\\test\\b.txt");
	Path target1 = Paths.get("C:\\Users\\e-yangfangchao\\Desktop\\test\\newDirectory\\a.txt");
	try {
	    Files.move(source1,target1);
	} catch (FileAlreadyExistsException e) {
	    System.out.println("targetFile1 already exists");
	} catch (IOException e){
	    System.out.println("other wrong");
	}
	// Files.size():查看文件个数
	// Files.read():读取文件
	// Files.write():写入文件

Java 容器篇

1. Java 中都有哪些容器?

2. Collection 和 Collections 的区别是什么?

3. List、Set、Map 之间的区别是什么?

4. HashMap 和 Hashtable 的区别是什么?

5. 如何决定使用 HashMap 还是 TreeMap?

6. HashMap 的实现原理是什么?

7. HashSet 的实现原理是什么?

8. ArrayList 和 LinkedList 的区别是什么?

9. 如何实现数组和 List 之间的转换?

10. ArrayList 和 Vector 的区别是什么?

11. Array 和 ArrayList 的区别是什么?

12. 在 Queue 中 poll() 和 remove() 的区别是什么?

13. 线程安全的集合类有哪些?

14. 迭代器 Iterator 是什么?

15. Iterator 怎么使用?有什么特点?

16. Iterator 和 ListIterator 的区别是什么?

代码图

    public static void main(String[] args) {
        // List
        ArrayList<String> list = new ArrayList<>();
        list.add("apple");
        list.add("pear");
        list.add("banana");
        Iterator<String> iterator = list.iterator();
        while (iterator.hasNext()){
            String s = iterator.next();
            if ("apple".equals(s)){
                iterator.remove();
            }
        }
        list.forEach(item -> System.out.println(item));

        // Map<key,value>
        Map<String,String> map=new HashMap<>();
        map.put("pig","猪");
        map.put("cat","猫");
        map.put("dog","狗");
        Iterator<String> iterator1 = map.keySet().iterator();
        Iterator<String> iterator2 = map.values().iterator();
        while (iterator1.hasNext()){
            System.out.println(iterator1.next());
        }
        while (iterator2.hasNext()){
            System.out.println(iterator2.next());
        }
    }

Java多线程

1. 并行和并发的区别是什么?

2. 线程和进程的区别是什么?

3. 守护线程是什么?

4. 创建线程有哪几种方式?

5. 说一下 runnable 和 callable 有什么区别?

6. 线程有哪些状态?

7. sleep() 和 wait() 有什么区别?

8. notify() 和 notifyAll() 有什么区别?

9. run() 和 start() 有什么区别?

10. 创建线程池有哪几种方式?

11. 线程池都有哪些状态?

12. 线程池中 submit() 和 execute() 方法有什么区别?

13. java 程序中怎么保证多线程的运行安全?

14. 多线程锁的升级原理是什么?

15. 什么是死锁?

16. 怎么防止死锁?

17. ThreadLocal 是什么?有哪些使用场景?

18. 说一下 synchronized 底层实现原理?

19. synchronized 和 volatile 的区别是什么?

20. synchronized 和 Lock 有什么区别?

21. synchronized 和 ReentrantLock 区别是什么?

22. 说一下 atomic 的原理?

代码图

package com.xykj.threadStation;
public class Station extends Thread {
    // 通过构造方法给线程名字赋值
    public Station(String name) {
       super(name);// 给线程名字赋值
    }
    // 为了保持票数的一致,票数要静态
    static int tick = 20;
    // 创建一个静态钥匙
    static Object ob = "aa";//值是任意的
    // 重写run方法,实现买票操作
    @Override
    public void run() {
      while (tick > 0) {
        synchronized (ob) {// 这个很重要,必须使用一个锁,
          // 进去的人会把钥匙拿在手上,出来后才把钥匙拿让出来
          if (tick > 0) {
            System.out.println(getName() + "卖出了第" + tick + "张票");
            tick--;
          } else {
            System.out.println("票卖完了");
          }
        }
        try {
           sleep(1000);//休息一秒
        } catch (InterruptedException e) {
          e.printStackTrace();
        }
      }
  }
}

常见的Java问题

1.什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”?

2.JDK和JRE的区别是什么?

3.”static”关键字是什么意思?Java中是否可以覆盖(override)一个private或者是static的方法?

4.是否可以在static环境中访问非static变量?

5.Java支持的数据类型有哪些?什么是自动拆装箱?

6.Java中的方法覆盖(Overriding)和方法重载(Overloading)是什么意思?

7.Java中,什么是构造函数?什么是构造函数重载?什么是复制构造函数?

8.Java支持多继承么?

9.接口和抽象类的区别是什么?

10.什么是值传递和引用传递?

代码图

package com.thread.demo.demo3;
 
public class MainClass {
	/**
	 * 龟兔赛跑:2000米
	 */
	public static void main(String[] args) {
		// 实例化乌龟和兔子
		Tortoise tortoise = new Tortoise();
		Rabbit rabbit = new Rabbit();
		// 回调方法的使用,谁先调用calltoback方法,另一个就不跑了
		LetOneStop letOneStop1 = new LetOneStop(tortoise);
		// 让兔子的回调方法里面存在乌龟对象的值,可以把乌龟stop
		rabbit.calltoback = letOneStop1;
		LetOneStop letOneStop2 = new LetOneStop(rabbit);
		// 让乌龟的回调方法里面存在兔子对象的值,可以把兔子stop
		tortoise.calltoback = letOneStop2;
		// 开始跑
		tortoise.start();
		rabbit.start();
	} 
}

Java线程

11.进程和线程的区别是什么?

12.创建线程有几种不同的方式?你喜欢哪一种?为什么?

13.概括的解释下线程的几种可用状态。

14.同步方法和同步代码块的区别是什么?

15.在监视器(Monitor)内部,是如何做线程同步的?程序应该做哪种级别的同步?

16.什么是死锁(deadlock)?

17.如何确保N个线程可以访问N个资源同时又不导致死锁?

// 创建当前类的对象,并且调用run()方法
public class ExtendsThread extends Thread {
	public static void main(String[] args) {
		ExtendsThread t = new ExtendsThread();
		t.start();

	}

	@Override
	public void run() {
		for (int i = 0; i < 1000; i++) {
			System.out.println("你是最棒的你知道么?");
		}
	}
}

Java集合类

18.Java集合类框架的基本接口有哪些?

19.为什么集合类没有实现Cloneable和Serializable接口?

20.什么是迭代器(Iterator)?

21.Iterator和ListIterator的区别是什么?

22.快速失败(fail-fast)和安全失败(fail-safe)的区别是什么?

23.Java中的HashMap的工作原理是什么?

24.hashCode()和equals()方法的重要性体现在什么地方?

25.HashMap和Hashtable有什么区别?

26.数组(Array)和列表(ArrayList)有什么区别?什么时候应该使用Array而不是ArrayList?

27.ArrayList和LinkedList有什么区别?

28.Comparable和Comparator接口是干什么的?列出它们的区别。

29.什么是Java优先级队列(Priority Queue)?

30.你了解大O符号(big-O notation)么?你能给出不同数据结构的例子么?

31.如何权衡是使用无序的数组还是有序的数组?

32.Java集合类框架的最佳实践有哪些?

33.Enumeration接口和Iterator接口的区别有哪些?

34.HashSet和TreeSet有什么区别?

垃圾收集器(Garbage Collectors)

35.Java中垃圾回收有什么目的?什么时候进行垃圾回收?

36.System.gc()和Runtime.gc()会做什么事情?

37.finalize()方法什么时候被调用?析构函数(finalization)的目的是什么?

38.如果对象的引用被置为null,垃圾收集器是否会立即释放对象占用的内存?

39.Java堆的结构是什么样子的?什么是堆中的永久代(Perm Gen space)?

40.串行(serial)收集器和吞吐量(throughput)收集器的区别是什么?

41.在Java中,对象什么时候可以被垃圾回收?

42.JVM的永久代中会发生垃圾回收么?

异常处理

43.Java中的两种异常类型是什么?他们有什么区别?

44.Java中Exception和Error有什么区别?

45.throw和throws有什么区别?

46.异常处理的时候,finally代码块的重要性是什么?

46.异常处理完成以后,Exception对象会发生什么变化?

47.finally代码块和finalize()方法有什么区别?

Java小应用程序(Applet)

48.什么是Applet?

49.解释一下Applet的生命周期

50.当applet被载入的时候会发生什么?

51.Applet和普通的Java应用程序有什么区别?

52.Java applet有哪些限制条件?

53.什么是不受信任的applet?

54.从网络上加载的applet和从本地文件系统加载的applet有什么区别?

55.applet类加载器是什么?它会做哪些工作?

56.applet安全管理器是什么?它会做哪些工作?

Swing

57.弹出式选择菜单(Choice)和列表(List)有什么区别

58.什么是布局管理器?

59.滚动条(Scrollbar)和滚动面板(JScrollPane)有什么区别?

60.哪些Swing的方法是线程安全的?

61.说出三种支持重绘(painting)的组件。

62.什么是裁剪(clipping)?

63.MenuItem和CheckboxMenuItem的区别是什么?

64.边缘布局(BorderLayout)里面的元素是如何布局的?

65.网格包布局(GridBagLayout)里面的元素是如何布局的?

66.Window和Frame有什么区别?

67.裁剪(clipping)和重绘(repainting)有什么联系?

68.事件监听器接口(event-listener interface)和事件适配器(event-adapter)有什么关系?

69.GUI组件如何来处理它自己的事件?

70.Java的布局管理器比传统的窗口系统有哪些优势?

71.Java的Swing组件使用了哪种设计模式?

JDBC

72.什么是JDBC?

73.解释下驱动(Driver)在JDBC中的角色。

74.Class.forName()方法有什么作用?

75.PreparedStatement比Statement有什么优势?

76.什么时候使用CallableStatement?用来准备CallableStatement的方法是什么?

77.数据库连接池是什么意思?

78.什么是RMI?

79.RMI体系结构的基本原则是什么?

80.RMI体系结构分哪几层?

81.RMI中的远程接口(Remote Interface)扮演了什么样的角色?

82.java.rmi.Naming类扮演了什么样的角色?

83.RMI的绑定(Binding)是什么意思?

84.Naming类的bind()和rebind()方法有什么区别?

85.让RMI程序能正确运行有哪些步骤?

86.RMI的stub扮演了什么样的角色?

87.什么是分布式垃圾回收(DGC)?它是如何工作的?

88.RMI中使用RMI安全管理器(RMISecurityManager)的目的是什么?

89.解释下Marshalling和demarshalling。

90.解释下Serialization和Deserialization。

Servlet

91.什么是Servlet?

92.说一下Servlet的体系结构。

93.Applet和Servlet有什么区别?

94.GenericServlet和HttpServlet有什么区别?

95.解释下Servlet的生命周期。

96.doGet()方法和doPost()方法有什么区别?

97.什么是Web应用程序?

98.什么是服务端包含(Server Side Include)?

99.什么是Servlet链(Servlet Chaining)?

100.如何知道是哪一个客户端的机器正在请求你的Servlet?

101.HTTP响应的结构是怎么样的?

102.什么是cookie?session和cookie有什么区别?

103.浏览器和Servlet通信使用的是什么协议?

104.什么是HTTP隧道?

105.sendRedirect()和forward()方法有什么区别?

JSP

107.什么是JSP页面?

108.JSP请求是如何被处理的?

109.JSP有什么优点?

110.什么是JSP指令(Directive)?JSP中有哪些不同类型的指令?

111.什么是JSP动作(JSP action)?

112.什么是Scriptlets?

113.声明(Decalaration)在哪里?

114.什么是表达式(Expression)?

115.隐含对象是什么意思?有哪些隐含对象?

其他

ThreadLocal(线程变量副本)

Synchronized实现内存共享,ThreadLocal为每个线程维护一个本地变量。

采用空间换时间,它用于线程间的数据隔离,为每一个使用该变量的线程提供一个副本,每个线程都可以独立地改变自己的副本,而不会和其他线程的副本冲突。

ThreadLocal类中维护一个Map,用于存储每一个线程的变量副本,Map中元素的键为线程对象,而值为对应线程的变量副本。

ThreadLocal在Spring中发挥着巨大的作用,在管理Request作用域中的Bean、事务管理、任务调度、AOP等模块都出现了它的身影。

Spring中绝大部分Bean都可以声明成Singleton作用域,采用ThreadLocal进行封装,因此有状态的Bean就能够以singleton的方式在多线程中正常工作了。

觉得文章对你有用可以 点赞+转发+关注。后台小信封回复【444】即可领取整套面试及答案资料。

猜你喜欢

转载自blog.csdn.net/m0_67322837/article/details/123776016