热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

php面试题的总结

这篇文章介绍的内容是关于php面试题的总结,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下1.什么事面向对象?主要特征是什么?面向对象是程序的一种设计方式,它利于提高

这篇文章介绍的内容是关于php面试题的总结,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

1. 什么事面向对象?主要特征是什么?

面向对象是程序的一种设计方式,它利于提高程序的重用性,使程序结构更加清晰。主要特征:封装、继承、多态。

2. SESSION 与 COOKIE的区别是什么,请从协议,产生的原因与作用说明?

1、http无状态协议,不能区分用户是否是从同一个网站上来的,同一个用户请求不同的页面不能看做是同一个用户。

2、SESSION存储在服务器端,COOKIE保存在客户端。Session比较安全,COOKIE用某些手段可以修改,不安全。Session依赖于COOKIE进行传递。

禁用COOKIE后,session不能正常使用。Session的缺点:保存在服务器端,每次读取都从服务器进行读取,对服务器有资源消耗。Session保存在服务器端的文件或数据库中,默认保存在文件中,文件路径由php配置文件的session.save_path指定。Session文件是公有的。

3. HTTP 状态中302、403、 500代码含义?

一二三四五原则: 一. 消息系列 二成功系列 三. 重定向系列四. 请求错误系列 五. 服务器端错误系列

302:临时转移成功,请求的内容已转移到新位置403:禁止访问 500:服务器内部错误 401代表未授权。

4. Linux下建立压缩包,解压缩包的命令

Tar.gz:

打包:tar czf file.tar.gz file.txt

解压:tar xzf file.tar.gz

Bz2:

打包:bzip2 [-k] 文件

解压:bunzip2 [-k] 文件

Gzip(只对文件,不保留原文件)

打包:gzip file1.txt

解压:gunzip file1.txt.gz

Zip: -r 对目录

打包:zip file1.zip file1.txt

解压:unzip file1.zip

5. 请写出数据类型(int char varchar datetime text)的意思;请问 varchar 和 char有什么区别?

Int 整数char 定长字符 Varchar 变长字符 Datetime 日期时间型Text 文本型 Varchar与char的区别 char是固定长度的字符类型,分配多少空间,就占用多长空间。Varchar是可变长度的字符类型,内容有多大就占用多大的空间,能有效节省空间。由于varchar类型是可变的,所以在数据长度改变的时,服务器要进行额外的操作,所以效率比char类型低。

6. MyISAM和 InnoDB 的基本区别?索引结构如何实现?

MyISAM类型不支持事务,表锁,易产生碎片,要经常优化,读写速度较快,而InnoDB类型支持事务,行锁,有崩溃恢复能力。读写速度比MyISAM慢。

创建索引:alerttable本文来源gao@.dai.ma.com搞@^&[email protected])网9搞代gaodaima码 tablename add index (`字段名`)

7. 不使用COOKIE向客户端发送一个COOKIE.

理解:session_start()开启时,生成一个常量 SID,当COOKIE开启时,这个常量为空,当COOKIE关闭时,这个常量中存储了PHPSESSID的值。通过在URL后加一个SID参数来传递SESSIONID的值,从而使客户端页面可以使用SESSION里面的值。当客户端开启COOKIE和服务器端开启SESSION时。浏览器第一次请求,服务器会向浏览器端发送一个COOKIE里面存储SESSIONID.当浏览器第二次请求时,会把已存在

8. isset() 和 empty() 区别

Isset判断变量是否存在,可以传入多个变量,若其中一个变量不存在则返回假,empty判断变量是否为空为假,只可传一个变量,如果为空为假则返回真。

9. 如何在页面之间传递变量(至少两种方式) ? GET,POST,COOKIE,SESSION,隐藏表单

1. 写出匹配URL的正则表达式.

‘/^(https?|ftps?):\/\/(www)\.([^\.\/]+)\.(com|cn|org)(\/[\w-\.\/\?\%\&\=]*)?/i’

2. 请写出常见的排序算法,并用PHP实现冒泡排序,将数组$a = array()按照从小到大的方式进行排序。

常见的排序算法: 冒泡排序法、快速排序法、简单选择排序法、堆排序法、直接插入排序法、希尔排序法、合并排序法。

冒泡排序法的基本思想是:对待排序记录关键字从后往前(逆序)进行多遍扫描,当发现相邻两个关键字的次序与排序要求的规则不符时,就将这两个记录进行交换。这样,关键字较小的记录将逐渐从后面向前面移动,就象气泡在水中向上浮一样,所以该算法也称为气泡排序法。

// 冒泡排序法Function mysort($arr){         For($i=0;$i $arr[$j+1]){                                    $tmp=$arr[$j];                                    $arr[$j]=$arr[$j+1];                                    $arr[$j+1]=$tmp;            }       }   }         Return$arr;}$arr=array(3,2,1);print_r(mysort($arr));

3. 请说明 PHP 中传值与传引用的区别。什么时候传值什么时候传引用?
按值传递:函数范围内对值的任何改变在函数外部都会被忽略

按引用传递:函数范围内对值的任何改变在函数外部也能反映出这些修改

优缺点:按值传递时,php必须复制值。特别是对于大型的字符串和对象来说,这将会是一个代价很大的操作。按引用传递则不需要复制值,对于性能提高很有好处。

在PHP中error_reporting这个函数有什么作用?
设置 PHP的报错级别并返回当前级别。

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

if(isset($_POST['action']) && $_POST['action']==’submitted’){         $email=$_POST['email'];         if(!preg_match(“/^[0-9a-zA-Z-]+@[0-9a-zA-Z-]+(\.[0-9a-zA-Z-]+){1,3}$/”,$email)){                  echo“电子邮件检测失败”;         }else{                  echo“电子邮件检测成功”;         }}

写一个二维数组排序算法函数,能够具有通用性,可以调用php内置函数(array_multisort())

//二维数组排序, $arr是数据,$keys是排序的健值,$order是排序规则,1是升序,0是降序function array_sort($arr, $keys, $order=0) {         if(!is_array($arr)) {                  return false;         }         $keysvalue =array();         foreach($arr as$key => $val) {                  $keysvalue[$key] = $val[$keys];         }         if($order == 0){                  asort($keysvalue);         }else {                  arsort($keysvalue);         }         reset($keysvalue);         foreach($keysvalueas $key => $vals) {                  $keysort[$key] = $key;         }         $new_array =array();         foreach($keysortas $key => $val) {                  $new_array[$key] = $arr[$val];         }         return $new_array;}

请以空格作为间隔,拆分字符串’Apple Orange BananaStrawberry’,组成数组$fruit,

* 数组中所有元素都用小写字母,并按照字母先后次序排序

class sort {         private $str;         public function__construct($str) {                  $this->str=strtolower($str);         }         private functionexplodes() {                  if(empty($this->str)) returnarray();                  $arr=explode("",$this->str);                  return is_array($arr)?$arr:array($arr);         }         public functionsort() {                  $explode=$this->explodes();                  sort($explode);                  return $explode;         }}$str='Apple Orange Banana Strawberry';$sortob=new sort($str);var_dump($sortob->sort());

对于用户输入一串字符串$string,要求$string中只能包含大于0的数字和英文逗号,请用正则表达式验证,对于不符合要求的$string返回出错信息

class regx {         public staticfunction check($str) {         if(preg_match("/^([1-9,])+$/",$str)){                  return true;         }         return false;         }}$str="12345,6";if(regx::check($str)) {echo "suc";} else {echo "fail";}

windows平台, Apache Http Server启动失败, 排错思路是什么?

检查apache使用的80端口是否被占用,如果被占用,先停止占用80端口的服务,然后启动apache服务器

PHP session扩展默认将session数据储存在哪里? D

A) SQLite Database

B) MySQL Database

C) Shared Memory

D) File System

E) Session Server

如果你想要自动加载类,下面哪种函数声明是正确的C

A) function autoload($class_name)

B) function __autoload($class_name, $file)

C) function __autoload($class_name)

D) function _autoload($class_name)

E) function autoload($class_name, $file)

PHP程序使用utf-8编码, 以下程序输出结果是什么? B
$str = ’hello你好世界’;

echo strlen($str);

?>

A) 9 B) 13(gbk) C) 18 D) 17(utf8)

你所知道的php数组相关的函数?

array()—-创建数组

array_combine()—-通过合并两个数组来创建一个新数组

range()—-创建并返回一个包含指定范围的元素的数组

compact()—-建立一个数组

array_chunk()—-将一个数组分割成多个

array_merge()—-把两个或多个数组合并成一个数组

array_slice()—-在数组中根据条件取出一段值

array_diff()—-返回两个数组的差集数组

array_intersect()—-计算数组的交集

array_search()—-在数组中搜索给定的值

array_splice()—-移除数组的一部分且替代它

array_key_exists()—-判断某个数组中是否存在指定的key

shuffle()—-把数组中的元素按随机顺序重新排列

array_flip()—-交换数组中的键和值

array_reverse()—-将原数组中的元素顺序翻转,创建新的数组并返回

array_unique()—-移除数组中重复的值

php读取文件内容的几种方法和函数?

打开文件,然后读取。Fopen()fread()

打开读取一次完成file_get_contents()

以下程序,变量str什么值的情况下输入111?

if( ! $str ) { echo 111; }

在$str值为:0,’0′,false,null,”"

你所知道的PHP的一些技术(smarty等)?

Smarty,jquery,ajax,memcache,p+css,js,mysqli,pdo,svn,thinkphp,brophp,yii

你所熟悉的PHP论坛系统 有哪些?

Discuz

你所熟悉的PHP商城系统 有哪些?

Ecshop

你所熟悉的PHP开发框架 有哪些?

Brophp,thinkphp

说说你对缓存技术的了解?

1、缓存技术是将动态内容缓存到文件中,在一定时间内访问动态页面直接调用缓存文件,而不必重新访问数据库。

2、使用memcache可以做缓存。

你所知道的设计模式有哪些?

工厂模式、策略模式、单元素模式、观察者模式、命令链模式

说说你对代码管理的了解?常使用那些代码版本控制软件?

通常一个项目是由一个团队去开发,每个人将自己写好的代码提交到版本服务器,由项目负责人按照版本进行管理,方便版本的控制,提高开发效率,保证需要时可以回到旧版本。

常用的版本控制器:SVN

说说你对SVN的了解?优缺点?

SVN是一种版本控制器,程序员开发的代码递交到版本服务器进行集中管理。

SVN的优点:代码进行集中管理,版本控制容易,操作比较简单,权限控制方便。

缺点:不能随意修改服务器项目文件夹。

怎么找到PHP.ini的路径?

一般都在php的安装目录下,或者window系统的windows目录下。

PHP加速模式/扩展? PHP调试模式/工具?

Zend Optimizer加速扩展

调试工具:xdebug

你常用到的mysql命令?

Show databases

Show tables

Insert into 表名()values()

Update 表名 set字段=值 where …

Delete from 表名where …

Select * from 表名where 条件 order by … Desc/asc limit … Group by … Having …

进入mysql管理命令行的命令?

Mysql -uroot -p回车密码

show databases; 这个命令的作用?

显示当前mysql服务器中有哪些数据库

show create database mysql; 这个命令的作用?

显示创建数据库的sql语句

show create table user; 这个命令的作用?

显示创建表的sql语句

desc user; 这个命令的作用?

查询user表的结构

explain select * from user; 这个命令的作用?

获取select相关信息

show processlist; 这个命令的作用?

显示哪些线程正在运行

SHOW VARIABLES; 这个命令的作用?

显示系统变量和值

SHOW VARIABLES like ’%conn%’; 这个命令的作用?

显示系统变量名包含conn的值

LEFT JOIN 写一个SQL语句?

SELECTA.id,A.class FROM A LEFT JOIN B ON A.cid=B.id

in, not ni, exist, not exist的作用和区别?

in在什么中

Not in 不在什么中

Exists 存在

Not exists 不存在

怎么找到数据库的配置文件路径?

在数据库安装目录下,my.ini

简述Linux下安装PHP的过程?

安装软件之前先安装编译工具gcc、gcc-c++

拷贝源码包,解包解压缩

Cd /lamp/php进入php目录

./configure–prefix=/usr/local/php –with-config-file-path=/usr/local/php/etc指定安装目录和配置文件目录

Make 编译

Make install安装

简述Linux下安装Mysql的过程?

Groupadd mysql 添加一个用户组mysql

Useradd -gmysql mysql 添加一个mysql用户指定分组为mysql

Cd /lamp/mysql 进入mysql目录

./configure–prefix=/usr/local/mysql/ –with-extra-charsets=all

Make

Make all

简述Linux下安装apache的过程?

Cd /lamp/httpd 进去apache软件目录

./configure–prefix=/usr/local/apache2/ –syscOnfdir=/etc/httpd/ –with-included-apr

Make

Make all

HTML/CSS/p/Javascritp:

1. 设计一个页面(4个 p 第一个p 宽960px 居中;第2-4个p 3等分960px;)

用Javascript取得一个input的值?取得一个input的属性?

document.getElementById(‘name’).value;document.getElementById(‘name’).type;

用Jquery取得一个input的值?取得一个input的属性?

$(“input[name='aa']“).val();$(“input[name='aa']“).attr(‘type’);

请您写一段ajax提交的js代码,或者写出ajax提交的过程逻辑。

var xmlhttp;if(window.XMLHttpRquest){xmlhttp=newXMLHttpRequest();}elseif(window.ActiveXObject){xmlhttp=newActiveXObject(‘Microsoft.XMLHTTP’);}xmlhttp.open(‘GET’,’1.php?aa=name’,true);xmlhttp.Onreadystatechange=function(){if(xmlhttp.readyState==4){if(xmlhttp.status==200){var text=xmlhttp.responseText;}}}xmlhttp.send(null);

简述COOKIE的设置及获取过程

设置COOKIE的值:

SetCOOKIE(名称,值,保存时间,有效域);

获取值:$_COOKIE['名称'];

面向对象中接口和抽象类的区别及应用场景?

1、有抽象方法的类叫做抽象类,抽象类中不一定只有抽象方法,抽象方法必须使用abstract关键字定义。

2、接口中全部是抽象方法,方法不用使用abstract定义。

3、当多个同类的类要设计一个上层,通常设计为抽象类,当多个异构的类要设计一个上层,通常设计为接口。

用面向对象来实现A对象继承B和C对象

Interface B{... }Interface C{... }Class Aimplements B,C{ ... }


推荐阅读
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 本文介绍了绕过WAF的XSS检测机制的方法,包括确定payload结构、测试和混淆。同时提出了一种构建XSS payload的方法,该payload与安全机制使用的正则表达式不匹配。通过清理用户输入、转义输出、使用文档对象模型(DOM)接收器和源、实施适当的跨域资源共享(CORS)策略和其他安全策略,可以有效阻止XSS漏洞。但是,WAF或自定义过滤器仍然被广泛使用来增加安全性。本文的方法可以绕过这种安全机制,构建与正则表达式不匹配的XSS payload。 ... [详细]
  • IamgettingaUnicodeerror:UnicodeEncodeError:charmapcodeccantencodecharacteru\xa9in ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • 本文介绍了Linux系统中正则表达式的基础知识,包括正则表达式的简介、字符分类、普通字符和元字符的区别,以及在学习过程中需要注意的事项。同时提醒读者要注意正则表达式与通配符的区别,并给出了使用正则表达式时的一些建议。本文适合初学者了解Linux系统中的正则表达式,并提供了学习的参考资料。 ... [详细]
  • Linux环境变量函数getenv、putenv、setenv和unsetenv详解
    本文详细解释了Linux中的环境变量函数getenv、putenv、setenv和unsetenv的用法和功能。通过使用这些函数,可以获取、设置和删除环境变量的值。同时给出了相应的函数原型、参数说明和返回值。通过示例代码演示了如何使用getenv函数获取环境变量的值,并打印出来。 ... [详细]
  • PHPMailer邮件类邮件发送功能的使用教学及注意事项
    本文介绍了使用国外开源码PHPMailer邮件类实现邮件发送功能的简单教学,同时提供了一些注意事项。文章涵盖了字符集设置、发送HTML格式邮件、群发邮件以及避免类的重定义等方面的内容。此外,还提供了一些与PHP相关的资源和服务,如传奇手游游戏源码下载、vscode字体调整、数据恢复、Ubuntu实验环境搭建、北京爬虫市场、进阶PHP和SEO人员需注意的内容。 ... [详细]
  • 本文介绍了Linux Shell中括号和整数扩展的使用方法,包括命令组、命令替换、初始化数组以及算术表达式和逻辑判断的相关内容。括号中的命令将会在新开的子shell中顺序执行,括号中的变量不能被脚本余下的部分使用。命令替换可以用于将命令的标准输出作为另一个命令的输入。括号中的运算符和表达式符合C语言运算规则,可以用在整数扩展中进行算术计算和逻辑判断。 ... [详细]
author-avatar
神圣的全日制
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有