php---面试题---
尽量涵盖,这里只写关于PHP的,基础肯定是各种字符串操作,数组操作,然后面向对象的理解。其实这里面好多好多东西都是平时用不到的,但这就是基础,面试官问到的东西只是你知道的很少很少一部分,但这就是你们交涉的全部所以还你是得让自己尽可能知道的多。写这些东西没有应试教育的意思,虽然有的东西平时不会用,但对你绝对都是有帮助的
1 PHP是用什么语言编写的
php是用c写的
扩展:php3 php4 php5的主要区别是什么,php6的新特征有哪些?
这个问题真恶心,等我以后心情好了在回答吧
2 目前PHP的最高版本是
2013.9.12现在应该是php5.5
3 PHP的三种注释方式
天啊,我竟然知道两种,太可怕了 # 竟然也是 好吧
4 请列出PHP的8种数据类型
字符串 数组 对象 数值类型 整型 xml 浮点 布尔值 特殊的有Null和resource(说实话我只用过前五种)
5 PHP中有几种形式装载代码,并列举,以包含同目录下的Config.php文件为例?
require include require_once include_once
require一般用在文件的头部包含文件,执行php时包含这个文件使它成为php的一部分
include一般用在流程控制中,用到时再包含
区别是require遇到错误不会往下执行,而include会继续执行
require_once和include_once的作用是避免重复包含,也就是说如果不小心包含了同一个文件,用这两个函数会只包含一次
6 PHP中===表示什么意思,以及与==的区别,什么情况下==是true,===是false
这个问题也是比较常见的,不过巨简单。==是比较表达式两边的值,而===会比较数据类型,比如
7 header的作用是什么,以及它的限制
sorry,这个需要先看http协议,等有功夫在回答这个问题,目前只知道这是做跳转用的
8 strstr和stristr的区别
这种字符串操作的方法但凡加了i的一般都是不区分大小写的意思。这里在普及一下strstr的做用吧,strstr默认返回从指定字符到该字符串结束的字符
9 php如何获得浏览器信息
看吧,php能做的事还是不少的,哎,我这么说会不会暴露了我的知识面比较窄的缺陷呢,哈哈
$_SERVER[‘HTTP_USER_AGENT’];平时没用过这些东西
10 什么是URLRewriteing
说说我自己的理解吧,就是伪静态嘛!通过隐藏网页的访问地址以达到更好收录的的效果,可能有不对的地方,欢迎拍砖
11 如何遍历一个文件夹下所有的内容(考中几率非常高)
以前我都嫌麻烦,不去记这些东西,而且平时用的话我都是从网上搜索,但笔试的时候肯定不能让你从网上搜虽然这东西经常被考到,但我可以确定的是你写不出来对你影响不会很大,当然写出来了更好,之前我欧诺个的都是什么opendir 之类的这些傻×函数,刚才我知道了scandir这个函数,这是循环遍历文件夹的函数,非常实用奥
[php] view plain copy
在CODE上查看代码片派生到我的代码片
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
12 二分法和冒泡排序(为什么把这俩在一起说呢,因为他俩都是经常被考到的,而且对于我们的思维逻辑很重要)
二分法 array(1,2,3,4,5,6,7)取出其中一个值的键名
先说一个网上很常见的方法
[php] view plain copy
在CODE上查看代码片派生到我的代码片
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
这个方法确实可以,我也试过。但是,我觉得这种方法不好,确切的说是不准确。因为这种方法是以顺序的不间断的数组为基础的,比如上面所说的
[php] view plain copy
在CODE上查看代码片派生到我的代码片
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
这里我没有引入最大值最小的概念,只是从数组的中间开始取值判断
冒泡排序
[php] view plain copy
在CODE上查看代码片派生到我的代码片
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
太神奇了,刚才我自己手写了一下这段程序。我竟然在没有任何思考的情况下给背下来了,真的是考的多了
这里最重要的是程序里的for循环,普通的if判断只是判断哪个值最大,但这只是比对一遍,外层在加上一个for循环的目的是将当前值跟所有值做比较
13 php常用数组和字符串函数(这对于我们来说是最最最基本和常用的,一定要深刻认识并熟练运用)
数组:这里说的都是常用的大约有20个
1 in_array 判断数组中是否存在某值或某数组
2 is_array 判断是否是数组
3 array_merge 合并数组
4 array_search 搜索某值是否存在于数组中
5 array_slice 分个数组(从数组中取出一段)
6 array_values 建立数字索引
7 array_diff 取差集
8 array_keys返回所有键名
9 array_unique 移除重复的值
10 array_splice 将数组中的值用其他值替换
11 sort asort rsort arsort ksort
12 implode
13 print_r
14 foreach
15 count
16 array_shift 将数组开头 的单元去掉
另外像array_map使用频率不是很高,但这些函数你得知道是做什么的
字符串:
1 substr(截取字符串,这是最最常用的)
2 strlen(获取字符串的长度)
3 strpos(查找字符在字符串中首次出现的位置)
4 str_replace(字符串替换)
5 explode(按照规律将字符串拆分成数组)
6 strtoupper(将所有字母变成大写)
7 strtolower
8 ucfirst(将字符串的首字母变成大写)
9 ucwords(将字符串中每个单词的首字母变成大写)
10 strrev(反转字符串,其实不是很常用)
11 substr_replace(替换字符串的子串,注意与str_replace的区别)
12 strip_tags(去除html和php标记,可以选择保留想要的标签)
13 trim(去除空格)
14 获取一个网页的内容,比如获取www.sina.com.cn的内容
主要有三种方法,掌握其中两种就可以
第一种 使用file_get-contents
第二种,使用fopen先打开一个文件,然后读里面的内容,忽略
第三种使用curl
15 说出php中给变量加密的函数
15.1 md5 单项加密,不能解密。生成32个字符的值
15.2 crypt 单项加密,不能解密。接受两个参数,不传第二个参数时生成的值刷新可变,传入第二个值salt之后,加密的结果不变。且,在不同的系统上算法可能不同
15.3 sha1 单项加密,不能解密。和md5很像,不同的是默认生成40个字符串的值,
15.4 base64_encode() 为双向加密,可以解密。使用base64decode()解密
16 原样输出用户输入的内容,使用哪一个函数?比如用户输入’export
export’
htmlspecicalchars 把预定义的字符转换成html实体
17 如何判断一个字符串是否是合法的日期类型如’2017-03-31’,要求代码不超过5行
运用date和strtototime进行转换和比较
18 静态和非静态的区别
普通意义上认为静态可以不用实例化就直接调用了,这是和静态的不同。但这是结果,不是原因。为什么我们要使用静态,难道仅仅是为了在不实例化的情况下就调用它?那和我们实例化之后调用有什么区别。
其实静态和非静态的区别在于内存。静态方法在程序开始时生成内存,实例方法在程序运行中生成内存,所以静态方法可以直接调用,实例方法要先成生实例,通过实例调用方法,静态速度很快,但是多了会占内存。
任何语言都是对内存和磁盘的操作,至于是否面向对象,只是软件层的问题,底层都是一样的,只是实现方法不同。静态内存是连续的,因为是在程序开始时就生成了,而实例申请的是离散的空间,所以当然没有静态方法快。
静态方法始终调用同一块内存,其缺点就是不能自动进行销毁,而是实例化可以销毁。
19 require比require_once要快,因为后者要先查看是否已经包含要引用的路径
20 如果你需要得到脚本执行时的时间,$_SERVER[‘REQUSET_TIME’]优于time();
可以想象。一个是现成就可以直接用,一个还需要函数得出的结果。
21 str_replace 比preg_replace要快,而strtr比str_replace还要快1/4
另外不要做无谓的替换即使没有替换,str_replace 也会为其参数分配内存。很慢!解决办法:
用 strpos 先查找(非常快),看是否需要替换,如果需要,再替换效率:- 如果需要替换:效率几乎相等,差别在 0.1% 左右。
如果不需要替换:用 strpos 快 200%。
22
23 不要在循环里计算数组的长度
24 Apache解析一个PHP脚本的时间要比解析一个静态HTML页面慢2至10倍。
25 使用ip2long将ip地址转化成整形存入数据库,可节省存储空间
26 对于比较大的字符串在存入数据库之前可以使用gzcompress先进行压缩(前提应该是不需要检索的情况下吧!!!)
27 不要随意复制变量
[php] view plain copy
在CODE上查看代码片派生到我的代码片
- 1
- 2
- 3
- 4
- 5
- 6
28 使用选择分支语句 switch case好于使用多个if,else if语句,并且代码更加容易阅读和维护。
29 在可以用file_get_contents替代file、fopen、feof、fgets 它的效果要比其他的高很多
30 用i+=1代替i=i+1
31 对global变量,应该用完就unset()掉;
32 打开apache的mod_deflate模块,可以提高网页的浏览速度
33 disable_functions 函数,可以禁用某些php内置函数
34 php脚本最长执行时间 php_execuation_time = 30. 默认是30秒
35 memory_limit 设置php脚本处理内存占用的最大内存
36 upload_file_filezize 上传文件的大小限制,默认是2M
37 屏蔽php错误的方法
- 1
- 2
- 3
- 4
- 5
- 6
38 合并两个数组有几种方式,试比较它们的异同
array_merge 合并两个数组,遇到有相同的键名,则第二个键名的值会覆盖第一个
array_merge_recursive 合并数组,遇到有相同的键名的情况,不会覆盖。而是将相同键名的值递归成一个数组
array_combine 函数通过合并两个数组来创建一个新数组,其中的一个数组是键名,另一个数组的值为键值。
39 请写一个函数来检查用户提交的数据是否为整数
[php] view plain copy
在CODE上查看代码片派生到我的代码片
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
40 字符 字节 汉字 英文字符等等的关系
字节是计算机中的存储单位
字符是计算机中使用的文字和符号。如 1 2 3 a b c 汉 字 ! @ # $等
字节和字符是两个层面的概念,无法直接比较或区分。不同编码里,字符和字节的对应关系不同
1字节=8个二进制位
ASCII中,一个英文字母(不区分大小写)占用一个字节的空间,一个汉字占用2个字节的空间
UTF8中,一个英文字母占用一个字节,一个汉字(含繁体字)占用三个字节
UNICODE中,一个英文字母占用2个字节,一个汉字占用2个字节
41 如何实现PHP的安全最大化?怎样避免SQL注入漏洞和XSS跨站脚本攻击漏洞?
基本原则:不对外界展示服务器或程序设计细节(屏蔽错误),不相信任何用户提交的数据(过滤用户提交)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
42
前者是先执行表达式,在自增
后者是先自增,在执行表达式
43 合并两个数组的方式,并比较它们的一同
这是一个非常基本也比较考验基础的问题,正因为基础,被考中的几率也非常大
array_merge 简单的合并数组
array_merge_recursive 合并两个数组,如果数组中有完全一样的数据,将它们递归合并
array_combine 合并两个数组,前者的值作为新数组的键
44 请写一个函数来检查用户提交的数据是否为整数(不区分数据类型,可以为二进制、八进制、十进制、十六进制数字)
45 PHP的strtolower()和strtoupper()函数在安装非中文系统的服务器下可能会导致将汉字转换为乱码,请写两个替代的函数实现兼容Unicode文字的字符串大小写转换
46 PHP处理上传文件信息数组中的文件类型$_FILES[‘type’]由客户端浏览器提供,有可能是黑客伪造的信息,请写一个函数来确保用户上传的图像文件类型真实可靠
47 PHP通过对数据的URL编码来实现与JavaScript的数据交互,但是对于部分特殊字符的编解码与Javascript的规则不尽相同,请具体说明这种差异,并针对UTF-8字符集的数据,写出PHP的编解码函数和Javascript的编解码函数,确保PHP编码数据可以被Javascript正确解码 、Javascript编码的数据可以被PHP正确解码
48
[php] view plain copy
在CODE上查看代码片派生到我的代码片
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
49 HTTP常见状态值、作用
200请求成功
401 未授权
403 禁止
404 未找到
500 服务器内部错误
503 网关不可用
50
高级面试题
1 isset和empty的区别
isset 检测变量是否设置
当变量不存在或者存在但值为null的情况下,返回false;否则返回true
empty 检测变量值是否为空
当变量不存在或者存在,但值为null,”,0,’0’,false,array(),var $var或者任务没有属性的对象时,返回true.
否则返回false
2 将字符串abcdef 翻转的函数
[php] view plain copy
在CODE上查看代码片派生到我的代码片
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
3 多维数据
4 将一个多维数组转化成一维数组
[php] view plain copy
在CODE上查看代码片派生到我的代码片
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
5 如何安全的发送短信,(即如何防止恶意刷短信)
基本解题思路:定义input.php和send.php,前者允许用户输入手机号,然后提交到后者处理发送行为。
先执行input.php在执行send.php没有任何问题,但考虑到程序开发中的时序性,我们应该设想多种用户可能进行的操作或是恶意操作。比如
input->send 按照逻辑顺序,先执行input.php在执行send.php
input 只执行input.php,不执行第二步
send 只执行send.php,不执行第一步
send->input 先执行send.php,在执行input.php
因为目前只有两个执行文件,所以组合出四种执行方法,即所有用户有可能进行的操作。
因为目前没有进行任何安全防范,所以用户可以循环执行input.php->send.php,从而不断的给用户发短信。
这肯定是错误的,那如何安全防范呢?我们可以在input.php中添加一个验证码,让用户每次都输入验证码通过时才能继续执行send.php,我们将验证码放入到session中,
在send.php中验证,用户输入的验证码和session中的验证码是否相同,如果相同,就发送短信。
那么问题来了,如果用户直接不经过input.php,而直接执行send.php的话呢?因为这时候没有执行input.php,所以也就没有生成验证码的session,而在send.php中,用户也
不输入任何内容,这样就成了‘’==‘’又绕过了一层过滤。这时候大家肯定会想到除了用户输入的验证码和存放在session中的验证码要相等之外还要判断验证码都不能为空。
6 多服务器之间Session共享
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
7 将1234567890转换成1,234,567,890 每3位用逗号隔开的形式
[php] view plain copy
在CODE上查看代码片派生到我的代码片
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
8 一组随机数学的数列,对其重新进行排序,要求实现:奇数位保持奇数,偶数位保持偶数.
MySQL 面试题
1 如何对一张数据量比较大的表进行导入导出操作?假如有至少1000万条数据
—————————————————————–我是高级程序员的分割——————————————————————–
这里是月薪15000以上的薪资要求的面试题及hr问题
首先是hr问题
1 你的职业规划是什么,并为这个目标做了那些努力
2 你的性格优缺点是什么
3 你在团队中的角色是什么
4 离职的原因是什么
5 你对加班怎么看
6 在工作中做过的觉得比较有意义的一件事
7 自己平时除工作外,关注什么其他技术
8 你找工作时看重的是哪些因素(这个问题就比较深入了,问这些问题的我觉得要不是hr很负责,能力强,要不就是公司对这个岗位比较看重)
最后—你有什么想问我的
技术方面
0.1 大访问量 高并发的解决方案
1 mysql如何分库分表
个人认为,目前掌握难度3颗星。需要比较多的基础知识,可能不需要你实际操作中用过,但理论你必须能说出来
2 php设计模式–很重要–说出你知道的设计模式及使用场景和优势
我认为这是中级程序和初级程序之间,甚至是高级程序和中级程序之间的一个过渡标准,单纯从程序语言方面来讲,能牵扯到设计模式的时候应该已经是稍微有点规模的项目了。当然了,你可能平时不会注意,但实际中在用。可面试的时候你说不出来或理解的不深刻会成为你的减分项,而且是很重要的一点,因为你毕竟是一名程序员而不是DBA或运维,所以属于程序的知识你还是应该掌握更多的。
3 数据库千万级别的数据操作和表设计
4 对索引的理解
5 memcache的理解和底层—类似此类的缓存几乎是必考的,扩展如memchache和redis的区别及实际应用场景
6 redis的使用场景
7队列和堆栈的理解及实际应用场景
8 php多进程
正则表达式的(50%的考中机会,有些面试官会比较看重,因为这是基础,就像操作字符串一样)
什么是面向对象,考中几率50%。直说封装 继承 多态直接淘汰
apache和nginx的区别,以及为什么现在大都选用nginx
mysql 优化方法,问的非常笼统,只要考你平时对mysql的运用水平和设计深度,考中几率10000%,只是看考的问题深浅
linux使用情况,要求不想对缓存和mysql这么深,但也是基本的至少计划任务、简单的shell脚本和基本命令你肯定要回
session问题(比如session共享、session和cookie的关系等,这是必考的,几乎是100%)
事物的本质是什么以及应用场景
9 对字符串和数组的操作,必考,没有跳过这两种问题的
以上都是笼统的,但都是必考的,下面是笔试
10
intval是强制将变量转换成整型。而+对变量的操作只能是进行相加的运算操作,所以,如果
foreach(arr1 as &item){echo item;}item = 3;
foreach(
这两次会输出什么
13 php对大文件的操作和linux对大文件的操作—-考中的几率非常大,尤其是前者
14 写一个函数,能够遍历文件夹中所有文件和子文件 这个几乎是必考的
15 表tab_log的结构,id,uid,tm;如何实现查询某天中有三条记录以上的uid
select uid,count(*) as num from tab_log group by tm having num > 3
16 error_reporting(“E_ALL”)和ini_set(“display_errors”, “on”)的区别?
后者的权限大于前者,后者是OFF的话,前者就算是E-ALL也没用。
17 echo print print_r的区别
echo 和print的最大的区别是前者是php内置语句,没有返回值,不能用于表达式中比如三元运算符。后者属于函数,打印正确返回true错误返回false. 1?print(1):6; 正确,但使用echo是错误的。
—持续更新
最后,终极问题,谈谈你对面向对象的理解,呵呵
总体来说,面试要比笔试重要的多(前提是面试官不忙,你如果笔试题答的不好可能直接就没有面试机会了),只要你面试发挥的好一切都不是问题,可是,可是,可是,你面试发挥的好,面试能发挥的不好吗哈哈,万物皆有共性,好多事都是相辅相成的
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
评论已关闭