Java基础面试题
文章平均质量分 58
Java基础面试题
@Autowire
这个作者很懒,什么都没留下…
展开
-
探究Java中异常的捕获及处理机制
程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常。Java提供了优秀的解决办法:异常处理机制。异常处理机制能让程序在异常发生时,按照代码的预先设定的异常处理逻辑,针对性地处理异常,让程序尽最大可能恢复正常并继续执行,且保持代码的清晰。Java中的异常可以是函数中的语句执行时引发的,也可以是程序员通过throw 语句手动抛出的,只要在Java程序中产生了异常,就会用一个对应类型的异常对象来封装异常,JRE就会试图寻找异常处理程序来处理异常。Java异常机制用到的几个关键.原创 2022-03-28 10:58:03 · 2668 阅读 · 0 评论 -
解决困扰已久的常量池问题&以及String的内存存放问题?
1 常量池-Class 常量池class文件格式采用类似于c语言结构体的伪结构来存储数据,伪结构只有两种数据类型:无符号和表。无符号数属于基本的数据类型:u1,u2,u4,u8代表1,2,4,8个字节的无符号数,可以用来描述数字、索引引用,数量值或者按照UTF-8编码构成字符串值。表是由多个无符号数或者其他表作为数据构成的复合数据类型,习惯性以“_info”结尾,整个class文件本质就是一张表。无论是无符号数还是表,当需要描述同一类型数量不定的多个数据时,经常会使用一个前置的容器计数器加若干连续数据项原创 2022-03-22 13:55:21 · 918 阅读 · 0 评论 -
请你谈谈对Java-static关键字的理解
1 从JVM的角度方法区是所有线程共享的内存区域,它用于存储已被Java虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。package com.zs.entity;public class People { // 静态变量 static String firstName; // 成员变量 String lastName; // 成员方法 public void showName_1() { System.out.pr原创 2022-03-20 11:21:36 · 341 阅读 · 0 评论 -
深入理解Java的反射机制
首先我们需要先了解程序的运行过程:从源文件创建到程序运行,Java程序要经过两大步骤:编译,运行;1、源文件由编译器编译成字节码(ByteCode); 2、字节码由java虚拟机解释运行。第一步(编译): 创建完源文件之后,程序会先被编译为.class文件。Java编译一个类时,如果这个类所依赖的类还没有被编译,编译器就会先编译这个被依赖的类,然后引用,否则直接引用。如果java编译器在指定目录下找不到该类所其依赖的类的.class文件或者.java源文件的话,编译器话报“cant find symbol原创 2022-03-17 11:28:35 · 1378 阅读 · 0 评论 -
Java基本数据类型
1 Java基本数据类型Java语言中的数据类型分为两大类:基本数据类型(primitive types)基本数据类型是由程序设计语言系统所定义、不可再分的数据类型。每种基本数据类型的数据所占内存的大小是固定的,与软硬件环境无关。基本数据类型在内存中存放的是数据值本身。引用数据类型(reference types),简称引用类型引用数据类型在内存中存放的是指向该数据的地址,不是数据值本身,它往往由多个基本数据类型组成,在有的程序设计语言中称为指针。基本数类型●整型:byte,short,i原创 2020-11-16 15:36:36 · 353 阅读 · 0 评论 -
请你谈谈对Object类的理解?
Object是java所有类的基类,是整个类继承结构的顶端,也是最抽象的一个类。大家天天都在使用toString()、equals()、hashCode()、wait()、notify()、getClass()等方法1getClass()方法类加载的第一阶段类的加载就是将.class文件加载到内存,并生成一个java.lang.Class对象的过程。getClass()方法就是获取这个对象。2hashCode()方法这是一个public的方法,所以 子类可以重写它。这个方法返回当前对象的hashCo原创 2021-08-31 15:01:26 · 480 阅读 · 1 评论 -
请你谈谈finally中的语句总会执行吗?什么情况下不会?
1try语句没有被执行到,如在try语句之前return就返回了,这样finally语句就不会执行。2在try块|catch块中有System.exit(0);这样的语句。System.exit(0)是终止Java虚拟机JVM的,连JVM都停止了,所有都结束了,当然finally语句也不会被执行到。3在try catch块里return的时候,finally也会被执行。...原创 2021-04-19 18:52:08 · 488 阅读 · 0 评论 -
请你谈谈利用LinkedHashMap实现LRU算法缓存
1key和value都允许为空;2key重复会覆盖,value可以重复;3有序的;4LinkedHashMap是非线程安全的;1 LinkedHashMap可以认为是HashMap+LinkedList,也就是说,它使用HashMap操作数据结构,也用LinkedList维护插入元素的先后顺序. 2 LinkedHashMap的实现思想就是多态,理解LinkedHashMap能帮助我们加深对多态的理解.public class LinkedHashMap<K,V> extends H转载 2021-04-19 08:22:43 · 171 阅读 · 0 评论 -
请你谈谈Java中的深拷贝与浅拷贝?
数据分为基本数据类型和引用数据类型。基本数据类型:数据直接存储在栈中;引用数据类型:存储在栈中的是对象的引用地址,真实的对象数据存放在堆内存里。浅拷贝:对于基础数据类型:直接复制数据值;对于引用数据类型:只是复制了对象的引用地址,新旧对象指向同一个内存地址,修改其中一个对象的值,另一个对象的值随之改变。深拷贝:对于基础数据类型:直接复制数据值;对于引用数据类型:开辟新的内存空间,在新的内存空间里复制一个一模一样的对象,新老对象不共享内存,修改其中一个对象的值,不会影响另一个对象。深拷贝..转载 2021-04-17 09:05:07 · 107 阅读 · 0 评论 -
谈谈你对序列化的理解?
1 什么是序列化和反序列化?Java序列化是指把Java对象转换为字节序列的过程;Java反序列化是指把字节序列恢复为Java对象的过程。2 为什么要序列化?其实我们的对象不只是存储在内存中,它还需要在传输网络中进行传输,并且保存起来之后下次再加载出来,这时候就需要序列化技术。一般Java对象的生命周期比Java虚拟机短,而实际开发中如果需要JVM停止后能够继续持有对象,则需要用到序列化技术将对象持久化到磁盘或数据库。在多个项目进行RPC调用时,需要在网络上传输JavaBean对象,而网络上只允许原创 2021-04-16 17:46:40 · 447 阅读 · 0 评论 -
请你写出螺旋矩阵以及虚拟内存的理解?
1[54. 螺旋矩阵]class Solution { public List<Integer> spiralOrder(int[][] matrix) { List<Integer> res = new ArrayList<>(); if(matrix == null || matrix.length == 0 || matrix[0] == null || matrix[0].length == 0) ret转载 2021-04-15 15:35:17 · 74 阅读 · 0 评论 -
Java IO
1流的相关概念概念:内存和存储设备之间传输数据的通道;按流向来分:输入流inputStream 输出流outputStream;按操作类型来分:字节流 字符流;字节流的抽象父类:inputStream输入流 outputStream输出流;字符流的抽象父类:Reader Writer;1字节流2 InputStream->FileInputStreamFileInputStream 从文件系统中的某个文件中获得输入字节。FileInputStream 用于读取诸如图像数据之类的原始字节流。要读原创 2021-03-31 09:29:09 · 124 阅读 · 0 评论 -
Java基础知识
1基本数据类型2 float f=3.4;是否正确不正确。3.4 是双精度数,将双精度型(double)赋值给浮点型(float)属于下转型(down-casting,也称为窄化)会造成精度损失,因此需要强制类型转换float f =(float)3.4; 或者写成 float f =3.4F;3访问修饰符 public,private,protected,以及不写(默认)时的区别private : 当前类中可见。使用对象:变量、方法。 注意:不能修饰类(外部类)default: (即缺省,什么原创 2021-03-31 07:17:28 · 234 阅读 · 0 评论 -
请你谈谈Java中final关键字的理解以及Java异常架构?
1谈谈你对Sleep和wait的理解?1所属的类不同:wait继承的是object而sleep继承的是Thread类2对于锁的处理方式不同:sleep不会释放锁,wait会释放锁3使用范围不同:sleep可以在任何地方睡,wait必须在同步代码块中2线程的生命周期?new,runnable,blocked,waiting,timed waiting,terminated3线程创建的四种方式?1继承 Thread 2实现Runnable 3实现Callable 4线程池来创建的方式ThreadP转载 2021-03-25 18:27:40 · 145 阅读 · 0 评论 -
软件工程的流程
1问题定义问题定义阶段必须回答的关键问题:“要解决的问题是什么?通过问题定义阶段的工作,系统分析员应该提出关于问题性质、工程目标和规模的书面报告。问题定义阶段是软件生存周期中最简短的阶段,一般只需要一天甚至更少的时间。2可行性研究可行性研究应该比较简短,这个阶段的任务不是具体解决问题,而是研究问题的范围,探索这个问题是否值得去解,是否有可行的解决办法。在问题定义阶段提出的对工程目标和规模的报告通常比较含糊。可行性研究阶段应该导出系统的高层逻辑模型(通常用数据流图表示),并且在此基础上更准确、 更原创 2021-03-20 17:33:48 · 2360 阅读 · 0 评论 -
给定一个2亿数字的数组,如何判定某个数是否在集合中,假设数组中没有重复元素,且数字大小在5亿以内
原创 2021-03-19 07:52:06 · 179 阅读 · 0 评论 -
哈希函数的构造、处理冲突的方法
1哈希函数的构造、处理冲突的方法哈希表的思想就是在待查记录的关键字值和它的存储位置之间建立一个确定的对应关系则查找时不必再进行关键字值间的比较。根据设定的哈希函数及处理冲突的方法将查找表中各数据元素存储在一段有限的连续空间中,即得哈希表。这里有两个比较重要得问题:哈希函数的构造、处理冲突的方法。2哈希函数的构造方法1、直接定址法直接根据数据的值来映射到地址,比如对数字10、11、12、13…可以将其映射到一块连续的内存中。2、数字分析法根据数据的某些数字(比如百位和十位数字)来映射到地址。原创 2021-03-16 07:26:50 · 365 阅读 · 0 评论 -
谈谈你对线程安全的理解?
如果这个是面试官直接问你的问题,你会怎么回答?一个专业的描述是,当多个线程访问一个对象时,如果不用进行额外的同步控制或其他的协调操作,调用这个对象的行为都可以获得正确的结果,我们就说这个对象是线程安全的那么我们如何做到线程安全?实现线程安全的方式有多种,其中在源码中常见的方式是,采用synchronized关键字给代码块或方法加锁,比如StringBuffer查看StringBuffer的源码,你会看到是这样的:那么,我们开发中,如果需要拼接字符串,使用StringBuilder还是String原创 2021-02-27 19:26:46 · 602 阅读 · 0 评论 -
一个普通main方法的执行,是单线程模式还是多线程模式?为什么?
因为java有个重要的特性,叫垃圾自动回收机制,所以答案是多线程,这里面有两部分,主线程(用户线程),垃圾回收线程GC(守护线程)同时存在。原创 2021-02-26 10:06:28 · 389 阅读 · 0 评论 -
接口和抽象类的区别
这个问题,要分JDK版本来区分回答:JDK1.8之前:语法:抽象类:方法可以有抽象的,也可以有非抽象, 有构造器public abstract class Person{ int age; // 不需要初始化 public abstract void eat(); public int getAge(){ return 24; } public Person() { }}接口:方法都是抽象,属性都是常量,默认有p原创 2021-02-26 09:24:58 · 87 阅读 · 0 评论 -
String && StringBuffer && StringBuilder && newString()
String 跟其他两个类的区别是String是final类型,每次声明的都是不可变的对象,所以每次操作都会产生新的String对象,然后将指针指向新的String对象。 List itemStringBuffer,StringBuilder都是在原有对象上进行操作所以,如果需要经常改变字符串内容,则建议采用这两者。StringBuffer vs StringBuilderStringBuffer 每个方法都加了synchronize修饰前者是线程安全的,后者是线程不安全的。线程不安全原创 2021-02-26 08:52:52 · 169 阅读 · 0 评论 -
JDK,JRE,JVM有什么区别?
JDK:Java Development Kit,Java开发工具包,提供了Java的开发环境和运行环境。包含了编译Java源文件的编译器Javac,还有调试和分析的工具。JRE:Java Runtime Environment,Java运行环境,包含Java虚拟机及一些基础类库JVM:Java Virtual Machine,Java虚拟机,提供执行字节码文件的能力所以,如果只是运行Java程序,只需要安装JRE即可。另外注意,JVM是实现Java跨平台的核心,但JVM本身并不是跨平台的,不同原创 2021-02-26 08:21:44 · 127 阅读 · 0 评论 -
谈谈对面向对象思想的理解
这个问题,通常会让很多人有点不知所措,感觉我一直在编码,但是说到思想很难去阐述。下面,我说说自己的想法,首先,谈谈“面向过程”vs“面向对象”我觉得这两者是思考角度的差异,面向过程更多是以**“执行者”的角度来思考问题,而面向对象更多是以“组织者”的角度**来思考问题,举个例子,比如我要产生一个0-10之间的随机数,如果以“面向过程”的思维,那我更多是关注如何去设计一个算法,然后保证比较均衡产生0-10的随机数,而面向对象的思维会更多关注,我找谁来帮我们做这件事,比如Random类,调用其中提供的方法原创 2021-02-26 08:18:48 · 294 阅读 · 2 评论