总结
1.php魔术方法列举及使用
2.单例模式
3.二叉树的遍历以及高度的求法
4.304header 头里面的信息
5.负载均衡实现的方式
6.php rpc
7.mysql通过修改配置文件参数来优化
8.locate,find
9.mysql有索引却没有使用的原因
10.mysql强制使用索引
11.php深浅拷贝
浅复制: 使用clone来复制对象,这种复制叫做“浅复制“,被赋值对象的所有变量都还有与原来对象相同的值,而所有的对其他对象的引用都仍然指向原来的对象。
深复制:被复制的对象的所有的变量都含有与原来的对象相同的值,除去那些引用其他对象的变量。
12.static:如果在子类中重写了父类中的static方法、属性,父类就会去访问了子类的static方法
self: 是类内指针,不管子类有没有重写过父类中的方法、属性都指向本类的静态方法、属性
13.php hashtable的底层数据结构
HashTable的底层实现代码如下:
typedef struct _hashtable{
uint nTableSize; // hash Bucket的大小,最小为8
uint nTableMask; //nTableSize - 1, 索引取值的优化
uint nNumofElements // bucket 里面存的总数
ulong nNextFreeElement //下一个数字索引的位置
Bucket *pInternalPointer //当前遍历的指针(foreach比较快的原因)
Bucket *pListHead //整个hashtable的头指针
Bucket *pListTail //整个hashTable的尾指针
Bucket **argBuckets // Buceket 数组,用来存储数据
doctor_func_t pDestructor //删除元素时的回调函数,用于资源的释放
zend_bool persistent //Bucket的内存分配方式,true使用系统的分配函数,false 使用php的内存分配函数
unsigned char nApplyCount //标记当前hash bucket 被递归的次数
zend_bool bApplyProtection
#if ZEND_DEBUG
int inconsistent
#endif
}HashTable
再谈一下 bucket的结构
typedef struct bucket{
ulong h; //对key索引以后的值,数字key不做kash
uint nKeyLength; //key的长度
void *pData;
void *pDataPtr; //指针数据,指向真实数据
struct bucket * pListNext; //整个hash表的下个元素
struct bucket *pListLast; //整个hash表的上个元素
struct bucket *pNext; //本bucket里面,下一个元素
struct bucket *pLast; //本bucket里面的上一个元素
char arKey[1];
}Bucket
14.tcp三次握手
第一次握手:主机A发送位码为syn=1,随机产生seq number=10001的数据包到服务器,主机B由SYN=1知道,A要求建立联机,此时状态为SYN_SENT;
第二次握手:主机B收到请求后要确认联机信息,向A发送ack number=(主机A的seq+1),syn=1,ack=1,随机产生seq=20001的包,此时状态由LISTEN变为SYN_RECV;
第三次握手:主机A收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,主机A会再发送ack number=(主机B的seq+1),ack=1,主机B收到后确认seq值与ack=1则连接建立成功,双方状态ESTABLISHED。
15.struct _zval_struct {
zvalue_value value; /* value */
zend_uint refcount__gc; /* variable ref count */
zend_uchar type; /* active type */
zend_uchar is_ref__gc; /* if it is a ref variable */};
typedef struct_zval_struct zval;
16一致性hash
17nginx,apache区别
18反射类
19僵尸进程 孤儿进程
20redis部署
21linux日志切割命令
split
22.mysql执行顺序
23 http和https的区别