面试技巧

这篇文章结合自身的工作经验,站在面试官和面试者的不同角度上来说明两种现象:

  1. 为山九刃,功亏一篑:差之毫厘的遗憾
  2. 云销雨霁,彩彻区明:柳暗花明的兴奋

有些问题回答上来不加分,But没有答上来or回答错误,Good bye…
也有些问题答不出来或者答错没有任何影响,但是答出来让面试官刮目相看…

送面试官一句话:

凡是不愿意看不到别人长处的人,总是一眼就看到别人不如自己之处。

送面试者一句话:

生命中最难的阶段不是没有人懂你,而是你不懂你自己。


1. 时空互换

在学习数据结构的时候,我们都会讨论 时间复杂度空间复杂度。纵观所有算法,无不围绕着时间和空间去优化,无不在这两方面进行权衡妥协。

面试过程中,若遇到算法题并尝试对其进行优化时,可以从这方面入手。一般情况下,我们都是牺牲空间来赢得时间。但在嵌入式编程或者存储空间有限的情况下,则会适当的牺牲时间来换取空间上的优化。

比如:递归优化(斐波那契数列… 爬楼梯问题…)


2. 面试中关于为什么这样的设计的问题?

Whatever is reasonable is true,and whatever is true is reasonable. 存在即合理

这种问题主要从效率安全 两个方面去阐述:

  1. String 为什么要设计成不可变的?
  2. String 为什么要重写hashCode()?
  3. 为什么要设计线程池?

3.(线程)安全与速度的抉择?

鱼和熊掌二者不可得兼。

目前这类问题在面试环节主要体现在以下两个方面:

  1. StringBuilder 和 StringBuffer 的选择.
  2. HashMap 和 HashTable 的选择.

IOW,在不涉及线程安全问题,线程安全 在速度上要稍逊于 非线程安全的。 (PS:可以类比 多经过一道防盗门 去理解)


4. 运算优化

我们在阅读源码的过程中,会发现其中有很多的移位操作。这里强调一点,可以 将乘除优化为左右移位操作。(PS:随着JVM越来越智能,已经帮我们自动处理啦)


5. 底层实现的特性

实现方式特点
数组实现查询速度快,插入,删除效率低
链表实现查询速度慢,插入,删除效率高
树实现扬长避短

Java 一般涉及的都是ArrayList,LinkedList…etc

这种基本问题若回答错误,绝对是Bye…柳暗花明的可能性也不复存在…


6. 关于数字问题

对于阅读过源码且有心的人来说,很容易发现Java在数字选择上有一点的规律:

  1. 质数(7,11,31)
  2. 有利于运算优化的数(7 = 2<< 3 -1, 31 = 2<<5 -1 )
  3. 2的N次方( 2^ N = 2 << N)

常见场景:

  1. 线程池有几个参数? 7
  2. Object类有几个方法? 7
  3. String的hashCode()如何实现?记住31即可
  4. HashTable的初始容量? 11
  5. HashMap的初始容量? 2 << 4 -1 = 16
  6. HashMap的链表进行树化的阈值? 8 = 2^3

总结

面试是双向选择的过程。有时候面试下来自我感觉良好,唯独少了一份OFFER…可以参考以上内容,是不是犯了"不可饶恕"的错误。

郑重声明:

就算不知道上面的内容,也是可以找到一份工作的…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值