出于一些原因近期做了一次工作变动,在职交接近一个半月时间大概面试了十家公司,并且得到了自己比较满意的offer,最后基本上无缝衔接了新工作。总体来说,虽然准备的很充分,但面试期间还是暴露了许多问题,所以做下总结,供大家和自己以后参考,主要分四部分讲述: 简历方面,格式内容包括七个板块,个人简介,求职意向,工作经历,项目经历,技能描述,学历背景,自我评价。如果自己或公司没有其他特殊要求,这些一般就够了,具体格式不再赘述。
(点击此处加入php高级交流群一起学习交流,10年架构师带你解读年薪50万面试通关秘籍。)
总结几个要素:
- 个人简介名字大写,内容需要详实,一是可以给人留下映像,二是减少不必要的与面试官交换个人信息的时间。准备一份好的口头自我介绍是很有必要的,毕竟准备一次能用很久,时间花在上面很实用,面外企英文版的最好也提前准备下。
- 简历上不要写上期望薪资,能够根据面试情况变化是最好的,如果写上建议高于自身期望,详细参考锚定效应。
- 简历要简洁,最好不要超过两页。项目经历要突出重点(可以具体到某次解决线上问题,某次优化效率提升),两到三个为宜,不重要的可以放在工作经历中一笔带过。这样有个好处,即面试官根据项目问的问题就会很集中,在你的预料之中,如果你的项目夸夸 其谈写了很多,那面试官发挥起来,你就容易被带着走。
- 很多人不重视个人评价栏目,我的技巧是评价最后中带上自己的博客,个人项目,因为在尾部还是很容易被看到并当做加分项的。
面试流程,其实每个公司大同小异,电话面试,笔试,技术面(可能两面),Hr面,部门经理面,可能不同公司有稍微做调整。
这里需要强调两点:
1.电话面试,很多大公司都会有电话面试,有些朋友接到面试不管当前情况如何,环境如何都会争取这个机会,而我想说的是,如果身边环境尚可接了也就接了,但是如果身处闹市,或者下班回家地铁上信号不好,或者自己完全没有准备,建议直接回复面试官目前不 合适,改约其他时间,这么做好处一是没有环境影响,二是自己有心理准备。
2.抓住机会问问题,如果对技术有追求一定要向技术官问清楚项目所使用技术,问开发人员上下班时间。向HR问清楚公司的薪酬福利体系,决定自己开价。向管理层问清楚项目目前所处的阶段,以及规划方向。 面试题概览,基本上汇总了这次面试中遇到的所有问题,中间也有一些是自己当时没有答上来的,这里只做罗列:
1.get,post 的区别
1、GET在浏览器回退时是无害的,而POST会再次提交请求。
2、GET产生的URL地址可以被Bookmark,而POST不可以。
3、GET请求会被浏览器主动cache,而POST不会,除非手动设置。
4、GET请求只能进行url编码,而POST支持多种编码方式。
5、GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
6、GET请求在URL中传送的参数是有长度限制的,而POST没有。
7、对参数的数据类型,GET只接受ASCII字符,而POST没有限制。
8、GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
9、GET参数通过URL传递,POST放在Request body中。
10、GET产生一个TCP数据包,POST产生两个TCP数据包
2.require,include 区别
require是无条件包含也就是如果一个流程里加入require,无论条件成立与否都会先执行require include有返回值,而require没有(可能因为如此require的速度比include快) 包含文件不存在或者语法错误的时候require是致命的错误终止执行,include不是
3.PHP 的垃圾回收机制
PHP 可以自动进行内存管理,清除不需要的对象。
PHP 使用了引用计数 (reference counting) GC 机制。
每个对象都内含一个引用计数器 refcount,每个 reference 连接到对象,计数器加 1。当 reference 离开生存空间或被设为 NULL,计数器减 1。当某个对象的引用计数器为零时,PHP 知道你将不再需要使用这个对象,释放其所占的内存空间。
4.常见的排序算法
1. 冒泡排序
思路分析:在要排序的一组数中,对当前还未排好的序列,从前往后对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即,每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。
代码实现:
$arr=array(1,43,54,62,21,66,32,78,36,76,39);
function bubbleSort($arr)
{
$len=count($arr);
//该层循环控制 需要冒泡的轮数
for($i=0;$i<$len-1;$i++)
{ //该层循环用来控制每轮 冒出一个数 需要比较的次数
for($k=0;$k<$len-$i-1;$k++)
{
if($arr[$k]>$arr[$k+1])
{
$tmp=$arr[$k+1];
$arr[$k+1]=$arr[$k];
$arr[$k]=$tmp;
}
}
}
return $arr;
}
2. 选择排序
思路分析:在要排序的一组数中,选出最小的一个数与第一个位置的数交换。然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较为止。
代码实现:
function selectSort($arr) {
//双重循环完成,外层控制轮数,内层控制比较次数
$len=count($arr);
for($i=0; $i<$len-1; $i++) {
//先假设最小的值的位置
$p = $i;
for($j=$i+1; $j<$len; $j++) {
//$arr[$p] 是当前已知的最小值
if($arr[$p] > $arr[$j]) {
//比较,发现更小的,记录下最小值的位置;并且在下次比较时采用已知的最小值进行比较。
$p = $j;
}
}
//已经确定了当前的最小值的位置,保存到$p中。如果发现最小值的位置与当前假设的位置$i不同,则位置互换即可。
if($p != $i) {
$tmp = $arr[$p];
$arr[$p] = $arr[$i];
$arr[$i] = $tmp;
}
}
//返回最终结果
return $arr;
}
3.插入排序
思路分析:在要排序的一组数中,假设前面的数已经是排好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序。
代码实现:
function insertSort($arr) {
$len=count($arr);
for($i=1, $i<$len; $i++) {
$tmp = $arr[$i];
//内层循环控制,比较并插入
for($j=$i-1;$j>=0;$j--) {
if($tmp < $arr