20171203题目列表

Linux

• shell统计日志中单接口访问量

mysql

• Mysql是不支持嵌套事务的,开启了一个事务的情况下,再开启一个事务,会隐式的提交上一个事务。

• mysql事务隔离级别

redis

• redis的key过期机制

• redis的持久化

php

• 写一个算法模拟抽取扑克牌的过程。例如,如果有N张牌,每次抽取一张(等概率的)直到抽完所有的牌,返回抽取的过程。

• 最佳答案:1. 初始随机范围是数组的长度2. 每次都随机出的要抽出的牌然后和最后的那张牌进行交换 (30%)3. 然后随机范围-1 (40%)4. 继续抽取,直到抽取随机范围-1是0为止。 (100%)这是O(n)的算法复杂度。

• foreach, for , while 循环访问数组,哪个效率最高?为什么?(foreach,hash下标)

• php 读取文件的方式有几种? 都有什么区别?(file,fopen,file_get_contents,其余请补充)

1.fseek,在文件指针中定位,可以不是顺序读取,fseek($fh, 1024);//返回前1024字节

2.file,将整个文件读入到一个数组中返回 file()

3.file_get_contents(),以字符串形式获取文件的内容

4.fread—读取文件(可安全用于二进制文件),从文件指针handle读取最多length个字节,返回所读取的字符串, 或者在失败时返回FALSE。

5.fgets,从文件指针中读取一行,从handle指向的文件中读取一行并返回长度最多为length- 1 字节的字符串

6.fgetss,文件指针中读取一行并过滤掉 HTML 标记,从handle指向的文件中大读取length- 1 个字节的字符,并过滤了所有的 HTML 和 PHP 代码。

• PHP empty、isset、is_null的区别(empty会误伤0和空串)

1.$a='',isset($a)返回true,is_null返回false

特殊的NULL值表示一个变量没有值。NULL类型唯一可能的值就是NULL

在下列情况下一个变量被认为是NULL:

1.被赋值为NULL 2.未被赋值 3.被unset

• a=null;a=null;b=NULL a==a==b 和 a===a===b的结果是什么;

• a=″,a=″,a==null 和 is_null($a)结果是什么?

• 一个多维数组,请写一个递归函数输出所有内容并返回数组内元素的总个数(static 变量);

• 删除数组中的元素的方法有哪些?它们的优缺点是什么?(uset,array_splice(自动下标,会重排,uset不会))

1.array_splice—去掉数组中的某一部分并用其它值取代,键名不被保留

2.unset,去掉一个变量,需要知道你想取到的变量是哪个,可以用array_search搜索元素,数组下标不会变化,

3.去除多个元素,取差集,array_diff,array_diff_key,去除多个值相同的元素,先找到同名的键,array_keys($arr,$search_value)

关于去除数组元素有一个非常棒的帖子:https://stackoverflow.com/questions/369602/php-delete-an-element-from-an-array

• PHP中的函数区分大小写吗?(不区分)

• if(){} else if(){} ;if(){} elseif(){} ;if(){} Else (){}哪个对?

php的条件语句有以下几种:

1、if 语句- 如果指定条件为真,则执行代码

2、if...else 语句- 如果条件为 true,则执行代码;如果条件为 false,则执行另一段代码

3、if...elseif....else 语句- 选择若干段代码块之一来执行

4、switch 语句- 语句多个代码块之一来执行

• php 有几个魔术方法,都有什么用?(__constraction,__set,__get,__call,__callStatic, __construct …..)

16个魔术方法(https://segmentfault.com/a/1190000007250604),8个魔术常量

• empty和unset有什么区别

1.empty() 判断一个变量是否被认为是空的,当一个变量并不存在,或者它的值等同于FALSE,那么它会被认为不存在。isset—检测变量是否已设置并且非NULL。

2、当 $id=0 时,用empty() 和 isset() 来检测变量 $id 是否已经配置,两都将返回不同的值—— empty() 认为没有配置,isset() 能够取得 $id 的值

• foo()和@foo()有什么区别

1.foo()会报错误,@foo()隐藏错误。

2.PHP 支持一个错误控制运算符:@。当将其放置在一个 PHP 表达式之前,该表达式可能产生的任何错误信息都被忽略掉。

注意: @ 运算符只对表达式有效。对新手来说一个简单的规则就是:如果能从某处得到值,就能在它前面加上 @ 运算符。

例如,可以把它放在变量,函数和include()调用,常量,等等之前。不能把它放在函数或类的定义之前,也不能用于条件结构例如 if 和 foreach 等。

• php中object和array的相互转化

1.答案:https://blog.longqiuhong.com/archives/123

• 用php写一个singleton

1.实例设置private,构造函数private,外部访问public的方法要设置成静态方法,内存只有一处存放

2.私有化__clone()/__wakeup()方法

• 类的静态属性和静态方法,需要通过什么样的方式去访问?(对象可以访问静态方法,不能访问静态成员?)

参考:https://laravel-china.org/articles/3652/static-static-attribute-and-static-method-call-in-php

(1)、静态属性不需要实例化即可调用。因为静态属性存放的位置是在类里,调用方法为"类名::属性名";

(2)、静态方法不需要实例化即可调用。同上

(3)、静态方法不能调用非静态属性。因为非静态属性需要实例化后,存放在对象里;

(4)、静态方法可以调用非静态方法,使用 self 关键词。php里,一个方法被self:: 后,它就自动转变为静态方法;php日志中会有一条提示,php不赞成这么使用,第一次看到这种类型,看的比较多的是php Fatal、php warning这些,PHP Deprecated:  Non-static method Human::say() should not be called statically in /home/map/lihuiqin/script/tmp/staticFunc.php on line 18

(5)、调用类的静态函数时不会自动调用类的构造函数。

• this ,self和parent的区别是什么?

this是指向对象实例的一个指针,在实例化的时候来确定指向;self是对类本身的一个引用,一般用来指向类中的静态变量;parent是对父类的引用,一般使用parent来调用父类的构造函数。

• 定义常量的方式有几种?都有什么区别? (define和const的区别是什么?)

(1).const用于类成员变量的定义,一经定义,不可修改。define不可用于类成员变量的定义,可用于全局常量。

(2).const可在类中使用,define不能。

(3).const不能在条件语句中定义常量。

(4).const采用一个普通的常量名称,define可以采用表达式作为名称。

(5).const只能接受静态的标量,而define可以采用任何表达式。

(6).const定义的常量时大小写敏感的,而define可通过第三个参数(为true表示大小写不敏感)来指定大小写是否敏感。

• PDO是什么?有什么作用?

PHP DATA OBJECT,数据库访问抽象层,统一各种数据库的访问接口。

PDO是一个“数据库访问抽象层”,作用是统一各种数据库的访问接口,与mysql和mysqli的函数库相比,PDO让跨数据库的使用更具有亲和力;与ADODB和MDB2相比,PDO更高效。目前而言,实现“数据库抽象层”任重而道远,使用PDO这样的“数据库访问抽象层”是一个不错的选择。

PHP与MySQL的连接有三种API接口,分别是:PHP的MySQL扩展 、PHP的mysqli扩展 、PHP数据对象(PDO)

1.mysql扩展是设计开发允许php应用与MySQL数据库交互的早期扩展,针对MySQL4.1.3或者更早版本设计的,但并不支持后期MySQL服务端提供的一些特性。由于太古老,又不安全,所以已被后来的mysqli完全取代;

2.mysqli扩展,我们有时称之为MySQL增强扩展,可以用于使用 MySQL4.1.3或更新版本中新的高级特性。其特点为:面向对象接口 、prepared语句支持、多语句执行支持、事务支持 、增强的调试能力、嵌入式服务支持 、预处理方式完全解决了sql注入的问题。不过其也有缺点,就是只支持mysql数据库。如果你要是不操作其他的数据库,这无疑是最好的选择。

3.PDO是PHP Data Objects的缩写,是PHP应用中的一个数据库抽象层规范。PDO提供了一个统一的API接口可以使得你的PHP应用不去关心具体要连接的数据库服务器系统类型,也就是说,如果你使用PDO的API,可以在任何需要的时候无缝切换数据库服务器,比如从Oracle 到MySQL,仅仅需要修改很少的PHP代码。其功能类似于JDBC、ODBC、DBI之类接口。同样,其也解决了sql注入问题,有很好的安全性。不过他也有缺点,某些多语句执行查询不支持。

• php 与 nginx 和apache之间关系是什么?

nginx和apache都是web服务器,

apache是通过mod_php来解析php,nginx是通过php-fpm(fast-cgi)来解析php

1.CGI是为了保证web server传递过来的数据是标准格式的,方便CGI程序的编写者。CGI就是规定要传哪些数据、以什么样的格式传递给后方处理这个请求的协议。

2.php-cgi只是解释PHP脚本的程序而已,php-cgi只是个CGI程序,他自己本身只能解析请求,返回结果,不会进程管理

3.fastcgi是一个协议,Fastcgi是用来提高CGI程序性能的,php-fpm实现了这个协议

4.PHP-FPM,是一个实现了Fastcgi的程序,被PHP官方收了。php-fpm的管理对象是php-cgi,修改了php.ini配置文件后,php-fpm能够平滑重启,php-fpm对此的处理机制是新的worker用新的配置,已经存在的worker处理完手上的活就可以歇着了,通过这种机制来平滑过度。

• 如何实现php的数组?

hashtable

• include和require有什么异同点,还有哪些函数可以加载外表类库com_load, dotnet_load

1.include()用时加载,require是一开始就加载

你可能感兴趣的:(20171203题目列表)