记一次面试经历

来源:互联网 发布:搜词精灵软件 编辑:程序博客网 时间:2024/04/29 21:23

       今早七点半的巴士从中山赶到广州面试PHP开发助理,以前面的都是十来人、几十人的小公司,不少还是培训公司,坑的一逼!这次的公司不错,比较正规,好歹上百人了,只是笔试题做得一般,题目有的虽有学过,但忘了,好吧!这就是没准备充分的缘故!下面罗列下我还记得的题目(有些漏了就没办法了),之后hr面试聊了下,虽然技术问的不多,感觉自己回答的不好,言语比较少,不善言谈,硬伤啊!:

四道选择题

1、表达式转换成逆波兰表达式(以下是百度结果)

       所谓的逆波兰表示法(Reverse Polish notation,RPN,或逆波兰记法),是一种数学表达式方式,在逆波兰记法中,所有操作符置于操作数的后面,因此也被称为后缀表示法。逆波兰记法不需要括号来标识操作符的优先级。(摘自维基)
  举个简单的例子,平常我们写的数学表达式a+b,就是一种中缀表达式,写成后缀表达式就是ab+。再举一个复杂的例子,中缀表达式(a+b)*c-(a+b)/e的逆波兰式是ab+c*ab+e/-。

2、二分法找值

3、PHP中的自动加载的方法

function __autoload($className){}

4、一道情景描述题,具体忘了

接下来基本是简答题

1、PHP中传值与传引用的区别,以及各自适用的场景

2、array+array 与 array_merge() 的区别(以下是百度结果)

区别如下:
当下标为数值时,array_merge()不会覆盖掉原来的值,但array+array合并数组则会把最先出现的值作为最终结果返回,而把后面的数组拥有相同键名的那些值“抛弃”掉(不是覆盖)。
当下标为字符时,array+array仍然把最先出现的值作为最终结果返回,而把后面的数组拥有相同键名的那些值“抛弃”掉,但array_merge()此时会覆盖掉前面相同键名的值。

3、什么是设计模式?怎么理解工厂模式?

4、栈和堆的区别?

5、什么是内聚与耦合?OOP编程需要的内聚与耦合的关系如何?

6、用 sql 语句创建一个登录日志表,要求出现主键、索引、数据库引擎。在插入登录时间前要将时间转为dateTime,使用触发器来实现此功能。最后描述下mysql主从需要注意的问题或使用触发器与定时器需要注意的问题?

7、逻辑题

有1000瓶水,其中有一瓶有毒,小白鼠只要尝一点带毒的水24小时后就会死亡,至少要多少只小白鼠才能在24小时时鉴别出那瓶水有毒?

以下是百度后牛客网一位牛人的解释,答案是(10)2^10=1024

每个老鼠只有死或活2种状态,因此每个老鼠可以看作一个bit,取0或1
N个老鼠可以看作N个bit,可以表达2^N种状态(其中第i个状态代表第i个瓶子有毒)
例如:当N=2时,可以表达4种状态
0,0( 一号老鼠活,二号老鼠活)
0,1( 一号老鼠活,二号老鼠死)
1,0( 一号老鼠死,二号老鼠活)
1,1( 一号老鼠死,二号老鼠死)
具体来说,有A、B、C、D这4个瓶子,一号老鼠喝A和B, 二号老鼠喝B和C
如果 0,0 ( 一号老鼠活,二号老鼠活),说明是D有毒,第0个状态代表第4个瓶子有毒
如果 0,1 ( 一号老鼠活,二号老鼠死) ,说明是C有毒 ,第1个状态代表第3个瓶子有毒
如果 1,0 ( 一号老鼠死,二号老鼠活) ,说明是A有毒 ,第2个状态代表第1个瓶子有毒
如果 1,1 ( 一号老鼠死,二号老鼠死) ,说明是B有毒 ,第3个状态代表第2个瓶子有毒