php-2025面试题准备

一、TCP、UDP、Unix Socket、HTTP、 WebSoct

1、概念

TCP:面向连接可靠的传输协议,会先建立连接,有确认应答、重传机制主要目的是保证数据的顺序性和完整性,常用于文件传输 FTP、电子邮件、网络浏览等大部分应用。

UDP:是一种无连接的传输层协议,发送数据时不需要建立连接,每个数据包都是独立的,适用于对实时性要求高,允许一定数据丢失的场景,如在线视频、音频流(如直播)、在线游戏、DNS 查询等。

Unix Socket:常用于同一主机上不同进程之间的通信,如数据库服务器和应用服务器之间的通信,系统服务之间的通信等。

HTTP :是一种应用层协议,主要用于 Web 服务器和客户端之间的通信。

WebSocket :是一种全双工通信协议,建立在 TCP 之上,为 Web 应用程序提供了持久连接,允许服务器主动向客户端推送数据。

2、一个完整的 http 请求包含什么

包含请求和响应,请求包含请求行和请求头。

请求行有请求方式如get、post、put、delete,还有请求资源路径和协议版本。

请求头包含:host 请求目标的服务器、user-agent 用户的软件信息浏览器型号等

响应包含协议版本、状态码、content-type 返回的数据格式、数据长度,还有响应的内容如 html/json 等。

二、app接口如何保证数据的安全性和唯一性

使用sign签名,每次请求接口必须携带签名进行验证。

前端工程师 把 app版本号、app类型、手机设备号、手机型号、时间戳等参数放入header ,并把参数做aes加密处理生成sign字符串,每次http请求都携带sign

后端拿到header的参数和sign对参数进行校验,判断sign时间是否过期。

sign 唯一性,sign存入缓存,设置过期时间,保证sign 的唯一性。

如何实现延时队列

答:使用redis的有序集合实现,zadd key 序号 value,然后再zrange key 0 1 

redis 数据持久化

RDB:指定的时间间隔内保存数据快照     

AOF:先把命令追加到操作日志的尾部,保存所有的历史操作

redis 穿透和雪崩

穿透:做报警机制,如果缓存查询数据为空时,发出报警,查出的数据为空依然存入缓存

设计模式

单例模式:自身创建实例,只能创建一次,创建一个私有的__construct 再创建一个私有的类属性,把自身实例给了类属性,判断实例是否存在 如果存在直接返回

工厂模式:创建一个php接口interface,同级目录下创建类实例继承接口implements,创建相同的方法。

mysql的优化方案

MYSQL 八大优化方案
(1)、选取最适用的字段属性
(2)、使用(JOIN)连接来代替子查询(Sub-Queries)
(3)、使用联合(UNION)来代替手动创建的临时表
(4)、事务
(5)、锁定表
(6)、使用外键
(7)、使用索引
(8)、优化的查询语句

msyql的存储引擎,以及各自的区别

InnoDB 是事务型数据库的首选引擎,支持事务安全表(ACID),支持行锁定和外键

MyISAM 拥有较高的插入、查询速度,但不支持事务

索引有哪些,你是如何做索引的?

B+树索引和hash索引,innodb只支持b+shu。联合索引写sql语句时要遵循前缀原则,手机号类型不可重复的字段做唯一索引

说一下你最近做的项目,使用的什么样的架构。

我在上家公司高科集团主要负责集团自己的供应链系统开发,项目框架使用的是TP6,session、cache使用的是redis,后台模板使用的是layui,项目有两大模块:admin和api,整个项目设计分为五层:控制器、model、lib、bus业务层、视图层,控制层主要负责参数的接收验证调用业务层的方法然后返回数据,model层主要负责去数据库查询数据和返回数据、bus业务层主要负责去调用model层的数据,根据业务对数据进行处理后返回给控制层、lib层主要写一些公共的数据处理方法、视图层展示数据表格和后台页面。

我在聚视汇网络科技公司主要负责凌点网的开发,服务器是使用阿里云的ecs,一共六台,3台8核16g的代号和三台2核4g,三台高配置的主要用来跑网站和es集群的搭建,三台低配置的其中一台做了nginx反向代理转发 ,两台安装了mysql数据库。六台服务器均配置了阿里云oss内网域名的反向代理。

项目方面:网站前台主要有搜索模块,素材列表展示,卖家中心、个人中心、买家中心,后台主要有素材审核模块、卖家管理、新闻资讯

说一下你对框架的理解

框架的本质和存在的意义:能够帮助程序员使用更少的代码量更快速的实现业务功能,可以理解为一个专业的工具。

框架的核心:类的自动加载、ioc容器、路由、配置文件的加载、设计模式、控制器、model

类的自动加载

为了解决大量使用incude require php文件,使用到的核心php函数sql_autoload_register,去实现php类库文件的自动加载。

ioc容器

核心是php设计模式,可以理解为把加载的类库全部都存放在这个容器里统一管理,例如tp的facade类就是使用了门面模式,为容器中的类提供了一个静态调用的接口,相比传统的静态方法带来了更多的可测试性和扩展性。

路由

大型公司的路由都是在nginx层去做配置的,框架的路由是为了解决小型公司或者外包的公司的一些痛点,大部分框架的配置文件都是加载的php文件,可以使用yaconf来提升程序的性能。

消息队列

可一利用redis 的有序集合做延时队列

入列:key 时间戳+过期时间 orderId

出列:开启一个work进程,while 循环 sleep 1秒,利用redis 有序集合的范围查询 key 0 当前时间戳  limit 0 1 拿到订单id,去mysql 查询订单状态,如果是待支付,更改状态为取消,如果是已支付,更改订单状态,减库存等操作。

商品抢购

1 独立服务,不能和主业务同一个服务

2 负载均衡

3 抢购页面必须是纯静态话页面,有动态数据例如库存,可以抛送ajax请求 php api,或者nginx + lua + redis

4 库存多台服务器问题解决思路,1 均衡本地服务器的库存,用户抢到后把用户id和数量传递到kafka,然后再去kafka拿信息,创建订单,最后数据入库mysql

5 如何杜绝黑产,薅羊毛,机器抢购,可以在抢购逻辑增加ip和用户限制,还可以根据日志落盘,去时时分析,离线分析,来源分析,如果来源不是通过活动入口进来的就是非法用户。

6 系统评估

rpc

elk

rabbitmq

swoole

队列

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/3251.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Re78 读论文:GPT-4 Technical Report

诸神缄默不语-个人CSDN博文目录 诸神缄默不语的论文阅读笔记和分类 论文全名:GPT-4 Technical Report 官方博客:GPT-4 | OpenAI appendix懒得看了。 文章目录 1. 模型训练过程心得2. scaling law3. 实验结果减少风险 1. 模型训练过程心得 模型结构还…

Linux中安装mysql8,很详细

一、查看系统glibc版本号,下载对应版本的MySQL 1、查看glibc版本号办法 方法一:使用ldd命令 在终端中输入ldd --version命令,然后按下回车键。这个命令会显示系统中安装的glibc版本号。例如,如果输出信息是ldd (GNU libc) 2.31&a…

springboot如何解析 Map 的泛型信息来确定要注入哪些 Bean?

我在学习策略模式的时候, 发现当SpringBoot注入一个Map的时候 ,value泛型为T,则注入后Spring会将实例化后的bean放入value ,key则为注入后bean的名字 Springboot如何解析Map中的Value Spring 通过解析 Map 的泛型信息来确定要注入哪些 Bean…

【NextJS】PostgreSQL 遇上 Prisma ORM

NextJS 数据库 之 遇上Prisma ORM 前言一、环境要求二、概念介绍1、Prisma Schema Language(PSL) 结构描述语言1.1 概念1.2 组成1.2.1 Data Source 数据源1.2.2 Generators 生成器1.2.3 Data Model Definition 数据模型定义字段(数据)类型和约束关系&…

一些常见的Java面试题及其答案

Java基础 1. Java中的基本数据类型有哪些? 答案:Java中的基本数据类型包括整数类型(byte、short、int、long)、浮点类型(float、double)、字符类型(char)和布尔类型(boo…

Vue2+OpenLayers实现折线绘制功能(提供Gitee源码)

目录 一、案例截图 二、安装OpenLayers库 三、代码实现 3.1、初始变量 3.2、画一条折线 3.3、完整代码 四、Gitee源码 一、案例截图 二、安装OpenLayers库 npm install ol 三、代码实现 3.1、初始变量 关键代码: data() {return {map:null,// 定义路径坐…

【狂热算法篇】探秘图论之 Floyd 算法:解锁最短路径的神秘密码(通俗易懂版)

: 羑悻的小杀马特.-CSDN博客羑悻的小杀马特.擅长C/C题海汇总,AI学习,c的不归之路,等方面的知识,羑悻的小杀马特.关注算法,c,c语言,青少年编程领域.https://blog.csdn.net/2401_82648291?spm1010.2135.3001.5343 在本篇文章中,博主将带大家去学习所谓的…

【服务治理中间件】consul介绍和基本原理

目录 一、CAP定理 二、服务注册中心产品比较 三、Consul概述 3.1 什么是Consul 3.2 Consul架构 3.3 Consul的使用场景 3.4 Consul健康检查 四、部署consul集群 4.1 服务器部署规划 4.2 下载解压 4.3 启动consul 五、服务注册到consul 一、CAP定理 CAP定理&#xff…

Linux命令行工具-使用方法

参考资料 Linux网络命令:网络工具socat详解-CSDN博客 arm-linux-gnueabihf、aarch64-linux-gnu等ARM交叉编译GCC的区别_aarch64-elf-gcc aarch64-linux-gnu-CSDN博客 解决Linux内核问题实用技巧之-dev/mem的新玩法-腾讯云开发者社区-腾讯云 热爱学习地派大星-CS…

5-1 创建和打包AXI Interface IP

创建和打包AXI Interface IP的前流程和后流程 step 1 : 选择类型 1: 将当前的工程打包成IP 2: 将当前的BD工程打包成IP 3: 将指定的源码打包成IP 4: 创建一个新的AXI 接口IP 其中3和4是比较常用的,本次…

贪心算法(题1)区间选点

输出 2 #include <iostream> #include<algorithm>using namespace std;const int N 100010 ;int n; struct Range {int l,r;bool operator <(const Range &W)const{return r<W.r;} }range[N];int main() {scanf("%d",&n);for(int i0;i&l…

攻防世界 unseping

开启场景 整体来说是创建了一个case类&#xff0c;然后可接受post传来的ctf的值&#xff0c;并对其进行base64解码以及反序列化。所以我们能控制ctf变量。 先看__wakeup方法&#xff0c;该方法使用waf方法对$arg中的内容进行了防护&#xff0c;过滤掉了| & ; 空格 / cat f…

光伏储能电解水制氢仿真模型Matlab/Simulink

今天更新的内容为光伏储能制氢技术&#xff0c;这个方向我之前在21年就系统研究并发表过相关文章&#xff0c;经过这几年的发展&#xff0c;绿色制氢技术也受到更多高校的注意&#xff0c;本篇博客也是在原先文章的基础上进行更新。 首先让大家熟悉一下绿氢制取技术这个概念&a…

java spring,uName,kValue,前端传值后端接不到

大神链接https://blog.csdn.net/qq_39327650/article/details/134419523本文是参考上述大神链接&#xff0c;自己写这个博客主要是给自己加深印象&#xff0c;大神链接里描述的很清晰&#xff0c;包括源码解析&#xff0c;详细描述参考大神。 由于springboot用的是jackson进行…

XML序列化和反序列化的学习

1、基本介绍 在工作中&#xff0c;经常为了调通上游接口&#xff0c;从而对请求第三方的参数进行XML序列化&#xff0c;这里常使用的方式就是使用JAVA扩展包中的相关注解和类来实现xml的序列化和反序列化。 2、自定义工具类 import javax.xml.bind.JAXBContext; import javax.x…

【时时三省】(C语言基础)柔性数组的使用

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ----CSDN 时时三省 示例&#xff1a; 柔性数组是一次性开辟的一块空间&#xff0c;实际上后面arr的空间是通过预设的方式&#xff0c;给它增加了一块空间 用柔性数组得好处 第一个好处是&#xff1a;方便内存…

RAG 切块Chunk技术总结与自定义分块实现思路

TrustRAG项目地址&#x1f31f;&#xff1a;https://github.com/gomate-community/TrustRAG 可配置的模块化RAG框架 切块简介 在RAG&#xff08;Retrieval-Augmented Generation&#xff09;任务中&#xff0c;Chunk切分是一个关键步骤&#xff0c;尤其是在处理结构复杂的PDF文…

【MySQL】数据库约束和多表查询

目录 1.前言 2.数据库约束 2.1约束类型 2.2?NULL约束 2.3 NUIQUE&#xff1a;唯一约束 2.4?DEFAULT&#xff1a;默认值约束 2.5?PRIMARY KEY&#xff1a;主键约束 2.6 FOREIGN KEY&#xff1a;外键约束 1.7?CHECK约束 3.表的设计? 3.1一对一 3.2一对多 3.3多…

解锁C#语法的无限可能:从基础到进阶的编程之旅

目录 一、C# 基础语法 1.1 数据类型 1.2 变量与常量 1.3 运算符 1.4 控制流语句 二、C# 面向对象编程语法 2.1 类与对象 2.2 封装 2.3 继承 2.4 多态 虚方法 抽象类 接口 三、C# 高级语法 3.1 特性&#xff08;Attribute&#xff09; 预定义特性 自定义特性 3…

【2024年华为OD机试】 (C卷,100分)- 小明找位置(Java JS PythonC/C++)

一、问题描述 题目描述 小朋友出操&#xff0c;按学号从小到大排成一列&#xff1b; 小明来迟了&#xff0c;请你给小明出个主意&#xff0c;让他尽快找到他应该排的位置。 算法复杂度要求不高于nLog(n)&#xff1b;学号为整数类型&#xff0c;队列规模 ≤ 10000&#xff1…