总结的一些面试题

33 篇文章 0 订阅

数组和字符串的操作函数

魔术方法并说明作用

8中数据类型

include 和 require 区别

文件操作 遍历文件夹等

cookie 和 session

错误级别设置

header设置跨域等

echo 和 print print_r var_dump区别

冒泡排序的......

topK问题的大根堆小跟堆

this parent self 的区别

static关键字的使用

$_SERVER的一些ip的获取

编码转换 

时间问题 某个月的某一天 前一天 前一周 某月第一天

单双引号区别

SESSION与COOKIE?

关于中文截取的问题

什么是数据库索引,主键索引,唯一索引的区别,索引的缺点是什么?优点是什么?什么情况下适合建立索引?

数据库中的事务是什么? 事务的特性?

设计模式

典型的邮箱正则

isset() 和 empty() 区别

什么是cURL

常用到的mysql命令

查看sql执行效率方式 explain profiles 慢日志

面向对象中接口和抽象类的区别及应用场景

$_REQUEST、$_POST、$_GET、$_COOKIE、$_SESSION、$_FILE的意思是什么?

框架中什么是单一入口和多入口,单一入口的优缺点?

redis与memcache区别

xss ddos csrf sql防注入

HTTP协议中GET、POST和HEAD的区别?

写出 php 的 的 public 、protected 、private 三种访问控制模式的区别

public:公有,任何地方都可以访问

protected:继承,只能在本类或子类中访问,在其它地方不允许访问

private:私有,只能在本类中访问,在其他地方不允许访问

 

写出下列几个预定义全局变量的作用

_SERVER['DOCUMENT_ROOT'] //当前运行脚本所在的文档根目录_SERVER['HTTP_HOST '] //当前请求的 Host: 头部的内容

_SERVER['REMOTE_ADDR'] //正在浏览当前页面用户的 IP 地址_SERVER['HTTP_REFERER'] //链接到当前页面的前一页面的 URL 地址

_SERVER['SERVER_NAME'] //当前运行脚本所在服务器主机的名称_FILES //包含有所有上传的文件信息

S_FILES['userfile']['name'] //客户端机器文件的原名称

_FILES['userfile']['type'] //文件 MIME 类型,如果浏览器提供此信息的话,如“image/gif”。_FILES['userfile']['size'] //已上传文件的大小,单位为字节

_FILES['userfile']['tmp_name'] //文件被上传后在服务端储存的临时文件名_FILES['userfile']['error'] //和该文件上传相关的错误代码

 

1,Http 和Https的区别

第一:http是超文本传输协议,信息是明文传输,https是具有安全性的ssl加密传输协议

第二:http和https使用的是完全不同的连接方式,端口也不一样,前者80 或者443

第三:http连接很简单,是无状态的。https协议是由ssl+http协议构建的可进行加密传输,身份认证的网络协议。

 

如何实现字符串翻转

http请求返回状态码

linux授权码: chmod等

什么是构造方法和析构方法?

什么是抽象类和接口?抽象类和接口有什么不同和相似的地方?

Trait spl

双引号和单引号的区别

进程线程协程都是啥

php.ini 常用配置

 

redis数据类型以及使用过的类型及场景,持久化策略,主从,断电恢复数据

缓存雪崩,缓存穿透,缓存击穿的情况以及解决方案

 

nginx 重启杀死等命令 进程数 日志格式 负载均衡,权重等 server的一些配置等 日志分析

 

linux 查看进程id;进程占用端口 ;cd 切换目录

touch 创建空文件

echo 创建带有内容的文件。

cat 查看文件内容

cp 拷贝

mv 移动或重命名

rm 删除文件

find 在文件系统中搜索某文件

wc 统计文本中行数、字数、字符数

grep 在文本文件中查找某个字符串

rmdir 删除空目录

tree 树形结构显示目录,需要安装tree包

pwd 显示当前目录

ln 创建链接文件

more、less 分页显示文本文件内容

head、tail 显示文件头、尾内容

gzip:

bzip2:

tar: 打包压缩

chmod更改权限等.........

linux中shell脚本的编写 以及nginx php 的定时重启情况 以及数据库的定时备份脚本 以及crond

 

 

MySQL的事务隔离级别 (4个)以及特性

mysql四类索引 以及索引生效条件

如何查看索引的使用情况 explain

profile的意义以及使用场景

Profile 用来分析 sql 性能的消耗分布情况。当用 explain 无法解决慢 SQL 的时候,需要用profile 来对 sql 进行更细致的分析,找出 sql 所花的时间大部分消耗在哪个部分,确认 sql的性能瓶颈。

 

explain出来的各种item的意义

id:每个被独立执行的操作的标志,表示对象被操作的顺序。一般来说, id 值大,先被执行;如果 id 值相同,则顺序从上到下。 select_type:查询中每个 select 子句的类型。 table:名字,被操作的对象名称,通常的表名(或者别名),但是也有其他格式。 partitions:匹配的分区信息。 type:join 类型。 possible_keys:列出可能会用到的索引。 key:实际用到的索引。 key_len:用到的索引键的平均长度,单位为字节。 ref:表示本行被操作的对象的参照对象,可能是一个常量用 const 表示,也可能是其他表的 key 指向的对象,比如说驱动表的连接列。 rows:估计每次需要扫描的行数。 filtered:rows*filtered/100 表示该步骤最后得到的行数(估计值)。 extra:重要的补充信息。

 

explain 中的索引问题

Explain 结果中,一般来说,要看到尽量用 index(type 为 const、 ref 等, key 列有值),避免使用全表扫描(type 显式为 ALL)。比如说有 where 条件且选择性不错的列,需要建立索引。 被驱动表的连接列,也需要建立索引。被驱动表的连接列也可能会跟 where 条件列一起建立联合索引。当有排序或者 group by 的需求时,也可以考虑建立索引来达到直接排序和汇总的需求。

 

脏读&不可重复读&幻读是啥?

存储引擎 MyISAM和InnoDB区别:

1)InnoDB支持事务,MyISAM不支持。

2)MyISAM适合查询以及插入为主的应用,InnoDB适合频繁修改以及涉及到安全性较高的应用。

3)InnoDB支持外键,MyISAM不支持。

4)从MySQL5.5.5以后,InnoDB是默认引擎。

5)MyISAM支持全文类型索引,而InnoDB不支持全文索引。

6)InnoDB中不保存表的总行数,select count(*) from table时,InnoDB需要扫描整个表计算有多少行,但MyISAM只需简单读出保存好的总行数即可。注:当count(*)语句包含where条件时MyISAM也需扫描整个表。

7)对于自增长的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中可以和其他字段一起建立联合索引。

8)清空整个表时,InnoDB是一行一行的删除,效率非常慢。MyISAM则会重建表。MyisAM使用delete语句删除后并不会立刻清理磁盘空间,需要定时清理,命令:OPTIMIZE table dept;

9)InnoDB支持行锁(某些情况下还是锁整表,如 update table set a=1 where user like ‘%lee%’)

10)Myisam创建表生成三个文件:.frm 数据表结构 、 .myd 数据文件 、 .myi 索引文件,Innodb只生成一个 .frm文件,数据存放在ibdata1.log

现在一般都选用InnoDB,主要是MyISAM的全表锁,读写串行问题,并发效率锁表,效率低,MyISAM对于读写密集型应用一般是不会去选用的。

应用场景:

  • MyISAM不支持事务处理等高级功能,但它提供高速存储和检索,以及全文搜索能力。如果应用中需要执行大量的SELECT查询,那么MyISAM是更好的选择。
  • InnoDB用于需要事务处理的应用程序,包括ACID事务支持。如果应用中需要执行大量的INSERT或UPDATE操作,则应该使用InnoDB,这样可以提高多用户并发操作的性能。

 

 

CHAR和VARCHAR的区别:

  • CHAR和VARCHAR类型在存储和检索方面有所不同
  • CHAR列长度固定为创建表时声明的长度,长度值范围是1到255
  • 当CHAR值被存储时,它们被用空格填充到特定长度,检索CHAR值时需删除尾随空格。 

Mysql中有哪几种锁?

  • MyISAM支持表锁,InnoDB支持表锁和行锁,默认为行锁
  • 表级锁:开销小,加锁快,不会出现死锁。锁定粒度大,发生锁冲突的概率最高,并发量最低
  • 行级锁:开销大,加锁慢,会出现死锁。锁力度小,发生锁冲突的概率小,并发度最高

int(3)和 int(10) varchar(30) 和 varchar(10) char(10) 的区别

 

存储过程和触发器是啥

mysql的主从复制的原理以及流程

 

redis集群的方案 是否自己实现过

 

 

基础篇

  • 了解大部分数组处理函数

  • 字符串处理函数 区别 mb_ 系列函数

  • & 引用,结合案例分析

  • == 与 === 区别

  • isset 与 empty 区别

  • 全部魔术函数理解

  • static、$this、self 区别

  • private、protected、public、final 区别

  • OOP 思想

  • 抽象类、接口 分别使用场景

  • Trait 是什么东西

  • echo、print、print_r 区别(区分出表达式与语句的区别)

  • __construct 与 __destruct 区别

  • static 作用(区分类与函数内)手册 、SOF

  • __toString() 作用

  • 单引号'与双引号"区别

  • 常见 HTTP 状态码,分别代表什么含义

  • 301 什么意思 404 呢?

进阶篇

  • Autoload、Composer 原理 PSR-4 、原理

  • Session 共享、存活时间

  • 异常处理

  • 如何 foreach 迭代对象

  • 如何数组化操作对象 $obj[key];

  • 如何函数化对象 $obj(123);

  • yield 是什么,说个使用场景 yield

  • PSR 是什么,PSR-1, 2, 4, 7

  • 如何获取客户端 IP 和服务端 IP 地址

    • 客户端 IP

    • 服务端 IP

    • 了解代理透传 实际IP 的概念

  • 如何开启 PHP 异常提示

    • php.ini 开启 display_errors 设置 error_reporting 等级

    • 运行时,使用 ini_set(k, v); 动态设置

  • 如何返回一个301重定向

    • [WARNING] 一定当心设置 301 后脚本会继续执行,不要认为下面不会执行,必要时使用 die or exit

  • 如何获取扩展安装路径

    • phpinfo(); 页面查找 extension_dir

    • 命令行 php -i |grep extension_dir

    • 运行时 echo ini_get('extension_dir');

  • 字符串、数字比较大小的原理,注意 0 开头的8进制、0x 开头16进制

    • 字符串比较大小,从左(高位)至右,逐个字符 ASCII 比较

  • BOM 头是什么,怎么除去

    • 0xEF,0xBB,0xBF

    • 检测、去除

  • 什么是 MVC

  • 依赖注入实现原理

  • 如何异步执行命令

  • 模板引擎是什么,解决什么问题、实现原理(Smarty、Twig、Blade)

  • 如何实现链式操作 $obj->w()->m()->d();

  • Xhprof 、Xdebug 性能调试工具使用

  • 索引数组 [1, 2] 与关联数组 ['k1'=>1, 'k2'=>2] 有什么区别

  • 缓存的使用方式、场景

实践篇

  • 给定二维数组,根据某个字段排序

  • 如何判断上传文件类型,如:仅允许 jpg 上传

  • 不使用临时变量交换两个变量的值 $a=1; $b=2; => $a=2; $b=1;

  • strtoupper 在转换中文时存在乱码,你如何解决?php echo strtoupper('ab你好c');

  • Websocket、Long-Polling、Server-Sent Events(SSE) 区别

  • "Headers already sent" 错误是什么意思,如何避免

算法篇

  • 快速排序(手写)

  • 冒泡排序(手写)

  • 二分查找(了解)

  • 查找算法 KMP(了解)

  • 深度、广度优先搜索(了解)

  • LRU 缓存淘汰算法(了解,Memcached 采用该算法)

数据结构篇(了解)

  • 堆、栈特性

  • 队列

  • 哈希表

  • 链表

对比篇

  • Cookie 与 Session 区别

  • GET 与 POST 区别

  • include 与 require 区别

  • include_once 与 require_once 区别

  • Memcached 与 Redis 区别

  • MySQL 各个存储引擎、及区别(一定会问 MyISAM 与 Innodb 区别)

  • HTTP 与 HTTPS 区别

  • Apache 与 Nginx 区别

  • define() 与 const 区别

  • traits 与 interfaces 区别 及 traits 解决了什么痛点?

  • Git 与 SVN 区别

数据库篇

  • MySQL

    • 索引、联合索引(命中条件)

    • 分库分表(水平分表垂直分表

    • 分区

    • 会使用 explain 分析 SQL 性能问题,了解各参数含义

    • Slow Log(有什么用,什么时候需要)

    • 重点理解 typerowskey

    • CRUD

    • JOIN、LEFT JOIN 、RIGHT JOIN、INNER JOIN

    • UNION

    • GROUP BY + COUNT + WHERE 组合案例

    • 常用 MySQL 函数,如:now()、md5()、concat()、uuid()等

    • 1:11:nn:n 各自适用场景

    • 了解触发器是什么,说个使用场景

    • 数据库优化手段

  • MSSQL(了解)

    • 查询最新5条数据

  • NOSQL

    • 持久化

    • 支持多钟数据类型

    • 可利用 CPU 多核心

    • 内存淘汰机制

    • 集群 Cluster

    • 支持 SQL

    • 性能对比

    • 支持事务

    • 应用场景

    • Redis、Memcached、MongoDB

    • 对比、适用场景(可从以下维度进行对比)

    • 你之前为了解决什么问题使用的什么,为什么选它?

服务器篇

  • 查看 CPU、内存、时间、系统版本等信息

  • find 、grep 查找文件

  • awk 处理文本

  • 查看命令所在目录

  • 自己编译过 PHP 吗?如何打开 readline 功能

  • 如何查看 PHP 进程的内存、CPU 占用

  • 如何给 PHP 增加一个扩展

  • 修改 PHP Session 存储位置、修改 INI 配置参数

  • 负载均衡有哪几种,挑一种你熟悉的说明其原理

  • 数据库主从复制 M-S 是怎么同步的?是推还是拉?会不会不同步?怎么办

  • 如何保障数据的可用性,即使被删库了也能恢复到分钟级别。你会怎么做。

  • 数据库连接过多,超过最大值,如何优化架构。从哪些方便处理?

  • 502 大概什么什么原因?如何排查 504呢?

架构篇

  • 偏运维(了解):

    • 负载均衡(Nginx、HAProxy、DNS)

    • 主从复制(MySQL、Redis)

    • 数据冗余、备份(MySQL增量、全量 原理)

    • 监控检查(分存活、服务可用两个维度)

    • MySQL、Redis、Memcached Proxy 、Cluster 目的、原理

    • 分片

    • 高可用集群

    • RAID

    • 源代码编译、内存调优

  • 缓存

    • 工作中遇到哪里需要缓存,分别简述为什么

  • 搜索解决方案

  • 性能调优

  • 各维度监控方案

  • 日志收集集中处理方案

  • 国际化

  • 数据库设计

  • 静态化方案

  • 画出常见 PHP 应用架构图

框架篇

  • ThinkPHP(TP)、CodeIgniter(CI)、Zend(非 OOP 系列)

  • Yaf、Phalcon(C 扩展系)

  • Yii、Laravel、Symfony(纯 OOP 系列)

  • Swoole、Workerman (网络编程框架)

  • 对比框架区别几个方向点

    • 是否纯 OOP

    • 类库加载方式(自己写 autoload 对比 composer 标准)

    • 易用性方向(CI 基础框架,Laravel 这种就是高开发效率框架以及基础组件多少)

    • 黑盒(相比 C 扩展系)

    • 运行速度(如:Laravel 加载一大堆东西)

    • 内存占用

设计模式

  • 单例模式(重点)

  • 工厂模式(重点)

  • 观察者模式(重点)

  • 依赖注入(重点)

  • 装饰器模式

  • 代理模式

  • 组合模式

安全篇

  • SQL 注入

  • XSS 与 CSRF

  • 输入过滤

  • Cookie 安全

  • 禁用 mysql_ 系函数

  • 数据库存储用户密码时,应该是怎么做才安全

  • 验证码 Session 问题

  • 安全的 Session ID (让即使拦截后,也无法模拟使用)

  • 目录权限安全

  • 包含本地与远程文件

  • 文件上传 PHP 脚本

  • eval 函数执行脚本

  • disable_functions 关闭高危函数

  • FPM 独立用户与组,给每个目录特定权限

  • 了解 Hash 与 Encrypt 区别

高阶篇

  • PHP 数组底层实现 (HashTable + Linked list)

  • Copy on write 原理,何时 GC

  • PHP 进程模型,进程通讯方式,进程线程区别

  • yield 核心原理是什么

  • PDO prepare 原理

  • PHP 7 与 PHP 5 有什么区别

  • Swoole 适用场景,协程实现方式

前端篇

  • 原生获取 DOM 节点,属性

  • 盒子模型

  • CSS 文件、style 标签、行内 style 属性优先级

  • HTML 与 JS 运行顺序(页面 JS 从上到下)

  • JS 数组操作

  • 类型判断

  • this 作用域

  • .map() 与 this 具体使用场景分析

  • Cookie 读写

  • JQuery 操作

  • Ajax 请求(同步、异步区别)随机数禁止缓存

  • Bootstrap 有什么好处

  • 跨域请求 N 种解决方案

  • 新技术(了解)

    • ES6

    • 模块化

    • 打包

    • 构建工具

    • vue、react、webpack、

    • 前端 mvc

  • 优化

    • 浏览器单域名并发数限制

    • 静态资源缓存 304 (If-Modified-Since 以及 Etag 原理)

    • 多个小图标合并使用 position 定位技术 减少请求

    • 静态资源合为单次请求 并压缩

    • CDN

    • 静态资源延迟加载技术、预加载技术

    • keep-alive

    • CSS 在头部,JS 在尾部的优化(原理)

网络篇

  • IP 地址转 INT

  • 192.168.0.1/16 是什么意思

  • DNS 主要作用是什么?

  • IPv4 与 v6 区别

网络编程篇

  • TCP 三次握手流程

  • TCP、UDP 区别,分别适用场景

  • 有什么办法能保证 UDP 高可用性(了解)

  • TCP 粘包如何解决?

  • 为什么需要心跳?

  • 什么是长连接?

  • HTTPS 是怎么保证安全的?

  • 流与数据报的区别

  • 进程间通信几种方式,最快的是哪种?

  • fork() 会发生什么?

API 篇

  • RESTful 是什么

  • 如何在不支持 DELETE 请求的浏览器上兼容 DELETE 请求

  • 常见 API 的 APP_ID APP_SECRET 主要作用是什么?阐述下流程

  • API 请求如何保证数据不被篡改?

  • JSON 和 JSONP 的区别

  • 数据加密和验签的区别

  • RSA 是什么

  • API 版本兼容怎么处理

  • 限流(木桶、令牌桶)

  • OAuth 2 主要用在哪些场景下

  • JWT

  • PHP 中 json_encode(['key'=>123]); 与 return json_encode([]); 区别,会产生什么问题?如何解决

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值