V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Actrace
V2EX  ›  程序员

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

  •  
  •   Actrace · 2015-01-21 11:24:38 +08:00 · 15663 次点击
    这是一个创建于 3391 天前的主题,其中的信息可能已经有所发展或是发生改变。
    这阵子公司收人,面试题非常简单非常基础,本来笔试只是为了走走过场,但还是有不少“牛人”竟然连创建空文件的语句都能写错。。。

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

    PS:
    1个10年经验,一个7年经验,创建空文件竟然都写成了mkdir。。。其中一个还写成了mk_dir,,,难道是故意写错的么。。。
    第 1 条附言  ·  2015-01-21 14:30:31 +08:00
    好吧,看到这么多人来喷,其实我心里很爽,铜币又赚了不少~哈哈哈
    我自己写了5年多的PHP了,虽然现在做管理,不过我上班随意的,天天研究研究写代码。
    比如如何写代码比较爽之类的~
    当然国内的话,99%的程序员进入管理层了应该都不再碰代码了吧。

    PS。突然想起一个梗,那些从培训出来的同学至少“初始”2年工作经验。
    第 2 条附言  ·  2015-01-21 14:35:55 +08:00
    再补充一个经典的笔试梗
    我厂笔试第一题是写序列化函数,serialize,95%的面试者写不出来~
    第 3 条附言  ·  2015-01-22 10:42:52 +08:00
    哎,国内气氛还是太浮躁。
    写不出来的面红耳赤地嘲笑写得出来人还真不少。
    每天都谈国产化和自主研发。
    210 条回复    2015-01-23 14:33:11 +08:00
    1  2  3  
    crab
        101
    crab  
       2015-01-21 15:13:48 +08:00
    @Actrace 26个字母写错 和 PHP创建空文件 能一样?你这逻辑。
    mhycy
        102
    mhycy  
       2015-01-21 15:17:01 +08:00
    @zhicheng 如果你说那些运算符优先级之类的问题那么我也会错了。。。
    但是如果是基础的流程、赋值、动态变量、类写法之类的那些,不太可能写错吧?(招码农的话)

    当然,如果不是招码农的话,那么不问全局性的问题而问一些细枝末节的问题就显得HR水平不够了。
    zhicheng
        103
    zhicheng  
       2015-01-21 15:25:16 +08:00   ❤️ 1
    @mhycy 其实还真不一定,除非极简单的业务,连循环,甚至 if else 都不需要的,能保证几乎不错以外。其它的都有可能出错。比如循环的 off-by-one error (不用怀疑,这个错误甚至有 Wikipedia 词条)很多专家级的工程师都可能犯这样的错误。还有比如简单的忘记初始化变量,几乎所有的项目里都会有这样的 BUG 。去年出现的几个重大的安全软件 BUG ,都是因为基础的语法写错了。
    maddot
        104
    maddot  
       2015-01-21 15:25:43 +08:00   ❤️ 5
    笔试叫别人写出序列化函数的名字?有点水平的人看到这样的面试题心里都会默默骂出题者傻逼吧
    mhycy
        105
    mhycy  
       2015-01-21 15:30:24 +08:00
    @zhicheng 好吧,虽然这俩问题我还没碰上,但的确是见多了。
    现在维护的遗留代码有不少
    mhycy
        106
    mhycy  
       2015-01-21 15:32:35 +08:00
    @maddot 当年年轻气盛当面骂过。。。囧
    如果只为看看应聘者会不会因此破口大骂,估计这题还挺有用的。
    555
        107
    555  
       2015-01-21 15:42:20 +08:00
    想到touch 难道是因为经验不足
    bombless
        108
    bombless  
       2015-01-21 15:57:36 +08:00
    @zhicheng 不能完全怪人家,说不定人家是在完全缺乏睡眠的状态下写出来的,哈哈
    anyforever
        109
    anyforever  
       2015-01-21 16:19:34 +08:00
    10年经验的人早已不再干这么基础的活儿了。。
    hahastudio
        110
    hahastudio  
       2015-01-21 16:36:18 +08:00   ❤️ 2
    LZ 还是亮公司名字吧
    省得大家再浪费时间
    chisj
        111
    chisj  
       2015-01-21 16:38:29 +08:00
    不管多少年,稍微懂点*nix的人也不会认为mkdir是创建文件吧?dir和文件有个毛关系,记不住就直接说太久没用记不住,乱说是为毛?
    Dannytmp
        112
    Dannytmp  
       2015-01-21 16:40:58 +08:00
    能不能写出要看状态吧,要是长时间没接触那方面的知识点,大牛也会忘记东西的,高考完一个月后再考一次,能考出第一次的分数吗
    holystrike
        113
    holystrike  
       2015-01-21 16:44:56 +08:00   ❤️ 14
    这个题给5年以上人的做,相当于给一个大学生考小学生的题目

    做对了吧,也没显示出能力,
    做错了吧,还被小学生给鄙视了一通
    dryyun
        114
    dryyun  
       2015-01-21 16:56:45 +08:00
    @holystrike 答的很精辟呀。
    COSTRENGTH
        115
    COSTRENGTH  
       2015-01-21 17:06:06 +08:00
    我前端面试的时候也遇到过笔试第一题让我写出不同网页声明的区别,我一下就摔袖子出去买了根儿油条然后回家了……
    Julyyq
        116
    Julyyq  
       2015-01-21 17:06:46 +08:00
    个人不是很赞同楼主的面试方式,觉得面试有工作经验的人,比较好的方式是去了解他解决问题的方法和思路。比如问一个从php初学者到高手的过程中,肯定会遇到过的某个问题,然后看他给出的解决方案是否符合你心里对高级php工程师的定义。
    misaka
        117
    misaka  
       2015-01-21 17:34:43 +08:00
    (Reply 81楼)就算态度再好也不见得会把 PHP 函数都背一遍,你这是浪费别人的时间和精力来取乐的吧,考察个鸡巴态度啊。

    (Reply 92楼)26个字母和创建空文件函数名真不是一个程度的东西好么。输出字符串的函数名才是这个程度的吧。

    (Reply 附言)"看到这么多人来喷,其实我心里很爽,铜币又赚了不少" 你就装吧。

    (Reply 79楼)"我就等收集一个block列表而已" 很好,这样可以少一些人被你耍着玩。


    求暴公司名啊!求暴公司名!
    misaka
        118
    misaka  
       2015-01-21 17:39:08 +08:00
    楼主你是 https://plus.google.com/101646607920463298131/posts 么?

    Actrace Milix
    Works at 动机科技
    66beta
        119
    66beta  
       2015-01-21 17:40:24 +08:00   ❤️ 1
    @COSTRENGTH 赞,徒手写doc声明,真是服了
    google下2分钟就拿到了,何必呢,面试官自己能写出来否?拘小节没意思

    方法和思路才是最重要的,考函数太傻了,PHP多少原生函数,你给我背背?
    zakokun
        120
    zakokun  
       2015-01-21 18:04:03 +08:00   ❤️ 1
    一群写不出来的人在红着脸争辩了....
    无论水平怎么样,也不会写成 mkdir() 吧,写成cat()什么的还能自嘲一下,争辩说这件事很正常我就无语了
    4everLoveU
        121
    4everLoveU  
       2015-01-21 18:06:22 +08:00
    我觉得这种网上搜索一下就能知道的东西,没必要作为面试题,显得很没趣
    xuewl
        122
    xuewl  
       2015-01-21 18:22:39 +08:00
    我竟无法反驳
    misaka
        123
    misaka  
       2015-01-21 18:29:45 +08:00
    @zakokun 写成 mkdir 挺正常的,写不出来总不能空在那里,猜一个的话肯定会想是不是出题者把创建空文件夹写成创建空文件了,当然会写一个 mkdir 在那里试试。
    misaka
        124
    misaka  
       2015-01-21 18:33:11 +08:00
    @zakokun 另外你也别喷我,fwrite 我为了方便写文本数据库的时候用过。
    superbear
        125
    superbear  
       2015-01-21 18:38:54 +08:00
    IDE用多了?
    kernel1983
        126
    kernel1983  
       2015-01-21 19:07:09 +08:00
    如果在纸上的话肯定写不出来
    一看试卷就想揍老师,你们有没有这样的感受?

    给个电脑写不出来就奇怪了
    elvba
        127
    elvba  
       2015-01-21 19:21:37 +08:00
    @zakokun 茴字有几种写法?我是小学生,我知道而且还写得出来,你不上网能写出来吗?

    对于一个毫无意义,充满恶意的面试题,是否能答对很重要?
    难道你没看出来 LZ 在这是来秀优越的嘛?
    出这种题的人不是脑残就是脑残好嘛?
    zakokun
        128
    zakokun  
       2015-01-21 19:40:49 +08:00   ❤️ 1
    @elvba
    如果你把"问一个很基础的问题" 当做"充满恶意的问题"的话,那我没话说.
    这个问题又不是问你 "有多少种创建文件的方式".随便写个file_put_contents() 也行吧?
    如果这个也不会.那么天天代码到底写什么呢?
    经常写代码的人,这些东西都像条件反射一样映到脑子里了,不用想就能写出来. 最多是单复数,前后顺序弄反了,或者mkdir()/mk_dir() 这种问题,只有菜鸟才完全不会写
    Kukki
        129
    Kukki  
       2015-01-21 19:47:26 +08:00
    我曾经给BI工程师应聘人出了一条数独题……
    az
        130
    az  
       2015-01-21 20:02:54 +08:00 via iPhone
    @holystrike 总结的好。自己也是面试别人的,但是非常鄙视这些不谈思想,只做加法的自以为事的面试官。
    raincious
        131
    raincious  
       2015-01-21 20:25:34 +08:00
    BGLL
        132
    BGLL  
       2015-01-21 21:12:16 +08:00
    看来不是只有我常常忘记函数名............
    Sunyanzi
        133
    Sunyanzi  
       2015-01-21 23:39:20 +08:00   ❤️ 2
    @raincious 才不要认罪咧~ 我会创建空文件哒!

    并且吧 ... 这个创建空文件的需求本来就有坑 ... 因为没说如果给定的文件名已存在怎么办 ...

    如果说给定的参数一定是一个不存在的文件且文件名一定合法那直接一个 touch 就搞定 ...

    但如果给定的参数不一定是什么 ... 结果是必须把这个参数变为一个空文件的话 ...

    就要先判断参数是不是合法 ... 然后用 file_exists 判断是不是已经存在 ... 存在的话有啥删啥再创建 ...

    这里用 is_file 效率会高些 ... 但如果给定的参数是个目录的话逻辑会出错 ... 其实还挺复杂的 ...

    至于忘记函数名忘记参数顺序这种事情其实也很正常啦 ...

    php 我写了十四年多了 ... 现在也只是能精确记住一些常用的参数顺序 ...

    strpos haystack 在前 needle 在后 ... in_array needle 在前 haystack 在后 ... implode 顺序无所谓 ...

    遇到冷门函数没有手册我也得看着报错过河 ... 反正我知道它大概是怎么用的 ... 这就够了 ...

    以及关于面试考代码这事儿我觉得也没啥不妥 ...

    虽然我这几年一直是管理岗位 ... 但我依然要么自己写代码要么看着别人写代码 ... 从未远离第一线 ...

    年纪大了自己效率低了 ... 赶需求的事儿交给小鲜肉们 ... 我自己慢悠悠的完善系统底层架构 ...

    我的底层是基于 php 5.5 的 ... 完美兼容 HHVM ...

    虽然我人老了但代码并不旧 ... 对于我而言 ... 代码是我安身立命的本事 ... 是我的魂 ...

    不管我去到哪里在做什么都一定会保持自己 up to date ... 不会生疏了这门手艺的 ...
    Felldeadbird
        134
    Felldeadbird  
       2015-01-21 23:43:03 +08:00
    这道题还真有点错愕。mkdir明显不是创建空文件了。应该用fwi...或者fopen 进行创建。
    Actrace
        135
    Actrace  
    OP
       2015-01-22 00:15:12 +08:00
    @Sunyanzi 也是醉了~握爪~专注PHP100年~
    elvba
        136
    elvba  
       2015-01-22 00:27:05 +08:00 via Android
    @zakokun 如果你把这种毫无意义、充满恶意的面试题当成基础题我无话可说。
    别断章取义把我放在最前面的毫无意义给去掉好吗?
    Lucups
        137
    Lucups  
       2015-01-22 00:28:29 +08:00
    让我想起了去年某厂电话面试我的事情。

    那人问了我一些基础问题后,开始问一些具体情况的解决方案,其中一题关于长轮询的,我说这个可以考虑用WebSocket解决,那人听不懂,我又说了几遍,那人貌似真的没听说过WebSocket,尼玛蛋疼了。。。
    MaiCong
        138
    MaiCong  
       2015-01-22 00:42:50 +08:00 via iPhone
    学了多门语言后,函数名太多有时候真心记不住,我是把记不住的函数直接做成壁纸放桌面了。想不起回到桌面瞄一眼就好了,瞄多了想不起的也想起了。。
    习惯了IDE自动高亮,错误的函数会有提示。要说让我手写也会可能出错的。
    konakona
        139
    konakona  
       2015-01-22 02:25:19 +08:00
    你这个题目应该写:请至少写2种创建文件的写法。
    konakona
        140
    konakona  
       2015-01-22 02:30:33 +08:00
    file_put_content()
    fopen()
    这么简单又常用于项目的2个方法,不知道为什么写不出。
    话说我觉得楼主观点没错啊,我也遇到了很多从一线城市回来的大牛,夸夸其谈,什么都会写,带过几百人团队,多么多么懂架构。结果一问三不知。还都是月入3w+的。
    我招的也是高级PHP。
    我出的题比这个还弱智..“只用写出正则的函数——preg和ereg,会的话我就会问深入一点,比如简单的字符串替换有什么更优的解决方案,可以是str_replace”

    或者出题“a==0 啊这种,不一定要答对,但是要有自己的见解,不懂就不懂呗,单别装..”

    对于这样的“人才”,我是SAY NO的。

    不知道有什么好喷的?
    konakona
        141
    konakona  
       2015-01-22 02:33:12 +08:00
    现在很多人是万金油,并非真正意义上的某领域全栈开发。
    我搞PHP也有差不多7、8年了?(记不清)是一直在搞,每年都有很多参与开发项目的exp。
    我实在是不明白那些面试这个高级PHP岗位的人连str_*系列让写出至少5个都那么难!

    总有那么多借口说:PHP好简单的,边看边用。

    写出来的东西能过测试!?好可怕……

    就是欺负PHP好入门,但是根本不专精。
    konakona
        142
    konakona  
       2015-01-22 02:37:54 +08:00
    @MaiCong 记不清函数名什么的倒也无所谓,我也记不住的,有了IDE以后不是经常用的记住头3个字符就行。基本说出来别人一点就透的!
    @Sunyanzi 后面那些算是自发性的了,由解答出基础问题后进行的延伸探讨。至于面试的人是写fopen($filename,'a')还是fopen($filename'ab'),都是一件很有趣的测试目的。
    Sunyanzi
        143
    Sunyanzi  
       2015-01-22 03:07:38 +08:00
    @konakona 问 fopen( 'fn', 'a' ) / fopen( 'fn', 'ab' ) / fopen( 'fn', 'a+' ) / fopen( 'fn', 'ab+' ) 异同 ...

    就这一个问题就刷 80% 的人 ... 现在根本没人去研究这个的 ...

    file_get_contents / file_put_contents 够用了 ... fopen 是个什么玩意儿 ..? fseek ..? 压根没听说过 ...

    这终归是个浮躁的时代 ... 太多嘴上有活儿手上没活儿的人 ... 要么利用好他们 ... 要么就被淘汰 ...
    davidyin
        144
    davidyin  
       2015-01-22 03:39:31 +08:00   ❤️ 1
    做管理的主要是建文件夹,里面的文件才是初级程序员要添加的。
    konakona
        145
    konakona  
       2015-01-22 04:05:42 +08:00
    @Sunyanzi ……你不会真的不知道PHP文件操作指针那些东西吧?
    我觉得fopen()是base啊。file_put_content()对于写日志和修改文件没有好处。
    Sunyanzi
        146
    Sunyanzi  
       2015-01-22 04:30:07 +08:00
    @konakona 这是个吐槽啦 ... 我果然应该在第三行整行加上引号吗 ...
    zhicheng
        147
    zhicheng  
       2015-01-22 05:22:30 +08:00
    其实大家喷楼主主要是因为楼主的答案太固定了,大家喜欢开放式问题。那我来说两个,有兴趣的可以试一试。

    1,为什么很多公司 cdn 的域名是 xxxcdn.com 而不是 cdn.xxx.com
    2,如何只用 10K 内存对3万个唯一的 uint16_t 的数字进行排序。

    答案相当简单,也有多种解法,而且不同水平的工程师也会有不同的答案。我面试问这两个问题,几乎没有回答出来的,但大多也让过了。
    XDA
        148
    XDA  
       2015-01-22 07:52:14 +08:00 via Android
    难道就我一个人挺LZ么
    loolac
        149
    loolac  
       2015-01-22 09:02:56 +08:00
    看处于什么状态了,难道你们写完代码就不再检查一遍么?
    leejaen
        150
    leejaen  
       2015-01-22 09:03:24 +08:00
    咱不考小学的题,咱也不考高中的题,再考神经反射级别的,来,背背最基本的导数公式!快公布你公司大名吧,求你了!
    billwang
        151
    billwang  
       2015-01-22 09:05:37 +08:00
    混到管理层面,打交道的大部分都是用户和领导,在不就是word,excel,ppt,那个公司的管理层面还每天码代码?好吧,如果真有的话你们公司的确是一个技术型的公司。
    wdlth
        152
    wdlth  
       2015-01-22 09:09:12 +08:00
    幸亏面试时没问我声乐分几种唱法。
    Zuckonit
        153
    Zuckonit  
       2015-01-22 09:10:48 +08:00
    对于干了7年的coder, 经验和解决问题的思路更重要
    jsjscool
        154
    jsjscool  
       2015-01-22 09:17:37 +08:00
    面试企鹅的PHP职位,本以为HR会问代码相关的问题,结果一来就3问……PHP5.5与5.4的差别,YII 2与YII1的差别,HTTP2 与HTTP1的差别。然后我感觉几年代码白写了
    ibeyond
        155
    ibeyond  
       2015-01-22 09:22:57 +08:00
    之前在某一个公司面试时,第一个面试题目竟然是在白板上填写SpringMVC的某些方法的关键字。可怜考官出了5分钟的题目,我犹豫了两秒钟告诉他我记不住了。。。尽管如此,面试也还是过了。只不过由于某些原因没去罢了。
    mcfog
        156
    mcfog  
       2015-01-22 09:27:15 +08:00 via Android
    爱好6年工作3年的php狗从未创建过空文件真是辜负了世界,对不起我错了
    bjzhush
        157
    bjzhush  
       2015-01-22 09:29:19 +08:00
    PHP的函数名 _ 确实比较混乱,不过把创建文件写成mkdir确实是不应该
    jsjscool
        158
    jsjscool  
       2015-01-22 09:32:07 +08:00
    @konakona 一直不忍心告诉你,是file_put_contents
    wwek
        159
    wwek  
       2015-01-22 09:46:12 +08:00
    写序列化. 怎么想的.

    建议把这题改成写 10个array处理函数更恰当`
    cai314494687
        160
    cai314494687  
       2015-01-22 09:58:59 +08:00
    7年经验你还给人家出笔试题。要是我的话面试的时候立马走人。
    555
        161
    555  
       2015-01-22 09:59:47 +08:00
    找这么多年经验的,问这么简单的问题,待遇高吗?
    qqjt
        162
    qqjt  
       2015-01-22 10:28:22 +08:00
    @konakona 我心虚特地查了下,str_ireplace() str_pad() str_repeat() str_replace() str_rot13() str_shuffle() str_split()str_word_count() 我能记住的就str_replace()……
    iamjs
        163
    iamjs  
       2015-01-22 10:43:53 +08:00
    晃了一眼看 第一反应是 mkdir。
    如果你指出错误,我也会“抱歉,看错,应该是 fwrite file_put_content”....

    其实 新建文件夹 和 新建文件都比较少用到。。但linux常用mkdir。所以会更熟一点。。
    没啥意思 纠结这点。。。。

    序列化。。真心好久好久不用。。。。。。
    muzuiget
        164
    muzuiget  
       2015-01-22 10:47:45 +08:00
    7年经验还考这种题目,能马上查出来的就不蛋疼去背了。
    loryyang
        165
    loryyang  
       2015-01-22 10:52:33 +08:00
    我不太同意,我真的记不住那么多API,而且API的很多细节用的时候才会认真研读。除非是最近在使用这部分的API,否则用过会忘的。即使是自己写的代码,过一段时间也会忘记。哪怕你认真研究,做过笔记的东西,最终还是会忘的。
    一个资深的RD最重要的不是API记得有多娴熟,而是对这个语言在设计、开发上面应该遵循怎样的规则,知道多少这门语言的缺陷、坑。最佳实践是怎样的,业内动向,了解各种成功失败案例。遇到困难,知道如何去解决。如果去寻找适合当前需求的技术、框架。
    说实话一门语言,如果只是招进来用用API,写两行代码,那随便找一个毕业学生好了,何必要找资深员工呢?
    不过,我同意面试考察写代码,但是更倾向于写伪代码,刨除API本身的限制,更看中面试者的思维和逻辑。
    maddot
        166
    maddot  
       2015-01-22 10:55:58 +08:00
    楼主的逻辑堪忧啊,这是背多少函数名都解决不了的,喷你说的考试题代表写不出这些函数名?
    Havee
        167
    Havee  
       2015-01-22 11:14:24 +08:00
    楼主附言3没必要了吧
    人家喷的是这面试题出的不应该,而不是大家写不出来,然后嘲讽实习生能写出来......
    楼主招聘要求降低点,譬如2-3年即可,没人会喷。2-3年的经验足够了,时间再长的话,就是架构等其他方面的经验了。
    如果真有一个7年一直在底层码php经验的人,反而会怀疑对方哪方面有问题,会不会影响到现有的团队了。
    Actrace
        168
    Actrace  
    OP
       2015-01-22 11:22:26 +08:00
    @Havee
    很多人写了一辈子代码,骨灰级程序员是存在的。在某些“邪恶”的国家甚至很多。这些程序员还真是可遇不可求。
    反倒是有些人,自持工作年限加成光环混日子(还挺多),拜托这个行业不是这么好混的好不~
    架构之类的,真以为那些一两年经验的人都不懂么?大部分人只是因为自卑而不表现出来而已。
    Havee
        169
    Havee  
       2015-01-22 11:34:48 +08:00
    @Actrace
    还是看你用功需求
    如果你是 CIO,要拓展研发的部门,那么招管理人员用此类面试题肯定是不行的,他们的强项在于问题解决的思路与方法,而不是实践
    如果你是一部门主管,需要一位资深码农来分担研发环节的任务,诚如你说,骨灰级的爱好者肯定是存在的,那么慢慢挑吧

    至于你说的一两年经验的人懂架构,懂跟实际操作永远是两码事,用个行外的比方来说,开初创公司简单吧,魔都甚至都不验资了,但是实际流程走一遍的跟没走过流程的永远是两类人。
    Actrace
        170
    Actrace  
    OP
       2015-01-22 11:42:42 +08:00
    @Havee
    招聘要求是高级PHP。。。高级PHP连这些基本操作都能出错不觉得很扯淡吗。。。

    PS。管理人员基本不会从外部引入,,国内大部分都是内部提升。
    aising
        171
    aising  
       2015-01-22 11:49:45 +08:00
    serialize函数写不正确,代表不会用这个函数么?不知道楼主考验的是什么能力。。
    我想问问楼主,你知道php作者的名字么
    maddot
        172
    maddot  
       2015-01-22 12:28:18 +08:00
    @Actrace "管理人员基本不会从外部引入,,国内大部分都是内部提升", 楼主真是什么都懂啊,一开口就是“95%”,“国内大部分”
    maddot
        173
    maddot  
       2015-01-22 12:29:08 +08:00
    还漏了一个“基本不”
    RemRain
        174
    RemRain  
       2015-01-22 12:56:33 +08:00
    创建空文件前,不应该先用 mkdir 把父目录创建出来么?如果经常切换各种语言的话,写不对很正常,比如 Perl 里面各种 mkpath make_path mkdir 用多了,换回 PHP 后,我还真不知道是 mkdir 还是 mk_dir。高级 PHP 指的是高级 PHP 手册工程师么?

    另外,我提出质疑,用 PHP 创建空文件,楼主也写不对。
    sujin190
        175
    sujin190  
       2015-01-22 13:21:42 +08:00
    看来咱就是那95%写不出serialize函数的人,单词不会拼,从来依赖ide提示的说。。。。
    ideaa
        176
    ideaa  
       2015-01-22 13:40:12 +08:00
    我从来不会去记serialize这样的函数的全拼... 都是IDE的错...
    iyaozhen
        177
    iyaozhen  
       2015-01-22 13:44:30 +08:00
    @zhicheng 就是你们这些人,我要报警了。为了校招我把状态码全背了。
    gadmyth
        178
    gadmyth  
       2015-01-22 13:46:15 +08:00
    IDE用多了。我们是命令行党
    raincious
        179
    raincious  
       2015-01-22 14:08:13 +08:00
    @Sunyanzi

    其实呢,我也觉得,如果连serialize都打不出来,估计平时代码量也没多少。

    话说怎么创建空文件呢?

    $pathToFile = '';
    $pathToRootDir = pathinfo($pathToFile, PATHINFO_DIRNAME);

    if (!file_exists($pathToRootDir) && mkdir($pathToRootDir, 0644, true)) {
        return false;
    }

    return file_put_content($pathToFile, ''); // Replace the file if it's there already

    好像不是很难,下一题……
    mhycy
        180
    mhycy  
       2015-01-22 14:11:59 +08:00
    @raincious 说实在的还没遇上要用序列化的需求...
    JSON倒是经常见
    wdlth
        181
    wdlth  
       2015-01-22 14:13:34 +08:00
    @jsjscool HTTP2?我看企鹅是要收了IETF吧……
    gDD
        182
    gDD  
       2015-01-22 14:14:49 +08:00
    @raincious 你把file_put_contents写成了file_put_content,另外你这种情况无法处理$pathToRootDir正好是一个文件的情况。
    raincious
        183
    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
        184
    mhycy  
       2015-01-22 14:21:29 +08:00
    @raincious 看来咱们需求不一样,我都是把数组拆了入库的
    elvba
        185
    elvba  
       2015-01-22 14:32:29 +08:00
    LZ 不就是抓到了别个的小辫子然后就抓着不放,还不想松手对吧?
    没正面回复问题,尽往别的地方扯。
    “我自己写了5年多的PHP了,虽然现在做管理,不过我上班随意的,天天研究研究写代码。
    比如如何写代码比较爽之类的~”
    研究的结果就是怎么给一个7年工作经验的人出创建空文件这种题?让人踩坑好婊飞别人很爽么?
    把别人婊飞了还不过瘾,再来 V2 发一帖,继续秀自己的优越感?

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

    之所以会发这样一个帖,主要是招聘要求明明白白写着我们是要能干事的人(码农),但是还是有不少自称多年经验的大叔想进来试试运气当管理,混日子的风气越来越重了。感觉很无奈,招个靠谱的人确实不是个容易事情~
    maddot
        188
    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
        189
    raincious  
       2015-01-22 14:59:24 +08:00
    @maddot 是啊,就是这样。

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

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

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

    所以说,会写serialize这个函数名,真的一点不重要。
    gDD
        192
    gDD  
       2015-01-22 15:17:20 +08:00   ❤️ 1
    @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
        193
    raincious  
       2015-01-22 15:24:33 +08:00   ❤️ 1
    @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
        194
    Actrace  
    OP
       2015-01-22 15:26:38 +08:00
    @raincious 论战到底的节奏么。。。其实也不用这么较真啦。。。这里没有几个人达到讨论所需层面。。。写完新功能休息的时候回来看回复也是一大乐趣。。。
    maddot
        195
    maddot  
       2015-01-22 15:27:10 +08:00
    @raincious 这个不是你的代码真实测试啊,你是直接存数据库然后拿出来直接序列化。测试要存数据库
    raincious
        196
    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
        197
    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
        198
    friddle  
       2015-01-22 15:40:57 +08:00
    @zhicheng 两个问题都好难。
    第一个猜不用cdn.***.com是由于很多公司的域名服务器是公司内部的。而Cdn是要打包给其他公司的。实现动态ip功能,所以不好跟公司同用一个域名服务器。
    第二个猜是,假如已有队列应该是,归并排序,用指针换。假如是生成新的序列的话,应该是二分插入吧。
    小白入过,求大神解答
    konakona
        199
    konakona  
       2015-01-22 16:11:53 +08:00
    同情楼主,我也不想争了..就让那些第一时间答不出来(哪怕连一个首字母都没有的),但却在这里李兰狂澜,又或者是那些连PHP这门语言都不懂,就在那里指责楼主道德角度的人慢慢玩吧。

    毕竟咱还有大把事情要做,不能在无意义的争斗上荒废时光..
    tuteng
        200
    tuteng  
       2015-01-22 16:44:51 +08:00
    @Lucups 上次我面试也遇到了一个,见我简历上写着了解websocket,他说他没听说过,后来竟怀疑我人品了,让我诚实点
    1  2  3  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2296 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 06:08 · PVG 14:08 · LAX 23:08 · JFK 02:08
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.