zoukankan      html  css  js  c++  java
  • 面试题总结(21-40)

    21. 什么是静态变量?

     如果一个函数内定义的变量前使用关键字static来声明,那么该变量就是静态变量。

     一般函数内的变量在函数调用结束后,其存储的数据将被清除,所占的内存空间也被释放。而使用静态变量时,该变量会在函数第一次被调用时被初始化,初始化后该变量也不会被清除,当再次调用该函数时,这个静态变量不再被初始化,而能保存上次函数执行完后的值。可以说静态变量在所有对该函数的调用之间共享。

    22. php中函数传递参数的方式有哪些?两者有什么区别?

     按值传递和按地址传递(或按引用传递)

     (1)按值传递:  待传递的变量,与传递给函数之后的变量是存储在不同的空间中。所以函数体内对该变量值做的修改,不影响原本的变量值。

    (2)按地址传递: 使用 & 符号,表明该参数是以地址的方式传递值。并不会将主程序中的指定数值或目标变量传递给函数,而是把该数值或变量的内存储存区块地址导入函数之中,所以函数体内的该变量和主程序中的该变量在内存中是同一个。函数体做的修改,直接影响到函数体外部的该变量的值。

    23. 什么是递归函数?如何进行递归调用?

     递归函数其实就是调用自身的函数,但是必须满足以下两个条件:

     1)在每一次调用自身时,必须是更接近于最终结果;

     2)必须有一个确定的递归终止条件,不会造成死循环。

     举例说明:

     在实际工作中往往会在遍历文件夹的时候使用。

     如果有个例子是希望获取到目录windows下所有的文件,那么先遍历windows目录,如果发现其中还有文件夹,那么就会调用自身,继续往下寻找,依次类推,

     直到遍历到再也没有文件夹为止,这也就是意味着遍历出来了所有的文件。

    24. 判断一个函数是否存在?

        function_exists( string $function_name )  如果存在,返回true, 不存在则返回 false。

    25. func()和@func()之间有什么区别?

     第二个函数调用失败不会报错,第一个会报错

    26. include()和require()函数的用法和区别是什么?include_once()和require_once()呢?(可扩展)(重点)

     include和require出现错误后的错误级别不一样

     include_once()和require_once()在加载之前要判断是否已经导入

    27. 说出前置++和后置++的区别?

     前置++是先将变量增加1,然后在将值赋值给原来的变量;

     后置++是先返回变量的当前值,然后再将变量的当前值增加1.

    28. 字符串运算符“.”与算术运算符“+”有什么区别?

     当“a”“b”之间使用.时认为是连字符。如果两者间是+的时候php会认为是一次运算。

     1)如果+号两边的字符串是数字组成的,那么会将字符串自动转为整型;

     2)如果+号两边是纯粹的字母,那么会输出0;

     3)如果+号两边的字符串是以数字开头的,那么会截取字符串开头的数字,然后进行运算。

    29. 什么是三目(或三元)运算符?

     根据一个表达式的结果在另两个表达式中选择一个。

     例如: ($a==true) ? 'good':'bad';

    30. 控制流程语句有哪些?

     1:三种程序结构    顺序结构、分支结构、循环结构

     2:分支: if/esle/esleif/     switch/case/default

     3: switch 需要注意的:

      case子句中的常量可以是整型、字符串型常量、 或者常量表达式,不允许是变量。

        同一个switch子句中,case的值不能相同,否则只能取到首次出现case中的值。

     4: 循环  for while   do...while

       do...while 后面必须加入分号结尾。

       while 和 do...while 的区别

     5:break 和 continue 的区别。(重点)

      break可以终止循环。

      continue没有break强大,只能终止本次循环而进入到下一次循环中。

    31. 数组的概念是什么?数组根据索引分为哪两种,如何区分?数组的赋值方式有哪两种?

     数组是一个可以存储一组或一系列数值的变量(复合型变量)

     索引数组(索引值为数字,以0开始)和关联数组(以字符串作为索引值)

     数组的赋值方式有哪两种?

     数组的声明方式主要有两种。

     1.通过array()函数声明数组;

      可以通过key=>value的方式分别定义索引和值,也可以不定义数组的索引下标,只给出数组的元素值。

     2.直接为数组元素赋值,不需要调用array()函数。例如:

      $arr[0] = 1;

      $arr[1] = 2;

     特别注意:

     数组的下标如果是等价于整数的字符串值(但不能以0开头),则会被当作整数对待。

        例如: $array[3] 与  $array['3'] 引用的是相同的一个元素,而 $array['03'] 引用的则就是另外的一个元素了。

    32.数组如何遍历?

     ①for循环

     ②foreach循环  ,这是最常用的遍历方式。用法如下:foreach($arr as $key=>$value){}

     ③list each 和while 配合起来循环

    33. foeach数组的时候指针是如何指向的?list()/each()/while()循环数组的时候指针如何指向的呢?

     当foreach开始执行的时候,数组内部的指针会自动指向第一个单元。因为foreach所操作的是指定数组的拷贝,而不是该数组本身。

     而each()一个数组后,数组指针将停留在数组中的下一个单元或者碰到数组结尾时停留在最后一个单元。如果要再次使用each()遍历数组,必须要使用reset().

     reset()将数组的内部指针倒回到第一个单元并返回第一个数组单元的值。

    34. 如何计算数组长度(或者说计算数组中所有元素的个数)?字符串怎么取长度?

     count() -- 计算数组中的元素个数。

     可以使用count(数组名)或者count(数组名,1),如果有第二个参数,并且是数字1,则表示递归统计数组元素的个数。

     如果第二个参数是数字0,则等同于只有一个参数的count()函数。

     sizeof() -- count() 的别名

     字符串:strlen()、mb_strlen();

    35. 数组中相关的常用函数有哪些?(可扩展)

     1) count --(sizeof别名)— 计算数组中的单元数目或对象中的属性个数   

      例如:int count ( mixed $var [, int $mode ] )  $var 通常都是数组类型,任何其它类型都只有一个单元。  $mode 默认值为0. 1为开启递归地对数组计数

     2) in_array ( mixed $needle , array $haystack [, bool $strict ] ) — 检查数组中是否存在某个值。

      如果 needle 是字符串,则比较是区分大小写的。

      如果第三个参数 strict 的值为 TRUE 则 in_array() 函数还会检查 needle 的类型是否和 haystack 中的相同。

     3) array_merge(array $array1 [, array $array2 [, array $... ]] ) 将一个或多个数组的单元合并起来,一个数组中的值附加在前一个数组的后面。返回作为结果的数组。

      特别注意:如果输入的数组中有相同的字符串键名,则该键名后面的值将覆盖前一个值。然而,如果数组包含数字键名,后面的值将不会覆盖原来的值,而是附加到后面。 

      如果只给了一个数组并且该数组是数字索引的,则键名会以连续方式重新索引

     4) 数组与字符串之间的转换

      (1)explode ( string $separator , string $string [, int $limit ] )  使用一个分隔字符来分隔一个字符串。

      (2)implode ( string $glue , array $arr )  使用一个连接符将数组中的每个单元连接为一个字符串。

      join 为 implode 的别名

     5) sort(array &$array [, int $sort_flags ]) — 对数组按照值排序,当本函数结束时数组单元将被从最低到最高重新安排。

    36. 数组合并函数array_merge()和数组加法运算$arr + $arr2 的区别是什么?

     array_merge()->使用array_merge(),如果是关联数组合并,如果数组的键名相同,那么后面的值将覆盖前者;如果是数字索引数组合并,则不覆盖,而是

     后者附加到前者后面。

     "+"->使用数组加法运算,与array_merge()不同,加法运算不管是关联数组还是数字索引数组,都是将相同键名的的值舍弃,

     也就是只保留首次出现该键名的元素,后来的具有相同键名的元素都不会被加进来。

    37. 字符串定义的时候单引号和双引号有什么区别?(重点)

    一般用单引号或双引号标识一个字符串。单引号串与双引号串,在PHP中的处理是不同的。双引号中的内容可以被解释并被替换,单引号串中的内容则被作为普通字符处理。

    例如:

    $str=6;  

    echo "str is $str ";  

    echo 'str is $str ';  

    输出结果为

    str is 6

    str is $str

    注:单引号中输出的内容是“所见即所得”的,无论有无变量,都被当做普通字符原样输出。

    说明:在定义简单的字符串时,使用单引号是一个更加合适的处理方式。如果使用双引号,php将花费一下时间来处理字符串的转义和变量的解析。因此,建议在定义字符串时,如果没有特别的要求应尽量使用单引号。

    38. echo(),print(),print_r()的区别?(重点)

     (1)echo 是语法,Output one or more strings,没有返回值;

     (2)print 是函数,不能输出数组和对象,Output a string,print有返回值;

     (3)print_r 是函数,可以输出数组。print_r是个比较有意思的函数,可以输出stirng、int、float、array、object等,输出array时会用结构表示,print_r输出成功时返回true;而且print_r可以通过print_r($str,true)来,使print_r不输出而返回print_r处理后的值。此外,对于echo和print,基本以使用echo居多,因为其效率比print要高。

    39. 按照功能分类说说都有哪些字符串处理函数?这些函数的作用是什么?

     A. 字符串输出函数

     (1)echo $a,$b,$c......;  是一个语言结构,而不是一个真正的函数。

     (2)print($a)    本函数输出字符串。若成功则返回 1,失败返回 0

     (3)print_r($a)

     (4)var_dump($a); 能输出类型、长度、值

     B. 去除字符串首尾空格的函数: trim  ltrim  rtrim(别名:chop)   使用第二个参数,还可以去除指定的字符。

     C. 转义字符串函数:addslashes()

     D. 获取字符串长度的函数:strlen()

     E. 截取字符串长度的的函数:substr()

     F. 检索字符串函数: strstr() , strpos()

     G. 替换字符串函数:str_replace()

    40. 请给出以下问题的正确答案?

     1).$arr = array('james', 'tom', 'symfony');请将$arr数组的值用’,’分割并合并成字符串输出?

      echo implode(‘,’,$arr);

     2).$str = ‘jack,james,tom,symfony’; 请将$str用’,’分割,并把分割后的值放到$arr数组中?

      $arr = explode(‘,’,$str);

     3).$arr = array(3,7,2,1,’d’,’abc’); 请将$arr按照从大到小的顺序排序,并保持其键值不变?

      arsort($arr); print_r($arr);

     4).$mail = “gaofei@163.com”; 请将此邮箱的域(163.com)取出来并打印,看最多能写出几种方法?

      echo strstr($mail,'163');

      echo substr($mail,7);

      $arr = explode("@",$mail); echo $arr[1];

     5). 如果有一个字符串,该字符串是“123,234,345,”。请问如何切割掉这个字符串最后一个逗号? echo rtrim($str, ",");

     6). 获取随机数的函数有哪几个?mt_rand() 和 rand()哪个执行速度快?

    对比:

         mt_rand()是更好地随机数生成器,因为它跟rand()相比播下了一个更好地随机数种子;而且性能上比rand()快4倍,mt_getrandmax()所表示的数值范围也更大

  • 相关阅读:
    11.10 安装GMONE3,卸载 UNITY和UNITY 2D
    Ubuntu 11.10 使用Gnome3 快捷键Alt+F2无效的解决办法
    Ioc容器应用浅析EasyJF学习
    JPA批注参考
    MVC(Model/View/Controller)EasyJF学习
    Subversion使用手記
    Eclipse 插件 esourceBundleEditor
    用 Subversion 构建版本控制环境
    TortoiseSVN使用
    自信的真正含义NLP
  • 原文地址:https://www.cnblogs.com/zwt0626/p/9049233.html
Copyright © 2011-2022 走看看