# 一房地产数据服务初创公司的面经
北美一有关房地产开发和服务的初创公司面经。

因为新冠疫情的原因，很多面试都已经放到网络上了。在北美进行面试之前，还是建议所有打算从事 IT 的童鞋对基础概念都要熟悉一点点。

如果你是学习 Java 或者面向对象的话，通常使用的一些框架，云平台（主要是 AWS）都需要有一些了解才好。

针对 Java 来说，有关面向对象的概念，包括有什么是依赖注入，什么是反转，什么是组件，继承关系，接口，实现等等，都需要有一些基本的了解。

在面试的时候大部分情况都会问到上面的概念。

在搞清楚上面的概念后，就会有一些实际的算法了，其实这些实际的算法算不上难。正常人突击下基本上都可以掌握，唯一比较麻烦点的地方就是使用各种在线平台手动直接写。

其实这也能够看出来面试公司是否人性化的

## hashtable 是如何实现的
这个题目还是有点意思的。

很多人都知道 HashTable， 都知道 HashTable 或者 HashMap 是用来存储 K-V 的。但是至于 HashTable 是如何实现的，可能有很多人不知道。或者就算知道可能也不是非常容易的表述清楚。

这个题目的目的就是要求你设计一个 HashTable。在这个题目中，需要搞清楚几个知识点，K 是怎么存储的，V 又是怎么存储的，其中有一个非常重要的概念就是 K 的哈希（Hash）。

有关什么是 Hash 和 Java 中的哈希函数，请参考文章 https://www.isharkfly.com/t/java-hashcode/13447/2 中的内容。

准确的来说进行 Hash 就是对对象进行或者数据进行散列。当你拿到散列的整形数据后，你将会考虑如何将这一个整形数据存储到一个数组中，这个就是你需要的 Hash 表。通常的算法可能就是去模了。

当然假设你有 10 个数据，但是数组正好也是 10 个，那么最好的算法就是每一个数据存储在一个空间中。

当然实际情况可能就不是这样的了，假设你有 11 个数据，但是存储空间只有 10 个，那么就肯定有 2 个数据存储在同一个位置。这个时候你就可以使用链表来将存储在同一个空间的数据链下去。

![](https://com-ossez-www-discourse.s3.dualstack.us-east-2.amazonaws.com/discourse-uploads/original/2X/8/82069d264157d8363a6792fa19e027b09a505f34.png)

如上图显示的就是一个典型的 HashTable 的结构。

对一般的面试来说，掌握这么多的内容基本上能够考察你对基本数据结构的了解，以及对 HashTable 的了解。

如果还需要了解更多的，有关 HashTable 的负载因子，扩容等等的研究的话，其实已经超出了面试本身的范畴了。

正常人如果不是认真复习过，或者没事刷一下的话一般比较难答出来。

相信很多人都是使用 HashTable 或者 HashMap，其实很少去了解里面具体的算法和结构，说心里话也真心没有太大必要去了解。

在这个时候如果面试官揪着这堆东西不放，或者非要你说明白里面的很多配置。那基本上可以说明给你面试的人有病或者是有点孔乙己的意思了。

当然，还是建议在面试的时候复习下 HashTable 和 Hashmap 的关系，如果你真想啃一下的话，不妨去看看源代码。


## 100 以内素数编程，在线写
题目要求非常简单，就是将 100 以内的素数打印出来就可以了。

这个题目的难度并不大。但是如果你没有遇到过或者没有刷过这个题目的话，可能就会被搞懵逼了。

这个题目有几个关键点，首先 1 是一个特殊的素数，因此你的循环需要从 2 开始。这个很多时候和我们使用的循环从 0 开始有不同。

这个题目能够快速解答的关键就是需要使用定义的**函数来做**，尽量不要在循环里面嵌套循环，因为这样你会很难跳出这个循环，并且循环的起止判断不好判断。

了解了这 2 个点以后就可以比较容易的解决这个问题了。

有关素数的算法中间和代码，请参考：https://www.isharkfly.com/t/prime-numbers-from-1-to-100-100/13450 中的内容。

## 面试总结
这次面试时今年开始打算换工作以来的第一次面试，因此本身就是当成练手的性质了。

很多工作过比较长时间的人都会知道，在找工作之前，需要进行突击的算法，数据结构，基础概念的巩固。因为在实际工作中，这些东西没有人会用到，也没有人会无聊到去刷这些东西。

但是找工作的时候确不得不进行了解了。

总结这次面试来说就是准备不充分，基本上没有刷题就上去写了，而且有一段时间没有在记事本上写代码了，因此基本上是被他们搞懵逼了。

一上来就弄 HashTable 的算法，这个其实还是有点难度的，如果没有认真复习过一些常用的数据结构的话，肯定是做不出来的。

因为不是非常理想的状态来进行面试的，那么这个结果就可想而知了。

当然这 2 个题目用于巩固下基础还是非常不错的。

---
https://www.isharkfly.com/t/topic/13441