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

队列

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

浅谈云计算19 | OpenStack管理模块 (上)

OpenStack管理模块(上) 一、操作界面管理架构二、认证管理2.1 定义与作用2.2 认证原理与流程2.2.1 认证机制原理2.2.2 用户认证流程 三、镜像管理3.1 定义与功能3.2 镜像服务架构3.3 工作原理与流程3.3.1 镜像存储原理3.3.2 镜像检索流程 四、计算管理4.…

探索 Transformer²:大语言模型自适应的新突破

目录 一、来源: 论文链接:https://arxiv.org/pdf/2501.06252 代码链接:SakanaAI/self-adaptive-llms 论文发布时间:2025年1月14日 二、论文概述: 图1 Transformer 概述 图2 训练及推理方法概述 图3 基于提示的…

SpringBoot3-整合WebSocket指南

更多SpringBoot3内容请关注我的专栏:《SpringBoot3》 期待您的点赞??收藏评论 SpringBoot3-整合WebSocket指南 1. 什么是WebSocket?2. 环境准备 2.1 项目依赖 3. WebSocket配置 3.1 WebSocket配置类3.2 自定义WebSocket处理器 4. 控制器5. 前端实现 5.1 HTML页面…

技术晋升读书笔记—办事的艺术

作为一名程序员,沟通能力对于我们这一行来说并不是强项。大多数程序员与电脑打交道的时间远远多于与人交流,特别工作一天有可能全程在与电脑打交道,因此沟通技巧的提升往往被忽视。然而,随着职业发展的推进,尤其在国内…

警惕IDEA 2024版重大Bug问题:LomBok失效、Gradle冲突、Spring Boot启动错误

一直以来我认为工具类的软件是越新越好,因为工具代表着一定的先进性;但是IDEA 2024好好的给我上了一课,比如lombok 不起作用、比如Spring Boot 3.4.x 启动报错、再比如MyBatis log plus冲突、再比如Gradle插件冲突. 一、Lombok 失效问题 请不…

01、flink的原理和安装部署

flink中主要有两个进程,分别是JobMManager和TaskManager,当然了根据flink的部署和运行环境不同,会有一些不同,但是主要的功能是类似的,下面我会讲下聊下,公司用的多的部署方式,基于yarn集群的部…

Vue2+OpenLayers实现车辆开始、暂停、重置行驶轨迹动画(提供Gitee源码)

前言:根据经纬度信息绘制一个完整的行驶路线,车辆根据绘制好的路线从开始点位行驶到结束点位,可以通过开始、暂停、重置按钮控制车辆状态。 目录 一、案例截图 二、安装OpenLayers库 三、​安装Element-UI ​ 四、代码实现 4.1、初始化…

两个React项目部署在同一个域名,一个主地址,一个子地址,二级白屏等问题

主域名配置的那个项目正常配置就可以了,但是对于子地址的项目,需要做很多的配置的。 注意 子地址的那个项目在配置中需要配置为子地址: base: /subpk 在vite.config.ts中修改: 如果这里没有配置正确,会导致白屏或者…

管理口令安全和资源(二)

DBMS_METADATA DBMS_METADATA 是 Oracle 数据库中的一个包,它提供了用于管理数据库元数据的工具和过程。元数据是关于数据的数据,它描述了数据库的结构,包括表、视图、索引、存储过程、用户和其他数据库对象的信息。DBMS_METADATA 包允许用户…

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

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

Kotlin Bytedeco OpenCV 图像图像57 图像ROI

Kotlin Bytedeco OpenCV 图像图像57 图像ROI 1 添加依赖2 测试代码3 测试结果 1 添加依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xmlns"http://maven.apache.o…

Linux手写FrameBuffer任意引脚驱动spi屏幕

一、硬件设备 开发板&#xff1a;香橙派 5Plus&#xff0c;cpu&#xff1a;RK3588&#xff0c;带有 40pin 外接引脚。 屏幕&#xff1a;SPI 协议 0.96 寸 OLED。 二、需求 主要是想给板子增加一个可视化的监视器&#xff0c;并且主页面可调。 平时跑个模型或者服务&#xff0c;…

【Linux】gdb_进程概念

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &#x1f4e2;本文由 JohnKi 原创&#xff0c;首发于 CSDN&#x1f649; &#x1f4e2;未来很长&#…

【k8s面试题2025】3、练气中期

体内灵气的量和纯度在逐渐增加。 文章目录 在 Kubernetes 中自定义 Service端口报错常用控制器Kubernetes 中拉伸收缩副本失效设置节点容忍异常时间Deployment 控制器的升级和回滚日志收集资源监控监控 Docker将 Master 节点设置为可调度 在 Kubernetes 中自定义 Service端口报…

飞牛 使用docker部署Watchtower 自动更新 Docker 容器

Watchtower是一款开源的Docker容器管理工具&#xff0c;其主要功能在于自动更新运行中的Docker容器 Watchtower 支持以下功能&#xff1a; 自动拉取镜像并更新容器。 配置邮件通知。 定时执行容器更新任务。 compose搭建Watchtower 1、新建文件夹 先在任意位置创建一个 w…

使用NetLimiter限制指定应用的网速

NetLimiter是一款用于网络流量监控和控制的软件&#xff0c;适合需要管理网络带宽的用户。在项目测试中&#xff0c;它帮助我对特定应用进行限速&#xff0c;合理分配网络资源&#xff0c;避免了因单一应用过度占用带宽而引发的网络问题。通过NetLimiter&#xff0c;我可以为每…

Python根据图片生成学生excel成绩表

学习笔记&#xff1a; 上完整代码 import os import re from openpyxl import Workbook, load_workbook from openpyxl.drawing.image import Image as ExcelImage from PIL import Image as PilImage# 定义图片路径和Excel文件路径 image_dir ./resources/stupics # 图片所…

56_多级缓存实现

1.查询Tomcat 拿到商品id后,本应去缓存中查询商品信息,不过目前我们还未建立Nginx、Redis缓存。因此,这里我们先根据商品id去Tomcat查询商品信息。此时商品查询功能的架构如下图所示。 需要注意的是,我们的OpenResty是在虚拟机,Tomcat是在macOS系统(或Windows系统)上,…

【Linux系统】Ext系列磁盘文件系统二:引入文件系统(续篇)

inode 和 block 的映射 该博文中有详细解释&#xff1a;【Linux系统】inode 和 block 的映射原理 目录与文件名 这里有几个问题&#xff1a; 问题一&#xff1a; 我们访问文件&#xff0c;都是用的文件名&#xff0c;没用过 inode 号啊&#xff1f; 之前总是说可以通过一个…

2024年博客之星年度评选—创作影响力评审入围名单公布

2024年博客之星活动地址https://www.csdn.net/blogstar2024 TOP 300 榜单排名 用户昵称博客主页 身份 认证 评分 原创 博文 评分 平均 质量分评分 互动数据评分 总分排名三掌柜666三掌柜666-CSDN博客1001002001005001wkd_007wkd_007-CSDN博客1001002001005002栗筝ihttps:/…