PHP后端开发工程师面试经验分享(一)

4个月没工作,2个月前开始找工作,投了54份简历,18个面试邀请,通过其中的8个技术面,拿到了6个offer,最终入职一家公司。其中5个offer是最后两周的面试拿的。中间有太多的收获和得着。对于一个后端程序员必须要掌握的知识框架,大概有了一个了解和把握,这里梳理一下分享出来。第一篇分享主要讲述框架和大纲,后续会对每一个主题进行详细分享。这里的面试经验分享仅作为有限的参考,真正的技术提升在于平时刻意地积累、大量的阅读和实战

网络协议

对于网络协议,比较常问的是TCP/IP协议、HTTP/HTTPS协议,如果能把TCP/IP/UPD报文头画一遍、记熟,将会很有帮助。对于问题一定要在理解的基础上,不能死记硬背,很多基础的问题很重要,比如什么是协议?为什么网络通信要有协议?操作系统协议栈是什么?

  1. 建立和断开TCP连接的详细过程,三次握手和四次挥手的状态时序图要很熟悉(SYN/SYN ACK/ACK FIN/ACK/FIN/ACK )
  2. TCP和UDP的区别(要尽可能详细)
  3. TCP协议如何做流量和拥塞控制(窗口滑动、慢启动、快速重传)
  4. TCP协议如何保证报文时序和可靠性(INS序列号和重发机制)
  5. TCP报文分片、TCP流模式和UDP报文模式的区别、MTU、MSS的概念
  6. 网络通信的五层模型
  7. HTTP和HTTPS的区别,HTTPS连接建立的过程、为什么更安全、解决了哪些问题
  8. 什么是DNS、DNS解析的过程是什么
  9. HTTP常见响应状态码及其含义、HTTP1.0、1.1、2.0的区别、什么是幂等性
  10. cookie和session的区别(经常问,必须掌握)
  11. 其他的协议了解吗?ARP/DHCP/ICMP/IGMP......

这些问题其实都能用一个问题串起来,那就是在浏览器输入url按下回车后到页面渲染完成,中间都发生了什么

数据库

  1. 什么是索引,索引有什么作用
  2. 索引的分类(聚簇索引和非聚簇索引、普通索引和唯一索引)
  3. innodb索引数据结构(b+树)、为什么innodb要用b+树、索引树叶子节点和非叶子节点的区别
  4. 常见查询优化手段
  5. 联合索引的性质,如何给字符串建立索引,最左前缀原则了解吗
  6. 覆盖索引的概念
  7. MySQL如何选择索引?哪些情况下会出现索引失效
  8. 事务是什么、事务的acid原则
  9. 事务的四种隔离级别、CR和RR分别解决了什么问题(脏读和不可重复读)
  10. innoDB如何解决幻读(间隙锁)
  11. innoDB锁的分类(共享锁和独占锁、悲观锁和乐观锁、间隙锁、意向锁、读锁、写锁)、
  12. 什么是死锁、如何避免死锁
  13. 知道哪些mysql数据库引擎?innodb和myisam的区别
  14. char和varchar的区别、int和tinyint的区别、varchar(11)和int(11)是什么意思
  15. 什么是回表操作
  16. 了解binlog和redo log的作用和区别吗?innoDB如何实现MVCC,如何实现事务回滚操作
  17. MySQL主从复制过程是什么
  18. innoDB如何删除数据(标记删除or物理删除)?页空洞、页分裂、页合并了解吗?如何重建索引?
  19. 一条SQL语句的执行过程(MySQL的连接器、分析器、优化器和执行器)
  20. explain命令了解吗?如何分析慢查询日志
  21. MySQL如何实现group by?如何实现join操作?

Redis

  1. 知道哪些redis数据类型?各自的应用场景是什么?内部实现的数据结构知道吗?
  2. 常见redis操作命令
  3. redis线程模型
  4. redis为什么速度快
  5. redis事务了解吗?redis哨兵和集群了解吗
  6. redis的内存淘汰机制
  7. redis持久化机制了解吗(RDB和AOF,各自特点)
  8. redis主从复制的过程是什么
  9. 什么是缓存穿透、击穿、雪崩?如何解决?
  10. redis如何实现zset
  11. 如何解决数据库、redis更新数据不一致的问题
  12. 如何用redis实现分布式锁

nginx

  1. nginx的进程模型(master进程和worker进程)
  2. nginx的反向代理功能是什么
  3. nginx如何和php-fpm交互的(fast-cgi模块)
  4. nginx的负载均衡配置了解吗,还了解哪些nginx配置
  5. nginx如何处理并发请求的(IO多路复用-epoll模型)

操作系统

  1. 什么是进程、什么是线程,两者有何区别
  2. 进程间通信方式
  3. 什么情况下会发生死锁、如何避免
  4. 了解哪些进程调度算法

Linux

  1. 尽可能多地说出知道的Linux命令
  2. 如何查看端口号被哪个进程占用
  3. top/ps/netstat/tcpdump
  4. IO模型了解哪些(如异步非阻塞IO/IO多路复用)
  5. 了解Linux文件系统吗

PHP基础

这个细节很多,列举几个常问的

  1. 单双引号的区别、定义常量的几种方式(define/const)、require、require_once、include的区别
  2. 常见的array函数、string函数、排序函数
  3. COW机制、引用的概念、函数的值传递和引用传递、变量容器(zval)、垃圾回收机制
  4. ==和===的区别、empty和isset的区别
  5. 值为false的7种情况:0、'0'、false、NULL、''、0.0、[]
  6. $_GLOBAL/$_SERVER/$_REQUEST/$_POST/$_GET/$_SESSION/$_COOKIE/$_FILES
  7. curl、serialize、unserialize、get_memory_usage、json_encode...各种常用函数
  8. 魔术变量、魔术方法、闭包、生成器、反射、self和parent区别
  9. PHP运行原理、PHP7新特性、PHP引擎是什么语言写的,结构了解吗
  10. PHP支持多继承吗?
  11. PHP连MySQL数据库的方法(PDO/mysqli)

数据结构与算法

这个只了解概念是不够的,一定要做题。leetcode是个好平台。链表 、排序算法和二叉树是最常问的。

  1. 数组和链表的区别、各自查找、删除、插入的时间复杂度如何
  2. 了解哪些排序算法,大致描述一下思路,哪些是稳定的排序算法
  3. hash表的查找时间复杂度是多少,为什么
  4. 如何实现LRU算法
  5. 什么是栈、队列?什么是跳表、散列表、二叉树?各自应用场景

其他

  1. 正则表达式
  2. OOP编程思想、常见的设计模式
  3. 微服务了解吗?什么是RPC
  4. 实现一个秒杀功能(服务的高并发、高可用)
  5. SQL注入、XSS攻击、CSRF攻击
  6. 什么是MVC
  7. 了解哪些Git命令
  8. 职业规划

 

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值