1、写一段代码,实现PHP内部的通知机制,如当一个类的属性发生变化时,另外一个类就可以收到通知。
<?php
/**
* 观察者模式
* @author: Mac
* @date: 2012/02/22
*/
class Paper{ /* 主题 */
private $_observers = array();
public function register($sub){ /* 注册观察者 */
$this->_observers[] = $sub;
}
public function trigger(){ /* 外部统一访问 */
if(!empty($this->_observers)){
foreach($this->_observers as $observer){
$observer->update();
}
}
}
}
/**
* 观察者要实现的接口
*/
interface Observerable{
public function update();
}
class Subscriber implements Observerable{
public function update(){
echo "Callback\n";
}
}
下面是测试代码
/* 测试 */
$paper = new Paper();
$paper->register(new Subscriber());
//$paper->register(new Subscriber1());
//$paper->register(new Subscriber2());
$paper->trigger();
2、 以下代码会输出结果吗?如果能请说明原因,如果不能请尝试修改使其能输出结果
class CateData {
private $_data=array();
public function __construct($data){
$this->_data=$data;
}
}
$data = array(
'a'=>'分类1',
'b'=>'分类2',
'c'=>'分类3',
'd'=>'分类4',
);
$cate=new CateData($data);
foreach($cate as $key => $val){
echo "$key : ". $val;
}
不会
可修改为
$cate=new CateData($data);
foreach($cate as $key => $val){
echo "$key : ". $val;
3、看代码回答问题
$a = 1;
function func($a){
echo $a;
$a = 100;
}
func($a);
echo $a;
class A{
public $a = 10;
}
$obj = new A();
func($obj->a);
echo $obj->a;
请说出以上代码输出的结果,详细说明两次调用的差异
111010;
4、如何解决或降低缓存服务的单点故障导致数据库的流量井喷
解决单点故障的最好方法就是做数据库服务器集群,同时让数据库做好主从备份保证数据完整性,以及适当数据库冗余,当一台缓存服务出现故障,从服务器通过检测心跳可快速提供服务,保证服务的不间断;再加上MySQL Proxy实现负载均衡、读写分离等功能,在使用主从复制的基础上,再使用垂直切分及水平切分;或者不使用主从复制,完全使用垂直切分加上水平切分再加上类似Memcached的内存缓存系统可以解决问题。
5、请用PHP实现一个双向链表,并提供基本的增删改查功能
<?php
class link
{
public $preLink = NULL; //前指针
public $number; //排名
public $name; //名字
public $nextLink = NULL; //后指针
//构造函数,初始化值
public function __construct($number= '', $name = '')
{
$this->number = $number;
$this->name = $name;
}
//增加数据
static public function addDom($head, $data)
{
$obj = $head;
$isExist = FALSE;
if(NULL == $obj->nextLink)
{
$obj->nextLink = $data;
$data->preLink = $head;
}
//找到添加的位置
while(NULL != $obj->nextLink)
{
if($obj->nextLink->number > $data->number)
{
break;
}
else if($obj->nextLink->number == $data->number)
{
$isExist = TRUE;
echo "<br>不能添加相同的编号";
}
$obj = $obj->nextLink;
}
if(!$isExist)
{
if(NULL !=$obj->nextLink)
{
$data->nextLink =$obj->nextLink;
}
$data->preLink = $obj;
if(NULL !=$obj->nextLink)
{
$data->nextLink->preLink = $data;
}
$obj->nextLink = $data;
}
}
//输出链表数据
static public function showDom($head)
{
$obj = $head;
while(NULL != $obj->nextLink)
{
echo "<br>编号:".$obj->nextLink->number."名字:".$obj->nextLink->name;
$obj = $obj->nextLink;
}
}
static public function delDom($head, $num)
{
$obj = $head;
$isFind = FALSE;
while(NULL != $obj)
{
if($obj->number == $num)
{
$isFind = TRUE;
break;
}
$obj = $obj->nextLink;
}
if($isFind)
{
if(NULL !=$obj->nextLink)
{
$obj->preLink->nextLink = $obj->nextLink;
echo '<br/>删除的号码是'.$obj->number;
}
else
{
echo "<br>没有找到目标";
}
}
}
static public function updateDom($head, $num, $name)
{
$obj = $head;
while(NULL != $obj)
{
if($obj->number == $num)
{
$obj->name = $name;
echo "<br/>改变号码{$obj->number}的结果:".$obj->name;
break;
}
$obj = $obj->nextLink;
}
}
}
$head = new link();
$one = new link(1,'oooooooo');
$two = new link(2,'wwwwwwww');
$three = new link(3,'eeeeeeee');
link::addDom($head,$one);
link::addDom($head,$two);
link::addDom($head,$three);
link::showDom($head);
link::delDom($head, 2);
link::showDom($head);
link::updateDom($head,3, 'kkkkkk');
link::showDom($head);
6、设计一个数据库表,实现评论楼盖楼效果,并写出sql语句
a、写出建表语句
create table comment
(
`id` int(10) unsigned not null auto_increment primary key,
// 通过把id逗号连接确定父级关系 1,3,5
`path` varchar(100) not null,
'deepth' tinyint(3) not null,
`comment_text` text not null,
`time` int(10) not null,
) engine=innodb defalut charset=utf8;
b、查询一个评论的所有子评论
select * from commet where path regexp (该父评论的path + "," + 父评论的id + ",");
c、写出每次新增和删除的sql语句
insert into comment (父评论的path + 父评论的 id, 父评论的deepth + 1 , '评论内容' , now());
delete from coment where id = 要删除的id
d、写出计算层级深度的sql语句
select deepth from comment where id = 要计算的id
7、美图APP有上亿用户使用,为了深刻挖掘用户需求,需要设计一个日志收集系统,用于收集用户日常使用情况,请用你知道的知识设计一套这样的日志收集系统。
假设,用户每次操作、点击美图APP都将发起请求。
请给出系统架构设计图,数据库存储方式,需要的机器量,以及能承载的QPS,尽可能详细的描述此系统中的难点、解决方案。
参考我的segmentfault问题:https://segmentfault.com/q/1010000013834130