🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
#### **问题:PHP抽象类与接口的区别** a.接口是通过 interface 关键字来定义的, 抽象类是通过abstract关键字来定义的。 b.对接口的使用方式是通过关键字implements来实现的,而对于抽象类的操作是使用类继承的关键字extends实现的,使用时要特别注意。 c.接口没有数据成员,但是抽象类有数据成员,抽象类可以实现数据的封装。 d.接口没有构造函数,抽象类可以有构造函数。 e.接口中的方法都是public类型,而抽象类中的方法可以使用private、protected或public来修饰。 f.一个类可以同时实现多个接口,但是只能实现一个抽象类。 相同点:抽象方法与接口的函数体内不能写任何东西,连两个大括号都不能写!!!如:function getName();这样就行了 #### **问题:mysql分区,分表,集群等相关设计方案** https://www.jb51.net/article/51803.htm https://rdc.hundsun.com/portal/article/945.html 实现需求: 分区:访问量不大,但是表数据很多的表,可以采取分区的方式 分表:大访问量,并且表数据比较多的表,可以采取分表和分区结合的方式(merge分表方式相对较简单,但要具体情况分析) 分库:分区和分表不够用的情况下,加入分库 实现原理: 分区:数据库优化优先考虑,相对比较简单,数据分成不同的份数。 分表:总表可以看成是一个外壳,包住不同的分表,使用merge分表方式比较简单直观。 分库:使用中间件来做判断使用哪个数据库。 MySQL支持的分区方式有四种: Range分区:连续区间的列值。(较多) List分区:离散值集合中的某个值。(一般) Hash分区:表达式的返回值来进行选择的分区。(较多) Key分区:Key分区只支持计算一列或多列。(一般) 备注: 数据库剥离(数据库本身的)计算功能不代表不要数据的计算功能,因为没有数据的计算功能数据库也就没价值了,那么我们要将数据库的计算功能进行迁移,迁移到程序里面,一般大型系统程序和数据库都是分开部署到不同服务器上,因此程序里处理数据计算就不会影响到数据库所在服务器的性能,就可以让安装数据库的服务器专心服务于存储。 #### **问题:mysql优化方式** 1.数据库缓存,减少访问数据库 2.分区,分表,分库等操作 3.程序和数据库部署在不同的服务器上,减少数据库本身的计算,计算功能主要用程序去实现 4.读写分离 参考: 读写分离:https://blog.csdn.net/cyan_grey/article/details/79528842 #### **问题:memcache,redis,mongodb各自的优缺点和使用场景** 【Memcached 】 Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。 端口(11211) 优点:  一.部分容灾 假设只用一台memcache,如果这台memcache服务器挂掉了,那么请求将不断的冲击数据库,这样有可能搞死数据库,从而引发”雪崩“。如果使用多台memcache服务器,由于memcache使用一致性哈希算法,万一其中一台挂掉了,部分请求还是可以在memcache中命中,为修复系统赢得一些时间。  二.容量问题 一台memcache服务器的容量毕竟有限,可以使用多台memcache服务器,增加缓存容量。  三.均衡请求 使用多台memcache服务器,可以均衡请求,避免所有请求都冲进一台memcache服务器,导致服务器挂掉。 四.利用memcache分布式特性 使用一台memcache服务器,并没有利用memcache的数据分布式特性。 缺点: 1.不能持久化存储 2.存储数据有限制:1M 【大于1M,认为就行分割】(内存碎片) 3.存储数据只能key-value 4.集群数据没有复制和同步机制 【崩溃不会影响程序,会从数据库中取数据】 5.内存回收不能及时  LRU(算法):未使用内存》过期内存》最近最少使用内存   这是惰性删除 应用场景: 1.分布式应该, 2.数据库前段缓存, 3.服务器间数据共享。 【Redis】 redis 端口(6379) (1)是内存型数据库,数据保存在内存中,通过tcp直接存取,优势是读写性能高。 (2)redis是内存型KV数据库(键值存储数据库,其数据按照键值对的形势进行组织、索引、存储),不支持二级索引,支持list,set等多种数据格式。适合存储全局变量,适合读多写少的业务场景。很适合做缓存。 优点: 1.Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。 2.数据可以持久化保持(AOF、快照),写入硬盘。 3.支持灾难恢复,主从复制。主机会自动将数据同步到从机,可以进行读写分离。 4.读写性能优异。 缺点: 1.redis不支持自动容错和恢复功能,主从当机都会导致前端读写失败,需手动前端Ip或者机器重新启动 2.主机宕机,主从数据复制过程中,数据未完全复制到从机。会出现数据不一致。 3.redis较难支持在线扩容,当集群数据达到上限在线扩容变得复杂。 应用场景: 1.配合关系型数据库做高速缓存 2.缓存高频次数据,降低数据库io 3.分布式架构,做session共享 例子:比如微信token每两小时刷新一次,就比较适合用redis存储,读也比较方便; 在线游戏排行榜;计时达到一定时间后显示相关广告;按照用户投票和时间排序,更新新闻; 统计在某段特点时间里有多少特定用户访问了某个特定资源,统计哪些特定用户访问了某篇的文章; 【Mongodb】 mongodb 端口(27017) (1)是文档型的非关系型数据库,使用bson结构。其优势在于查询功能比较强大,能存储海量数据,缺点是比较消耗内存。 (2)一般可以用来存放评论等半结构化数据,支持二级索引。 适合存储json类型数据,不经常变化。 优点: 文档结构的存储方式,能够更便捷的获取数据 内置GridFS,支持大容量的存储 内置Sharding,分片简单 海量数据下,性能优越 支持自动故障恢复(复制集) 缺点: 不支持事务操作 占用空间过大 MongoDB没有如MySQL那样成熟的维护工具 无法进行关联表查询,不适用于关系多的数据 复杂聚合操作通过mapreduce创建,速度慢 模式自由,  自由灵活的文件存储格式带来的数据错误 应用场景: ![](https://img.kancloud.cn/43/90/4390fedea6d51903cf20656ec0005a5f_661x296.png) 参考: https://blog.csdn.net/weiyi_xingdong/article/details/79992032 #### **web开发中各类缓存设计,站点优化方案** 1.本地缓存, 1.1.生成静态页面 1.2.数据缓存,将公用的数据保存在json里面,有改动时,再对json数据进行修改 2.分布式缓存 memcache,redis,mongodb的选择使用 3.客户端缓存 浏览器本地缓存,cookie,localStorage,sessionStorage cookie:http header 里的一个字段,最大存储量4KB,会随着http request发送到后端 localStorage:跟cookie类似,最大存储量5M,数据会永久存储,除非代码或手动删除 sessionStorage:跟cookie类似,最大存储量5M,数据只存在于当前会话,浏览器关闭则清空 参考: https://www.cnblogs.com/siqi/p/5096317.html #### **设计高可用的大型分布式系统架构,包括数据库,以及服务器和数据库的备份方案** 主要靠联机热备份的增量备份,定期安排联机冷备份的全量备份 联机热备份:在选定数据库节点进行热备份时,停止同步,完成备份后再开启同步 联机冷备份:在选定数据库节点进行冷备份时,停止同步,完成备份后再开启同步 #### **问题:PHP魔术方法有哪些,代表什么意思,一般什么场景下使用** https://blog.csdn.net/meimeidi/article/details/53670472 https://blog.csdn.net/weixin_45555414/article/details/100011307 https://segmentfault.com/a/1190000007250604 视频:https://www.imooc.com/video/3652 #### **问题:PHP设计模式有哪些,代表什么意思,一般什么场景下使用** https://blog.csdn.net/jeremy_ke/article/details/89000003 https://www.php.cn/php-weizijiaocheng-389651.html 大型项目的框架设计和数据库集群方案 服务器配置参考:https://www2.zhihu.com/question/27641736 #### **问题:SQL语句怎样将不同记录合并在一起** case ... when ... then ... else ... end 例子: case type when 1 then 1 else 0 end #### **问题:服务器挂了之后怎么补救** 采用负载均衡集群方案解决,将大量的并发请求分担到多个处理节点。由于单个处理节点的故障不影响整个服务,负载均衡集群同时也实现了高可用性。 https://blog.csdn.net/weixin_41440282/article/details/81141609 #### **问题:数据库挂了之后怎么补救** 数据库集群正常运作时采用联机热备份的增量备份,同时定期进行联机冷备份的全量备份 联机热备份:在选定数据库节点进行热备份时(写入即备份?),停止同步,完成备份后再开启同步 联机冷备份:在选定数据库节点进行冷备份时,停止同步,完成备份后再开启同步 #### **PHP的生命周期** SAPI运行PHP都经过下面几个阶段: 1、模块初始化阶段(module init) 2、请求初始化阶段(request init) 3、php脚本执行阶段 4、请求结束阶段(request shutdown) 5、模块关闭阶段(module shutdown) 参考: https://www.cnblogs.com/applelife/p/10511837.html https://www.daixiaorui.com/read/274.html https://www.cnblogs.com/fubuki/p/9695379.html #### **Web安全性** 1.对数据进行处理,防止跨站脚本漏洞XSS 2.如果是网页端,使用session机制的CSRF验证 3.API数据需要签名验证 4.不要滥用session和cookie 对数据进行预处理 #### **new self() 和 new static() 的区别** https://blog.csdn.net/qq_38287952/article/details/82669217 #### **Innodb的储存结构** https://www.cnblogs.com/souyoulang/p/11113652.html https://blog.csdn.net/bohu83/article/details/81086474 #### **如何搭建负载均衡,redis** #### **SSL证书过程中做了什么** #### **解决高并发公用资源的问题,如5个商品,10个用户同时下单购买** #### **用户访问页面,出现502的原因,如果是由于php-fpm的线程不够所引起的,怎么解决** #### **innodb的结构** http://blog.itpub.net/24003562/viewspace-706629/ 【算法篇】 #### **新建数组进行上升排序**