栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

十一郎专栏 | java面试八股文-基础篇

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

十一郎专栏 | java面试八股文-基础篇

最近发现全网都在找八股文,看来最近面试的人真的很多。

铁汁们对于面试八股文的需求很大,但是资料是这里凑一点那里凑一点,不够系统化。

我根据自己的面试经验,以及拉了几个大佬+面试官讨论了一下,基础篇就出来了,可以先看看,有用的话先收藏,再关注,欢迎跟我交流。

1、 java语言具有哪些特点?

(1)java语言是一种高级计算语言,是一种面向对象的编程语言,在java的世界中,万物皆为对象;

(2)跨平台性,可能你听说过java的一句经典的话:Write once and run everywhere,一次编写 ,到处运行,这是为什么呢?java利用java虚拟机运行字节码文件,所以不管是什么系统的平台,只要能对java程序进行编译,都是可以运行的;

(3)java是一种解释型语言,编译器把java代码编译成平台无关的中间代码,然后jvm上运行;

(4)java提供很多的内置类库,例如对多线程,对网络通信支持,还有垃圾回收器;

(5)java具有较好的安全性和健壮性,java没有了c++中复杂的指针,还提供了异常处理和垃圾回收机制;

(6)现在在web应用的开发,一般都是使用java语言。

2、面向对象的三大特性

(1)封装:对类的某些数据进行隐藏,外界只能通过对象的方法来获取对象的信息,我们常见的get/set方法和对类的属性私有化就是封装的应用场景。

(2)继承:对象的一个新类可以从现有的类中派生,派生类(子类)可以从它的基类(父类)那继承方法,也可以修改或者新增新的方法;

(3)多态:多态就是不同对象对同一物体或事件发出不同的反应或响应,举个例子:上体育课,铃响了,有的人打篮球,有的人踢毽子,但是都是上体育课,存在多态的必要条件:继承、重写、向上转型(向下转型)。

3、jdk和jre有什么区别?

(1)jdk:java开发工具包,提供了java的开发环境和运行环境

(2)jre:java运行环境,提供了java运行所需的环境

从上面的定义我们就知道了两者的区别在于jdk包含了jre,如果只运行java程序,我们只需要安装jre即可,但是我们要编写java程序,必须得安装jdk。

4、简述一下java修饰符

java常见的几个修饰符有:public、private、protected、default

(1)public:对所有类可见

(2)private:在同一类内可见,但是不能修饰类

(3)default:默认访问修饰符,在同一个包内可见

(4)protected:对同一包内的类和子类可见,不能修饰类

5、构造方法、成员变量初始化以及静态成员变量三者初始化顺序?

(1)先后顺序:静态成员变量、成员变量、构造方法。

(2)详细的先后顺序:父类静态变量、父类静态代码块、子类静态变量、子类静态代码块、父类非静态变量、父类非静态代码块、父类构造函数、子类非静态变量、子类非静态代码块、子类构造函数。

6、接口和抽象类的相同点和区别?

相同点:

(1)都不能被实例化

(2)接口对应的实现类或抽象类对应的子类都需要实现对应的方法才能被实例化

区别:

(1)接口只能有方法的定义,不能有方法的实现,而抽象类可以有方法的定义与实现

(2)实现接口的关键字为implements,继承抽象类的关键字为extends,一个类可以实现多个接口,一个类只能继承一个抽象类,抽象类可以说是一种特殊的类

(3)当子类和父类之间存在逻辑上的层次结构,推荐使用抽象类,有利于功能的积累;而接口的使用为了减低系统的耦合度,方便 日后的维护或添加删除方法。

7、java提供的多态机制

java提供了两种用于多态的机制,分别是重载与覆盖 (1)重载:重载是指同一个类中有多个同名的方法,但是这些方法有不同的参数,在编译期就可以确定调用那个方法;

(2)覆盖(重写):覆盖是指派生类重写基类的方法,使用基类指向子类的实例对象,或接口的引用变量指向其实现类的实例对象,在程序调用的运行期根据引用变量所指的具体实例对象调用正在运行的那个对象的方法,即需要运行期才能确定调用那个方法。

8、重载与重写的区别

(1)重写是父类与子类之间的关系,是垂直关系;重载是同一个类多个方法之间的关系,是水平关系;

(2)重写只能由一个方法或者一对方法产生关系,重载是多个方法之间的关系;

(3)重写要求参数列表相同,重载要求参数列表不同;

(4)重写中,调用方法体是根据对象的类型来决定的,而重载是根据调用时实参表与形参表来对应选择方法体;

(5)重载方法可以改变返回值的类型,重写方法不能改变返回值的类型。

9、final、finally、finalize的区别是什么?

(1)final用于声明属性、方法、类,分别表示属性不可分、方法不可重写、类不可继承

(2)finally作为异常处理的一部分,只能在try/catch语句中使用,finally附带一个语句块表示这个语句最终一定会被执行,经常被用在需要释放资源的情况下;

(3)finalize是object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的finalize()方法,当垃圾回收器准备好释放对象占用空间时首先会调用finalize()方法,并在下一次垃圾回收动作发生时真正回收对象占用的内存。

10、出现java程序中的finally代码块是否一定会执行

当遇到下面情况不会执行 (1)当程序在进入try语句之前就出现异常时会直接结束

(2)当程序在try中强制退出时,比如使用System.exit(0),也不会执行finally块中的代码;当try/catch语句块中有return时,finally语句块中的代码会在return之前执行,如果try/catch/finally块中都有return语句,finally块中的return语句会覆盖try/catch 模块中的return语句。

11、java语言中关键字static的作用是什么?

static的作用:

(1)修饰成员变量:static修饰的变量,可以通过类名.静态变量和对象.静态变量的方式来使用

(2)修饰成员方法:static修饰的方法,无需创建对象就可以被调用,static方法中不能this和super关键字,不能调用非static方法,只能访问所属类的静态成员变量和静态成员方法

(3)修饰代码块:jvm在加载类的时候会执行static代码块,static代码块常用于初始化静态变量,static代码块只能执行一次

(4)修饰内部类:static内部类可以不依赖外部类实例对象而被实例化,静态内部类不能与外部类有相同的名字,不能访问普通成员变量,只能访问外部类中的静态成员和静态成员方法。

12、java代码块的执行顺序?

(1)父类静态代码块(只执行一次)

(2)子类静态代码块(只执行一次)

(3)父类构造代码块

(4)父类构造函数

(5)子类构造代码块

(6)子类构造函数

(7)普通代码

13、java中一维数组和二维数组的声明方式?

(1)一维数组的声明方式:

 type arrayName[]
 
 type [] arrayName
复制代码

(2)二维数组的声明方式:

type arrayName[][]

type[][] arrayName

type[]arrayName[]

其中type为基本数据类型或类,arrayName为数组名字

14、String 和Stringbuffer有什么区别?

string用于字符串操作,属于不可变类。string对象一旦被创建,其值不可被改变,而Stringbuffer是可变类,当对象创建后,仍然可以对值进行修改。

15、判等运算符“==”和equals的区别?

==:比较的是引用,equals比较的是内容 (1)如果变量是基本数据类型,==用于比较两者之间的值是否相等;如果变量是两个对象,==用于比较两个对象是否指向同一块存储空间

(2)equals是Object类提供的方法之一,每一个java类都继承自Object类,所以每一个类中都存在equals方法,原生态的equals方法在调用时内部实际是调用==比较对象(通俗讲就是默认比较地址),但是重写equals方法可以让方法比较值,不比较对象。

16、 为什么要把string类设计为不变量?

(1)节省空间:字符串常量存储在JVM的字符串池中可以被用户共享;

(2)提高效率:string会被不同线程共享,线程是安全的,在涉及多线程操作中不需要同步操作;

(3)安全:String常被用于用户名、密码、文件名等使用,由于它的不可变性,可避免黑客行为对其恶意修改。

17、序列化是什么?

序列化是一种将对象转换成字节序列的过程,常常用于解决在对象流进行读写操作所引发的问题,序列化的作用就是持久化一些信息,那我们什么时候需要序列化呢? (1) 当你想把的内存中的对象状态保存到一个文件中或者数据库中时候; (2)当你想用套接字在网络上传送对象的时候; (3)当你想通过RMI传输对象的时候;

18、简述java中class对象

在java中对象可以分为实例对象和class对象,每一个类中都有一个class对象,它里面包含了与该类有关的信息,那我们如何获取class对象呢? (1)Class.forName("类的全限定名") (2)实例对象.getClass()方法 (3)类名.class

19、java反射机制是什么?

java反射机制是指在程序运行过程中可以构造任意一个类的对象,获取任意一个类的成员变量和成员方法、获取任意一个对象所属的类的信息、调用任意一个类的属性和方法,反射机制使得java具有动态获取程序信息和调用对象方法的能力,可以通过以下的类调用反射的APl:

class类:可获取类属性方法

Filed类:获得类的成员变量

Method类:获取类的方法信息

Construct类:获取类的构造方法等信息

20、简述注解

java注解用于java代码提供元数据,作为元数据,注解不直接影响你的代码执行,但也有一些类型的注解实际上可以用于这目的,注解可以用于提供信息给编译器,在编译阶段时给软件提供信息进行相关的处理,在运行时处理写相应代码,做对应操作。

最后

八股文基础篇之后还有1592道高频面试题,由于篇幅有限,这里只展示部分内容,所有的资料大家自行扫二维码领取!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/886089.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号