随便写了一套面试题(记录一下)

in 其他 with 0 comment

PHP

PHP 严格模式和强制模式的区别

默认是强制模式

严格模式下,如类型定义,返回定义,将严格进行校验类型,如 Golang,Java 中的类型断言

PHP 常见数据类型有哪些

Int, array, object, Null, Resource, Callable, bool, float, string, interface

PHP 的 implements(接口) 和 (抽象类) 是什么东西,他们的区别是什么,你认为的使用场景

implements 可以规范同功能模块类下功能,其实 abstract

例如 我们要编写一个 Email 发送类,我们的 Email 发送渠道可能来自于 阿里云、腾讯云。但这是两位同事在编写,而且后续的需求,可能新增其他的发送渠道,那么我们可以先定义好 implements 或者 abstract,再由对应开发人员去实现其方法

他们两者的很大区别就是

总而言就是: implements 可商量,abstract 强制

枚举类型是什么,PHP 有枚举类型吗,为什么要用枚举

Trait 是什么,为什么要用 Trait

用过中间件吗,用过哪些中间件,为什么要用中间件

中间件可以帮我们更好的管理和过滤我们的东西,将不需要的,需要的职责划分明显。让功能更聚合更细化

如:

利用中间件思想,我们可以充分的解耦我们的核心服务还有代码,例可以将业务代码和聚合代码分离,起到很好的管理作用

php 本地启动服务的命令是什么

php -S 127.0.0.1:8085

可以结合生命周期说一下,为什么传统 PHP 比 Java、Go 之类的访问速度更慢,并发能力更差

PHP 的生命周期,以 Nginx 为例,Nginx 启动 PHP,将开启 fast-cgi 服务,在配置 PHP 服务的时候可以看到那串 有关 cgi 的配置
通过 cgi 会将数据转发到 php,php 将根据分发的内容启动一个 PHP-FPM 进程,其中,php 可能会记住其中的一些核心内容,当用户在页面继续重载时,将不会再次开启 PHP-FPM 进程。

由此可见,每次用户的新请求,都讲创建一个 进程,每个进程间数据是隔离的,那么意思也就是说,每次进程都要走一遍我们的核心服务(中间件:重连 Mysql 等等)

而 Java、Go,他们是常驻进程,每次访问新服务将不会 开启一个新的进程,而是由这个常驻进程衍生出一些子进程,再而协层去管理这些服务,那么由此可见,我们其中说的 核心服务,他们的数据是共享的,如:在常驻进程中创建一个类似静态变量的类(比如:单例),那么每个进程都可以调用,而不需要每次都去重启。

小于 PHP7、php7、php8 他们各自的优势是什么,如果你是项目负责人你会选那种

php7 之前的版本他们的底层实现逻辑不一样,这里简单描述一下,主要是由于一些

php7 中,基本上提升了非常大的效率,而且语法进行了升级,其中就像 强制模式和严格模式 还有些操作符等等

PHP8 的话,主要是 JIT 加入,我们可以不需要使用常驻进程也可以提升非常大的效率

PHP7 抛出错误有哪几种方式

什么是伪静态?

常见的 PHP 访问会出现,index.php, 加入伪静态,可以将 index.php?route=login, 变成 /?route=login, 由此我们可以更好的管理路由,如 将 route 定位为 /login(定义在 URL 中,而不是参数中), 路由和参数隔离,而且更好看,更清晰

登录鉴权服务你会怎么设计整体的逻辑

Jwt 是什么,如果不会 jwt,你会如何实现一个用户登录态的存储(不使用数据库存储的情况下)

- 如果使用redis,在需要长时间保证用户登录的情况下,你如何保证用户的登录态会丢失(Redis有宕机风险、丢key风险)
- 如果使用本地缓存,你如何有效管理这些登录态(本地缓存的话同样有如上风险,redis 和 本地缓存的区别在于:本地缓存的读取速率和管理能力偏差,如如果10万个用户保持登录,你需要存储10万条key,当然可以放在同一个文件中,但不现实。本地缓存的话,更多的要从token设计上出发处理,如进行对称加密,解出Token中的数据,然后工具其中的解密数据进行二次读取缓存数据,如: 缓存key + 缓存目录 + 秘钥 = token )

在一个 web 服务中,你如何对错误进行监控上报.(重要)

假设一天有 100 个定时任务,并且可能分布在不同的时间,执行的是不同的脚本,如何管理你大量的定时任务的 (重要)

你用过的对你来说记忆深刻且熟悉的 php 扩展有哪些,为什么要用这个扩展 (重要)

会爬虫吗,如何抓取一个网页(可选)

面向过程和面向对象说一下

你会的框架有哪些,你觉得他们的区别和特点大概是什么

例:ThinkPHP 和 Laravel 的明显区别 和 相同点

请说一下 Laravel 的执行流程和生命周期

Laravel 中 CSRF Token 是什么,Laravel 如何对他进行拦截的

说一下 Redis,你平常怎么用他,为什么要用 Redis 呢,他的数据类型有哪些

说一下 Nginx,你怎么用它,怎么用 Nginx 实现一个反代,配置过 SSL 吗,你用过的是哪些证书

Nginx 配置 中的 root 和 listen 是干嘛的,443 和 80 端口是干啥的

你配置过云服务码,请安全组是干嘛的

你是如何定位问题的,简单说下你的思路是怎么样的

Mysql 的类型你知道哪些

Mysql 索引你知道哪些,怎么优化一个 Mysql 的表(贴一张图)

复合索引、主键索引,外键索引,唯一索引是什么东西,你对索引的理解

CDN 用过吗,为什么要用 CDN

SEO 了解吗,设置 SEO 的目的是什么

你知道的请求方法有哪些,他们的区别

你知道的 Header 头有哪些,你在哪些地方用到他过

RESFul 知道是什么吗,为什么要用他

说一下 Linux 的常见命令

说一下 Linux 的权限

说一下 git 的常见命令

git reset 一般干嘛的

你如何合并一个分支,并会怎么解决冲突

git 中的 authorized_keys 、 id_rsa 、 id_rsa.pub 这三个玩意干嘛的

包管理有哪些,composer 原理,你自己写过扩展包吗

你一般去哪里找包

请求超时怎么办

前端的

Js 的基础类型

为什么要有 Promise 和 async await

怎么获取一个 dom 节点

DOM 树如何渲染的

PHP 如何优化一个 Spa 应用

服务端渲染是什么

你用的框架中,blade 或者 template 模版是什么
会的话(问一下,如何设置 blade 全局变量)

CSS、Less、Sass、Scss 是什么

CSS 的 盒模型是什么

CSS RGB 和 RGBA 的区别

CSS calc 是什么

Webpack 和 Vite 是什么

Vue 的常见 api

Vue 组件如何通信

Vue 为什么对 seo 影响不好

Vue 中的 route-view 是干嘛的

npm run dev、npm run build 知道吧,那我可以 npm run {任意命令} 吗

其他

Docker 是什么,为什么要用 docker

Docker composer 是什么

Comments are closed.