面试经历:
1,一个面试者都需要填写的表格,关于你的个人相关情况面试职位,期望薪水等。
2,技术面一面和技术面二面。
两个技术面分别提及的面试题目有:
个人抽象一下题目描述
1>一个城市有两种车,蓝色占85%和绿色占15%,有一天出车祸了目击者看到的车是绿色的概率是80%,问出车祸的车是绿色的概率?
条件概率相关的维基百科:http://zh.wikipedia.org/wiki/%E6%9D%A1%E4%BB%B6%E6%A6%82%E7%8E%87
大家看看就明白差不多了。
2>算法题:使用O(n)时间复杂度找出第K大数。
我个人不喜欢类似的算法问题,首先考察点比较局限,其次考察的内容如果面试者有过做该题的经历会很轻松应对,如果没有便很难短时间想清楚。
一般人可能第一印象就是排序,我也是这么回答的,不过貌似面试官不给通过,左耳朵耗子有个博客关于这个问题的描述以及个人观点看法等,地址:
http://coolshell.cn/articles/8138.html#more-8138
这道题的详细答案可以参考博客:
http://hi.baidu.com/sky_space/item/de296bfa6fd225c5a835a2cb
个人感觉面试官非常倾向于以下解法:
利用快速排序的思想,从数组S中随机找出一个元素X,把数组分为两部分Sa和Sb。Sa中的元素大于等于X,Sb中元素小于X。这时有两种情况:
1. Sa中元素的个数小于k,则Sb中的第k-|Sa|个元素即为第k大数;
2. Sa中元素的个数大于等于k,则返回Sa中的第k大数。时间复杂度近似为O(n)。
3>算法题:一个有序数组,里面可能有重复的数字,请找出搜索的数字的第一次出现的下标。
该问题我的思路是二分查找,对查找到的对象进行递减操作直到找到为止。这个思路好像也不是面试官想要的。
相似问题的链接地址:http://www.cnblogs.com/davidluo/articles/1837561.html
大家可以参考一下。
4>进程和线程的区别,有什么优缺点?
个人觉得面试官太过注重于谁好谁坏了。
多进程或者多线程这两个都是处于对多核CPU利用率上解决实际问题的。
至于多进程或者多线程的好坏不能直接给予评价,nginx多进程模型做的非常好因为人家在CPU利用率上面的开发已经到了极致,在nginx的代码中进程的通信,以及对数据的处理都做的非常好。这其中得益于其设计模式和其利用的异步非阻塞的epoll。而多线程程序如果这些地方你处理的够好能够把CPU里的利用率提起来线程之间通信流程不阻塞一样是很出色的。
与进程的区别:
1、CPU调度方面:CPU调度是以线程为基本单位进行的;
2、拥有资源方面:进程是拥有资源的基本单位,线程不拥有系统的资源,但是可以使用隶属于进程的资源;
3、并发方面: 线程 和 进程都支持并发;
4、系统开销方面: 创建进程的时候需要为进程分配资源,销毁进程时需要回收资源,所以使用进程的开销要大于使用线程的开销。
至于多进程多线程的定义之类的请百度一下得了。
5>操作系统调度单位是什么?
线程。这个百度结果也很多的。
6>php的题目
$a["1"] = "test";$a[1] = 123; var_dump($a); 输出的是什么?
结果:
array(1) {
[1]=>
int(123)
}
$a = 4;$a .= $a + 2; var_dump($a); 输出的是string(2) "46" 面试问的是哪个优先级高?
我回答的是加法,但是我感觉这个问题不只是优先级的问题,跟php的一些内部实现应该是相关的。
但是面试官写的好像是$a = .$a + 2; 这个有语法问题。
6>其他的就是项目经历之类的了,这个每个人都有所不同,因人而异了。
--------------------------------------------------------------------------------------------------------------------
个人看法:
美团面试的流程走的很好,工程师态度也特别好,但是工程师太过注重于自己的个人研究细节上了,问的问题或许不能考察的太全面,比如O(n)的时间复杂度找到第K大数这种题目太过刻板与局限性。
虽然本次面试不太顺利,自己的表现方面不能迎合面试官的出题思路,但是也是一次不错的经历。
貌似大多数公司面试都喜欢问类似的算法题目,鉴于此以后我可能会整理一些常见的题目放出来,希望能够对大家有所帮助。