面试准备(java基础篇)

区别总结:


1:Void&&Null的区别:

Void:表示方法不需要返回值。

Null:表示变量/对象的值。

2:&和&&的区别:

&:必须左侧逻辑表达式全部运算完才结束。

&&:从左到右,只要成立就完成,无需全部计算完。

3:继承&&重载的区别:

继承:

子类对象继承父类对象的成员属性和成员方法,只允许单继承。

继承过程可以完成方法的重写,但是必须要和父类有相同的(方法名、参数类型、返回值类型)。

重载:

重载过程只需要方法名相同,参数类型和返回值类型可以不同。

4:抽象类&&接口的区别:

(接口可以继承接口

抽象类可以实现接口

抽象类可以继承实体类)

相同点:

都不能被实例化。

不同点:

1:接口比抽象类更加抽象,接口里面所有方法都是抽象的,而抽象类中可以有非抽象的方法。

2:一个类只能继承一个抽象类,但是可以实现多个接口。

3:抽象类中可以实现部分方法,而接口中方法必须是public修饰的,抽象的不能实现具体的方法。

4:接口中的基本数据类型为static,而抽象类不是。

5:抽象类可以有自己的数据变量,而接口中不定义数据变量。(可不说)

5:静态变量&&实例变量的区别:

静态变量:通过类名直接访问,无论该类创建多少对象,都不产生变化。

实例变量:必须依赖实例,只能通过对象才能访问它。

6:堆&&栈的区别:

1:存放类型:

栈:基本类型变量和对象引用,超过作用域释放。

堆:new出来的对象和数据。

2:存取速度:

栈:存取速度比堆快。

堆:运行时动态分配内存。

3:共享:

栈:栈中的数据可以共享,线程间不共享数据。

堆:堆中的数据不可以共享,线程间可以共享。

4:访问:

栈:添加/删除的操作需要在同一阶段完成(后进先出)。

堆:因为地址不连续,可以随机访问。

7:类&&包装类的区别:

包装类:方便设计对象的操作,另外包含基本数据类型的相关属性,比如最大值、最小值等,可以通过包装类来获取。

8:Collection&&Collections的区别:

Collection:接口,继承它的接口有SET、LIST。

Collections:类:提供方法实现集合排序。

9:Vector&&ArrayList的区别:

Vector:(线程安全,扩容默认增长一倍)。

ArrayList(线程不安全,扩容默认增长一半)。

10:List底层如何实现?双向链表和数组的区别:

List继承Collection接口,里面定义了添加元素,删除元素,取出元素等抽象方法。

(元素有序,可以重复,可以为null的集合)。

双向链表:

可以动态增减。

查询速度快。

插入删除需要移动其他数据,较慢。

数组:

有固定长度,不能动态增减。

根据下标进行存取,速度快。

数据太少,浪费内存;数据太多,超出长度。

线程:


11:Run()&&Start()的区别:

Run():可以产生必须退出的标志来停止一个线程。

Start():启动线程。

12:Sleep()&&Wait()的区别:

Sleep():线程类的方法

暂停该线程,把执行机会交给其他线程,但是依然坚挺,会恢复。

(不释放对象锁)。

Wait():Object的方法

调用该方法表示放弃对对象锁,进入线程池进行等待。

通过Notify()或者NotifyAll()方法才可以唤醒,进入运行状态。

(释放对象锁)。

13:同步&&异步的区别(线程中):

同步:

数据在线程间共享,就是同步,一边写一边读,或者读的数据时别写过的,这些数据就是共享数据,为了防止出现错误,就需要同步。

异步:

程序在对象上调用了一个执行方法,需要花费很长时间,但是又不想让程序等待方法的返回,就可以用异步,因为异步更有效率。(AJAX技术)。

14:Synchronized&&Lock的区别:

Synchronized:实现线程同步。

Lock:实现线程同步。

(比Synchronized更精确,Synchronized会自动释放锁,而Lock需要程序员手动释放,而且必须放到Finally()方法中释放)。

15:字节流&&字符流的区别:

区别:处理方式不同

字节流:按字节处理(二进制为单位)。

字符流:按字符处理(字符为单位)。

16:String&&StringBuffer&&StringBuilder的区别

String:长度不可变。

StringBuffer:长度可变。(字符串缓冲区)

线程安全。

内容改变(用toString()方法变为String类型)。

StringBuilder:

线程不安全。

不执行同步。

知识点总结:


1:名词解释:

JVM:java虚拟机,让java程序只需要生成在虚拟机上运行的代码。

JRE:java的运行环境。

JDK:java的开发工具包。

GC:垃圾回收机制。java虚拟机发现内存资源紧张时,会自动清理没有被引用的对象,防止它们占用内存。

2:JVM:有几个实例?

每运行一个程序就会创建一个JVM实例,JVM的实例个数和同时运行的程序个数有关。

3:java跨平台如何实现?

通过JVM进行实现。

4:java三种基本流程?

顺序:程序的操作&&IF

选择:IF&&Switch

循环:While&&For&&Do-While

5:java的8个基本类型?

Byte:1字节

Boolean:1

Float:2

Int:4

Long:4

Char:4

double:8

Short:8

6:垃圾回收机制介绍?

作用:自动清理不被引用的对象,防止占用内存。

何时触发:GC是由系统来管理,当系统觉得需要启动来处理内存的时候,就会触发垃圾回收机制。

如何降低GC启动:减少对象的建立.

能否保住程序有足够大可用内存:不能保证。

7:java中的内存泄漏?

1:堆中分配的内存,还没释放的时候,就能将访问这块内存的方式删除。

2:对象在不需要的时候,还保存着对对象的引用。(新建一个抽象类的对象,放入List中,释放该对象,但是List对该对象还保存着引用,GC无法自动回收,就会出现内存泄漏)。

8:java是否可以包括多个类?

可以有多个类,但是Public类只有一个,还必须与源文件名相同。

9:排序方法?(重点,太杂)

插入:直接插入&&希尔

交换:冒泡&&快速

选择:直接选择&&堆

归并:

分配:

10:创建模式简单了解(提取三个)

单例模式:

保证一个类只有一个实例,并且自动实例化,向整个系统提供该实例。

(相当于工厂生产了一个工具,哪里出问题就用这一个工具来维修)。

原型模式:

通过给出一个原型对象来指明创建对象类型,然后通过这个原型对象创建更多的类型对象。

(相当于工厂生产一个零件专门解决一个问题,所以只要出问题工厂就会根据这个零件在生产一个一模一样的来解决问题)。

工厂模式:

核心的工厂类不再负责所有产品的创建,而是将创建的方法交给子类去做,自己作为一个抽象工厂存在。

(生产汽车为例,总厂只负责创建这个汽车的对象,子工厂就根据这些设计图来完成汽车。不同的工厂根据不同的规定来生产符合要求的汽车)。

11:什么时候写HashCode方法?

重写equals方法时重写HashCode,如果不重写的话,会导致这个类不能和集合类一起工作,比如HashMap,HashSet,HashTable等。(所以对象要放入它们当中,需要重新equals方法以及HashCode方法)。

12:三大基本特征?

封装:

将过程和数据包装起来,外界不能看见,想访问只能通过自己定义的方法。

(相当于遥控器,看不见内部构造,你只需要按按键,就能完成你转台,关电视这些功能)。

继承:

子类继承父类的方法和实例变量,并且可以通过重写来更改这些方法或者添加新的方法。

多态:

父类引用指向子类的对象,相当于同一个操作对象,可以产生不同的效果,这就是多态。

(赋值多态和传参多态,一般通过重载或者重写来体现。(可以当做总结))。

优点:

提高程序复用性。

父类的功能可以被子类的方法或引用变量所调用,提高可扩充性和可维护性。

13:子类如何调用父类的方法和构造函数?

方法:super.方法名

无参函数:默认调用

有参函数:super(参数)

14:构造器Constructor是否可以被重写?

构造器(不可重写,不可继承,可重载)(不可写不可继却可以载)。

15:static的作用?

静态修饰符:修饰成员变量和成员方法。

1:修饰成员变量:

static修饰的成员变量不属于对象的数据结构,属于类的变量,可以直接用类名调用static成员。

成员变量和类的信息存储在(方法区中)。

无论一个类建立多少对象,这个类用static修饰的成员变量只有一个。

2:修饰成员方法:

静态方法不能对非静态方法进行访问和引用。

static修饰的方法不需要对一些对象进行操作,它的运行结果只和输入参数有关系。

3:static块:(静态代码块)

类加载期间执行的代码块,只执行一次。

(程序中包括它,则第一个执行它)

16:java常见关键字:

Final:

定义方法或者数据,用它定义的不能被继承,只能被读取。

Finally:

异常里面,无论前面的try语句中是否有异常或者运行时有错,finally都会被执行,并且起到释放资源作用。

Instanceor:

判断指向对象的数据类型。

Synchronized:

修饰方法或方法块,防止多个线程同时访问这个类中用它修饰的方法,起同步作用。

Throw/Throws:

Throw:允许用户跑出一个exception对象或者任何实现throwable对象

Throws:用在方法的声明里面来说明那些异常,方法无需出来,而是提交到程序的上一层。

17:子类A继承父类B中代码执行顺序?

父类B静态代码块

子类A静态代码块

父类B非静态代码

父类B构造函数

子类A非静态代码

子类A构造函数

18:匿名内部类?

可以继承其他类,可以实现结果。

19:内部类是否可以引用其他包含类的成员?

可以,除了静态内部类(静态内部类不能访问外部类的普通成员变量,只能访问外部类的静态成员)。

20:try中的run语句,finally{}里面的code是否被执行?(有问题)

会执行,并且在return前执行。

21:Execption的catch在捕获多个异常时为何在最后?

因为Execption是所有异常的父类,如果捕获的异常有继承关系,必须子类在前,父类在后。不然Exception后面的catch语句没有办法执行。

22:异常的关键字?

Try:捕获异常

Catch:指定捕获异常的类型

Throw:明确抛出一个异常

Throws:表示该方法可能抛出各种异常

Finally:无论是否有异常,都得执行。

23:ArrayList&&Vector&&LinkedList的性能和特性

ArrayList:数组方式进行存储数据。

Vector:数组方式存储数据(线程安全,使用synchronized)。

LinkedList:链表方式存储数据。

24:Set不能有重复数据,如何区分重复?

使用equal方法和HashCode区分重复。

覆盖俩方法判断对象是否是同一对象。

25:线程安全的理解

如果一段代码里面的进程里面有多个线程在同时运行,一个读,一个写,这样的线程就是不安全的,拿简单的售票案例来说,你这样的操作就会容易发生从一个售票口买到不属于这个售票口的车票,所以对于这种现象,一般都会加上同步,确保不出现这样的情况。

26:多线程的优点

节省时间,以人举例,人在吃饭的时候,血液也在循环,程序也可以这样,一个线程被分配做这个任务,另外一个线程被分配做另外一个任务,彼此独立,又缺一不可。可以节省对处理器的占用,以及节省时间。

27:线程进入synchronized方法后,其他线程能否进入该对象的其他方法?

可以进入该对象的其他的非同步方法。

28:Synchronized关键字

作用:同步作用

同步方法:

静态方法和非静态方法可以修饰,接口和抽象类不能修饰。

一个线程调用该对象的同步方法,则该对象的其他同步方法被锁定,不能调用,但是可以调用非静态方法。

同步块:

锁定知道对象,对同步块中的代码进行同步,起到同步对象的作用。

29:线程池的理解?

线程的集合叫做线程池,服务器接收到请求,就会从线程池里面取一个空闲线程来执行响应操作,任务完成后,不关闭线程,而是继续放回线程池中,而且任务无需交给单个线程,而是直接交给线程池,线程池自动分配线程,而且单个线程只能执行一个任务,但一个线程能接受多个任务。

30:java中的流以及流的抽象类

字节流:

输入:InputStream

输出:OutputStream

字符流:

输入:Reader

输出:Writer

31:常量池理解?

创建一个String对象,如果以前创建过,就直接取常量池中的对象,如果没有,就重新创建。

32:线程如何实现?

1:实现Runable接口

2:继承Thread类

33:线程如何停止?

1:Stop()方法

2:interrupt()方法

34:多线程Join()方法:

Join:

当进行多线程运算时,如果满足条件,我们可以临时加入一个线程,让这个线程运行完,然后再运行。


总结了一些java的基础知识,自己总结成自己的理解,至今找不到工作。

每周六更新

猜你喜欢

转载自blog.csdn.net/qq_31051117/article/details/88171278
今日推荐