1、简单做一下自我介绍,然后谈一下近三年来你的得意之作?
点评:
A、此问题考察你的描述同简历的相符之处
B、从描述中,发现可以追问的点,追问细节,你是不是真参与了,参与了多少
C、从项目的周期、职责、复杂程序对你的能力进行定位和评估
2、面试官看过你的简历,会问一些你做的项目的用户量、PV、吞吐量、相关难点和解决方法等
点评:
A、目标同上。
3、数据库设计经验,为什么进行分表?分库? 一般多少数据量开始分表?分库? 分库分表的目的? 什么是数据库垂直拆分?水平拆分?分区等等?可以举例说明
点评:
A、考察常规技术的掌握
B、通过概念回答的过程中,要求明确具体场景
C、问至操作细节,来考察面试者自己是否做过
4、数据库优化有哪些?分别需要注意什么?
点评:
A、此问题相对较泛,回答也可以从多个层面回答。
B、在实际中问,可能会更加具体,比如数据库索引对数据库优化的作用和影响
5、Web开发方面会遇到哪些缓存?分别如何优化?
点评:
A、此问题也比较泛,但是我们回答要有一个主线。
B、建议结合一个请求从发起到结束的全流程,各个节点来进行回答。
6、给你256M的内存,对10G的文件进行排序(文件每行1个数字),如何实现? 对10G的文件进行查找如何实现?统计10G文件每个关键字出现的次数如何实现?
点评:
A、先从粗放入手
B、通过面试官和面试者的来回互动,考察对特定算法和方法的使用
C、变换形式进行考察,进行脑力击荡。
7、假如你现在是12306火车订票的设计师,你该如何设计满足全国人民订票?
点评:
A、此问答也比较泛,考察的是对解决一个问题的分析思路
B、从哪些方面,哪些层面对问题进行考察
C、对于想到的方面和层面,再细致挖掘考虑是否严谨
8、假如有1亿用户的访问量,你的服务器架构是怎样的?用户信息的存储方案如何设计?
点评:
A、点评基本同上
B、用户信息存储考察面试者对用户信息业务本身的了解、存储方式及其特点的了解。
9、如果你是技术组长,所带团队任务进度无法完成你该如何解决?如果在进度排满的前提下插入任务,你该如何保证总进度不延期?如果有的工程师今天预定任务没有完成,你该如何解决?假如你是技术组长?如何提高团队效率?
点评:
A、考察带队能力
B、注意不是所有的问题都有非常肯定和完美的答案,思考和解决问题的方式,比回答问题本身更为重要
10、从你的经验方面谈一下如何构建高性能Web站点?需要哪些环节?步骤? 每个步骤需要注意什么如何优化等?
点评:
A、点评同第6题
B、建议结合一个请求从发起到结束的全流程,各个节点来进行回答。
11、为什么要对数据库进行主从分离?
点评:
A、考察基本概念,回答可以多轮互动,越问越深,可以考察学习者的态度。
B、对问题的掌握深度,考察出是否真的做过
C、可以延展至相关问题,比如数据库的备份、扩容等话题
12、如何处理多服务器共享Session?
点评:
A、考察通用技术处理
B、还可以问及Web服务器集群相关的其他问题
13、一个10G的表,你用PHP程序统计某个字段出现的次数,思路是?
点评:
A、先粗放式着手
B、再一步步增加限定条件,求得最为高效之法
14、会告诉你一个Nginx日志例子,用你认为最佳的编程语言统计一下http响应时间超过1秒的前10个url?
点评:
A、日志分析
B、简单明快的方式是 Shell命令组合awk
15、给你一个Mysql配置文件,用你认为最佳的编程语言解析该文件?
点评:
A、有些语言本身就提供了函数
16、给你两个路径a和b,写一个算法或思路计算a和b差距几层并显示a和b的交集?
点评:
A、字符串操作
17、给你一个url,在Nginx配置一下rewrite指定到某个具体路径?
点评:
A、具体技术操作
18、一个PHP文件的解释过程是?一般加速PHP有哪些?提高PHP整体性能会用到哪些技术? PHP的内存回收机制是?
点评:
A、知其然,知其所以然
B、考察对PHP低层的了解
C、可以针对各种优化方面,深入来问,问到不能回答为止
19、Session和Cookie生存周期区别?存储位置区别?
点评:
A、先提问比较概念上的不同
B、再比较应用场景和效果上的不同
20、require、include、require_once、include_once区别?加载区别?如果程序按需加载某个PHP文件你如何实现?
点评:
A、考察基本概念和技术
B、可以一些易混淆的知识
21、Chrome号称为多线程的,所以多线程和多进程的区别为?
点评:
A、考察基本概念
B、考虑业务应用
22、PHP在2011年底出现Hash碰撞,Hash碰撞原理为?如何进行修复?
点评:
A、考察安全和业界问题的关心
B、考察解决问题的思路和对不知道问题的接受能力
23、Web不安全因素有哪些?分别如何防范?
点评:
A、比较宽泛,先考出基本点
B、再针对基本点进行细致提问,细化到代码编写和配置层面
24、假如两个单链表相交,写一个最优算法计算交点位置,说思路也可以?
点评:
A、算法题
B、步步优化
25、Nginx负载均衡有哪些?如果其中一台服务器挂掉,报警机制如何实现?
点评:
A、考察 Nginx的功用,工作原理
B、考察运维报警,以及异常检查
26、不优化前提下,Apache一般最大连接数为? Nginx一般最大连接数为? Mysql每秒insert ? select ? update ? delete?
点评:
A、考察 LAMP,LNMP基本组件的常规配置和性能
B、可以进一步考察这些配置的调整和优化
C、更进一步考察在操作系统层面的优化
27、Mysql数据类型有哪些 ?分别占用多少存储空间 ?
点评:
A、考察MySQL基本知识
B、可以延伸到 MySQL的其他基本知识
C、索引、缓存、存储引擎等
28、Nginx设置缓存JS、CSS、图片等信息,缓存的实现原理是?
点评:
A、考察前端优化
B、考察Nginx配置
29、如何提高缓存命中率?如何对缓存进行颗粒化?
A、考察对缓存本身的理解和使用
30、我的所有问题都问完了,你有什么问题问我没有?
点评:
A、尊重面试者
B、了解面试者关心的问题,忌谈工资
以上问题,你都会吗?你都知其然,并知其所以然吗?如果不是,请了解优才网的全栈工程师培训课程,这些内容尽在全栈课堂。
一般有三年以上php开发经验去百度、腾讯面试,常会接触的面试题小总结一下:
0.简单做一下自我介绍,? 然后谈一下近三年来你的得意之作?
1.面试官看过你的简历,会问一些你做的项目的用户量、pv、吞吐量、相关难点和解决方法等
Pv 网站浏览量
吞吐量几个重要参数:QPS(TPS)、并发数、响应时间
QPS(TPS):每秒钟request/事务 数量
并发数: 系统同时处理的request/事务数
响应时间: 一般取平均响应时间
2.数据库设计经验,为什么进行分表?分库? 分区等等?可以举例说明
一般多少数据量开始分表? 分库? 分库分表的目的?什么是数据库垂直拆分?水平拆分?
数据库中的数据量不一定是可控的,在未进行分库分表的情况下,随着时间和业务的发展,库中的表会越来越多,表中的数据量也会越来越大,相应地,数据操作,增删改查的开销也会越来越大;另外,由于无法进行分布式式部署,而一台服务器的资源(CPU、磁盘、内存、IO等)是有限的,最终数据库所能承载的数据量、数据处理能力都将遭遇瓶颈。
几千万级别,在做很多操作都比较吃力才分表
分库分表有垂直切分和水平切分两种。
3.1 何谓垂直切分,即将表按照功能模块、关系密切程度划分出来,部署到不同的库上。例如,我们会建立定义数据库workDB、商品数据库payDB、用户数据库userDB、日志数据库logDB等,分别用于存储项目数据定义表、商品定义表、用户数据表、日志数据表等。
3.2 何谓水平切分,当一个表中的数据量过大时,我们可以把该表的数据按照某种规则,例如userID散列,进行划分,然后存储到多个结构相同的表,和不同的库上。例如,我们的userDB中的用户数据表中,每一个表的数据量都很大,就可以把userDB切分为结构相同的多个userDB:part0DB、part1DB等,再将userDB上的用户数据表userTable,切分为很多userTable:userTable0、userTable1等,然后将这些表按照一定的规则存储到多个userDB上。
3.3 应该使用哪一种方式来实施数据库分库分表,这要看数据库中数据量的瓶颈所在,并综合项目的业务类型进行考虑。
如果数据库是因为表太多而造成海量数据,并且项目的各项业务逻辑划分清晰、低耦合,那么规则简单明了、容易实施的垂直切分必是首选。
而如果数据库中的表并不多,但单表的数据量很大、或数据热度很高,这种情况之下就应该选择水平切分,水平切分比垂直切分要复杂一些,它将原本逻辑上属于一体的数据进行了物理分割,除了在分割时要对分割的粒度做好评估,考虑数据平均和负载平均,后期也将对项目人员及应用程序产生额外的数据管理负担。
在现实项目中,往往是这两种情况兼而有之,这就需要做出权衡,甚至既需要垂直切分,又需要水平切分。我们的游戏项目便综合使用了垂直与水平切分,我们首先对数据库进行垂直切分,然后,再针对一部分表,通常是用户数据表,进行水平切分。
4 分库分表存在的问题。
4.1 事务问题。
在执行分库分表之后,由于数据存储到了不同的库上,数据库事务管理出现了困难。如果依赖数据库本身的分布式事务管理功能去执行事务,将付出高昂的性能代价;如果由应用程序去协助控制,形成程序逻辑上的事务,又会造成编程方面的负担。
4.2 跨库跨表的join问题。
在执行了分库分表之后,难以避免会将原本逻辑关联性很强的数据划分到不同的表、不同的库上,这时,表的关联操作将受到限制,我们无法join位于不同分库的表,也无法join分表粒度不同的表,结果原本一次查询能够完成的业务,可能需要多次查询才能完成。
4.3 额外的数据管理负担和数据运算压力。
额外的数据管理负担,最显而易见的就是数据的定位问题和数据的增删改查的重复执行问题,这些都可以通过应用程序解决,但必然引起额外的逻辑运算,例如,对于一个记录用户成绩的用户数据表userTable,业务要求查出成绩最好的100位,在进行分表之前,只需一个order by语句就可以搞定,但是在进行分表之后,将需要n个order by语句,分别查出每一个分表的前100名用户数据,然后再对这些数据进行合并计算,才能得出结果
垂直切分
即业务切分
下面来分析下垂直切分的优缺点:
优点:
· 拆分后业务清晰,拆分规则明确。
· 系统之间整合或扩展容易。
· 数据维护简单。
缺点:
· 部分业务表无法 join,只能通过接口方式解决,提高了系统复杂度。
· 受每种业务不同的限制存在单库性能瓶颈,不易数据扩展跟性能提高。
· 事务处理复杂。
由于垂直切分是按照业务的分类将表分散到不同的库,所以有些业务表会过于庞大,存在单库读写与存储瓶
颈,所以就需要水平拆分来做解决。
相对于垂直拆分,水平拆分不是将表做分类,而是按照某个字段的某种规则来分散到多个库之中,每个表中
包含一部分数据。简单来说,我们可以将数据的水平切分理解为是按照数据行的切分,就是将表中的某些行切分到一个数据库,而另外的某些行又切分到其他的数据库中
几种典型的分片规则包括:
· 按照用户 ID 求模,将数据分散到不同的数据库,具有相同数据用户的数据都被分散到一个库中。
· 按照日期,将不同月甚至日的数据分散到不同的库中。
· 按照某个特定的字段求摸,或者根据特定范围段分散到不同的库中。
如图,切分原则都是根据业务找到适合的切分规则分散到不同的库,下面用用户 ID 求模举例:
优点:
· 拆分规则抽象好,join 操作基本可以数据库做。
· 不存在单库大数据,高并发的性能瓶颈。
· 应用端改造较少。
· 提高了系统的稳定性跟负载能力。
缺点:
· 拆分规则难以抽象。
· 分片事务一致性难以解决。
· 数据多次扩展难度跟维护量极大。
· 跨库 join 性能较差。
前面讲了垂直切分跟水平切分的不同跟优缺点,会发现每种切分方式都有缺点,但共同的特点缺点有:
· 引入分布式事务的问题。
· 跨节点 Join 的问题。
· 跨节点合并排序分页问题。
· 多数据源管理问题。
一般来讲业务存在着复杂 join 的场景是难以切分的,往往业务独立的易于切分。如何切分,切分到何种
程度是考验技术架构的一个难题。
由于数据切分后数据 Join 的难度在此也分享一下数据切分的经验:
第一原则:能不切分尽量不要切分。
第二原则:如果要切分一定要选择合适的切分规则,提前规划好。
第三原则:数据切分尽量通过数据冗余或表分组(Table Group)来降低跨库Join 的可能。
第四原则:由于数据库中间件对数据 Join 实现的优劣难以把握,而且实现高性能难度极大,业务读取尽量
少使用多表 Join。
3.数据库优化有哪些?分别需要注意什么?
4.web开发方面会遇到哪些缓存?分别如何优化?
1.数据库缓存
我们可能听说过memcached,它就是一种数据库层面的缓存方案。数据库缓存是指,当web应用的关系比较复杂,数据库中的表很多的时候,如果频繁进行 数据库查询,很容易导致数据库不堪重荷。为了提供查询的性能,将查询后的数据放到内存中进行缓存,下次查询时,直接从内存缓存直接返回,提供响应效率。
2.CDN缓存
CDN缓存一般是由网站管理员自己部署,为了让他们的网站更容易扩展并获得更好的性能。通常情况下,浏览器先向CDN网关发起Web请求,网关服务器后面对应着一台或多台负载均衡源服务器,会根据它们的负载请求,动态将请求转发到合适的源服务器上。从浏览器角度来看,整个CDN就是一个源服务器,从这个层面来说,浏览器和服务器之间的缓存机制,在这种架构下同样适用。
3.代理服务器缓存
代理服务器是浏览器和源服务器之间的中间服务器,浏览器先向这个中间服务器发起Web请求,经过处理后(比如权限验证,缓存匹配等),再将请求转发到源服务器。代理服务器缓存的运作原理跟浏览器的运作原理差不多,只是规模更大。
4.浏览器缓存
每个浏览器都实现了 HTTP 缓存,我们通过浏览器使用HTTP协议与服务器交互的时候,浏览器就会根据一套与服务器约定的规则进行缓存工作。
5.应用层缓存
应用层缓存是指我们在代码层面上做的缓存。通过代码逻辑,把曾经请求过的数据或资源等,缓存起来,再次需要数据时通过逻辑上的处理选择可用的缓存的数据。
给你256M的内存,对10G的文件进行排序(文件每行1个数字),如何实现?对10G的文件进行查找如何实现?统计10G文件每个关键字出现的次数如何实现?
1、排序的实现
这是一个单机外部排序的典型题目。具体的方法就是先分块进行排序然后多路归并成输出文件。
2、查找
如果不能对文件进行处理的话,只能遍历进行查找。
如果是可以对文件进行处理的话,那么上面已经排序好了文件,就可以进行二分查找。
3、统计
如果不能对文件进行处理的话,还是没有好的办法,只能是遍历一遍。
如果已经拍好序了,那么就可以直接二分查找。在找到的位置向两头搜索出现的个数。
6.假如你现在是12306火车订票的设计师,你该如何设计满足全国人民订票?
7.假如有1亿用户的访问量,你的服务器架构是怎样的?用户信息的存储方案如何设计?
https://www.youkuaiyun.com/article/2014-12-23/2823275
8.如果你是技术组长,所带团队任务进度无法完成你该如何解决?
如果在进度排满的前提下插入任务,你该如何保证总进度不延期?
如果有的工程师今天预定任务没有完成,你该如何解决?
9.从你的经验方面谈一下如何构建高性能web站点?需要哪些环节?步骤? 每个步骤需要注意什么如何优化等?
10. 为什么要对数据库进行主从分离?
http://www.mamicode.com/info-detail-1343020.html
如何处理多服务器共享session?
https://www.cnblogs.com/lingshao/p/5580287.html
一个10G的表,你用php程序统计某个字段出现的次数,思路是?
直接count(会死掉的) 分批count();
13. 会告诉你一个nginx日志例子,用你认为最佳的编程语言统计一下http响应时间超过1秒的前10个url?
14. 给你一个mysql配置文件,用你认为最佳的编程语言解析该文件?
15. 给你两个路径a和b,写一个算法或思路计算a和b差距几层并显示a和b的交集?
16. 给你一个url,在nginx配置一下rewrite指定到某个具体路径?
if ( $host != 'www.abc.com' ) {
rewrite ^/(.*) http://www.abc.com/$1 permanent;
}
一个php文件的解释过程是?一般加速php有哪些? 提高php整体性能会用到哪些技术?
https://www.cnblogs.com/hongfei/archive/2012/06/12/2547119.html
https://jingyan.baidu.com/article/7082dc1c629464e40a89bd36.html
18. session和cookie生存周期区别?存储位置区别?
19. require、include、require_once、include_once区别?加载区别?如果程序按需加载某个php文件你如何实现?
http://blog.youkuaiyun.com/u012643122/article/details/46896411
20. chrome号称为多线程的,所以多线程和多进程的区别为?
21. php在2011年底出现hash碰撞,hash碰撞原理为?如何进行修复?
web不安全因素有哪些?分别如何防范?
http://blog.youkuaiyun.com/lifushan123/article/details/45197753
假如两个单链表相交,写一个最优算法计算交点位置,说思路也可以?
https://zhidao.baidu.com/question/1689718158270538108.html
24. 假如你是技术组长?如何提高团队效率?
https://zhidao.baidu.com/question/1689718158270538108.html
nginx负载均衡有哪些?如果其中一台服务器挂掉,报警机制如何实现?
不优化前提下,apache一般最大连接数为? nginx一般最大连接数为? mysql每秒insert ?
select ? update ? delete?
mysql 数据类型有哪些 ?分别占用多少存储空间 ?
http://blog.youkuaiyun.com/baofeidyz/article/details/69666199
nginx设置缓存js、css、图片等信息,缓存的实现原理是?
https://www.cnblogs.com/jun1019/p/6260662.html
http://blog.youkuaiyun.com/wangjianno2/article/details/75201020
如何提高缓存命中率? 如何对缓存进行颗粒化?
http://blog.youkuaiyun.com/dinglang_2009/article/details/53420215
php的内存回收机制是?
http://blog.youkuaiyun.com/u011250882/article/details/49564043
https://www.cnblogs.com/xinghun/p/5660051.html
31. 我的所有问题都问完了,你有什么问题问我没有?
平时喜欢哪些php书籍及博客?优快云、虎嗅、猎云
2、js闭包是什么?
http://www.jb51.net/article/83524.htm
3、for与foreach哪个更快?
4、php鸟哥是谁?能不能讲一下php执行原理?
http://www.jb51.net/article/74907.htm
5、php加速器有哪些?apc、zend、xcache.....能不能讲一下它的加速原理?
http://www.jb51.net/article/48031.htm
6、Node.js能彻底代替php+apache是扯淡。
7、怎样判断一个值是否存在于数组中?in_array(),array_key_exists,......
8、怎样判断select语句中是否使用了索引?explain
9、sphinx的中文分词词库使用第三方库还是自己建库? http://blog.youkuaiyun.com/qq_32080545/article/details/52383896
10、如果一个被面试者经验少、基础差,此时却问些高深的知识。要怀疑它的稳定性,可以提问加班对他会不会有抵触。
11、mysql与mysqli的区别有哪些?
https://www.cnblogs.com/yuanke/p/6480794.html?utm_source=itdadao&utm_medium=referral
12、将来的发展方向?安全、还是数据挖掘、大数据处理?
13、php的面向对象:类的修饰符、封装、继承、多态体现方面
https://segmentfault.com/a/1190000008802881
14、php 多态是什么?
https://www.cnblogs.com/giantpanda/archive/2012/11/10/2763998.html
15、Type Hinting:http://www.php.net/manual/en/language.oop5.typehinting.php
16、php的设计模式:单例模式、工厂模式、生产者模式......等23种
17、服务器状态码:200、202、301、404、500......
https://www.cnblogs.com/wjhblogs/p/4795278.html
18、i++与++i的区别?
https://www.zhihu.com/question/19811087
19、项目开发:电商项目中的购物车数据持久化、考试系统的安全性考虑、 http://blog.youkuaiyun.com/lee576/article/details/1927021
20、mysql设计基础:三大范式、功能->思维导图、创建表的第一字段是什么?
21、mysql字段char、varchar、int、smallint、tinyint、mediumint、bigint、decimal、double、float字节数及应用场景。
http://blog.youkuaiyun.com/belen_xue/article/details/54357018
22、memcache与mongoDB、Redis各自的使用场景是什么?
23、为什么mongoDB与Redis非但没有形成竞争反而是互补关系?
24、Redis数据类型有哪些?int、string、hash、set、list?
25、安装linux软件时使用make方式还使用yum方式?
26、linux网络优化:查看进程ps -aux|grep mysqld、怎样查看最大文件打开数?
27、C语言中的虚函数是什么?
https://iask.sina.com.cn/b/4013671.html
28、1条微薄要推送给100万个粉丝该怎么处理?
29、知道哪些算法?冒泡排序?快速排序?二分查找法?
30、yii thinkphp ci各自优点
31、php 设计模式有哪些?
https://www.cnblogs.com/hellohell/p/5718175.html
32、c 排序算法有哪些?
33、php 基本结构是什么?
34、memcache magent分布式设计?
35、redis 分布式设计,如何设计?
36、mongo 集群架构是怎样的?
37、mysql 索引原理及sql性能优化
38、tcp/ip 网络协议,osi7层指是什么?
39、php 处理大数据业务
40、linux 应用 负载性能查看 ?
41、nginx 实战优化业务功能 ?