首先申明该心得不主要是为面试者准备的,因为不管是面试者或是被面试者我们总能从他人那里学到一些东西,学东西不分途径,能给自己涨知识才是目的,个人很反对为了找到一份工作而只在那段找工作的期间努力学习的心态,做技术需要积累,需要实践,是一个漫长而寂寞的过程,如若您没那份耐心,劝君早日悬崖勒马,别做技术了,做其他的行业也能挣钱,也能养家糊口。
首先说说面试者的心态:作为一个公司的负责人和合作伙伴,你就要对得起公司给你的那份薪水,毕竟作为企业还是付出了很多,所以在寻找下一个合作人的时候就得想着能为公司找一个合适的人选,也为自己一起并肩奋斗过的队友找一个好的队友,杜绝坑队友,所以作为即将离职的面试者,也应该用一个好的心态去寻找合适的人。面试别人的时候我的关注点主要有以下几个(这只是我个人最看重的三点吧,其他人会怎么看,也许各有己见吧):
php设计模式清单:
https://learnku.com/docs/php-design-patterns/2018/php-design-pattern-reading-list/1525
3、事务级别以及事务的ACID特征,mysql默认属于哪个事务级别?
4、能不能讲一下php执行原理?
5、php加速器有哪些?apc、zend、xcache.....能不能讲一下它的加速原理?
6、Node.js能彻底代替php+apache是扯淡么。
7、怎样判断一个值是否存在于数组中?in_array(),array_key_exists,......
8、怎样判断select语句中是否使用了索引?explain
9、sphinx的中文分词词库使用第三方库还是自己建库?
10、如果一个被面试者经验少、基础差,此时却问些高深的知识。要怀疑它的稳定性,可以提问加班对他会不会有抵触。
11、mysql与mysqli的区别有哪些?
12、将来的发展方向?安全、还是数据挖掘、大数据处理?
13、php的面向对象:类的修饰符、封装、继承、多态体现方面
14、php 多态是什么?
15、有没有尝试过mysql主从备分、主主备份,碰到过什么问题,怎么解决的?
16、php的设计模式:单例模式、工厂模式、生产者模式......等等,他们的关键点以及应用场景
17、服务器状态码:200、202、301、404、500......
18、$i++与++$i的区别?
19、left join、right join 、交叉连接、inner join的含义及区别
20、mysql设计基础:三大范式、功能->思维导图、创建表的第一字段是什么?
21、mysql字段char、varchar、int、smallint、tinyint、mediumint、bigint、decimal、double、float字节数及应用场景。
22、memcache与mongoDB、Redis各自的使用场景是什么?
23、为什么mongoDB与Redis非但没有形成竞争反而是互补关系?
24、Redis数据类型有哪些?int、string、hash、set、list ?
25、vim的一些快捷键?
26、linux网络优化:查看进程ps -aux|grep mysqld、怎样查看最大文件打开数?
27、C语言中的虚函数是什么?
28、1条微薄要推送给100万个粉丝该怎么处理?
29、知道哪些算法?冒泡排序?快速排序?二分查找法,各自的时间复杂度?
30、yii thinkphp ci 各自优点
31、从发起请求到看到结果,这中间有哪些缓存?
32、get和post区别?
33、php 基本结构是什么?
34、memcache magent 分布式设计?
35、redis 分布式设计,如何设计?
36、mongo 集群架构是怎样的?
37、mysql 索引原理及sql性能优化
38、tcp/ip 网络协议,osi7层指是什么?
39、php 处理大数据业务
40、linux 应用 负载性能查看 ?
41、nginx 实战优化业务功能 ?
42、谈一下近三年来你的得意之作?
43、看看简历,会问一些过去做的项目的用户量、pv、吞吐量、相关难点和解决方法等
44、数据库设计经验,为什么进行分表? 分库?
45、一般多少数据量开始分表? 分库? 分库分表的目的? 什么是数据库垂直拆分? 水平拆分? 分区等等?可以举例说明
46、数据库优化有哪些? 分别需要注意什么?(sql语句优化、表优化、配置优化、硬件优化)
47、web开发方面会遇到哪些缓存? 分别如何优化?
48、给你256M的内存,对10G的文件进行排序(文件每行1个数字),如何实现?
49、对10G的文件进行查找如何实现?
50、统计10G文件每个关键字出现的次数如何实现?
51、假如你现在是12306火车订票的设计师,你该如何设计满足全国人民订票?
52、假如有1亿用户的访问量,你的服务器架构是怎样的? 用户信息的存储方案如何设计?
53、如果你是技术组长,所带团队任务进度无法完成你该如何解决?
54、如果在进度排满的前提下插入任务,你该如何保证总进度不延期?
55、如果有的工程师今天预定任务没有完成,你该如何解决?
56、从你的经验方面谈一下如何构建高性能web站点? 需要哪些环节? 步骤? 每个步骤需要注意什么如何优化等?
57、为什么要对数据库进行主从分离?
58、如何处理多服务器共享session?
59、一个10G的表,你用php程序统计某个字段出现的次数,思路是?
60、会告诉你一个nginx日志例子,用你认为最佳的编程语言统计一下http响应时间超过1秒的前10个url?
61、给你一个mysql配置文件,用你认为最佳的编程语言解析该文件?
62、给你两个路径a和b,写一个算法或思路计算a和b差距几层并显示a和b的交集?
63、给你一个url,在nginx配置一下rewrite指定到某个具体路径?
64、一个php文件的解释过程是? 一般加速php有哪些? 提高php整体性能会用到哪些技术?
65、session和cookie生存周期区别? 存储位置区别?
66、require、include、require_once、include_once区别? 加载区别? 如果程序按需加载某个php文件你如何实现?
67、chrome号称为多线程的,所以多线程和多进程的区别为?
68、php在2011年底出现hash碰撞,hash碰撞原理为? 如何进行修复?
69、web不安全因素有哪些? 分别如何防范?
70、假如两个单链表相交,写一个最优算法计算交点位置,说思路也可以?
71、假如你是技术组长? 如何提高团队效率?
72、nginx负载均衡有哪些? 如果其中一台服务器挂掉,报警机制如何实现?
73、不优化前提下,apache一般最大连接数为? nginx一般最大连接数为? mysql 每秒insert ? select ? update ? delete?
74、mysql 数据类型有哪些 ? 分别占用多少存储空间 ?
75、nginx设置缓存js、css、图片等信息,缓存的实现原理是?
76、如何提高缓存命中率? 如何对缓存进行颗粒化?
77、php的内存回收机制是?php的sapi有哪些?
一、计算机网络
基础部分
TCP报头格式
UDP报头格式
TCP/UDP区别(不仅是宏观上的,最好能根据各自的机制讲解清楚)
HTTP状态码(最好结合使用场景,比如在缓存命中时使用哪个)
HTTP协议(一些报头字段的作用,如cace-control、keep-alive)
OSI协议、TCP/IP协议以及每层对应的协议。
SESSION机制、cookie机制
TCP三次握手、四次挥手(这个问题真的要回答吐了,不过真的是面试官最喜欢问的,建议每天手撸一遍,而且不只是每次请求的过程,各种FIN_WAIT、TIME_WAIT状态也要掌握)。
打开网页到页面显示之间的过程(涵盖了各个方面,DNS解析过程,Nginx请求转发、连接建立和保持过程、浏览器内容渲染过程,考虑的越详细越好)。
http和https区别,https在请求时额外的过程,https是如何保证数据安全的
IP地址子网划分
POST和GET区别
DNS解析过程
深入部分
13. TCP如何保证数据的可靠传输的(这个问题可以引申出很多子问题,拥塞控制慢开始、拥塞避免、快重传、滑动窗口协议、停止等待协议、超时重传机制,最好都能掌握)
14. 地址解析协议ARP
15. 交换机和路由器的区别
二、数据库
基础部分
事务四大特性(ACID)
数据库隔离级别,每个级别会引发什么问题,mysql默认是哪个级别
MYSQL的两种存储引擎区别(事务、锁级别等等),各自的适用场景
数据库的优化(从sql语句优化和索引两个部分回答)
索引有B+索引和hash索引,各自的区别
B+索引数据结构,和B树的区别
索引的分类(主键索引、唯一索引),最左前缀原则,哪些情况索引会失效
聚集索引和非聚集索引区别。
有哪些锁(乐观锁悲观锁),select时怎么加排它锁
关系型数据库和非关系型数据库区别
了解nosql
数据库三范式,根据某个场景设计数据表(可以通过手绘ER图)
数据库的主从复制
使用explain优化sql和索引
long_query怎么解决
内连接、外连接、交叉连接、笛卡儿积等
深入
MVCC机制
根据具体场景,说明版本控制机制
死锁怎么解决
varchar和char的使用场景。
mysql并发情况下怎么解决(通过事务、隔离级别、锁)
Redis
redis数据结构有哪些
redis队列应用场景
redis和Memcached(支持数据持久化)
分布式使用场景(储存session等)
发布/订阅使用场景
三、操作系统
内存的页面置换算法
进程调度算法
进程间通信方式
进程线程区别
进程之间的通信
父子进程、孤儿进程
fork进程时的操作,
这个部分我回答的都不好,只能是死记硬背,建议基础好的同学多看看操作系统这部分,能大大加分。
四、算法
基础
剑指OFFER的各个题目是最常见的,即使不是原题也是题目的变体,因为面试不像笔试,一般不会出特别困难的题目,所以剑指OFFER上小而精的题目就非常适合。建议手刷一遍。PHP的同学可以参考专栏剑指OFFER
二叉树相关(层次遍历、求深度、求两个节点距离、翻转二叉树、前中后序遍历)
链表相关(插入节点、链表逆置、使用链表进行大数字的加减,双向链表实现队列、寻找链表中的环)
堆(大量数据中寻找最大N个数字几乎每次都会问,还有堆在插入时进行的调整)
排序(八大排序,各自的时间复杂度、排序算法的稳定性。快排几乎每次都问)
二分查找(一般会深入,如寻找数组总和为K的两个数字)
两个栈实现队列。
图(深度广度优先遍历、单源最短路径、最小生成树)
动态规划问题。
深入
红黑树性质
分治法和动态规划的区别
计算时间复杂度
二叉树和哈希表查找的时间复杂度
栈和链表是面试算法的时候经常用到的工具,多考虑怎么用数据结构的性质解决,因为面试不像笔试,对基础数据结构关注的比较多一些,一般问题也比较简单。然后取模也是常用的工具(比如有一次问怎么让100个进程按规定的权重被调用,就可以用取模的方式)。
面试官一般会先出简单的问题,然后深入地问下去,最好是根据他的思路走,因为能听懂他的提示也是需要考察的能力。
LINUX
硬链接和软连接区别
kill用法,某个进程杀不掉的原因(进入内核态,忽略kill信号)
linux用过的命令
系统管理命令(如查看内存使用、网络情况)
管道的使用 |
grep的使用,一定要掌握,每次都会问在文件中查找
shell脚本
find命令
awk使用
语言部分(PHP)
数组操作函数
字符串操作函数(数组和字符串的函数是最常问的,非常多,一定不要记混了)
指针和引用区别
堆和栈的区别
== ===区别
PHP的垃圾回收机制
zval结构
防sql注入
跨域问题
长链接和长轮询
面向对象、设计模式
接口和抽象类区别
单继承
construct的调用顺序(子类父类之间)
设计模式(工厂模式、策略模式、单例模式、装饰模式比较常见)
OOP特性,通过哪些机制实现的
重写和重载区别
静态类静态方法
根据某个需求设计一个类(主要考虑类之间的继承关系和属性的权限设置)
项目
项目中遇到的困难(提前想好,并且把实现或者优化方法说清楚)
系统的量级、pv、uv等
应对高并发的解决办法(分布式)
在项目中主要负责了哪些工作。
nginx的负载均衡
分布式缓存的一致性,服务器如何扩容(哈希环)
总之要把写在简历上的项目部分熟悉一遍,技术栈、项目功能、难点都要考虑好。
来源http://blog.csdn.net/acingdreamer/article/details/78479476 (谢谢博主)
另一个强烈推荐的面试提纲 https://blog.csdn.net/acingdreamer/article/details/78479476
MySQL 数据库性能优化之缓存参数优 https://www.2cto.com/database/201605/506272.html
MySQL 数据库性能优化之表结构 https://www.2cto.com/database/201605/506274.html
MySQL 数据库性能优化之索引优化 https://www.2cto.com/database/201605/506270.html
MySQL 数据库性能优化之SQL优化 https://www.2cto.com/database/201605/506249.html
MySQL数据库性能优化之存储引擎选择 https://www.2cto.com/database/201605/506253.html
MySQL数据库性能优化之硬件优化 http://blog.csdn.net/bemavery/article/details/46241533
MySQLB树 https://www.cnblogs.com/xiaoxi/p/6868087.html
PHP 线程,进程,并发 https://blog.mimvp.com/article/15484.html
PHP并发IO编程之路(深度长文)https://www.imooc.com/article/8449
多线程编程 - PHP 实现 https://cloud.tencent.com/developer/article/1012783
深入研究PHP及Zend Engine的线程安全模型 http://blog.codinglabs.org/articles/zend-thread-safety.html
php实现多进程、多线程 https://blog.csdn.net/ZHANG_TIMI/article/details/78342722
- php数组操作之键名比较与差集、交集赋值的方法
- php数组函数序列之array_intersect() 返回两个或多个数组的交集数组
- PHP数组的交集array_intersect(),array_intersect_assoc(),array_inter_key()函数的小问题
- php 归并排序 数组交集
- PHP数组交集的优化代码分析
- PHP数组对比函数,存在交集则返回真,否则返回假
- PHP 数组排序方法总结 推荐收藏
- PHP中的排序函数sort、asort、rsort、krsort、ksort区别分析
- php无限极分类递归排序实现方法
- PHP 冒泡排序算法的实现代码
- php二维数组排序详解
- PHP实现bitmap位图排序与求交集的方法
http://www.csdn.net/article/2014-07-24/2820837 Nginx、LVS及HAProxy负载均衡软件的优缺点详解
http://www.cnblogs.com/liwei0526vip/p/6370103.html 使用LVS实现负载均衡原理及安装配置详解
Nginx的配置与部署研究,Upstream负载均衡模块 http://www.linuxidc.com/Linux/2013-04/82526p2.htm
CentOS 6.2实战部署Nginx+MySQL+PHP http://www.linuxidc.com/Linux/2013-09/90020.htm
使用Nginx搭建WEB服务器 http://www.linuxidc.com/Linux/2013-09/89768.htm
搭建基于Linux6.3+Nginx1.2+PHP5+MySQL5.5的Web服务器全过程 http://www.linuxidc.com/Linux/2013-09/89692.htm
CentOS 6.3下Nginx性能调优 http://www.linuxidc.com/Linux/2013-09/89656.htm
CentOS 6.3下配置Nginx加载ngx_pagespeed模块 http://www.linuxidc.com/Linux/2013-09/89657.htm
CentOS 6.4安装配置Nginx+Pcre+php-fpm http://www.linuxidc.com/Linux/2013-08/88984.htm
Nginx安装配置使用详细笔记 http://www.linuxidc.com/Linux/2014-07/104499.htm
Nginx日志过滤 使用ngx_log_if不记录特定日志 http://www.linuxidc.com/Linux/2014-07/104686.htm
http://www.jb51.net/article/107414.htm (nginx日志实现访问异常报警)