滴滴2019年php高级研发工程师面试题总结
一 算法
基本排序算法要会写,时间复杂度要会推算, 主要是冒泡排序, 快速排序, 选择排序.
查找算法,要会写二分查找法, 实际场景要会应用.
实例算法思路要明白,基本算法看多了, 我觉得是几种思路的变换, 需要自己领悟.
面试中考过:
- 猴子选大王
- 斗地主项目设计
- 实现随机函数
- 字符串中元素各种变形查找
- 123456 六个数放到三角形三个顶点及中点上,使每条边上的数字和相等
- 一个超大文件里面存放关键,统计每个关键的个数, 问如何实现
- 一个10G的文件,里面存放关键字, 但内存只有10M, 问如何实现统计, 出现关键字次数最高的前100个
- 实现单链表与双链表
- 实现有权重的随机算法
应该就这么多,其他想不起来, 做这些算法需要冷静分析下, 不要轻易说no
二 php 知识
- 说说php的魔术变量, 要能全部说出来.
- php的设计模式, 要能清晰说出单例, 工厂, 注册模式的实际应用.
- session与cookie的区别及如何解决session的跨域共享.
- 如何防止sql注入及数据安全问题.
- php的生命周期, 启动流程, 多看TIPI.
- php的垃圾回收机制, php变量,数组 c源代码如何实现.
- fastcgi 比 php-cgi 的优势在哪里.
- 你用过那些框架, 各自有什么优缺点.
- 你是怎么理解php的?
- php运行模式有几种,分别是什么?
三 网络
- http code 码含义 比如204, 304, 404
- apache与nginx对比,你觉得他们各自的优缺点.
- nginx与php数据通信原理是什么.
- http1.0与http1.1的区别, http与https的区别.
- 描述http请求的三次握手.
- 如何实现跨域请求.
- 关于header的各种参数的作用.
- 长连接的优势在哪里.
四 数据库
- 你采用mysql的引擎是什么. mysql innodb与myisam 这两种引擎本质区别是什么, 要能够从底层数据实现来说.
- mysql 字段类型有那些, 它们在内存能够存储多少字节数据, 比如 datetime timestamp date.
- 在正式服务器上, 如何操作一个存储大数据表上增加一个字段或添加索引或改变数据字段类型.
- 索引最左原则的意思是什么.
- mysql分库分表策略, 如何解决增表,减表问题.
- redis与memcached对比,各自优缺点.
- redis与memcached如何实现分布式搭建.
- 一致性hash原理是什么.
- mongodb与mysql对比,优势在什么地方.
五 LINUX
- 如何查看服务器负载
- 说说你常用的命令
- 如何统计日志文件中访问次数最多的十个ip地址.
- 源码编译过lamp 或 lnmp 软件吗
- 在当前目录下,如何查找包含keyword文件.
- 如何重启php 或 nginx.
- 进程与线程的区别
- 什么情况下会出现死锁, 如何解决死锁.
六 综合
- 说说你在工作中碰到的难题及如何解决的, 或讲讲你做过的项目中有难度的项目.
- 你能说一下微博的架构流程是什么样的吗? (这个问题我也是醉了)
- 说说你们现在服务器的架构是什么样子?
- 高并发,高流量情况下,如何设计秒杀或抢红包架构?
- 除了php,你还会哪种语言?
大佬面试题
- PHP垃圾回收机制
- PHP的弱语言类型如何实现的
- PHP异常的使用方法以及你的经历
- swoole的进程模型
- TCP/IP协议
滴滴
- 考的是strpos返回值与true false和==以及===的问题
- 简述tcp udp http与https的一些东西,除了php,你还写过哪几种语言,感觉有什么区别。
- 如何取出nginx日志中访问最多的前十个ip地址
- mysql中binlog是什么简述一下,一个事务在主从延迟中可能会产生什么问题
- 手写函数,用球形结构将一个文件夹中所有文件以及文件夹展开
- 为什么用swoole?swoole的优势是什么?
- tcp三次握手过程,详细一些。
- 握手过程中可能出什么问题
- 优先级队列如何实现
- 什么是epoll?你怎么用的,简单写下代码?accept阻塞在哪儿了?如果是epoll为什么不阻塞了?
- 异步和非阻塞的区别,说详细
- php中使用epoll的伪代码流程
- 进程,线程,协程的区别
- 最大堆最小堆实现优先级队列
- arp协议和rarp协议,说下arp劫持
- epoll的常用模式是哪两种?区别是什么?