从事php已经2年了,虽然技术增长的速度没达到我的理想状态,归根到底还是自己的问题。过去的事情就让它过去吧,从今天起就要好好的学习技术,争取能够寻找到更好的职业机会。我是最近这段时间才离职的,离职之后只投了腾讯、陌陌、触控、新浪微博、莱富特佰这5家公司;让我感到幸运的是新浪微博给了一个面试机会,让我感到不足的一点是:简历投了腾讯、却被腾讯拒绝了,其它的一些公司都还没来得及看我的简历,估计投递简历的应聘者太多了。多的不说直入正题吧!新浪微博约我的面试时间是早上10:00,我这个人有时候做事有拖延症,所以第一次面试新浪微博就迟到了25分钟,当时见到HR挺不好意思的,所以到了就先和HR道歉。HR见到我之后带我进入一个小会议室,然后给我80分钟,让我做面试题。面试题有4页,第一页是选择题:考的都是数据结构+基本的算法,第二页是一段C语言的代码:主要考验面试者几方面的能力,1.代码的容错性、2.代码的安全性、3.代码的性能。第三页有2条算法题、第四页主要考验面试者两个方面:1.在编写PHP代码的时候如何考虑接口的安全、2.针对微博用户的评论、私信、如何设计一套高效的通知系统。我看了这4页的面试题后:审查C语言代码和算法题直接放弃了,其它的面试题都做了。做完面试题后心里有点忐忑不安,毕竟算法题和审查C语言代码的题目自己真TM不会,心里有点怕面试官看了我的面试题会不会直接把我打发了?过了一会面试官来了,面试官刚坐下的时候我问他一句话:你们现在是招什么级别的PHP程序员?面试官回答:什么类型的都招,我要看你是什么水平。我听了这一句话之后,心里顿时没那么紧张了。面试官问我的第一个问题就是微博的通知系统,我当时就举了个例子来说,比如A用户向B用户发送私信。需要建立一张表,表字段如:id、第一个发送者的uid、第一个接收者的uid、内容、内容状态,当A用户向B用户发送私信的时候,先把私信的数据存储到数据表,然后建立一个缓存来存储B用户没有读取的私信数量,当B用户登录了网站,载入一段javascript代码,这段代码每30秒请求一次服务端接口,服务端接口根据用户的请求参数获取用户未读私信的缓存,然后判断缓存的值是否等于0或者空或者false,如果是0、空、false,就向浏览器返回一个没有未读信息状态、如果缓存的数值是1、或者其它非零非空非false的数量,就返回一个有未独信息状态,当B用户读取自己的未读私信信息时,把用户的未读私信缓存的数量做递减、当有别的用户向B用户发送私信时,B用户的未读私信缓存做递增、以这样的方式可以实现微博的通知的功能。说完这一个方案之后,我觉得面试官对我所描述的方案未必满意,所以就跟面试官说:我现在的技术水平还是有限,因为我现在对socket不熟悉,所以微博的通知功能无法做到真正的实时通信,但socket这技术我最近这段时间肯定会去学习,当我学会了socket,我会根据socket去考虑微博的通知功能。面试官听了之后说:没关系,技术都是一点一点积累的,没有人是一开始啥技术都会,你刚才跟我提到的方案我觉得还可以,你刚才说你要学socket,证明你还是有上进心的。然后面试官接着问第二个问题:
1.有10台数据库服务器,每台数据库服务器都有一张私信表,当A用户向B用户发送私信数据时,私信的数据该如何存储到数据库服务器?
2.当私信数据存储到某一台数据库服务器后,如何确保A用户和B用户能够查询出私信数据?
我的回答是:在配置文件里用数组的形式存储10台数据库服务器IP,用10个不一样字符串或者数值作为数组的key,数组的每一个key映射10台数据库服务器中其中一台服务器的ip。然后通过A用户的uid和B用户的uid算出数组的key,然后获取数组的key获取数据库的ip地址,然后根据IP和端口连接数据库,进行数据的存储和查询。面试官接着问,你有什么办法能够根据A用户的uid和B用户的uid算出数组的key?我当时就回答,一致性hash算法。面试官说不用一致性hash算法你自己能够设置一个规则来解决这个问题吗?我当时一时没想到就说,暂时没想到方案。
写到这里我就不详细跟卧龙阁的网友们介绍面试官问我的所有问题,毕竟文字太多,网友们估计没那么多耐心去读我的面经。剩余的一些问题如:PHP接受如何注重安全性、.sql语句基本调优、基础的问题如:根据当前时间获取上周3的日期…打开一个文件,如何读取时间小于5秒的id值….具体还有别的问题我也记得不太清楚了……..
当面试官问完我问题之后,问我又什么想问他的,我当时着重问了一下工作内容,问完了之后就没问题,最后面试官和我说你的情况我们公司会综合考虑一下,如果有情况会通知你复试,你复试的时候记得告诉我:用户私信的数据的存储和查询,不用一致性hash算法你有什么办法能够根据A用户的uid和B用户的uid算出指定的数值或者字符串来获取数据库服务器IP。
既然面试官这么说,我觉得我还是有希望的。但是到新浪微博面试的人还是挺多的,所以有没机会再次复试我就不知道了,反正保持一个平常心,能进入新浪微博是好事,进不去也不强求,反正工作肯定能找到。