欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    2021Java面试题汇编参考.pdf

    • 资源ID:93896970       资源大小:14.07MB        全文页数:54页
    • 资源格式: PDF        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    2021Java面试题汇编参考.pdf

    一、Java基础 111.JDK和 JRE有什么区别?.112.=和 equals的区别是什么?.113.两个对象的hashCode。相同,则 equals。也一定为tru e,对吗?114.final在 java中有什么作用?.115.java 中的 Math.round(-1.5)等于多少?.116.String属于基础的数据类型吗?.117.java中操作字符串都有哪些类?它们之间有什么区别?.118.String str=i与 String str=new String*)一样吗?.129.如何将字符串反转?.1210.String类的常用方法都有那些?.1211.抽象类必须要有抽象方法吗?.1212.普通类和抽象类有哪些区别?.1213.抽象类能使用final修饰吗?.1214.接口和抽象类有什么区别?.1215.java中 IO流分为几种?.1216.BIO.NIO、AIO 有什么区别?.1317.Files的常用方法都有哪些?.13二、容器1418.java容器都有哪些?.1419.Collection 和 Collections 有什么区别?.1420.List、Set、Map之间的区别是什么?.1421.HashMap 和 HashTable 有什么区别?.1422.如何决定使用HashMap还是TreeMap?.1423.说一下HashMap的实现原理?.14第1页yasin24.说一下HashSet的实现原理?.1525.Array Li st 和 Linked List 的区别是什么?.1526.如何实现数组和List之间的转换?.1527.Array List 和 Vector 的区别是什么?.1528.Array 和 Array List 有何区另 IJ?.1529.在 Queue中 poll。和 remove。有什么区别?.1530.哪些集合类是线程安全的?.1531.迭代器Iterator是什么?.1532.Iterator怎么使用?有什么特点?.1533.Iterator 和 Listiterator 有什么区别?.16三、多线程 1634.什么是线程?.1635.并行和并发有什么区别?.1636.线程和进程的区别?.1637.守护线程是什么?.1638.创建线程有哪几种方式?.1639.说一下runnable和 callable有什么区别?.1740.线程有哪些状态?.1741.sleep。和 wait。有什么区别?.1742.notify。和 notify All。有什么区别?.1743.线程的run。和 start。有什么区别?.1844.创建线程池有哪几种方式?.1845.线程池都有哪些状态?.1846.线程池中submit。和 execute。方法有什么区别?.1947.在 java程序中怎么保证多线程的运行安全?.19第2页yasin48.多线程锁的升级原理是什么?.1949.什么是死锁?.1950.怎么防止死锁?.1951.ThreadLocal是什么?有哪些使用场景?.2052.说一下synchronized底层实现原理?.2053.synchronized 和 volatile 的区别是什么?.2054.synchronized 和 Lock 有 彳 十 么 区 另IJ?.2055.synchronized 和 ReentrantLock 区别是什么?.2156.说下 atomic的原理?.21四、反射2157.什么是反射?.2158.什么是java序列化?什么情况下需要序列化?.2159.动态代理是什么?有哪些应用?.2160.怎么实现动态代理?.22五、对象拷贝 2261.为什么要使用克隆?.2262.如何实现对象克隆?.2263.深拷贝和浅拷贝区别是什么?.22六、Java Web 2264.jsp 和 servlet 有什么区另!J?.2265.jsp有哪些内置对象?作用分别是什么?.2366.说一下js p的4种作用域?.2367.session 和 cookie 有什么区另I?.2368.说一下session的工作原理?.2469.如果客户端禁止cookie能实现session还能用吗?.24第3页yasin70.spring mvc 和 struts 的区别是什么?.2471.如何避免sql注入?.2572.什么是XSS攻击,如何避免?.2573.什么是CSRF攻击,如何避免?.25七、异常2674.throw 和 throws 的区另IJ?.2675.finaL finally、finalize 有什么区另lj?.2676.try-catch-finally中哪个部分可以省略?.2677.try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗?2678.常见的异常类有哪些?.26八、网络2779.http响应码301和 302代表的是什么?有什么区别?.2780.forward 和 redirect 的区另lj?.2781.简述tcp和 udp的区另!?.2782.tcp为什么要三次握手,两次不行吗?为什么?.2883.说一下tcp粘包是怎么产生的?.2884.OSI的七层模型都有哪些?.2885.get和 post请求有哪些区别?.2886.如何实现跨域?.2887.说一下JSONP实现原理?.30九、设计模式 3088.说一下你熟悉的设计模式?.3089.简单工厂和抽象工厂有什么区别?.30十、Spring/Spring MVC 3190.为什么要使用spring?.31第4页yasin91.解释一下什么是aop?.3192.解释一下什么是ioc?.3293.spring有哪些主要模块?.3294.spring常用的注入方式有哪些?.3295.spring中的bean是线程安全的吗?.3296.spring支持几种bean的作用域?.3297.spring自动装配bean有哪些方式?.3398.spring事务实现方式有哪些?.3399.说下 spring的事务隔离?.33100.说一下spring mvc运 彳 亍;充 程?.34101.spring mvc 有哪些组件?.34102.RequestMapping 的作用是什么?.34103.Autowired的作用是什么?.35十一、Spring Boot/Spring Cloud 35104.什么是 spring boot?.35105.为什么要用 spring boot?.35106.spring boot核心配置文件是什么?.35107.spring boot配置文件有哪几种类型?它们有什么区别?.35108.spring boot有哪些方式可以实现热部署?.35109.jpa 和 hibernate 有什么区另IJ?.36110.什么是 spring cloud?.36111.spring cloud断路器的作用是什么?.37112.spring cloud的核心组件有哪些?.37十二、Hibernate 37113.为什么要使用hibernate?.37第5页yasin114.什么是ORM框架?.38115.hibernate中如何在控制台查看打印的sql语句?.38116.hibernate有几种查询方式?.38117.hibernate实体类可以被定义为final吗?.38118.在 hibernate中使用Integer和 int做映射有什么区别?.38119.hibernate是如何工作的?.38120.get。和 load。的区别?.39121.说一下hibernate的缓存机制?.39122.hibernate对象有哪些状态?.39123.在 hibernate 中 getCurrentSession 和 openSession 的区别是什么?39124.hibernate实体类必须要有无参构造函数吗?为什么?.40十三、Mybatis 40125.mybatis中#和$的区别是什么?.40126.mybatis有几种分页方式?.40127.什么是mybatis?.40128.mybatis逻辑分页和物理分页的区别是什么?.40129.mybatis是否支持延迟加载?延迟加载的原理是什么?.40130.说一下mybatis的一级缓存和二级缓存?.41131.mybatis 和 hibernate 的区别有哪些?.41132.mybatis 有哪些执行器(Executor)?.41133.mybatis分页插件的实现原理是什么?.41134.mybatis如何编写一个自定义插件?.41十四、RabbitMQ 42135.rabbitmq的使用场景有哪些?.42136.rabbitmq有哪些重要的角色?.42第6页yasin137.rabbitmq有哪些重要的组件?.42138.rabbitmq中 vhost的作用是什么?.42139.rabbitmq的消息是怎么发送的?.43140.rabbitmq怎么保证消息的稳定性?.43141.rabbitmq怎么避免消息丢失?.43142.要保证消息持久化成功的条件有哪些?.43143.rabbitmq持久化有什么缺点?.43144.rabbitmq有几种广播类型?.43145.rabbitmq怎么实现延迟消息队列?.43146.rabbitmq集群有什么用?.43147.rabbitmq节点的类型有哪些?.43148.rabbitmq集群搭建需要注意哪些问题?.44149.rabbitmq每个节点是其他节点的完整拷贝吗?为什么?.44150.rabbitmq集群中唯一一个磁盘节点崩溃了会发生什么情况?.44151.rabbitmq对集群节点停止顺序有要求吗?.44十五、Kafka 44152.kafka可以脱离zookeeper单独使用吗?为什么?.44153.kafka有几种数据保留的策略?.44154.kafka同时设置了 7 天和10G清除数据,到第五天的时候消息达到了10G,这个时候kafka将如何处理?.44155.什么情况会导致kafka运行变慢?.44156.使用kafka集群需要注意什么?.45十六、Zookeeper 45157.zookeeper 是什么?.45158.zookeeper都有哪些功能?.45159.zookeeper有几种部署模式?.45第7页yasin160.zookeeper怎么保证主从节点的状态同步?.45161.集群中为什么要有主节点?.45162.集群中有3台服务器,其中一个节点宕机,这个时候zookeeper还可以使用吗?.45163.说一下zookeeper的通知机制?.45十七、MySql 46164.数据库的三范式是什么?.46165.一张自增表里面总共有7条数据,删除了最后2条数据,重启mysql数据库,又插入了一条数据,此时id是几?.46166.如何获取当前数据库版本?.46167.说一下ACID是什么?.46168.char和varchar的区别是什么?.46169.float和double的区别是什么?.46170.mysql的内连接、左连接、右连接有什么区别?.46171.mysql索引是怎么实现的?.47172.怎么验证mysql的索引是否满足需求?.47173.说一下数据库的事务隔离?.47174.说一下mysql常用的引擎?.47175.说一下mysql的行锁和表锁?.48176.说一下乐观锁和悲观锁?.48177.mysql问题排查都有哪些手段?.48178.如何做mysql的性能优化?.48十八、Redis 48179.redis是什么?都有哪些使用场景?.48180.redis有哪些功能?.48181.redis 和 memecache 有什么区另IJ?.48第8页yasin182.redis为什么是单线程的?.49183.什么是缓存穿透?怎么解决?.49184.redis支持的数据类型有哪些?.49185.redis支持的java客户端都有哪些?.49186.jedis 和 redisson 有哪些区别?.49187.怎么保证缓存和数据库数据的一致性?.49188.redis持久化有几种方式?.49189.redis怎么实现分布式锁?.49190.redis分布式锁有什么缺陷?.49191.redis如何做内存优化?.49192.redis淘汰策略有哪些?.50193.redis常见的性能问题有哪些?该如何解决?.50十九、JVM 50194.说一下jvm的主要组成部分?及其作用?.50195.说一下jvm运行时数据区?.50196.说一下堆栈的区别?.51197.队列和栈是什么?有什么区别?.51198.什么是双亲委派模型?.51199.说一下类加载的执行过程?.52200.怎么判断对象是否可以被回收?.52201.java中都有哪些引用类型?.52202.说一下jvm有哪些垃圾回收算法?.52203.说一下jvm有哪些垃圾回收器?.52204.详细介绍一下CMS垃圾回收器?.53205.新生代垃圾回收器和老生代垃圾回收器都有哪些?有什么区别?.53第9页yasin206.简述分代垃圾回收器是怎么工作的?.53207.说一下jvm调优的工具?.53208.常用的jvm调优的参数都有哪些?.53第10页yasin一、Java基础1.JDK和 JRE有什么区别?JDK:Java Development Kit的简称,java开发工具包,提供了 java的开发环境和运行环境。JRE:Java Runtime Environment的简称,java运行环境,为 java的运行提供了所需环境。具体来说JDK其实包含了 JR E,同时还包含了编译java源码的编译器javac,还包含了很多java程序调试和分析的工具。简单来说:如果你需要运行java程序,只需安装JRE就可以了,如果你需要编写java程序,需要安装JDK。2.=和 equals的区别是什么?=解读:对于基本类型和引用类型=的作用效果是不同的,如下所示:基本类型:比较的是值是否相同;引用类型:比较的是引用是否相同;equals解读:equals本质上就是=,只不过String和 Integer等重写了 equals方法,把它变成了值比较。总 结:=对于基本类型来说是值比较,对于引用类型来说是比较的是引用;而 equals默认情况下是引用比较,只是很多类重新了 equals方法,比如String、Integer等把它变成了值比较,所以一般情况下equals比较的是值是否相等。3.两个对象的hashCode。相同,贝 equals。也一定为tru e,对吗?不对,两个对象的hashCode。相同,equals。不一定true。因为在散列表中,hashCode。相等即两个键值对的哈希值相等,然而哈希值相等,并不一定能得出键值对相等。4.final在 java中有什么作用?final修饰的类叫最终类,该类不能被继承。final修饰的方法不能被重写。final修饰的变量叫常量,常量必须初始化,初始化之后值就不能被修改。5.java 中的 Math.round(-1.5)等于多少?等于-1,因为在数轴上取值时,中间值(0.5)向右取整,所以正0.5是往上取整,负 0.5是直接舍弃。6.String属于基础的数据类型吗?String 不属于基础类型,基础类型有 8 种:byte、booleans char、short、in float、long、double,而 String属于对象。7.java中操作字符串都有哪些类?它们之间有什么区别?操作字符串的类有:String,StringBuffer、StringBuilder0String和 StringBuffer.StringBuilder的区别在于String声明的是不可变的对象,每次操作都会生成新的String对象,然后将指针指向新的String对象,而 StringBuffer,StringBuilder可以在原有对象的基础上进行操作,所以在经常改变字符串内容的情况下最好不要使用String。第11页yasinStringBuffer 和 StringBuilder 最大的区别在于,StringBuffer 是线程安全的,而 StringBuilder 是非线程安全的,但 StringBuilder的性能却高于StringBuffer,所以在单线程环境下推荐使用StringBuilder,多线程环境下推荐使用StringBuffer。8.String str=i与 String str=new String(”i”)一样吗?不一样,因为内存的分配方式不一样。String str=i”的方式,java虚拟机会将其分配到常量池中;而 String str=new String(i)则会被分到堆内存中。9.如何将字符串反转?使用 StringBuilder 或者 StringBuffer 的 reverseQ 方法。10.String类的常用方法都有那些?indexOfQ:返回指定字符的索引。charAtO:返回指定索引处的字符。,replaceO:字符串替换。trimO:去除字符串两端空白。splitO:分割字符串,返回一个分割后的字符串数组。,getBytes。:返回字符串的byte类型数组。lengthO:返回字符串长度。toLowerCase。:将字符串转成小写字母。toUpperCase。:将字符串转成大写字符。,substringO:截取字符串。,equalsO:字符串比较。11.抽象类必须要有抽象方法吗?不需要,抽象类不一定非要有抽象方法。12.普通类和抽象类有哪些区别?普通类不能包含抽象方法,抽象类可以包含抽象方法。抽象类不能直接实例化,普通类可以直接实例化。13.抽象类能使用final修饰吗?不能,定义抽象类就是让其他类继承的,如果定义为final该类就不能被继承,这样彼此就会产生矛盾,所以final不能修饰抽象类,编辑器也会提示错误信息。14.接口和抽象类有什么区别?,实现:抽象类的子类使用extends来继承;接口必须使用implements来实现接口。构造函数:抽象类可以有构造函数;接口不能有。main方法:抽象类可以有main方法,并且我们能运行它;接口不能有main方法。实现数量:类可以实现很多个接口;但是只能继承一个抽象类。访问修饰符:接口中的方法默认使用public修饰;抽象类中的方法可以是任意访问修饰符。15.java中 IO 流分为几种?按功能来分:输 入 流(input),输 出 流(output)o按类型来分:字节流和字符流。字节流和字符流的区别是:字节流按8 位传输以字节为单位输入输出数据,字符流按16位传输以字符为单位输入输出数据。第12页yasin16.BIO.NIO、AIO有什么区别?BIO:Block IO同步阻塞式IO,就是我们平常使用的传统IO,它的特点是模式简单使用方便,并发处理能力低。NIO:New IO同步非阻塞IO,是传统IO的升级,客户端和服务器端通过Channel(通道)通讯,实现了多路复用。AIO:Asynchronous IO是NIO的升级,也叫N I0 2,实现了异步非堵塞IO,异步IO的操作基于事件和回调机制。17.Files的常用方法都有哪些?,Files.exists。:检测文件路径是否存在。Files.createFileO:创建文件。,Files.createDirectoryO:创建文件夹。,Files.deleteQ:删除一个文件或目录。,Files.copyO:复制文件。Files.move。:移动文件。,Files.sizeQ:查看文件个数。,Files.readQ:读取文件。Files.writeO:写入文件。第 13页yasin二、容器18.java容器都有哪些?19.Collection 和 Collections 有什么区别?java.util.Collection是一个集合接口(集合类的一个顶级接口)。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java类库中有很多具体的实现。Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式,其直接继承接口有List与Set。Collections则是集合类的一个工具类/帮助类,其中提供了一系列静态方法,用于对集合中元素进行排序、搜索以及线程安全等各种操作。20.List.Set、M ap之间的区别是什么?ListSetMap继承接口CollectionCollection常见实现类AbstractList(其常用子类有Array List.LinkedList,Vector)AbstractSet(其常用子类有HashSet,LinkedHashSet.TreeSet)HashMap,HashTable常见方法add(X remove()、clear()%get()、contains。、size()add()、remove。、clear()、contains。、size()put()、get()、remove。、clear()、containsKey。、containsValue()s keySet()s values。size()元素可重复不可重复(用 equals。判断)不可重复蜩有序无序(实际上由HashCode决定)线程安全Vecto 全H ashtaD le全21.HashMap 和 HashTable 有什么区别?,hashMap去掉了HashTable 的contains方法,但是力口上了containsValue()和containsKey()方法。,hashhble同步的,而HashMap是非同步的,效率上逼hashTable要高。,hashMap允许空键值,而hashable不允许。22.如何决定使用HashMap还是TreeM叩?对于在Map中插入、删除和定位元素这类操作,HashMap是最好的选择。然而,假如你需要对一个有序的key集合进行遍历,TreeMap是更好的选择。基于你的collection的大小,也许向HashMap中添加元素会更快,将map换为TreeMap进行有序key的遍历。23.说一下HashMap的实现原理?HashMap概述:HashMap是基于哈希表的Map接口的非同步实现。此实现提供所有可选的映射操作,并允许使用null值和null键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。HashMap的数据结构:在java编程语言中,最基本的结构就是两种,一个是数组,另外一个是模拟指 针(引用),所有的数据结构都可以用这两个基本结构来构造的,HashMap也不例外。HashMap实际上是一个“链表散列”的数据结构,即数组和链表的结合体。当我们往Hashmap中pu阮素时,首先根据key的hashcode重新计算hash值,根绝hash值得到这个元素在数组中的位置(下标),如果该数组在该位置上已经存放了其他元素,那么在这个位置上的元素将以链第 14 页 yasin表的形式存放,新加入的放在链头,最先加入的放入链尾.如果数组中该位置没有元素,就直接将该元素放到数组的该位置上。需要注意Jdk 1.8中对HashMap的实现做了优化,当链表中的节点数据超过八个之后,该链表会转为红黑树来提高查询效率,从原来的0(n)到O(logn)24.说一下HashSet的实现原理?HashSet底层由HashMap实现,HashSet的值存放于HashMap的key上 HashMap 的 value 统一为 PRESENT25.ArrayList 和 LinkedList 的区别是什么?最明显的区别是ArrrayList底层的数据结构是数组,支持随机访问,而 LinkedList的底层数据结构是双向循环链表,不支持随机访问。使用下标访问一个元素,ArrayList的时间复杂度是。,而LinkedList 是 0(n)。26.如何实现数组和List之间的转换?,List转换成为数组:调用ArrayList的toArray方法。,数组转换成为List:调用Arrays的asList方法。27.ArrayList和Vector的区别是什么?Vector是同步的,而ArrayList不是。然而,如果你寻求在迭代的时候对列表进行改变,你应该使用 CopyOnWriteArrayList。,Array List比Vector快,它因为有同步,不会过载。ArrayList更加通用,因为我们可以使用Collections工具类轻易地获取同步列表和只读列表。28.Array 和 ArrayList 有何区别?Array可以容纳基本类型和对象,而ArrayList只能容纳对象。,Array是指定大小的,而ArrayList大小是固定的。Array没有提供ArrayList那么多功能,比如addAII、removeAII和iterator等。29.在Queue中poll。和remove。有什么区另(J?pollO和 removeQ都是从队列中取出一个元素,但是pollQ在获取元素失败的时候会返回空,但是removeQ失败的时候会抛出异常。30.哪些集合类是线程安全的?vector:就比arraylist多了个同步化机制(线程安全),因为效率较低,现在已经不太建议使用。在web应用中,特别是前台页面,往往效率(页面响应速度)是优先考虑的。statck:堆栈类,先进后出。HashTable:就比HashMap多了个线程安全。enumeration:枚举,相当于迭代器。31.迭代器Iterator是什么?迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构。迭代器通常被称为“轻量级”对象,因为创建它的代价小。32.Iterator怎么使用?有什么特点?Java中的Iterator功能比较简单,并且只能单向移动:第15页yasin使用方法iterator。要求容器返回一个Iterator。第一次调用Iterator的next。方法时,它返回序列的第一个元素。注意:iterator。方法是java.lang.lterable接口,被Collection继承。使用next。获得序列中的下一个元素。(3)使用hasNext。检查序列中是否还有元素。使用remove。将迭代器新返回的元素删除。Iterator是Java迭代器最简单的实现,为List设计的Listiterator具有更多的功能,它可以从两个方向遍历L is t,也可以从List中插入和删除元素。33.Iterator 和 Listiterator 有什么区别?Iterator可用来遍历Set和List集合,但是Listiterator只能用来遍历List。,Iterator对集合只能是前向遍历,Listiterator既可以前向也可以后向。Listiterator实现了 Iterator接口,并包含其他的功能,比如:增加元素,替换元素,获取前一个和后一个元素的索引,等等。三、多线程34.什么是线程?线 程(thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。35.并行和并发有什么区别?并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔发生。并行是在不同实体上的多个事件,并发是在同一实体上的多个事件。在一台处理器上“同时”处理多个任务,在多台处理器上同时处理多个任务。如hadoop分布式集群。所以并发编程的目标是充分的利用处理器的每一个核,以达到最高的处理性能。36.线程和进程的区别?简而言之,进程是程序运行和资源分配的基本单位,一个程序至少有一个进程,一个进程至少有一个线程。进程在执行过程中拥有独立的内存单元,而多个线程共享内存资源,减少切换次数,从而效率更高。线程是进程的一个实体,是cpu调度和分派的基本单位,是比程序更小的能独立运行的基本单位。同一进程中的多个线程之间可以并发执行。37.守护线程是什么?守护线程(BPdaemon th re a d),是个服务线程,准确地来说就是服务其他的线程。38.创建线程有哪几种方式?.继承Thread类创建线程类 定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务。因此把run。方法称为执行体。创建Thread子类的实例,即创建了线程对象。调用线程对象的start。方法来启动该线程。.通过Runnable接口创建线程类定义runnable接口的实现类,并重写该接口的run。方法,该run。方法的方法体同样是该线程的线程执行体。第16页yasin,仓!建Runnable实现类的实例,并依此实例作为Thread的target来创建Thread对象,该Thread对象才是真正的线程对象。调用线程对象的start。方法来启动该线程。通过Callable和Future创建线程 创建Callable接口的实现类,并实现call。方法,该call。方法将作为线程执行体,并且有返回值。创建Callable实现类的实例,使用Future归sk类来包装Callable对象,该FutureTask对象封装了该Callable对象的call。方法的返回值。,使用FutureTask对象作为Thread对象的target创建并启动新线程。调用FutureTask对象的get。方法来获得子线程执行结束后的返回值。39.说一下runnable和callable有什么区别?Runnable接口中的run。方法的返回值是v o id,它做的事情只是纯粹地去执行run。方法中的代码而已;Callable接口中的call。方法是有返回值的,是一个泛型,和Future、FutureTask配合可以用来获取异步执行的结果。40.线程有哪些状态?线程通常都有五种状态,创建、就绪、运行、阻塞和死亡。创建状态。在生成线程对象,并没有调用该对象的start方法,这是线程处于创建状态。就绪状态。当调用了线程对象的start方法之后,该线程就进入了就绪状态,但是此时线程调度程序还没有把该线程设置为当前线程,此时处于就绪状态。在线程运行之后,从等待或者睡眠中回来之后,也会处于就绪状态。运行状态。线程调度程序将处于就绪状态的线程设置为当前线程,此时线程就进入了运行状态,开始运行run函数当中的代码。阻塞状态。线程正在运行的时候,被暂停,通常是为了等待某个时间的发生(比如说某项资源就绪)之后再继续运行。sleep.suspend,wait等方法都可以导致线程阻塞。死亡状态。如果一个线程的run方法执行结束或者调用stop方法后,该线程就会死亡。对于已经死亡的线程,无法再使用start方法令其进入就绪41.sleepO和waitO有什么区别?sleepO:方法是线程类(Thread)的静态方法,让调用线程进入睡眠状态,让出执行机会给其他线程,等到休眠时间结束后,线程进入就绪状态和其他线程一起竞争cpu的执行时间。因为sleep。是static静态的方法,他不能改变对象的机锁,当一个synchronized块中调用了sleep。方法,线程虽然进入休眠,但是对象的机锁没有被释放,其他线程依然无法访问这个对象。wait。:wait。是Object类的方法,当一个线程执行到wait方法时,它就进入到一个和该对象相关的等待池,同时释放对象的机锁,使得其他线程能够访问,可以通过notify,notifyAII方法来唤醒等待的线程。42.notify。和 notifyAII。有什么区别?如果线程调用了对象的wait。方法,那么线程便会处于该对象的等待池中,等待池中的线程不会去竞争该对象的锁。当有线程调用了对象的notifyAII。方 法(唤醒所有w ait线程)或notify。方 法(只随机唤醒一个w ait线程),被唤醒的的线程便会进入该对象的锁池中,锁池中的线程会去竞争该对象锁。也就是说,调用了notify后只要一个线程会由等待池进入锁池,而notifyAII会将该对象等待池内的所有线程移动到锁池中,等待锁竞争。第17页yasin优先级高的线程竞争到对象锁的概率大,假若某线程没有竞争到该对象锁,它还会留在锁池中,唯有线程再次调用wait。方法,它才会重新回到等待池中。而竞争到对象锁的线程则继续往下执行,直到执行完了 synchronized代码块,它会释放掉该对象锁,这时锁池中的线程会继续竞争该对象锁。43.线程的run。和start。有什么区别?每个线程都是通过某个特定Thread对象所对应的方法run。来完成其操作的,方法run。称为线程体。通过调用Thread类的start。方法来启动一个线程。start。方法来启动一个线程,真正实现了多线程运行。这时无需等待run方法体代码执行完毕,可以直接继续执行下面的代码;这时此线程是处于就绪状态,并没有运行。然后通过此Thread类调用方法run。来完成其运行状态,这里方法run。称为线程体,它包含了要执行的这个线程的内容,Run方法运行结束,此线程终止。然后CPU再调度其它线程。run。方法是在本线程里的,只是线程里的一个函数,而不是多线程的。如果直接调用run。,其实就相当于是调用了一个普通函数而已,直接待用run。方法必须等待run。方法执行完毕才能执行下面的代码,所以执行路径还是只有一条,根本就没有线程的特征,所以在多线程执行时要使用start。方法而不是run。方法。44.创建线程池有哪几种方式?.newFixedThreadPool(int nThreads)创建一个固定长度的线程池,每当提交一个任务就创建一个线程,直到达到线程池的最大数量,这时线程规模将不再变化,当线程发生未预期的错误而结束时,线程池会补充一个新的线程。.newCachedThreadPoolQ创建一个可缓存的线程池,如果线程池的规模超过了处理需求,将自动回收空闲线程,而当需求增加时,则可以自动添加新线程,线程池的规模不存在任何限制。.newSingleThreadExecutorO这是一个单线程的Executor,它创建单个工作线程来执行任务,如果这个线程异常结束,会创建一个新的来替代它;它的特点是能确保依照任务在队列中的顺序来串行执行。.newScheduledThreadPool(int corePoolSize)创建了一个固定长度的线程池,而且以延迟或定时的方式来执行任务,类似于Timer。45.线程池都有哪些状态?线程池有5种状态:Runnings ShutDown、Stop、Tidyings Terminatedo线程池各个状态切换框架图:第18页yasin46.线程池中submit。和 execute。方法有什么区别?接收的参数不一样 submit有返回值,而execute没有 submit 方便 Exception 处理47.在 java程序中怎么保证多线程的运行安全?线程安全在三个方面体现:原子性:提供互斥访问,同一时刻只能有一个线程对数据进行操作,(atomic,synchronized);可见性:一个线程对主内存的修改可以及时地被其他线程看到,(synchronized,volatile);有序性:一个线程观察其他线程中的指令执行顺序,由于指令重排序,该观察结果一般杂乱无序,(happens-before原 则)。48.多线程锁的升级原理是什么?在Java中,锁共有4种状态,级别从低到高依次为:无状态锁,偏向锁,轻量级锁和重量级锁状态,这几个状态会随着竞争情况逐渐升级。锁可以升级但不能降级。锁升级的图示过程:偏向锁撤销:原持有偏向锁的线程状态是未活动状态偏向锁撤销:原持有偏向锁的线程状态是活动状态锁 膨 胀 洎旋失败49.什么是死锁?死锁是指两个或两个以上的进程在执行过程中,由于竞争资

    注意事项

    本文(2021Java面试题汇编参考.pdf)为本站会员(文***)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开