Java面试基础篇
Java基础
- 1.并行和并发有什么区别?
- 2.守护线程是什么?
- 3.创建线程有哪几种方式?以及怎么创建线程池?
- 4.sleep() 和 wait() 有什么区别?
- 5.在 Java 程序中怎么保证多线程的运行安全?
- 6.加锁的方式有哪些 ?
- 7.synchronized和Lock有什么区别 ?
- 8. 什么是死锁
- 9. 怎么防止死锁?
- 10. 什么是 Java 序列化?什么情况下需要序列化?
- 11. JSP 和 servlet 有什么区别?
- 12. JSP 有哪些内置对象?作用分别是什么?
- 13. 说一下 JSP 的 4 种作用域?
- 14. session 和 cookie 有什么区别?
- 15. 说一下 session 的工作原理?
1.并行和并发有什么区别?
一、意思不同
1、并发:并发是指两个或多个事件在同一时间间隔发生。
2、并行:并行是指两个或者多个事件在同一时刻发生。
二、侧重不同
1、并发:并发侧重于在同一实体上。
2、并行:并行侧重于在不同实体上。
三、处理不同
1、并发:并发在一台处理器上“同时”处理多个任务。
2、并行:并行在多台处理器上同时处理多个任务。
可以这么理解:
并发 = 两个队列和一台咖啡机。
并行 = 两个队列和两台咖啡机。
2.守护线程是什么?
守护线程是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。在 Java 中垃圾回收线程就是特殊的守护线程。
3.创建线程有哪几种方式?以及怎么创建线程池?
创建线程:
- 继承 Thread 重写 run 方法;
- 实现 Runnable 接口;
- 实现 Callable 接口。
线程池的创建:
- 通过 ThreadPoolExecutor 创建的线程池;
- 通过 Executors 创建的线程池。
4.sleep() 和 wait() 有什么区别?
类的不同:sleep() 来自 Thread,wait() 来自 Object。
释放锁:sleep() 不释放锁;wait() 释放锁。
用法不同:sleep() 时间到会自动恢复;wait() 可以使用 notify()/notifyAll()直接唤醒。
5.在 Java 程序中怎么保证多线程的运行安全?
方法一:使用安全类,比如 Java. util. concurrent 下的类。
方法二:使用自动锁 synchronized。
方法三:使用手动锁 Lock。
6.加锁的方式有哪些 ?
- 使用synchronized关键字
- 使用Lock锁
7.synchronized和Lock有什么区别 ?
- 首先synchronized是Java内置关键字,在JVM层面,Lock是个Java类;
- synchronized 可以给类、方法、代码块加锁;而 lock 只能给代码块加锁。
- synchronized 不需要手动获取锁和释放锁,使用简单,发生异常会自动释放锁,不会造成死锁; 而 lock
需要自己加锁和释放锁,如果使用不当没有 unLock()去释放锁就会造成死锁。 - 通过 Lock 可以知道有没有成功获取锁,而 synchronized 却无法办到。
8. 什么是死锁
当两个或两个以上的线程因竞争相同资源而处于无限期的等待,这样就导致了多个线程的阻塞,出现程序无法正常运行和终止的情况。
9. 怎么防止死锁?
尽量使用 tryLock的方法,设置超时时间,超时可以退出防止死锁。
尽量使用 Java. util. concurrent 并发类代替自己手写锁。
尽量降低锁的使用粒度,尽量不要几个功能用同一把锁。
尽量减少同步的代码块。
10. 什么是 Java 序列化?什么情况下需要序列化?
Java 序列化是为了保存各种对象在内存中的状态,并且可以把保存的对象状态再读出来。
以下情况需要使用 Java 序列化:
想把的内存中的对象状态保存到一个文件中或者数据库中时候;
11. JSP 和 servlet 有什么区别?
JSP 是 servlet 技术的扩展,本质上就是 servlet 的简易方式。
servlet 和 JSP 最主要的不同点在于:
servlet 的应用逻辑是在 Java 文件中,并且完全从表示层中的 html 里分离开来,而 JSP 的情况是 Java 和 html 可以组合成一个扩展名为 JSP 的文件。JSP 侧重于视图,servlet 主要用于控制逻辑。
12. JSP 有哪些内置对象?作用分别是什么?
JSP 有 9 大内置对象:
request:封装客户端的请求,其中包含来自 get 或 post 请求的参数;
response:封装服务器对客户端的响应;
pageContext:通过该对象可以获取其他对象;
session:封装用户会话的对象;
application:封装服务器运行环境的对象;
out:输出服务器响应的输出流对象;
config:Web 应用的配置对象;
page:JSP 页面本身(相当于 Java 程序中的 this);
exception:封装页面抛出异常的对象。
13. 说一下 JSP 的 4 种作用域?
page:代表与一个页面相关的对象和属性。
request:代表与客户端发出的一个请求相关的对象和属性。一个请求可能跨越多个页面,涉及多个 Web 组件;需要在页面显示的临时数据可以置于此作用域。
session:代表与某个用户与服务器建立的一次会话相关的对象和属性。跟某个用户相关的数据应该放在用户自己的 session 中。
application:代表与整个 Web 应用程序相关的对象和属性,它实质上是跨越整个 Web 应用程序,包括多个页面、请求和会话的一个全局作用域。
14. session 和 cookie 有什么区别?
存储位置不同:session 存储在服务器端;cookie 存储在浏览器端。
安全性不同:cookie 安全性一般,在浏览器存储,可以被伪造和修改。
容量和个数限制:cookie 有容量限制,每个站点下的 cookie 也有个数限制。
存储的多样性:session 可以存储在 Redis 中、数据库中、应用程序中;而 cookie 只能存储在浏览器中。
15. 说一下 session 的工作原理?
session 的工作原理是客户端登录完成之后,服务器会创建对应的session,session 创建完之后,会把 session 的 id 发送给客户端,客户端再存储到浏览器中。这样客户端每次访问服务器时,都会带着 sessionid,服务器拿到 sessionid 之后,在内存找到与之对应的 session 这样就可以正常工作了。