前言
有朋友反映,最近的工作面试难度有所提升,为了帮助大家节省时间,收集了今年上半年接触到的知名企业Java面试题目,资料相当丰富。经过半个多月的努力,将牛客网上关于互联网大厂的Java面试常见问题整理成了PDF文档。
获取方法在文章结尾
涉及到的核心内容包含:基础编程、MyBatis框架、分布式协调、服务治理、搜索技术、缓存系统、数据存储、轻量级框架、快速启动、微服务架构、消息队列、流处理平台、操作系统等,题目数量累计超过一千道。
JAVA基础
Java代码一次编写、到处运行
Java虚拟机能够使代码在各种平台上运行,各个操作系统都配备有专属的JVM版本。
程序执行之前,JVM需要将编写的Java代码转换成字节码,这种编码方式是JVM能够理解的标准格式。
程序执行期间,Java类加载器首先负责载入字节码文件,Java解释器接着将字节码转换成操作系统能够理解的机器指令,以便操作系统得以实施运行。为了提升Java程序的执行效率,研发了JIT(即时编译器),它会在初次编译时,将字节码对应的机器指令进行缓存,这样在下一次执行时可以直接调用。
Java文件里可以有多个类吗(不包含内部类)?
一个Java文档可以包含若干个类定义,不过其中仅能有一个类使用public关键字声明;
倘若这份文档里有以public修饰的类别,那么这个类别的称号务必和对应的Java文档的标题一致。
Java访问权限
Java编程语言里包含三种权限限定词,分别是公开的,受保护的,以及私有的。
修饰目标时应用这些限定词,能够构成四种不同的存取界限,分别是公开的,私有的,受保护的,以及无修饰的默认状态。
修饰成员变量/方法时:
private:该成员可以被该类内部成员访问;
该成员在本类内部可以被调用,同包的其他类也能调用,访问权限不受限制。
该成员具备多重可访问性,它允许本类中的成员进行访问,同时也能被同包的其他类所访问,并且它的子类同样拥有访问权限。
public:该成员可以被任意类访问。
修饰类时:
default:该类可以被同一包下的其他类访问;
public:该类可以被任意包下,任意类访问。
Java数据类型
Java数据类型包括两大类:基本数据类型,引用数据类型。
基本数据类型共计八个,能够划分为四个组别:第一组是整数类别,包含byte、short、int、long这四种;第二组是浮点类别,由float、double组成;第三组是字符类别,只有char一种;第四组是布尔类别,仅含boolean。除了布尔类型之外,其余类型都可以当作数组类型来对待,并且支持类型间的转换。
引用形式即为对某个事物的指向,依据被指向事物的不同,能够细分为数组式、类别式、界面式这几种引用类别。本质上,这不过是借助指针,来指向堆内存中对象所占据的地址区域。
基本数据类型所占的内存空间:
字节指一个单位包含八位二进制数,数值区间介于负八十二到正八十一之间。
短整型占用两个字节,即十六位,其数值区间介于负三万二千零七十六到三万二千零七十五之间。
整数类型占用四个字节的存储空间,属于三十二位体系,其数值区间介于负二亿一千万零八百七十九与正二亿一千万零八百七十八之间。
长整形占用八个字节,相当于64位,数值区间介于负二倍六十三次方到正二倍六十三次方减一之间。
浮点数类型占用四个字节的存储空间,属于32位数据,其数值上限为正三十四万乘以一亿,下限为负三十四万乘以一亿。
双精度浮点数:占用八个字节,相当于64位,数值区间在负一乘以十的三十又八次方到正一乘以十的三十又八次方之间;
字符类型占用两个字节,即十六位,其表示的数据区间从十六进制的0到FFFF,包含所有可能的数值组合。
布尔值类型,各个Java虚拟机的具体执行方式不一样,不存在统一的标准设定。
全局变量(成员变量)和局部变量
Java语言里不存在全局变量,这是C语言里的一个用法,Java中与之对应的概念称作成员变量。
成员变量:
成员变量是在类的范围内定义的变量;
成员变量有默认初始值;
非static修饰的成员变量也称作对象属性,存放在对象对应的堆空间里,其存在时间与对象一致。
静态修饰的成员变量也称作类型变量,存放在方法区域里,其存在时间与所属类一致。
局部变量:
局部变量是在方法内定义的变量;
局部变量没有默认初始值;
局部变量存放在栈内存里,当其使用区间终止时,相应的存储空间会自行清空。
为什么要有包装类?
Java是一种以对象为中心的语言,其核心思想是“万物皆对象”。然而八种基本数据类型并不具备对象特性,为了弥补这一不足,Java为每种基本数据类型创建了相应的引用类型,即包装类。
自动装箱与自动拆箱是JDK1.5提供的功能。
自动打包过程中,能够将一种原生数据直接转存到相应的封装类型里面去,
自动拆箱功能允许将包装类型的数据直接转换为相应的原始类型,并赋值给后者,这个过程无需额外操作。
实际运用中,比如某个函数的输入参数是封装类,但实际传递的却是原始数据类型,那么通常无需转换,直接将原始值提供给函数即可。
对面向对象的理解
重载和重写的区别
构造方法不能重写
Object中常用的方法
getClass():返回该对象的运行时类;
该方法用于检测两个实体是否相同;依据比较结果返回真值;

计算该对象的哈希码,通常依据内存地址确定
获取该对象的字符串形式,具体实现为返回一个描述该对象的文本信息;
对象被引用计数清零后,垃圾收集进程会执行该函数以释放其占用的系统资源,每个实例仅会触发一次此操作过程,通常不推荐用户手动启动。
hashCode()和equals()的关系
String常用的方法
String与StringBuffer、StringBuilder之间存在差异,首先String是不可变的,每次修改都会生成新的对象,而StringBuffer和StringBuilder是可变的,支持原地修改,其次StringBuffer线程安全,采用同步机制,而StringBuilder线程不安全,效率更高,最后两者都提供append、delete等操作方法,但使用场景有所区别
接口和抽象类有什么区别
Java怎么处理异常
static关键字
泛型
反射
JDK - JVM - JRE
JVM
Java虚拟机即JVM,专门用于执行Java字节码。这种虚拟机存在多种版本,分别适配不同操作系统。所有版本的核心目标在于,通过相同的字节码指令,确保程序输出完全一致。字节码本身,以及JVM的跨平台特性,共同构成了Java语言实现系统无关性的技术基础。
JVM并非单一存在,只要符合JVM规范,任何企业、机构,乃至个人都能创建自己的JVM,我们日常使用的HotSpot VM只是JVM规范下的一个具体实现。
JDK
JDK是一个完备的开发工具包,不仅包含JRE的所有组件,还附带了编译器javac以及工具如javadoc和jdb,可以用来编写和编译Java程序。
JRE
JRE是Java程序运行的基础设施,它包含了执行和编译Java应用所需的一切,涵盖Java虚拟机,Java类库,Java命令以及一些其他的基础组件,不过它并不能用来开发新的应用程序。
Java基本语法
字符串常量和字符型常量的区别
静态函数无法访问非静态成分,continue、break和return各自的功能不同,自增自减操作符各自有特点
静态方法和实例方法的不同重载和重写的区别
==与equals()的区别
MyBatis
1、什么是Mybatis?
2、Mybaits的优点
3、MyBatis框架的缺点
4、MyBatis框架适用场合
5、MyBatis与Hibernate有哪些不同?
6、#{}和${}的区别是什么?
7、当实体类中的属性名和表中的字段名不一样,怎么办?
8、 模糊查询like语句该怎么写?
一个Xml映射文件一般都会配备一个对应的Dao接口,那么这个Dao接口具体是如何运作的?在Dao接口里面,如果存在多个方法,并且这些方法的参数存在差异,这样的方法是否能够实现重载功能?
Mybatis通过什么方式实现分页功能呢?分页插件的工作机制是怎样的?
ZooKeeper
1. ZooKeeper是什么?
2. ZooKeeper提供了什么?
3.Zookeeper文件系统
4. ZAB 协议?
5. 四种类型的数据节点Znode
Zookeeper监控机制,实现数据变动通报功能
7. 客户端注册 Watcher实现
8. 服务端处理Watcher实现
9. 客户端回调Watcher
10. ACL权限控制机制
Dubbo
基础知识
1. 为什么要用Dubbo?
2. Dubbo是什么?
3. Dubbo的使用场景有哪些?
4. Dubbo核心功能有哪些?
架构设计
7. Dubbo的整体架构设计有哪些分层?
8. Dubbo Monitor实现原理?
分布式框架
9. Dubbo类似的分布式框架还有哪些?
10. Dubbo和Spring Cloud有什么关系?
dubbo与spring cloud之间存在哪些不同之处?
12. Dubbo和Dubbox之间的区别?
Copyright C 2018 All Rights Reserved 版权所有 聚贤人力 皖ICP备20008326号-40
地址:安徽省合肥市高新技术开发区人力资源产业园 EMAIL:qlwl@foxmail.com
Powered by PHPYun.