基础

2.执行程序段将输出

<?php
    //参考手册》语言参考》运算符》算术运算符》%为取模运算,输出0
    echo 8%(-2)."<br />";
    //取模 $a % $b 在 $a 为负值时的结果也是负值。输出-2
    echo ((-8)%3)."<br />";
    //输出2
    echo (8%(-3))."<br />";
?>

3.写一个函数,能够遍历一个文件夹下的所有文件和子文件夹。

<?php
    function my_scandir($dir)
    {
        $files=array();
        if(is_dir($dir))
        {
            if($handle=opendir($dir))
            {
                while(($file=readdir($handle))!==false)
                {
                    if($file!="." && $file!="..")
                    {
                        if(is_dir($dir."/".$file))
                        {
                            $files[$file]=my_scandir($dir."/".$file);
                        }
                        else
                        {
                            $files[]=$dir."/".$file;
                        }
                    }
                }
                closedir($handle);
                return $files;
            }
        }
    }
    print_r(my_scandir("D:Program FilesInternet ExplorerMUI"));
?>

6 .请举例说明在你的开发过程中用什么方法来加快页面的加载速度

答:要用到服务器资源时才打开,及时关闭服务器资源,数据库添加索引,页面可生成静态,图片等大文件单独服务器。使用代码优化工具

7、HTTP Keep-Alive的作用

作用:Keep-Alive:使客户端到服务器端的连接持续有效,当出现对服务器的后继请求时,Keep-Alive功能避免了建立或者重新建立连接。Web服务器,基本上都支持HTTP Keep-Alive。

缺点:对于提供静态内容的网站来说,这个功能通常很有用。但是,对于负担较重的网站来说,虽然为客户保留打开的连 接有一定的好处,但它同样影响了性能,因为在处理暂停期间,本来可以释放的资源仍旧被占用。当Web服务器和应用服务器在同一台机器上运行时,Keep- Alive功能对资源利用的影响尤其突出。

解决:Keep-Alive: timeout=5, max=100timeout:过期时间5秒(对应httpd.conf里的参数是:KeepAliveTimeout),max是最多一百次请求,强制断掉连接。就是在timeout时间内又有新的连接过来,同时max会自动减1,直到为0,强制断掉。

其他

1.PHP中几个输出函数echo,print(),print_r(),sprintf()区别

printf:是函数,把文字格式化以后输出(参看C语言)

sprintf:是函数,跟printf相似,但不打印,而是返回格式化后的文字(该函数把格式化的字符串写写入一个变量中,而不是输出来),其 他的与printf一样。

例如:

1 $str = "Hello";    
2 $number = 123; 
3 $txt = sprintf("%s world. Day number %u",$str,$number);
4 //输出: Hello world. Day number 123

2.不用新变量直接交换现有两个变量的值

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

借助数组

$a = array($a,$b);
$b = $a[0];
$a = $a[1];

3.写个函数来解决多线程同时读写一个文件的问题。

<?php
     $fp = fopen("/tmp/lock.txt","w+");
     if(flock($fp, LOCK_EX)){// 进行排它型锁定
         fwrite($fp,"Write something here\n");
         flock($fp, LOCK_UN);// 释放锁定
     }else{
         echo "Couldn't lock the file !";
     }
     fclose($fp);
?>

3.PHP缓存技术有哪些? tp是局部还是完全缓存?

全页面静态化缓存,也就是将页面全部生成html静态页面,用户访问时直接访问的静态页面,而不会去走php服务器解析的流程
页面部分缓存,将一个页面中不经常变的部分进行静态缓存,而经常变化的块不缓存,最后组装在一起显示
数据缓存,通过一个id进行请求的数据,将数据缓存到一个php文件中,id和文件是对应的,下次通过这个id进行请求时 直接读php文件
查询缓存,和数据缓存差不多,根据查询语句进行缓存;
常用的缓存技术有:redis和memcache个人认为tp应该是全局缓存 因为:tp缓存实在本地生成一个php文件来存储数据库中

4.PHP猴子选大王---最优解决算法:一群猴子排成一圈,按1,2,…,n依次编号。
然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,在把它踢出去…,如此不停的进行下去,
直到最后只剩下一只猴子为止,那只猴子就叫做大王。
要求编程模拟此过程,输入m、n, 输出最后那个大王的编号。


5.isset() 、empty()与is_null的区别

当变量未定义时,is_null() 和“参数本身”是不允许作为参数判断的,会报Notice警告错误;
empty , isset首先都会检查变量是否存在,然后对变量值进行检测。而is_null 和 “参数本身”只是直接检查变量值,是否为null,因此如果变量未定义就会出现错误!

isset():仅当null和未定义,返回false;

empty():""、0、"0"、NULL、FALSE、array(),未定义,均返回true;
is_null():仅判断是否为null,未定义报警告;

6.现有一个多维数组,请编写一段代码按照数组当中age进行升序排序,重新组成一个新的数组。

    $person = array(
        array('name'=>'c','age'=>26),
        array('name'=>'d','age'=>23),
        array('name'=>'a','age'=>29),
        array('name'=>'b','age'=>27),
    );
    答案:不唯一
    方法之一(其一冒泡排序):
    $count=count($person);
        for($i=0;$i<$count;$i++){
            for($j=0;$j<$count-1;$j++){
                if($person[$j]['age']>$person[$j+1]['age']){
                    $tmp=$person[$j];
                    $person[$j]=$person[$j+1];
                    $person[$j+1]=$tmp;
                }
            }
        }

4.下面代码的输出正确的是?()


$a=array(1=>5,5=>8,22,2=>'8',81);
echo $a[7];
echo $a[6];
echo $a[3];
A:空2281
B:空8122C
C:8122空
D:空空空
答案:C

8.写出下面代码的结果()

<?php    
    $count = 5;
    function get_count(){
        static $count = 0;
        return $count++;
    }
    echo $count;
    ++$count;
    echo get_count();
    echo get_count();
?>
答案:5  0  1
解析: php中的变量作用范围的另一个重要特性就是静态变量(static 变量)。
静态变量仅在局部函数域中存在且只被初始化一次,当程序执行离开此作用域时,其值不会消失,会使用上次执行的结果。
因static $count,所以只在第一次调用get_count的时候对count赋值为0,第二次再进来这个函数,则不会第二次赋值。

6.http中几个常见的状态的状态码含义。
200 请求成功
404 找不到资源
403 没有权限
500 服务器错误
302 重定向

7.请写出自少三种截取文件名后缀的方法或函数(PHP 原生函数和自己实现函数均可)

echo substr(strrchr($file, '.'), 1);

echo substr($file, strrpos($file, '.')+1);

$arr=explode('.', $file);

echo $arr[count($arr)-1];

$arr=explode('.', $file);

echo end($arr);

echo strrev(explode('.', strrev($file))[0]);

echo pathinfo($file)['extension'];

echo pathinfo($file, PATHINFO_EXTENSION);

composer.json中的自动加载映射

目前PSR-0自动加载、PSR-4自动加载、classmap生成和files引入都是被支持的,PSR-4是首推的方法,因为它提供了更大的易用性。



## composer.json中的自动加载映射
目前PSR-0自动加载、PSR-4自动加载、classmap生成和files引入都是被支持的,PSR-4是首推的方法,因为它提供了更大的易用性。

- PSR-4
PSR-4规范了如何指定文件路径从而自动加载类,同时规范了自动加载文件的位置。乍一看这是和PSR-0重复了,实际上,在功能上确实有一部分重复。区别在于,PSR-4的规范比较干净,去除了兼容PHP5.3以前版本的内容。
PSR-4和PSR-0最大的区别是对下划线的定义不同,PSR-4中,在类名中使用下划线是没有特殊含义的,而在PSR-0的规则中,下划线或被转化为目录分隔符

	在PSR-4的键下,你可以定义命名空间和路径的映射关系,当自动加载类如Foo\\Bar\\Baz时,命名空间Foo指向一个名为src/的目录意味着自动加载器将查找名为src/Bar/Baz.php文件并引用它。

	命名空间的前缀必须以\\结尾,以避免类似前缀之间的冲突。在安装和更新期间,PSR-4引用全部组合到一个key=>value数组中,该数组可以在生成的文件vendor/composer/autoload_psr4.php中找到。

例子:

{
"autoload": {
"psr-4": {
"App\": "App/" // 命名空间App映射到目录App
}
}
}


- classmap
classmap引用的所有组合,都会在安装、更新的过程中生成并存储到`vendor/composer/autoload_classmap.php`文件中。
你可以使用classmap生成支持自定义加载的不遵循PSR-4规范的类库,要配置它指向的目录,以便能够准确的搜索到类文件

例子:

{
"autoload": {
"classmap": ["src/", "lib/", "Something.php"]
}
}


- Files
如果你想要明确指定,在每次请求时都要载入某些文件,那么你可以使用files字段加载。通常作为函数库的载入方式。

例子:

{
"autoload": {
"files": ["src/MyLibrary/functions"]
}
}

posted @ 2020-09-22 00:59  caibaotimes  阅读(152)  评论(0编辑  收藏  举报