明天就要开始工作了,之前也没有什么面试的经验,我找工作也是通过社交性找的工作。在我找到PHP开发的这份工作之前我面过两三家,问过我的东西,当然了不会很全,但我每面一家都会做一个总结。希望这个能给找PHP开发的你带来些许帮助,或许一点卵用都没有。

我先说一下我自己接触PHP的经历吧,听说有这门世界上最好的语言是我在大二的时候,那个时候在网上找了一个教程把代码敲了一遍,做了一个简单的音乐盒子,能够播放管理音乐。后来正真接触PHP是我在今年三月份去渣浪微博实习的三个月里接触了这门语言,后来自己的毕设用Laravel框架做了一个在线学习的网站。总的来说,我真正接触这门语言时间也不算很长,很多东西还不是很深入,比如常用的函数啥我有的时候还需要查阅文档……下面还是来做总结吧:

学习PHP也就是那一套嘛——LNPM。也就是说Linux、Nginx、PHP、MySQL。

Linux这一块

我问的比较多的问题就是会不会写一些shell脚本,然后还有就是常用的命令,还有一些不常见的就是:

  • 读取文件的最后100行,并复制到的新的文件中

tail -n 100 >>bbb.txt
这个里面稍微引申一下就是参数【-c】就是统计字节数

  • 删除某个文件夹所有内容,要求删除后停止1秒

rm -r -f ./ && sleep 1
像这个里面需要注意的是句点,想想这个可不可以少掉。

  • find、grep的使用以及管道符“|”
  • 等等其他的,最好系统学习一下Linux的操作,像鸟哥的私房菜。

PHP这一块

这一块内容比较多,面试的话,也是各个面试官有自己的问法风格,这个时候需要察言观色。我就记录点我遇到的问题吧:

问题1:

1
2
3
4
5
6
7
8
9
$a = array();
$a[0] = 1;
$a[1] = 2;
$a[3] = 3;
$a[4] = 4;
$a[2] = 5;
foreach($a as $v){
echo $v;
}

请问上面的遍历输出的值是什么?

问题2:(这个是简单的概括)

  • PHP的字符串翻转,不用自带的函数。
  • 从一个数组中取出第一个元素有几种方式?分别是什么?
  • PHP中的传引用、传值、传地址。
  • 单引号和双引号的区别。
  • PHP时间相关的函数,时间格式。
  • 给定两个时间,计算相差的天数,diff
  • 你使用的PHP版本是什么?如果是PHP7,你要知道一些PHP7的新特性。
  • PHP字符串截取含有中文的字符,且保证不乱码
  • 想起了就再补充……(我打算在一年的时间把PHP常用的函数熟练掌握)

问题3:curl请求处理方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
//cURL的具体实现方法
$url = "http://www.php.net/";
//1初始化
$ch = curl_init();
//2设置选项,包括URL
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); //将curl_exec()获取的信息以文件流的形式返回
//而不是输出
//启用时将头文件的信息作为数据流输出
curl_setopt($ch,CURLOPT_HEADER,1);
//3执行并获取内容
$output = curl_exec($ch);
//4释放cURL句柄
curl_close($ch);
echo $output;

我自己引申:有的时候偷懒用 file_get_content()函数,知道其中的区别。

Nginx

刚入门PHP,最好要知道简单的配置,知道每个配置选项的意思,能折腾就尽量折腾吧,最好是自己编译安装nginx。这个我现在也没有想说的,自己也整得不是很明白。哈哈哈

MySQL方面

这一块显然要问的,不问的话怎么叫面试呢?之前对这个挺害怕的,因为这一块是自己的弱项。总要去面对,害怕是没有用的。之前我被问过的。

  • MySQL的架构是什么样的?也就是说三层架构,或者说两层,就看你怎么解释,我觉得这个问题就是想问一下你有没有深入了解过MySQL。
  • MySQL常用的存储引擎,知道他们之间的区别,也就是问InnoDB和MyISAM的区别,都是问常用,其他的了解了解。
  • 关联表的查询join on的用法 【注意哟:这儿有个坑,mysql不支持full join。这是我面试完后总结发现的】
  • sql查询的优化的方法,你需要知道从哪些方面入手。
  • MySQL使用的数据结构,其实就是在问B+/B- tree,深入了解MySQL还是需要的。
  • 问来问去也差不多就是这些了,还有的话我再补充。

其他

数据结构和算法

  • PHP常用的四个排序算法,冒泡、选择、插入、快排,其实问的比较多的就是冒泡和快排【不是你只掌握这两个应付面试】,如果还有兴趣,归并排序。反正这几个我都自己撸了一遍,现在也常拿出来看看,毕竟不用的话就容易忘记。
  • 队列和栈的区别,怎么初始化他们,然后他们的操作要熟悉,常问的就是插入和删除操作。还有会问双向链表。

双链表结点中有两个指针prior和next,分别指向其前驱结点和后继结点.

1
2
3
4
typedef struct DNode { //定义双链表结点类型
ElemType data; //数据域
struct DNode *prior, *next; //前驱和后继指针
}DNode, *DLinklist;
  • 还有数据结构的树那一块,没被问太多,估计是我这一块薄弱吧,面试官就合理避开。【这样的面试官才是好面试,至少他了解你的基础,也有傻×的面试官,明明你表现了不会,他还一个人自high问个不停】

操作系统

  • 线程和进程的区别
  • 还有忘了,以后想起了补充

计算机网络

  • 各种状态码都要熟悉,常问的301、304和500
  • tcp和udp的区别
  • TCP/IP的协议还是要清楚
  • 三次握手,四次挥手的状态分析
  • SESSION和COOKIE的区别,多台web服务器怎么共享SESSION?【经典问题,每家必问】

有事没事的时候还是要学好C语言

目前我被问到:

  • 文件读取
  • 字符串复制strcp是怎么实现的,用自己的方式实现字符串的复制。
  • 函数参数有两个以上的,参数入栈的顺序
  • 想起再补充。

其他

面向对象编程的封装、继承和多态

1、面向对象是一种基于结构分析的、以数据为中心的程序设计思想。面向过程语言是一种基于功能分析的、以算法为中心的程序设计方法。
2、封装就是隐藏对象实现的细节,在外界通过公共的方法来访问。比如,在C语言中,我们需要关注每一个细节、过程,在面向对象的程序语言中,我们就不用关注每个对象的细节,只要关注功能的实现就行,根据提供好的接口,然后面向接口编程。
3、继承就是子类能够继承父类的公共属性和方法,无法继承父类的私有属性和方法。在java|C#|PHP等面向对象语言中,是不允许多重继承的。【但php trait是个例外,可以多层继承】
4、多态,就是同一个接口,对不同的实例而执行不同的操作。同属一个基类的不同派生类也可以有自己不同于其他类的属性和方法。

以上就是我面了三家的一些总结,有的很简单我就没有总结出来,有的总结出来对你来说也许很简单。最后我现在工作在杭州,欢迎面基!也希望大牛们求带!