欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 游戏 > JavaSE面试

JavaSE面试

2025/4/3 11:06:23 来源:https://blog.csdn.net/m0_64837052/article/details/141144782  浏览:    关键词:JavaSE面试

Java基本语法

1、一个Java源文件中是否可以包括多个类?有什么限制

是,只能有一个类声明为public,且声明public的类类名与源文件相同

 2、Java的优势

跨平台、安全性高、简单性、高性能、健壮性、面向对象、社区繁荣

3、如何看待Java是半编译、半解释型语言

 Java源代码经过Java编译器编译生成字节码文件,字节码文件执行时可能会通过解释器解释执行(逐行执行),也可能通过JIT即时编译执行(热点代码先编译好)。

4、 高效计算2*8

<<移位运算

5、&和&& 的区别

都表示且,两边同时true执行

false&运算 右边执行

false&&运算 右边不执行

 6、Java基本数据类型

byte、short、int、long、float、double、char、boolean

7、 Java计算金额使用什么数据类型

不能使用float或者double,精度不高

使用BigDecimal类替换,可以实现任意精度数据运算

 8、char能不能存储一个中文汉字

可以,char使用unicode字符集,包含了世界范围所有字符

9、隐式类型转换

short s=1;

s=s+1;        //错误 1默认是int类型,s+1就为int,将int不能赋给short

short s=1;

s+=1;        //正确 相当于s=(short)(s+1)

10、int i=0;i=i++执行后i值为

0

先赋值后++

11、boolean占几个字节

编译时不谈占字节

但是jvm在给boolean类型分配内存空间时,boolean类型变量占据一个槽位(slot,等于4个字节)。

在内存中,byte/short/char/boolean/int/float:占1slot

double/long占两个slot

12、break和continue作用

break:结束当前循环

continue:结束当次循环

13、switch分支语句忘加break会发生什么

case穿透

 14、while和do while循环的区别

do while至少执行一次

15、数组中有没有length()方法,String中有没有length()方法

数组中没有length方法,只有length属性

String中有length()方法

16、为什么数组从0开始编号,而不是1

数组的索引,表示数组元素距离首地址的偏移量。因为第一个元素地址与首地址相同,所以偏移量是0

Java面向对象、异常、线程

1、面向对象与面向过程的区别

不管是面向对象还是面向过程,都是程序设计的思路

面向过程:以函数为单位

面向对象:以类为单位

2、Java中引用类型

类、数组 、接口、枚举、注解、记录

3、 类和对象的区别

类:抽象的概念上的定义

对象:类的实例

4、 构造器能不能重载

可以,不能重写

 5、父类哪些成员可以被继承

属性、方法

构造器可以被子类调用

 6、异常的体系结构

java.lang.Throwable:异常体系根父类

        java.lang.Error:错误。Java虚拟机无法解决的严重问题。如jvm系统内部错误等

                StackOverflowError、OutofMemoryError

        java.lang.Exception:异常

                编译时异常:(受检异常)在执行Javac.exe命令时,出现的异常

                        ClassNotFoundException

                        FileNotFoundException

                        IOException

                运行时异常:(非受检异常)在执行java.exe命令时,出现的异常

                        ArrayIndexOutOfBoundsException

                        NullPointerException

                        ClassCastException

                        NumberFormatException

                        InputMismatchException

                        AruthmeticException 1/0算术异常

7、运行时异常与一般异常有何异同

运行时异常:RuntimeException

        编译可以通过,在运行时可能抛出,出现概率高,一般针对于运行时异常,都不处理

一般异常:

        编译不能通过

 8、try-catch捕获的什么异常

Exception

9、在try语句中有return,最后写了finally语句,哪个先执行

return后面的语句--finally--将return翻译成字节码指令执行 

 10、stop()和suspend()为什么不推荐使用

stop():一旦执行,线程就结束了,导致run()方法中有未执行结束的代码。stop()会释放同步监视器,导致线程安全问题

suspend():与resume()搭配使用,否则导致死锁

11、Java线程优先级 

1到10之间,10最高优先级

 12、Java如何保证线程安全

同步机制:同步代码块和同步方法

Lock接口

13、 synchronized加在静态方法和普通方法区别

同步监视器不同。静态:当前类本身 非静态:this

14、 线程同步与阻塞的关系

同步一定阻塞

阻塞不一定同步,比如sleep

15、 为什么wait()和notify()方法要放在同步块中调用

因为调用者必须是同步监视器

 集合、泛型、IO

1、String中的+怎么实现

常量+常量:和写在一起一样,在常量池中

变量+常量、变量+变量:创建StringBuilder实例,通过append()添加字符串,最后调用toSstring()返回一个字符串(toString内部new了一个String实例)

2、subString()底层做了什么

String str="hello"

String sub=str.subString(1,3);//底层是new的方式返回一个subStr,实体内容是"el" 

3、 排序

自然排序:对应接口是Comparable,对应抽象方法compareTo(Object obj)

定制排序:对应接口Comparator,对应抽象方法compare(Object obj1,Object obj2)

4、final修饰Map可以继续添加数据吗

可以,只是地址不能变,可以添加数据

5、Set和Map的比较

HashSet的底层就是HashMap

LinkedHashSet底层是LinkedHashMap

TreeSet底层是TreeMap 

 6、HashMap里面实际装的是什么 

jdk7:HashMap内部声明了Entry,实现了Map中的Entry接口,key和value作为Entry的两个属性出现

jdk8:HashMap内部声明了Node,实现了Map中的Entry接口,key和value作为Node的两个属性出现

7、泛型的理解

泛型,是程序中出现的不确定的类型,对于集合来讲,把集合中的内容限制为特定的数据类型,就是泛型的核心思想。

使用引用数据类型来赋值

8、 在ArrayList中remove后面几个元素该怎么做

前移

9、 数组和ArrayList的区别

ArrayList看作是对数组常见操作的封装

10、 HashMap为什么长度达到一定长度要转为红黑树

红黑树检索的时间复杂度是O(logn),比单向链表O(n)效率高

11、HashMap什么时候扩充为红黑树,什么时候返回到链表

索引i的位置的链表长度超过8且数组长度达到64,需要索引i位置变成红黑树

索引i位置元素个数低于6,将红黑树转为单向链表,为了节省空间

12、 Set如何实现元素的唯一性

底层使用HashMap,equals和hashCode

 13、用哪种方式实现集合排序

自然排序和定制排序

 14、File类的使用

File类的一个实例对应着磁盘上的一个文件或文件目录

File类中只有新建、删除、获取路径等方法,不包含读写文件的方法,此时需要使用IO流

15、IO流的概述

分类:

        流向:输入流、输出流

        处理数据单位:字节流、字符流

        流的角色:节点流、处理流

IO的4个抽象基类:InputStream、OutputStream、Reader、Writer 

16、节点流

文件流

FileInputStream、FileOutputStream、FileReader、FileWiter

数据读写的过程

        创建File类对象,作为读取或写出数据的端点

        创建相关流的对象

        读取、写出数据的过程

        关闭流资源

17、处理流

缓冲流

BufferInputStream、BufferOutputStream、BufferReader、BufferWiter

更高效的读写操作

转换流

InputStreamReader:输入字节流-->输入字符流

OutputStreamWriter:输出字符流-->输出字节流

转换流应用:字符的编码和解码的过程

对象流

ObjectInputStream:反序列化

ObjectOuputStream:序列化

 18、其他流

标准输入流、标准输出流:System.in、System.out

打印流:PrintStream、PrintWriter

 19、创建对象的方法

1、new的方式

        普通new的方式

        Xxx的静态方法,比如LocalDateTime.now

        XxxBuilder/XxxFactory的静态方法

2、反射

        Class的newInstance():反射的方式,只能调用空参的构造器,权限必须是public

        Constructor的newInstance():反射的方式,可以调用空参、带参的构造器,权限没有要求

3、使用clone():不调用任何构造器,当前类需要实现Cloneable接口,实现clone()

4、使用反序列化,从文件中、网络中获取一个对象二进制流

 20、如何利用反射机制访问一个方法

1、通过Class的实例调用getDeclaredMethod(String methodName,Class ...args)获取指定方法

2、setAccesssible(true)确保此方法可访问

3、通过Method实例调用invoke(Object obj,Object...args),方法返回值就是Method对应方法返回值,没有null

访问属性:get(Object obj)获取的操作、set(Object obj,Object value)设置的操作

 新特性

1、jdk8新特性

lambda表达式、Stream API

2、lambda表达式

什么情况下使用:

        在给函数式接口提供实例时,可以使用(只有一个抽象方法对应的接口)

        比如:Comparator、Runnable、java.util,function包下的很多

        kang mu pai rui te

3、Stream API

Stream API关注于内存中多个数据的运算,集合关注于存储

 排序、查找、过滤filter、映射、遍历

4、1.8数据结构上发生哪些变化

使用元空间替代永久代(方法区:jvm规范中提到的结构)

        Hotpot来讲:

                jdk7:方法区的落地体现:永久代

                jdk8:方法区的落地体现:元空间

HashMap底层结构

 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词