面试题整理

计算两个日期相差天数

$s = '2019-11-10';
$e = '2019-11-17';

$sd = new DateTime($s);
echo $sd->diff(new DateTime($e))->days;

给出一个多维数组如果里面value是number那么就把它改为0(给到的数组是多维数组)





php实现斐波那契

任意生成一个小于10位的数字在前面加上前导0凑够十位(不允许使用str_pad)

function m_str_pad( $i ) {
    $a = 10 - strlen($i);
    $s = '';
    for ($j=0;$j<$a;$j++) {
        $s .= '0';
    }
    return $s . $i;
}
$n = rand(1,500);
$s = m_str_pad($n);
$e = str_pad($n,'10','0',STR_PAD_LEFT);
echo sprintf("s:%s,e:%s",$s,$e).PHP_EOL;
if ( $s == $e ) {
    echo "Success";
} else {
    echo "Error";
}

给出一个列表[1,2,3,1,1,1,1,1,11,1,1,6,1]里面有个数字出现的概率肯定大于50%请找出该数字

php-fpm是什么

php-fpm是fast-cgi的实现。fast-cgi的工作原理是,首先启动一个master服务,和多个worker,当请求过来的时候将请求交给worker处理,worker不够使用的时候再启动多个work供下面的请求使用。这样做比单纯的php-cgi好处就是避免做一些重复动作,比如重复加载php.ini配置。

在单例中new static和new self有什么区别

首先看下下面的代码

class A {
    private static $instance = null;
    private function __construct()
    {
    }

    public static function getinstance() {
        if ( self::$instance == null ) {
            self::$instance = new self();
        }
        return self::$instance;
    }
}
class B extends A{

    function test() {

    }

}
$s = B::getinstance();
echo get_class($s);

标准懒汉式的单例实现。假如我们B继承了A,如果使用self去初始化构造类将得到A的实例,如果我们需要使用test这个方法可以吧self换成static,这种方式我们称之为延迟绑定。self和static区别,self是指的当前所在的class,static是指上一层的class。

php中的is_writeable函数有bug写个函数来判断文件是否可写

可以利用is_dir函数判断是否是目录,如果是目录我们可以尝试fwrite一个随机文件然后unlink掉,如果是文件,我们可以尝试使用fopen来打开文件句柄。

如何用计算机语言描述mysql字段区别 tinyint(3),int(3)

tinyint占用一个字节,int占用4个字节。那么tinyint取值范围是2^8次方,int是2^32次方,其中括号里面的3不是指只能显示3位数据,而是指ZEROFILL前导o。

Rabbit Mq如何保证消息不丢失

进程之间如何通讯的

内存只有2G如何打开3G的文档

利用fread读取指长度的文档,不能使用file_get_contents该函数是一次性读入内存的,假设php内存限制的比文件小那么将会导致 Fatal error: Allowed memory size错误。

100万个数如何找出前200大的数字

php的数组是引用还是传值

是传值下面是例子,(这里面试官他自己错了)

如下的文档如何使用awk合并成一行

秒杀场景下如何防止超卖

代码参考

实现一个最简单的红包算法

参考这里,最简单的红包实现,计算上限并使用随机数。当然复杂点的有最低金额和最高金额限制成正态分布,那么可以使用一些数学函数去实现。

php中unset后发生了什么

zval的ref_count -1 ,知道为0由GC回收

如何一个class的__construct是private如何访问成员方法

单例模式

http从接受到数据到php运行时经历过什么

js闭包外部能访问吗?能通过外部访问吗?

js崩溃了怎么处理?

Sql有闭包吗?

Sql有数组吗?

如何用Sql表示一个三维的数据?

主键索引和唯一索引在存储的时候有什么不同?

主键索引只能唯一,唯一索引单表中可以又多列记录,而且唯一索引可以为空,主键索引必须有值。

mysql为什么采用b树而不是hash

hash索引需要将数据都加载在内存中数据库比较大的时候比较消耗内存,而且hash索引是O(1)表面上是很快,单实际上我们查询的过程中还有很多范围查询,这时候hash索引就没啥作用了。

mysql为什么采用b+树而不是b树

聚簇索引

Go、php数组是如何实现自动扩容的

Redis中zset实现原理

用Golang手写一个快排

线上有个两千万行的表需要加一个字段您如何解决

  1. mySql 5.6已经支持在线DDL操作并且不锁表。
  2. 可以使用pt-online-schema-change工具。
  3. 新建一张表,然后将老表内容复制过去,中间更改的字段可以读取binlog回放到新表中。

在innodb中假如插入如下数据select 后是什么结果(id为主键,且非自增)

idname
3name3
2name2
5name5
9name9
10name10

结果还是按照2,3,5,9,10顺序展示,因为聚族索引的关系。

此条目发表在笔记分类目录。将固定链接加入收藏夹。

发表评论

电子邮件地址不会被公开。 必填项已用*标注