PHP常见面试题

1、分库分表怎么设计

对于海量数据的数据库,如果是因为表多而数据多,这时候适合使用垂直切分,即把关系紧密(比如同一模块)的表切分出来放在一个server上。
如果表并不多,但每张表的数据非常多,这时候适合水平切分,即把表的数据按某种规则(比如按ID散列)切分到多个数据库(server)上。
更多问题:https://www.cnblogs.com/sunny3096/p/8595783.html

2、如何处理 MySQL 死锁?
死锁是指两个或两个以上的进程在执行中,因争夺资源而造成的一种相互等待的现象,若无外物作用,它们将无法推进下去。解决方式:(1)共享锁。由读操作创建锁,防止在读取数据的过程中,其他事物对数据进行更新操作;其他事物可以并发读取数据。共享锁可以加在表、页、索引建或数据行上。(2)独占锁。对资源的独占锁,一个进程独占锁定了请求的数据源,那么别的进程无法在此数据源上获得任何类型的锁。独占锁一致保持到事物结束。
相关资源网站:https://blog.csdn.net/qq_34107571/article/details/78001309
3、谈谈你对闭包的理解
4、PHP 内存回收机制
1.在5.2版本或之前版本,PHP会根据refcount值来判断是不是垃圾
如果refcount值为0,PHP会当做垃圾释放掉
这种回收机制有缺陷,对于环状引用的变量无法回收
2.在5.3之后版本改进了垃圾回收机制
如果发现一个zval容器中的refcount在增加,说明不是垃圾
如果发现一个zval容器中的refcount在减少,如果减到了0,直接当做垃圾回收
如果发现一个zval容器中的refcount在减少,并没有减到0,PHP会把该值放到缓冲区,当做有可能是垃圾的怀疑对象
当缓冲区达到临界值,PHP会自动调用一个方法取遍历每一个值,如果发现是垃圾就清理
相关资源网站:https://www.cnblogs.com/xinghun/p/5660051.html
5、如何解决 PHP 内存溢出问题

    应当尽可能减少静态变量的使用,在需要数据重用时,可以考虑使用引用(&)。

    数据库操作完成后,要马上关闭连接;

    一个对象使用完,要及时调用析构函数(__destruct())

    用过的变量及时销毁(unset())掉

    可以使用memory_get_usage()函数,获取当前占用内存 根据当前使用的内存来调整程序

    unset()函数只能在变量值占用内存空间超过256字节时才会释放内存空间。(PHP内核的gc垃圾回收机制决定)

    有当指向该变量的所有变量(如引用变量)都被销毁后,才会释放内存

    (PHP变量底层实现是一个_zval_struct结构体,is_ref__gc表示引用计数 is_ref__gc表示是否为引用)

6、数据库优化的方法
7、简述 Laravel 的运行原理
8、Laravel 路由实现原理
9、cookie 和 session 区别,session 保存在服务器的哪里?服务端是如何获取客户端的cookie?
10、服务器集群搭建、负载均衡、反向代理
11、PHP7 和 PHP5 的区别,具体多了哪些新特性?
性能提升了两倍
结合比较运算符 (<=>)
标量类型声明
返回类型声明
try…catch 增加多条件判断,更多 Error 错误可以进行异常处理
匿名类,现在支持通过new class 来实例化一个匿名类,这可以用来替代一些“用后即焚”的完整类定义

12、为什么 PHP7 比 PHP5 性能提升了?
变量存储字节减小,减少内存占用,提升变量操作速度
改善数组结构,数组元素和 hash 映射表被分配在同一块内存里,降低了内存占用、提升了 cpu 缓存命中率
改进了函数的调用机制,通过优化参数传递的环节,减少了一些指令,提高执行效率
13、Redis、Memecached 这两者有什么区别?
Redis 支持更加丰富的数据存储类型,String、Hash、List、Set 和 Sorted Set。Memcached 仅支持简单的 key-value 结构。
Memcached key-value存储比 Redis 采用 hash 结构来做 key-value 存储的内存利用率更高。
Redis 提供了事务的功能,可以保证一系列命令的原子性
Redis 支持数据的持久化,可以将内存中的数据保持在磁盘中
Redis 只使用单核,而 Memcached 可以使用多核,所以平均每一个核上 Redis 在存储小数据时比 Memcached 性能更高。
14、Redis 如何实现持久化?
RDB 持久化,将 redis 在内存中的的状态保存到硬盘中,相当于备份数据库状态。
AOF 持久化(Append-Only-File),AOF 持久化是通过保存 Redis 服务器锁执行的写状态来记录数据库的。相当于备份数据库接收到的命令,所有被写入 AOF 的命令都是以 redis 的协议格式来保存的。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值