php面试题mysql如果b>a用a_php 经典面试题集

4.写一个的正则表达式

/^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/

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

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

([‘a’,‘b’,‘c’],

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

$str=‘aAbB’;

($str,A);

7.编写一段用最小代价实现将字符串完全反序,e.g.将“”转换成“”.(用前述你最熟悉的语言编写并标注简单注释,不要使用函数,

$s=

$o=

$i=0;

(($s[$i])$s[$i]!=null){

$o=$s[$i++].$o;

}

echo$o;

8.请用递归实现一个阶乘求值算法F(n):n=5;F(n)=5!=5*4*3*2*1=120

functionF($n){

if($n==0){

return1;

}else{

return$n*F($n-1);

}

}var_dump(F(5));

9.将字符长fang-zhi-gang转化为驼峰法的形式:FangZhiGang

//方法一

functionFun($str){

if(isset($str)!empty($str)){

$newStr=

if(strpos($str,-)0){

$strArray=explode(-,$str);

$len=count($strArray);

for($i=0;$i$len;$i++){

$newStr.=ucfirst($strArray[$i]);

}

}

return$newStr;}

}

//方法二functionFun($str){

$arr1=explode(_,$str);

$str=implode(,$arr1);

returnucwords($str);

}

var_dump(Fun(fang-zhi-gang));//FangZhiGang

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

sort($array);//数组升序排序

rsort($array);//数组降序排序

asort($array);//根据值,以升序对关联数组进行排序

ksort($array);//根据建,以升序对关联数组进行排序

arsort($array);//根据值,以降序对关联数组进行排序

krsort($array);//根据键,以降序对关联数组进行排序

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

$_SERVER[REMOTE_ADDR]

$_SERVER[SERVER_ADDR]

12.语句include和require的区别是什么?为避免多次包含同一文件,可用(?)语句代替它们?

require是无条件包含也就是如果一个流程里加入require,无论条件成立与否都会先执行require

include有返回值,而require没有(可能因为如此require的速度比include快)

包含文件不存在或者语法错误的时候require是致命的错误终止执行,include不是

13.session与cookie的区别?

session:储存用户访问的全局唯一变量,存储在服务器上的php指定的目录中的(session_dir)的位置进行的存放

cookie:用来存储连续訪問一个頁面时所使用,是存储在客户端,对于Cookie来说是存储在用户WIN的Temp目录中的。

两者都可通过时间来设置时间长短

14.PHP不使用第三个变量实现交换两个变量的值

//方法一

$a.=$b;

$b=str_replace($b,,$a);

$a=str_replace($b,,$a);

//方法二

list($b,$a)=array($a,$b);

var_dump($a,$b);

15.写一个方法获取文件的扩展名

functionget_extension($file){

//方法一

returnsubstr(strrchr($file,.),1);

//方法二

returnend(explode(.,$file));

}echoget_extension(fangzhigang.png//png

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

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

17.sql语句应该考虑哪些安全性

(1)防止sql注入,对特殊字符进行转义,过滤或者使用预编译sql语句绑定

(2)使用最小权限原则,特别是不要使用root账户,微不同的动作或者操作建立不同的账户

(3)当sql出错时,不要把数据库出错的信息暴露到客户端

18.优化mysql数据库方法

(1)选取适当的字段,打字段设置为NOTNULL,在查询的时候数据库不用比较NULL;

(2)使用链接(join)代替子查询;

(3)使用联合(UNION)查询代替手动创建临时表;

(4)尽量减少使用(LIKE)关键字和通配符

(5)使用事务和外健

19.对于大流量的网站,你会采用什么方法来解决访问量?

(1)首先确认服务器硬件是否满足支持当前的流量;

(2)优化数据库的访问;

(3)禁止外部盗链;

(4)控制大文件下载;

(5)使用不同的主机分流;

(6)使用流量分析统计;

20.mysql_fetch_row()和mysql_fetch_array之间有什么区别?

这两个函数,返回的都是一个数组,区别就是第一个函数返回的数组是只包含值,我们只能$row[0],$row[1],这样以数组下标来读取数据,

而MySQL_fetch_array()返回的数组既包含第一种,也包含键值对的形式,我们可以这样读取数据,(假如数据库的字段是username,passwd):$row[username]$row[passwd]

21.MySQL的几个概念:主键,外键,索引,唯一索引

主键(primarykey)能够唯一标识表中某一行的属性或属性组。一个表只能有一个主键,但可以有多个候选索引。主键常常与外键构成参照完整性约束,防止出现数据不一致。主键可以保证记录的唯一和主键域非空,数据库管理系统对于主键自动生成唯一索引,所以主键也是一个特殊的索引。

外键(foreignkey)是用于建立和加强两个表数据之间的链接的一列或多列。外键约束主要用来维护两个表之间数据的一致性。简言之,表的外键就是另一表的主键,外键将两表联系起来。一般情况下,要删除一张表中的主键必须首先要确保其它表中的没有相同外键(即该表中的主键没有一个外键和它相关联)。

索引(index)是用来快速地寻找那些具有特定值的记录。主要是为了检索的方便,是为了加快访问速度,按一定的规则创建的,一般起到排序作用。所谓唯一性索引,这种索引和前面的“普通索引”基本相同,但有一个区别:索引列的所有值都只能出现一次,即必须唯一。

总结:

主键一定是唯一性索引,唯一性索引并不一定就是主键。

一个表中可以有多个唯一性索引,但只能有一个主键。

主键列不允许空值,而唯一性索引列允许空值。

主键可以被其他字段作外键引用,而索引不能作为外键引用。

22.mysql数据库引擎有哪些?

MyISAM、ISAM、HEAP、InnoDB、BDB、CVS...

23.谈谈你对mysql引擎中的MyISAM与InnoDB的区别理解?

InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定。基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持已经外部键等高级数据库功能。

以下是一些细节和具体实现的差别:

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)和崩溃修复能力(crashrecoverycapabilities)的事务安全(transaction-safe(ACIDcompliant))型表。

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字节的主键(用户不可见),数据是主索引的一部分,附加索引保存的是主索引的值。

9、表的具体行数

MyISAM:保存有表的总行数,如果selectcount(*)fromtable;会直接取出出该值。

InnoDB:没有保存表的总行数,如果使用selectcount(*)fromtable;就会遍历整个表,消耗相当大,但是在加了wehre条件后,myisam和innodb处理的方式都一样。

10、CURD操作

MyISAM:如果执行大量的SELECT,MyISAM是更好的选择。

InnoDB:如果你的数据执行大量的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB表。DELETE从性能上InnoDB更优,但DELETEFROMtable时,InnoDB不会重新建立表,而是一行一行的删除,在innodb上如果要清空保存有大量数据的表,最好使用truncatetable这个命令。

11、外键

MyISAM:不支持

InnoDB:支持

通过上述的分析,基本上可以考虑使用InnoDB来替代MyISAM引擎了,原因是InnoDB自身很多良好的特点,比如事务支持、存储过程、视图、行级锁定等等,在并发很多的情况下,相信InnoDB的表现肯定要比MyISAM强很多。另外,任何一种表都不是万能的,只用恰当的针对业务类型来选择合适的表类型,才能最大的发挥MySQL的性能优势。如果不是很复杂的Web应用,非关键应用,还是可以继续考虑MyISAM的,这个具体情况可以自己斟酌。

24.redis和memache缓存的区别

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值