面试宝典(二)之经典面试题(含详细答案)

简介: 面试宝典(二)之经典面试题(含详细答案)

文章标题

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

问题二: String为什么是final的?

问题三: String、StringBuff、StringBuilder的区别

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

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

问题六: HashMap和HashTable的区别

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

问题八: final、finally、finalize的区别

问题九: equals和==的区别

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

十一总结


  温馨提示: 本文大约3520字,阅读完大概需要3-5分钟,希望您能耐心看完,倘若你对该知识点已经比较熟悉,你可以直接通过目录跳转到你感兴趣的地方,希望阅读本文能够对您有所帮助,如果阅读过程中有什么好的建议、看法,欢迎在文章下方留言或者私信我,您的意见对我非常宝贵,再次感谢你阅读本文。

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

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


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


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


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


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


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

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


提前准备


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


  如:招聘上要求掌握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很适合作为Map的key值,字符串处理的速度要远快于其他的键对象。

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

问题三: String、StringBuff、StringBuilder的区别

String是不可变的,而StringBuffer、StringBuilder是可变的。

String、StringBuffer是线程安全的,StringBuilder是线程不安全的。

执行效率: StringBuilder > StringBuff > String

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

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

abstract关键字不能与private、final关键字一起公用。

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

final、private修饰的方法不能被覆盖,static修饰的方法可以被覆盖。

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

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

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

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

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

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

问题六: HashMap和HashTable的区别

作者不一样

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

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

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

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

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

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函数值一样。

开放定制法

再哈希法

链地址池

建立一个公共溢出区

问题八: final、finally、finalize的区别

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

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

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

问题九: equals和==的区别

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

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

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

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

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

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

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

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

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

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

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

十一总结

 感谢你阅读本文,如果你觉得文章哪里存在错误,欢迎私信或者在下方留言指出。如果你觉得本文对你有一些帮助,可以给我一个点赞和关注,让我有更多动力给大家带来更多的文章,谢谢。


相关文章
|
2天前
|
SQL 存储 Oracle
Oracle 面试题及答案整理,最新面试题
Oracle 面试题及答案整理,最新面试题
91 0
|
2天前
|
消息中间件 存储 负载均衡
RocketMQ 面试题及答案整理,最新面试题
RocketMQ 面试题及答案整理,最新面试题
171 4
|
2天前
|
消息中间件 存储 监控
RabbitMQ 面试题及答案整理,最新面试题
RabbitMQ 面试题及答案整理,最新面试题
123 1
|
2天前
|
消息中间件 存储 监控
Kafka 面试题及答案整理,最新面试题
Kafka 面试题及答案整理,最新面试题
154 3
|
22小时前
|
消息中间件 缓存 架构师
2024年阿里Android高级面试题分享,附学习笔记+面试整理+进阶书籍
2024年阿里Android高级面试题分享,附学习笔记+面试整理+进阶书籍
|
2天前
|
存储 缓存 安全
兄弟面试了百度,面试题分享一波
兄弟面试了百度,面试题分享一波
44 0
|
2天前
|
存储 缓存 安全
java锁优化高频面试题(真实面试经历总结)
java锁优化高频面试题(真实面试经历总结)
|
2天前
|
消息中间件 Java 关系型数据库
Java经常被问得面试题最常见的200+面试题
Java经常被问得面试题最常见的200+面试题
40 1
|
2天前
|
存储 缓存 监控
StarRocks面试题及答案整理,最新面试题
StarRocks面试题及答案整理,最新面试题
117 0
|
2天前
|
SQL 存储 监控
Navicat 面试题及答案整理,最新面试题
Navicat 面试题及答案整理,最新面试题
69 0