PHP 面试题 一
1、用PHP打印出前一天的时间格式是2017-5-10 22:21:21(2分)
月,日没有前导零:2017-5-1 22:21:21
echo date("Y-n-j H:i:s", strtotime("-1 day"));
月,日前面有前导零: 2017-05-01 22:21:21
echo date("Y-m-d H:i:s", strtotime("-1 day"));
echo 和 print 是语言结构,没有返回值,只能打印出string,不能打印出结构
print_r 是函数,有返回值
3.将一个字符串(1234567890)转换成(1,234,567,890)每三个一组用逗号隔开
方法1: echo number_format('1234567890'),"<br />"; // 内部函数 方法2: $str = '1234567890'; function test($str='',$count=3){ if(empty($str) || $count <= 0){ return false; } $str1 = strrev($str); //反转字符串 $arr = str_split($str1,$count); //将字符串分割成数组 $new_str = join(',',$arr); //连接字符串 return strrev($new_str); //再次反转字符串并返回 } echo test($str);
4. 以下数组$_a 和 $_b的值?
$a = ['a' => 123, 'b' => 456];
$b = ['b' => 780, 'c' => 110];
$_a = array_merge($a,$b);
$_b = $a + $b;
print_r($_a);
echo '<br/>';
print_r($_b);
Array ( [a] => 123 [b] => 780 [c] => 110 ) // $_a Array ( [a] => 123 [b] => 456 [c] => 110 ) // $_b
5、如何实现字符串翻转?(3分)
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("你好"));
1.选取适用的字段属性,尽可能减少定义的字段长度,尽量把字段设置 NOT NULL 2.使用连接JOIN来代替子查询 3.使用联合UNION来代替手动创建的临时表 4.事务处理:,保证数据完整性 5.锁定表,优化事务处理 6.使用外键,优化锁定表 7.建立索引,增加查询效率 8.优化查询语句,提高索引命中率
7、PHP的意思(送1分)
超级文本预处理语言 Hypertext PreProcessor
8、MYSQL取得当前时间的函数是?,格式化日期的函数是(2分)
CURRENT_TIMESTAMP() DATE_FORMAT() select DATE_FORMAT("2017-11-11 10:10:10", "%Y-%m-%d");
9、实现中文字串截取无乱码的方法。(3分)
mb_substr($str, 1, 1, "GB2312");
10. 请举例说明在你的开发过程中用什么方法来加快页面的加载速度
1.要用到服务器资源时才打开,及时关闭服务器资源 2.数据库添加索引 3.页面可生成静态,图片等大文件单独服务器。 4.使用代码优化工具
11.如何理解面向对象OOP?
OOP(object oriented programming),即面向对象编程,其中两个最重要的概念就是 类和对象。 世间万物都具有自身的属性和方法,通过这些属性和方法可以区分出不同的物质。 属性和方法的集合就形成了类,类是面向对象编程的核心和基础, 通过类就将零散的用于实现某个功能的代码有效地管理起来了。 类只是具备了某些功能和属性的抽象模型,而实际应用中需要一个一个实体,也就是需要对类进行实例化, 类在实例化之后就是对象。 OOP具有三大特点: 1. 封装性: 也称为信息隐藏,就是将一个类的使用和实现分开,只保留部分接口和方法与外部联系,或者说只公开了一些供开发人员使用的方法。 于是开发人员只需要关注这个类如何使用,而不用去关心其具体的实现过程,这样就能实现MVC分工合作,也能有效避免程序间相互依赖, 实现代码模块间松藕合。 2. 继承性: 就是子类自动继承其父级类中的属性和方法,并可以添加新的属性和方法或者对部分属性和方法进行重写。继承增加了代码的可重用性。 php只支持单继承,也就是说一个子类只能有一个父类。 3. 多态性: 子类继承了来自父级类中的属性和方法,并对其中部分方法进行重写。 于是多个子类中虽然都具有同一个方法,但是这些子类实例化的对象调用这些相同的方法后却可以获得完全不同的结果,这种技术就是多态性。 多态性增强了软件的灵活性。
13、对于大流量的网站,您采用什么样的方法来解决访问量问题?(4分)
1.确认服务器硬件是否足够支持当前的流量,
2.禁止外部的盗链,控制大文件的下载
3.采用 jQuery 延迟加载
4.生成静态 HTML 页面,设置 memcache 缓存
5.划分区域设置不同的主机应答
6.使用流量分析统计软件,了解访问量,有针对性的进行优化
7.优化数据库的访问,采用读写分离(主从架构,分库分表)
8.分布式服务器设置,负载均衡
客户端IP : $_SERVER["REMOTE_ADDR"]
服务器端IP: $_SERVER["SERVER_ADDR"]
15、语句include和require的区别是什么?为避免多次包含同一文件,可用(?)语句代替它们? (2分)
在失败的时候:
include产生一个警告,而require导致一个致命错误
require在运行前载入
include在运行时载入
require_once
include_once
17、有一个网页地址, 比如PHP研究室主页: http://www.phpv.net/index.html,如何得到它的内容?($1分)
echo file_get_contents("https://www.baidu.com");
curl
18、在HTTP 1.0中,状态码401的含义是(?);如果返回“找不到文件”的提示,则可用 header 函数,其语句为(?);(2分)
未授权 header("HTTP/1.0 404 Not Found"); fast CGI中: header("Status: 404 Not Found");
19、在PHP中,heredoc是一种特殊的字符串,它的结束标志必须?(1分)
成对出现 $a = <<<EOD good test EOD;
20、谈谈asp,php,jsp的优缺点(1分)
asp是需要依赖IIS,是微软开发的语言
php和jsp可以依赖apache或者 nginx等其他服务器
21、谈谈对mvc的认识(1分)
MVC 是一种设计模式中
M 是 model 模型,业务逻辑层(数据信息存取层)
V 是视图 view 主要负责用户交互层(负责将应用的数据以特定的方式展现在界面上)
C 是控制器 通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据
Mvc 优点:
低耦合性
高重用性和可使用行
较低的生命周期成本
快速的部署
可维护性
23. 请说明php中传值与传引用的区别。什么时候传值什么时候传引用?(2分)
按值传递:函数范围内对值的任何改变在函数外部都会被忽略;
按引用传递:函数范围内对值的任何改变在函数外部也能反映出这些修改;
优缺点:按值传递时,php必须复制值。特别是对于大型的字符串和对象来说,这将会是一个代价很大的操作。
按引用传递则不需要复制值,对于性能提高很有好处。
24. 在PHP中error_reporting这个函数有什么作用? (1分)
设定error的展示级别
25. 请写一个函数验证电子邮件的格式是否正确 (2分
$str = "jianfeng@126.com"; function test($test){ $regex="/^\w[-\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\.)+[A-Za-z]{2,10}$/" ; // 正则 $res = preg_match($regex, $test); if ($res) { echo '验证成功'; } else { echo '验证失败'; } }
"/^1[34578][0-9]{9}$/" //手机号码
26. 简述如何得到当前执行脚本路径,包括所得到参数。(2分)
$lifeTime = 24 * 3600; session_set_cookie_params($lifeTime); // 修改session session_start();
setcookie(); // 修改cookie
alert() confirm() promopt()
focus()
29、JS的转向函数是?怎么引入一个外部JS文件?(2分)
30、foo()和@foo()之间有什么区别?(1分)
@控制错误输出
<?php
class A
{
public $name = "A";
}
$a = new A();
$n = $a->name;
print_r($n);
34、mysql_fetch_row() 和mysql_fetch_array之间有什么区别? (1分)
mysql_fetch_row -- 从结果集中取得一行作为枚举数组 mysql_fetch_array -- 从结果集中取得一行作为关联数组,或数字数组,或二者兼有 mysql_fetch_array() 是 mysql_fetch_row() 的扩展版本。除了将数据以数字索引方式储存在数组中之外,还可以将数据作为关联索引储存,用字段名作为键名。
36、指出一些在PHP输入一段HTML代码的办法。(1分)
echo "{html}" echo <<<EOD {html} EOD;
$num = 10; function multiply(){ $num = $num * 10; } multiply(); echo $num; // 报错,$num变量未定义
$mysql_db=mysql_connect("local","root","pass"); @mysql_select_db("DB",$mysql_db); $sql = sprintf("select * from %s where UserName = '%s'", "表名", "张三"); values=mysqlquery(sql); while(item=mysqlfetchqueryarray(values)){ echo sprintf("用户名:%s, 电话 %s, 学历: %s, 毕业日期:%s",item[′UserName′],item['Tel'], item[′Content′],item['Date']); }
---------------------------------------------------------------------------
$sql = "insert into User(Name,Tel,Content,Date) values('小王', ’13254748547’, ’高中毕业’, ’2007-05-06’)”;
$sql = "update User set Date='" . time() . "' Where Name='张三'";
$sql = "delete from User where Name='张四'";
int 整型 char 存储定长 varchar 存储变长 datetime 时间 text 存储变长的 varchar是变长 存储空间有优势 char(20)是定长 查询效率有优势
mysql_num_rows()
$a{0}或者$a[0] substr($a, 0, 1);
public function __construct() { } public function __destruct() { }
,关于PHP优缺点,大致的说几点:
1. 语法简单的,上手很快,而且还有很多很便捷的开发工具,比如说Zend Studio ,EclipsePHP Studio 等 2. 跨平台,而且还都是免费的 ,可以快速的在搭建LAMP(Linux Apache MYSQL, PHP), 支持很多主流的数据库系统,比如MYSQL, Oracle, PostgreSQL等等 3. 支持目前主流的技术,比如 WebService ,XML, AJAX 等等 4. PHP已经有很成熟的面向对象体系,可以支持面向对象的开发 (PHP5) 5. 有很多很好现有的框架,开源的论坛,以及博客等 如: 框架方面的: Zend Framework , CakePHP ,ThinkPHP ,CodeIgniter .. 论坛: Discuz, PHPWind ... 博客: Wordpress 网店: ECshop , Ecmall ,ShopEx .... 6. 持续的更新和维护,以及社区的支撑,很多技术爱好者的共同努力,使PHP得到很广泛的应用,很多知名的网站也在使用PHP作为开发语言,比如Taobao, 腾讯,facebook , Sina, yahoo 等等。 不足的地方: 1. 对多线程支持不是很好,只能做一些简单的模拟线程 。 2. 语法不够严谨,如果以前做C++,Java 的就会很有感觉了,比如变量还没有定义,就可能直接使用 。 3. 最感到痛苦的地方是PHP的解释运行机制。这种运行机制使得每个PHP页面被解释执行后,所有的相关资源都会被回收。
也就是说,PHP在语言级别上没有办法让某个对象常驻内存。在PHP中,所有的变量都是页面级的,无论是全局变量,还是类的静态成员,
都会在页面执行完毕后被清空。以JSP为例,在JSP中,Java Bean的scope有四种有效值:Page、Application、Session、Request,分别对应页面、程序、会话、请求四种生存期。但在PHP中,只有Page一种生存期。
PHP缓存技术有哪些? tp是局部还是完全缓存?
2. 页面部分缓存,将一个页面中不经常变的部分进行静态缓存,而经常变化的块不缓存,最后组装在一起显示
3. 数据缓存,通过一个id进行请求的数据,将数据缓存到一个php文件中,id和文件是对应的,下次通过这个id进行请求时 直接读php文件
4. 查询缓存,和数据缓存差不多,根据查询语句进行缓存;
5. 常用的缓存技术有:redis和memcache
个人认为tp应该是全局缓存 因为:tp缓存实在本地生成一个php文件来存储数据库中读取出来的数据
function getpath($a, $b){ $a = explode('/', $a); // 分割后转为数组 $b = explode('/', $b); $count = count($b) - 2; $path = ''; for($i = 1; $i <= $count; $i++){ if($a[$i] == $b[$i]){ $path .= '../'; } else { $path .= $b[$i] . '/'; } } echo $path; } getpath('/a/b/c/d/e.php', '/a/d/12/34/c.php');
memcache redis 区别
1. Memcache 和 Redis 都是用来管理数据的
2. 它们都是存放在内存里面的
3. Redis可以定期将数据备份到磁盘(持久化)
4. Memcache 只是以key/value数据形式存储
5. Redis 不仅仅支持k/v类型的数据,同时提供list, set, hash等数据结构的存储