JavaSE常见面试题
1、简述什么是 JDK、JRE 和 JVM?
JDK : 开发工具包
JRE : 运行时环境
JVM : java虚拟机
2、写出Java的四类八种基本数据类?
整数 byte short int long
小数(浮点) float double
布尔 boolean
字符 char
3、& 和 && 的区别 ?
& 符号的左右两边,无论真或假都要执行
&& 符号的左边如果为假,符号的右边不再执行,提高了代码的执行效率
4、 switch的参数可以是什么类型
int 及以下整数包含 字符 char byte short int char
String
枚举
5,简述什么是标识符,及其定义的规则
标识符就是名字
数字不能开头
不能使用关键字起名字
特殊符号只有 _ $
26个大小写英文字母
数字0-9
其他国家的语言文字
6、说出成员变量和局部变量的区别
1, 物理位置
成员变量: 类中方法外
局部变量: 方法中或方法定义的小括号里面
2, 内存位置
成员变量: 在堆内存中
局部变量: 在栈内存中
3, 生命周期
成员变量: 随着对象创建而产生,随着对象的消失而消失
局部变量: 随着方法的调用而产生,随着方法调用结束而消失
4,有无默认值
成员变量: 有默认值, 整数0,小数0.0 字符 ‘\u0000’ 布尔 false 引用数据类型 null
局部变量: 没有默认值,使用的时候,必须先赋值
7、static关键字都能修饰什么? 都有什么特点
1, 修饰成员变量, 叫静态变量 具有共享性,节省内存空间
2, 修饰方法: 静态方法: 可以直接使用类名.进行调用,
3, 修饰代码块: 静态代码块 ,给静态变量进行赋值
4, 修饰类: 静态内部类
8 、什么是封装,为什么要封装
就是将事物的属性和行为 通过 private进行修饰,外界无法直接进行访问,需要提供公共的setter 和 getter 进行间接的访问
提高代码的安全性和复用性
9, 什么是面向对象,请详细说明(分别解释 封装 继承和多态)
面向对象是一种以事物为中心的编程思想,具体分为封装继承和多态
封装: 通过private关键字将事物的属性和行为封装起来,对外通过setter和getter提供公共的访问方式,提高了代码的安全性
继承: 让类与类之间产生子父级的关系,子类可以去使用父类的资源,提高了代码的复用性
多态: 事物的多种形态,发生多态的前提,必须有继承,有方法的重写,有父类的引用指向子类对象
10, overload和override的区别
overload 是重载 要求在同一个类中,方法名相同,参数列表不同与返回值类型无关
参数列表不同表现在: 个数不同, 数据类型顺序不同,数据类型不同
override是重写 要求发生在子父级的继承关系中,方法名相同,参数列表相同,返回值类型是父类返回值类型本身或其子类, 异常等于父类本身异常类型或小于父类本身异常
11, final 和 finally的区别
final 是权限修饰符, 表示最终的, 能修饰 变量, 方法,和类
修饰变量: 变成了常量
修饰方法: 变成了最终的方法,不能被重写,但是可以被正常调用
修饰类: 变成的最终的类,不能有子类,但是可以被正常创建对象
finally 是一个代码块,只能与我们的 try代码块连用,表示无论代码是否发生异常,finally里面的代码都要执行
12, this和super都能用到哪些地方
this | super |
可以区分成员变量与局部变量重名问题,如果本类没有这个成员变量,也可以调用父类的成员变量 | 可以区分本类成员变量与父类成员变量重名问题,只能调用父类的成员变量 |
可以调用本类的成员方法,如果本类没有这个成员方法,也可以调用父类的成员方法 | 只能调用父类的成员方法 |
可以通过this() 或 this(参数) 让其本类的构造方法直接相互调用 | 子类通过super() 或 super(参数) 调用父类的构造方法 |
13, 接口与抽象类的区别
抽象类 接口
有成员变量 没有成员变量,都是常量默认被 public static final修饰
实现方法和抽象方法 jdk1.8之前都是抽象方法 jdk1.8之后可以有静态和默认方法
有构造方法 没有构造方法
14, 静态变量与成员变量的区别
内存位置 : 静态变量在方法区中,成员变量在堆内存中
生命周期 : 静态变量随着.class文件加载而产生,随着.class文件结束而结束; 成员变量随着对象的创建而产生,随着对象的结束而结束
调用方式: 静态变量既可以通过 类名.直接进行调用, 也可以通过对象名.进行调用; 成员变量只能通过 对象名.进行访问
15, throw和throws 的区别
throw 是具体抛出一个异常对象,在方法的内部, 后面有且只能有一个异常对象,代码一旦遇到了throw证明出现了问题,代码就会停止
throws 是异常的声明, 在方法定义的小括号后面,后面可以跟多个异常的类型,方法有throws,代码不一定发生异常
16 String,StringBuilder 与 StringBuffer 的区别
String是不可变的字符串序列, StringBuilder和StringBuffer是可变的字符串序列
StringBuilder 是 线程不安全的,从jdk1.5版本开始的,效率高
StringBuffer 是 线程安全的,从jdk1.0开始的,效率低
17, == 和 equals的区别
== 既可以比较基本数据类型,也可以比较引用数据类型,比较基本数据类型,比较的是具体的值,比较引用数据类型比较是地址值
equals只能比较引用数据类型,重写之前比较的是引用数据类型的地址值,重写之后,比较的是引用数据类型的内容
18, 包装类拆箱装箱
基本数据类型转换成对应的引用数据类型,为装箱,把引用数据类型转换为对应的基本数据类型为拆箱,jdk1.5之后可以实现自动拆装箱
19,请说出5个异常类型
数组索引下标越界异常,空指针异常,文件找不到异常,类型转换异常,算数异常
ArithmeticException 算术异常,如除以0
ArrayIndexOutOfBoundsException 数组下标出界
IOException I/O异常的根类
FileNotFoundException 不能找到文件
NullPointerException空指针异常
20, HashSet 的去重原理
不同的对象,地址值肯定不同,地址不同,直接插入数据成功
如果地址值相同,不能证明是同一个对象
需要通过equals 的方法继续比较,比较的是对象中的每一个内容
如果内容相同证明是同一个对象,插入失败
如果内容不同,证明不是同一个对象,数据插入成功
21, jvm内存划分
jvm分为方法区,堆内存,栈内存,本地方法栈,程序计数器,
方法区: 主要存.class字节码文件,静态变量,字符串常量
堆内存: 主要存new出来的对象,数组也在堆内存中
栈内存: 存正在执行的方法,局部变量也在栈内存中
22, 构造方法是否可以被重写?为什么?
构造方法不能被重写,因为构造方法要求,方法名与类名保持一致,
23, Collection 与 Collections 的区别
collection是单列集合的顶层父接口,Collections 是处理集合的工具类
24, 集合与数组的区别
集合与数组都是容器
数组既可以存基本数据类型也可以存引用数据类型,数组的长度固定不能发生改变
集合只能存引用数据类型,可以存任意的引用数据类型,长度可变
25, 多线程的三种实现方式
1, 继承Thread,重写run方法,最后创建Thread 的子类对象,调用start()方法开启线程任务
2, 实现Runnable接口,重写run方法,创建Runnable 的实现类对象,通过Thread 的构造传递,调用start() 方法开启线程任务
3, 实现Callable接口,重写call方法,创建Callable的实现类对象,将Callable 的实现类对象,传递到FutureTask的构造方法中,最后将FutureTask传递到Thread 的构造方法中,通过start()方法开启线程任务
26, 多线程的生命周期
多线程的生命周期有5种状态,分别是 新建态,就绪态,运行态,阻塞态和死亡态
新建态: 刚new出来的时候
就绪态: 已经.start(),没有获取到cpu资源
运行态: 获取到cpu资源进入运行态
阻塞态: 线程遇到sleep(),遇到wait() 或者io流阻塞让cpu资源丢失
死亡态: 线程正常结束,线程任务出现异常
27, TreeSet和HashSet的区别
TreeSet 和 HashSet 一样都有 无序无索引不能重复
TreeSet 可以进行根据一定的排序规则进行排序
HashSet 没有排序的规则
28, TreeMap如何去重
TreeMap去重 是利用key值的 compareTo 方法,compareTo方法为0,就证明是同一个元素,进行去重
29,所学习的io流一共分为几类
IO流根据流向 有输入流和输出流两种
IO流根据类型分类有 字节输入输出流 和 字符输入输出流
字节输入流 InputStream
字节输出流 OutputStream
字符输入流 Reader
字符输出流 Writer
30, 目前学习的最高效的文件复制方式
高效缓冲流+字节数组 字节数组的大小一般是1024的倍数 最高一般不超过8倍
31,String abc = new String("abc")有几个对象
有两个对象,一个对象"abc"在方法区的字符串常量池中,一个在堆内存中,是new String()
32,map的两种遍历方式
map不能直接遍历,想要遍历有两种间接的方式
1, 通过map方法的 keySet() 方法, 将map中的key 取出来,存到set集合里面,之后遍历set集合,通过map中的 get(key key) 方法取出每一个value值
2, 通过map中的 entrySet() 方法, 将map中的key 和 value 存到 map的内部类 entry中,之后将entry对象存到set集合里面,之后通过遍历set集合,通过entry内部类中的 getKey, 和 getValue 获取每一个值
33,HashMap与HashTable 的区别
HashMap 是线程不安全的,允许有空的键值对
Hashtable 是线程安全的,不允许有空的键值对
34,什么是反射?
反射就是在程序运行时期,动态的获取类中成员信息(构造方法,成员变量,成员方法)的过程!
35, 字节流与字符流有什么区别
字节流是万能流,可以处理任意的文件
字符流不是万能流,只能处理纯文本文件
36,
扩展:
1, Java的线程池有哪些?那你最常用的线程池是哪个?
newCachedTheadPool 动态的线程池
newFixedThreadPool 固定线程数的线程池
newSingleThreadExecutorPool 固定只有一条线程的线程池
newSCheduledThreadPool 以固定频率执行的线程池
一般来说,这四种线程池都不使用,一般使用ThreadPoolExecutor来自定义线程池
2, sleep wait notify notifyAll的作用
sleep方法是Thread类的静态方法
调用sleep方法可以让当前正在运行的线程进入睡眠状态,即暂时停止运行指定的单位时间。并且该线程在睡眠期间不会释放对象锁。
wait是Object提供的一个方法
调用wait方法可以让当前线程进入等待唤醒状态,并释放锁。该线程会处于等待唤醒状态直到另一个线程调用了object对象的notify方法或者notifyAll方法。
notify也是Object提供的一个方法
当其它线程调用该对象的notifyAll()方法(唤醒所有wait线程)或notify()方法(只随机唤醒一个wait线程),被唤醒的的线程便会进入该对象的锁池中,锁池中的线程会去公平竞争该对象锁。
3,HashMap的底层数据结构是什么?那什么时候变为红黑树呢?
在JDK1.7的时候是数组+链表;
在JDK1.8的时候是数组+链表+红黑树;
当链表的长度大于8的时候,就会变成红黑树
4, final,finally,finalize有什么区别?
final用于修饰类,变量,方法
1.final修饰类,类不能被继承了。
2.final可以修饰方法,方法就不能被重写了。
3.final修饰变量总规则:变量有且仅能被赋值一次。
finally用于try-catch捕获异常,无论代码是否发生异常,finally中的代码一定会被执行,通常用来关闭资源
finalize属于Object类中的一个方法,当对象被回收的时候,会调用此方法
JavaSE常见面试题相关推荐
- 【JAVA秒会技术之秒杀面试官】JavaSE常见面试题(四)
[前言]别人都在你看不到的地方暗自努力,在你看得到的地方,他们也和你一样显得游手好闲,和你一样会抱怨,而只有你自己相信这些都是真的,最后,也只有你一个人继续不思进取 -- [下载]本人刚学习Jav ...
- JAVASE常见面试题总结
在这里插入代码片# JAVASE复习 是否可以从一个static方法内部发出对非static方法的调用? 不可以.因为非static方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行 ...
- 【JAVA秒会技术之秒杀面试官】JavaSE常见面试题(二)
21.在Java中,如何跳出当前的多重嵌套循环? 答:在最外层循环前加一个标记如A,然后用break A;可以跳出多重循环.(Java中支持带标签的break和continue语句,作用有点类似于C和 ...
- 300+ Java常见面试题总结【JavaPub版】
点赞再看,养成习惯 答案解析见文末 我是JavaPub,专注于面试.副业,技术人的成长记录. 这份[Java常见面试题总结]我想准备很久了,前面做面试官,后来自己也面了很多一线二线互联网公司,希望通过 ...
- mysql关于时间的面试题,mysql时间设置默认值MySQL常见面试题
1.limit(选出10 到20 条) select * from students order by id limit 9,10; 2.MySQL 会使用索引的操作符号 =,>,=,betwe ...
- java类型转换面试题_JavaSE:数据类型之间的转换(附常见面试题)
数据类型之间的转换 分为以下几种情况: 1)低级到高级的自动类型转换: 2)高级到低级的强制类型转换(会导致溢出或丢失精度): 3)基本类型向类类型转换: 4)基本类型向字符串的转换: 5)类类型向字 ...
- Spring常见面试题及答案汇总1000道(春招+秋招+社招)
Spring面试题以及答案整理[最新版]Spring高级面试题大全(2021版),发现网上很多Spring面试题都没有答案,所以花了很长时间搜集,本套Spring面试题大全,汇总了大量经典的Sprin ...
- Java多线程常见面试题及答案汇总1000道(春招+秋招+社招)
Java多线程面试题以及答案整理[最新版]Java多线程高级面试题大全(2021版),发现网上很多Java多线程面试题都没有答案,所以花了很长时间搜集,本套Java多线程面试题大全,汇总了大量经典的J ...
- MySQL常见面试题及答案汇总1000道(春招+秋招+社招)
MySQL面试题以及答案整理[最新版]MySQL高级面试题大全(2021版),发现网上很多MySQL面试题都没有答案,所以花了很长时间搜集,本套MySQL面试题大全,汇总了大量经典的MySQL程序员面 ...
最新文章
- NGINX由入门到精通:Nginx介绍
- 【Elasticsearch 2.x】issues
- ArrayList构造方法详解-给默认长度的方式
- vmware虚拟机linux 桥接,linux之使用VMWare的桥接模式使主机和虚拟机中系统进行通讯...
- Java Web的web.xml文件作用及基本配置(转)
- matlab 导入元胞,MATLAB导入xls文件以及cell的使用方法
- linux socat rpm,RabbitMQ系列(三)RabbitMQ Server的安装(基于Linux RPM)
- 京东面试官:你是怎么理解 MySQL 的优化原理的?
- vscode git使用_vscode中使用git
- sparkSql使用hive数据源
- PHP7.1 狐教程【旧】不在更新,请点击新连接查看
- python搭建bs架构_bs架构设计方案的.doc
- python爬取网易云音乐_手把手教你用Python网络爬虫获取网易云音乐歌曲
- LayUI分页查询展示数据(SSH框架)
- 2021年的学习Flag:只争朝夕,不负韶华
- Swift教程-视频拍摄教程
- Linux性能分析方法
- 中国制造2025主攻方向是智能制造
- Win11任务栏怎么透明?Win11任务栏全透明设置教程
- Mac在终端下直接运行python.py文件
热门文章
- android surfaceview 背景颜色,android – 设置Surface View的背景颜色
- 苹果开放降级通道_iOS 12.2的验证通道已关闭,两款机型可降级!
- 怎么用matlab画无差别曲线,MATLAB系列第二章初等模型.ppt
- 「硬核讲解」通达信跨周期引用均线指标公式
- 哇!协议和算法竟然不是一回事!千万别再说错了!
- 思维导图 XMind 闯关之路(第05关)插入外框概要
- 8086的储存器编址
- 《构建执法》要点总结
- html5拖拽表单设计器,require+jquery+backbone实现拖拽式报表设计器-拖拽式表单设计器...
- 想玩 NAS? 群晖NAS 的选购 配件搭配以及硬盘 RAID指南