面试题

1、请选择以下代码运行的结果: <?php if ('1e3' == '1000') echo 'LOL'; ?>  答案:  (B)

A 无任何输出结果  B   LOL  C 不执行且报错
2、请选出以下代码运行的结果: <?php $a = "aabbzz"; $a++; echo $a; ?>   答案:  (C)

A b B aabbzz  C aabcaa
3,写出一下程序的输出结果:<?php     答案: (C)
$data = ['a','b','c'];
foreach($data as $k=>$v){
    $v = &$data[$k];
}

A $data = ['a','b','c']; B $data = ['b','b','c'];   C $data = ['b','c','c'];

4. 下面的代码,分别在php5.5及以下 和php5.5以上 可以执行吗,
    $arr = [1,23,4,7,8];             答案:(不能在php5.5执行)

5.常用的数组函数和字符串函数
数组函数:
    array --? 声明一个数组

    count -- 计算数组中的单元数目或对象中的属性个数

    array_push()将一个或多个元素插入数组的末尾(入栈)

    array_column()返回输入数组中某个单一列的值;

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

    array_reverse()以相反的顺序返回数组

    array_unique()删除数组中的重复值;

    in_array()检查数组中是否存在指定的值

foreach -- 遍历数组

list -- 遍历数组

explode -- 将字符串转成数组

implode -- 将数组转成一个新字符串

array_merge -- 合并一个或多个数组

is_array -- 检查是否是数组

print_r -- 输出数组

sort -- 数组排序

array_keys -- 返回数组中所有的键名

array_values -- 返回数组中所有的值

key -- 从关联数组中取得键名
字符串函数:
trim()移除字符串两侧的空白字符和其他字符;

substr_replace()把字符串的一部分替换为另一个字符串;

substr_count()计算子串在字符串中出现的次数;

substr()返回字符串的一部分;

strtolower()把字符串转换为小写字母;

strtoupper()把字符串转换为大写字母;

strtr()转换字符串中特定的字符;

strrchr()查找字符串在另一个字符串中最后一次出现;

strstr()查找字符串在另一字符串中的第一次出现(对大小写敏感);

strrev()反转字符串;

strlen()返回字符串的长度;

str_replace()替换字符串中的一些字符(对大小写敏感);

print()输出一个或多个字符串;

explode()把字符串打散为数组;

is_string()检测变量是否是字符串;

strip_tags()从一个字符串中去除HTML标签;

mb_substr()用来截中文与英文的函数

6 .写出一些php魔术方法。

__construct() 实例化类时自动调用。

__destruct() 类对象使用结束时自动调用。

__set() 在给未定义的属性赋值的时候调用。

__get() 调用未定义的属性时候调用。

__isset() 使用isset()或empty()函数时候会调用。

__unset() 使用unset()时候会调用。

__sleep() 使用serialize序列化时候调用。

__wakeup() 使用unserialize反序列化的时候调用。

__call() 调用一个不存在的方法的时候调用。

__callStatic()调用一个不存在的静态方法是调用。

__toString() 把对象转换成字符串的时候会调用。比如 echo。

__invoke() 当尝试把对象当方法调用时调用。

__set_state() 当使用var_export()函数时候调用。接受一个数组参数。

__clone() 当使用clone复制一个对象时候调用。

7.冒泡排序实现
for ($i = 0; $i < count($a) ; $i++) {

    for ($j = $i+1; $j < count($a); $j++) {

        if ($a[$i] > $a[$j]) {
            $tem = $a[$i];
            $a[$i] = $a[$j]; /
            $a[$j] = $tem;
        }
    }        
}

8.mysql  Mysql的两种存储引擎 MyISAM 和Innodb区别

1、MyISAM:
①不支持事务,但是整个操作是原子性的(事务具备四种特性:原子性、一致性、隔离性、持久性)

②不支持外键,支持表锁,每次所住的是整张表

    MyISAM的表锁有读锁和写锁(两个锁都是表级别):

表共享读锁和表独占写锁。在对MyISAM表进行读操作时,不会阻塞其他用户对同一张表的读请求,但是会阻塞其他用户对表的写请求;对其进行写操作时会阻塞对同一表读操作和写操作

MyISAM存储引擎的读锁和写锁是互斥的,读写操作是串行的。那么,一个进程请求某个MyISAM表的读锁,同时另一个进程也请求同一表的写锁,MySQL如何处理呢?答案是写进程先获得锁。不仅如此,即使读请求先到锁等待队列,写请求后到,写锁也会插到读锁请求之前!这是因为MySQL认为写请求一般比读请求要重要。这也正是MyISAM表不太适合于有大量更新操作和查询操作应用的原因,因为,大量的更新操作会造成查询操作很难获得读锁,从而可能永远阻塞。这种情况有时可能会变得非常糟糕!

③一个MyISAM表有三个文件:索引文件,表结构文件,数据文件

④存储表的总行数,执行select count(*) from table时只要简单的读出保存好的行数即可

(myisam存储引擎的表,count(*)速度快的也仅仅是不带where条件的count。这个想想容易理解的,因为你带了where限制条件,原来所以中缓存的表总数能够直接返回用吗?不能用。这个查询引擎也是需要根据where条件去表中扫描数据,进行统计返回的。)

⑤采用非聚集索引,索引文件的数据域存储指向数据文件的指针。辅索引与主索引基本一致,但是辅索引不用保证唯一性。

⑥支持全文索引和空间索引

⑦对于AUTO_INCREMENT类型的字段,在MyISAM表中,可以和其他字段一起建立联合索引。

2、Innodb:

①支持事务,支持事务的四种隔离级别;是一种具有事务(commit)、回滚(rollback)和崩溃修复能力(crash recovery capabilities)的事务安全(transaction-safe (ACID compliant))型表。

②支持行锁和外键约束,因此可以支持写并发

③不存储总行数;也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行。注意的是,当count(*)语句包含 where条件时,两种表的操作是一样的。

④对于AUTO_INCREMENT类型的字段,InnoDB中必须包含只有该字段的索引

⑤DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的删除

⑥一个Innodb表存储在一个文件内(共享表空间,表大小不受操作系统的限制),也可能为多个(设置为独立表空间,表大小受操作系统限制,大小为2G),受操作系统文件大小的限制

⑦主键索引采用聚集索引(索引的数据域存储数据文件本身),辅索引的数据域存储主键的值;因此从辅索引查找数据,需要先通过辅索引找到主键值,再访问主键索引;最好使用自增主键,防止插入数据时,为维持B+树结构,文件的大调整。


10 mysql 那种情况下适合建立索引,哪些情况下不适合

哪些情况需要创建索引

主键自动建立唯一索引
频繁作为查询条件的字段应该创建索引
查询与其它表关联的字段,外键关系建立索引(多表关联查询)
单键、组合索引的选择问题,组合索引性价比更高(mysql自动选择最优)
查询中排序的字段,排序字段若通过索引去访问将大大提高排序速度
查询中统计或者分组字段((分组order by )包含(排序group by))
哪些情况不要创建索引

表记录太少
经常增删改的表或者字段(例如电商项目的用户余额)
Where条件里用不到的字段不创建索引
过滤性不好的不适合建索引(手机号、身份证号之类过滤性好)
?


11, http常见的状态码

100:这个状态码是告诉客户端应该继续发送请求,这个临时响应是用来通知客户端的,部分的请求服务器已经接受,但是客户端应继续发送求请求的剩余部分,如果请求已经完成,就忽略这个响应,而且服务器会在请求完成后向客户发送一个最终的结果

2XX(成功)
200:这个是最常见的http状态码,表示服务器已经成功接受请求,并将返回客户端所请求的最终结果

202:表示服务器已经接受了请求,但是还没有处理,而且这个请求最终会不会处理还不确定

204:服务器成功处理了请求,但没有返回任何实体内容 ,可能会返回新的头部元信息

3XX(重定向)
301:(永久性重定向) 客户端请求的网页已经永久移动到新的位置,当链接发生变化时,返回301代码告诉客户端链接的变化,客户端保存新的链接,并向新的链接发出请求,已返回请求结果

302  Move temporarily:暂时性重定向

304  Not Modified : 从本地缓存读取

4XX:客户端错误
400 Bad Request:表示请求报文中存在语法错误;

401 Unauthorized:未经许可,需要通过HTTP认证;

404:请求失败,客户端请求的资源没有找到或者是不存在

5XX 服务端错误
500:服务器遇到未知的错误,导致无法完成客户端当前的请求。

503:服务器由于临时的服务器过载或者是维护,无法解决当前的请求,以上http状态码是服务器经常返回的状态代码,用户只能通过浏览器的状态了解服务器是否正常运行,一般除了错误的状态码

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值