JAVA知识点,笔试面试基本点(1)

      参加过很多次笔试面试,发现你做多少准备,都是不够用的,因为JAVA,Android的知识点太多了,你完全准备不过来,题目可大可小,这些笔试面试题目也很奇葩。比如前几天参加的某文的笔试题目:磁盘最小读写单位是什么:A字节,B,扇,C簇。说实话,百度都没给个准确答案,从不同的角度,ABC都是对的。还要问TCP/IP是基于什么协议?A:TCP协议,B:IP协议,C:以太网协议。说实话,我也没查到正确答案。还要很多闻所未闻,见所未见的题目。也有很多问的很细的题目。但是我们还是得做好各种准备啊。所以分享一些我平时学习到的,很细的一些知识点,确实也是在笔试面试中碰到的问题。

1.final finally和finalize的区别?

final:

final是一个关键字,是修饰符。既然是修饰符,就可以修饰类,也可以修饰变量和方法。

被final修饰的类,不能被继承。也就是他绝后了,没有子类,没有孩子了。进而得知,一个类不能同时被final和abstract修饰。

被final修饰的变量和方法,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载。

finally:

finally是在异常处理时提供finally块来执行任何清除操作。不管有没有异常被抛出、捕获,finally块都会被执行。try块中的内容是在无异常时执行到结束。catch块中的内容,是在try块内容发生catch所声明的异常时,跳转到catch块中执行。finally块则是无论异常是否发生,都会执行finally块的内容,所以在代码逻辑中有需要无论发生什么都必须执行的代码,就可以放在finally块中。

finalize:

finalize是object类中的一个方法,子类可以重写finalize()方法实现对资源的回收。

2.finally语句的执行是在return前还是return后?

finally语句是在try(或catch)的return语句执行之后,return返回之前执行。

3.==和.equals的区别

是一个是运算符一个是方法。相同点是都不是内容的比较而是地址的比较。equals是可以被开发者重写,也就是我们可以自己定义的。所以不同地方的equals有不同的定义。

问到最多的还是在string中的使用,以下为例子。切记,只是String中的区别。

String a = new String("a");
String b = new String("a");
System.out.println(a == b);

System.out.println(a.equals(b));

输出:fslse,ture.因为在String中 equals方法被重写 当物理地址不同时,会进一步比较值也就是如果==号比较不相等,还会进行一下值的比较。所以equals方法具体的作用要看当前的那个类是如何实现重写父类中该方法的。如果没有重写该方法,那么他和==号等价。

4.队列的实现原理,阻塞队列和非阻塞队列的区别?

队列是一种先进先出的线性表。

阻塞队列与普通队列的区别在于,当队列是空的时,从队列中获取元素的操作将会被阻塞,或者当队列是满时,往队列里添加元素的操作会被阻塞。试图从空的阻塞队列中获取元素的线程将会被阻塞,直到其他的线程往空的队列插入新的元素。同样,试图往已满的阻塞队列中添加新元素的线程同样也会被阻塞,直到其他的线程使队列重新变得空闲起来,如从队列中移除一个或者多个元素,或者完全清空队列。

5.suspend()、resume()和wait()、notify()的区别.

suspend()、resume()是Thread方法,wait()、notify()是Object类的方法。

但suspend()方法很容易引起死锁问题, 已经不推荐使用了。

5.Object的主要方法

equals();

toString();

clone();

wait();notify();notifyall();

getClass;

finalize();

hashCode();

6.ThreadLocal

首先,敲黑板,记住喽,ThreadLocal不是一个线程。

ThreadLocal的作用是提供线程内的局部变量,这种变量在线程的生命周期内起作用,减少同一个线程内多个函数或者组件之间一些公共变量的传递的复杂度。

简单的说,是以一种空间换时间的做法在每一个Thread里维护了一个ThreadLocal.ThreadLocalMap把数据进行隔离,数据不共享,自然也不存在线程安全的问题了。

我记得intentService就用到了ThreadLocal。

7.Service可以做耗时操作么?intentService呢?

大家都知道,不可以。因为Service是运行在UI线程的,当然不可以做耗时操作。

Activity耗时操作为5秒Broadcase耗时操作为10秒,Service耗时操作为20秒。超过就ANR。但是intentService可以做耗时操作吗?这是我当时面试时,碰到的问题,当时并不知道,一听,那不还是Service,马上回答不行。结果就GG了。intentService是可以做耗时操作的。

8.静态代码块、构造方法,普通方法,子类、父类初始化顺序

父类静态代码块-->子类静态代码块-->父类普通代码块-->父类构造方法-->子类代码块-->子类构造方法。

9.@NotNull, @NotEmpty和@NotBlank之间的区别是什么?

@NotNull:对象不能是 null, 但可以是空集(size = 0)。  @NotNull 用在基本类型上
@NotEmpty:对象不能是 null 并且相关对象的 size 大于 0。  @NotEmpty 用在集合类上面

@NotBlank:不是 null 且去除两端空白字符后的长度(trimmed length)大于 0。   @NotBlank 用在String上面 

10.线程里run(),和start()的区别

run()是执行线程里面的方法并没有开启线程,只是普通的方法调用。start()是开启了线程,执行方法。





猜你喜欢

转载自blog.csdn.net/qq_38679144/article/details/80414421