分享一下最近的面试题,都是大厂

前言

  • 定位大概是中高级,这个阶段主要考察的是原理相关的东西,语法层面几乎不会问。
  • 建议不要去背面试题,因为大部分问题都会追问,是不是理解了一问就问得出来。面试题只是帮助我们了解自己技术方面的缺陷,背几个面试题对自己没有任何帮助。
  • 获取答案的方式在每个标题后面的括号里,都是书或者源代码,系统性补充知识最佳途径就是经典书籍和优质源代码,网上博客知识点过于零散,难以深入。redis和zend vm的核心代码强烈推荐大家去看一下,很有帮助

操作系统(《CSAPP》/《APUE》)

  • IO多路复用是什么?有哪些api?
  • select和epoll的区别?水平触发和边缘触发的区别是啥?使用的时候需要注意什么?
  • epoll储存描述符的数据结构是什么?
  • select有描述符限制吗?是多少?
  • 进程/线程/协程区别?go和swoole的协程实现有啥区别?(分配资源的基本单位/运行和调度的基本单位/用户线程,M:N模型和N:1模型)

PHP(php源代码,主流php框架源代码)

  • 描述一下cli模式下的几个生命周期?
  • php-fpm运行机制?(master管理,worker 循环accept)
  • php-fpm模式下,kill -9 master-pid,会怎么样?kill matser-pid呢?(信号机制)
  • 内存分配流程?为什么要这么设计?
  • GC的出现是为了解决什么问题?什么时候会触发GC?说下大概流程
  • php里的数组是怎么实现的?(这里要注意下php5和php7实现的区别,优化了非常多)
  • nginx和php-fpm的通信机制?fast-cgi和cgi区别?
  • php-fpm创建worker进程的规则是什么?不同场景下怎么选择?
  • php和mysql的通信机制?长链接和短链接啥区别?怎么实现的?连接池要怎么实现?
  • swoole协程的原理?(遇到阻塞时引发php栈和c栈的切换,细节可以参考下我的文章)
  • 依赖注入是什么?如何实现的?能解决什么问题?(代码层面不再依赖具体实现,解耦)

mysql(《高性能mysql》/《mysql技术内幕 innodb储存引擎》)

  • innodb的索引组织方式?(聚簇索引必须要很清楚,注意innodb聚簇索引叶子结点保存的是完整数据,innodb普通索引叶子保存的是记录的主键,myisam索引叶子保存的是记录的位置/偏移量)
  • B+树的结构和插入细节?为什么主键一般都要自增?和B树什么区别?为什么索引要使用B+树不是B树也不是其他的平衡树?为什么redis可以用跳表?(关键词:页的分裂,随机IO,缓存体系)
  • 常见的优化(这里我就不展开了,主要考察覆盖索引查询和最左匹配,其实只要清楚innodb索引的结构,这些都不需要记忆,自然而然推导出来的)
  • redolog/undolog/binlog的区别?binlog的几种格式?说下两阶段提交?
  • 事务隔离级别和不同级别会出现的问题,innodb默认哪个级别?MVCC怎么实现的?快照读和当前读有啥区别?幻读的问题怎么解决?
  • 死锁什么时候会出现?应用层应该怎么做避免死锁?mysql是怎么处理死锁的呢?
  • int占多少字节?bigint呢?int(3)和int(11)有区别吗?可以往int(3)里存1亿吗?varchar最长多少?
  • sql的执行流程(原始sql->词法语法分析生成AST->关系代数表达式(逻辑计划)->逻辑优化(谓词下推/常量传递)->物理查询优化(计算最佳cost路径,扫表还是使用索引,join算法)->执行,仅做参考)

redis(redis源代码)

  • sds的结构是什么?为什么要存长度?跟c里的字符串有什么区别?(关键词:获取长度复杂度O(1)和O(n),二进制安全,保存\0,跟C库字符串函数可以通用)
  • hash怎么实现的?怎么解决hash冲突?除了hashTable还有别的吗?
  • zset怎么实现的?跳表是怎么插入的?为什么选择跳表不用其他平衡二叉树?除了跳表还有别的吗?
  • rehash过程?会主动rehash吗?
  • 用redis可以实现队列吗?有什么优点和缺点?
  • 用redis怎么实现一个延时队列?
  • rdb和aof过程?rdb为什么可以用创建子进程的方式进行?(这里考察一个cow)这两种持久化方式会丢数据吗?
  • redis为什么快?(主要考察一个IO多路复用和单线程不加锁)
  • 一致性哈希是什么?节点较少时数据分布不均匀怎么办?
  • 简单说下几种key的淘汰策略,redis里的lru算法,什么时候会触发?实现细节是什么?怎么保证淘汰合理的key?
  • lua脚本的作用是什么?
  • 缓存击穿/穿透/雪崩的处理策略

nginx

  • LVS和Nginx分别作用在osi哪一层?
  • 负载均衡算法

数据结构

  • 布隆过滤器,什么时候用?优点是什么?

算法

  • leetcode easy级别的题目,具体我就不写了,难度比较低
本作品采用《CC 协议》,转载必须注明作者和本文链接
本帖由系统于 4年前 自动加精
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 40

看了后,我是一个假程序员 :joy:

4年前 评论
哇酷哦 3年前
哇酷哦 3年前

看了后,我是一个假程序员 :joy:

4年前 评论
哇酷哦 3年前
哇酷哦 3年前
小滕

很不错,都是常见的面试题目。:+

4年前 评论

看了你这个,,,今天终于去把 IO 多路复用,select、poll 和 epoll 了解了下,,,

4年前 评论

我也是一个假程序员 :sob:

4年前 评论
Artist0618 4年前

....一个不会。。。。三年经验 贼尴尬

4年前 评论
houmuxu

感觉自己两年多白干了,一脸懵逼的进来,一脸懵逼的出去 :joy:

4年前 评论

这些学会了,薪资会涨多少? :joy:

3年前 评论

我可能是个假的程序员

4年前 评论
jaak

:pensive:表示都不太懂

3年前 评论

作为一个复制粘贴者,表示都不会

3年前 评论

都不会啊 :joy: :joy:

3年前 评论

很多php大佬在好未来呀

3年前 评论
wangchunbo

布隆过滤器,java常用,php也要吗》?

3年前 评论
BeCoding 3年前
wangchunbo

@tianlan 参考答案,都在百度。没必要重复列出来哈。

3年前 评论
tianlan 3年前
krystal_zt

我可能是一个假的程序员 :scream:

3年前 评论

看看題目,再看看我的職位。 嗯~幻覺黎既,嚇我唔到既。

3年前 评论

看完之后,我觉得我得转行

3年前 评论
自由与温暖是遥不可及的梦想

我是个假的程序员。我的真实身份就是一个码农

3年前 评论

:joy:布隆过滤那个被人问过一个相关的问题:布隆过滤能百分之百命中吗?如果不是,那命中率是多少

3年前 评论
小滕 3年前

其实都是 Java 常规面试题,只不过套了 PHP 的壳而已。能问出你是不是科班出身的,毕竟很多东西看起来是问某语言其实问的是计算机四大基础。 这些问题问 PHP 有点超纲了,懂这些的,早就用其他语言去了 ,谁还干 PHP。 包括 Swoole 其实跟 PHP 的关系已经不大了。

3年前 评论
蔺焕然

哈哈 这些问题问出来 显得很专业

4年前 评论

老哥几年经验?

4年前 评论
laaa 4年前
乐观的摸一摸头 (楼主) 4年前
乐观的摸一摸头 (楼主) 4年前
banmingi 3年前
banmingi 3年前

PHP开发是不是最后都要去重学C语言呀 大佬?

4年前 评论
乐观的摸一摸头 (楼主) 4年前
萧潇 (作者) 4年前
admin0 3年前
followyounger

整理的不错。 面试题没有万能的,每次面试其实都能遇到自己不会的,其实很考察一个人的能力。 自己最近面试了很多大厂,深有感触。

4年前 评论

这么nb

4年前 评论

挺好的,redis的题目刚好是我的盲点。谢谢辣

4年前 评论
panda-sir

题目很不错 有部分确实不清楚 刚好可以按照楼主的复习复习 做做笔记 :+1:

4年前 评论

真叫人头大 :neutral_face:

4年前 评论

你放这些题目,把很多人吓到了。请说清楚对的岗位职责,不然可能产生一些误导。

3年前 评论

老哥拿到offer了吗

4年前 评论
乐观的摸一摸头 (楼主) 4年前
phperAdolph (作者) 4年前
OMGZui

挺常规的,没有什么红黑树(狗头

4年前 评论

获取答案的方式我已经加上了,请问在哪啊,我没找见

4年前 评论
乐观的摸一摸头 (楼主) 4年前

我是一个只会curd的假程序员

4年前 评论
panda-sir

楼主是本科么 :joy:

4年前 评论

没见过大厂,问了基本都说要本科 211 :joy:

3年前 评论

我可能是假的程序员

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!