java 技术面试问题整理

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的垃圾回收机制


时间: 2024-10-21 12:23:48

java 技术面试问题整理的相关文章

50本java技术书-吐血整理

一.计算机网络系列:1.<TCP/IP卷一>2.<计算机网络:自顶向下>3.<图解HTTP和图解TCP/IP>4.<计算机网络>二.操作系统系列1.<深入理解计算机系统> <现代操作系统>3.<Linux内核设计与实现>4.<Unix网络编程>三.数据结构与算法系列1.<算法导论>2.<数据结构与算法(Java版)>3.<算法图解,啊哈算法> 4 .<剑指offer&g

Java多线程面试问题

原文链接:http://ifeve.com/java-multi-threading-concurrency-interview-questions-with-answers/ 多线程和并发问题是Java技术面试中面试官比较喜欢问的问题之一.在这里,从面试的角度列出了大部分重要的问题,但是你仍然应该牢固的掌握Java多线程基础知识来对应日后碰到的问题. Java多线程面试问题 1. 进程和线程之间有什么不同? 一个进程是一个独立(self contained)的运行环境,它可以被看作一个程序或者

Java技术杂记

本文是临时记录在本子上Java技术的初步整理, 一来举一反三, 二来练习双拼打字. 发现双拼方案里的自然码挺好用的. 搜狗双拼方案对单韵母的字采用"o+韵母", 比如"安oj", "二or"等. 自然码则是"安an", "二er", 符合传统拼音思维. 但是, 自然码美中不足的是"昂ang"为了兼容双拼2个键出字的规则, 强行将a作声母, 原本是"ang"的"

【Java基础】Java面试题目整理与解说(二)

1.Collection 和 Collections 的差别. Collection 是集合类的上级接口,继承于他的接口主要有 Set 和 List. Collections 是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索.排序.线程安全化等操作. 2.HashMap 和 Hashtable 的差别. HashMap 是 Hashtable 的轻量级实现(非线程安全的实现),他们都完毕了 Map 接口,HashMap是非线程安全,效率上可能高于 Hashtable.在多个线程

【Java基础】Java面试题目整理与讲解(二)

1.Collection 和 Collections 的区别. Collection 是集合类的上级接口,继承于他的接口主要有 Set 和 List. Collections 是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索.排序.线程安全化等操作. 2.HashMap 和 Hashtable 的区别. HashMap 是 Hashtable 的轻量级实现(非线程安全的实现),他们都完成了 Map 接口,HashMap是非线程安全,效率上可能高于 Hashtable.在多个线程

Java技术体系大全,准备面试的可以参考一下!

1. JAVA技术体系1.1 Java程序员 ·高级特性 反射.泛型.注释符.自动装箱和拆箱.枚举类.可变参数.可变返回类型.增强循环.静态导入 ·核心编程 IO.多线程.实体类.集合类.正则表达式.XML和属性文件 ·图形编程 AWT(Java2D/JavaSound/JMF).Swing.SWT.JFace ·网路编程 Applet.Socket/TCP/UDP.NIO.RMI.CORBA ·Java语法基础 类.抽象类.接口.最终类.静态类.匿名类.内部类.异常类.编码规范 ·Java开发

年底了,如何准备 Java 初级和高级的技术面试?

朋友最近几年一直在做java后端方面的技术面试官,而在最近两周,又密集了面试了一些java初级和高级开发的候选人,在面试过程中,我自认为比较慎重,遇到问题回答不好的候选人,我总会再三从不同方面提问,只有当反复确认能力不行才会下结论. 相反,如果候选人给我的印象不错,我也会从多个角度来衡量,以免招进会说但不会干活的"大忽悠". 其实倒也不是我故意要为难候选人,毕竟入职后就是同事,但面试官的职责使然,而且,如果资深的面试官一般也这样. 写到这里,恐怕会吓到一些想要面试的朋友,能力强和能力弱

以Java工程师为例,技术面试应该怎么准备?

如何准备一份「工程师范儿」的简历? 定制简历 我自己的经验是,每个岗位的具体要求都不同,因此大家不要用一个通用的简历去应付所有的岗位,最好是根据特定公司的特定岗位来定制简历.当然这并不是让大家编故事,而是突出与目标岗位匹配的经验和能力.大家去应聘一个开发或者测试工程师,和去应聘一个 Team Leader 或者技术经理的角色是完全不一样的.比如,如果我要去应聘一个有管理性质的岗位,我就会在简历里适当突出我曾经从 0 组建了一个 10 人的技术团队,里边有多少资深 Java 开发工程师,多少数据库

Java大牛呕心沥血经历——技术面试与HR谈薪资技巧

作为"生在红旗下,长在春风里"的"四有新人",笔者从毕业至今,与各路 HR.HRD 斗智斗勇,再加上自己的不懈努力,历尽千辛万苦终于将毕业时的 1500 每月的薪资提高了二十几倍.本文就和大家唠唠这些年风里来雨里去无数次铩羽而归.兢兢业业.如履薄冰.诚惶诚恐.夜不能寐.枕戈待旦.惴惴不安.临盆一脚,最终守得云开见月明的谈薪经历.当然,本文说的主要是技术面试中谈薪的经历,主要针对的是一些社会人士求职,当然一些通用的原则同样适用于应届生求职. 面试官的级别 一般技术面试