码迷,mamicode.com
首页 > 编程语言 > 详细

java 技术面试问题整理

时间:2017-03-27 20:09:08      阅读:248      评论:0      收藏:0      [点我收藏+]

标签:checked   面试问题   虚拟机   扫描器   字符串   

1. Java 常用的类

String 字符串类

System 可得到系统信息

StringBuilder 字符串工具类

Thread 线程类

Math 与数学有关的工具类

ArrayList 底层用数组实现的集合

LinkedList 底层用链表实现的集合

HashMap 接口Map的一个实现类

HashSet 接口Set的一个实现类

Scanner 简单文本扫描器

Calendar 日期类

Date 日期类

File 目录或文件操作类

FileInputStream 输入流

FileOutputStream 输出流

PrintWriter 

BufferedInputStream 具有缓冲的输入流

BufferedOutputStream 具有缓冲的输出流

BufferedReader 从字符输入流中读取文本,缓冲各个字符,

2. java常见的运行时异常(Java常见的5个运行时异常)

    

    java运行时异常是可能在java虚拟机正常工作时抛出的异常

java提供了两种异常机制,一种是运行时异常(RuntimException),一种是检查式异常(checked exception)

检查式异常:我们经常遇到的IO异常及sql异常就属于检查式异常。对于这种异常,Java编译器要求我们必须对出现的这些异常进行catch,所以米娜对这种异常不管我们是否愿意,只能自己去写一堆catch来捕捉这些异常。

运行时异常:我们可以不处理。当出现这样的异常是,总是由虚拟机接管。比如:我们从来没有人去处理过NullPointerException异常,它就是运行时异常,并且这种异常还是最常见的异常之一。

RuntimException在java.lang包下,下面是有java虚拟机提供的运行时异常:

AnnotationTypeMismatchException, 

    ArithmeticException, 

    ArrayStoreException, 

     BufferOverflowException, 

     BufferUnderflowException, 

    CannotRedoException, 

    CannotUndoException, 

    ClassCastException, 

    CMMException, 

    ConcurrentModificationException, 

    DOMException, 

    EmptyStackException, 

    EnumConstantNotPresentException, 

    EventException, 

    IllegalArgumentException, 

    IllegalMonitorStateException, 

    IllegalPathStateException, 

    IllegalStateException, 

    ImagingOpException, 

    IncompleteAnnotationException, 

    IndexOutOfBoundsException, 

    JMRuntimeException, 

    LSException, 

    MalformedParameterizedTypeException, 

    MirroredTypeException, 

    MirroredTypesException, 

    MissingResourceException, 

    NegativeArraySizeException, 

    NoSuchElementException, 

    NoSuchMechanismException, 

    NullPointerException, 

    ProfileDataException, 

    ProviderException, 

    RasterFormatException, 

    RejectedExecutionException, 

    SecurityException, 

    SystemException, 

    TypeConstraintException, 

    TypeNotPresentException, 

    UndeclaredThrowableException, 

    UnknownAnnotationValueException, 

    UnknownElementException, 

    UnknownTypeException, 

    UnmodifiableSetException, 

    UnsupportedOperationException, 

    WebServiceException

 

常见的4种运行时异常:

1、ClassCastException(类转换异常)

2、IndexOutOfBoundsException(数组越界)

3、NullPOinterException(空指针)

4、ArrayStoreException(数据存储异常,操作数组时类型不一致)

5、BufferOverflowException(IO操作异常)

6、RasterFormatException(格式转换错误)

7、UnknownTypeException

3. Spring依赖注入机制

    1、设值方法注入(SetterInjection)

通过类的setter方法完成依赖关系的设置

2、构造子注入(ConstructorInjection)

构造子注入,即通过构造函数完成依赖关系的设定

4. 接口和抽象类不同

    

    接口和抽象类的概念不一样。接口是对动作的抽象,抽象类是对根源的抽象。

    抽象类表示的是,这个对象是什么。接口表示的是,这个对象能做什么。比如,男人,女人,这两个类(如果是类的话……),他们的抽象类是人。说明,他们都是人。人可以吃东西,狗也可以吃东西,你可以把“吃东西”定义成一个接口,然后让这些类去实现它.

    所以,在高级语言上,一个类只能继承一个类(抽象类)(正如人不可能同时是生物和非生物),但是可以实现多个接口(吃饭接口、走路接口)。

    第一点. 接口是抽象类的变体,接口中所有的方法都是抽象的。而抽象类是声明方法的存在而不去实现它的类。

    第二点. 接口可以多继承,抽象类不行

    第三点. 接口定义方法,不能实现,而抽象类可以实现部分方法。

    第四点. 接口中基本数据类型为static 而抽类象不是的。

    当你关注一个事物的本质的时候,用抽象类;当你关注一个操作的时候,用接口。

    

    抽象类的功能要远超过接口,但是,定义抽象类的代价高。因为高级语言来说(从实际设计上来说也是)每个类只能继承一个类。在这个类中,你必须继承或编写出其所有子类的

    所有共性。虽然接口在功能上会弱化许多,但是它只是针对一个动作的描述。而且你可以在一个类中同时实现多个接口。在设计阶段会降低难度的。

5. 线程如何实现 

    1、就是通过继承Thread类的方式时,线程类就无法继承其他的类来实现其他一些功能,实现接口的方式就没有这中限制;

class MyThread extends Thread 

2.也是最重要的一点就是,通过实现Runnable接口的方式可以达到资源共享的效果。

class MyThread implements Runnable 

6. 线程的状态 

    

线程的状态转换是线程控制的基础。线程状态总的可分为五大状态:分别是生、死、可运行、运行、等待/阻塞。用一个图来描述如下:

 

技术分享

1、新状态:线程对象已经创建,还没有在其上调用start()方法。

 

2、可运行状态:当线程有资格运行,但调度程序还没有把它选定为运行线程时线程所处的状态。当start()方法调用时,线程首先进入可运行状态。在线程运行之后或者从阻塞、等待或睡眠状态回来后,也返回到可运行状态。

 

3、运行状态:线程调度程序从可运行池中选择一个线程作为当前线程时线程所处的状态。这也是线程进入运行状态的唯一一种方式。

 

4、等待/阻塞/睡眠状态:这是线程有资格运行时它所处的状态。实际上这个三状态组合为一种,其共同点是:线程仍旧是活的,但是当前没有条件运行。换句话说,它是可运行的,但是如果某件事件出现,他可能返回到可运行状态。

 

5、死亡态:当线程的run()方法完成时就认为它死去。这个线程对象也许是活的,但是,它已经不是一个单独执行的线程。线程一旦死亡,就不能复生。 如果在一个死去的线程上调用start()方法,会抛出java.lang.IllegalThreadStateException异常。


    线程同步的方式包括:互斥锁、读写锁、条件变量、信号量和令牌。

互斥锁和读写锁: 提供对临界资源的保护,当多线程试图访问临界资源时,都必须通过获取锁的方式来访问临界资源。(临界资源:是被多线程共享的资源)当读写线程获取锁的频率 差别不大时,一般采用互斥锁,如果读线程访问临界资源的频率大于写线程,这个时候采用读写锁较为合适,读写锁允许多个读线程同时访问临界资源,读写线程必 须互斥访问临界资源。读写锁的实现采用了互斥锁,所以在读写次数差不多的情况下采用读写锁性能没有直接采用互斥锁来的高。

条件变量:提供线程之间的一种通知机制,当某一条件满足时,线程A可以通知阻塞在条件变量上的线程B,B所期望的条件已经满足,可以解除在条件变量上的阻塞操作,继续做其他事情。

信号量:提供对临界资源的安全分配。如果存在多份临界资源,在多个线程争抢临界资源的情况下,向线程提供安全分配临界资源的方法。如果临界资源的数量为1,将退化为锁。

令牌:一种高级的线程同步的方法。它既提供锁的安全访问临界资源的功能,又利用了条件变量使得线程争夺临界资源时是有序的。

7. Java的垃圾回收机制



java 技术面试问题整理

标签:checked   面试问题   虚拟机   扫描器   字符串   

原文地址:http://2091535.blog.51cto.com/2081535/1910756

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!