分享一些今年所遇到的面试题。php
一、写一个函数,尽量高效的,从一个标准url里取出文件的扩展名例如: http://www.test.com.cn/abc/de/fg.PHP?id=1须要取出php或.phphtml
1 第一种写法: 2 function getExt1($url){ 3 $arr = parse_url($url); 4 $file = basename($arr['path']); 5 $ext = explode('.',$file); 6 return $ext[1]; 7 } 8 第二种写法: 9 function getExt2($url){ 10 $b=parse_url($url); 11 echo substr($b['path'],strpos($b['path'],'.')); 12 } 13 第三种写法: 14 function getExt3($url){ 15 $b=parse_url($url); 16 $ext = explode('.',$b['path']); 17 echo end($ext); 18 } 19 20 $a="http://www.test.com.cn/abc/de/fg.php?id=1"; 21 echo getExt($a);
1 function get_ext1($file_name){ 2 returnsubstr(strrchr($file_name, '.'),1); 3 } 4 function get_ext2($file_name){ 5 returnsubstr(substr($file_name, strrpos($file_name, '.')),1); 6 } 7 function get_ext3($file_name){ 8 $a=explode('.', $file_name); 9 returnarray_pop($a); 10 } 11 function get_ext4($file_name){ 12 returnpathinfo($file_name, PATHINFO_EXTENSION); 13 } 14 function get_ext5($file_name){ 15 returnstrrev(substr(strrev($file_name), 0, strpos(strrev($file_name), '.'))); 16 }
三、HTTP中POST、GET、PUT、DELETE方式的区别前端
HTTP定义了与服务器交互的不一样的方法,最基本的是POST、GET、PUT、DELETE,与其比不可少的URL的全称是资源描述符,咱们能够这样理解:url描述了一个网络上资源,而post、get、put、delete就是对这个资源进行增、删、改、查的操做!mysql
3.1表单中get和post提交方式的区别jquery
四、优化数据库的方法nginx
1、选取适当的字段属性。web
二、使用链接查询代替子查询。面试
三、使用联合查询代替手动建立的临时表正则表达式
四、使用事务。sql
五、锁定表。
六、使用外键。
七、使用索引
八、优化查询语句
详情能够看我以前发表的《优化数据库的八种方法》
五、对于大流量网站,采用什么方法来解决访问量的问题
一、首先,确认服务器硬件是否足够支持当前的流量
普通的P4服务器通常最多能支持天天10万独立IP,若是访问量比这个还要大,那么必须首先配置一台更高性能的专用服务器才能解决问题,不然怎么优化都不可能完全解决性能问题。
二、数据库的读写分离,优化表结构;
读写分离:频繁请求数据库时会形成堵塞,增长数据的读取与写入时间。读写分离可以使不一样的数据库分担不一样的任务,减小每一个数据库的链接数,加快数据读取速度;
三、缓存技术的合理运用,减小数据库的频繁操做;
优化数据库访问前台实现彻底的静态化固然最好,能够彻底不用访问数据库,不过对于频繁更新的网站, 静态化每每不能知足某些功能。
缓存技术就是另外一个解决方案,就是将动态数据存储到缓存文件中,动态网页直接调用 这些文件,而没必要再访问数据库,WordPress和Z-Blog都大量使用这种缓存技术 若是确实没法避免对数据库的访问,那么能够尝试优化数据库的查询SQL.避免使用 Select * from这样的语句,每次查询只返回本身须要的结果,避免短期内的大,尽可能作到"所查即所得" ,遵循以小表为主,附表为辅,查询条件先索引,先小后大的原则,提升查询效率.量SQL查询。
四、程序功能规则,减小外部盗链;
外部网站的图片或者文件盗链每每会带来大量的负载压力,所以应该严格限制外部对于自身的图片或者文件盗链,好在目前能够简单地经过refer来控制盗链,Apache自 己就能够经过配置来禁止盗链,IIS也有一些第三方的ISAPI能够实现一样的功能。固然,伪造refer也能够经过代码来实现盗链,不过目前蓄意伪造refer盗链的还很少, 能够先不去考虑,或者使用非技术手段来解决,好比在图片上增长水印。
五、控制大文件的上传与下载;
大文件的下载会占用很大的流量,而且对于非SCSI硬盘来讲,大量文件下载会消耗 CPU,使得网站响应能力降低。所以,尽可能不要提供超过2M的大文件下载,若是须要提供,建议将大文件放在另一台服务器上。
六、使用不一样主机分流主要流量
将文件放在不一样的主机上,提供不一样的镜像供用户下载。好比若是以为RSS文件占用流量大,那么使用FeedBurner或者FeedSky等服务将RSS输出放在其余主机上,这样别人访问的流量压力就大多集中在FeedBurner的主机上,RSS就不占用太多资源了
七、使用流量分析统计软件
在网站上安装一个流量分析统计软件,能够即时知道哪些地方耗费了大量流量,哪些页面须要再进行优化,所以,解决流量问题还须要进行精确的统计分析才能够。
六、数据库中的事务是什么?
事务(transaction)是做为一个单元的一组有序的数据库操做。若是组中的全部操做都成功,则认为事务成功,即便只有一个操做失败,事务也不成功。若是全部操做完成,事务则提交,其修改将做用于全部其余数据库进程。若是一个操做失败,则事务将回滚,该事务全部操做的影响都将取消。ACID 四大特性,原子性、隔离性、一致性、持久性。
七、了解XSS攻击吗?如何防止?
XSS跨站脚本攻击指攻击者在网页中嵌入客户端脚本(例如JavaScript),当用户浏览此网页时,脚本就会在用户的浏览器上执行,从而达到攻击者的目的,好比获取用户的Cookie,导航到恶意网站,携带木马等。
如何防止XSS跨站脚本攻击:
原则:不相信用户输入的数据
5. 过滤JavaScript 事件的标签。例如 “onclick=”、”onfocus”等等
不少浏览器都加入了安全机制来过滤XSS
注意:攻击代码不必定在<script></script>中
八、SQL注入漏洞产生的缘由?如何防止?
所谓SQL注入,就是经过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
如何防止SQL注入:
应用的异常信息应该给出尽量少的提示,最好使用自定义的错误信息对原始错误信息进行包装
九、对于关系型数据库而言,索引是至关重要的概念,请回答有关索引的几个问题:
a)、索引的目的是什么?
b)、索引对数据库系统的负面影响是什么?
负面影响:
建立索引和维护索引须要耗费时间,这个时间随着数据量的增长而增长;索引须要占用物理空间,不光是表须要占用数据空间,每一个索引也须要占用物理空间;当对表进行增、删、改、的时候索引也要动态维护,这样就下降了数据的维护速度。
c)、为数据表创建索引的原则有哪些?
d)、什么状况下不宜创建索引?
e)索引的反作用
(1)索引是有大量数据的时候才创建的,没有大量数据反而会浪费时间,由于索引是使用二叉树创建.
(2)当一个系统查询比较频繁,而新建,修改等操做比较少时,能够建立索引,这样查询的速度会比之前快不少,同时也带来弊端,就是新建或修改等操做时,比没有索引或没有创建覆盖索引时的要慢。
(3)索引并非越多越好,太多索引会占用不少的索引表空间,甚至比存储一条记录更多。
对于须要频繁新增记录的表,最好不要建立索引,没有索引的表,执行insert、append都很快,有了索引之后,会多一个维护索引的操做,一些大表可能致使insert 速度很是慢。
十、简述在MySQL数据库中MyISAM和InnoDB的区别
区别于其余数据库的最重要的特色就是其插件式的表存储引擎。切记:存储引擎是基于表的,而不是数据库。
MyISAM是MySQL的默认数据库引擎(5.5版以前),由早期的ISAM(Indexed Sequential Access Method:有索引的顺序访问方法)所改良。虽然性能极佳,但却有一个缺点:不支持事务处理(transaction)。不过,在这几年的发展下,MySQL也导入了InnoDB(另外一种数据库引擎),以强化参考完整性与并发违规处理机制,后来就逐渐取代MyISAM。
InnoDB,是MySQL的数据库引擎之一,为MySQL AB发布binary的标准之一。InnoDB由Innobase Oy公司所开发,2006年五月时由甲骨文公司并购。与传统的ISAM与MyISAM相比,InnoDB的最大特点就是支持了ACID兼容的事务(Transaction)功能,相似于PostgreSQL。目前InnoDB采用双轨制受权,一是GPL受权,另外一是专有软件受权。
MyISAM与InnoDB的区别是什么?
1、存储结构
MyISAM:每一个MyISAM在磁盘上存储成三个文件。第一个文件的名字以表的名字开始,扩展名指出文件类型。.frm文件存储表定义。数据文件的扩展名为.MYD (MYData)。索引文件的扩展名是.MYI (MYIndex)。
InnoDB:全部的表都保存在同一个数据文件中(也多是多个文件,或者是独立的表空间文件),InnoDB表的大小只受限于操做系统文件的大小,通常为2GB。
2、存储空间
MyISAM:可被压缩,存储空间较小。支持三种不一样的存储格式:静态表(默认,可是注意数据末尾不能有空格,会被去掉)、动态表、压缩表。
InnoDB:须要更多的内存和存储,它会在主内存中创建其专用的缓冲池用于高速缓冲数据和索引。
3、可移植性、备份及恢复
MyISAM:数据是以文件的形式存储,因此在跨平台的数据转移中会很方便。在备份和恢复时可单独针对某个表进行操做。
InnoDB:免费的方案能够是拷贝数据文件、备份 binlog,或者用 mysqldump,在数据量达到几十G的时候就相对痛苦了。
4、事务支持
MyISAM:强调的是性能,每次查询具备原子性,其执行数度比InnoDB类型更快,可是不提供事务支持。
InnoDB:提供事务支持事务,外部键等高级数据库功能。 具备事务(commit)、回滚(rollback)和崩溃修复能力(crash recovery capabilities)的事务安全(transaction-safe (ACID compliant))型表。
5、 AUTO_INCREMENT
MyISAM:能够和其余字段一块儿创建联合索引。引擎的自动增加列必须是索引,若是是组合索引,自动增加能够不是第一列,他能够根据前面几列进行排序后递增。
InnoDB:InnoDB中必须包含只有该字段的索引。引擎的自动增加列必须是索引,若是是组合索引也必须是组合索引的第一列。
6、表锁差别
MyISAM:只支持表级锁,用户在操做myisam表时,select,update,delete,insert语句都会给表自动加锁,若是加锁之后的表知足insert并发的状况下,能够在表的尾部插入新的数据。
InnoDB:支持事务和行级锁,是innodb的最大特点。行锁大幅度提升了多用户并发操做的新能。可是InnoDB的行锁,只是在WHERE的主键是有效的,非主键的WHERE都会锁全表的。
7、全文索引
MyISAM:支持 FULLTEXT类型的全文索引
InnoDB:不支持FULLTEXT类型的全文索引,可是innodb可使用sphinx插件支持全文索引,而且效果更好。
8、表主键
MyISAM:容许没有任何索引和主键的表存在,索引都是保存行的地址。
InnoDB:若是没有设定主键或者非空惟一索引,就会自动生成一个6字节的主键(用户不可见),数据是主索引的一部分,附加索引保存的是主索引的值。
十一、解释MySQL外链接、内链接与自链接的区别
先说什么是交叉链接: 交叉链接又叫笛卡尔积,它是指不使用任何条件,直接将一个表的全部记录和另外一个表中的全部记录一一匹配。
内链接 则是只有条件的交叉链接,根据某个条件筛选出符合条件的记录,不符合条件的记录不会出如今结果集中,即内链接只链接匹配的行。
外链接 其结果集中不只包含符合链接条件的行,并且还会包括左表、右表或两个表中的全部数据行,这三种状况依次称之为左外链接,右外链接,和全外链接。
左外链接,也称左链接,左表为主表,左表中的全部记录都会出如今结果集中,对于那些在右表中并无匹配的记录,仍然要显示,右边对应的那些字段值以NULL来填充。右外链接,也称右链接,右表为主表,右表中的全部记录都会出如今结果集中。左链接和右链接能够互换,mysql目前还不支持全外链接。
十二、列举流行的Ajax 框架?说明 Ajax 实现原理是什么及json在 Ajax 中起什么做用?
流行的 Ajax 框架有 jQuery,Prototype,Dojo,MooTools。
Ajax 的工做原理是一个页面的指定位置能够加载另外一个页面全部的输出内容,这样就实现了一个静态页面也能获取到数据库中的返回数据信息了。因此 Ajax 技术实现了一个静态网页在不刷新整个页面的状况下与服务器通讯,减小了用户等待时间,同时也从而下降了网络流量,加强了客户体验的友好程度。
在使用 Ajax 时,涉及到数据传输,即将数据从服务器返回到客户端,服务器端和客户端分别使用不一样的脚步语言来处理数据,这就须要一种通用的数据格式,XML 和json就是最经常使用的两种,而json比 XML 更简单。
1三、谈谈你对MVC的认识
MVC是Model—View—Controler的简称。即模型—视图—控制器。MVC是一种设计模式,它强制性的把应用程序的输入、处理和输出分开。
MVC中的模型、视图、控制器它们分别担负着不一样的任务。
视图: 视图是用户看到并与之交互的界面。视图向用户显示相关的数据,并接受用 户的输入。视图不进行任何业务逻辑处理。
模型: 模型表示业务数据和业务处理。一个模型能为多个视图提供数据。这提升了应用程序的重用性。
控制器: 当用户单击Web页面中的提交按钮时,控制器接受请求并调用相应的模型去处理请求。而后根据处理的结果调用相应的视图来显示处理的结果。
MVC的处理过程:首先控制器接受用户的请求,调用相应的模型来进行业务处理,并返回数据给控制器。控制器调用相应的视图来显示处理的结果。并经过视图呈现给用户。
1、MVC的优势
一、能够为一个模型在运行时同时创建和使用多个视图。变化-传播机制能够确保全部相关的视图及时获得模型数据变化,从而使全部关联的视图和控制器作到行为同步。
二、视图与控制器的可接插性,容许更换视图和控制器对象,并且能够根据需求动态的打开或关闭、甚至在运行期间进行对象替换。
三、模型的可移植性。由于模型是独立于视图的,因此能够把一个模型独立地移植到新的平台工做。须要作的只是在新平台上对视图和控制器进行新的修改。
四、潜在的框架结构。能够基于此模型创建应用程序框架,不只仅是用在设计界面的设计中。
MVC的不足
MVC的不足体如今如下几个方面:
(1)增长了系统结构和实现的复杂性。对于简单的界面,严格遵循MVC,使模型、视图与控制器分离,会增长结构的复杂性,并可能产生过多的更新操做,下降运行效率。
(2)视图与控制器间的过于紧密的链接。视图与控制器是相互分离,但确实联系紧密的部件,视图没有控制器的存在,其应用是颇有限的,反之亦然,这样就妨碍了他们的独立重用。
(3)视图对模型数据的低效率访问。依据模型操做接口的不一样,视图可能须要屡次调用才能得到足够的显示数据。对未变化数据的没必要要的频繁访问,也将损害操做性能。
(4) 目前,通常高级的界面工具或构造器不支持MVC架构。改造这些工具以适应MVC须要和创建分离的部件的代价是很高的,从而形成使用MVC的困难。
1四、用过缓存技术吗?说说对Memcache的理解
概念
Memcache是一个高性能的分布式的内存对象缓存系统。是个开源的软件,能够经过简单的方法,管理数据库在内存中的存取。简单的说就是缓存数据库查询结果(数据)到内存中,而后从内存中读取,从而大大提升读取速度,减小数据库访问参数,以提升动态web应用的速度,提升可扩展性
怎么理解Memcache?
Memcache 是只有一张表的数据库,这张表有两个字段分别是主键key 和value,value就是咱们要保存的数据,key就是这个数据的id,用来保证咱们查找时候的惟一性
Memcache 使用场景
非持久化存储:对数据存储要求不高,服务中止后,里面的数据就会丢失
分布式存储:单台数据的内存容量有限,能够在多个电脑上安装memcache 服务
Key/Value存储:须要缓存的对象或数据以“key/value”对的形式保存在服务器端
Memcache 在WEB中的应用
MemCache缓存系统最主要的就是为了提升动态网页应用,分担数据库检索的压力。对于网站流量比较大的,可使用memcache缓解数据库的压力,主要的焦点集中在如下两个方面:
1. 使用MemCache做为中间缓存层减小数据库的压力。
2. MemCache分布式的应用
链接memcache
实例化memcache类
$memcache=new memcache;
链接memcache服务器
格式:$memcache->connect('127.0.0.1','11211');
参数1:主机(必写);
参数2:Memcached服务的端口号,默认11211(可选)
关闭服务器链接
$memcache->close()
1五、Memcache与Redis的区别
NoSQL因其优点,目前是大行其道,而Memcached和Redis更是NoSQL中的明星。两者同为Key-Value型,且一样优秀,少不了一番比较。如下是一些简单的比较,不涉及底层基础等。
1.存储最大值
Memcached的key最大为250字节,value最大为1MB;Redis的key和value最大都是512MB。
2.数据类型
Memcached存储的类型仅支持key-value类型;Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。
3.数据备份
Memcached不支持数据备份;Redis支持master-slave模式的数据备份,教程在此:Redis数据备份与恢复。
4.灾难恢复
Memcached不可恢复,即restart以后数据也会清空;Redis能够恢复。
5.性能比较
放上引用的一段话,连接地址会在下文给出:
因为Redis只使用单核,而Memcached可使用多核,因此在比较上,平均每个核上 Redis在存储小数据时Memcached性能更高。而在100k以上的数据中,Memcached性能要高于Redis,虽然Redis最近也在存储大数据的性能上进行优化,可是比起Memcached,仍是稍有逊色。说了这么多,结论是,不管你使用哪个,每秒处理请求的次数都不会成为瓶颈。
6.持久化
这一点能够说是两者之间本质上的区别,同时也是上一点灾难恢复的基础。Memcached不能够持久化,全部的数据都在内存中。Redis有两种持久化的方式:RDB(快照)方式和AOF(追加)方式,教程在此:Redi持久化。
7.使用场景
私觉得,Memcached足以应对通常网站的缓存需求,此博客既是使用Memcached。若是有更多的需求,如持久化、可靠性或者更多数据类型,应当考虑Redis。
1六、Apache与Nginx的区别
nginx 相对 apache 的优势:
轻量级,一样起web 服务,比apache 占用更少的内存及资源
抗并发,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能
高度模块化的设计,编写模块相对简单
社区活跃,各类高性能模块出品迅速啊
apache 相对nginx 的优势:
rewrite ,比nginx 的rewrite 强大
模块超多,基本想到的均可以找到
少bug ,nginx 的bug 相对较多
超稳定
存在就是理由,通常来讲,须要性能的web 服务,用nginx 。若是不须要性能只求稳定,那就apache 吧。后者的各类功能模块实现得比前者,例如ssl 的模块就比前者好,可配置项多。
这里要注意一点,epoll(freebsd 上是 kqueue )网络IO 模型是nginx 处理性能高的根本理由,但并非全部的状况下都是epoll 大获全胜的,若是自己提供静态服务的就只有寥寥几个文件,apache 的select 模型或许比epoll 更高性能。固然,这只是根据网络IO 模型的原理做的一个假设,真正的应用仍是须要实测了再说的。
一、做为 Web 服务器:相比 Apache,Nginx 使用更少的资源,支持更多的并发链接,体现更高的效率,这点使 Nginx 尤为受到虚拟主机提供商的欢迎。在高链接并发的状况下,Nginx是Apache服务器不错的替代品: Nginx在美国是作虚拟主机生意的老板们常常选择的软件平台之一. 可以支持高达 50000 个并发链接数的响应, 感谢Nginx为咱们选择了 epoll and kqueue 做为开发模型.
Nginx做为负载均衡服务器: Nginx 既能够在内部直接支持 Rails 和 PHP 程序对外进行服务, 也能够支持做为 HTTP代理 服务器对外进行服务. Nginx采用C进行编写, 不管是系统资源开销仍是CPU使用效率都比 Perlbal 要好不少.
二、Nginx 配置简洁, Apache 复杂 ,Nginx 启动特别容易, 而且几乎能够作到7*24不间断运行,即便运行数个月也不须要从新启动. 你还可以不间断服务的状况下进行软件版本的升级 . Nginx 静态处理性能比 Apache 高 3倍以上 ,Apache 对 PHP 支持比较简单,Nginx 须要配合其余后端来使用 ,Apache 的组件比 Nginx 多.
三、最核心的区别在于apache是同步多进程模型,一个链接对应一个进程;nginx是异步的,多个链接(万级别)能够对应一个进程 .
四、nginx的优点是处理静态请求,cpu内存使用率低,apache适合处理动态请求,因此如今通常前端用nginx做为反向代理抗住压力,apache做为后端处理动态请求
1七、用PHP写出一个安全的用户登陆系统须要注意哪些方面
一、密码要使用MD5(密码+字符串)进行加密
二、登陆表单的名称不要跟数据库字段同样,以避免暴露表字段.
三、要使用验证码验证登录,以防止暴力破解
四、登录后台处理代码数据库部分可使用预处理,作好过滤,防止sql注入
1八、Composer是什么,怎么应用?
Composer 是 PHP5.3以上的一个依赖管理工具。它容许你申明项目所依赖的代码库,它会在你的项目中为你安装他们。Composer 不是一个包管理器。是的,它涉及 "packages" 和 "libraries",但它在每一个项目的基础上进行管理,在你项目的某个目录中(例如 vendor)进行安装。默认状况下它不会在全局安装任何东西。所以,这仅仅是一个依赖管理。
1九、类的多继承怎么实现?
一:traits实现多继承:
PHP 5.4.0 开始,PHP 实现了代码复用的一个方法,称为 traits。
Traits 是PHP中一种相似多继承的方法。Trait 为了减小单继承语言的限制,使开发人员可以自由地在不一样层次结构内独立的类中复用方法集。Traits 和类组合的语义是定义了一种方式来减小复杂性,避免传统多继承和混入类相关的典型问题。
Trait 和一个类类似,但仅仅旨在用细粒度和一致的方式来组合功能。Trait 不能经过它自身来实例化。它为传统继承增长了水平特性的组合;
二:接口实现多继承:
在PHP的接口中,接口能够继承接口。虽然PHP类只能继承一个父类(单继承),可是接口和类不一样,接口能够实现多继承,能够继承一个或者多个接口。固然接口的继承也是使用extends关键字,要多个继承的话只要用逗号把继承的接口隔开便可。
须要注意的是当你接口继承其它接口时候,直接继承父接口的静态常量属性和抽象方法,因此类实现接口时必须实现全部相关的抽象方法。
20、include与require的区别
· require是无条件包含,也就是若是一个流程里加入require,不管条件成立与否都会先执行require,当文件不存在或者没法打开的时候,会提示错误,而且会终止程序执行
· include有返回值,而require没有(可能由于如此require的速度比include快),若是被包含的文件不存在的化,那么会提示一个错误,可是程序会继续执行下去
注意:包含文件不存在或者语法错误的时候require是致命的,而include不是
require_once表示了只包含一次,避免了重复包含
2一、说说什么是面向对象?什么是面向过程?面向过程与面向对象的区别
“面向过程”是一种以过程为中心的编程思想。
就是分析出解决问题所须要的步骤,而后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就能够了。
“面向对象”(Object Oriented,简称OO)是一种以事物为中心的编程思想。
就是把构成问题事务分解成各个对象,创建对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。
面向过程的优势:流程化使得编程任务明确,在开发以前基本考虑了实现方式和最终结果;效率高,面向过程强调代码的胆小精悍,善于结合数据结构来开发高效率的程序。。流程明确,具体步骤清楚,便于节点分析。缺点是:须要深刻的思考,耗费精力,代码重用性低,扩展能力差,维护起来难度比较高,对复杂业务来讲,面向对象的模块话难度较高,耦合度也比较高。
面向对象的优势:结构清晰,程序便于模块化,结构化,抽象化,更加符合人类的思惟方式;封装性,将事务高度抽象,从而便于流程中的行为分析,也便于操做和自省; 容易扩展,代码重用率高,可继承,可覆盖;实现简单,可有效地减小程序的维护工做量,软件开发效率高。面向对象的缺点:效率低,面向对象在面向过程的基础上高度抽象,从而和代码底层的直接交互很是少机会,从而不适合底层开发和游戏甚至多媒体开发;复杂性,对于事务开发而言,事务自己是面向过程的,过分的封装致使事务自己的复杂性提升。
2二、AJAX请求和普通HTTP请求区别
二者本质区别:
AJAX通xmlHttpRequest象请求服务器服务器接受请求返数据实现刷新交互
普通http请求通httpRequest象请求服务器接受请求返数据须要页面刷新
AJAX请求头会多一个x-requested-with参数,值为XMLHttpRequest
String requestType = request.getHeader("X-Requested-With");
2三、Thinkphp 5 新特性
1.支持 Composer,PHPunit(中大型项目必备的依赖管理和测试框架)
2.使用同 yii2 同样的类惰性加载(性能暴升)
3.大量参考了 Laravel 风格,还保证了以往 ThinkPHP 简单易学(优雅而且易学)
4.引入了 php5.4 特性 Traits 拓展(多重继承,之前的关联模型,视图模型混合一块儿用)
5.终于遵循 PSR 规范了!终于遵循 PSR 规范了!终于遵循 PSR 规范了!
符合PSR-4的自动加载规范(专门写给CI党:PSR-4 是命名空间的自动加载规范哦)
6.之前单字母全局函数改为了别名函数(M,D,S,C等,除了易学好用还不会污染全局)
7.兼容 php 7,局部兼容 hhvm
2四、HTTP状态中302、403、 500代码含义?
300重定向、403服务器拒绝访问、500服务器内部错误。
2五、请问get和post方法有什么区别?
咱们再网页上填写的表单信息均可以经过这两个方法将数据传递到服务器上,当咱们使用get方法是,全部的信息都会出如今url地址中,而且使用get方法最多只能传递1024个字符,因此若是在传输量小或者安全性不那么重要的状况下可使用get方法。说到post方法,最多能够传输2mb字节的数据,并且能够根据须要调节。
2六、php中获取图像尺寸大小的方法是什么?
getimagesize () 获取图片的尺寸
imagesx () 获取图片的宽度
imagesy () 获取图片的高度
2七、如何用php和mysql上传视频?
咱们能够在数据库中存放视频的地址,而不须要将真正的视频数据存在数据库中。能够将视频数据存放在服务器的指定文件夹下,上传的默认大小是2mb,可是咱们也能够在php.ini文件中修改max_file size选项来改变
2八、php中的错误类型有哪些?
php中遇到的错误类型大体有3类。
提示:这都是一些很是正常的信息,而非重大的错误,有些甚至不会展现给用户。好比访问不存在的变量。
警告:这是有点严重的错误,将会把警告信息展现给用户,但不会影响代码的输出,好比包含一些不存在的文件。
错误:这是真正的严重错误,好比访问不存在的php类
2九、session机制与cookie机制?session与cookie区别?
30、引用传值和非引用传值的区别,何时该用引用传值?何时该用非引用传值?
答:按值传递:函数范围内对值的改变在函数外都会被忽略。
按引用传递:函数范围内对值的任何改变在函数外也将反应出这些修改。
按值传递时,php必须复制值,若是操做的是大型的对象和字符串,这将是一个代价很大的操做。按引用传递不须要复制值,所以对性能的提升有好处。
3一、写几个魔术方法并说明做用?
__call()当调用不存在的方法时会自动调用的方法
__autoload()在实例化一个还没有被定义的类是会自动调用次方法来加载类文件
__set()当给未定义的变量赋值时会自动调用的方法
__get()当获取未定义变量的值时会自动调用的方法
__construct()构造方法,实例化类时自动调用的方法
__destroy()销毁对象时自动调用的方法
__unset()当对一个未定义变量调用unset()时自动调用的方法
__isset()当对一个未定义变量调用isset()方法时自动调用的方法
__clone()克隆一个对象
__tostring()当输出一个对象时自动调用的方法
3二、$_REQUEST、$_POST、$_GET、$_COOKIE、$_SESSION、$_FILE的意思是什么?
答:它们都是PHP预约义变量。
$_REQUEST用来获取post或get方式提交的值
$_POST用来获取post方式提交的值
$_GET用来获取get方式提交的值
$_COOKIE用来获取cookie存储的值
$_SESSION用来获取session存储的值
$_FILE用来获取上传文件表单的值
3三、++i和i++哪个效率高,为何?
++i效率比i++的效率更高,由于++i少了一个返回i的过程。
3四、用过哪些版本控制器?说说SVN与GIT优缺点?
1.SVN优缺点
优势:
1、管理方便,逻辑明确,符合通常人思惟习惯。
2、易于管理,集中式服务器更能保证安全性。
3、代码一致性很是高。
4、适合开发人数很少的项目开发。
缺点:
1、服务器压力太大,数据库容量暴增。
2、若是不能链接到服务器上,基本上不能够工做,看上面第二步,若是服务器不能链接上,就不能提交,还原,对比等等。
3、不适合开源开发(开发人数很是很是多,可是Google app engine就是用svn的)。可是通常集中式管理的有很是明确的权限管理机制(例如分支访问限制),能够实现分层管理,从而很好的解决开发人数众多的问题。
2.Git优缺点
优势:
1、适合分布式开发,强调个体。
2、公共服务器压力和数据量都不会太大。
3、速度快、灵活。
4、任意两个开发者之间能够很容易的解决冲突。
5、离线工做。
缺点:
1、学习周期相对而言比较长。
2、不符合常规思惟。
3、代码保密性差,一旦开发者把整个库克隆下来就能够彻底公开全部代码和版本信息。
3五、请问php中echo和print有什么区别?
答:这两个看起来很类似,由于它们都是将一些值打印在屏幕上。可是echo和print的本质区别在于:echo用来输出字符串,显示多个值的时候能够用逗号隔开。只支持基本类型,print不只能够打印字符串值,并且能够打印函数的返回值。
先到这里了,会持续更的,但愿对有所须要的同行有所帮助。