当前位置:首页 » 工作应聘 » php面试题

php面试题

发布时间: 2020-12-25 13:06:21

❶ PHP面试一般会问些什么问题

那要看面试人的水平、拟聘任岗位的工作内容来定,如果有水平的面试老版实,一般是问下面三权个方面的内容之一:数据库、数据结构、算法。

数据库可以让你设计一个应用,口头描述一下如何设计这个数据库。数据结构一般是问链表、队列、堆栈相关的,算法很丰富,一般是问简单的二分查找等。

补充:
你可以直接问他的呀。如果你执着的需要知道自己的缺点,或许会感动对方。

❷ php 面试遇到一个问题,思考出了一点门道,但是不知道该怎么写这个函数!

看要求转换前和转换后的结构都有些不实用,野路子。按字面写了..

<?php//ver.>5.4.0
$arr=[
['1_class'=>'a','2_class'=>'b','3_class'=>'c',
'1_id'=>1,'2_id'=>2,'3_id'=>3],
['1_class'=>'a','2_class'=>'b','1_id'=>1,'2_id'=>2,],
['1_class'=>'aa','2_class'=>'bb','3_class'=>'cc',
'1_id'=>11,'2_id'=>22,'3_id'=>33]];
$o=[];
foreach($arras$rec){
$i=1;$clsKey=$i.'_class';$cur=&$o;
while(array_key_exists($clsKey,$rec)){
$eid=$rec[$i.'_id'];
if(!array_key_exists($clsKey,$cur))
$cur[$eid]=['value'=>$eid,'label'=>$rec[$clsKey],'children'=>[]];
$i++;$clsKey=$i.'_class';
$cur=&$cur[$eid]['children'];
}
}
echo'<pre>'.print_r($o,true).'</pre>';
Array
(
[1]=>Array
(
[value]=>1
[label]=>a
[children]=>Array
(
[2]=>Array
(
[value]=>2
[label]=>b
[children]=>Array
(
)

)

)

)

[11]=>Array
(
[value]=>11
[label]=>aa
[children]=>Array
(
[22]=>Array
(
[value]=>22
[label]=>bb
[children]=>Array
(
[33]=>Array
(
[value]=>33
[label]=>cc
[children]=>Array
(
)

)

)

)

)

)

)

❸ 在面试PHP工程师时会被问哪些问题

面试来官在面试求职的PHP工程自师时所问的问题千奇百怪,但由于他们需要的是一个PHP工程师,所以他们提问的问题一般不会偏离以下几个角度:
技术线(偏深度):
1. 基础知识,比如数据结构,多线程,I/O,Http协议等。
2. 语言深度,比如PHP的运行机制,性能优化,APC(以及其原理等)。
3. 源码阅读,比如看过哪些框架,其中的机制是怎么样的,往细了问。
4. 知识宽度,静态语言,比如C、Java等,我始终觉得只会一门语言不是什么好事情。
5. 项目经验,做过什么,是否复杂,负责什么,做了什么。
业务线(偏能力):
1. 业务能力,也就是之前做过的项目(担任的角色,负责的部分)。
2. 沟通能力,这一点能从沟通中就看出来。
3. 主动性,之前主动推动的事物等等,哪怕是一个小的点也可以。
4. 抗压能力,之前做过的项目中去挖掘细节。
5. 技术宽度,了解不一定要深入,一般会问一些比较泛的,比如多语言,Linux操作,HTTP协议等。

❹ PHP面试题:PHP数组函数常见的有哪些

array_splice() 删除数组中的指定元

array_splice(数组名,从前往后删的个数,new一个数组的大小);没有第三参数也就没有返数组,没有第三个参数时,第二个参数的意义为从前往后保留几个

exp:
<?php $my_array=array( //建立数组 "hehe"=>"haha", "A"=>"lu", "lu"=>"ge" ); $new=array_splice($my_array,1,3); //使用array_splice(数组名,从前往后删的个数,new一个数组的大小); var_mp($new); ?>
结果:array(2) { ["A"]=> string(2) "lu" ["lu"]=> string(2) "ge" }

2、foreach()数组的遍历

用法:foreach(数组 as 键名=>键值)或foreach(数组 as 键值)

exp:
<?php $my_array=array( //建立数组 "hehe"=>"haha", "A"=>"lu", "lu"=>"ge" ); foreach($my_array as $key=>$value) { echo $key."=>".$value."<br/>"; } ?>
输出结果:
hehe=>haha A=>lu lu=>ge

3、数组的排序

(1)sort()和rsort() 按键值排序sort()从小到大,rsort()从大到小

sort () exp :
<?php $my_array=array(1,2,3,6,7,8,9,4,5);//建立数组 sort($my_array); foreach($my_array as $keys=>$value) { echo $keys."=>".$value."<br/>"; } ?>
输出结果:
0=>1 1=>2 2=>3 3=>4 4=>5 5=>6 6=>7 7=>8 8=>9
rsort() exp:
<?php $my_array=array(1,2,3,6,7,8,9,4,5);//建立数组 rsort($my_array); foreach($my_array as $keys=>$value) { echo $keys."=>".$value."<br/>"; } ?>
输出结果:
0=>9 1=>8 2=>7 3=>6 4=>5 5=>4 6=>3 7=>2 8=>1
(2).asort()和arsort()和上面的原理一样,不过不改变键名和键值的对应关系

exp:
<?php $my_array=array(1,2,3,6,7,8,9,4,5);//建立数组 asort($my_array); foreach($my_array as $keys=>$value) { echo $keys."=>".$value."<br/>"; } ?>
输出结果:
0=>1 1=>2 2=>3 7=>4 8=>5 3=>6 4=>7 5=>8 6=>9
(3)ksort()和krsort()是按键名的大小排序

4.数组的数学类函数

array_sum()计算数组的所有键值的和 count()计算元素的个数

exp:
<?php $my_array=array(1,2,3,6,7,8,9,4,5);//建立数组 echo array_sum($my_array); ?>
输出结果:45

5.其他函数

array_unique() 去除数组中的相同元素

in_array()检测一个值是否在数组中(返回true和false)

array_search()返回的是键或值,返回的是键值所对应的键名

shuffle()打乱原有的数组
<?php $my_array=array(1,2,3,6,7,8,9,4,5,5,5,5);//建立数组 array_unique($my_array);//去除数组中的相同元素 var_mp($my_array); echo "<br/>"; echo in_array(5,$my_array); echo "<br/>"; $new=array_search(6,$my_array);//返回的是键值所对应的键名 echo $new; ?>
输出结果:
array(12) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(6) [4]=> int(7) [5]=> int(8) [6]=> int(9) [7]=> int(4) [8]=> int(5) [9]=> int(5) [10]=> int(5) [11]=> int(5) } 1 3

❺ PHP面试中你要问面试官的问题有哪些

建议大家,在回问的时候,先问与工作相关的问题,最后问这种上下班的问题。专总结几属个问题,大家可以试着问问:

  1. 这个职位在公司的具体职责是什么,目前最紧要的任务是什么?

  2. 公司对我面试的这个岗位的定位是什么,最希望这个人达成的工作指标有哪些?

  3. 如果我有幸加入,公司您希望我三个月完成哪些工作?

  4. 公司希望通过这个职位实现的长期目标是什么?

  5. 公司的价值观和愿景是什么?

  6. 公司未来一年的发展计划和团队规划?

  7. 公司是一群什么样的小伙伴,这个岗位所在的的团队是什么氛围?

  8. 通过刚才和我沟通,您对我的评价是什么,您觉得我的优势和劣势是什么?

❻ php面试题 memcache和redis的区别

Redis与Memcached的区别

传统MySQL+ Memcached架构遇到的问题

实际MySQL是适合进行海量数据存储的,通过Memcached将热点数据加载到cache,加速访问,很多公司都曾经使用过这样的架构,但随着业务数据量的不断增加,和访问量的持续增长,我们遇到了很多问题:

1.MySQL需要不断进行拆库拆表,Memcached也需不断跟着扩容,扩容和维护工作占据大量开发时间。

2.Memcached与MySQL数据库数据一致性问题。

3.Memcached数据命中率低或down机,大量访问直接穿透到DB,MySQL无法支撑。

4.跨机房cache同步问题。

众多NoSQL百花齐放,如何选择

最近几年,业界不断涌现出很多各种各样的NoSQL产品,那么如何才能正确地使用好这些产品,最大化地发挥其长处,是我们需要深入研究和思考的
问题,实际归根结底最重要的是了解这些产品的定位,并且了解到每款产品的tradeoffs,在实际应用中做到扬长避短,总体上这些NoSQL主要用于解
决以下几种问题

1.少量数据存储,高速读写访问。此类产品通过数据全部in-momery 的方式来保证高速访问,同时提供数据落地的功能,实际这正是Redis最主要的适用场景。

2.海量数据存储,分布式系统支持,数据一致性保证,方便的集群节点添加/删除。

3.这方面最具代表性的是dynamo和bigtable 2篇论文所阐述的思路。前者是一个完全无中心的设计,节点之间通过gossip方式传递集群信息,数据保证最终一致性,后者是一个中心化的方案设计,通过类似一个分布式锁服务来保证强一致性,数据写入先写内存和redo log,然后定期compat归并到磁盘上,将随机写优化为顺序写,提高写入性能。

4.Schema free,auto-sharding等。比如目前常见的一些文档数据库都是支持schema-free的,直接存储json格式数据,并且支持auto-sharding等功能,比如mongodb。

面对这些不同类型的NoSQL产品,我们需要根据我们的业务场景选择最合适的产品。

Redis适用场景,如何正确的使用

前面已经分析过,Redis最适合所有数据in-momory的场景,虽然Redis也提供持久化功能,但实际更多的是一个disk-
backed的功能,跟传统意义上的持久化有比较大的差别,那么可能大家就会有疑问,似乎Redis更像一个加强版的Memcached,那么何时使用
Memcached,何时使用Redis呢?

如果简单地比较Redis与Memcached的区别,大多数都会得到以下观点:

1 Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,zset,hash等数据结构的存储。

2 Redis支持数据的备份,即master-slave模式的数据备份。

3 Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。

抛开这些,可以深入到Redis内部构造去观察更加本质的区别,理解Redis的设计。


Redis中,并不是所有的数据都一直存储在内存中的。这是和Memcached相比一个最大的区别。Redis只会缓存所有的
key的信息,如果Redis发现内存的使用量超过了某一个阀值,将触发swap的操作,Redis根据“swappability =
age*log(size_in_memory)”计
算出哪些key对应的value需要swap到磁盘。然后再将这些key对应的value持久化到磁盘中,同时在内存中清除。这种特性使得Redis可以

保持超过其机器本身内存大小的数据。当然,机器本身的内存必须要能够保持所有的key,毕竟这些数据是不会进行swap操作的。同时由于Redis将内存

中的数据swap到磁盘中的时候,提供服务的主线程和进行swap操作的子线程会共享这部分内存,所以如果更新需要swap的数据,Redis将阻塞这个
操作,直到子线程完成swap操作后才可以进行修改。

使用Redis特有内存模型前后的情况对比:
VM off: 300k keys, 4096 bytes values: 1.3G used
VM on: 300k keys, 4096 bytes values: 73M used
VM off: 1 million keys, 256 bytes values: 430.12M used
VM on: 1 million keys, 256 bytes values: 160.09M used
VM on: 1 million keys, values as large as you want, still: 160.09M used



从Redis中读取数据的时候,如果读取的key对应的value不在内存中,那么Redis就需要从swap文件中加载相应数据,然后再返回给请求方。

这里就存在一个I/O线程池的问题。在默认的情况下,Redis会出现阻塞,即完成所有的swap文件加载后才会相应。这种策略在客户端的数量较小,进行

批量操作的时候比较合适。但是如果将Redis应用在一个大型的网站应用程序中,这显然是无法满足大并发的情况的。所以Redis运行我们设置I/O线程
池的大小,对需要从swap文件中加载相应数据的读取请求进行并发操作,减少阻塞的时间。

如果希望在海量数据的环境中使用好Redis,我相信理解Redis的内存设计和阻塞的情况是不可缺少的。

补充的知识点:

memcached和redis的比较

1 网络IO模型

Memcached是多线程,非阻塞IO复用的网络模型,分为监听主线程和worker子线程,监听线程监听网络连接,接受请求后,将连接描述
字pipe 传递给worker线程,进行读写IO, 网络层使用libevent封装的事件库,多线程模型可以发挥多核作用,但是引入了cache
coherency和锁的问题,比如,Memcached最常用的stats
命令,实际Memcached所有操作都要对这个全局变量加锁,进行计数等工作,带来了性能损耗。

(Memcached网络IO模型)

Redis使用单线程的IO复用模型,自己封装了一个简单的AeEvent事件处理框架,主要实现了epoll、kqueue和select,
对于单纯只有IO操作来说,单线程可以将速度优势发挥到最大,但是Redis也提供了一些简单的计算功能,比如排序、聚合等,对于这些操作,单线程模型实
际会严重影响整体吞吐量,CPU计算过程中,整个IO调度都是被阻塞住的。

2.内存管理方面

Memcached使用预分配的内存池的方式,使用slab和大小不同的chunk来管理内存,Item根据大小选择合适的chunk存储,内
存池的方式可以省去申请/释放内存的开销,并且能减小内存碎片产生,但这种方式也会带来一定程度上的空间浪费,并且在内存仍然有很大空间时,新的数据也可
能会被剔除,原因可以参考Timyang的文章:http://timyang.net/data/Memcached-lru-evictions/

Redis使用现场申请内存的方式来存储数据,并且很少使用free-list等方式来优化内存分配,会在一定程度上存在内存碎片,Redis
跟据存储命令参数,会把带过期时间的数据单独存放在一起,并把它们称为临时数据,非临时数据是永远不会被剔除的,即便物理内存不够,导致swap也不会剔
除任何非临时数据(但会尝试剔除部分临时数据),这点上Redis更适合作为存储而不是cache。

3.数据一致性问题

Memcached提供了cas命令,可以保证多个并发访问操作同一份数据的一致性问题。 Redis没有提供cas 命令,并不能保证这点,不过Redis提供了事务的功能,可以保证一串 命令的原子性,中间不会被任何操作打断。

4.存储方式及其它方面

Memcached基本只支持简单的key-value存储,不支持枚举,不支持持久化和复制等功能

Redis除key/value之外,还支持list,set,sorted set,hash等众多数据结构,提供了KEYS

进行枚举操作,但不能在线上使用,如果需要枚举线上数据,Redis提供了工具可以直接扫描其mp文件,枚举出所有数据,Redis还同时提供了持久化和复制等功能。

5.关于不同语言的客户端支持

在不同语言的客户端方面,Memcached和Redis都有丰富的第三方客户端可供选择,不过因为Memcached发展的时间更久一些,目
前看在客户端支持方面,Memcached的很多客户端更加成熟稳定,而Redis由于其协议本身就比Memcached复杂,加上作者不断增加新的功能
等,对应第三方客户端跟进速度可能会赶不上,有时可能需要自己在第三方客户端基础上做些修改才能更好的使用。

根据以上比较不难看出,当我们不希望数据被踢出,或者需要除key/value之外的更多数据类型时,或者需要落地功能时,使用Redis比使用Memcached更合适。

关于Redis的一些周边功能

Redis除了作为存储之外还提供了一些其它方面的功能,比如聚合计算、pubsub、scripting等,对于此类功能需要了解其实现原
理,清楚地了解到它的局限性后,才能正确的使用,比如pubsub功能,这个实际是没有任何持久化支持的,消费方连接闪断或重连之间过来的消息是会全部丢
失的,又比如聚合计算和scripting等功能受Redis单线程模型所限,是不可能达到很高的吞吐量的,需要谨慎使用。

总的来说Redis作者是一位非常勤奋的开发者,可以经常看到作者在尝试着各种不同的新鲜想法和思路,针对这些方面的功能就要求我们需要深入了解后再使用。

总结:

1.Redis使用最佳方式是全部数据in-memory。

2.Redis更多场景是作为Memcached的替代者来使用。

3.当需要除key/value之外的更多数据类型支持时,使用Redis更合适。

4.当存储的数据不能被剔除时,使用Redis更合适。

谈谈Memcached与Redis(一)

1. Memcached简介

Memcached是以LiveJurnal旗下Danga Interactive公司的Bard
Fitzpatric为首开发的高性能分布式内存缓存服务器。其本质上就是一个内存key-value数据库,但是不支持数据的持久化,服务器关闭之后数
据全部丢失。Memcached使用C语言开发,在大多数像Linux、BSD和Solaris等POSIX系统上,只要安装了libevent即可使
用。在Windows下,它也有一个可用的非官方版本(http://code.jellycan.com/memcached/)。Memcached
的客户端软件实现非常多,包括C/C++, PHP, Java, Python, Ruby, Perl, Erlang,
Lua等。当前Memcached使用广泛,除了LiveJournal以外还有Wikipedia、Flickr、Twitter、Youtube和
WordPress等。

在Window系统下,Memcached的安装非常方便,只需从以上给出的地址下载可执行软件然后运行memcached.exe –d
install即可完成安装。在Linux等系统下,我们首先需要安装libevent,然后从获取源码,make && make
install即可。默认情况下,Memcached的服务器启动程序会安装到/usr/local/bin目录下。在启动Memcached时,我们可
以为其配置不同的启动参数。

1.1 Memcache配置

Memcached服务器在启动时需要对关键的参数进行配置,下面我们就看一看Memcached在启动时需要设定哪些关键参数以及这些参数的作用。

1)-p <num> Memcached的TCP监听端口,缺省配置为11211;

2)-U <num> Memcached的UDP监听端口,缺省配置为11211,为0时表示关闭UDP监听;

3)-s <file> Memcached监听的UNIX套接字路径;

4)-a <mask> 访问UNIX套接字的八进制掩码,缺省配置为0700;

5)-l <addr> 监听的服务器IP地址,默认为所有网卡;

6)-d 为Memcached服务器启动守护进程;

7)-r 最大core文件大小;

8)-u <username> 运行Memcached的用户,如果当前为root的话需要使用此参数指定用户;

9)-m <num> 分配给Memcached使用的内存数量,单位是MB;

10)-M 指示Memcached在内存用光的时候返回错误而不是使用LRU算法移除数据记录;

11)-c <num> 最大并发连数,缺省配置为1024;

12)-v –vv –vvv 设定服务器端打印的消息的详细程度,其中-v仅打印错误和警告信息,-vv在-v的基础上还会打印客户端的命令和相应,-vvv在-vv的基础上还会打印内存状态转换信息;

13)-f <factor> 用于设置chunk大小的递增因子;

14)-n <bytes> 最小的chunk大小,缺省配置为48个字节;

15)-t <num> Memcached服务器使用的线程数,缺省配置为4个;

16)-L 尝试使用大内存页;

17)-R 每个事件的最大请求数,缺省配置为20个;

18)-C 禁用CAS,CAS模式会带来8个字节的冗余;

2. Redis简介

Redis是一个开源的key-value存储系统。与Memcached类似,Redis将大部分数据存储在内存中,支持的数据类型包括:字
符串、哈希表、链表、集合、有序集合以及基于这些数据类型的相关操作。Redis使用C语言开发,在大多数像Linux、BSD和Solaris等
POSIX系统上无需任何外部依赖就可以使用。Redis支持的客户端语言也非常丰富,常用的计算机语言如C、C#、C++、Object-C、PHP、
Python、Java、Perl、Lua、Erlang等均有可用的客户端来访问Redis服务器。当前Redis的应用已经非常广泛,国内像新浪、淘
宝,国外像Flickr、Github等均在使用Redis的缓存服务。

Redis的安装非常方便,只需从http://redis.io/download获取源码,然后make && make

install即可。默认情况下,Redis的服务器启动程序和客户端程序会安装到/usr/local/bin目录下。在启动Redis服务器时,我们
需要为其指定一个配置文件,缺省情况下配置文件在Redis的源码目录下,文件名为redis.conf。

❼ PHP面试官们你们面试实习生会提什么问题

那要看面试人的水平、拟聘任岗位的工作内容来定,如果有水平的面试老实内,一般是问下容面三个方面的内容之一:数据库、数据结构、算法。
数据库可以让你设计一个应用,口头描述一下如何设计这个数据库。数据结构一般是问链表、队列、堆栈相关的,算法很丰富,一般是问简单的二分查找等。
一般来说,
如果初学者,会问一些内置函数用法,或者函数变通使用。然后一些逻辑方面的题目。
如果2-3年,会问大数据量,高并发,数据库设计优化、sql性能最大化,以及服务器方面的一些优化。
如果3-5年,会考虑架构、服务器高可用性(负载均衡、主从同步等)、以及其他语言等

❽ PHP 面试问哪些问题可以比较准确的反映出应聘者的开发水平

基础:
单引号和双引号区别?
GET和POST的FORM表单的Action有什么区别?
Session工作原理
如何取出数组最后内一个值?
Git分支容合并
翻转字符串"example"
打印出2014-09-23 23:08:01的时间戳
Debug方法
Composer用法

进阶:
框架各部分了解程度(路由、设计规则、数据层包装、视图层、可扩展等)
面向对象的了解程度(静态方法、变量可用范围、抽象类、接口、继承、克隆、魔术方法等)
命名空间
测试用例
异常处理
缓存数据(memcache、redis、模板缓存、apc等各类缓存)
正则测试

高级:
PHP SPL
设计模式(挑选两个,比如工厂、单例讲讲)
排序算法(挑选两个,比如冒泡排序、插入排序讲讲应用点)
加密算法(挑选两个,比如sha、crc32讲讲应用点以及区别)
测试驱动开发
敏捷开发思考
最优开发模式
疑难问题解决方法

❾ PHP面试题请教一下

这个题没错啊,Z是输出1啊,y是x余7乘16,x余7得3,乘16得48。x是大于y啊,所以z是1啊

热点内容
鬼片高清画质。电影。 发布:2024-08-19 09:14:10 浏览:650
一家看电影网 发布:2024-08-19 08:57:54 浏览:155
韩国大尸度电影推荐 发布:2024-08-19 08:55:58 浏览:719
接吻电影的名字美国 发布:2024-08-19 08:41:41 浏览:758
韩剧女主高中就怀孕了剧名 发布:2024-08-19 08:00:29 浏览:692
蓝色头发电影女主角 发布:2024-08-19 07:51:59 浏览:849
台湾电影老师上了学生 发布:2024-08-19 07:36:20 浏览:964
两人吃屎的电影 发布:2024-08-19 07:25:07 浏览:450
有裸露下体的大尺度电影吗 发布:2024-08-19 07:20:50 浏览:790
好看的电影在线观看免费 发布:2024-08-19 06:55:37 浏览:912