版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java新手面试题及详细答案(零基础/应届生适用)一、Java基础语法高频题1、简述Java的基本特点?答:Java最核心的特点我日常开发中感触比较深的有这几点:第一是面向对象,所有代码基本都是基于类和对象实现,封装、继承、多态三大特性让代码复用性和维护性更好;第二是跨平台,也就是一次编写到处运行,只要设备装了JVM,编译后的class文件就能运行,不受操作系统限制;第三是安全性高,Java有严格的语法校验、内存管理机制,杜绝了很多底层内存越界、非法访问的问题;第四是自动垃圾回收,不需要手动开辟和释放内存,JVM会自动回收无用对象内存,减少内存泄漏问题;另外还有多线程、健壮性高、开源生态丰富的特点,适合企业级项目开发。2、JDK、JRE、JVM的区别是什么?答:三者是层层包含的关系,范围从大到小是JDK>JRE>JVM:JVM:Java虚拟机,是Java程序运行的核心,只负责解析执行class字节码文件,是程序运行的容器,单独的JVM无法开发Java程序;JRE:Java运行环境,包含JVM+Java核心类库,只用来运行已经写好的Java程序,没有代码编译、开发的工具;JDK:Java开发工具包,包含JRE+开发工具(javac编译器、java运行命令、调试工具等),我们开发Java项目必须安装JDK。简单总结:只运行程序装JRE,开发程序必须装JDK。3、==和equals()的区别?答:两者都是用来比较是否相等,但是比较的内容完全不一样:==:可以比较基本数据类型和引用数据类型。基本类型比较的是数值本身,引用类型比较的是内存地址,也就是判断两个对象是不是同一个对象;equals():是Object类的方法,默认也是比较内存地址,但像String、Integer这些常用类都重写了这个方法,重写后只比较对象的内容值,不比较地址。日常开发中,比较字符串内容是否一致,一律用equals,不用==。4、基本数据类型有哪些?各自占用字节数?答:Java一共8种基本数据类型,分为四类,字节数固定:1.整型:byte(1字节)、short(2字节)、int(4字节)、long(8字节)2.浮点型:float(4字节)、double(8字节)3.字符型:char(2字节)4.布尔型:boolean(1字节)补充:定义long类型变量末尾要加L,float类型末尾要加F,避免编译报错。5、String、StringBuilder、StringBuffer的区别?答:核心区别在可变性和线程安全,日常开发优先级:StringBuilder>StringBuffer>String1.String:字符串不可变,一旦创建就不能修改。每次拼接字符串都会生成新的字符串对象,频繁拼接会浪费内存,效率最低;2.StringBuilder:字符串可变,没有锁机制,线程不安全,但是拼接效率最高,适合单线程场景(绝大多数业务场景);3.StringBuffer:字符串可变,加了同步锁,线程安全,但因为锁的存在,拼接效率偏低,只适合多线程并发拼接场景。二、面向对象核心面试题1、面向对象的三大特性是什么?分别解释一下答:三大特性是封装、继承、多态,是Java面向对象编程的核心:封装:将类的属性私有化,用private修饰,对外提供get/set方法访问属性。目的是隐藏内部细节,保护数据安全,统一访问方式,方便后期维护;继承:子类继承父类,复用父类的属性和方法,还可以扩展自己的功能。作用是减少代码冗余,提高代码复用性,Java是单继承,一个子类只能有一个直接父类;多态:同一个行为,不同对象有不同的表现形式。核心是父类引用指向子类对象,方法重写是实现多态的关键,能让代码扩展性更强。2、重写和重载的区别?答:两者都是方法的特殊用法,区别非常明显,新手很容易混淆:重载(Overload):发生在同一个类中,多个方法名相同,参数列表不同(参数个数、类型、顺序不同),和返回值、访问修饰符无关。属于编译时多态,主要用来实现同一个方法适配不同参数;重写(Override):发生在父子类之间,子类重写父类的非私有、非final、非静态方法。方法名、参数列表、返回值必须和父类一致,访问权限不能比父类更严格。属于运行时多态,用来改写父类原有逻辑。3、接口和抽象类的区别?答:1.继承方式不同:抽象类是单继承,接口是多实现;2.成员变量不同:抽象类可以有普通变量、常量;接口只能是publicstaticfinal常量;3.方法不同:抽象类可以有构造方法、普通方法、抽象方法;JDK8之前接口只有抽象方法,后续版本支持默认方法、静态方法,没有构造方法;4.设计思想不同:抽象类是模板设计,抽取子类通用属性和方法;接口是行为规范,定义类必须具备的功能。4、final、finally、finalize的区别?答:三个单词长得相似,功能完全无关:final:是修饰符。修饰变量则变量值不可修改;修饰方法则方法不能被重写;修饰类则类不能被继承;finally:是异常处理的关键字,搭配try-catch使用。无论代码是否报错,finally中的代码一定会执行,主要用来释放资源(关闭流、关闭连接);finalize:是Object类的废弃方法,JVM垃圾回收时可能会调用,用来做对象回收前的收尾工作,日常开发基本不用,已经被废弃。三、异常体系面试题1、Java异常的分类?Checked异常和Runtime异常区别?答:Java异常分为两大类,都继承自Throwable:1.Error(错误):系统级严重错误,比如内存溢出、栈溢出,程序无法处理,只能终止;2.Exception(异常):程序可处理的异常,分为两种:编译期异常(Checked异常):除运行时异常外的所有异常,编译阶段就会报错,必须手动try-catch捕获或者throws抛出,否则程序无法编译,比如文件不存在异常;运行时异常(Runtime异常):程序运行时才会报错,编译不报错,可处理可不处理,比如空指针异常、数组越界异常,大多是代码逻辑问题导致的。2、try-catch-finally执行顺序?finally一定会执行吗?答:常规执行顺序:先执行try代码块,若try报错则执行catch捕获异常,最后执行finally。特殊情况:finally不是绝对执行。如果在try代码块中执行了System.exit(0)退出虚拟机,或者程序所在线程直接终止,finally代码块不会执行。日常开发中,数据库连接、IO流关闭等资源释放操作,都放在finally中执行。四、集合框架高频面试题1、ArrayList和LinkedList的区别?答:两者都是List接口的实现类,核心区别是底层结构和读写效率:ArrayList:底层是动态数组。查询、遍历速度极快,支持随机访问;增删元素时需要移动数组元素,效率低,适合查询多、增删少的场景,线程不安全;LinkedList:底层是双向链表。没有数组扩容和元素移动的开销,头尾增删效率高;不支持随机访问,查询需要逐个遍历,效率低,适合频繁增删、查询少的场景,线程不安全。2、HashMap的底层原理?(新手简易版)答:HashMap是日常开发最常用的键值对集合,JDK1.8之后底层是数组+链表+红黑树:1.存储数据时,通过key的哈希值计算数组下标,确定存储位置;2.如果下标位置没有数据,直接存入数组;3.如果发生哈希冲突(下标重复),就在该位置生成链表存储数据;4.当链表长度超过8、数组容量大于64时,链表会转换成红黑树,提升查询效率;5.HashMap默认容量16,负载因子0.75,达到阈值会自动扩容一倍,线程不安全,适合单线程使用。3、HashTable和HashMap的区别?答:1.线程安全:HashMap线程不安全;HashTable线程安全,方法加了同步锁;2.键值为空:HashMap允许key和value为null;HashTable不允许,为空会直接报错;3.效率:HashMap无锁,效率高;HashTable锁粒度大,效率低;4.继承关系:HashMap继承AbstractMap;HashTable继承Dictionary,是老旧类,开发中优先用HashMap,多线程场景用ConcurrentHashMap。五、异常与IO基础1、IO流的分类?字节流和字符流区别?答:IO流主要用来读写文件、传输数据,最常用的分类是字节流和字符流:字节流(InputStream/OutputStream):以字节为单位传输,万能流,可以读写所有文件(图片、视频、音频、文档等二进制文件);字符流(Reader/Writer):以字符为单位传输,专门用来读写文本文件(txt、java、html等),自带编码转换,读写中文不会乱码,读写非文本文件会损坏文件。开发原则:文本文件用字符流,其他所有文件统一用字节流。六、线程基础新手必问1、什么是进程和线程?区别是什么?答:进程:操作系统资源分配的最小单位,独立运行的程序,比如打开的浏览器、IDE,进程之间相互独立,互不干扰;线程:进程内部的执行单元,是CPU调度的最小单位,一个进程可以包含多个线程,线程共享进程的资源,切换开销更小;核心区别:进程开销大、独立性强;线程开销小、共享资源,Java程序默认有主线程main。2、创建线程的三种方式?答:新手只需掌握三种基础方式:1.继承Thread类,重写run()方法,调用start()启动线程;2.实现Runnable接口,重写run()方法,传入Thread对象启动;3.实现Callable接口,重写call()方法,支持返回值和异常捕获,配合线程池使用。开发中优先用Runnable接口,避免单继承限制,代码更灵活。七、新手高频手写简答/场景题1、说说你对Java面向对象编程的理解?答:面向对象就是把现实中的事物抽象成程序中的类和对象。类是模板,对象是具体实例。相比于面向过程的代码,面向对象更注重模块化、复用性和可维护性。通过封装保护数据,通过继承复用代码,通过多态扩展功能,适合开发大型、可迭代、易维护的企业项目,也是Java编程的核心思想。2、日常开发中为什么尽量用ArrayList不用数组?答:数组长度固定,一旦定义无法修改,扩容和缩容非常麻烦,而且自带方法少,操作数据繁琐;ArrayList底层封装了动态数组,自动扩容,不用
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年注册安全工程师考试(初级)安全生产法律法规试卷及答案
- 2025入党积极分子培训党员发展程序测试题及答案
- 2025下半年教师资格《幼儿综合素质》真题及答案完
- 2026年《医疗器械生产质量管理规范》培训试题有答案
- 2026年东营继续教育公需科目-人工智能(完整版题库+答案解析)
- 2026年人工智能训练师(三级)职业道德考试试题及解析
- 脑血管疾病的药物治疗与介入治疗策略研究
- 冠心病心力衰竭合并COPD病例分析1
- 小学英语教资面试词汇易错题试卷
- 联泰AI智能化解决方案
- 汽车维修工高级培训资料
- 革兰阴性杆菌感染的临床护理
- GB/T 20977-2024糕点质量通则
- 自然科学基金项目申请书
- DB34T 1948-2013 建设工程造价咨询档案立卷标准
- 高职电子商务专业《电子商务数据分析》说课稿
- 医院培训课件:《常用临床护理技术服务规范》
- 幼儿园教学课件科学教育《鸟类动物》
- 钢管脚手架施工规范及注意事项
- 20S517 排水管道出水口
- 机械点检员职业技能知识考试题库与答案(900题)
评论
0/150
提交评论