php面试题及答案

总结一些php面试题和答案

1、打印时间 2012-2-2 14:32:33时间戳

echo strtotime(date('2012-2-2 14:32:33'));

2、截取目录中的文件名和目录

$str = 'www.baidu.com/aaa/bbb/index.html';
$pos = strrpos($str, '/');
echo substr($str, $pos + 1);
echo substr($str, 0, $pos);
echo basename($str);
echo dirname($str);

3、protect public private interface abstract final static含义

protect 被保护的:本类和子类可以访问
public 公有的:任何类可以访问
private 私有的:只有本类可以访问
interface 接口:只有抽象方法的抽象类
bastract 抽象类:包含抽象方法的类
final 最后的类和方法:不可继承的类和不可重新方法
static 静态方法和熟悉:不需要实例化 类名::方法名

4、从表Login中选出name字段包含admin的前十条结果的sql
select * from login where name like '%admin%' limit 10 order by id

5、解释左连接、右连接、内连接、索引  面试答题是可以用例子来描述
左连接:left join :select a.*,b.* from table1 a left join table2 b on a.uid=b.uid where a.uid=2;
右连接:right join  :select a.*,b.* from table1 a right join table2 b on a.uid=b.uid where a.uid=2;
内连接:inner join:select a.*,b.* from table1 a inner join table2 b on a.uid=b.uid where a.uid=2;
索引:index  
添加索引:alter table user add index in_username(username)

5、字符串转数组,数组转字符串,字符串查找,字符串替换分别是哪些函数?

字符串转数组:explode,数组转字符串:implode,字符串替换:str_replace、preg_replace

6、写一个函数,尽可能高效的从一个url取出扩展名
例如http://www.test.com.cn/abc/de/fg.php取出php或.php*/
$str = 'http://www.test.com.cn/abc/de/fg.php';
function getExt($url) {
    $arr = parse_url($url);
    $file = basename($arr['path']);
    $ext = explode('.', $file);
    return $ext[1];
}
$res = getExt($str);
echo $res;

7、解释mvc
mvc是一种开发模型,可以实现视图层和逻辑层分离
M:model数据模型 对数据库增删改查
V:view 视图层 识图展示
C: contrel 逻辑层 处理业务逻辑

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

(这种问题基本上不属于phper的,这么问的也基本上是小公司,遇到时候可以反问:咱们公司并发是多少、用户多少、咱们公司遇到什么问题了)
1、lvs或nginx负载均衡
2、squid缓存或者nginx web chche缓存
3、web服务器用nginx代替apache(apache同时处理大概3000-4000,nginx大概20000 不过百分之90的公司都用apache)
4、php页面静态化 smarty或者框架
5、使用缓存技术redis memchahe
6、sql语句优化、缓存优化、sql慢查询
7、数据库主从分离
8、数据库分表分区

负载均衡示意图自己画的 如果不准确请指点一二

9、如何防止sql注入
1、表单尽量用post
2、$_SERVER[HTTP_REFERER]判断提交者源头
3、开启addslashed
4、密码设置md5加密
5、sql语句预处理 thinkphp

10、网站防盗链
1、服务器防止:apache nginx做rewrite基于来源做判断组织盗链
2、代码防止:$_SERVER['HTTP_REFERER']

11、用php写出一个安全的用户登录系统需要注意哪些方面
1、post提交后台php程序
2、增加验证码(图片或语音)
3、密码多次登录错误限制登录
4、限制粘贴密码
5、使用动态口令

12、使用过哪些php框架
1、laravel:最流行的php框架,使用最广最热的框架 适合大型企业使用
2、thinkphp:国内流行框架,中文文档社区
3、yii、ci、zend等
4、workerman 高性能即时通讯

13、使用过哪些版本控制器
1、svn subversion版本控制
2、github版本控制

14、SESSION和COOKIE的区别是什么
1、SESSION保存在服务器端 COOKIE保存在客户端 SESSION依赖进行传输 如果COOKIE被禁用了 SESSION将不能继续使用

15、http状态中302、403、500代码含义
302重定向、403服务器拒绝访问、500服务器内部错误

16、linux下建立压缩包、解压缩包的命令
tar czf test.tar.gz test.php
tar xzf test.tar.gz

17、数据库类型 char varchar意思和区别
char的场地固定为设置的长度 varchar为可变长度

18、MyISAM和InnoDB的基本区别
innodb支持事物、存储过程、行级锁定
增删改方面myisam优于innodb 当数据量特别大时 他们相差不大

19、如何让禁用cookie的客户端还可以实现数据共享
修改php.ini中 session.user_trans_sid=1 这样会自动在连接中添加参数sessionid
从而服务器端获取到客户端的sessionid  如果用户没有禁用cookie 那就不会有sessionid参数

20、isset()和empty()区别
isset判断变了是否存在 是否定义
empty判断是否为空 如0 '' null 空数组

21、页面之间传递变量
get post ajax curl cookie session

22、数据表student 字段name class score 
1:对每个班的成绩进行排序
select * from sutdent order by class,score desc 

2:查出每个班及格人数和不及格人数
select class,sum(if(score>=60,1,0)) jige,sum(if(score<60,1,0)) bujige from student grouy by class
3:用 php写连接数据库,执行以上sql、显示结果、判断错误、关闭数据库过程
$con = mysql_connect('localhost', 'user', 'password');
mysql_select_db('test');
$sql = "select class,sum(if(score>=60,1,0)) jige,sum(if(score<60,1,0)) bujige from student grouy by class";
$res = mysql_query($sql);
if($res) {
    while($row = mysql_fetch_assoc($res)) {
        print_r($row);
    }
}
mysql_close($con);

23、出常见的排序算法,并用php实现冒泡排序
 */
$arr = array(54, 67, 9, 33, 98, 12, 19);
for ($i=0; $i < count($arr) - 1; $i++) { 
    for ($j=0; $j < count($arr) - 1; $j++) { 
        if($arr[$j] > $arr[$j+1]) {
            $a = $arr[$j];
            $arr[$j] = $arr[$j+1];
            $arr[$j+1] = $a;
        }
    }
}
print_r($arr);

24、面向对象中接口和抽象类的区别和应用场景
抽象类:含有抽象方法的类
接口:只含有抽象方法的类
一个类可以继承多个接口,只能继承一个抽象类
接口的使用方式通过implements关键字进行,抽象类通过extend继承

25、用面向对象实现A对象继承B和C对象
interface B {
    function b_fun();
}
interface C {
    function c_fun();
}
class A implements B,C {
    function b_fun()
    {
        echo 'b';
    }
    function c_fun()
    {
        echo 'c';
    }
}

26、smarty模板引擎关键字
foreach volist assign display if switch for php 模板继承

27、请写一个函数 实现hello_word转换成HelloWord make_by_id 转换成MakeById

function getStr($str) {
    return str_replace(' ','', ucwords(str_replace('_', ' ', $str)));
}

28、写一个函数将123456789转为1,234,567,890
number_format(1234567890);
function num_fo($str){
    $str = strrev($str);// 字符串翻转
    $arr = str_split($str, 3);
    $str = strrev(join(',', $arr));
    return $str;
}

29、表A id,c1,c2,sex 表B id,c1,c2,age 其中a.id与b.id关联
将b中age>5的记录的c1 c2更新a表中的c1 c2
update A,b set A.ci=b.c1,A.c2=B.c2 where A.id=B.id and B.age>50

30、linux如何实现每天0点重启服务器
crontab -e
00 00 * * * /sbin/init 6

31、通过php函数的方式对目录进行遍历
 

$dir = 'vendor';
function dirList($dir) {
    $arr = scandir($dir);
    foreach ($arr as $key => $value) {
        if($value != '.' && $value != '..') {
            $path = $dir.'/'.$value;
            if(is_dir($path)) {
                dirList($path);
            } else {
                echo "<p>{$path}</p>";
            }
            
        }
    }
}
dirList($dir);

32、显示客户端ip和服务器端ip
客户端:$_SERVER['REMOTE_ADDR']
服务器端:$_SERVER['SERVER_ADDR']


33、手动实现字符串翻转
$str = 'abcdefghig';
$new_str = '';
for ($i=strlen($str)-1; $i >= 0; $i--) { 
    $new_str .= $str[$i];
}
echo $new_str;


34、 判断用户的ip地址是否在192.168.1.100-192.168.1.150
$min = ip2long('192.168.1.100');
$max = ip2long('192.168.1.150');
$ip_num = ip2long('192.168.1.110');
if($ip_num >= $min && $ip_num <= $max) {
    echo '192.168.1.110在';
}

35、将二维数组name的长度进行排序
$arr = array(
    array(
        'id' => 0,
        'name' => 'abc222d'
    ),
    array(
        'id' => 0,
        'name' => 'abcd'
    ),
    array(
        'id' => 0,
        'name' => 'a33333bcd'
    ),
    array(
        'id' => 0,
        'name' => 'ab2cd'
    )
);
foreach ($arr as $key => $value) {
    $arr2[] = strlen($value['name']);
}
array_multisort($arr2, $arr);
var_dump($arr);


36、如何实现不使用第三个变量 交换$a $b的值
$a = '1111';
$b = 'ccccc';
$ar = array($a, $b);
$a = $ar[1];
$b = $ar[0];
echo $a,$b;

37、完成快速排序(不好理解的话 背下来 冒泡排序也一样)
$arr = array(12, 3, 5, 43, 55, 21, 99);
function quick($arr)
{
    $left = array();
    $right = array();
    if(count($arr) <= 1) {
        return $arr;
    }
    for ($i=1; $i < count($arr); $i++) { 
        if($arr[0] > $arr[$i]) {
            $left[] = $arr[$i];
        } else {
            $right[] = $arr[$i];
        }
    }
    $left1 = quick($left);
    $right1 = quick($right);
    return array_merge($left1, array($arr[0]), $right1);
}
var_dump(quick($arr));


38、设置文件上传大小
upload_max_filesize
post_max_size

39、多台web服务器如何共享session
可以将session文件保存在memecached中 或者 redis中

后续会不定更。。。有问题欢迎反馈

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值