面试宝典之经典面试题
日期:2021-04-07 浏览

问题一: 简单介绍下你自己

  解题思路: 要回答好这个问题,首先要了解面试官询问的意图,而不是上来就像记流水账一样回答,这样给面试官的印象分就减少了。

 

  面试官询问这个问题,主要的意图大概有:

 

观察你是否有为面试提前做准备,如果有提前准备,回答的时候就不会磕磕巴巴的。

 

观察你的语言表达能力,如果你的回答东一点、西一点,印象分会减少。

 

为后面的面试问题做铺垫,面试官可能会根据你自我介绍的点进行相应的拓展进行面试,比如你说擅长处理大数据,他可能会问你与大数据相关的知识,如高并发情况下,大数据如何保障效率。

 

观察你的总结能力,面试官让你自我介绍,绝对不是让你把简历上的东西再说一遍,而是想看你如何通过简短的几分钟,能够将自己的优点以及和面试这份工作的契合度有多少,虽然只是简短的几分钟,但是也是让面试官留下好印象的机会。

  知道了面试官询问的意图,那么我们就要有相对应的处理方案:

 

提前准备

 

  仔细阅读面试岗位的招聘要求,列出自己擅长的技术点,这样自我介绍的时候才能够将自己的优点跟招聘的要求联合起来。

 

   如:招聘上要求掌握XX技术的优先,你在自我介绍的时候可以将这个XX技能联系你之前的工作项目介绍,这样会让面试官对你的印象大大加分,他会认为你是提前有准备,表明你是很重视这个工作的,但是一定要提前了解这个技术,因为面试官可能会通过这个进行深入的场景询问。

 

  格式如下: 我知道贵公司招聘这个岗位要求中提到要掌握XX技术,这个技术我自认为自己擅长/我有使用过,因为在之前的XX项目中,处理XX问题时,我独立使用XX技术完成的功能开发。

 

控制时间

 

  面试官让你简单的介绍自己,不是想在那里听你长篇大论,而是想通过你的表达,快速了解你和工作的契合度。时长最好控制在2-3分钟,所以在面试前一定要将自我介绍的问题摘抄到纸上,平常多多来练习。

 

 

  此时,你只需要简单介绍个人信息,然后简单介绍自己之前做过的项目和使用的技术。

 

  格式如下:我叫XXX,来自XX,毕业于XX学校XX专业,XX年工作经验,参与过XX个项目,XX项目中,我主要负责XX功能开发,使用了XX技术。

 

保持自信

 

  无论你对面试是否有把握,你都要时刻保持自信,因为面试是双向选择的过程,而不是去乞求,即使这个面试失败了,可以总结原因,下次面试时改进。

 

  而不是,还没有开始面试就感觉低没有了自信,在面试官看来可能会认为你跟简历描述的不一样,在心里给你打了个大大的问号,从而让自己处于弱势方,即使面试成功了,后面谈论薪资的时候你也会处理弱势方,所以,无论如何,面试过程请一定保持自信。

问题二: String为什么是final?

这个问题主要从安全性和效率两方面进行回答:

安全性: String是最被使用的类之一,类中包含许多对于程序底层代码的调用,定义成为final,不能被继承,所以不会被修改,从而避免了因为继承而带来的安全隐患。

效率性: 定义成final,保障了线程安全,在多线程时无需加锁,提升了效率。

实现了String创建HashCode的不可变性: 因为String是不可变的,所以在创建String类的时候hashcode就被缓存了,调用时不需要重新计算。这也使得String很适合作为Mapkey,字符串处理的速度要远快于其他的键对象。

为了实现字符串池: 只有字符是不可变时,字符串池才可以实现。

问题三: StringStringBuffStringBuilder的区别

String是不可变的,StringBufferStringBuilder是可变的。

StringStringBuffer是线程安全的,StringBuilder是线程不安全的。

执行效率: StringBuilder > StringBuff > String

问题四: abstractfinalstatic关键字的区别?抽象类可以继承实体类?抽象类可以实例化?

abstract表示抽象的,可以用来修饰类、方法,分别表示抽象类,抽象方法,抽象类不可以直接创建对象实例,抽象方法需要被继承的子类重写。

abstract关键字不能与privatefinal关键字一起公用。

final表示最终的,可以用来修饰属性、方法、类,分别代表了属性不可以变(常量),方法不可被重写,类不能被继承。

finalprivate修饰的方法不能被覆盖,static修饰的方法可以被覆盖。

static表示静态的,能够修饰类、方法、变量、代码块,被它修饰的方法和变量可以直接通过类名进行访问。

抽象类可以继承实体类,抽象类不能实例化。

问题五: 声明和定义的区别

声明: 向编译器介绍"名字",相当于标识符,此时还没有分配有存储空间,:Integer a;

定义: 为声明的"名字"分配存储空间,:Integer x= 10;

区别联系: 把不需要建立存储空间的变量成为"声明",把需要存储空间的称为"定义"

问题六: HashMapHashTable的区别

作者不一样

产生的时间不一样(HashMapJDK1.2时产生的,HashtableJDK1.0是产生的,Hashtable不遵循驼峰命名)

HashMap不是线程安全的,Hashtable是线程安全的。

继承的父类不一样,HashMap继承的父类是AbstractMap,Hashtable继承的父类是Dictionary

对外提供的API不一样,HashMao提供的containsKey/containsValue来判断key/value是否存在,Hashtable提供了contains方法来判断key是否存在。

Null keyNull Value的支持不同: Hashtable不支持存在keyvaluenull,因为在put元素的时候,它会直接调用key.hashCode(),和判断value是否为空,为空则会抛出空指针异常。HashMap允许存在一个keynull,多个valuenull的情况。

HashMap线程不安全,但效率高于Hashtable,Hashtable给每个方法都加上了synchronized,所以线程安全,但是效率比HashMap低。

遍历方式不同,HashMap使用Entry数组方式进行遍历,Hashtable使用Enumeration方式遍历,JDK1.8后使用fail-fast方式。

初始化容量大小和扩容大小不同: HashMap的默认大小是16,扩容为原来的2倍。Hashtable默认大小是11,扩容为原来的2n+1

创建大小时如果有给定大小,HashMap使用直接给定的值,Hashtable则会将其扩容为2的幂次方。

问题七: 解决Hash冲突的方法

Hash冲突(碰撞): 两个不同的元素,但是Hash函数值一样。

开放定制法

再哈希法

链地址池

建立一个公共溢出区

问题八: finalfinallyfinalize的区别

final用于修饰属性、方法、类,分别表示属性不能被重新赋值(常量)、方法不可以被重写、类不能被继承。

finally是异常捕获语句的一部分,通常出现的形式是:trycatchfinallyfinally表示总是执行。

finalizeObject中的一个方法,它是由垃圾回收器进行调用的,只有当垃圾回收器回收对象的时候,会调用该对象的finalize方法。

问题九: equals==的区别

针对基础数据类型,没有equals方法,只有==,==比较的是他们的值。

针对引用类型,则分以下的情况:

基础类型对应的包装类型(8),因为重写了equals方法,所以它们的equals比较的是对象的值

"=="比较的是对象对应的内存地址值是否相等,equals默认比较的也是对象存在内存中地址值。

问题十: 重写(override)和重载(overload)的区别

重写存在于继承关系下,privatefinal修饰的方法都不能被重写,构造方法也不能被重写。

重写表示子类和父类中有方法名称、方法参数、返回值一样的方法,子类继承父类时可以重写这个方法的逻辑,当创建这个子类对象时,调用到这个方法的时候,就会去执行子类重写后的方法逻辑,相当于把与父类相同的方法的逻辑覆盖了,这是面向对象编程中多态性的一种表现。

重写要遵循"两同两大一小原则","两同"表示:方法名称、参数类型(包括顺序)与父类方法一致,"两大"表示:子类返回值类型、子类抛出的异常类型要小于等于父类的返回值类型和异常,“一大”表示:子类的访问权限要大于等于父类抛出的异常。

重载: 表示在一个类中有多个相同名称,但是参数列表不同的方法。

重载中的参数列表不同包括: 参数个数不同,参数类型不同,和参数顺序不同。

重载和参数的返回值类型无关