What really happens when you navigate to a URL

Rt:当你输入url到用户看到网站界面,后面都发生了什么。

参考资料:

https://segmentfault.com/q/1010000000489803

http://igoro.com/archive/what-really-happens-when-you-navigate-to-a-url/

http://blog.csdn.net/wdzxl198/article/details/11265475

发表在 扫盲, 面试题 | 留下评论

2017面试问题整理

1、怎样把一个数组中的空数值单元剔除,不要用foreach

 'foo',
             1 => false,
             2 => -1,
             3 => null,
             4 => ''
          );

print_r(array_filter($entry));
?>

输出:

Array
(
    [0] => foo
    [2] => -1
)

2、怎样查找数组中是否存在一个值,不要用foreach

 'blue', 1 => 'red', 2 => 'green', 3 => 'red', 'obj'=>$obj1, 'type'=>123);

var_dump(array_search('green', $array)); //int(2)
var_dump(array_search('red', $array)); //int(1)
var_dump(array_search($obj1, $array, true)); //string(3) "obj"
var_dump(array_search($obj1, $array)); //string(3) "obj"
var_dump(array_search($obj2, $array)); //bool(false)
var_dump(array_search('123', $array, true)); //bool(false)
var_dump(array_search('123', $array)); //string(4) "type"
?>

3、sort怎么排序的
4、mysql表中有个字段,这个字段是128字符长度,现在要给这个字段加索引,可是我不想把整个字段加索引,那样占用的空间会很大,我想达到的目的是既要加索引,又不占那么大空间
5、快排和冒泡时间复杂度是啥,什么情况下它们的复杂度是一样的
6、数据库事务隔离级别都有啥
7、集群环境下,怎么保证用户session永远落到一台机器上
8、如何保证用户登录唯一性
9、php各版本之间升级的特性、变化都有哪些
10、一个查询可以同时使用多个数据库索引么?
mysql5.0版本(不含)之前只能命中一个索引,但是版本之后是出现了index_merge概念,比如两个字段加了单独索引,会导致两个索引都会查一遍,然后再merge两个索引查到的结果,这样的效率会比较低,建议使用联合索引
11、哪些类型的字段会用到索引

12、mysql常用存储引擎及区别
13、简要说明include和require区别
14、输入一个数值集合,集合内有正数也有负数,集合中的数字为随机乱序而且没有一个任何数字是相同的,找到其中的两个数,使两数的和最接近数组整体平均值的两倍,并写出时间复杂度。
例如:输入:{1,4,7,-6,-3,9}
输出:{1,4}

15、接口和抽象类区别 http://www.ltwen.com/2017/04/05/the-different-of-abstruct-interface/
16、php中怎么保证浮点数的精度
17、找出目录里包含‘csrf’关键字的所有文件
grep -ril ‘csrf’ ./
18、http1.0和1.1版本的区别
19、Oauth工作原理
20、查看进程负载的命令是啥
21、单点登录的原理
22、传值和传引用的区别,传引用的业务场景是啥
23、json_decode($arr, true)和mircotime(true)里面的true有啥区别
24、有这样一个联合索引(a,b,c),请给以下几个sql按效率排序
select * from tbl where a = ? and b = ? and c = ?
select * from tbl where b = ? and c = ? and a = ?
select * from tbl where c = ? and a = ? and b = ?
25、有这样一个sql语句:select * from tbl where a = ? and b = ?,其中a、b均为单独普通索引,请描述一下这样的索引设计
如果说mysql 5.0(不包括)之前版本只能命中一个索引,而之后出现index_merge引擎,可以以两个索引进行查询,再合并
26、索引的设计规则是什么
27、redis支持的数据类型都有啥
string 类似于memcacaed中的k/v操作
hash 有结构化的操作,不需要对像memcached一样二次加工数据
list 双向链表 可用作消息队列
set 集合的概念 场景如用户关注的粉丝
sorted set 有序集合 场景如有权重的消息队列
28、varchar和char的区别是啥
29、innodb和myisam的区别
innodb支持事务 myisam不支持
innodb支持行锁 myisam只支持表锁
innodb支持外键
innodb支持mvcc(多版本并发控制,解决事务隔离下的幻读问题)
30、谈谈你的未来职业发展规划
31、mysql数据库出现性能瓶颈,怎么查、怎么解决
32、网站访问突然特别慢,如果是你该从哪方面定位并解决问题
33、二叉树实现代码
34、最新的mysql、nginx版本是啥 5.7 1.12
35、一个索引最大长度 256字节
36、网站是gbk,ajax乱码问题怎么解决
37、哈希怎么理解
可以理解为一种映射关系,但并不是一一对应的,即A=》B 是唯一的,B=》A并不一定唯一
生活只有很多很多hash的例子如:人=》身份证号,生日=》星座
38、memcached数据分布
39、memcached命中率怎么看
输入stats
cmd_get 总请求数
get_hits 命中数
get_misses 未命中数
40、踩过的php的坑有啥
1、浮点数相加精度问题
41、php的数组用到的主要是什么数据结构
hashtable+双链表
42、关系型数据库三范式
1、表要具有原子性,每个字段不能拆解,关系型数据库都具备
2、满足第一条基础上,每条记录需要有唯一标示字段
3、满足第二条基础上,每个表非关键属性不应出现在其它表字段中
43、PHP处理上传文件信息数组中的文件类型$_FILES['type']由客户端浏览器提供,有可能是黑客伪造的信息,请写一个函数来确保用户上传的图像文件类型真实可靠
其实就是用到了getimagesize函数,传入tmp文件名可以获得图片的mime类型,完整代码为:http://www.ltwen.com/form-upload/
44、设计任务:1、最近总有人骚扰我们的投票模块,需要你来设计一个投票限制的东东
要求如下:
1)要求每个UID(假设在UNIT32内可以表示)10分钟这内只能投5票。
2)我们的用户很踊跃,平均每天要有2000万人左右通过此程序投票。
说明:
1)无需写代码,只需要图跟文字即可。
2)对于关键逻辑,请用图加代码表示出来,这也是对你文字表达能力的一个考验。
3)对你能想到的所有的边界条件列出来,这是对你逻辑思维全面与敏捷性的考验。
4)存储部分,尽你所能吧。如果,你需要一个自己设计的存储层,那么把这个存储层的实现,用文字+图片方式描述清楚,要是设计合理,你会获得华丽的奖分。
45、请写出一条SQL满足一下查询需求(表名:score)
1)筛选出不及格科目的个数大于1的学生
2)同时计算该学生不及格科目的平均分
3)不使用子查询
+—-+——–+———+——-+
| id | name | subject | score |
+—-+——–+———+——-+
| 1 | 张三 | 数学 | 80 |
| 2 | 张三 | 语文 | 53 |
| 3 | 张三 | 英语 | 59 |
| 4 | 李四 | 数学 | 55 |
| 5 | 李四 | 语文 | 56 |
| 6 | 李四 | 语文 | 50 |
| 7 | 王五 | 数学 | 100 |
| 8 | 王五 | 语文 | 90 |
+—-+——–+———+——-+
答案:http://www.ltwen.com/2017/04/15/having/

46、php如何遍历多维数组

http://www.ltwen.com/2017/04/19/read-each-array

47、redis比memcache的优势在哪里
1、redis会把数据存在硬盘上,memcache断电就没有了数据
2、redis支持的数据类型多
48、php内存溢出的情况都有哪些
49、php浮点数精度怎么避免,这种问题如何导致的

http://www.laruence.com/2013/03/26/2884.html

50、请问下面输出结果是啥?
$a = 250;
$b = 40;
$a > $b ? $a = 0 ? 30 : 50 + 1 : $b = 0;
echo $a,$b;//5140
?>
上面这个知识点主要考察的知识点是运算符的优先级,上面涉及到的优先级顺序从大到小依次是:
+ 、 >、 ?:(ternary) 、 =

发表在 面试题 | 评论关闭

抽象类和接口

相同点:

(1) 两者都是抽象类,都不能实例化。
(2) interface 实现类及 abstract class 的子类都必须要实现已经声明的抽象方法。

不同点:

(1) interface 需要实现,要用 implements ,而 abstract class 需要继承,要用 extends 。
(2) 一个类可以实现多个 interface ,但一个类只能继承一个 abstract class 。
(3) interface 强调特定功能的实现,而 abstract class 强调所属关系。
(4) 尽管 interface 实现类及 abstract class 的子类都必须要实现相应的抽象方法,但实现的形式不同。 interface 中的每一个方法都是抽象方法,都只是声明的 (declaration, 没有方法体 ) ,实现类必须要实现。而 abstract class 的子类可以有选择地实现。
这个选择有两点含义: 
a) abstract class 中并非所有的方法都是抽象的,只有那些冠有 abstract 的方法才是抽象的,子类必须实现。那些没有 abstract 的方法,在 abstract class 中必须定义方法体; 
b) abstract class 的子类在继承它时,对非抽象方法既可以直接继承,也可以覆盖;而对抽象方法,可以选择实现,也可以留给其子类来实现,但此类必须也声明为抽象类。既是抽象类,当然也不能实例化。
(5) abstract class 是 interface 与 class 的中介。 abstract class 在 interface 及 class 中起到承上启下的作用。一方面, abstract class 是抽象的,可以声明抽象方法,以规范子类必须实现的功能;另一方面,它又可以定义缺省的方法体,供子类直接使用或覆盖。另外,它还可以定义自己的实例变量,以供子类通过继承来使用。
(6) 接口中的抽象方法前不用也不能加 abstract 关键字,默认隐式就是抽象方法,也不能加 final 关键字来防止抽象方法的继承。而抽象类中抽象方法前则必须加上 abstract 表示显示声明为抽象方法。
(7) 接口中的抽象方法默认是 public 的,也只能是 public 的,不能用 private , protected 修饰符修饰。而抽象类中的抽象方法则可以用 public ,protected 来修饰,但不能用 private 。

interface 的应用场合

(1) 类与类之间需要特定的接口进行协调,而不在乎其如何实现。
(2) 作为能够实现特定功能的标识存在,也可以是什么接口方法都没有的纯粹标识。
(3) 需要将一组类视为单一的类,而调用者只通过接口来与这组类发生联系。
(4) 需要实现特定的多项功能,而这些功能之间可能完全没有任何联系。

abstract class 的应用场合

一句话,在既需要统一的接口,又需要实例变量或缺省的方法的情况下,就可以使用它。最常见的有:
(1) 定义了一组接口,但又不想强迫每个实现类都必须实现所有的接口。可以用 abstract class 定义一组方法体,甚至可以是空方法体,然后由子类选择自己所感兴趣的方法来覆盖。
(2) 某些场合下,只靠纯粹的接口不能满足类与类之间的协调,还必需类中表示状态的变量来区别不同的关系。 abstract 的中介作用可以很好地满足这一点。
(3) 规范了一组相互协调的方法,其中一些方法是共同的,与状态无关的,可以共享的,无需子类分别实现;而另一些方法却需要各个子类根据自己特定的状态来实现特定的功能 。
发表在 php, 涨姿势 | 评论关闭

数据库事务隔离级别

http://blog.csdn.net/jiangwei0910410003/article/details/24960785

发表在 mysql | 留下评论

array_merge和加号有啥区别

4);
$arr2 = array(1,7,5,'a'=>0);
print_r(array_merge($arr1, $arr2));
print_r(($arr1 + $arr2));

结果:

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [a] => 0
    [3] => 1
    [4] => 7
    [5] => 5
)
Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [a] => 4
)
array_merge():
会对相同的字符串键名进行合并,取后一个键名的值为最终结果,对相同的数字键名无效

对于使用“+”合并数组:
会对相同的键名(不区分数字还是字符串)合并,取第一个键名对应的值为最终结果
发表在 php | 留下评论

快速排序(快排)

 $arr[0] ){
			$right[] = $arr[$i];	
		}else{
			$left[] = $arr[$i];
		}
	}
	$left = quickSort($left);
	$right = quickSort($right);
	// return $left + array($arr[0]) + $right; 有时间了可以研究下
	return array_merge( $left, array($arr[0]), $right );
}
发表在 algorithm | 留下评论

冒泡排序

 $arr[$j] ){
				$tmp = $arr[$i];
				$arr[$i] = $arr[$j];
				$arr[$j] = $tmp;
			}
		}	
	}
	return $arr;
}

$arr = array(64,12,51,4,10);
print_r( maopao($arr) );
发表在 algorithm | 留下评论

观察者模式

ConcreteObeserver.php

_name = $name;
    }

    public function update(SubjectInterface $subject) {
        echo
        'update oberserver[', $this->_name, '], state: ' . $subject->getState(), PHP_EOL;
    }

}

ObserverInterface.php


Subject.php

_observers[] = $observer;
    }

    public function detach(ObserverInterface $observer) {
        $this->_observers =
        array_filter($this->_observers, function($is_a) use ($observer) {
            return $observer !== $is_a;
        });

        return true;
    }

    public function notify() {
        foreach($this->_observers as $observer) {
            $observer->update($this);
        }
    }

    public function getState() {
        return $this->_state;
    }

    public function setState($state) {
        $this->_state = $state;

        return $this;
    }

}

SubjectInterface.php


main.php

attach($obj_a);
$subject->attach($obj_b);
$subject->setState(1);
$subject->notify();

echo 'drop A', PHP_EOL;

$subject->detach($obj_a);
$subject->setState(2);
$subject->notify();

unset(
    $subject,
    $obj_b,
    $obj_b
);

参考资料:

http://design-patterns.readthedocs.io/zh_CN/latest/behavioral_patterns/observer.html#id15

发表在 DesignPattern | 留下评论

策略模式

obj = $obj;	
	}
	public function getPrice( $count = 1){
		return $this->obj->exec( $count );
	}
}

$obj = new ExecOrder();
$obj->setObject( new Math() );
echo $obj->getPrice( 1 ) . PHP_EOL;
$obj->setObject( new English() );
echo $obj->getPrice( 2 ) . PHP_EOL;
发表在 DesignPattern, 面试题 | 留下评论

六间房面试

1. PHP
a.读取一个文件,将其Base64编码,每76个字符加一个换行


b.写一个函数,参数为$n,生成一个数组,其元素为1~$n,各元素位置随机排列,不得重复


							
发表在 面试题 | 留下评论