Java面试(基础部分)

1.基本数据类型

byte  8位;    shout     16位;     int    32位;    long    64位;

float(浮点型)   32位 ;   double(双精度)        64位;

char(字符型)      16位;   boolean(布尔)     1位

2.基本数据类型和封装类的区别

1.内存位置:基本数据类型在栈中;封装类对象在堆中;

2.默认值:基本数据类型0或false;封装类:null;

3.传参方面:基本数据类型传递值;包装类传递地址;

4.装箱和拆箱:装箱:integer  i =1;拆箱:int  a=new  Integer(10);

3.接口和抽象类的区别

1.接口多实现,抽象类单继承;

2.接口中只有方法的定义没有方法的实现

3.接口中只有常量,抽象类中可以有变量;

4.实现接口需要实现接口中的所有方法,继承抽象类不需要实现所有的方法;

5.抽象类中可以定义非抽象方法;

6.接口中没有构造方法,抽象类可以有构造方法。

4.Java中重载和重写的区别

1.重载要求方法名相同,参数列表不同;重写方法名相同,参数列表相同;

2.重写用在具有继承关系的子类中;重载用在本类中。

5.文件输入,输出分别是什么流

文件输入:FileInputStream、FileReader、BufferedInputstream、BufferedReader;

文件输出:FileOutputStream、FileWriter、BufferedOutputstream、BufferedWriter

按照流划分:

字节      字节流,字符流

方向       输入流,输出流

功能        字节流    处理流

6.常见的异常

运行异常:

NullpointerException空指针异常

ArrayIndexOutofBoundsException数组下标越界

FileNotFoundException

受检异常:

SQLException;IOException;ClassNotFoundException

7.二分查找

要求:(1)必须采用顺序存储(2)必须按关键字大小有序排列

原理:

    将数组分为三部分,依次是中值(所谓中值就是数组中间位置的值)前,中值,中值后;

    将要查找的值和数组的中值进行比较,若小于中值则在中值前面找,若大于中值则在中值后面找,等于中值直接返回,然后依次是一个递归循环的过程,前半部分或后半部分继续分解为三部分。

8.递归及用法

自己调用自己的方法,要求:必须有表示结束的条件;

应用:查询后代数据;阶乘;斐波那契数列

9.多态的理解

分为赋值多态和传参多态两种

赋值:通过多态,只能调用子类中的重写的方法,不能表用子类特有的方法

传参:形参为父类,实参为子类。

接口和类中存在多态

建立耦合(联系),用在赋值传参。

条件:继承,重写,向上转型

10.异常和错误的区别

Error(错误)是系统中的错误,程序员不能改变和处理的,是在程序编写时的错误,只能通过修改代码才能修正;

Exception(异常)表示程序可以处理的异常,可以捕获且可以恢复。

11.equals底层是怎么实现

比较地址,返回true,判断是不是字符串,(value当前字符串的变量)拿到数组长度,判断长度,赋值数组,比较每一个值

12.谈谈对面向对象的理解

面向对象是向现实世界模型的自然延伸,这是一种“万物皆对象”的编程思想。在现实生活中的任何物体都可以归为一类事物,而每一个个体都是一类事物的实例。面向对象的编程是以对象为中心,以消息为驱动,所以程序=对象+消息。

面向对象有三大特性,封装、继承和多态。

封装就是将一类事物的属性和行为抽象成一个类,使其属性私有化,行为公开化,提高了数据的隐秘性的同时,使代码模块化。这样做使得代码的复用性更高。

继承则是进一步将一类事物共有的属性和行为抽象成一个父类,而每一个子类是一个特殊的父类--有父类的行为和属性,也有自己特有的行为和属性。这样做扩展了已存在的代码块,进一步提高了代码的复用性。

如果说封装和继承是为了使代码重用,那么多态则是为了实现接口重用。多态的一大作用就是为了解耦--为了解除父子类继承的耦合度。

(如果说封装和继承是面向对象的基础,那么多态则是面向对象最精髓的理论。)

13.Java中异常处理机制的实现原理和应用

捕获异常 try catch finally

1,try是尝试运程代码块,如果有异常会被随后的catch捕获,异常发生后代码不执行。

2,catch代码块是异常处理代码,注意:异常的大小关系,大类型的放到后面处理。

3,finally代码块中,经常用来处理现场清理。例如:数据库连接关闭。

3,处理异常有一个基本原则:能够底层处理的尽量处理,但是如果不能处理,必须抛出

到方法。

14.object里的tostring方法的实现

getClass().getName()+"@"+Integer.toHexString(hashCode());

15.java的三大特性和五大原则

特征:封装,继承,多态

原则:单一原则,开闭原则,替换原则,依赖倒置原则,接口隔离原则。

16.string,stringbuffer,stringbuilder区别

1.string长度不可变,底层是final修饰的char[]数组,用于拼接较少的情况

2.stringbuffer   JDK1.0  长度可变,底层是没有final修饰的char[]数组线程安全,效率低,多用于多编程情况;

3.stringbuilder   JDK1.5长度可变,底层是没有final修饰char[]数组,非线程安全,效率高,用于拼接较多的情况

17.隐式转换(自动转换)和显示转换(强转)

隐士转换特征:从小到大,可以隐士转换,数据类型将自动提升

强制转换特征:从大到小(如果你明确知道数据是可以用该数据类型来表示的,可以用强制转换)

byte + byte = int; 拿byte存储以Int计算

byte + short = int;   

byte,short,int,char,都是以Int来计算。

Int + long = long;

float + short = float;(double也可以)

float + int = float;

float + long = float;(损失精度)

char + double = double;

18如何不用new实例化对象(反序列化和克隆)

通过I/O流(包括反序列化),如运行反序列化手段,调用java.io.ObjectInputStream对象的readObject()方法

19.collection和collections

collection抽象的集合概念,实现它有list和set

collections集合静态工具类,包含集合的工具方法,sort()等

19 final,finalize和finally的不同之处

final 是一个修饰符,可以修饰变量、方法和类。如果 final 修饰变量,意味着该变量的值在初始化后不能被改变。

finalize 方法是在对象被回收之前调用的方法,给对象自己最后一个复活的机会,但是什么时候调用 finalize 没有保证。

finally 是一个关键字,与 try 和 catch 一起用于异常的处理。finally 块一定会被执行,无论在 try 块中是否有发生异常。

20 final的用法

1.被final修饰的类不可以被继承

2.被final修饰的方法不可以被重写

3.被final修饰的变量不可以被改变,如果修饰引用,那么表示引用不可变,引用指向的内容可变

4.被final修饰的方法,JVM会尝试将其内联,以提高运行效率

5.被final修饰的常量,在编译阶段会存入常量池中

21 static用法

1.static修饰的变量,存储在常量池,公共访问;

2.static修饰的方法为静态方法,存放在方法区,可以通过“类型.方法名”来调用

3.static修饰的类不能调用非静态变量或方法,但是非静态方法或变量可以访问静态变量或方法

4.static优先于对象创建,只能修饰成员变量

拓展:静态代码块>main方法>构造代码块>构造方法

储存于堆内的方法区,在主方法执行之前加载

声明的变量储存在常量池中,修饰的方法为静态方法,类方法

非static修饰的变量及方法能够访问static修饰的变量和方法

22.截取字符串

Substring(int startindex ,int endindex)前包含,后不包含

Substring(int startindex,int length)

split(",");(用“,”截取)

23.泛型的理解

泛型是具有占位符(类型参数)的类,机构,接口和方法,占位符就是先占住一个固定的位置,再往里面添加内容的符号,就是约束数据类型的

24 请求转发和重定向的区别

转发:

req.getRequestDispatcher("***.jsp";)

服务器内部转发,访问该项目下的文件,一次请求,URL不变

重定向:

resp.sendRedirect("http://baidu.com");

可以访问任何资源,由jsp文件发出的两次请求,URL变化

25.JVM运行顺序

1.运行class文件((静态变量、静态初始化块)–>(变量、初始化块)–> 构造器;如果有父类,则顺序是:父类static方法 –> 子类static方法 –> 父类构造方法- -> 子类构造方法 )

2.管理并分配内存

3.执行垃圾回收

26.连接池的作用

减少创建连接的时间,更快响应,统一管理。

你可能感兴趣的:(Java面试(基础部分))