我爱编程

php面试题

2017-12-05  本文已影响0人  幼稚园靓仔

防止SQL注入

简单回答:防止——利用即有的应用、功能,将(恶意)SQL命令发送到到后台数据库引擎。

防止SQL注入漏洞可以用哪些函数?

SQL注入产生的原因:

程序开发过程中不注意规范书写sql语句和对特殊字符进行过滤,导致客户端可以通过全局变量POST和GET提交一些sql语句正常执行。

防止SQL注入的方式:


算法:https://www.kancloud.cn/i281151/php_questions/198601

排序

    //快速排序
    public function quick_sort($arr) {
    //先判断是否需要继续进行
    $length = count($arr);
    if($length <= 1) {
        return $arr;
    }
    //如果没有返回,说明数组内的元素个数 多余1个,需要排序
    //选择一个标尺
    //选择第一个元素
    $base_num = $arr[0];
    //遍历 除了标尺外的所有元素,按照大小关系放入两个数组内
    //初始化两个数组
    $left_array = array();//小于标尺的
    $right_array = array();//大于标尺的
    for($i=1; $i<$length; $i++) {
        if($base_num > $arr[$i]) {
            //放入左边数组
            $left_array[] = $arr[$i];
        } else {
            //放入右边
            $right_array[] = $arr[$i];
        }
    }
    //再分别对 左边 和 右边的数组进行相同的排序处理方式
    //递归调用这个函数,并记录结果
    $left_array = $this->quick_sort($left_array);
    $right_array = $this->quick_sort($right_array);
    //合并左边 标尺 右边
    return array_merge($left_array, array($base_num), $right_array);
}

    public function bubble_sort($array){
    //冒泡排序
    $count = count($array);
    if ($count <= 0) return false;
    for($i=0; $i<$count; $i++){
        for($j=$count-1; $j>$i; $j--){
            if ($array[$j]<$array[$j-1]){
                $tmp = $array[$j];
                $array[$j] = $array[$j-1];
                $array[$j-1] = $tmp;
            }
        }
    }
    return $array;
}

echo(),print(),print_r()的区别?

语句include和require的区别是什么?

下面哪项没有将john添加到users数组中?

HTTP协议中几个状态码的含义。

写出一些php魔术方法。

MySQL存储引擎 MyISAM 和 InnoDB 的区别。

说出一些MySQL优化方法?

  1. 索引。
  2. 缓存。
  3. 避免join
  4. 静态页面
  5. 选取最适用的字段属性:字段长度和非空
  6. 优化查询语句
  • 设计良好的数据库结构,允许部分数据冗余,尽量避免join查询,提高效率。
  • a.最好在相同字段进行比较操作,在建立好的索引字段上尽量减少函数操作
  • 例子1:SELECT * FROM order WHERE YEAR(orderDate)<2008;(慢) SELECT * FROM order WHERE orderDate<"2008-01-01";(快)
  • 例子2:
    SELECT * FROM order WHERE addtime/7<24;(慢)
    SELECT * FROM order WHERE addtime<24*7;(快)
  • 例子3:
    SELECT * FROM order WHERE title like "%good%";
    SELECT * FROM order WHERE title>="good" and name<"good";```
  • 1、选取最适用的字段属性
  • MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快。因此,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设得尽可能小。
  • 例如,在定义邮政编码这个字段时,如果将其设置为CHAR(255),显然给数据库增加了不必要的空间,甚至使用VARCHAR这种类型也是多余的,因为CHAR(6)就可以很好的完成任务了。同样的,如果可以的话,我们应该使用MEDIUMINT而不是BIGIN来定义整型字段。
  • 另外一个提高效率的方法是在可能的情况下,应该尽量把字段设置为NOT NULL,这样在将来执行查询的时候,数据库不用去比较NULL值。
  • 对于某些文本字段,例如“省份”或者“性别”,我们可以将它们定义为ENUM类型。因为在MySQL中,ENUM类型被当作数值型数据来处理,而数值型数据被处理起来的速度要比文本类型快得多。这样,我们又可以提高数据库的性能。

说下php中empty()和isset()的区别。

表单中 get与post提交方法的区别?

请用正则表达式(Regular Expression)写一个函数验证电子邮件的格式是否正确

<?php

/* http://www.manongjc.com/article/1524.html */

$email=$_POST['email'];

if(!preg_match(‘/^[\w.]+@([\w.]+).[a-z]{2,6}$/i’,$email)) {

echo "电子邮件检测失败";

}else{

echo "电子邮件检测成功";

}
?>

session与cookie的区别?

session有什么用?怎么使用?

session在web开发中具有非常重要的份量。它可以将用户正确登录后的信息记录到服务器的内存中,当用户以此身份
访问网站的管理后台时,无需再次登录即可得到身份确认。而没有正确登录的用户则不分配session空间,即便输入了
管理后台的访问地址也不能看到页面内容。通过session确定了用户对页面的操作权限。

使用session的步骤:

  1. 启动session:使用session_start()函数来启动。
  2. 注册会话:直接给$_SESSION数组添加元素即可。
  3. 使用会话:判断session是否为空或者是否已经注册,如果已经存在则像普通数组使用即可。
  4. 删除会话:

1.可以使用unset删除单个session;

2.使用$_SESSION=array()的方式,一次注销所有的会话变量;

3.使用session_destroy()函数来彻底销毁session。

cookie有什么用?怎么使用?

  1. 记录用户访问的部分信息
  1. 在页面间传递变量
  2. 将所查看的internet页存储在cookies临时文件夹中,可以提高以后的浏览速度。

创建cookie:setcookie(string cookiename , string value , int expire);

读取cookie:通过超级全局数组$_COOKIE来读取浏览器端的cookie的值。

删除cookie:有两种方法

1.手工删除方法:右击浏览器属性,可以看到删除cookies,执行操作即可将所有cookie文件删除

2.setcookie()方法:跟设置cookie的方法一样,不过此时讲cookie的值设置为空,有效时间为0或小于当前时间戳。

题9:数据库中的事务是什么?

事务(transaction)是作为一个单元的一组有序的数据库操作。如果组中的所有操作都成功,则认为事务成功,即使只有一个操作失败,事务也不成功。如果所有操作完成,事务则提交,其修改将作用于所有其他数据库进程。如果一个操作失败,则事务将回滚,该事务所有操作的影响都将取消。

简述下面程序的输出结果, 简要说明为什么, 如何解决这类问题?

<?php

$tmp = 0 == "a"? 1: 2;
echo $tmp;
?>

答案: 1

int和string类型强制转换造成的,0==="a"

0 == 0 肯定是true啊

PHP是弱类型

$tmp = 0 === "a"? 1: 2;

echo $tmp; 这样就是2

什么是MVC?

答案:MVC由Model(模型), View(视图)和Controller(控制器)组成,PHP MVC可以更高效地管理好3个不同层的PHP代码。

MYSQL取得当前时间的函数是?,格式化日期的函数是

答案:now(),dateformat()

在页面中引用CSS有几种方式?

在页面中使用CSS有3中方式:

假设a.html和b.html在同一个文件夹下面,用javascript实现当打开a.html五秒钟后,自动跳转到b.html。

答案:

/** http://www.manongjc.com/article/1524.html */

function go2b(){

window.location = “b.html”;
window.close();

}

setTimeout( “go2b()”,5000 ); //5秒钟后自动执行go2b()

用PHP打印出前一天的时间格式是2006-5-10 22:21:21(2分)

$a = date(“Y-m-d H:i:s”, strtotime(“-1 day”));

print_r($a);

如何实现字符串翻转?(3分)

英文:
strrev($a)

中文或其他文字:
中文:GB2312, 代码是使用GB2312编码

<?php

function reverse($str)

{

$ret = “”;

len=mbstrwidth(str,”GB2312″);

for(i=0;i< len;i++)

{

arr[]=mbsubstr(str, $i, 1, “GB2312″);

}

return implode(“”, array_reverse($arr));

}

print_r(reverse(“你好”));

对于大流量的网站,您采用什么样的方法来解决访问量问题?(4分)

  1. 有效使用缓存,增加缓存命中率
  2. 使用负载均衡
  3. 对静态文件使用CDN进行存储和加速
  4. 想法减少数据库的使用
  5. 查看出现统计的瓶颈在哪里
  6. 数据库读写分离,优化数据表
  7. 使用不同主机分流主要流量

如何修改SESSION的生存时间. (1分)

session_set_cookie_params

一般有三年以上php开发经验去百度、腾讯面试,常会接触的面试题小总结一下:

  1. 简单做一下自我介绍,? 然后谈一下近三年来你的得意之作?
  2. 面试官看过你的简历,会问一些你做的项目的用户量、pv、吞吐量、相关难点和解决方法等
  3. 数据库设计经验,为什么进行分表? 分库?
    一般多少数据量开始分表? 分库? 分库分表的目的? 什么是数据库垂直拆分? 水平拆分? 分区等等?可以举例说明
  4. web开发方面会遇到哪些缓存? 分别如何优化?
  5. 给你256M的内存,对10G的文件进行排序(文件每行1个数字),如何实现?
    对10G的文件进行查找如何实现?
    统计10G文件每个关键字出现的次数如何实现?
  6. 假如你现在是12306火车订票的设计师,你该如何设计满足全国人民订票?
  7. 假如有1亿用户的访问量,你的服务器架构是怎样的? 用户信息的存储方案如何设计?
  8. 如果你是技术组长,所带团队任务进度无法完成你该如何解决?
    如果在进度排满的前提下插入任务,你该如何保证总进度不延期?
    如果有的工程师今天预定任务没有完成,你该如何解决?
  9. 从你的经验方面谈一下如何构建高性能web站点? 需要哪些环节? 步骤? 每个步骤需要注意什么如何优化等?
  10. 为什么要对数据库进行主从分离?
  11. 如何处理多服务器共享session?
  12. 一个10G的表,你用php程序统计某个字段出现的次数,思路是?
  13. 会告诉你一个nginx日志例子,用你认为最佳的编程语言统计一下http响应时间超过1秒的前10个url?
  14. 给你一个mysql配置文件,用你认为最佳的编程语言解析该文件?
  15. 给你两个路径a和b,写一个算法或思路计算a和b差距几层并显示a和b的交集?
  16. 给你一个url,在nginx配置一下rewrite指定到某个具体路径?
  17. 一个php文件的解释过程是? 一般加速php有哪些? 提高php整体性能会用到哪些技术?
  18. session和cookie生存周期区别? 存储位置区别?
  19. chrome号称为多线程的,所以多线程和多进程的区别为?
  20. php在2011年底出现hash碰撞,hash碰撞原理为? 如何进行修复?
  21. web不安全因素有哪些? 分别如何防范?
  22. 假如两个单链表相交,写一个最优算法计算交点位置,说思路也可以?
  23. 假如你是技术组长? 如何提高团队效率?
  24. nginx负载均衡有哪些? 如果其中一台服务器挂掉,报警机制如何实现?
  25. 不优化前提下,apache一般最大连接数为? nginx一般最大连接数为? mysql 每秒insert ? select ? update ? delete?
  26. mysql 数据类型有哪些 ? 分别占用多少存储空间 ?
  27. nginx设置缓存js、css、图片等信息,缓存的实现原理是?
  28. 如何提高缓存命中率? 如何对缓存进行颗粒化?
  29. php的内存回收机制是?
  30. 我的所有问题都问完了,你有什么问题问我没有?

1、双引号和单引号的区别

双引号解释变量,单引号不解释变量

双引号里插入单引号,其中单引号里如果有变量的话,变量解释

  • 双引号的变量名后面必须要有一个非数字、字母、下划线的特殊字符,或者用{}讲变量括起来,否则会将变量名后面的部分当做一个整体,引起语法错误
  • 双引号解释转义字符,单引号不解释转义字符,但是解释'\和\

能使单引号字符尽量使用单引号,单引号的效率比双引号要高(因为双引号要先遍历一遍,判断里面有没有变量,然后再进行操作,而单引号则不需要判断)

HTTP中POST、GET、PUT、DELETE方式的区别

php程序中如何设置当前页面的编码为utf-8?

header(“content-type:text/html;charset=utf-8”);

php中,如何跳转到blog/view.php页面,请用函数实现?

header(“location:blog/view.php”);

===是什么运算?

说出数组涉及到的常用函数。

GD库是做什么用的? (1分)

动态的开放的图片处理库

下面哪个函数可以打开一个文件,以对文件进行读和写操作?(1分) c

(a) fget() (b) file_open() (c) fopen() (d) open_file()

MySQL存储引擎中,innodb和myisam的区别

MyISAM 和 InnoDB 讲解

函数内部 static 和 global 关键字的作用

子类重写父类的 protected 方法有什么限制?或者说有什么要遵守的规则?

用例子说明,以 Laravel 框架中的控制器作为说明

什么是 CSRF 攻击 ?XSS 攻击?如何防范?

  1. 合理规范api请求方式,GET,POST
  1. 对POST请求加token令牌验证,生成一个随机码并存入session,表单中带上这个随机码,提交的时候服务端进行验证随机码是否相同。

XSS,跨站脚本攻击。

防范:不相信任何输入,过滤输入。

了解XSS攻击吗?如何防止?

XSS是跨站脚本攻击,首先是利用跨站脚本漏洞以一个特权模式去执行攻击者构造的脚本,然后利用不安全的Activex控件执行恶意的行为。
使用htmlspecialchars()函数对提交的内容进行过滤,使字符串里面的特殊符号实体化。

PHP处理字符串的常用函数?(重点看函数的‘参数’和‘返回值’)

PHP处理时间的常用函数?(重点看函数的‘参数’和‘返回值’)

什么是事务?及其特性?

事务特性:

(1)原子性:即不可分割性,事务要么全部被执行,要么就全部不被执行。

(2)一致性或可串性。事务的执行使得数据库从一种正确状态转换成另一种正确状态

(3)隔离性。在事务正确提交之前,不允许把该事务对数据的任何改变提供给任何其他事务。事务独立运行。一个事务处理后的结果,影响了其他事务,那么其他事务会撤回。事务的100%隔离,需要牺牲速度。

(4) 持久性。事务正确提交后,其结果将永久保存在数据库中,即使在事务提交后有了其他故障,事务的处理结果也会得到保存。

或者这样理解:

事务就是被绑定在一起作为一个逻辑工作单元的SQL语句分组,如果任何一个语句操作失败那么整个操作就被失败,以后操作就会回滚到操作前状态,或者是上有个节点。为了确保要么执行,要么不执行,就可以使用事务。要将有组语句作为事务考虑,就需要通过ACID测试,即原子性,一致性,隔离性和持久性。

什么是锁?

答:数据库是一个多用户使用的共享资源。当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况。若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性。

加锁是实现数据库并发控制的一个非常重要的技术。当事务在对某个数据对象进行操作前,先向系统发出请求,对其加锁。加锁后事务就对该数据对象有了一定的控制,在该事务释放锁之前,其他的事务不能对此数据对象进行更新操作。

基本锁类型:锁包括行级锁和表级锁

索引的作用?和它的优点缺点是什么?

什么是基本表?什么是视图?

主键、外键和索引的区别?

主键、外键和索引的区别

定义:

主键--唯一标识一条记录,不能有重复的,不允许为空

外键--表的外键是另一表的主键, 外键可以有重复的, 可以是空值

索引--该字段没有重复值,但可以有一个空值

作用:

主键--用来保证数据完整性

外键--用来和其他表建立联系用的

索引--是提高查询排序的速度

个数:

主键--主键只能有一个

外键--一个表可以有多个外键

索引--一个表可以有多个唯一索引

数组[‘a’, ‘b’, ‘c’] 转换成字符串 ‘abc’

echo implode(‘’,[‘a’, ‘b’, ‘c’]);

echo join([‘a’, ‘b’, ‘c’],'');

获取字符串’aAbB’中A首次出现的位置

数组内置的排序方法有哪些?

用PHP打印出前一天的时间格式是2017-3-22 22:21:21

$a = date("Y-m-d H:i:s", strtotime("-1 days"));

求两个日期的差数,例如2007-2-5 ~ 2007-3-6 的日期差数

// 方法一:

用DateTime类
$day1 = '2003-09-16';

$day2 = '2011-11-23';

$d1 = new dateTime($day1);

$d2 = new dateTime($day2);

echo $d1->diff($d2)->days;

// 方法二,用时间戳计算
echo (strtotime($day2) - strtotime($day1))/(24*3600);

array实操

Apache与Nginx的优缺点比较

1、nginx相对于apache的优点:

2、apache 相对于nginx 的优点:
apache 的rewrite 比nginx 的rewrite 强大 ,模块非常多,基本想到的都可以找到 ,比较稳定,少bug ,nginx 的bug 相对较多

3:原因:这得益于Nginx使用了最新的epoll(Linux 2.6内核)和kqueue(freebsd)网络I/O模型,而Apache则使用的是传统的select模型。目前Linux下能够承受高并发访问的 Squid、Memcached都采用的是epoll网络I/O模型。 处理大量的连接的读写,Apache所采用的select网络I/O模型非常低效。

MySQL 增删改查数据

上一篇下一篇

猜你喜欢

热点阅读