Java面试题解析(一)
本文是面试题目系列的第一篇,题目主要来自 GitChat 上一个课程,在此特别记录自身想的答案和在网上查询的结果,分享出来,大家共同学习。如果有不对的地方,欢迎大家指出。
Java基础
JDK 和 JRE有什么区别
JDK:Java Development Kit,java开发包,其包括JRE和一些Java工具,如javac,javap等
开发环境(编译,调试,分析工具)和运行环境
JRE:Java Runtime environment,Java运行时环境,其包括JVM和Java运行过程中所需要的一些核心类库.如lang,util等常用的...
--
== 和equals的区别是什么
对于基本类型来说,== 是用来比较两者的字面值是否相同的,基本类型没有equals方法
对于引用来说,== 是用来比较两者的引用是否相同,equals是用来比较引用指向的对象是否相同的
自定义对象如果需要比较两者是否相同,需要开发者自己手动重写equals()方法,一般重写这个方法也会带着重写hashcode()方法
两个对象的 hashCode() 相同,则 equals() 也一定为 true,对吗
不对,hashcode()只是将对象按照一定的Hash算法生成对应的16进制字符串,因为有长度的限制,因此必定会出现重复的情况,但他们的equals()此时并不一定相同.
final 在 java 中有什么作用
final是Java中的一个关键字.
- 定义基本变量:变量是常量,在第一次声明值后就无法修改.
- 定义对象:对象的引用无法修改,即无法指向其他的对象,但对象内部的值可以修改
- 定义方法:方法无法被重写,一般用来表示方法已经完善了,不希望别人重写该方法
- 定义类:类无法被继承,Java中的String等类就无法被继承.
java 中的 Math.round(-1.5) 等于多少
public void testMath(){
log.info("-1.8:,{}",Math.round(-1.8));
log.info("-1.5:,{}",Math.round(-1.5));
log.info("-1.2:,{}",Math.round(-1.2));
log.info("1.2:,{}",Math.round(1.2));
log.info("1.5:,{}",Math.round(1.5));
log.info("1.8:,{}",Math.round(1.8));
}
// 运行结果
2019-04-04 10:59:32.599 INFO 8076 --- [ main] com.jrookie.service.DemoServiceTest : -1.8:,-2
2019-04-04 10:59:32.600 INFO 8076 --- [ main] com.jrookie.service.DemoServiceTest : -1.5:,-1
2019-04-04 10:59:32.600 INFO 8076 --- [ main] com.jrookie.service.DemoServiceTest : -1.2:,-1
2019-04-04 10:59:32.600 INFO 8076 --- [ main] com.jrookie.service.DemoServiceTest : 1.2:,1
2019-04-04 10:59:32.600 INFO 8076 --- [ main] com.jrookie.service.DemoServiceTest : 1.5:,2
2019-04-04 10:59:32.601 INFO 8076 --- [ main] com.jrookie.service.DemoServiceTest : 1.8:,2
通过结果可以看出除了-1.5都像是四舍五入的结果,但通过分析源码可以得出
其结果是数据+0.5再向下取整即可
String 属于基础的数据类型吗
String属于Java核心类库的对象
/**
* 内部由不可变的char数组来实现,这也解释了为什么String是不可变的类型
*/
public final class String
implements java.io.Serializable, Comparable<String>, CharSequence {
private final char value[];
java 中操作字符串都有哪些类?它们之间有什么区别
- String:最基本的字符串类型,创建后不可变
- StringBuilder:其内部的char[]数组都是可变,因此是可变类型
- StringBuffer:也是可变类型,但其内部大量使用了synchronized关键字,表明内部的方法都是线程安全的.
因此在性能比较上:String > StringBuilder > StringBuffer
但如果想要用可变类型,可以直接使用StringBuffer,这个是线程安全的,且性能和StringBuilder相比,并没有差很多.
String str="i"与 String str=new String(“i”)一样吗
不一样,String str="i",是声明一个引用直接指向字符串常量池,而String str=new String(“i”),会生成一个堆对象,引用指向该对象,该对象再指向字符串常量池.
如何将字符串反转
- 数组的方式引入第三方数据,作为存储
- 直接在原数据上进行操作.可以考虑使用异或的方式来交换数据,效率更高
StringBuilder 和 StringBuffer 中封装好了对应的反转操作,可以直接使用
String 类的常用方法都有那些
抽象类必须要有抽象方法吗
根据下面的代码实例,表明应该是可以的
public abstract class AbstractDemoClass {
public void test(){
System.out.println("hello,world");
}
}
普通类和抽象类有哪些区别
- 抽象类不可以被实例化
普通类不能包含抽象方法
抽象类能使用 final 修饰吗
不可以,抽象类必须要有子类来继承它,实现其中的抽象方法,才可以实例化,如果用final来修饰的话,该类就无法被继承,那么这个抽象类就没有用处了.
接口和抽象类有什么区别
- 抽象类作为类只可以单继承,但接口可以实现多个
- 抽象类可以有方法的实现,Java在8之前不能有方法的实现(Java8之后提供了一个默认方法实现的功能)
- 接口中的方法全部默认为pubic的,抽象类中可以自定义
抽象类可以有构造函数,接口不能有构造函数
java 中 IO 流分为几种
分为字节流和字符流,其中每个又细分为输入和输出,因此一共有四种流,分为为InputStream,OutputStream,Reader,Writer.
在处理字节流和字符流之间的转换问题时,注意编码的问题.
BIO、NIO、AIO 有什么区别
BIO
同步阻塞模型,A调用B,A需要收到B的返回结果才可以继续执行,B去立即执行
NIO
非阻塞IO,A调用B,A不用收到结果就可以继续执行
AIO
异步非阻塞IO,A调用B,B返回给A保证会执行,然后A继续干其他事,当B干完了后通知A,再让A来处理数据
操作基于事件和回调机制
Files的常用方法都有哪些
对应collection的Collections类,是对File的操作类,封装了一些常用方法:
- Files. exists():检测文件路径是否存在。
- Files. createFile():创建文件。 [ createFile():创建文件。]
- Files. createDirectory():创建文件夹。
- Files. delete():删除一个文件或目录。
- Files. copy():复制文件。
- Files. move():移动文件。
- Files. size():查看文件个数。
- Files. read():读取文件。
- Files. write():写入文件。
Java面试题解析(一)的更多相关文章
- 509道Java面试题解析:2020年最新Java面试题
<Java面试全解析>是我在 GitChat 发布的一门电子书,全书总共有 15 万字和 505 道 Java 面试题解析,目前来说应该是最实用和最全的 Java 面试题解析了. 我本人是 ...
- 2019年 Java 面试题解析
2019年 Java 面试题解析 转载地址:https://www.cnblogs.com/Zz-maker/p/11193930.html 作者: Zz_maker 包含的模块: 本文分为十九个模块 ...
- Java笔试题解析(二)——2015届唯品会校招
曾经总是看别人写的笔经面经.今天自己最终能够写自己亲身经历的一篇了 T-T. 前阵子去了唯品会的秋招宣讲会,华工场(如今才知道原来找家互联网公司工作的人好多).副总裁介绍了VIP的商业模式是逛街式的购 ...
- 阿里最新38道Java面试题解析(MyBatis+消息队列+Redis)
一.谈谈你对 MyBatis 的理解? 1. Mybatis是一个半ORM(对象关系映射)框架,它内部封装了 JDBC,开发时只需要关注 SQL 语句本身,不需要花费精力去处理加载驱动.创建连接.创建 ...
- 《Java面试全解析》505道面试题详解
<Java面试全解析>是我在 GitChat 发布的一门电子书,全书总共有 15 万字和 505 道 Java 面试题解析,目前来说应该是最实用和最全的 Java 面试题解析了. 我本人是 ...
- 100+经典Java面试题及答案解析
面向对象编程(OOP) Java是一个支持并发.基于类和面向对象的计算机编程语言.下面列出了面向对象软件开发的优点: 代码开发模块化,更易维护和修改. 代码复用. 增强代码的可靠性和灵活性. 增加代码 ...
- Java中有关构造函数的一道笔试题解析
Java中有关构造函数的一道笔试题解析 1.详细题目例如以下 下列说法正确的有() A. class中的constructor不可省略 B. constructor必须与class同名,但方法不能与c ...
- 100多道经典的JAVA面试题及答案解析
面向对象编程(OOP) Java是一个支持并发.基于类和面向对象的计算机编程语言.下面列出了面向对象软件开发的优点: 代码开发模块化,更易维护和修改. 代码复用. 增强代码的可靠性和灵活性. 增加代码 ...
- 《Java面试全解析》1000道面试题大全详解(转)
<Java面试全解析>1000道 面试题大全详解 本人是 2009 年参加编程工作的,一路上在技术公司摸爬滚打,前几年一直在上海,待过的公司有 360 和游久游戏,因为自己家庭的原因,放弃 ...
随机推荐
- 虚拟机下安装 CentOS 7 的几个小问题
※ 网络问题(Destination Host Unreachable) 安装时网络选择的"桥接"模式, 安装完毕,并配置IP地址后,发现只能ping通自己,局域网内的其他IP无法 ...
- 契约式设计(DbC)感想(二)
契约式设计6大原则的理解 在<Design by Contract原则与实践>中,作者定义了契约式设计的6大原则: 区分命令和查询: 将基本查询和派生查询区分开: 针对每个派生查询,设定一 ...
- H1B工作签证·绿卡:美国留学的两个关键步骤
月20日在留美学生家长群聚会上的发言稿一.H1B签证系美国最主要的工作签证类别,发放给美国公司雇佣的外国籍有专业技能的员工,属于非移民签证的一种.持有H1B签证者可以在美国工作三年,然后可以再延长三年 ...
- centOS linux 下PHP编译安装详解
一.下载PHP源码包 wget http://php.net/distributions/php-5.6.3.tar.gz 二.添加依赖应用 yum install -y gcc gcc-c++ ...
- 迅为I.MX6开发板工业级嵌入式开发平台
迅为-i.MX6开发板是是基于ARM Cortex™-A9架构的高扩展性多核系列应用处理器, i.MX6系列芯片而且根据应用场合的不同,提供了可供选择的单核.双核和四核产品供客户选择.i.MX6系列的 ...
- 15年第六届蓝桥杯第七题_手链样式_(stl_string)
手链样式 小明有3颗红珊瑚,4颗白珊瑚,5颗黄玛瑙.他想用它们串成一圈作为手链,送给女朋友.现在小明想知道:如果考虑手链可以随意转动或翻转,一共可以有多少不同的组合样式呢? 请你提交该整数.不要填写任 ...
- [bzoj4816][Sdoi2017]数字表格 (反演+逆元)
(真不想做莫比乌斯了) 首先根据题意写出式子 ∏(i=1~n)∏(j=1~m)f[gcd(i,j)] 很明显的f可以预处理出来,解决 根据套路分析,我们可以先枚举gcd(i,j)==d ∏(d=1~n ...
- sqllite相关总结
一,sqlite 简介 前面写了一篇博文讲如何在 C# 中使用 ADO 访问各种数据库,在移动开发和嵌入式领域也有一个轻量级的开源关系型数据库-sqlite.它的特点是零配置(无需服务器),单磁盘文件 ...
- sqlite3接口简要说明
本文介绍一下SQLite C/C++接口. 早期的SQLite C/C++接口只有5个接口函数, 很容易学习. 新版本的SQLite新增了很多功能, 目前大概有185个API接口.本文介绍一些核心的A ...
- ''tensorflow.python.framework.errors_impl.ResourceExhaustedError: OOM when allocating tensor with shape[?]'' 错误分析
这是tensorflow 一个经常性错误,错误的原因在于:显卡内存不够. 解决方法就是降低显卡的使用内存,途径有以下几种措施: 1 减少Batch 的大小 2 分析错误的位置,在哪一层出现显卡不够,比 ...