7 年工作经验 PHPer 竟然写错创建空文件的语句。。。

2015-01-21 11:24:38 +08:00
 Actrace
这阵子公司收人,面试题非常简单非常基础,本来笔试只是为了走走过场,但还是有不少“牛人”竟然连创建空文件的语句都能写错。。。

因为招人要求是高级PHP,要求经验至少5年以上,所以能来面试的人都非常少,,,大部分都是在其他公司混到经理(管理层)的职位了。。。难道当了经理之后就真的一点代码都不碰了么。。。

PS:
1个10年经验,一个7年经验,创建空文件竟然都写成了mkdir。。。其中一个还写成了mk_dir,,,难道是故意写错的么。。。
16281 次点击
所在节点    程序员
210 条回复
wdlth
2015-01-22 14:13:34 +08:00
@jsjscool HTTP2?我看企鹅是要收了IETF吧……
gDD
2015-01-22 14:14:49 +08:00
@raincious 你把file_put_contents写成了file_put_content,另外你这种情况无法处理$pathToRootDir正好是一个文件的情况。
raincious
2015-01-22 14:17:59 +08:00
@mhycy

作为一个从来不考虑并发性的经常把原数组存在数据库里的混蛋来说,serialize还是挺常用的。

而且因为太常用了,我甚至在PDO封装里实现了自动化序列化/反序列化
https://github.com/raincious/facula/blob/master/src/Facula/Unit/Query/Factory.php#L231

虽然……这样做并没有减少输入Seralize这个单词的次数……
mhycy
2015-01-22 14:21:29 +08:00
@raincious 看来咱们需求不一样,我都是把数组拆了入库的
elvba
2015-01-22 14:32:29 +08:00
LZ 不就是抓到了别个的小辫子然后就抓着不放,还不想松手对吧?
没正面回复问题,尽往别的地方扯。
“我自己写了5年多的PHP了,虽然现在做管理,不过我上班随意的,天天研究研究写代码。
比如如何写代码比较爽之类的~”
研究的结果就是怎么给一个7年工作经验的人出创建空文件这种题?让人踩坑好婊飞别人很爽么?
把别人婊飞了还不过瘾,再来 V2 发一帖,继续秀自己的优越感?

PS。突然想起一个贴,http://tanronggui.xyz/t/94638
raincious
2015-01-22 14:40:49 +08:00
Actrace
2015-01-22 14:44:09 +08:00
@raincious
常年战斗在代码一线的管理狗路过。能不能干事情说实话一聊就能聊出来。笔试题说白了就是考察个态度。还在研发部门的时候,我手下的小伙伴基本都是培训机构里出来的,虽然都是坑爹货,但是好歹态度不错,也一直在进步(是的,他们基本都把笔试题做对了)。
虽然现在没有为公司贡献代码了,不过仍然在写,只不过是因为代码是自己的乐趣。

之所以会发这样一个帖,主要是招聘要求明明白白写着我们是要能干事的人(码农),但是还是有不少自称多年经验的大叔想进来试试运气当管理,混日子的风气越来越重了。感觉很无奈,招个靠谱的人确实不是个容易事情~
maddot
2015-01-22 14:53:42 +08:00
@raincious 呵呵,把序列化后的字符串直接存进数据库然后取出来直接反序列化?
你的代码:
static::addAutoParser('Serialized', 'Reader', function ($data) {
return $data ? unserialize($data) : '';
});
static::addAutoParser('Serialized', 'Writer', function ($data) {
return $data ? serialize($data) : '';
});
raincious
2015-01-22 14:59:24 +08:00
@maddot 是啊,就是这样。

我上层封装了个DAO,做成了类似ORM的东西,然后只要声明一次就行了,然后

$model->arrayData = array('blablabla', 'blablabla');
$model->save();

进数据库就是序列化好的了。要用的时候数据Fetch出来到Model里直接就是解析好的Array。有坑的地方就是默认值:如果给的数据本身就有问题,或者数据库被人动过了(序列化结构破坏了),那么最后会得到空字符串而不是和之前一样类型的空数据(不知道怎么搞定这个)。
arslion
2015-01-22 15:03:44 +08:00
如果这应聘者答上了楼主的问题,又搞定了接下来的几个问题,上任后工作却一团糟
那么楼主会首先反思自己的面试把关能力呢,还是埋怨人家7年工作经验水分高?
另外,看完这么多回复,感觉这个“接下来的几个问题”是和“创建空文件”差不多的,楼主你别打我啊哈哈
maddot
2015-01-22 15:07:17 +08:00
@raincious 你的代码有在线上应用吗?赶紧fix吧,免得过年的时候老板打电话告诉你网站down了哦。http://davidwalsh.name/php-serialize-unserialize-issues

所以说,会写serialize这个函数名,真的一点不重要。
gDD
2015-01-22 15:17:20 +08:00
@raincious 你没有跑过吧,以下找坑环节

针对版本:gist.github.com/raincious/b3804885f77fcc9fad37/dd8797a98985be2e3a11b20c12fb6d5b453283a1

1. 静态目测throw没有new
2. 运行发现class Create {写成了class Create() {,以及其他语法报错一并修复之后终于可以运行
3. 翻了file_exists的文档,找到一个坑,如果当前文件夹链接到另一个文件夹 /link-dir -> /real-dest,那么如果/real-dest不存在,file_exists会返回false,你的代码会throw new FailedOnCreateContainingDir,这个Exception没有正确描述错误,可能用UnresolvableParentDirectoryException会更合适点
4. mkdir如果路径存在会报warning,要用@mkdir来dismiss掉
raincious
2015-01-22 15:24:33 +08:00
@maddot

根据你所提供URL上的信息,我了解到:

> It turns out that if there's a ", ', :, or ; in any of the array values the serialization gets corrupted.

经过测试,不存在这样的问题,实验代码和结果: https://ideone.com/BA0C1B

请提供更加详细的问题说明。
Actrace
2015-01-22 15:26:38 +08:00
@raincious 论战到底的节奏么。。。其实也不用这么较真啦。。。这里没有几个人达到讨论所需层面。。。写完新功能休息的时候回来看回复也是一大乐趣。。。
maddot
2015-01-22 15:27:10 +08:00
@raincious 这个不是你的代码真实测试啊,你是直接存数据库然后拿出来直接序列化。测试要存数据库
raincious
2015-01-22 15:34:09 +08:00
@gDD 抱歉抱歉。的确没运行过,而且只是手敲了下,不然user32.dll都给干掉了不是 :D

第一条……是给C++害的……是的,我正在用C++和Windows的GDI等各种API搏斗中……所以……
第二条,很明显打得太顺手了……

另外关于第四点,file_exists已经跑过了,所以mkdir会在确认没有路径的情况下运行。但是如果是link确实需要考虑。如果真的要写成拿来用的代码,看来还得 http://php.net/manual/en/function.is-link.php 下。

看来想写个创建空文件的函数也是一堆堆的坑哈。
maddot
2015-01-22 15:34:51 +08:00
@raincious 回复点成了发送感谢,http://www.jackreichert.com/2014/02/02/handling-a-php-unserialize-offset-error/, 这篇说得更清楚,上面得链接是我随便搜的。反正如果你的代码如果有线上应用,赶紧fix,网站因为这个问题down掉的哦
friddle
2015-01-22 15:40:57 +08:00
@zhicheng 两个问题都好难。
第一个猜不用cdn.***.com是由于很多公司的域名服务器是公司内部的。而Cdn是要打包给其他公司的。实现动态ip功能,所以不好跟公司同用一个域名服务器。
第二个猜是,假如已有队列应该是,归并排序,用指针换。假如是生成新的序列的话,应该是二分插入吧。
小白入过,求大神解答
konakona
2015-01-22 16:11:53 +08:00
同情楼主,我也不想争了..就让那些第一时间答不出来(哪怕连一个首字母都没有的),但却在这里李兰狂澜,又或者是那些连PHP这门语言都不懂,就在那里指责楼主道德角度的人慢慢玩吧。

毕竟咱还有大把事情要做,不能在无意义的争斗上荒废时光..
tuteng
2015-01-22 16:44:51 +08:00
@Lucups 上次我面试也遇到了一个,见我简历上写着了解websocket,他说他没听说过,后来竟怀疑我人品了,让我诚实点

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://tanronggui.xyz/t/164074

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX