面试有感2
本来不想再找工作的,但年前又走了个同事,再加上公司的新项目进展缓慢,于是就又投了几份简历。这次比年前顺利不少,不过还是有些槽点要吐,不光对公司,也对我自己。虽然我在简历里贴出了个人博客,但我不怕被负责人看见,如果被吐槽的公司因为这而拒绝了我,只能说明该公司的负责人心胸狭隘。
谈情怀的部分就不写了,没啥好说的,谈谈技术方面。负责人问了我两个简单的算法,一个是对一个一维数组进行排序,另一个是对一组有序数字打乱排序,我用了两种非常傻逼的循环方法,但当时我就记得 PHP 有原生的函数能实现,只是一时想不起来函数名了,但负责人不仅没告诉我 PHP 的原生函数,还告诉我第二个算法没有原生函数……回家一查才想起来,不就是 natsort 和 shuffle 嘛,我还用过呢……不给我用过的函数多了去了,谁能一下子想起来一个不常用的函数。再说算法这种东西,不都是根据实际项目写嘛,哪有固定的模式,写得不好以后再重构呗。反正我经常这么做,有时候第一遍没想到优雅的实现方法就先用笨方法,等写完了再看一遍,说不定就想到了,过两天又想到了更优雅的办法,就再重构一遍。很多涉及到算法的代码,我都是要重构两三遍的。去年写的一个调查系统,为了更好地适应新的需求,我干脆把整个系统重写了。可能对于大部分公司来说,我这样的工作方式,只是浪费时间而已。
再说另一个概念问题,他问我有什么数据类型,好吧,当时我真的想不起来了数据类型是啥……问他能不能给个提示,他说“key value”,我还是答不上来……回家一查,原来是数组、字符串、整型等……好吧,要是干了一年 PHP 还不知道数组、字符串等是啥、有什么区别,我真可以回家种地了。但他说数据类型和“key value”,我还真不知道是啥了……好吧,这么简单的问题我竟然答不上来也够丢人的,不过他的提示也够误导人的,要是说数组我绝对明白是啥。以前我还特意研究过类型的转换与比较,要是他问我 if (empty($foo)) 与 if (!$foo) 之间有什么区别,我可以肯定地告诉他没区别,除了当 $foo 未设置时,if (!$foo) 会抛 notice,而 if (empty($foo)) 不会,所以 $_GET[‘bar’] 和 $_POST[‘bar’] 之类的变量要用 empty 或 isset 函数来检查。想起来刚进公司时,一个号称多年 PHP 经验的前辈问我为什么用 empty 和 isset 检查变量,虽然我当时也不知道为什么,因为我是看一个开源项目这么用,也就跟着用了。
还有个闭包问题,闭包到底是啥,看了这么多次定义,我还是没不明白,只知道变量的作用域。负责人问了我任何在 PHP、Python 和 JavaScript 的函数中访问全局变量,我只答上来 PHP 用 global,Python 可以直接访问,JavaScript 没答上来,后来才想起来 JavaScript 也可以直接访问。他又问我 PHP 中除了 global 还有什么方法,我也没答上来。对于要重复使用的变量,我更喜欢使用传参、缓存、数据库或 session、cookie 等方法,或干脆写个函数来封装,从未用过超全局变量。
这些人在面试的时候,如果我答得不对或不好,就不能告诉正确或更好的答案吗,起码告诉我答得对不对,好不好吧……平常看文档的时候,都是只看函数的用法、返回值、报错和示例代码,定义、概念部分往往一带而过,写代码也很依赖编辑器的函数提示,导致很多函数只记得首字母,不看文档基本写不了复杂的代码,这个问题真得改正一下了。
本来就不喜欢跟别人扯淡,来到现在这家公司也没面试什么的,就写了几封邮件稍微了解一下就过来了,真的很烦一次面试要扯一个多小时,这一个小时说的话比我一个星期说的都多,嗓子都干了还不给口水喝。不过面来面去,还是找不到真正靠谱、有前途的公司,言语就像风,在网上喷好歹还能保留一段时间,有些人口中的前景和承诺真就如微风般,毫无存在感。面试时又对薪酬支支吾吾,不敢拍板,真不想再面了……