php面试题

首先面试的时候分两点
一、没有笔试题,直接进行面试。
1、面试官会让你自我介绍,在介绍的时候尽量说出自己的突出点。比如说:我叫**,来自**,工作多久,在工作期间做过什么项目,哪个项目具有代表性,在项目中用到什么技术。
2、面试官会根据你自己简历上所写的技术进行问,所以简历上的技术大家尽量写到自己所会的,不然随便问一个就不会,肯定回去等通知。
3、简历:简历上写的项目要把自己工作以来有代表性的项目写上,一样一两个就可以,写多了,长篇大论,没几个可以看下去的。还浪费纸张。
4、面试题:在去面试之前,最好看一下公司介绍,俗话说,知己知彼,百战百胜。

二、笔试题。
下面本人整理一下最近的面试题,笔试题

PHP的意思:
PHP(外文名:PHP: Hypertext Preprocessor,中文名:“超文本预处理器”),主要用于开发动态网站及服务器端应用程序。是一种html内嵌式的语言,可以嵌入在html内的脚本。

什么是面向对象:
面向对象是一种设计方式,表现形式是封装、继承、多态。减少了代码的冗余,提升代码的重用率。

  • session和cookie的区别是什么?优缺点:
    SESSION存储在服务器端,COOKIE保存在客户端。Session比较安全,cookie用某些手段可以修改,不安全。Session依赖于cookie进行传递。
    禁用cookie后,session不能正常使用。Session的缺点:保存在服务器端,每次读取都从服务器进行读取,对服务器有资源消耗。Session保存在服务器端的文件或数据库中,默认保存在文件中,文件路径由php配置文件的session.save_path指定。Session文件是公有的。

  • Cookie的设置及获取过程

    • 设置COOKIE的值:
    • Setcookie(名称,值,保存时间,有效域);
    • 获取值:$_COOKIE[‘名称’];

HTTP 状态中302、403、 500、200、404、502代码含义?
一二三四五原则: 一. 消息系列二. 成功系列 三. 重定向系列四. 请求错误系列五. 服务器端错误系列 302:临时转移成功,请求的内容已转移到新位置 403:禁止访问 500:服务器内部错误 401代表未授权。 200是请求成功,404是文件未找到,502是服务器内部错误。

isset() 和 empty() 区别 unset()?
isset判断变量是否存在,如果存在则返回真,empty判断变量是否为空为假,如果为空为假则返回真。
unset()只有当指向该变量的所有变量(引用变量)
都销毁后,才会释放内存 memory_get_usage()获取内存

请写出数据类型(int char varchar datetime text)的意思;请问 varchar 和 char有什么区别?
Int 整数 char 定长字符 Varchar 变长字符 Datetime 日期时间型 Text 文本型 Varchar 与char的区别 char是固定长度的字符类型,分配多少空间,就占用多长空间。 Varchar是可变长度的字符类型,内容有多大就占用多大的空间,能有效节省空间。 Varchar是变长,节省存储空间,char是固定长度。查找效率要char型快,因为varchar是非定长,必须先查找长度,然后进行数据的提取,比char定长类型多了一个步骤,所以效率低一些

include与require的区别?
1.include()在执行文件时每次都要进行读取和评估
require()文件只处理一次(实际上文件内容替换了require()语句)

2.require()通常放在PHP脚本程序的最前面
include()的使用和require()一样,一般放在流程控制的处理区段中,PHP脚本文件读到include()语句时,才将它包含的文件读进来,这种方式,可以把程序执行时的流程简单化

3,require()和include()语句是语言结构,不是真正的函数,可以像PHP的其他语言结构一样

4,include_once()和require_once()语句也是在脚本执行期间包括并运行指定文件,与include()require()唯一的区别是如果文件中的代码已经被包括了,则不会再次包括.

5,require()包含文件失败,停止执行,给出错误(致命的)

include()常用于动态包含.

通常是自动加载的文件,即使加载出错,整个程序还是继续执行

一个页面声明,另一个页面调用

包函文件失败,继续向下执行,返回一条警告

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

MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的表强调的是性能,其执行速度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持以及外部键等高级数据库功能。

创建索引:alert table tablename add index (字段名)

PHP字符串中单引号与双引号的区别?

单引号不能解释变量,而双引号可以解释变量。

单引号不能转义字符,在双引号中可以转义字符。

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

in在什么中

Not in 不在什么中

Exists 存在

Not exists 不存在

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

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

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

function test(&$a)

{

a = a= a=a+100;

}

$b=1;

echo $b;//输出1

test( b ) ; / / 这 里 b); //这里 b);//b传递给函数的其实是 b 的 变 量 内 容 所 处 的 内 存 地 址 , 通 过 在 函 数 里 改 变 b的变量内容所处的内存地址,通过在函数里改变 ba的值 就可以改变$b的值了

echo “
”;

echo $b;//输出101

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

echo是PHP语句, print和print_r是函数,语句没有返回值,函数可以有返回值(即便没有用)

Print()只能打印出简单类型变量的值(如int,string)

print_r()可以打印出复杂类型变量的值(如数组,对象)

echo 输出一个或者多个字符串

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

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

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

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

HTTP协议中GET、POST和HEAD的区别?

HEAD: 只请求页面的首部。

GET: 请求指定的页面信息,并返回实体主体。

POST: 请求服务器接受所指定的文档作为对所标识的URI的新的从属实体。

(1)HTTP 定义了与服务器交互的不同方法,最基本的方法是 GET 和 POST。事实上 GET 适用于多数请求,而保留 POST 仅用于更新站点。

(2)在FORM提交的时候,如果不指定Method,则默认为GET请 求,Form中提交的数据将会附加在url之后,以?分开与url分开。字母数字字符原样发送,但空格转换为“+“号,其它符号转换为%XX,其中XX为 该符号以16进制表示的ASCII(或ISO Latin-1)值。GET请求请提交的数据放置在HTTP请求协议头中,而POST提交的数据则放在实体数据中;

GET方式提交的数据最多只能有1024字节,而POST则没有此限制。

(3)GET 这个是浏览器用语向服务器请求最常用的方法。POST这个方法也是用来传送数据的,但是与GET不同的是,使用POST的时候,数据不是附在URI后面传递的,而是要做为独立的行来传递,此时还必须要发送一个Content_length标题,以标明数据长度,随后一个空白行,然后就是实际传送的数据。网页的表单通常是用POST来传送的。

foo()和@foo()之间有什么区别?(1分)
@foo()控制错误输出//加个@,是屏蔽警告

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

  1. get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。

  2. 对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。

  3. get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。

get安全性非常低,post安全性较高。

HTTP协议中GET、POST和HEAD的区别?

HEAD: 只请求页面的首部。

GET: 请求指定的页面信息,并返回实体主体。

POST: 请求服务器接受所指定的文档作为对所标识的URI的新的从属实体。

(1)HTTP 定义了与服务器交互的不同方法,最基本的方法是 GET 和 POST。事实上 GET 适用于多数请求,而保留 POST 仅用于更新站点。

(2)在FORM提交的时候,如果不指定Method,则默认为GET请 求,Form中提交的数据将会附加在url之后,以?分开与url分开。字母数字字符原样发送,但空格转换为“+“号,其它符号转换为%XX,其中XX为 该符号以16进制表示的ASCII(或ISO Latin-1)值。GET请求请提交的数据放置在HTTP请求协议头中,而POST提交的数据则放在实体数据中;

GET方式提交的数据最多只能有1024字节,而POST则没有此限制。

(3)GET 这个是浏览器用语向服务器请求最常用的方法。POST这个方法也是用来传送数据的,但是与GET不同的是,使用POST的时候,数据不是附在URI后面传递的,而是要做为独立的行来传递,此时还必须要发送一个Content_length标题,以标明数据长度,随后一个空白行,然后就是实际传送的数据。网页的表单通常是用POST来传送的。

什么是数据库索引,主键索引,唯一索引的区别,索引的缺点是什么?

索引用来快速地寻找那些具有特定值的记录。

主键索引和唯一索引的区别:主键是一种唯一性索引,但它必须指定为“PRIMARY KEY”,每个表只能有一个主键。唯一索引索引列的所有值都只能出现一次,即必须唯一。

索引的缺点:

1、创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。

2、索引需要占用物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,需要的空间就会更大。

3、当对表中 的数据进行增加、删除、修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。

浏览器IE和非IE浏览器的划分,区别是什么?

IE浏览器指的是使用IE内核的浏览器,对一些W3C标准的网页代码的支持不是很好。

非IE浏览器指的是没有使用IE内核的浏览器,对W3C标准的网页代码有很好的支持。

线性表和顺序表的区别?

1、线性表包括顺序表和链表。

2、顺序表中的元素的地址是连续的,链表里面节点的地址不是连续的,是通过指针连起来的。

用PHP写出显示客户端IP与服务器IP的代码

获取客户端IP:get_env(“REMOTE_ADDR”);

获取服务器端IP:$_SERVER[“SERVER_ADDR”];

实现中文字串截取无乱码的方法

Mb_substr();

什么是模板技术、能够使HTML和PHP分离开使用的模板?

模板技术就是使程序的逻辑代码和界面分开的技术。

能够使HTML和PHP分开的模板有:Smarty、Template、PHPlib Template、FastTemplate

简述0000000中无限分类的实现原理。

1、数据库分类表的设计:id字段、父id字段、类名称字段、path字段

2、Path字段存当前分类的路径,格式:0,父类id,本身id

3、查询分类:select * from 分类表order by path asc;

4、这样就查出来每个分类及其对应的子类。

能够使html和php分离开使用的模板?

Smarty、template、PHPlibTemplate、FastTemplate

使用那些工具进行版本控制?

Clear case、CVS、SVN、PVCS、Perforce、CCC、StarTeam、RCS

写出三种以上MySQL数据库存储引擎的名称(提示:不区分大小写)
MyISAM、InnoDB、BDB(Berkeley DB)、Merge、Memory(Heap)、Example、Federated、Archive、CSV、Blackhole、MaxDB 等等十几个引擎

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

解释:左连接,右连接,内连接,索引。

1、內连接仅选出两张表中互相匹配的记录.因此,这会导致有时我们需要的记录没有包含进来。内部连接是两个表中都必须有连接字段的对应值的记录,数据才能检索出来。

2、左连接和右连接都是外部连接,也就是区别于内部连接,它对不满足连接条件的行并不是象内部连接一样将数据完全过滤掉,而是保留一部分数据,行数不会减少。

3、左连接是只要左边表中有记录,数据就能检索出来,而右边有的记录必要在左边表中有的记录才能被检索出来

4、右连接是只要右边表中有记录,数据就能检索出来 ;

5、全连接则会回返回两个表中的所有记录

数据库索引有几类,分别是什么?什么时候该用索引?

普通索引、主键索引、唯一索引

并非所有的数据库都以相同的方式使用索引,作为通用规则,只有当经常查询列中的数据时才需要在表上创建索引。

写几个魔术方法并说明作用?

__call()当调用不存在的方法时会自动调用的方法

__autoload()在实例化一个尚未被定义的类是会自动调用次方法来加载类文件

__set()当给未定义的变量赋值时会自动调用的方法

__get()当获取未定义变量的值时会自动调用的方法

__construct()构造方法,实例化类时自动调用的方法

__destroy()销毁对象时自动调用的方法

__unset()当对一个未定义变量调用unset()时自动调用的方法

__isset()当对一个未定义变量调用isset()方法时自动调用的方法

__clone()克隆一个对象

__tostring()当输出一个对象时自动调用的方法

R E Q U E S T 、 _REQUEST、 REQUEST_POST、 G E T 、 _GET、 GET_COOKIE、 S E S S I O N 、 _SESSION、 SESSION_FILE的意思是什么?

它们都是PHP预定义变量

$_REQUEST用来获取post或get方式提交的值

$_POST用来获取post方式提交的值

$_GET用来获取get方式提交的值

$_COOKIE用来获取cookie存储的值

$_SESSION用来获取session存储的值

$_FILE用来获取上传文件表单的值

数组中下标最好是什么类型的,为什么?

数组的下标最好是数字类型的,数字类型的处理速度快。

++i和i++哪一个效率高,为什么?

++i效率比i++的效率更高,因为++i少了一个返回i的过程。

你对Memcach的理解,优点有哪些?

Memcache是一种缓存技术,在一定的时间内将动态网页经过解析之后保存到文件,下次访问时动态网页就直接调用这个文件,而不必在重新访问数据库。使用memcache做缓存的好处是:提高网站的访问速度,减轻高并发时服务器的压力。

Memcache的优点:稳定、配置简单、多机分布式存储、速度快。

magic_quotes_gpc()、magic_quotes_runtime()的意思是什么?

Magic_quotes_gpc()是php配置文件中的,如果设置为on则会自动POST,GET,COOKIE中的字符串进行转义,在‘之前加\

Magic_quotes_runtime()是php中的函数,如果参数为true则会数据库中取出来的单引号、双引号、反斜线自动加上反斜杠进行转义。

框架中什么是单一入口和多入口,单一入口的优缺点?

1、多入口就是通过访问不同的文件来完成用户请求。

单一入口只web程序所有的请求都指向一个脚本文件的。

2、单一入口更容易控制权限,方便对http请求可以进行安全性检查。

缺点:URL看起来不那么美观,特别是对搜索引擎来说不友好。

对关系型数据库而言,索引是相当重要的概念,请回答有关索引几个问题:

a) 索引的目的是什么?

1、快速访问数据表中的特定信息,提高检索速度

2、创建唯一性索引,保证数据库表中每一行数据的唯一性

3、加速表和表之间的连接

4、使用分组和排序子句进行数据检索时,可以显著减少查询中分组和排序的时间

b) 索引对数据库系统的负面影响是什么?

负面影响:创建索引和维护索引需要耗费时间,这个时间随着数据量的增加而增加;索引需要占用物理空间,不光是表需要占用数据空间,每个索引也需要占用物理空间;当对表进行增、删、改的时候索引也要动态维护,这样就降低了数据的维护速度。

c) 为数据表建立索引的原则有哪些?

1、在最频繁使用的、用以缩小查询范围的字段上建立索引

2、在平频繁使用的、需要排序的字段上建立索引

d) 什么情况下不宜建立索引?

1、对于查询中很少涉及的列或者重复值比较多的列,不宜建立索引

2、对于一些特殊的数据类型,不宜建立索引,比如文本字段(text)等。

web应用中,数据库的读取频率远高于写入频率, 如何优化MySQL而应对此种情景?

使用memcache缓存技术,将动态数据缓存到文件,访问动态页面时直接调用缓存文件,而不必重新访问数据库,这样就减少了查询数据库的次数。

如果网站的访问量很大,可以把数据库读写服务器分开,使用多态服务器去处理数据库查询,使用较少的服务器去处理数据库的写入和修改。

如果是一个Web频繁访问的查询,上题的查询如何优化?

使用memcache缓存技术,在一定时间内将动态内容缓存到文件中,访问动态页面时,世界调用缓存文件而不必重新查询数据库。

数据库设计时,常遇到的性能瓶颈有哪些,常有的解决方案?

瓶颈主要有:

1、磁盘搜索 优化方法是:将数据分布在多个磁盘上

2、磁盘读/写 优化方法是:从多个磁盘并行读写。

3、CPU周期 优化方法:扩充内存

4、内存带宽

请举例说明在你的开发过程中用什么方法来加快页面的加载速度
要用到服务器资源时才打开,及时关闭服务器资源,数据库添加索引,页面可生成静态,图片等大文件单独服务器。使用代码优化工具。

描述一下大流量高并发量网站的解决方案

1、确认服务器硬件是否足够支持当前的流量。

2、使用memcache缓存技术,将动态数据缓存到内存中,动态网页直接调用这些文件,而不必在访问数据库。

3、禁止外部的盗链。

4、外部网站的图片或者文件盗链往往会带来大量的负载压力,因此应该严格限制外部对自身图片或者文件盗链,目前可以简单的通过refer来控制盗链,apache自己就可以通过配置来禁止盗链。

5、控制大文件的下载。

大文件的下载会占用很大的流量,对于非SCSI硬盘来说会消耗,使得网站响应能力下降。

6、使用不同的主机分流主要流量

7、使用流量统计软件。

在网站上安装一个流量统计软件,可以即时知道哪些地方耗费了大量流量,哪些页面需要再进行优化。

8、分库分表。

9、Sphinx全文索引引擎。

剩下需要看代码输出结果的就不挨个列出来了,那些题,只要看清楚题目,注意里面逻辑就都没问题。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值