JAVA面试常考系列二

转载自 JAVA面试常考系列二

题目一

解释一下线程和进程

进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位

线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源如程序计数器,一组寄存器和栈但是线程可以与同一个进程种其它的线程共享进程的全部资源


题目二

进程与线程有什么区别

1、线程的划分尺度小于进程,使得多线程程序的并发性高。

2、进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。

3、每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。

4、一个进程崩溃后,在保护模式下不会对其它进程产生影响。线程只是一个进程的不同执行路径,线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉。


题目三

创建线程有几种不同的方式?

线程的创建方式有下面三种:

1、继承Thread类(真正意义上的线程类),是Runnable接口的实现。

2、实现Runnable接口,并重写里面的run方法。

3、使用Executor框架创建线程池。

其中实现Runnable接口这种方式更受欢迎,因为这不需要继承Thread类。在应用设计中已经继承了别的对象的情况下,这需要多继承(而Java不支持多继承),只能实现接口。同时,线程池也是非常高效的,很容易实现和使用。


题目四

线程的几种可用状态分别是什么?

1.新建(new)

新创建了一个线程对象。

2.可运行(runnable)

线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中获取cpu的使用权。

3.运行(running)

可运行状态(runnable)的线程获得了cpu时间片(timeslice)执行程序代码。

4.阻塞(block)

阻塞状态是指线程因为某种原因放弃了cpu使用权,也即让出了cpu timeslice,暂时停止运行。直到线程进入可运行(runnable)状态,才有 机会再次获得cpu timeslice转到运行(running)状态。阻塞的情况分三种:

a、等待阻塞:运行(running)的线程执行o.wait()方法,JVM会把该线程放入等待队列(waitting queue)中。

b、同步阻塞:运行(running)的线程在获取对象的同步锁时,若该同步锁 被别的线程占用,则JVM会把该线程放入锁池(lock pool)中。

c、其他阻塞: 运行(running)的线程执行Thread.sleep(long ms)或t.join()方法或者发出了I/O请求时JVM会把该线程置为阻塞状态。当sleep()状态超时、join()等待线程终止或者超时或者I/O处理完毕时,线程重新转入可运行(runnable)状态。

5.死亡(dead)

线程run()、main()方法执行结束,或者因异常退出了run()方法,则该线程结束生命周期。死亡的线程不可再次复生。


题目五

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

定义

同步方法是指有synchronized关键字修饰的方法。由于java的每个对象都有一个内置锁,当用此关键字修饰方法时,内置锁会保护整个方法。在调用该方法前,需要获得内置锁,否则就处于阻塞状态。

同步代码块是指synchronized关键字修饰的语句块被该关键字修饰的语句块会自动被加上内置锁,从而实现同步

区别

1、同步方法默认用this或者当前类class对象作为锁;

2、同步方法作用于整个方法,同步代码块作用范围更小,作用于整个代码块

3、同步方法使用关键字synchronized修饰方法,而同步代码块主要是修饰需要进行同步的代码,用synchronized(object){代码内容}进行修饰; 


题目六

在监视器(Monitor)内部,线程同步是如何实现的?

监视器和锁在Java虚拟机中是一块使用的。监视器监视一块同步代码块,确保一次只有一个线程执行同步代码块。每一个监视器都和一个对象引用相关联。线程在获取锁之前不允许执行同步代码。


题目七

什么是死锁(deadlock),产生的条件是什么?

死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象。

死锁的发生必须具备以下四个必要条件。

1.互斥

互斥条件是指进程对所分配到的资源进行排它性使用,即在一段时间内某资源只由一个进程占用。如果此时还有其它进程请求资源,则请求者只能等待,直至占有资源的进程用毕释放。

2.请求和保持

请求和保持条件是指进程已经保持至少一个资源,但又提出了新的资源请求,而该资源已被其它进程占有,此时请求进程阻塞,但又对自己已获得的其它资源保持不放。

3.不剥夺

不剥夺条件是指进程已获得的资源,在未使用完之前,不能被剥夺,只能在使用完时由自己释放。

4.环路

环路等待条件是指在发生死锁时,必然存在一个进程——资源的环形链,即进程集合{P0,P1,P2,···,Pn}中的P0正在等待一个P1占用的资源;P1正在等待P2占用的资源,……,Pn正在等待已被P0占用的资源。


题目八

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

如果所有的线程都是以同样的顺序加锁和释放锁,就不会出现死锁了。所以为了确保多个线程访问多个资源同时又不导致死锁,我们可以指定获取锁的顺序,并强制线程按照指定的顺序获取锁。 


题目九

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

Java集合类提供了一套设计良好的支持对一组对象进行操作的接口和类。Java集合类里面最基本的接口有:

Collection:代表一组对象,每一个对象都是它的子元素。

Set:不包含重复元素的Collection。

List:有顺序的collection,并且可以包含重复元素。

Map:可以把键(key)映射到值(value)的对象,键不能重复。

集合类接口指定了一组叫做元素的对象。集合类接口的每一种具体的实现类都可以选择以它自己的方式对元素进行保存和排序。有的集合类允许重复的键,有些不允许。


题目十

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

集合类接口指定了一组叫做元素的对象。集合类接口的每一种具体的实现类都可以选择以它自己的方式对元素进行保存和排序。有的集合类允许重复的键,有些不允许。



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/329756.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

雨滴桌面时间插件_Win10美化向——如何搭配你的桌面

// 2020-02-11 //桌面这个东西大家肯定不陌生了,很多人的桌面都如下。_______滑动查看更多图片这多重水印是什么鬼?????还有很多网友呢,也美化了一下自己的桌面。不过呢严格来说,这应…

python画建筑_专题 | Python 绘图入门

我的施工之路Python 绘图入门这是施工系列第18篇,同时也进入到一个新的阶段:Python绘图篇。作为绘图模块的第一篇,与大家一起过过最基本的Python绘图原理。掌握基本的绘图原理很有必要,各个常用绘图库的原理基本都是相通的。所以了…

最新版dotnet-cli下的ASP.NET Core和asp.net mvc【RC2尝鲜】

RC1是http://get.asp.net里面提供的https://docs.asp.net/en/latest/getting-started/index.html,使用旧的ASP.NET Core 1.0。这个版本会使用dnvm,dnu restore和dnx web等,而RC2则不需要,RC2只需要dotnet restore和dotnet run&…

kafka生产者开发方式

【README】 本文记录了 kafka生产者开发方式; 【1】生产者概览 【1.1】kafka发送消息过程 【1.2】创建kafka生产者 1)创建kafka生产者, 有3个必选属性: bootstrap.servers: kakfa集群节点地址;key.seri…

JAVA面试常考系列三

转载自 JAVA面试常考系列三 题目一 什么是迭代器(Iterator)? 迭代器(iterator)是一种对象,它能够用来遍历标准模板库容器中的部分或全部元素,每个迭代器对象代表容器中确定的地址。迭代器提供了一种方法,可…

linux wait函数头文件_手把手教Linux驱动9-等待队列waitq

在上一篇《手把手教Linux驱动8-Linux IO模型》我们已经了解了阻塞、非阻塞、同步和异步等相关概念,本文主要讲解如何通过等待队列实现对进程的阻塞。应用场景:当进程要获取某些资源(例如从网卡读取数据)的时候,但资源并没有准备好(例如网卡还…

HoloLens开发手记-配置开发环境 Install the tools

随着Build 2016开发者大会的结束,HoloLens开发包也正式开放下载。Hololens没有独立的SDK,开发特性被集成到最新的Visual Studio Update 2中。如果你没有HoloLens真机,那么可以安装HoloLens模拟器。 安装清单 注意: 这里为了方便大家顺利下载安…

kafka再均衡监听器测试

【README】 本文使用的kafka是最新的 kafka3.0.0;本文kafka集群有3个节点分别是 centos201, centos202, centos203 ; brokerid 分别为 1,2,3;本文主要用于测试 再均衡监听器;当有新消费者加入时,会发生分区…

java面试常考系列四

转载自 java面试常考系列四 题目一 大O符号(big-O notation)的作用是什么?有哪些使用方法? 大O符号描述了当数据结构里面的元素增加的时候,算法的规模或者是性能在最坏的场景下有多么好。大O符号也可用来描述其他的行为,比如&…

用python进行自然语言处理_Python自然语言处理示例:SVM和贝叶斯分类

❝关于自然语言处理(NLP)方面的文章、书籍非常之多,对于自然语言处理的上手,很多人是不知所措的。通过对本文的浏览,您应该能够对自然语言处理会有一个能够完整的有趣的基于Python的对自然语言处理的了解。❞什么是文本分类文本分类是将文本按…

Build 2016,你可能忽视的几个细节

微软公司主办的Build 2016大会尚在进程中,但是两场重量级的主题演讲已经结束。下面列举了我个人非常关注的几个细节,介绍一些背景知识以饲读者。 Bash on Windows背后的历史和未来 微软和IBM二十多年前联合开发NT内核的时候就已经为接驳多种操作系统留下…

JAVA面试常考系列五

转载自 JAVA面试常考系列五 题目一 串行(serial)收集器和吞吐量(throughput)收集器的区别是什么?吞吐量收集器使用并行版本的新生代垃圾收集器,它用于中等规模和大规模数据的应用程序。串行收集器对大多数的小应用(在现代处理器上需要大概100M左右的内存…

kafka消费者开发方式小结

【README】 1, 本文总结了 kafka消费者开发方式;2, 本文使用的是最新的kafka版本 3.0.0;【1】 kafka消费则 【1.1】消费者与消费者组 1)消费者: 应用程序需要创建消费者对象,订阅主题并开始接…

微软发布Azure Functions、Service Fabric和IoT Starter Kits新服务

微软此次 Build 2016 大会的重点主题一直都围绕开发和 Microsoft Azure 云服务,今天更是对外发布了 Azure Functions、Service Fabric 和 IoT Starter Kit 等一系列新服务。就目前与其它友商的竞争而言,微软近期不断的修炼内功,使 Microsoft …

python发送邮件 退回_python 发送邮件(收到的邮件要有发送方才能回复)

Python使用SMTP(简单邮件传输协议)发送邮件普通文本邮件普通文本邮件发送的实现,关键是要将MIMEText中_subtype设置为plain## -*- coding: UTF-8 -*-import smtplibfrom email.mime.text import MIMEText#导入MIMEText类from email import encodersfrom email.heade…

JAVA面试常考系列六

转载自 JAVA面试常考系列六 题目一一个Applet有哪些生命周期? 一个Applet的生命周期分为以下四个阶段: Init 每次加载时都会初始化一个小程序。此方法通知Applet,方法已经被装入系统,在第一次调用start方法之前总是先调用它。Init…

.NET的未来包含一个开源的Mono

在微软Build 2016大会的第二天,微软项目经理Scott Hunter和Scott Hanselman就.NET平台的现状和未来计划做了一场演讲。演讲的题目是“.NET概述”,他们的精彩演讲耗时一个小时,描绘了公司对于.NET的目标以及开发人员可以期待什么。就像开幕式主…

kafka消费者接收分区测试

【README】 本文演示了当有新消费者加入组后,其他消费者接收分区情况;本文还模拟了 broker 宕机的情况;本文使用的是最新的 kafka3.0.0 ;本文测试案例,来源于 消费者接收分区的5种模型,建议先看模型&#…

python数据分析架构_Python数据分析

引言:本文重点是用十分钟的时间帮读者建立Python数据分析的逻辑框架。其次,讲解“如何通过Python 函数或代码和统计学知识来实现数据分析”。本次介绍的建模框架图分为六大版块,依次为导入数据,数据探索,数据处理&…

JAVA面试常考系列七

转载自 JAVA面试常考系列七 题目一 Swing的方法中,有哪些是线程安全的? Swing的规则是:当Swing组件被具现化时,所有可能影响或依赖于组件状态的代码都应该在事件派发线程中执行。 因此有3个线程安全的方法: repaint()…