0、如何回答面试题?

1、基本要求

四要

  • 声音要洪亮(洪亮会显得自己有自信)
  • 发音要清晰(尽量使用普通话)
  • 语速要放慢(慢一点可以让大脑帮你整理下一句话的逻辑)
  • 表达要层次(一句话概述答案–然后展开123–最后总结扣主题)

四不要

  • 不要说不会(这是态度问题,可以说我回去再研究一下)
  • 不要背答案(问题背过之后,一定要转化为自己的语言)
  • 不要追完美(把自己能表达清楚的说好就可以,不需要100%跟答案一致)
  • 不要胡乱说(可能一句话就是暴露了自己的水平)

2、回答思路

整体思路:总分总

  1. 一句话概括要回答的问题
  2. 展开说明,一定要有层次和连接词(首先,其次,然后,最后 1.2.3.4)
  3. 最后一句话总结下答案,回扣一下答案(总之)

3、问题分类

  1. 对比类:两个技术做对比
  2. 知识类:知识是什么,有什么特点、好处,包含什么等
  3. 列举类:列举一些方法或列举一些类或列举一些场景
  4. 原因类:为什么使用这个技术,为什么是这样一个情况,请解释原因。
  5. 原理类:解释什么技术底层实现的原理

对比类

两个技术做对比: 1. 先回答共同点 2. 再回答不同之处

问: 接口和抽象类的区别是什么? 

嗯,是这样的。接口和抽象类在我们开发过程中使用的都很多
它们的共同点是:都不能实例化对象
它们的不同点是:
1. 抽象类一般用于抽取子类中的共同方法和属性,接口一般用于指定实现类的规范
2. 抽象类可以有构造方法,作用是用给抽象父类中中的属性赋值;接口中不能有构造方法
3. 接口中不能含有静态代码块,而抽象类可以有静态代码块
4. 一个类只能继承一个抽象类,而一个类却可以实现多个接口
当然我这里对于接口的描述是基于JDK1.8之后的

知识类

知识是什么,有什么特点和好处,用在什么场景下,如果带上一句在我们公司怎么用的就更好了

谈谈你对Redis的理解

嗯,好的,Redis呢,是一款非常优秀的缓存服务器,目前在市面上使用率很高,它有很多优点,比如说:
1. 操作速度快:Redis的数据都保存在内存中,相比于其它硬盘类的存储,速度要快很多
2. 数据类型丰富:Redis支持 string,list,set,Zset,hash 等数据类型,基本满足我们开发中的各种使用场景
3. 使用场景丰富:Redis可用于缓存,消息队列,按 key 设置过期时间,过期后将会自动删除
当然在我的项目中也使用到了它
首先,我项目中有一个功能是短信发送,我们将生成的临时验证码存放到了redis中,利用了它的有效时间,可以过期自动删除
其次,还有一个功能是派单,我们会将工人的工号和目前的持单量放入redis中,使用Zset的自动排序功能,就可以清晰找到单量最少的工人
当然在其它项目中也有很多地方用到了它,由于时间关系,就不跟您一一列举了

列举类

先解释一下被列举内容的定义和特点,然后再列举3-5个以上的例子

请写出你最常见的几个RuntimeExceptionRuntimeException指得是运行时异常,这类异常的特点是不强制程序员一定给出处理方案,常见的有
    NullPointerException 空指针异常,调用了未经初始化的对象或者是不存在的对象
	IndexOutOfBoundsException 数组角标越界异常,常见于操作数组对象时发生
    ClassCastException 数据类型转换异常
	NoSuchMethodException 方法不存在异常
这些就是咱们工作中经常遇到的一些运行时异常

 
 

原因类

  1. 尽量用一句话概况这个技术的核心或定义
  2. 再说用这个技术的核心原因是什么,不使用这个技术会怎样
  3. 使用这个技术的注意事项【背面试题时,需要准备,以备面试题进一步提问】
为什么使用数据库连接池 
	数据库连接池主要负责分配、管理和释放数据库连接。 使用它的好处就是可以避免连接的频繁创建和销毁,它的原理就是重复使用一个现有的数据库连接,而不是重新建立一个。
	如果不使用连接池,需要每次连接数据库都创建新的连接,频繁地进行数据库连接操作将占用很多的系统资源,严重的甚至会造成服务器的崩溃。对于每一次数据库连接,使用完后都得断开。否则,如果程序出现异 常而未能关闭,将会导致数据库系统中的内存泄漏,最终将导致重启数据库。

 
 

原理类

  1. 先给出原理的最直接总结
  2. 再展开讲解原理的细节(尤其是为什么使用这个技术及作用)
  3. 原理的补充及总结
HashMap底层实现原理? 
HashMap底层数据结构是哈希表,哈希表在JDK1.8之前是数组+链表实现,在JDK1.8之后是数组+链表+红黑树实现的 
下面我以map中存储对象的流程给您说一下它的实现原理把
1. 当我们创建一个HashMap的时候,JDK就会在内存中创建一个长度为16的数组
2. 当我们调用put方法像HashMap中保存一个元素的时候,它会先调用key的hashCode方法计算出key的hash值
   然后使用得到hash值对数组长度取余,找出当前对象的元素在数组中的位置 
3. 接下来,它会判断算出的位置上是否有元素,如果没有,就会将此元素直接存储到当前位置上
   如果算出的位置上有元素或者是有链表,它会再调用key的equals方法跟存在元素的key做比较
   如果有一个比较得到的结果为true,则会进行值的覆盖,如果都为false,则会将元素追加在链表的末尾
当然,为了降低Hash冲突和链表长度,HashMap还做了一些优化
1. 当元素的数量超过数组大小与加载因子的乘积的时候,就会执行扩容,扩容为原来的2倍,并将原来数组中的键重新进行hash运算,然后分配到新数组中
2. 当链表的长度>8,并且数组长度>=64的时候,链表就会转换为红黑树,当红黑树结点数小于6时将再次转回为链表。 
这就是我对HashMap底层保存元素的理解了

 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值