面试经历

泰为科技(2017年2月)

这家公司主要是做导航,难么地点的搜索和相关优化问题,是他们的目标。

当时,对于我来说,比较有挑战的问题。

  • 已知若干地点的坐标(x,y),... , 如果给你一个新的地点坐标,如何找出离他最近的点。

面试的时候,并没有研究过这类问题,给出过一些想法。业界已经有了成熟的解决方案

https://en.wikipedia.org/wiki/Nearest\_neighbor\_search

https://people.csail.mit.edu/indyk/helsinki-1.pdf

http://gamedev.stackexchange.com/questions/27264/how-do-i-optimize-searching-for-the-nearest-point

平常的问题都是一维的。上了二维,发生了质变。虽然树和图看起来不像一维,但是树和图里面存储的也是一位的数据:数值,字符串,而且根据一维数据之间的大小关系,维护着某种有序结构。像堆,红黑树。

而对于计算机来讲,它只会在一个大数组上,做做比较,加减乘除,在根据地址跳来,跳去。所以,你要以计算机的能力去思考和解读问题,写出程序教计算机如何运算。计算机是不智能,但是一旦学会,永远都不会错。

eBxx:估计是失败了(2017/3/18)

他们的技术其实也没啥,我也不是很感兴趣,他们的系统就是Web App, 没有数据分析,没有cache, 数据库服务是调用别人的。

  • 一道数据结构,算法题。Stack&MaxValue
  • 有没有遇到多线程的问题?
  • Web服务器高并发的时候会如何?超时,客户端和服务器的机制分别是什么?
  • Linux很熟吗?工作中没有直接面对,但操作系统知识充足,是基础,自信说出,这不是我的弱项。
  • POST和PATCH的区别? POST是Create, PUT是整体修改,PATCH是修改部分
  • REST 为什么设计这么复杂?品牌的力量,著名公司和组织,也有这样的设计,为什么不可以,只是你面试官没见过。
  • 你的Java内存不大的话?STW也不会太长?是不是可以接受?
  • 创建索引的时候要注意什么?
  • 有没有做过业余项目,开源项目?结果导向,没做完的,就不要说了。还不如说,没做过。如果没啥结果,就说公司有规定不能做私活,有被抓到的人。
  • 什么是微服务? http://www.oschina.net/news/70121/microservice
  • 如何保证软件质量?在EMC学到了什么?
  • 面试官总是觉得EMC的系统没并发没大数据量,觉得很简单。我要想办法在面试中,让面试官知道EMC这个系统复杂在什么程度。Unity怎么也要PB级别,IOPS也要上万吧。系统limit是多少,文件系统的复杂程度。CP的复杂之处在什么地方?

要承认面试官的观点或者疑问的合理性,但也要说明自己这样设计的原因,而不是一味地附和面试官,说这个地方应该改。而是有他的逻辑,这个地方就要有张辰的视角,管你是谁,是我老板也好,职位比我高也好,面试官也好,我以真理为标准,只认技术的正确与否。你是要主导地展示自己的产品,面试官短时间内不一定能够全面理解你的产品,你要有销售的能力,产品就是这样,打消所有客户的顾虑,而不是说对,某些地方我需要重做。

  1. https://en.wikipedia.org/wiki/OASIS_(organization\ oData里的Query build-in functions就有类似@count,@concat的东西。OASIS还制定了AMQP标准。
  2. 给别人解释这样做的原因?逻辑上解释通,论证;引经据典,大公司大品牌也是这样做的,引证。
  3. 我可以为团队带来不同的视角,带了EMC的经验,带来我的优势。
  4. 张辰的Artigen2

OceanBase:

B Tree

https://cstack.github.io/db\_tutorial/parts/part7.html

https://cstack.github.io/db\_tutorial/

https://www2.cs.duke.edu/courses/spring17/compsci316/lectures/15-index-qp.pdf

https://stackoverflow.com/questions/33009174/postgres-usage-of-btree-indexes-vs-mysql-btrees

https://ieftimov.com/postgresql-indexes-btree

http://patshaughnessy.net/2014/11/11/discovering-the-computer-science-behind-postgres-indexes

http://momjian.us/main/presentations/internals.html

MySQL InnoDB B+: https://blog.jcole.us/2013/01/10/btree-index-structures-in-innodb/

结构的区别:

B和B+树的一个最区别点,就是所有的Key数据都会出现在叶子节点,中间节点的Key也会重复出现在叶子节点,但是B树就不会。正是因为

这个原因,所以说,B+树才能把所有叶子节点连接起来,用以扫描所有元素。而B树做不到这一点。

B+树的索引数据至多出现两次,一个可能是在非叶子节点,一个是在叶子节点。B树的索引数据只会出现一次。

B树的查找可以在中间节点终结(如果命中的话), B+树的查找肯定都要终结在叶子节点,无论是命中还是没命中。

B+树如何做范围查询,先查找到低值,然后,在叶子节点的链表中,依次扫描直到当前值大于高值。

因为结构的不一样而导致的性质的区别:

应用场景的区别:

https://en.wikipedia.org/wiki/Producer%E2%80%93consumer\_problem

https://www.tutorialspoint.com/java\_concurrency/concurrency\_fork\_join.htm'

http://thesecretlivesofdata.com/raft/

https://raft.github.io/

https://yeasy.gitbooks.io/blockchain\_guide/content/distribute\_system/bft.html

mutex, semaphore, monitor

https://stackoverflow.com/questions/7335950/semaphore-vs-monitors-whats-the-difference

semaphore: P & V

monitor?: wait and singal

monitor lock?

monitor vs condition sychronization

http://www.comp.nus.edu.sg/~abhik/CS3211/lectures/Lec6.pdf

https://www.slideshare.net/pgdayasia/introduction-to-vacuum-freezing-and-xid

  1. 分布式系统?分类,要解决的问题。分布式一致性算法,HA, 。你要能娓娓道来 Paxos Ceph,Cassandra, GFS,

  2. JDK tool? 线上系统必备。也要学习

  3. TCP? 拥塞控制,滑动窗口,这是TCP的基本,核心和必备,你要要会。

  4. 如果有20万并发,QPS? 高并发系统的设计思路和方法。

  5. 所做系统的设计与难点? 如何做到HA,高可用?所做系统的复杂度在哪里?如何处理高并发? DP? 都需要刻苦学习,脚踏实地。 OpenStack, Unity,

如何能有这种经验? OpenStack?

不仅要知道设计理念,更要知道如何实现的?知道理念没用,你有没能力创建一个? "What I cannot create, I do not understand" -- Richard Feynman

results matching ""

    No results matching ""