抱歉,你查看的文章已删除

回答:这几天找工作遇到的面试题目

https://laravel-china.org/articles/9983/the-interview-questions-we-met-in-the-last-few-days

原文地址:这几天找工作遇到的面试题目

(前言:原文只是提出了问题,并没有给出答案。基础题,全部来自百度。算法题,我在这里给出部分问题的个人答案。因为考虑是面试题,不会让你真刀真枪的上去写代码,因此大部分只提供思路,不提供具体实施。如果您有更好的答案请留言!

先说下个人情况,截至2018年4月,我学习PHP四年,工作三年。(大公司,只面试过一次……嗯……一次就过了……)目前只能算是中级PHP,解决问题的思路有限,方法不够聪明,请大家谅解。

(Tip:一个问题最好能给出多个答案,并能说出多个答案的优劣,绝对会加分的)

1、给你四个坐标点,判断它们能不能组成一个矩形,如判断(0,0,0,1,1,1,1,0)能组成一个矩形。

该问题是个很入门的问题,考验人解决问题的思路,高中数学可以完美解决。

常见思路:求边长,判断长度是否相等,是否垂直。

我的思路:勾股定理。矩形是对角线相等的四边形。只要任意三点不在一条直线上,任选一点,求这一点到另外三点的长度的平方,两个短的之和如果等于最长的,那么这就是矩形。

2、写一段代码判断单向链表中有没有形成环,如果形成环,请找出环的入口处,即P点

基础问题,考的数据结构。

单向链表的结构是一个块内存里存着数据和下一块内存的地址。

参考:https://www.cnblogs.com/ghimtim/p/4882916.html

考官其实就想你回答 快慢针。

3、写一个函数,获取一篇文章内容中的全部图片,并下载

该问题出的很聪明,考了很多个知识点。如果做过PHP的爬虫,这并不是什么难事

第一,读一个文章的方法很多:file_get_contents可以,fopen可以直接读网页,curl也可以。

第二,获取图片,可以用strip_tags($string '<img>');

第三,下载。用curl拿到图片,依次使用fopen,fwrite,fclose就可以了

附:爬虫交流:https://www.yanshuo.me/r/zhfuli/ 请在人少的时候偷偷打开。

4、获取当前客户端的IP地址,并判断是否在(111.111.111.111,222.222.222.222)

基础问题,获取客户端IP的方法:$_SERVER'REMOTE_ADDR';

但是,如果对方是代理,或者匿名的时候,就很麻烦了。

参考:https://www.cnblogs.com/rendd/p/6183094.html

6、什么是CSRF攻击?XSS攻击?如何防范?

CSRF:跨站请求伪造 XSS:跨站脚本攻击。这两个东西完全不一样。千万不要搞混了。

怎么防,得自己百度。我不太会。

7、应用中我们经常会遇到在user表随机调取10条数据来展示的情况,简述你如何实现该功能。

这个问题难点在随机,最好和业务相结合来回答。需要考虑问题是,第一ID肯定不是顺序的,有些user会失效,肯定不能拿出来。第二,表中数据肯定多得很,不能随便全表读,会被同事,运维,测试,产品怼死的。

我的思路:用limit 1 1000 取可控一组数据,再通过PHP从中取10个。

8、从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是连续的

这个问题有个关键点,扑克牌,1-13 不能再多了。这就很简单了。用PHP来做,定义一个数组分别存着1到13,拿出一个,置空一个,最后看下 这五个置空的 是不是连续的。这种情况不考虑抽出的顺序。

9、两条相交的单向链表,如何求它们的第一个公共节点

又是考链表的。不多说啦 百度吧。

10、最长公共子序列问题LCS,如有1,2,5,11,32,15,77和99,32,15,5,1,77两个数组,找到它们共同都拥有的数,写出时间复杂度最优的代码,不能用array_intersect(这里有坑,需要去研究一下动态规划)。

这个肯定是动态规划的方法。但是我已经忘了怎么写了。以前参加ACM的时候训练过。

11、linux的内存分配和多线程原理

不好回答。需要自己去看下相关的文章。额,我好多同事也答不出来这个问题。

12、MYSQL中主键与唯一索引的区别

主键:绝对不能有空值。唯一索引:可以有空值

参考:https://www.cnblogs.com/lonelyxmas/p/4594624.html

13、http与https的主要区别

关键是S上。简而言之,https建立连接后要先把SSL的证书发下去,有了公钥和私钥,就可以解密了。

14、http状态码及其含意

这个百十个状态码不可能说全的。记住几个关键的就好。什么404 403 500 502 20X 30X就可以了

15、linux中怎么查看系统资源占用情况

(top、free、uptime),我本来不会,系统出了几次故障,跟着一起排查,然后就会了……

16、SQL注入的原理是什么?如何防止SQL注入

老生常谈的问题。

原理:第一SQL本身有问题(这个不是主要问题)。第二你写的SQL很有问题(这是最主要的)

防范:第一,绝对不要相信用户输入的任何东西。第二,预编译。现在的框架一般都会有SQL过滤的。

17、isset(null) isset(false) empty(null) empty(false)输出

PHP入门问题,isset和empty的区别

分别是false,true,true,true

18、优化MYSQL的方法

这个问题很宽泛,我们也宽泛的回答。我们不可能去动源码,所以一切方法在使用上进行优化(遵循三范式什么的,就不说了)

第一,数据超过一定数量或者体积,请拆分表,垂直或者水平分(最有效果的优化)

第二,务必有自增主键。通过自增主键来查数据是最快的。

第三,常用的查询字段建立联合索引,写SQL一定要尊从最左原则,用到这个索引。

第四,不要把逻辑运算放到sql里。言外之意是,不要写太复杂的SQL,你能写复杂的SQL 你肯定也能通过PHP实现。

参考:https://cloud.tencent.com/developer/article/1004367

19、数据库中的事务是什么?

这个问题很基础的,不回答了。引申一下myisam 和 innodb的区别。

20、写一个函数,尽可能高效的从一个标准URL中取出文件的扩展名

会 写正则最好。我反正不会正则,需要用的时候就百度。(当年面试的时候,问过正则,我就这么回答的)

21、参数为多个日期时间的数组,返回离当前时间最近的那个时间

遍历数组,求当前时间差,和第一个进行对比,小于第一个交换位置。最后取第一个即可。

22、echo、print、print_r的区别

这三个放在一起,回答的点在于,print_r是函数,echo、print是结构语言。

至于他们具体的区别参考:https://www.cnblogs.com/xiaotaoing/p/6687368.html

23、http协议的header中有哪些key及含义

这个问题,很难。一会半会说不清楚。如果做过PHP restful 接口开发,也踩过这里面的坑,那应该是可以答出来常用的几个KEY的。

参考:https://blog.csdn.net/u014175572/article/details/54861813

25、PHP的数组和C语言的数组结构上有何区别?

但从PHP来讲,考的是PHP数组的实现。可以简单的认为,PHP的数组是hash桶+十字链表(实际上是数列Array,列表List,散列表/关联数组/字典Hashtable的聚合体)。优点是查询效率很高,遍历很方便,缺点是,占内存较多。(还是空间换时间的思路,毕竟现在内存又不值钱)

C语言的数组,就是定长定类型的数列。

26、Redis的跳跃表怎么实现的

不会……

27、哈希是什么?hash冲突后,数据怎么存?

这个问百度吧。这个问题

28、聚簇索引,聚集索引的区别?

这个我也不知道怎么回答。我知道这类索引会把一块相似数据按照逻辑顺序存在磁盘的物理顺序上。

29、B+Tree是怎么进行搜索的

数据库相关必考题

参考:https://blog.csdn.net/b2b160/article/details/4701944

30、数组和hash的区别是什么?

参见25 27

31、写个函数,判断下面扩号是否闭合,左右对称即为闭合: ((())),)(()),(()))),(((((()),(()()),()()

不会……

32、 找出数组中不重复的值1,2,3,3,2,1,5

用普通方法,肯定很容易的。

我的思路,遍历,用xdebug_debug_zval打印结构,refcount=1的,就是唯一存在的。(中高级的PHP肯定要知道zval的结构的)

33、32题你的时间复杂度是多少?有的情况下,你写了个算法,然后面试官会让你把你的算法的时间复杂度表达式写出来

O(n);

34、PHP的的这种弱类型变量是怎么实现的?

考zval的,PHP的八种类型,本质只有一个结构。

参考:https://blog.csdn.net/ohmygirl/article/details/41542445

35、在HTTP通讯过程中,是客户端还是服务端主动断开连接?

面试必考类,三次握手和四次挥手,以及他们每步的状态。

这个问题最好能一步到位回答的全面的。一般都是有客户端告诉服务端,我这边东西发完了,可以断连接了么。但是如果客户端发完FIN服务端没有回复,就会重试,直到超过超时时间,就断了。服务端也一样,超过时间,服务端就断了。

引申:DDOS攻击

36、PHP中发起http请求有哪几种方式?它们有何区别?

写过restFull接口的,一定清楚的很。很基础的问题。

37、有一颗二叉树,写代码找出来从根节点到flag节点的最短路径并打印出来,flag节点有多个。比如下图这个树中的6和14是flag节点,请写代码打印8、3、6 和 8、10、14两个路径

image.png

典型的二叉搜索树。大学数据结构的基础题。

参考:https://blog.csdn.net/BaiHuaXiu123/article/details/52488443

38、有两个文件文件,大小都超过了1G,一行一条数据,每行数据不超过500字节,两文件中有一部分内容是完全相同的,请写代码找到相同的行,并写到新文件中。PHP最大允许内内为255M。

39、请写出自少两个支持回调处理的PHP函数,并自己实现一个支持回调的PHP函数

array_map,array_walk,(array开头的很多函数都支持回调。具体可以看PHP手册);

function fn($a,$b=''){
    if($b){
        $b($a);
    }
}

40、请写出自少两个获取指定文件夹下所有文件的方法(代码或思路)。

核心方法是scandir,核心思想是递归。

41、请写出自少三种截取文件名后缀的方法或函数(PHP原生函数和自己实现函数均可)

这种面试题是最没有意思的题。pathinfo, explode.substr等,还有字符串截取函数,再不济 写个正则。

参考 https://blog.csdn.net/yanfangphp/article/details/8633896

42、PHP如何实现不用自带的cookie函数为客户端下发cookie。对于分布式系统,如何来保存session值。

这个题有点绕。考的还是COOKIE和SESSION的基础知识。服务端通过set-cookie命令来通知客户端保存cookie。

只要按照domain path 过期时间等规则 用header函数就可以实现。

分布式系统session,集中处理。按我们公司的架构,为了实现高可用和高容灾,提供一个分布式的验签服务。具体的可以看下redis的分布式服务架构。

43、请用SHELL统计5分钟内,nginx日志里访问最多的URL地址,对应的IP是哪些?

我不会shell。

44、写一段shell脚本实现备份mysql指定库(如test)到指定文件夹并打包,并删除30天前的备份,然后将新的备份推送到远端服务器,完成后送邮件通知。

我不会shell。

45、mysql数据库中innodb和myisam引擎的区别

区别主要在数据和索引的存储结构和存储方式上,以及对于事务的支持。

参考:https://blog.csdn.net/chajinglong/article/details/56666771

46、从用户在浏览器中输入网址并回车,到看到完整的见面,中间都经历了哪些过程。

入门问题。这个问题有一个很大的坑,面试官可能会从这个问题下手问你一大堆问题。

以PHP为例:通常最简单的回答,从用户的电脑找到最近的DNS服务,然后解析到对应的IP 然后双方开始HTTP连接,然后发送请求信息,服务器拿到请求信息就开始准备回应的信息,中间要经过nginx转发到frstCGI(PHP-FPM),然后PHP开始解析框架,解析请求头部,找到对应的API,该查数据库查数据,该组装HTML组装HTML,完事了就重新返回给用户。用户拿到返回数据,浏览器开始渲染页面,JS开始加载。

47、如何分析一条sql语句的性能。

explain,具体的请百度。(基本很少用性能分析语句。MYSQL的表设计上尽量冗余一部分字段,避免在MYSQL里处理大量的逻辑运算。我们是做PHP服务开发的,mysql语句能简单尽量简单。逻辑运算的地方可以在PHP里做。)

48、ping一个服务器ping不通,用哪个命令跟踪路由包?

linux:traceroute,windows:tracert

49、$a=0,1,2,3; $b=1,2,3,4,5; $a+=$b; var_dump($a)等于多少?

基础问题。本质还是考PHP数组的结构和特点。

结果是01235。PHP用数字索引和STRING索引差别还是很大的

参考:http://www.jb51.net/article/38593.htm

50、$a=1,2,3; foreach($a as &$v){} foreach($a as $v){} var_dump($a)等于多少; (我加的)

122

https://laravel-china.org/articles/7001/php-ray-foreach-and-references-thunder

51、数据库中的存放了用户ID,扣费很多行,redis中存放的是用户的钱包,现在要写一个脚本,将数据库中的扣费记录同步到redis中,每5分钟执行一次。请问要考虑哪些问题?

思路:生产者和消费者模式。这个问题也没有说其他的状态,比如数据库的数据会实时增加么?redis中每个钱包是否有其他服务在读取或者写入啊。什么的。数据库和REDIS放一起,要么考数据一致性,要么考出现锁,导致效率降低。

52、MYSQL主从服务器,如果主服务器是innodb引擎,从服务器是myisam引擎,在实际应用中,会遇到什么问题?

不知道,没用过,为什么这么设计?故意给自己找不愉快?

53、linux中进程信号有哪些?

kill -l 很少用

54,redis的底层实现

面试官这么样问你,你就反问他,你要的底层实现是字段的设计?内存分配管理?网络模型?数据同步?还是分布式的实现?(TIPS:面试就是两个人的博弈。面试官给出一个描述不清晰的问题,我们没必要回答。让他把问题讲清楚再思考怎么回复)

参考:https://cloud.tencent.com/developer/article/1004377

这篇文章 要多读几遍。

55,异步模型

问清楚是IO异步模型。还是AJAX这类的异步请求模型。差别非常大的。

参考:https://cloud.tencent.com/developer/article/1005481

狗东某风控研发必考题。

56,10g文件,用php查看它的行数

粗暴一点的方法 ini_set('memory_limit','-1'); 先把当前内存限制解除了 然后直接逐行统计。时间会非常的久。

有更好的方法请留言。

57,有10亿条订单数据,属于1000个司机的,请取出订单量前20的司机

(TIPS)不要中招。不要用常用思路来处理,10亿数据 你再怎么优化,全表求和,都是要死人的。

我们从设计上解决这个问题。只有一千个司机。我们可以做个简单哈希,分库分表,%求余数。保证这一千个司机分在一千个表里,每个人有每个人的单独表。引擎用MYSAIM,求表中数据的总数,效率飞快,遍历一千张表,求最大前二十即可。

58,设计一个微信红包的功能

没做过。如果做过微信公众号开发,知道微信事件模型的XML数据结构,应该会好做一点。

59,根据access.log文件统计最近5秒的qps,并以如下格式显示,01 1000(难点在01序号)

我也不会。百度吧。

60、php7性能为什么提升这么高

不逼逼,直接参考:http://www.laruence.com/php-internal

鸟哥的文章要多读,多读。

61、遍历一个多维数组

递归。array_map传入一个回调函数。

62、有这样一个字符串abcdefgkbcdefab......随机长度,写一个函数来求bcde在这个字符串中出现的次数

substr_count();

63、有一个1G大小的一个文件,里面每一行是一个词,词的大小不超过16个字节,内存限制大小是1M。返回频数最高的100个词

方法太多了,但是实现起来 各有各的问题。

我可能只会用HASH映射做。其他的,不会。

参考:第64题。

64、十道海量数据处理面试题与十个方法大总结(我加的)

https://blog.csdn.net/v_JULY_v/article/details/6279498

65,php进程模型,php怎么支持多个并发

守护进程模型(需要知道php-fpm的各种配置了)

参考:https://www.jianshu.com/p/542935a3bfa8

66,nginx的进程模型,怎么支持多个并发

这个三言两语说不清楚。

参考:https://www.zhihu.com/question/22062795

67,php-fpm各配置含义,fpm的daemonize模式

php-fpm 的配置并不多,常用的就更少了。

参考:http://www.4wei.cn/archives/1002061

static - 子进程的数量是固定的(pm.max_children)

ondemand - 进程在有需求时才产生(当请求时,与 dynamic 相反,pm.start_servers 在服务启动时即启动

dynamic - 子进程的数量在下面配置的基础上动态设置:pm.max_children,pm.start_servers,pm.min_spare_servers,pm.max_spare_servers

68、让你实现一个简单的架构,并保持高可用,两个接口,一个上传一条文本,一个获取上传的内容,你怎么来设计?要避免单机房故障,同时要让代码层面无感。

我看不懂这个问题再问什么。不作回答。

参考:分布式架构设计必备CAP原理。

69、两台mysql服务器,其中一台挂了,怎么让业务端无感切换,并保证正常情况下讲台服务器的数据是一致的。

不是核心业务的话,先停写,把备机拉起来,查看两台机器的日志,进行数据补偿,开写。

如果是核心业务的话,现在所有的写操作都在正常的状态机器上。把好的这台机器的备机拉起来,当主机。

以上全是应急操作。实际上数据库的容灾设计要复杂的多。

面试官要是问你,备机的数据不一致怎么办,你要勇敢怼回去,你们每秒多少写入操作。按照百万级表,每秒1000的写入效率,正常的设计是,分布在2台机器上每台500。这个级别的数据同步,出现差异的概率 可以忽略不计的。有一台出现问题,另一台也可以抗住。

(正常的操作,还是先停写,等数据一致,切换,开写。我们公司搞这些切换都是在凌晨4.00左右,核心业务的每秒写操作,只有十几个。前后耽搁不到20秒)。

70、http协议具体的定义

这种题 有是很难回答的。太宽泛了,我们面试早就不问这种问题了。

参考:日本人写的《图解HTTP》

71、什么是锁,怎么解决锁的问题

这,咋回答。

计算机原理学的,生产者消费者模型,银行家模型,都可以解决锁的问题。

72、rand与mt_rand的区别

我实习的时候遇到这个坑。

说是mt_rand比rand快4倍。

在随机数区间不大的情况下并没有很大的效率差距。但是出现重复数的几率,rand要比mt_rand高很多。

73、mysql事务隔离是怎么实现的

通过各种行锁表锁,各种乐观锁悲观锁,排他锁实现的呀。

74、mysql锁怎么实现的

不会,请百度。

75、对称加密和非对称加密的方式

对称加密:我们俩共用一个秘钥,你加密,我解密。

非对称加密:我给你一个公钥,你加密完了,我还能有我的私钥把密文解开。但是你没有我的私钥。

扩展:椭圆加密算法。

76、10瓶水,其中一瓶有毒,喝完毒水会在23小时59分后毒发身亡,请在24小时内用最少的小白鼠找到这瓶水。

四只。

二进制问题。薛定谔的老鼠。

一只老鼠有两个状态,死活,对应01。假设老鼠的个数为A,则有2^A>=10; A=4;

思路很简单,十瓶药编号:0,1,10,11....1001;

0不喝。第一只老鼠喝所有个位是1的:13579,第二只喝十位是1的,第三只和百位是1的,第四只喝千位是1的。

24小时后,看下死了的是1,活着的是0。按老鼠的顺序乖乖站好……假如第一只和第三只死了,那就是0101,就是5 有问题。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

工作积累

1 篇文章7 人订阅

相关文章

来自专栏北京马哥教育

Python 爬虫实践:《战狼2》豆瓣影评分析

来源:hang segmentfault.com/a/1190000010473819 简介 刚接触python不久,做一个小项目来练练手。前几天看了《战狼2》...

51740
来自专栏北京马哥教育

Python Unicode编码混乱 :来自大洋彼岸的怨念

Unicode已经解决了很多问题。知晓ISO-8859-*和CP437带来的混乱(当然对于非西方语言来说更糟糕)的人都可以证明这一点。当然,这些天他们正在做一项...

16450
来自专栏施炯的IoT开发专栏

微软移动 Nokia Lumia SensorCore SDK 介绍及上手体验

    早在今年的BUILD大会上,诺基亚就宣布了SensorCore以及它的部分演示。今天,它终于面世了,大家可以去Building Apps for Win...

28870
来自专栏java一日一条

Java中不同的并发实现的性能比较

正如即将上映的星球大战那样,Java 8的并行流也是毁誉参半。并行流(Parallel Stream)的语法糖就像预告片里的新型光剑一样令人兴奋不已。现在Jav...

12810
来自专栏Android群英传

实现 APK 保护时常见的坑和解决方案

12030
来自专栏牛客网

C++后台腾讯WXG实习面经(已拿offer)

时间:2018年4月16日 岗位:C/C++后台开发(Linux) BG:WXG 关于我:本科大三 预计2019年毕业 一面(普通技术面) 过程:递交简历 ->...

856100
来自专栏Python中文社区

Python优化第一步: 性能分析实践

專 欄 ❈Pytlab,Python中文社区专栏作者。主要从事科学计算与高性能计算领域的应用,主要语言为Python,C,C++。熟悉数值算法(最优化方法,蒙...

305100
来自专栏日常学python

用Python代码来下载任意指定网易云歌曲

前两天教了大家如何在控制台上找到真实的mp3播放地址,但是不可以下载付费的,因为只能下载可播放的歌曲。至于怎样下载付费网易云音乐,还是开个会员吧,要知道免费是最...

13810
来自专栏大数据杂谈

Python 爬虫实践:《战狼2》豆瓣影评分析

25850
来自专栏noteless

2.计算机组成-数字逻辑电路 门电路与半加器 异或运算半加器 全加器组成 全加器结构 反馈电路 振荡器 存储 D T 触发器 循环移位 计数器 寄存器 传输门电路 译码器 晶体管

所以想要准确的保存一个比特,你需要保持住D的值,持续经过CP从0~1然后再到0的过程

50230

扫码关注云+社区

领取腾讯云代金券