Java面试神技-百万年薪不是梦-持续更新
2020-09-27 11:05:49 0 举报
AI智能生成
Java面试神技-百万年薪不是梦-持续更新
作者其他创作
大纲/内容
Spring
Spring Boot
Spring Cloud
RabbitMQ
Dubbo
Mybatis
Zookeeper
数据结构
算法
Elasticsearch
Kafka
微服务
linux
JavaOOP
什么是B/S、C/S架构?
B/S(Browser/Server),浏览器/服务器程序
C/S(Client/Server),客户端/服务端,桌面应用程序
Java都有哪些开发平台?
java se 主要用在客户端开发
java se 主要用在web应用程序开发
java me 主要在嵌入式应用开发
什么是jdk 、jre
jdk : java development kit ,java开发工具包,是java开发人员需要安装的环境
jre : java runtime environment ,java运行时环境,java程序运行需要的环境
java 语言有哪些特点
简单易学、有丰富的类库
面向对象(Java最重要的特性,让程序耦合度更低,内聚性更高)
与平台无关性(JVM是Java跨平台使用的根本)
可靠安全
支持多线程
面向过程和面向对象的区别
面向过程
较早的编程思想,站在过程的角度思考问题,强调的是功能行为,功能的执行过程,即先后顺序
一个功能我们都使用函数(方法)把这些步骤一步步实现,使用的时候依次调用函数即可
面向对象
一种基于面向过程的编程思想,顾名思义就是站在对象的角度思考问题,我们把多个功能合理放到不同的对象里,强调的是具备某些功能的对象
具体某种功能的实体称为对象,面向对象最小的程序单元是 “类”,面向对象更加符合常规的思维方式,稳定性好,可重用性强,适合开发大型软件产品,可维护性强
在软件工程上,面向对象可以使工程更加模块化,实现更低的耦合,更高的内聚
什么是数据结构?
计算机保存,组织数据的方式
Java的数据结构有哪些?
线性表:ArrayList
链表:LinkedList
栈:Stack
队列:Queue
图:Map
树:Tree
什么是OOP?
面向对象编程
类与对象的关系?
类是对象的抽象,对象是类的具体。类是对象的模板,对象是类的实例
Java中有几种数据类型?
整形:byte,short,int,long
浮点型:float,double
字符型:char
布尔型:boolean
Java中标识符的命名规则?
标识符的含义
指程序中我们自己定义的内容,比如类、方法、变量的名称,都是标识符
命名规则(硬性要求)
标识符可以包含英文字母,0-9,$ 以及 _
标识符不能以数字开头
标识符不能是关键字
命名规范(非硬性要求)
类名规范:首字母大写,后边每个单词首字母大写(大驼峰式)
方法名、变量名规范:首字母小写,后边每个单词首字母大写(小驼峰式)
instanceof 关键字作用
instanceof严格来说是java中的一个双目运算符,用来测算一个对象是否为一个类的实例
例:boolean flag = object instanceof Class;
上边object为一个对象,Class表示一个类或者接口,当object 为Class的对象,或者是其直接或间接子类、实现类,都返回true
编译器会检查object能否转为Class类型,如果不能则报错,编译不通过。如果不能确定则编译通过,具体看运行时定
int a = 0;
System.out.println(a instanceof Integer);//编译不通过,a必须为引用类型,不能是基本类型
Integer b = new Integer(0);
System.out.println(b instanceof Integer);//编译通过,返回true
System.out.println(null instanceof Object); //返回 false,在java se 规范中规定,如果为 null 返回 false
System.out.println(a instanceof Integer);//编译不通过,a必须为引用类型,不能是基本类型
Integer b = new Integer(0);
System.out.println(b instanceof Integer);//编译通过,返回true
System.out.println(null instanceof Object); //返回 false,在java se 规范中规定,如果为 null 返回 false
什么是隐式转换?显式转换?
显式转换就是类型强转,把一个大类型的数据强制赋值给小类型的数据
隐式转换就是大范围的变量能够接受小范围的数据
隐式转换、显式转换其实就是自动类型转换和强制类型转换
char能不能转成int? 能不能转成string?能不能转成double
char在java中是一个特殊的类型,它的int值从1开始 ,共有2的16次方个数据
char < int < long < float < double :char类型可以隐式转换int,long,float,double。不能隐式转换为string ,如果char要转为short ,byte 要强转
什么是拆装箱?
装箱就是自动将基本数据类型转换为包装器类型(int -> Integer ):调用的方法是 Integer.valueOf(int)
拆箱就是自动将包装器类型转换为基本数据类型(Integer -> int):调用的方法:Integer.intValue()
在java SE5之前,如果要生成一个数值为10Integer对象 必须这样进行:Integer i = new Integer(10);
在 java se5 之后,提供了自动装箱特性,只需要这样:Integer i = 10;
面试题:以下代码会输出什么?
Integer a1 = 100;
Integer a2 = 100;
Integer a3 = 200;
Integer a4 = 200;
System.out.println(a1 == a2);//true
System.out.println(a3 == a4);//false
Integer a2 = 100;
Integer a3 = 200;
Integer a4 = 200;
System.out.println(a1 == a2);//true
System.out.println(a3 == a4);//false
为什么呢?
因为Integer 类里边有一个缓存存储[-128 ~ 127]之间的值,在这之间则从缓存取出,在之外则重新创建对象
Java中包装类都是哪些?
byte: Byte
short: Short
char: Character
int : Integer
long : Long
float: Float
double: Double
boolean : Boolean
一个Java类中包含哪些内容?
属性、方法、内部类、构造方法、代码块
针对浮点型数据运算出现的误差问题,如何解决?
使用Bigdecimal类进行浮点型数据运算
面向对象的特征有哪些方面?
抽象
抽象是将一类对象的共同特性总结出构造类的过程,包括数据抽象和行为抽象两类,抽象只关注对象的行为和属性,不关注这些行为的具体细节
继承
继承是从已有类得到继承信息,创建新类的过程。提供继承信息的类被称为父类(超类、基类)。得到继承信息的类被称为子类(派生类)。继承让变化中的软件系统有了一定的延续性,同时继承也是封装程序中可变因素的重要手段
封装
通常认为封装是把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义的接口。面向对象的本质是将现实世界描绘成一系列完全自治封闭的对象。我们在类中方法就是对实现细节的封装,我们编写的一个类就是对数据和数据操作的封装,可以说封装就是隐藏一切可隐藏的东西,只向外界提供最简单的编程接口
多态
多态性指允许不同子类型对象,对同一消息做出不同反应。简单的说就是用同样的对象引用调用同样的方法,但是做了不同的事情。多态性分为编译时多态性和运行时多态性
方法重载(overload)实现的是编译多态性。方法重写(override)实现的是运行时的多态性
访问修饰符
public
所有可访问
protected
当前类、同包、子类 可访问
default
当前类、同包 可访问
private
当前类 可访问
String 是最基本的数据类型么?
不是。java中基本的数据类型只有8种:byte/short/char/int/long/float/double/boolean。 枚举也是一种特殊的引用类型
float f = 3.4; 是否正确?
不正确。3.4 是双精度数,将双精度(double)赋值给浮点数(float),是下转型,会造成精度丢失,因此需要强制类型转换:float f = (float)3.4; 或者 float f = 3.4f;
short s1 = 1;
s1 = s1 +1;正确么?
short s1 = 1; s1 +=1;正确么?
s1 = s1 +1;正确么?
short s1 = 1; s1 +=1;正确么?
short s1=1;s1=s1+1;
由于1 是int 类型,s1+1结果也是int型,需要强制类型转换才能赋值给short
short s1=1;s1+=1;
正确。s1+=1 相当于 s1 = (short)(s1 + 1); 其中隐含强制类型转换
重载 和 重写的区别
重载:overload
在同一个类。方法名相同,参数个数或者类型或者顺序不同,返回值类型无要求
重写:override
发生在父类和子类之间。
方法名、参数列表、返回类型必须相同
子类访问修饰符必须大于等于被重写方法的访问修饰符
重写方法一定不能申明新的检查异常或者比父类更宽泛的检查型异常
equals 和 == 的区别
==
比较的是变量(栈)内存中存放的对象的(堆)内存地址,用来判断内存地址是否相同,即是否是指同一个对象,比较的是真正意义上的指针操作。
两边的操作数必须是同一类型(可以是父子类之间)才能编译通过
比较的是地址。如果是具体的阿拉伯数字,值相等则true。如:
int a = 10;long b =10;double c = 10.0;都是相等的为true.因为它们指向的都是地址为10的堆
int a = 10;long b =10;double c = 10.0;都是相等的为true.因为它们指向的都是地址为10的堆
equals
用来比较对象内容是否相同,由于所有的类都是集成Object类,所以适用所有对象。如果没有对equals方法经行重写的话,调用的还是Object类中的equals方法,而Object中的equals方法返回的是 == 的判断
i++ 和 ++i 的区别
i++ 先赋值,再计算
int i = 1;
System.out.println(i++); //输出 1
System.out.println(i++); //输出 1
++i 先计算再赋值
int i = 1;
System.out.println(++i); //输出 2
System.out.println(++i); //输出 2
程序的结构有哪些
顺序结构
选择结构
循环结构
数组实例化有几种方式
new int[] {1,2,3}; //初始化值
new int[3]; //初始化长度。值都是类型对应的默认值0
Java中各种数据默认值
byte / short / int / long 都是 0
char : ''
float / double : 0.0
boolean : false
对象: null
Java 常用包有哪些
java.lang
java.util
java.io
java.sql
java.math
java.awt
java.net
Object 类常用方法有哪些
equals
hashcode
toString
wait
notify
clone
getClass
Java中有没有指针
有,但是被隐藏了,开发人员无法直接操作,由jvm来操作
Java中是值传递还是引用传递
理论上说,Java都是引用传递。对于基本数据类型,传递的是值的副本,而不是值本身。对于对象类型,传递是对象的引用
实例化数组后能不能改变数组长度
不能,数组实例化后长度是固定的
假设数组有5个元素,如果对数组进行反序,该如何做?
从后到前循环遍历每个元素,将取出的元素依次放入新数组
形参与实参的区别?
形参(parameter)
全称 “形式参数”,是在定义函数名和函数体的时候使用的参数,目的是用来接收调用该函数是传入的参数,调动函数时,实参将传递给形参,因此必须注意实参的个数,类型必须与形参一一对应,并且实参要有确定的值
实参(argument)
全称“实际参数”,是在调用时传递给函数的参数,实参可以是常量、变量、表达式、函数等,无论实参是何种类型,进行函数调用时必须有确定的值,以便把这些值传递给形参。因此预先用赋值、输入等办法使实参获得确定值
构造方法能不能显式调用?
不能把构造方法当普通方法调用,只有在创建对象时它才会被系统调用
Java集合/泛型
Java异常
Java IO/NIO
反射
序列化
注解
多线程、并发
JVM
MySQL
Redis
Memcache
MongoDB
0 条评论
下一页