#### **问题: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/
【算法篇】
#### **新建数组进行上升排序**
- 高级工程师或以上级别的行为习惯
- Laravel封装
- 公用类
- 查询
- 项目1
- Laravel CMS
- 无限分级列表
- Laravel
- Laravel简介
- Laravel下载和安装
- 微服务
- Laravel身份认证
- Laravel Passport
- 后台身份验证
- Passport实现前后端登录认证
- Laravel Sanctum
- Laravel辅助
- Unitest
- Laravel常用命令行
- Laravel数据库配置
- Laravel连接数据库模板
- Laravel数据库操作
- Laravel路由
- Laravel操作
- Laravel Blade模板引擎
- Laravel CRUD (create, read, update, delete)
- Laravel实例
- Laravel Eloquent
- belongsTo和belongsToMany案例
- Laravel Package
- Laravel File Manager
- Laravel language
- Laravel查询
- Laravel合并查询
- Laravel统计
- Laravel Voyager Blog System
- Laravel Excel
- Laravel AsgardCms后台
- Laravel基础集合
- Laravel 备份和更新
- Laravel和Codeigniter对比
- Laravel事务处理
- Laravel Redis
- Laravel在Nginx服务器运行时遇到404错误的修正
- Laravel安全
- Laravel JWT
- Laravel Passport
- Laravel加密和解密
- Laravel sent email
- laravel 5.4 eloquent-relationships
- 加入变量文件
- Laravel migrations
- Laravel队列
- Laravel+RabbitMQ
- Laravel OSS
- CMS设计
- 角色权限设计
- Lumen
- Lumen API
- lumen email
- 服务器
- Cloud9使用
- 配置本地服务器多域名
- PHP运行环境部署方式
- 同时运行PHP、Java、Python
- Linux操作
- Composer
- 支付开发
- 微信支付
- 支付宝API
- PayPal开发
- PHP基础
- JavaScript相對PHP開發側重後臺功能的劣勢
- PHP foreach 和 for循环
- PHP检测数组有哪里连续的字符串,以及有多少个
- Session
- 域名判断显示
- 检测登录设备
- PHP foreach循环, 则只循环相同数据一次
- PHP计算搜索过程所用的时间
- PHP文件处理
- Session和cookie案例:登录时的记住我功能
- PHP array判斷
- PHP剔除数组中相同子元素的值
- PHP分页
- PHP "三元运算符"简写
- 防CSRF跨站请求伪造攻击
- PHP Json system
- crul
- PHP爬虫
- 参考
- PHP一和二维数组
- 格式转换
- PHP抓取网页指定内容
- PHP Simple HTML DOM Parser
- PHP提取多维数组指定一列的方法大全
- PHP将第一个字符转为指定内容
- OpenSSL加密解密
- 图片+文字
- PHP理论
- Opcache
- Git
- 安装Git
- Git操作
- Git参考
- 参考笔记
- 程序员接单平台
- 后端PHP面试
- 基础面试
- MySQL训练题
- 经典算法题
- 框架原理
- 高并发
- 微服务架构
- 安全性
- 分布式设计
- 服务器集群
- 模拟题目
- 模拟面试1
- 模拟面试2
- 网络协议
- 英文面试
- 高端PHP面试取胜点
- MVC設計
- 模板引擎
- 算法高效解题
- 算法概述
- leetcode算法题
- 排序
- SQL
- MySQL
- MySQL连接
- Join案例
- MySQL参考文章
- mysql_pdo_select
- mysql_pdo_insert
- MySQL索引
- MySQL事务
- MySQL将数据表字段不重复的值合成一个数组
- MySQL常用语句
- 备份
- MySQL other
- MsSQL
- MsSQL连接
- MySQL PDO连接
- MsSQL安裝
- mssql_pdo_select
- mssql_pdo_insert
- MySQL past
- MySql常用操作
- MySQL基础练习
- MySQL设计
- MySQL案例
- php array转换放入数据表
- PHP Mysql连接数据库并输出数据
- MySQL常用命令
- MySQL导出导入
- PDO
- Excel
- Excel在Drupal的应用
- Excel在Laravel的应用
- PHPOffice/PhpSpreadsheet的基本使用
- 用PHP Simple HTML DOM Parser获取指定列的内容
- PHPOffice/PhpSpreadsheet的案例
- Sublime Text
- elasticsearch
- 后端基础核心:数据的输入和输出
- 发送邮件功能
- PHPMailer发送邮件功能源码
- PHPMailer发送邮件功能源码(详细案例)
- 常用cnd链接
- API
- API ajax+php demo
- PHP Postman API
- API1
- demo-api
- Google API
- google sheet data insert into database
- Laravel API
- Google Analytics
- 其他工具
- 经验
- 编程注意事项
- 开发语言的差别
- 软件产品
- 经验之谈
- test
- Bootstrap 4
- 1.demo page
- CMS設計
- 编辑器
- Other