php面试必知必会常见问题

1 说出常用的10个数组方法

我觉得数组比较最能体现php基础语法的一个数据结构了,下面给大家列一下常用的10个关于操作数组的函数

in_array(判断数组中是否有某个元素) 

implode(将数组按照一定规律分解) 

json_encode(将数组转化成json) 

sort(排序,有很多排序的函数这里就说一个)

array_push(将一个活多个单元压入数组的末尾) 

array_merge(合并数组)

array_key_exists(检查键名是否存在于数组中) 

array_unique(去除数组中重复的值,只能对一位数组起作用) 

array_shift(移除数组中第一个单元)

php有很多关于数组的函数,但常用的就是这几个了,可能我说的还不是很合适,但没什么大问题。需要注意的是,不要为了应付面试而盲目的死记硬背php的数组函数,你像array_pop这样的函数,你倒是知道这样的函数,笔试的时候也打出来了,但当面试官问你,你平时怎么用这个方法,你不就噎菜了吗?!所以要写平时常用的

2 说出平时常用的操作字符串的方法,并解决具体问题

同上,字符串操作也是php的基础用法,下面尽可能全的罗列一下平时常用的字符串操作

substr(截取字符串) 

strlen(获取字符串长度)

strpos(查找字符串首次出现的位置) 

str_replace(字符串替换)

explode(将字符串按照规律转化成数组) 

strtoupper(将所有字母变成大写) 

strtolower 

ucfirst(将字符串的首字母变成大写)

ucwords(将字符串中每个单词的首字母变成大写)

strrev(反转字符串,其实不是很常用) 

substr_replace(替换字符串的子串,注意与str_replace的区别)

strip_tags(去除html和php标记,可以选择保留想要的标签)

trim(去除空格)

explode(分割成数组)

这些是比较常用的了,肯定还有一些我没有列举出来,毕竟php的字符串函数比较多又或者其他的函数我用的不多。另外,记住这个函数并不是目的,目的是会用,笔试的时候可不是简单的问你这些函数的名字,那都是要做具体的例子的。现在时间比较紧,有时间一定会举出10个例子来分析的



3 恒等于 貌似不应该把这个当做一个单独的知识点来说,但这确实是笔试题中经常考到的

反正我平时没有主动用过这个东西一次。“==”相比于”===”不同的是,前者之比较值的大小,后者会比较数据类型。举例说明

if(1 == ‘1’){echo “it’s right”;}

if(1 === ‘1’){}

很明显,前者是正确的。因为这两个变量的类型不同



4 三元运算符 

它的一般定义谁都会有,$a = 1 ? ‘one’ :0;但是有一次笔试我见了一个比较变态的题目,多个三元运算符和其他运算符联合在一起,让我不知道先执行哪一个,举例说明

echo (true?’true’:false?’t’:’f’);这个问题曾一段让我很郁闷,到底先执行哪一个呢?首先,肯定是从左到右的,echo ((true ? ‘true’ : ‘false’) ? ‘t’ : ‘f’);这样就够清晰了吧,哈哈

记住这一原则就可

5 require和include的异同

这应该是让我们比较恶心的问题了,但这却也是经常考的问题

我们都知道的是require在执行出错时不会继续执行,include会继续执行,还有就是require一般放在文件的头部包含一个初始化文件之类的东西,而include一般是在语句中用到了那些文件包含过来

6 session和cookie

这也是面试中常问到的问题,最简单的回答常是session保存在服务端,大量的session会增大服务器的压力,cookie因为保存在客户端所以没有这些问题,但cookie因为这个特点所以相对来说不安全,这是我初学php的时候知道的

后来我知道了,session与cookie联系在一起是通过session_id联系起来的,而seesion_id是保存在cookie中的,这也就是为什么我清了cookie,session会失效的原因。当然我们也可以不将session_id保存在cookie里,一般大型网站不会将用户信息保存在session里,正如上面所说的因为会占资源,这时会将session保存在DB中,当然这也和集羣有关,因为你如果使用了集羣的话,会有多台服务器,你seesion保存在这台服务器上而处理的操作却通过另一台服务器的话就找不到session了。另外,session的过期时间,很多人都以为在php的配置文件中配置了就可以,其实这不是最好的方式,因为这个过期时间还取决于另一个参数,也就是过了这个你设置的时间session可能不会马上被清掉。所以我们将session保存在DB中。



7 面对对象

这几乎是每次面试都会问到的问题,而面试官又有几个能明白的呢?这里不详细介绍这个问题

8 对mvc的理解

这道是个不难理解的概念,现在只要是框架都用这种模式来处理问题了,mvc和smarty还不一样。smarty没有将m和c分开,也就是业务逻辑和控制器还是混在一起的,比较典型的例子就是ecshop。控制器controller负责调度数据,接受请求,具体处理数据的操作让模板model来完成,然后再通过控制器将值传给试图view

这是目前我考虑到的php常考的问题,后续会不断补充的

Mysql

对于我们这种没有大数据处理经验的苦逼来说,只能业余时间多看些资料来弥补不足了,但这毕竟不如有真实工作经验来的有说服力

1 首先是扎实的sql语句,这是毋庸置疑的,下面讲的都是关于优化了,如果这个再不会的话就不应该了,这里我只介绍一个group by语句,我觉得这是所有语句中最难的一个

group by是根据字段分组,举个例子,订单表中,每个商品都有可能被买了多次,这里如何查询每个商品被购买的次数呢?

select count(*),goods_name  from table group by goods_id 这可以将商品名称和购买数量取出来

2 sql语句的优化,说完了基础的sql语句,下面说一下sql优化。这里要注意的地方很多

 一 尽量避免全局扫描,几乎没有将一个表中所有数据都使用的请求,对where order by使用的字段添加索引

 二 应尽量避免在where字句中使用!= <>操作符,否则存储引擎会放弃使用索引而进行全局搜索

 三 避免在where条件中使用or,这也会使存储引擎进行全局搜索

 四 使用模糊搜索的时候,like ‘%string%’,不会使用索引。like ‘string%’会使用索引

 五 慎用 in,可能也会导致全表检索。如果是连续的条件可以考虑使用between

 六 在where条件中使用参数、表达式操作和对字段进行函数操作也会导致全表检索。select id from t where num/2=100应修改为select id from t where num=100*2

      select id from t where substring(name,1,3)=’abc’ 应改成select id from t where name like ‘abc%’

 七 使用复合索引时,条件语句应该跟索引的顺序相同,否则不会使用索引导致全表扫描

  八 很多时候使用exists代替in是个好的选择

  九 并不是所有的查询都会使用索引,如果建立索引的字段有太多的重复值,即使建立了索引也不会用到。比如性别字段

  十 索引的数量。索引不是越多越好,使用索引可以加快检索速度,但会降低insert和update的效率(哎呀,我写不下去了,网上多的是)

 十一 尽量使用数字型字段,如果一个存储字段可以设置成数字类型就不要设置为字符串类型,具体为什么呢?首先,可以减少存储空间。其次可以提高检索速度

 十二 能用char的尽量不用varchar,因为char是固定长度的,所以检索速度快。但是相对来说占空大,所以应该对固定长度的字段用char,如身份证号

关于sql语句的优化差不多就是这样,等以后有实例经验了在补充



3 mysqli的概念及使用

总有那么一羣或牛逼或装逼的技术大佬,用发骚的声音问你,你平时操作数据库是用mysql提供的原生的方法还是怎样,你妹的我平时就知道这些你还想让我怎样

这里说一下mysqli相比于mysql的好处

 一 mysql是非持续性连接,每次一个请求都会打开一个进程。而mysqli则因为啥永久连接,会使用同一个进程

 二 mysqli可以同时处理多条sql,这是比较新鲜的,但这有什么用呢?

 三 sorry,目前实在找不出其他的好处了


4 大数据量优化实例

大公司都会有这么一项笔试题,搞一个实例,多少多少条数据,用户访问量很高,问怎么设计表才能最优化。这都是各自的公司针对他们的具体情况出的问题,针对性比较强,网上也不好搜索

这里关于mysql的面试知识我就先说这么多,其实我说的只是皮毛,以后会不断增加的



Linux

这里我遇见的问题到是不多,毕竟我不是高级程序员而且大公司也都有专门的运维人员,而且面试好像也不是太重视你会不会这东西

1 了解常用的命令

我现在掌握了90个命令,其实已经足够了。真正平时常用的命令也就那么十几个,就像你在windows上,除了点击 浏览 新建 删除 编辑等操作一样,常用的也就那么几个

2 能写shell

这是我目前还没有掌握的,没资格说这些,不过我马上就要开始学shell了,哈哈



Jquery

或者应该说js,但貌似现在用jquery的比较多,毕竟方便嘛,作为一名web开发人员,需要掌握这些歌东西真是一件快乐的事。jquery能做的事我大体上来说是两种,第一我们常见的特效,不过这偏前台。第二,跟后台进行数据交互(比如异步刷新页面用的就是ajax)

下面说两个例子,是我面试时遇到的

1 ajax如何解决跨域问题

点赞