前端开发的核心技术是什么(web前端核心技术)
527
2022-05-28
Hello,你好呀,我是灰小猿!一个超会写bug的程序猿!
用坚持缔造技术、用指尖敲动未来!
和很多小伙伴们一样,我也是一名奔波在Java道路上的“创造者”。也想靠技术来改未来,改变世界!因为我们坚信每一次敲动键盘都能让生活变得更智能、世界变得更有趣!
在此专栏《Java核心面试宝典》记录我们备战梦想的【day 13】!
前几天和大家一起总结了一些关于Java基础的相关面试题,但是这也只是其中的一部分,还有很多之后慢慢总结慢慢学习,今天呢,就来盘点一下在Java进程和线程控制上的一些面试题。
1、进程和线程有哪些联系?
进程是程序依次执行的过程,线程是比进程小的执行单位,一个进程在其执行过程中可以创建多个线程,多个线程共享进程的堆和方法区内存资源。
2、进程和线程的区别是什么?
进程和线程最大的区别是,进程是独立的,而各个线程不一定独立,因为同一个进程中的多个线程很有可能相互影响,线程执行开销小,但不利于资源的管理和维护,进程开销较大,但是有利于资源的统一管理和维护。
3、线程的状态有几种,分别是什么状态?
线程的状态有6种,分别是初始状态、运行状态、阻塞状态、等待状态、超时等待状态和终止状态。
4、简述一下线程的6种状态?
初始状态(NEW): 线程已经构建,但是尚未启动。
运行状态(RUNNABLE): 包括就绪(READY)和运行中(RUNNING)两种状态,统称为运行状态。
阻塞状态(BLOCKED): 线程被锁阻塞。
等待状态(WAITING): 线程需要其他线程做出特定动作(通知或者中断)
超时等待状态(TIME_WAITING): 不等同于等待状态,超时等待状态可以在指定的时间内自行返回。
终止状态(TERMINATED): 当前线程已经执行完毕。
5、详细说一下等待状态和超时状态的区别?
和等待状态相比,超时等待状态增加了超时限制,当达到执行的超时时间后,线程将会自动返回到运行状态。
6、为什么需要使用多线程?
线程是程序执行的最小单位,多个线程同时运行可以减少线程上下文切换的开销,多线程是开发高并发系统的基础(即允许同一时间段执行多个任务),利用好多线程机制可以很好的提升系统的并发能力和性能。
7、多线程可能存在哪些问题?
多线程可能存在的问题包括内存泄漏、上下文切换、死锁以及受限于硬件和软件的资源限制问题等。
8、那么多线程中关键字synchronized解决的是什么问题呢?
关键字synchronized解决的是多个线程之间访问资源的同步性的问题。
9、关键字synchronized修饰实例方法、静态方法和代码块时,分别是什么含义?
修饰实例方法时,会给当前对象实例加锁;
修饰静态方法时,会给当前类加锁;
修饰代码块时,会给指定对象加锁,进入同步代码/代码块之前需要获得当前对象/当前类/指定对象的锁。
10、关键字volatile有哪两个作用?
关键字volatile的作用是保证变量的可见性,以及防止指令进行重排序优化。
11、关键字volatile的使用需要满足什么条件?
使用关键字volatile的变量必须满足两个条件。
一是对变量的写入操作不依赖于变量的的当前值。能够确保只有单个线程更新变量的值。
二是该变量没有包含在具有其他变量的不变式中。
12、说一说关键字synchronized和volatile的区别?
关键字 volatile 是线程同步的轻量级实现,不需要加锁,因此性能优于关键字 synchronized。
关键字 synchronized 可以修饰方法和代码块,关键字 volatile 只能修饰变量。
关键字 synchronized 可能发生阻塞,关键字 volatile 不会发生阻塞。
关键字 synchronized 可以保证数据的可见性和原子性,关键字 volatile 只能保证数据的可见性,不能保证数据的原子性。
关键字 synchronized 解决的是多个线程之间访问资源的同步性,关键字 volatile 解决的是变量在多个线程之间的可见性。
今日总结
多线程相关的考察可以说是面试中必问的内容,尤其是对线程原理、synchronized关键字的使用和线程常见问题的考察。
这方面的题目比较多,所以如果小伙伴们有遇到其他相关的面试题,欢迎在评论区留言提出,我会把大家提出的总结到文章内`, 欢迎小伙伴们一起评论区打卡学习!小伙伴们可也在左方加我好友一起探讨学习!
我是灰小猿,我们下期见!
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。