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

    2023年Java(1~5年经验)面试题.pdf

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

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

    2023年Java(1~5年经验)面试题.pdf

    2 02 3 年 J a v a (1 5 年经验)面试题(一)一、基础篇1、如何实现对象克隆?【仅供参考】实 现 C l o n e a b l e 接口并重写O b j e c t 类中的c l o n e。方法。实 现 S e r i a l i z a b l e 接口,通过对象的序列化和反序列化实现克隆,可以实现真正的深度克隆。2、重 载(O v e r l o a d)和重写(O v e r r i d e)的区别?【仅供参考】方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性。重载:一个类中有多个同名的方法,但是具有有不同的参数列表(参数类型不同、参数个数不同或者二者都不同)。重写:发生在子类与父类之间,子类对父类的方法进行重写,参数都不能改变,返回值类型可以不相同,但是必须是父类返回值的派生类。即外壳不变,核心重写!重写的好处在于子类可以根据需要,定义特定于自己的行为。3、J D KL 8 之后有哪些新特性?【仅供参考】接口默认方法:J a v a 8 允许我们给接口添加一个非抽象的方法实现,只需要使用 d e f a u l t 关键字即可L a m b d a 表达式和函数式接口:L a m b d a 表达式本质上是一段匿名内部类,也可以是一段可以传递的代码。L a m b d a 允许把函数作为一个方法的参数(函数作为参数传递到方法中),使 用 L a m b d a 表达式使代码更加简洁,但是也不要滥用,否则会有可读性等问题,E f f e c t i v e J a v a 作 者 J o s h B l o c h 建议使用L a m b d a 表达式最好不要超过3行。S t r e a m A P I:用函数式编程方式在集合类上进行复杂操作的工具,配合L a m b d a表达式可以方便的对集合进行处理。J a v a 8中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作。使用S t r e a m A P I 对集合数据进行操作,就类似于使用S Q L 执行的数据库查询。也可以使用S t r e a m A P I 来并行执行操作。简而言之,S t r e a m A P I提供了一种高效且易于使用的处理数据的方式。方法引用:方法引用提供了非常有用的语法,可以直接引用已有J a v a 类或对象(实例)的方法或构造器。与 l a m b d a 联合使用,方法引用可以使语言的构造更紧凑简洁,减少冗余代码。日期时间AP I:J a v a 8 引入了新的日期时间AP I 改进了日期时间的管理。O p t i o n a l 类:著名的N ul I P o i n t e r Ex c e p t i o n 是引起系统失败最常见的原因。很久以前G o o g l e G ua v a 项目引入了 O p t i o n a l 作为解决空指针异常的一种方式,不赞成代码被n ul l 检查的代码污染,期望程序员写整洁的代码。受G o o g l e G ua v a 的鼓励,O p t i o n a l 现在是J a v a 8 库的一部分。新工具:新的编译工具,如:N a s h o r n 引 擎 j j s、类依赖分析器j d e p s。4、两个对象的h a s h Co d e()相同,则 e q ua l s。是否也一定为t r ue?【仅供参考】e q ua l s 与 h a s h c o d e 的关系:如果两个对象调用e q ua l s 比较返回t r ue,那么它们的h a s h Co d e 值一定要相同;如果两个对象的h a s h Co d e 相同,它们并不一定相同。h a s h c o d e 方法主要是用来提升对象比较的效率,先进行h a s h c o d e ()的比较,如果不相同,那就不必在进行e q ua l s 的比较,这样就大大减少了 e q ua l s 比较的次数,当比较对象的数量很大的时候能提升效率。之所以重写e q ua l s。要重写h a s h c o d e(),是为了保证e q ua l s。方法返回t r ue的情况下h a s h c o d e 值也要一致,如果重写了 e q ua l s ()没有重写h a s h c o d e (),就会出现两个对象相等但h a s h c o d e。不相等的情况。这样,当用其中的一个对象作为键保存到h a s h M a p、h a s h T a b l e 或 h a s h S e t 中,再以另一个对象作为键值去查找他们的时候,则会查找不到。5、O b j e c t 常用方法有哪些?【仅供参考】J a v a 面试经常会出现的一道题目,O b j e c t 的常用方法。下面给大家整理一下。O b j e c t 常用方法有:t o S t r i n g O e q ua l s ()h a s h Co d e。、c l o n e。等。6、普通类和抽象类有哪些区别?【仅供参考】普通类不能包含抽象方法,抽象类可以包含抽象方法。抽象类不能直接实例化,普通类可以直接实例化。7、接口和抽象类有什么区别?【仅供参考】实现:抽象类的子类使用e x t e n d s 来继承;接口必须使用i m p l e m e n t s 来实现接口。构造函数:抽象类可以有构造函数;接口不能有。实现数量:类可以实现很多个接口;但是只能继承一个抽象类。访问修饰符:接口中的方法默认使用p u b l i c 修饰;抽象类中的方法可以是任意访问修饰符。8、用最有效率的方法计算2 乘以8?【仅供参考】2 3。进阶:通常情况下,可以认为位运算是性能最高的。但是,其实编译器现在已经“非常聪明了”,很多指令编译器都能自己做优化。所以在实际实用中,我们无需特意去追求实用位运算,这样不仅会导致代码可读性很差,而且某些自作聪明的优化反而会误导编译器,使得编译器无法进行更好的优化。9、深拷贝和浅拷贝区别是什么?【仅供参考】浅克隆:当对象被复制时只复制它本身和其中包含的值类型的成员变量,而引用类型的成员对象并没有复制。深克隆:除了对象本身被复制外,对象所包含的所有成员变量也将复制。10、J a v a 的特点?【仅供参考】J a v a 具有平台独立性和移植性。J a v a 有一句口号:W r i t e o n c e,r u n a n y w h e r e,一次编写、到处运行。这也是J a v a 的魅力所在。而实现这种特性的正是J a v a 虚拟机J V M。已编译的J a v a 程序可以在任何带有J V M 的平台上运行。你可以在w i n d o w s 平台编写代码,然后拿到l i n u x 上运行。只要你在编写完代码后,将代码编译成.c l a s s 文件,再把c l a s s 文件打成J a v a 包,这个j a r 包就可以在不同的平台上运行了。J a v a 具有稳健性。J a v a 是一个强类型语言,它允许扩展编译时检查潜在类型不匹配问题的功能。J a v a 要求显式的方法声明,它不支持C 风格的隐式声明。这些严格的要求保证编译程序能捕捉调用错误,这就导致更可靠的程序。异常处理是Java中使得程序更稳健的另一个特征。异常是某种类似于错误的异常条件出现的信号。使用t r y/c at c h/f i n al l y 语句,程序员可以找到出错的处理代码,这就简化了出错处理和恢复的任务。11、JD K/JR E/JV M三者的关系【仅供参考】JV M英文名称(Java V i r t u al Mac h i n e),就是我们耳熟能详的Java虚拟机。Java能够跨平台运行的核心在于JV M。所有的j ava程序会首先被编译为.c l as s 的类文件,这种类文件可以在虚拟机上执行。也就是说c l as s 文件并不直接与机器的操作系统交互,而是经过虚拟机间接与操作系统交互,由虚拟机将程序解释给本地系统执行。针对不同的系统有不同的j vm 实现,有 Li n u x 版本的j vm 实现,也有W i n d o w s 版本的j vm 实现,但是同一段代码在编译后的字节码是一样的。这就是 Java能够跨平台,实现一次编写,多处运行的原因所在。JR E英文名称(Java R u n t i m e E n vi r o n m e n t),就是Java运行时环境。我们编写的Java程序必须要在JR E 才能运行。它主要包含两个部分,JV M和 Java核心类库。JR E 是 Java的运行环境,并不是一个开发环境,所以没有包含任何开发工具,如编译器和调试器等。如果你只是想运行Java程序,而不是开发Java程序的话,那么你只需要安装JR E 即可。JD KJD K目录下有个JR E,也就是JD K中已经集成了 JR E,不用单独安装JR E。另外,JD K中还有一些好用的工具,如 j i n f o,j p s,j s t ac k 等。JR E =JV M+Java核心类库JD K=JR E +Java工 具+编译器+调试器12、S t r i n g 属于基础的数据类型吗?【仅供参考】S t r i n g 不属于基础类型,基础类型有8种:b y t e、b o o l e an,c h ar、s h o r t i n t、f l o at、l o n g d o u b l e,而 S t r i n g 属于对象。13、Fi l e s 的常用方法都有哪些?【仅供参考】Fi l e s,e x i s t s ():检测文件路径是否存在。F il e s.c r e a t e F il e O :创建文件。F il e s.c r e a t e D ir e c t o r y ():创建文件夹。F il e s,d e l e t e():删除一个文件或目录。F il e s,c o p y ():复制文件。F il e s.m o v e O:移动文件。F il e s.s iz e():查看文件个数。F il e s.r e a d():读取文件。F il e s,w r it e():写入文件。1 4 J a v a 中的 M a t h,r o u n d(-1.5)等于多少?【仅供参考】等 于-1,因为在数轴上取值时,中间值(0.5)向右取整,所以正0.5是往上取整,负 0.5 是直接舍弃。1 5、如何实现对象克隆?【仅供参考】实现C l o n e a b l e 接口,重 写 c l o n e()方法。这种方式是浅拷贝,即如果类中属性有自定义引用类型,只拷贝引用,不拷贝引用指向的对象。如果对象的属性的C l a s s 也实现C l o n e a b l e 接口,那么在克隆对象时也会克隆属性,即深拷贝。结合序列化,深拷贝。通过 o r g.a p a c h e,c o m m o n s 中的工具类 B e a n U t i I s 和 P r o p e r t y U t i I s 进行对象复制。1 6、J D K 和 J RE 有什么区别?【仅供参考】J D K:J a v a D e v e l o p m e n t K it 的简称,J a v a 开发工具包,提供了 J a v a 的开发环境和运行环境。J RE:J a v a Ru n t im e E n v ir o n m e n t 的简称,J a v a 运行环境,为J a v a 的运行提供了所需环境。具体来说J D K 其实包含了 J RE,同时还包含了编译J a v a 源码的编译器J a v a c,还包含了很多J a v a 程序调试和分析的工具。简单来说:如果你需要运行 J a v a 程序,只需安装J RE 就可以了,如果你需要编写J a v a 程序,需要安装 J D K 17、J V M 是如何处理异常的?【仅供参考】在一个方法中如果发生异常,这个方法会创建一个异常对象,并转交给J V M,该异常对象包含异常名称,异常描述以及异常发生时应用程序的状态。创建异常对象并转交给J V M 的过程称为抛出异常。可能有一系列的方法调用,最终才进入抛出异常的方法,这一系列方法调用的有序列表叫做调用栈。J V M 会顺着调用栈去查找看是否有可以处理异常的代码,如果有,则调用异常处理代码。当 J V M发现可以处理异常的代码时,会把发生的异常传递给它。如 果 J V M 没有找到可以处理该异常的代码块,J V M 就会将该异常转交给默认的异常处理器(默认处理器为J V M 的一部分),默认异常处理器打印出异常信息并终止应用程序。1 8、运行时异常和一般异常(受检异常)区别是什么?【仅供参考】运行时异常包括R un tim e E xc e ption 类及其子类,表 示 J V M 在运行期间可能出现的异常。J a va 编译器不会检查运行时异常。受检异常是E xc e ption 中 除 R un t im e E xc e ption 及其子类之外的异常。J a va编译器会检查受检异常。R un tim e E xc e ption 异常和受检异常之间的区别:是否强制要求调用者必须处理此异常,如果强制要求调用者必须进行处理,那么就使用受检异常,否则就选择非受检异常(R un tim e E xc e ption)0 一般来讲,如果没有特殊的要求,我们建议使用R un tim e E xc e ption 异常。1 9、常见的 R un tim e E xc e ption 有哪些?【仅供参考】C l a s s C a s tE xc e ption (类转换异常)I n d e xO ul O f B oun d s E xc e pl ion (数组越界)N ul I P oin te r E xc e ption (空指针)A r r a y S tor e E xc e ption (数据存储异常,操作数组时类型不一致)还有 1 0 操作的 B uf f e r O ve r f l owE xc e pt ion 异常2 0 tr y-c a tc h-f in a l l y 中哪个部分可以省略?【仅供参考】tr y-c a tc h-f in a l l y 其 中 c a tc h 和 f in a l l y 都可以被省略,但是不能同时省略,也就是说有tr y 的时候,必须后面跟一个c a tc h 或 者 f in a l l y。二、容器/多线程/反射/J V M/设计模式1、A r r a y L is t 和 L in k e d L is t 的区别是什么?【仅供参考】数据结构实现:A r r a y L is t是动态数组的数据结构实现,而 L in k e d L is t是双向链表的数据结构实现。随机访问效率:A r r a y L is t比 L in k e d L is t在随机访问的时候效率要高,因为L in k e d L is t是线性的数据存储方式,所以需要移动指针从前往后依次查找。增加和删除效率:在非首尾的增加和删除操作,L in k e d L is t要 比 A r r a y L is t效率要高,因 为 A r r a y L is t增删操作要影响数组内的其他数据的下标。综合来说,在需要频繁读取集合中的元素时,更推荐使用A r r a y L is t,而在插入和删除操作较多时,更推荐使用L in k e d L is t。2 s y n c h r on iz e d 和 L oc k 有什么区别?【仅供参考】s y n c h r on iz e d 可以给类、方法、代码块加锁;而 l oc k 只能给代码块加锁。s y n c h r on iz e d 不需要手动获取锁和释放锁,使用简单,发生异常会自动释放锁,不会造成死锁;而 l oc k 需要自己加锁和释放锁,如果使用不当没有u nLoc k ()去释放锁就会造成死锁。通 过 Loc k 可以知道有没有成功获取锁,而 s y nc h roni z e d 却无法办到。3、四种线程池的创建:【仅供参考】(1)ne w C a c h e d T h re a d Pool 创建一个可缓存线程池(2)ne w F i x e d T h re a d Pool 创建一个定长线程池,可控制线程最大并发数。(3)ne w S c h e d u 1 e d T h re a d Poo 1 创建一个定长线程池,支持定时及周期性任务执行。(4)ne w S i ng l e T h re a d E x e c u t or创建个单线程化的线程池,它只会用唯一的工作线程来执行任务。4、Li nu x 环境下如何查找哪个线程使用C PU 最长【仅供参考】(1)获取项目的 pi d,j ps 或者 ps -e f|g re p j a v a(2)t op-H -p pi d,顺序不能改变5、T h re a d Loc a l 是什么?有什么用?【仅供参考】T h re a d Loc a l 是一个本地线程副本变量工具类。主要用于将私有线程和该线程存放的副本对象做一个映射,各个线程之间的变量互不干扰,在高并发场景下,可以实现无状态的调用,特别适用于各个线程依赖不通的变量值完成操作的场景。简单说T h re a d Loc a l 就 是 一 种 以 空 间 换 时 间 的 做 法,在每个 T h re a d 里 面 维 护 了 一 个 以 开 地 址 法 实 现 的T h re a d Loc a l.T h re a d Loc a l Ma p,把数据进行隔离,数据不共享,自然就没有线程安全方面的问题了。6、s l e e p()和 w a i t()有什么区别?【仅供参考】类的不同:s l e e pO 来自 T h re a d,w a i t。来自 Obj e c t。释放锁:s l e e pO不释放锁;w a i t。释放锁。用法不同:s l e e p。时间到会自动恢复;w a i l()可以使用not i f y ()/not i f y A l l ()直接唤醒。7、线程池的优点?【仅供参考】(1)重用存在的线程,减少对象创建销毁的开销。(2)可有效的控制最大并发线程数,提高系统资源的使用率,同时避免过多资源竞争,避免堵塞。(3)提供定时执行、定期执行、单线程、并发数控制等功能。8、线程池的核心属性有哪些?【仅供参考】t h r ea dF a c t o r y (线程工厂):用于创建工作线程的工厂。c o r eP o o lS i z e(核心线程数):当线程池运行的线程少于c o r eP o o lS i z e时,将创建一个新线程来处理请求,即使其他工作线程处于空闲状态。w o r k Q u eu e(队列):用于保留任务并移交给工作线程的阻塞队列。m a x i m u m P o o lS i z e(最大线程数):线程池允许开启的最大线程数。h a n dler (拒绝策略):往线程池添加任务时,将在下面两种情况触发拒绝策略:1)线程池运行状态不是R U N N I N G;2)线程池已经达到最大线程数,并且阻塞队列已满时。k eep A li v eT i m e(保持存活时间):如果线程池当前线程数超过c o r eP o o lS i z e,则多余的线程空闲时间超过k eep A li v eT i m e时会被终止。9、E x ec u t o r s 类是什么?【仅供参考】E x ec u t o r s 为 E x ec u t o r,E x ec u t o r S er v i c e,S c h edu ledE x ec u t o r S er v i c e,T h r ea dF a c t o r y 和 Ca lla b le类提供了一些工具方法。E x ec u t o r s 可以用于方便的创建线程池10、T h r ea d调 用 s t a r t ()方法和调用r u n()方法的区别【仅供参考】r u n():普通的方法调用,在主线程中执行,不会新建一个线程来执行。s t a r t ():新启动一个线程,这时此线程处于就绪(可运行)状态,并没有运行,一旦得到CP U 时间片,就开始执行r u n()方法。11、反射的缺点?【仅供参考】1、性能问题。J a v a 反射机制中包含了一些动态类型,所以J a v a 虚拟机不能够对这些动态代码进行优化。因此,反射操作的效率要比正常操作效率低很多。我们应该避免在对性能要求很高的程序或经常被执行的代码中使用反射。而且,如何使用反射决定了性能的高低。如果它作为程序中较少运行的部分,性能将不会成为一个问题。2、安全限制。使用反射通常需要程序的运行没有安全方面的限制。如果一个程序对安全性提出要求,则最好不要使用反射。3、程序健壮性。反射允许代码执行一些通常不被允许的操作,所以使用反射有可能会导致意想不到的后果。反射代码破坏了 J a va 程序结构的抽象性,所以当程序运行的平台发生变化的时候,由于抽象的逻辑结构不能被识别,代码产生的效果与之前会产生差异。1 2、J a va 反射创建对象效率高还是通过ne w创建对象的效率高?【仅供参考】通过ne w创建对象的效率比较高。通过反射时,先找查找类资源,使用类加载器创建,过程比较繁琐,所以效率较低。1 3、下面的代码哪些地方会产生编译错误?【仅供参考】c la ss O ute r c la ss I nne r pub lic sta tic void f oo()ne w I nne r();)pub lic void b a r()ne w I nne r();pub lic sta tic void ma in(S tring a rg s)ne w I nne r();)J a va 中非静态内部类对象的创建要依赖其外部类对象,上面的面试题中f。和ma in方法都是静态方法,静态方法中没有this,也就是说没有所谓的外部类对象,因此无法创建内部类对象,如果要在静态方法中创建内部类对象,可以这样做:ne w O ute r().ne w I nne r();在 ja va 编程中,用到反射的地方还是很多的,比如ja va 框架就大量使用反射,还有在加载驱动和读取配置文件时,反射也是比不可少的。所以在ja va 面试中,面试官会想要考察应聘者反射方面的知识,那么有面试需要的朋友,就必须提前做好准备,将能搜集到的ja va 反射面试题整理到一起记住,另外,ja va 零基础的小白也可以根据这篇ja va 反射面试题来认识ja va 反射。1 4、实现ja va 反射的类有什么?【仅供参考】(l)Cla ss:表示正在运行的J a va 应用程序中的类和接口,注意所有获取对象的信息都需要Cla ss类来实现;(2)F ie ld:提供有关类和接口的属性信息,以及对它的动态访问权限;(3)Construc tor:提供关于类的单个构造方法的信息以及它的访问权限;(4)M e thod:提供类或接口中某个方法的信息。1 5、接口是什么?为什么要使用接口而不是直接使用具体类?【仅供参考】接口用于定义APE 它定义了类必须得遵循的规则。同时,它提供了一种抽象,因为客户端只使用接口,这样可以有多重实现,如 L i s t 接口,你可以使用可随机访问的A r r a y L i s t,也可以使用方便插入和删除的L i n k e d L i s t o 接口中不允许写代码,以此来保证抽象,但 是 J a v a 8 中你可以在接口声明静态的默认方法,这种方法是具体的。16、设计一个ATM机,请说出你的设计思路?【仅供参考】比如设计金融系统来说,必须知道它们应该在任何情况下都能够正常工作。不管是断电还是其他情况,ATM应该保持正确的状态(事务),想想加锁(locking)、事 务(transaction)、错误条件(error condition)、边界条件(boundary condition)等等。尽管你不能想到具体的设计,但如果你可以指出非功能性需求,提出一些问题,想到关于边界条件,这些都会是很好的。17、简述分代垃圾回收器是怎么工作的?【仅供参考】分代回收器有两个分区:老生代和新生代,新生代默认的空间占比总空间的1/3,老生代的默认占比是2/3。新生代使用的是复制算法,新生代里有3 个分区:Eden、To Survivor,FromSurvivor,它们的默认占比是8:1:1,它的执行流程如下:把 Eden+From Survivor 存活的对象放入 To Survivor 区;清空 Eden 和 From Survivor 分区;From Survivor 和 To Survivor 分区交换,From Survivor 变 To Survivor,To Survivor 变 From Survivor。每次在From Survivor到 To Survivor移动时都存活的对象,年龄就+1,当年龄到达15(默认配置是15)时,升级为老生代。大对象也会直接进入老生代。老生代当空间占用到达某个值之后就会触发全局垃圾收回,一般使用标记整理的执行算法。以上这些循环往复就构成了整个分代垃圾回收的整体执行流程。18、什么是双亲委派模型?【仅供参考】在介绍双亲委派模型之前先说下类加载器。对于任意一个类,都需要由加载它的类加载器和这个类本身一同确立在JVM中的唯一性,每一个类加载器,都有一个独立的类名称空间。类加载器就是根据指定全限定名称将class文件加载到 J V M 内存,然后再转化为class对象。类加载器分类:启动类加载器(Bootstrap ClassLoader),是虚拟机自身的一部分,用来加载Java_HOME/lib/目录中的,或者被-Xbootclasspath参数所指定的路径中并且被虚拟机识别的类库;其他类加载器:扩展类加载器(E xte nsion C la ssL oa d e r):负责加载 j a va _ h ome style=b ox-sizing:b ord e r-b ox;outline:O px!importa nt;z/lib e xt 目录或 J a va.e xt.d irs系统变量指定的路径中的所有类库;应用程序类加载器(A pplic a tion C la ssL oa d e r)负责加载用户类路径(c la sspa th)上的指定类库,我们可以直接使用这个类加载器。一般情况,如果我们没有自定义类加载器默认就是用这个加载器。双亲委派模型:如果一个类加载器收到了类加载的请求,它首先不会自己去加载这个类,而是把这个请求委派给父类加载器去完成,每一层的类加载器都是如此,这样所有的加载请求都会被传送到顶层的启动类加载器中,只有当父加载无法完成加载请求(它的搜索范围中没找到所需的类)时,子加载器才会尝试去加载类。1 9、说一下J V M 调优的工具?【仅供参考】J D K 自带了很多监控工具,都位于J D K 的 b i n 目录下,其中最常用的是j c onsole 和 j visua lvm这两款视图监控工具。j c onsole:用于对J V M 中的内存、线程和类等进行监控;j visua lvm:J D K 自带的全能分析工具,可以分析:内存快照、线程快照、程序死锁、监控内存的变化、g c 变化等。2 0、说一下J V M 有哪些垃圾回收器?【仅供参考】S e ria l:最早的单线程串行垃圾回收器。S eri a l O ld:S eri a l垃圾回收器的老年版本,同样也是单线程的,可以作为C M S 垃圾回收器的备选预案。P a rN ew:是 S eri a l的多线程版本。P a ra llel和 P a rN ew收集器类似是多线程的,但 P a ra llel是吞吐量优先的收集器,可以牺牲等待时间换取系统的吞吐量。P a ra llel O ld是 P a ra llel老生代版本,P a ra llel使用的是复制的内存回收算法,P a ra llel O ld使用的是标记-整理的内存回收算法。C M S:一种以获得最短停顿时间为目标的收集器,非常适用B/S 系统。G 1:一种兼顾吞吐量和停顿时间的G C 实现,是 J D K 9以后的默认G C 选项。三、J a va W eb/S pri ng/S pri ng M V C/H i b erna te/M y B a ti s/S pri ngB oot/S pri ng C loud1、S ervlet是线程安全的吗【仅供参考】S ervlet不是线程安全的,多线程并发的读写会导致数据不同步的问题。解决的办法是尽量不要在实现servlet接口的类中定义实例变量,而是要把变量分别定义在doG et()和 doP ost()方法内。虽然使用sy nch roni z ed(na me)语句块可以解决问题,但是会造成线程的等待,不是很科学的办法。注意:多线程的并发的读写S ervlet类属性会导致数据不同步。但是如果只是并发地读取属性而不写入,则不存在数据不同步的问题。因此S ervlet里的只读属性最好定义为fi na l类型的。2、h ttp和 h ttps的基本概念【仅供参考】-H T T P:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(T C P),用于计算机之间传输文字,图片,音频,视频等超文本数据的协议,它可以使浏览器更加高效,使网络传输减少-H T T P S:是以安全为目标的H T T P 通道,简单讲是H T T P 的安全版,即H T T P 下加入S S L层,H T T P S 的安全基础是S S L,H T T P S 就是从HTTP加上加密处理(一般是SSL安全通信线路)+认证+完整性保护-HTTPS协议的主要作用:建立一个信息安全通道,来保证数据传输的安全确认网站的真实性3、说一下JS0 NP实现原理?【仅供参考】jso n p:JSON w i th Pa d d i n g,它是利用sc ri pt标签的src 连接可以访问不同源的特性,加载远程返回的“J S 函数”来执行的。4、A u to w i re d 的作用是什么?【仅供参考】A u to w i re d 它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作,通过 A u lo w i re d 的使用来消除se t/g e t方法。5、Re qu e stMa ppi n g 的作用是什么?【仅供参考】将 h ttp请求映射到相应的类/方法上。6、你如何理解Spring Boot中 的 Starters?【仅供参考】Starters可以理解为启动器,它包含了一系列可以集成到应用里面的依赖包,你可以一站式集成Spring及其他技术,而不需要到处找示例代码和依赖包。如你想使用Spring JPA访问数据库,只要加入spring-boot-starter-data-jpa启动器依赖就能使用了。7、springboot 集成 mybatis 的过程【仅供参考】添加 mybatis 的 starter maven 依赖org.mybatis.spring.bootmybatis-spring-boot-starterl.3.2在 mybatis的接口中 添加Mapper注解在 application,yml配置数据源信息8、开 启 Spring Boot特性有哪几种方式?【仅供参考】1)继承 spring-boot-starter-parent 项 目2)导入 spring-boot-dependencies 项目依赖9、jpa和 hibernate有什么区别?【仅供参考】jpa 全称 Java Persistence API,是 Java 持久化接口规范,hibernate 属于jpa的具体实现。10、spring boot有哪些方式可以实现热部署?【仅供参考】使 用 devtools启动热部署,添 加 devtools库,在配置文件中把spring,devtools.restart,enabled 设置为 true;使 用 Intellij Idea编辑器,勾上自动编译或手动重新编译。11、为什么我们不建议在实际的应用程序中使用Spring Data Rest?【仅供参考】我 们 认 为Spri n g D a ta Re st很适合快速原型制造!在大型应用程序中使用需要谨慎。通 过Spri n g D a ta RE ST你可以把你的数据实体作为RE STf u l服务直接发布。当 你 设 计RE ST f ul服务器的时候,最佳实践表明,你的接口应该考虑到两件重要的事情:你的模型范围。你的客户。通 过W i th Sp ri n g D a ta RE ST,你不需要再考虑这两个方面,只需要作为T E ST服务发布实体。这就是为什么我们建议使用Sp ri n g D a ta Re s t在快速原型构造上面,或者作为项目的初始解决方法。对于完整演变项目来说,这并不是一个好的注意。12、Re que s tM a p p i n g 和 G e tM a p p i n g 的不同之处在哪里?【仅供参考】Re que s tM a p p i n g具有类属性的,可 以 进 行G E T,P O ST,P U T或者其它的注释中具有的请求方法。G e tM a p p i n g是G E T请求方法中的一个特例。它只是Re s que s tM a p p i n g的一个延伸,目的是为了提高清晰度。13 s p ri n g c l o ud的核心组件有哪些?【仅供参考】E ure k a:服务注册于发现。F e i g n:基于动态代理机制,根据注解和选择的机器,拼 接 请 求url地址,发起请求。Ri b b o n:实现负载均衡,从一个服务的多台机器中选择一台。H y s tri x:提供线程池,不同的服务走不同的线程池,实现了不同服务调用的隔离,避免了服务雪崩的问题。Z uul:网关管理,由Z uul网关转发请求给对应的服务。14、s p ri n g c l o ud断路器的作用是什么?【仅供参考】在分布式架构中,断路器模式的作用也是类似的,当某个服务单元发生故障(类似用电器发生短路)之后,通过断路器的故障监控(类似熔断保险丝),向调用方返回一个错误响应,而不是长时间的等待。这样就不会使得线程因调用故障服务被长时间占用不释放,避免了故障在分布式系统中的蔓延。1 5、S p r i n g b o o t有哪些优点?【仅供参考】-快速创建独立运行的s p r i n g 项目与主流框架集成-使用嵌入式的s e r v l e t 容器,应用无需打包成w a r 包-s t a r t e r s 自动依赖与版本控制-大量的自动配置,简化开发,也可修改默认值-准生产环境的运行应用监控-与云计算的天然集成1 6、什么是 S p r i n g Da t a RE S T?【仅供参考】S p r i n g Da t a T E S T 可以用来发布关于S p r i n g 数据库的H A T E O A S RE S T f u l 资源。1 7、如何重新加载S p r i n g B o o t 上的更改,而无需重新启动服务器?【仅供参考】这可以使用DE V 工具来实现。通过这种依赖关系,您可以节省任何更改,嵌入式 t o m c a t 将重新启动。S p r i n g B o o t

    注意事项

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

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




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

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

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

    收起
    展开