2018/19面试题

今日面试题

1.抽象类和接口的区别

接口:接口是抽象方法的集合。如果一个类实现了某个接口,那么它就继承了这个接口的抽象方法。这就像契约模式,如果实现了这个接口,那么就必须确保使用这些方法。接口只是一种形式,接口自身不能做任何事情。
抽象类:抽象类是用来捕捉子类的通用特性的 。它不能被实例化,只能被用作子类的超类。抽象类是被用来创建继承层级里子类的模板。

2.常用的集合有哪些,谈谈对它们的理解

Set是最简单的一种集合。集合中的对象不按特定的方式排序,并且没有重复对象。
Set接口主要实现了两个实现类:
HashSet : HashSet类按照哈希算法来存取集合中的对象,存取速度比较快
TreeSet : TreeSet类实现了SortedSet接口,能够对集合中的对象进行排序。
List的特征是其元素以线性方式存储,集合中可以存放重复对象。List接口主要实现类包括:ArrayList() : 代表长度可以改变得数组。可以对元素进行随机的访问,向ArrayList()中插入与与删除元素的速度慢。
LinkedList(): 在实现中采用链表数据结构。插入和删除速度快,访问速度慢。
List结构的集合类:ArrayList类,LinkedList类,Vector类,Stack类
Map结构的集合类:HashMap类,Hashtable类Map 是一种把键对象和值对象映射的集合,它的每一个元素都包含一对键对象和值对象。 Map没有继承于Collection接口从Map集合中检索元素时,只要给出键对象,就会返回对应的值对象。

3.==与equals()的区别?

== 比较的是变量(栈)内存中存放的对象的(堆)内存地址,用来判断两个对象的地址是否相同,即是否是指相同一个对象。比较的是真正意义上的指针操作。
equals用来比较的是两个对象的内容是否相等,由于所有的类都是继承自java.lang.Object类的,所以适用于所有对象,如果没有对该方法进行覆盖的话,调用的仍然是Object类中的方法,而Object中的equals方法返回的却是==的判断。

4.方法重写和方法重载的区别?

重写与重载的区别.png

5.throw 和 throws 的区别?

throw是语句抛出一个异常,throws是方法抛出一个异常;
throw不能单独使用,不是和try-catch-finally配套使用,就是与throws配套使用,但throws可以单独使用,然后再由异常处理的方法捕获。
throw是语句抛出一个异常,throws是方法抛出一个异常;
throw不能单独使用,不是和try-catch-finally配套使用,就是与throws配套使用,但throws可以单独使用,然后再由异常处理的方法捕获。

6.描述遇到过的异常有哪些?

(1)java.lang.NullPointerException 空指针异常;出现原因:调用了未经初始化的对象或者是不存在的对象
(2)java.lang.ClassNotFoundException 指定的类找不到;出现原因:类的名称和路
径加载错误;通常都是程序试图通过字符串来加载某个类时可能引发异常
(3)java.lang.NumberFormatException 字符串转换为数字异常;出现原因:字符型数据中包含非数字型字符
(4)java.lang.IndexOutOfBoundsException 数组角标越界异常;
(5)java.lang.IllegalArgumentException 方法传递参数错误
(6)java.lang.ClassCastException 数据类型转换异常
(7)java.lang.NoClassDefFoundException 未找到类定义错误
(8)SQLException 操作数据库异常
(9)java.lang.InstantiationException 实例化异常
(10)java.lang.NoSuchMethodException 方法不存在异常

7.final, finally, finalize 的区别?

final:java中的关键字,修饰符。
A).如果一个类被声明为final,就意味着它不能再派生出新的子类,不能作为父类被继承。因此,一个类不能同时被声明为abstract抽象类的和final的类。
B).如果将变量或者方法声明为final,可以保证它们在使用中不被改变.
  1)被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。
  2)被声明final的方法只能使用,不能重载。
finally:java的一种异常处理机制。
  finally是对Java异常处理模型的最佳补充。finally结构使代码总会执行,而不管无异常发生。使用finally可以维护对象的内部状态,并可以清理非内存资源。特别是在关闭数据库连接这方面,如果程序员把数据库连接的close()方法放到finally中,就会大大降低程序出错的几率。
finalize:Java中的一个方法名。
Java技术使用finalize()方法在垃圾收集器将对象从内存中清除出去前,做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没被引用时对这个对象调用的。它是在Object类中定义的,因此所的类都继承了它。子类覆盖finalize()方法以整理系统资源或者执行其他清理工作。finalize()方法是在垃圾收集器删除对象之前对这个对象调用的。

8.String、 StringBuffer、 StringBuilder 的区别?

区别.png

9.Java 中有几种类型的流?分别是什么?

流分类:
1.Java的字节流
InputStream是所有字节输入流的祖先,而OutputStream是所有字节输出流的祖先。
2.Java的字符流
Reader是所有读取字符串输入流的祖先,而writer是所有输出字符串的祖先

10.break 和continue 的区别?

break与continue的区别.png

11.数据类型之间的转换?

1)字符串如何转基本数据类型?
调用基本数据类型对应的包装类中的方法 parseXXX(String)或 valueOf(String)即可返回相应基本类型;
2)基本数据类型如何转字符串?
一种方法是将基本数据类型与空字符串(“”)连接(+)即可获得其所对应的字符串;另一种方法是调用 String 类中的 valueOf()方法返回相应字符串

12.&与&&的区别

&;是一个位运算符,表示按位与运算,在运行上,&两边都要判断,不管错对
位于运算符:按位与运算符"&"是双目运算符。 其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1 ,否则为0。参与运算的数以补码方式出现。
&&:是逻辑运算符,表示逻辑与(and),在运行上先判断前面的,如果前面的错了,则后面的不在判断。

13.char型变量中能不能存贮一个中文汉字?为什么?

char型变量是用来存储Unicode编码的字符的,unicode编码字符集中包含了汉字,所以,char型变量中当然可以存储汉字啦。

14.String s = new String("xyz");创建了几个String Object? 二者之间有什么区别?

这个跟常量池没有关系,只要是new,都是重新分配堆空间,如果不区分栈和堆,这里创建了1个String Object。如果是从jvm角度来说的话,它是创建了两个对象,String s是在栈里创建了一个变量,new String("xyz")是在堆里创建了一个对象并被s引用到。

15. Collection 和 Collections的区别。

  • Collection 是一个集合接口(集合类的一个顶级接口)。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java 类库中有很多具体的实现。Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式,其直接继承接口有List与Set。
  • Collections则是集合类的一个工具类/帮助类,其中提供了一系列静态方法,用于对集合中元素进行排序、搜索以及线程安全等各种操作。

16.GC是什么? 为什么要有GC?

GC是垃圾收集的意思,内存处理是编程人员容易出现问题的地方,垃圾回收可以有效的防止内存泄露,有效的使用可以使用的内存。

17.通过迭代器遍历list的时候,如果想修改集合对象是否会报错,会报什么错误?如何解决

在使用Iterator来迭代遍历List的时候如果修改该List对象,则会报java.util.ConcurrentModificationException异常
我们可以使用CopyOnWriteArrayList来代替ArrayList,CopyOnWriteArrayList支持并发访问,所以同时进行迭代和修改是没有问题的。

18.如何对list集合中的数据去重

  • 循环list中的所有元素然后删除重复
  • 通过HashSet踢除重复元素
  • 删除ArrayList中重复元素,保持顺序
  • 把list里的对象遍历一遍,用list.contain(),如果不存在就放入到另外一个list集合中
    1)用JDK提供的Set对元素进行去重
    Set<Integer> set = new HashSet<>(list);
    此种方式是利用了Set的特性:元素不可重复,其底层原理是通过先计算每个对象的hash值,再比较元素值是否相同,如果相同,则保留最新的.
    2).用普通方法对List进行去重
    两层循环,外层循环从第一个元素想最后一个元素循环,
    内层循环是从最后一个元素向外层循环元素的当前元素循环
    比较两个元素是否相等,如果相等,移除靠后的元素来进行去重
    3)用JDK1.8 Stream中对List进行去重
    list.stream().distinct();
    首先获得此list的Stream.然后调用distinct()方法,java8中提供流的方式对数据进行处理,非常快,底层用的是forkJoin框架,提供了并行处理,使得多个处理器同时处理流中的数据,所以耗时非常短

19. float型float f=3.4是否正确?

不正确。精度不准确,应该用强制类型转换,如下所示:float f=(float)3.4 或float f = 3.4f 在java里面,没小数点的默认是int,有小数点的默认是 double; int 转成 long 系统自动作没有问题,因为后者精度更高 double 转成 float 就不能自动做了,所以后面的加上个 f

20.当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?

是值传递。Java 编程语言只有值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是该对象的引用一个副本。指向同一个对象,对象的内容可以在被调用的方法中改变,但对象的引用(不是引用的副本)是永远不会改变的。
引用类型参数传递:改变值
基本类型参数传递:不改变值

21.数组有没有length()这个方法? String有没有length()这个方法?

数组中只有 length 这个属性, 不是方法, 没有后面的那对括号, 而String 类中,没有length属性, 只有方法, 也就是 length() 后面有对括号. 属性你可以看成是 数组类中的 变量, 而 length()方法可以看成是 String 类中定义好的 方法........

22. error和exception有什么区别?

Error(错误)是系统中的错误,程序员是不能改变的和处理的,是在程序编译时出现的错误,只能通过修改程序才能修正。
Exception(异常)表示程序可以处理的异常,可以捕获且可能恢复。遇到这类异常,应该尽可能处理异常,使程序恢复运行,而不应该随意终止异常。

23.super()与this()的区别?

在JAVA类中使用super来引用父类的成分,用this来引用当前对象,如果一个类从另外一个类继承,我们new这个子类的实例对象的时候,这个子类对象里面会有一个父类对象。怎么去引用里面的父类对象呢?使用super来引用,this指的是当前对象的引用,super是当前对象里面的父对象的引用。

24.面向对象的基本特征是什么?

面向对象是程序的一种面向方式,它的程序比较集中,它有两个成员,一个是属性,一个是方法,可以更集中的来写程序
主要特征:封装 ,继承 ,多态

25. Java的堆和栈的区别?


java的堆是一个运行时数据区,类的对象从中分配内存空间,用来存放由new创建的对象和数组。堆内存用来存放由new创建的对象和数组。 在堆中分配的内存,由Java虚拟机的自动垃圾回收器来管理。

栈的优势:存取速度比堆快,仅次于CPU中的寄存器,栈数据可以共享。

26.for和增强for哪一个遍历list集合更快,为什么?

foreach虽然是for循环的简化版本,但是并不是说foreach就比for更好用,foreach适用于循环次数未知,或者计算循环次数比较麻烦情况下使用效率更高,但是更为复杂的一些循环还是需要用到for循环效率更高。

27.JDK、JRE和JVM是什么?

JDK: JDK(Java Development Kit) 是 Java 语言的软件开发工具包(SDK)。在JDK的安装目录下有一个jre目录,里面有两个文件夹bin和lib,在这里可以认为bin里的就是jvm,lib中则是jvm工作所需要的类库,而jvm和 lib合起来就称为jre。
JRE:(Java Runtime Environment,Java运行环境),包含JVM标准实现及Java核心类库。JRE是Java运行环境,并不是一个开发环境,所以没有包含任何开发工具(如编译器和调试器)
JVM:JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。

28.什么是值传递和引用传递?

值传递:是对于基本数据类型的变量而言的。传递的是该变量的一个副本,改变副本并不影响原变量
引用传递:是对于对象型变量而言的。传递的是该变量地址的一个副本,并不是该对象本身

29.异常处理的时候,finally代码块的重要性是什么

无论是否抛出异常,finally代码块总是会被执行。就算是没有catch语句同时又抛出异常的情况下,finally代码块仍然会被执行。最后要说的是,finally代码块主要用来释放资源,比如:I/O缓冲区,数据库连接。

30.代码中如何实现多态

实现多态主要有以下三种方式:

  1. 接口实现
  2. 继承父类重写方法
  3. 同一类中进行方法重载

31.switch中能否使用string做参数

JDK1.6 的版本中,switch后面的括号里面只能放int类型的值,注意是只能放int类型,但是放byte,short,char类型的也可以。是因为byte,short,shar可以自动提升(自动类型转换)为int。而不能放long型和String型。
JDK1.7 的版本中,switch中可以使用字串String。但仍不支持long型。
原理:hashCode()+equals() 编译器在编译期间给代码做了转换。

32.基本数据类型有哪些

四种整数类型(byte、short、int、long)
两种浮点数类型(float、double)
一种字符类型(char)
一种布尔类型(boolean)

33.多线程网络编程

点击跳转页面

34.Tomcat的目录结构,并说说每个目录的大致功能?

Tomcat目录详解

35.说说你熟悉的响应码?

200:请求成功,浏览器会把响应体内容(通常是html)显示在浏览器中;
404:请求的资源没有找到,说明客户端错误的请求了不存在的资源;
500:请求资源找到了,但服务器内部出现了错误;
302:重定向

36.说一说Servlet的生命周期?

加载 Servlet的 class---->实例化 Servlet----->调用 Servlet的 init完成初始化---->响应请求(Servlet的 service方法)----->Servlet容器关闭时(Servlet的destory方法)

37.HTTP请求中get请求和post请求的区别?

  • get是从服务器上获取数据,post是向服务器传送数据。
  • get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTPpost机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。
  • 对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。
  • get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。
  • get安全性非常低,post安全性较高。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,544评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,430评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,764评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,193评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,216评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,182评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,063评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,917评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,329评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,543评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,722评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,425评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,019评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,671评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,825评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,729评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,614评论 2 353

推荐阅读更多精彩内容

  • (一)Java部分 1、列举出JAVA中6个比较常用的包【天威诚信面试题】 【参考答案】 java.lang;ja...
    独云阅读 7,101评论 0 62
  • 三重:代码、底层内存、源码 第一阶段:开发常用JavaSE基础、IDE、Maven、Gradle、SVN、Git、...
    guodd369阅读 16,508评论 1 44
  • 医生:“先交一万元,准备住院动手术吧!” 小二:“能不能尽量不要手术,保守治疗啊。” 女医生大怒:“不看了,你们走...
    刘凯军阅读 394评论 1 0
  • -01- 我是一个35岁的女人,我是家里的老大,下面还有一个小我三岁的弟弟 我到如今都已经结婚马上快十年了 而弟弟...
    城东李公子阅读 364评论 1 1
  • 2017年8月29号咖啡冥想: 我三个月的目标是种下种子,实现工作调动到新塘附近,或者调动到公司 本质是我希望可以...
    波罗豆阅读 54评论 0 0