PHP面试题

1、在电商的秒杀商品场景中,怎样考虑并发(1000并发)下的性能和库存量的准确性?

2、介绍下常见的SSO(单点登录)方案的原理。

有个独立的认证中心,只有认证中心能接收用户的用户名密码等安全信息,其他系统不提供登录入口,只接受认证中心的间接授权,间接授权通过令牌实现,认证中心验证用户的用户名和密码没问题,则创建授权令牌,并发放到各个子系统,子系统拿到了令牌意味着得到了授权。

3、有一序列1,1,2,3,5,8,13,21......请识别这个序列的规律,并用递归写一个求第n位的值的函数。

 

4、简述Redis数据持久化方式中aof和rdb模式的区别及各自优缺点。

5、如下图:

PHP面试题_第1张图片

 

6、比较两个字符串是否有相同字符,要求时间复杂度最低。

7、数组里面的子数组含有正数和负数,求子数组和的最大值,要求时间复杂度最低。

8、请写出HTTP头,并符合以下要求: 

  1)这是一个post请求 

  2)目标:http://www.example.com:8080/test 

  3)POST变量: 

    username: test 

    pwd: test2 

    intro: Hello world! 

  4)包含以下COOKIE信息:cur_query: you&me 

9、我们碰到了大麻烦,一个新来的传教士惹恼了上帝,上帝很愤怒,要求我们把圣经(bbe.txt)背熟,直至他说哪个单词,我们就要飞快的回答出这个单词在第几行第几个单词位置。听说你是个优秀的程序员,那么髟助我们完成这个不可能的任务吧。 

  要求如下: 

  1)/myworks/example/bbe.txt,98版本英文圣经一本 

  2)输入部分要求如下:php ./example.php [单词] 

  3)输出部分如下:[单词] 1,2 2,4 5,6 表示:此单词在1行2列(第二个单词),2行4列... 

  说明: 

  1)此文本4MB之巨... 

  2)单词的含义:由英文字母(大小写),数字(0-9)组成的串 

  3)提供给你的机器OS为ubuntu 9.10,内存只有1G,而且,很不幸的,其中700M用来做了别的 

  4)上机考试不允许上网,但我装了man文档以及读取CHM以及PDF的阅读器,在电脑的桌面的CHM文件夹中,有相应的PHP参考手册 

  5)算法复杂度要求不能大于O(N^2)(就是N的平方)

10、PHP的垃圾收集机制是怎样的? 请从源码入手。

11、const和define的区别。

12、https的工作原理。

 

网络编程:

1、UDP调用connect有什么作用?connect会阻塞,怎么解决?(设置非阻塞,返回之后用select检测状态)

2、socket服务端的实现,什么情况下可读?

3、select和epoll的区别。epoll有哪些触发模式,有什么区别?如果select返回可读,结果只读到0字节,是什么情况?

4、大规模连接上来,并发模型怎么设计?

5、什么是滑动窗口?

6、TCP协议和UDP协议有什么区别,请画出TCP三次握手的示意图。TCP连接中,时序图,状态图?TCP头多少字节,有哪些字段?

7、多线程和多进程的区别。

cpu调度,上下文切换,数据共享,多核cpu利用率,资源占用

8、哪些东西是一个线程私有的?(寄存器)

9、keepalive是什么?如何使用?

10、命令:netstat,tcpdump,ipcs,ipcrm

 

系统设计

1、一个每秒百万级访问量的互联网服务器,每个访问都有数据计算和I/O操作,如果让你设计,你怎么设计?

2、最近总有人骚扰我们的投票模块,需要你来设计一个投票限制的东东。要求如下: 

  1)要求每个QQ号码(假设此QQ号码在UNIT32内可以表示)10分钟这内只能投5票。 

  2)我们的用户很踊跃,平均每天要有2000万人左右通过此程序投票。 

  说明: 

  1)无需写代码,只需要图跟文字即可。 

  2)对于关键逻辑,请用图加代码表示出来,这也是对你文字表达能力的一个考验。 

  3)对你能想到的所有的边界条件列出来,这是对你逻辑思维全面与敏捷性的考验。 

  4)存储部分,尽你所能吧。如果,你需要一个自己设计的存储层,那么把这个存储层的实现,用文字+图片方式描述清楚,要是设计合理,你会获得华丽的奖分。

3、微信朋友圈如何设计?

1)大数据:微信用户有10亿,如何处理-bitmap。

2) 数据库设计,怎么设计才能达到 你发朋友圈别人能看见,屏蔽某人就看不见了。

 

MySQL

1、数据库如何设计?如何去优化数据库?

2、如何去建立索引?索引的原理是什么?

3、平衡树的原理是什么?为什么这样就是优化的?

4、索引的好处和坏处在哪里。

5、MySQL的InnoDB和MyISAM引擎在使用select count(*)语句时,哪个效率更高,为什么?

6、InnoDB支持行锁,那什么条件下会产生行锁,什么情况下会变成表锁?

7、表Thread(tid,uid,content,createtime),表User(uid,username,password,createtime)

100万用户,500万帖子,一条SQL语句,查出发帖数前10的用户(显示其姓名)

基础知识

input中readonly和disable的区别:

1、 disable:不可获取焦点,且不可编辑; readonly:可获取焦点,但不可编辑。

2、readonly只针对input(text/password)和textarea有效,而disable对于所有的表单元素都有效,包括select,radio,checkbox,button等。

3、表单元素在使用了disable后,但我们将表单以POST或GET的方式提交后,这个元素的值不会被传递出去,而readonly会将该值传递出去

 

get和post的区别:

GET和POST本质上就是TCP链接,并无差别。但是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。

1、GET产生一个TCP数据包;POST产生两个TCP数据包:

对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);

对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。

2、GET在浏览器回退时是无害的,而POST会再次提交请求。

3、GET产生的URL地址可以被Bookmark,而POST不可以。

4、GET请求会被浏览器主动cache,而POST不会,除非手动设置。

5、GET请求只能进行url编码,而POST支持多种编码方式。

6、GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。

7、对参数的数据类型,GET只接受ASCII字符,而POST没有限制。

8、GET参数通过URL传递,不安全,所以不能用来传递敏感信息,且长度限制2KB;POST请求参数放在Request body中,较安全,无长度限制(可配置)。

 

echo与print,var_dump()和print_r()的区别

1.echo 和 print 的区别

共同点:echo 和 print 都不是严格意义上的函数,都是语言结构;都只能输出字符串,整型跟int型浮点型数据。不能打印复合型和资源型数据;

不同点:echo 可以连续输出多个变量,而print只能一次输出一个变量。print打印的值能直接复制给一个变量,如 $a = print “123”;

而echo 不可以,它没有像函数的行为,所以不能用于函数的上下文。在使用时,echo() 函数比 print()速度稍快。

2.var_dump()和print_r()的区别

共同点:两者都可以打印数组,对象之类的复合型变量。

不同点:print_r()在打印数组时,会将把数组的指针移到最后边,使用 reset() 可让指针回到开始处。 而var_dump()不但能打印复合类型的数据,还能打印资源类型的变量。且var_dump()输出的信息则比较详细,一般调试时用得多。

你可能感兴趣的:(PHP)