Java面试题,2020年春招亲身经历,希望能帮助到你!

集合系列

hashmap和hashtable区别?
(1)Hashmap键值对可以为空,Hashtable键值对都不能为空。
(2)HashMap是线程不安全的,Hashtable是线程安全的。
(3)HashMap继承自AbstractMap类,Hashtable继承自Dictionary类。

List和set、map的区别:
(1)List是有序可重复的,set是无序不可重复的。
(2)List允许插入多个null值,set只允许一个null值。
(3)Map不是collection的子接口或者实现类。Map是一个接口,Map 的 每个 Entry 都持有两个对象。

什么场景下使用list,set,map呢?
(1)如果你经常会使用索引来对容器中的元素进行访问,那么 List 是你的正确的选择。
(2)如果你想保证插入元素的唯一性,也就是你不想有重复值的出现,那么可以选择一个 Set 的实现类。
(3)如果你以键和值的形式进行数据存储那么 Map 是你正确的选择.
多线程系列

如何在Java中实现线程?
1.继承Thread类,重写run方法(其实Thread类本身也实现了Runnable接口)
2.实现Runnable接口,重写run方法
3.实现Callable接口,重写call方法(有返回值)
4.使用线程池(有返回值)

Thread类中的start()和run()方法有什么区别?
只有调用了start()方法,才会表现出多线程的特性,不同线程的run()方法里面的代码交替执行。如果只是调用run()方法,那么代码还是同步执行的,必须等待一个线程的run()方法里面的代码全部执行完毕之后,另外一个线程才可以执行其run()方法里面的代码。则没实现多线程。

Java多线程中调用wait() 和 sleep()方法有什么不同?
1.sleep()来自Thread类,wait()来自Object类,
2.调用 sleep()方法,线程不会释放对象锁。而调用 wait() 方法线程会释放对象锁;
3.sleep()睡眠后不出让系统资源,wait()让其他线程可以占用 CPU;
JAVA基础

equals与==的区别?
==操作符是用来比较两个变量的值是否相等,即就是比较变量在内存中的存储地址是否相同,equals()方法是String类从Object类中继承的,被用来检测两个对象的内容是否相同。

重载和重写(覆盖)的区别?
(1)重载的方法名称相同、参数的类型或个数不同,重写则全部相同。
(2)重载对权限没有要求、被 重写的方法不能拥有更严格的权限。
(3)重载发生在一个类当中,重写发生在继承类当中。

抽象类(abstract)和接口的区别?
抽象类要被子类继承,接口要被类实现。
抽象类中可以作方法声明,也可以做方法实现,接口只能做方法声明。
抽象类可以有具体的方法和属性,接口只能有抽象方法和不可变常量。
抽象类和接口都是用来抽象具体对象的,但是接口的抽象级别最高。

什么是线程安全?
如果每次多线程运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。

Final关键字的作用:
(1)修饰类:被final关键字修饰的类,不能被继承没有子类。
(2)修饰方法:一个类中的方法一旦被final关键字修饰,则该方法就不能被子类重写,只能被继承。
(3)修饰变量:如果修饰的基本数据类型,一旦被初始化,其数值是不能再被改变的。

Ajax怎么设置同步异步
async:true(异步) false (同步)

发送ajax请求的步骤
1.创建异步对象(XMLHttpRequest)
2.准备发送:open(参数一,参数二,参数三)1.请求方式。2.请求地址3.同步异步
3.执行发送动作:send()
4.指定回调函数:onreadystatechange()

servlet生命周期
被创建(init)
提供服务(service)
被销毁(destroy)

怎么解决tomcat端口冲突
–1.dos窗口中输入:netstat -ano | findstr 8080
找到占用的端口,然后kill
–2.kill占用的端口
taskkill -pid (进程pid) -f

jsp和servlet的区别
1、JSP在本质上就是SERVLET,但是两者的创建方式不一样.
2、Servlet完全是JAVA程序代码构成,擅长于流程控制和事务处理,通过Servlet来生成动态网页很不直观.
3、JSP由HTML代码和JSP标签构成,可以方便地编写动态网页.

JDBC的操作步骤:
1.加载驱动:classforName()、driverManager.registerDriver()
2.获取连接:DriverManager.getConnection();
3.建立sql语句connection.preparedStatement
4.执行sql语句 excute
5.释放资源

说一下synchronized关键字中对象锁和类锁的区别。
答:
对象锁就是非静态方法,类锁就算静态方法。
(1)非静态方法: 给对象加锁(可以理解为给这个对象的内存上锁,注意 只是这块内存,其他同类对象都会有各自的内存锁),这时候在其他一个以上线程中执行该对象的这个同步方法(注意:是该对象)就会产生互斥。
(2)静态方法: 相当于在类上加锁(*.class 位于代码区,静态方法位于静态区域,这个类产生的对象公用这个静态方法,所以这块内存,N个对象来竞争), 这时候,只要是这个类产生的对象,在调用这个静态方法时都会产生互斥。

发布了6 篇原创文章 · 获赞 12 · 访问量 741

猜你喜欢

转载自blog.csdn.net/m0_46219785/article/details/105171152