PHP
PHP 严格模式和强制模式的区别
默认是强制模式
严格模式下,如类型定义,返回定义,将严格进行校验类型,如 Golang,Java 中的类型断言
PHP 常见数据类型有哪些
Int, array, object, Null, Resource, Callable, bool, float, string, interface
PHP 的 implements(接口) 和 (抽象类) 是什么东西,他们的区别是什么,你认为的使用场景
implements 可以规范同功能模块类下功能,其实 abstract
例如 我们要编写一个 Email 发送类,我们的 Email 发送渠道可能来自于 阿里云、腾讯云。但这是两位同事在编写,而且后续的需求,可能新增其他的发送渠道,那么我们可以先定义好 implements 或者 abstract,再由对应开发人员去实现其方法
他们两者的很大区别就是
- implements 中必须实现接口中定义的所有方法, 但是可以继承多个 implements,且都是 public
- abstract 必须强制子集定义和实现方法
总而言就是: implements 可商量,abstract 强制
枚举类型是什么,PHP 有枚举类型吗,为什么要用枚举
Trait 是什么,为什么要用 Trait
用过中间件吗,用过哪些中间件,为什么要用中间件
- Nosql 也归属于中间件
- RabbitMQ 等 也归属于中间件
- 这里主要让他阐述一下 Laravel 或者 ThinkPHP 中的中间件
中间件可以帮我们更好的管理和过滤我们的东西,将不需要的,需要的职责划分明显。让功能更聚合更细化
如:
- 框架中的中间件,可以给我们带来:Csrf 处理、系统安全保证、鉴权隔离、路由隔离等等,还有如 单例服务、核心服务注入、mysql 、redis 服务注入等等,让我们不需要关心核心层的东西。
利用中间件思想,我们可以充分的解耦我们的核心服务还有代码,例可以将业务代码和聚合代码分离,起到很好的管理作用
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 之前的版本他们的底层实现逻辑不一样,这里简单描述一下,主要是由于一些
- 内部类型 zend_string
- PHP 数组的变化(HashTable 和 Zend Array)
- 函数调用机制(Function Calling Convention)
- 通过宏定义和内联函数(inline),让编译器提前完成部分工作
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 )
- Jwt 的好处就是可以相对解决如上这些问题,可以根据载荷来处理登录态时间,而私钥存储在服务端,客户端不可能破解和生成
- 同样 session 也差不多,但是 session 实际上和 redis 缓存文件缓存同理,无法解决非服务端存储的问题
在一个 web 服务中,你如何对错误进行监控上报.(重要)
- 如果回答捕获异常,假设同一时间 大量异常进行上报,异常上报服务可能直接挂掉,如何处理优化
假设一天有 100 个定时任务,并且可能分布在不同的时间,执行的是不同的脚本,如何管理你大量的定时任务的 (重要)
你用过的对你来说记忆深刻且熟悉的 php 扩展有哪些,为什么要用这个扩展 (重要)
会爬虫吗,如何抓取一个网页(可选)
- 如果网页是 Spa 应用你如何处理?(重要)
- 在抓取爬虫过程中,如果出现访问被禁止,你如何处理(重要)
- 在抓取爬虫过程中,你正常访问能抓到,但是你写的代码可能就是抓不到,请问你会如何定位问题,最终给出处理方案
面向过程和面向对象说一下
- 面向对象的话,你使用过哪些设计模式
你会的框架有哪些,你觉得他们的区别和特点大概是什么
例: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 是什么
本文由 邓尘锋 创作,采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为: Jul 9, 2023 at 12:48 am