php-2025面试题准备

news/2025/1/20 3:47:42/

一、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.ppmy.cn/news/1564572.html

相关文章

【鸿蒙】0x02-LiteOS-M基于Qemu RISC-V运行

OpenHarmony LiteOS-M基于Qemu RISC-V运行 系列文章目录更新日志OpenHarmony技术架构OH技术架构OH支持系统类型轻量系统(mini system)小型系统(small system)标准系统(standard system) 简介环境准备安装QE…

深入浅出JSON:数据交换的轻量级解决方案

在现代Web开发中,数据交换是前后端通信的核心。JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,因其简洁、易读、易解析的特点,成为了前后端数据交互的首选格式。本文将详细介绍JSON的定义、数据格式、…

七十五:握手的优化:Session缓存、Ticket票据及TLS 1.3的0-RTT

引言 在现代互联网环境中,安全性和性能是设计网络协议时至关重要的两个方面。传输层安全性(TLS)协议是实现安全传输的关键机制。然而,传统的TLS握手过程虽然安全,但是存在潜在的延迟问题。为了优化握手的效率&#xf…

elementUI项目中,只弹一个【token过期提示】信息框的处理

关键代码 let msgArr document.querySelectorAll(.token401Message)if (!msgArr.length) {Message({customClass: token401Message,message: response.data.msg,type: error,onClose: () > {msgArr []}})} 完整代码 import axios from axios import { getToken } from…

使用 Python 实现自动化办公(邮件、Excel)

目录 一、Python 自动化办公的准备工作 1.1 安装必要的库 1.2 设置邮件服务 二、邮件自动化处理 2.1 发送邮件 示例代码 注意事项 2.2 接收和读取邮件 示例代码 三、Excel 自动化处理 3.1 读取和写入 Excel 文件 示例代码 3.2 数据处理和分析 示例代码 四、综合…

微信小程序:实现单选,多选,通过变量控制单选/多选

一、实现单选功能 微信小程序提供了 radio 组件来实现单选功能。radio 组件需要配合 radio-group 使用。 1. WXML 代码 <radio-group bindchange"onRadioChange"><label wx:for"{{items}}" wx:key"id"><radio value"{{it…

昇腾环境ppstreuct部署问题记录

测试代码 我是在华为昇腾910B3上测试的PPStructure。 import os import cv2 from PIL import Image #from paddleocr import PPStructure,draw_structure_result,save_structure_res from paddleocr_asyncio import PPStructuretable_engine PPStructure(show_logTrue, imag…

[Easy] leetcode-14 最长公共前缀

一、题目描述 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀&#xff0c;返回空字符串 ""。 输入&#xff1a;strs ["flower","flow","flight"] 输出&#xff1a;"fl"输入&#xff1a;strs [&qu…