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

3 年 PHPer 的面试总结

  •  
  •   jsyzchen · 2017-09-11 09:13:58 +08:00 · 8038 次点击
    这是一个创建于 2629 天前的主题,其中的信息可能已经有所发展或是发生改变。
    3 年 PHPer 的面试总结,都是大厂的面试题,值得收藏。
    原文链接: http://coffeephp.com/articles/4?utm_source=v2ex
    64 条回复    2017-11-07 09:38:56 +08:00
    xman99
        1
    xman99  
       2017-09-11 09:16:18 +08:00
    感谢分享
    wintercoder
        2
    wintercoder  
       2017-09-11 09:27:35 +08:00 via Android
    除了多了一些很细致的语言问题,好像跟校招没什么区别?
    goodspb
        3
    goodspb  
       2017-09-11 09:41:50 +08:00 via iPhone
    Mark
    mentalidade
        4
    mentalidade  
       2017-09-11 09:41:51 +08:00 via Android
    好文章
    Xrong
        5
    Xrong  
       2017-09-11 09:56:39 +08:00
    给楼主点个赞,很棒。。。
    throns
        6
    throns  
       2017-09-11 09:57:56 +08:00 via Android
    感谢楼主 很有用
    vardump
        7
    vardump  
       2017-09-11 10:02:18 +08:00
    实话实说,三年的经验这点东西还是太浅了。推广你网站是真的,新机 boy~~
    ss098
        8
    ss098  
       2017-09-11 10:03:47 +08:00
    里面的 MySIAM -> MyISAM。
    enenaaa
        9
    enenaaa  
       2017-09-11 10:18:25 +08:00
    已经不敢面试了。现在写代码都是边查边写。 好多 api, 语法用过即忘。
    solgh
        10
    solgh  
       2017-09-11 10:19:40 +08:00
    感谢分享
    g8287694
        11
    g8287694  
       2017-09-11 10:20:46 +08:00
    @enenaaa +1 没文档很难做事了
    lelouchyang
        12
    lelouchyang  
       2017-09-11 10:22:35 +08:00   ❤️ 1
    一看到 get 比 post 安全 就不想看下去了。。。
    azh7138m
        13
    azh7138m  
       2017-09-11 10:29:21 +08:00 via Android
    @vardump 前端表示也能懂个一半,感觉只写了基础的部分啊
    colincat
        14
    colincat  
       2017-09-11 10:30:40 +08:00
    感觉真心和 Java 有差距,你这文章里面那个秒杀系统真心扛不住并发
    throns
        15
    throns  
       2017-09-11 10:35:56 +08:00 via Android
    @lelouchyang 他写了更不安全
    johnlui
        16
    johnlui  
       2017-09-11 10:41:19 +08:00
    @throns 两者安全性完全一致
    nullen
        17
    nullen  
       2017-09-11 10:45:21 +08:00   ❤️ 1
    @jsyzchen
    21.请设计一个实现方式,可以给某个 ip 找到对应的省和市,要求效率竟可能的高。
    这个用二分查找。
    FORyou2017
        18
    FORyou2017  
       2017-09-11 11:15:05 +08:00
    有用!
    kltt22
        19
    kltt22  
       2017-09-11 11:17:57 +08:00
    @lelouchyang 说反了?文中不是说 get 不适合传递私密数据?
    ylsc633
        20
    ylsc633  
       2017-09-11 11:27:54 +08:00
    好东西..
    那个设计模式,我收下了..
    to2false
        21
    to2false  
       2017-09-11 11:43:59 +08:00
    mark
    Felldeadbird
        22
    Felldeadbird  
       2017-09-11 11:48:45 +08:00   ❤️ 1
    我怎么感觉这玩意是网上抄来,然后拼凑起来的文章?
    lianxiaoyi
        23
    lianxiaoyi  
       2017-09-11 11:55:30 +08:00
    @colincat 我也这么觉得,看了前面一些算法。觉得一般,但是看到秒杀这段代码,,,我这呵呵一笑了。。。。
    a308057848
        24
    a308057848  
       2017-09-11 12:17:22 +08:00
    没啥算法, 都是中规中矩的解题
    jsyzchen
        25
    jsyzchen  
    OP
       2017-09-11 13:04:05 +08:00
    @nullen 谢谢
    jsyzchen
        26
    jsyzchen  
    OP
       2017-09-11 13:08:54 +08:00
    @ss098 感谢提醒,已修改
    jsyzchen
        27
    jsyzchen  
    OP
       2017-09-11 13:09:47 +08:00
    @lelouchyang 没有啊,我写的是“ GET 比 POST 更不安全,因为参数直接暴露在 URL 上,所以不能用来传递敏感信息。”
    jsyzchen
        28
    jsyzchen  
    OP
       2017-09-11 13:10:12 +08:00
    @ylsc633 谢谢
    jsyzchen
        29
    jsyzchen  
    OP
       2017-09-11 13:10:29 +08:00
    @mentalidade 谢谢!
    jsyzchen
        30
    jsyzchen  
    OP
       2017-09-11 13:10:37 +08:00
    @Xrong 谢谢!
    jsyzchen
        31
    jsyzchen  
    OP
       2017-09-11 13:10:47 +08:00
    @solgh 谢谢!
    jsyzchen
        32
    jsyzchen  
    OP
       2017-09-11 13:12:37 +08:00
    @wintercoder 工作经验还不行,见笑了
    jsyzchen
        33
    jsyzchen  
    OP
       2017-09-11 13:13:53 +08:00
    @vardump 但确实是面试官问的,我只是整理了一下。确实帮自己社区推广了一下,嘿嘿。
    jsyzchen
        34
    jsyzchen  
    OP
       2017-09-11 13:15:08 +08:00
    @FORyou2017 谢谢!
    jsyzchen
        35
    jsyzchen  
    OP
       2017-09-11 13:16:48 +08:00
    @colincat 嗯嗯,只是实现了功能,想到更好的方案后会完善
    jsyzchen
        36
    jsyzchen  
    OP
       2017-09-11 13:18:29 +08:00
    @a308057848 确实算法都是一些常见的
    AlwaysBehave
        37
    AlwaysBehave  
       2017-09-11 13:30:39 +08:00
    COOKIE 和 SESSION 的区别和关系
    这个分类最后一条 Session 写错了
    还有我理解的话,session 的一种实现方式是 cookie,不理解所谓 session 安全性更高是怎么得出来的
    sobigfish
        38
    sobigfish  
       2017-09-11 13:52:15 +08:00
    虽然是用的人家的开源代码,但 UI 也不用长那么像吧...什么都不改 ...
    Lucups
        39
    Lucups  
       2017-09-11 13:54:20 +08:00
    秒杀这个一并发可以肯定是超售的,修正一下吧。
    huage
        40
    huage  
       2017-09-11 14:01:29 +08:00
    很明显,作者是在做推广啊,居然还是了小尾巴 utm_source=v2ex
    crazyworld825
        41
    crazyworld825  
       2017-09-11 14:02:58 +08:00
    @AlwaysBehave #37 按照我对这两者的了解,Session 比 Cookie 安全是因为 Session 存在服务器中,只能由服务端程序进行相关操作,Cookie 是存放在客户端(浏览器),是明文显示的,当然也可以进行相关的 hash 和加密,但是客户端是可见,使用 js 是可以对 Cookie 进行修改、读取、删除等一系列的操作,在后端程序中,可以将 cookie 设计为 HttpOnly,这样前端就无法使用 js 对 cookie 进行读写等操作,session 和 cookie 对应一般靠后端生成的唯一的一个序列( sessionid )来对应,这样就没办法窃取 cookie 进行 session 劫持,而且一般 cookie 被窃取,也没办法修改 session 的数据,都是由后台程序根据操作自动写入的吧
    killerv
        42
    killerv  
       2017-09-11 14:06:44 +08:00
    session 的安全性更高这个不太赞同,感觉没有什么安全性对比之说,如果这么说感觉就是对 cookie 的误解。cookie 就是传输数据给服务端的一种方式,只是在 header 里面而已。而 session 可以通过 cookie 匹配到用户 session。
    jsyzchen
        43
    jsyzchen  
    OP
       2017-09-11 14:15:51 +08:00
    @sobigfish 只是 UI 没改,因为我是做 PHP 的,改 UI 比较麻烦,但 PHP 代码基本都重写了,我用的是 Phalcon 框架,phphub 用的是 Laravel,过几天会开源,敬请关注。
    jsyzchen
        44
    jsyzchen  
    OP
       2017-09-11 14:16:57 +08:00
    @Lucups 好的,我再想想其他更好的方案
    AlwaysBehave
        45
    AlwaysBehave  
       2017-09-11 14:17:05 +08:00
    @crazyworld825 唔,没想到在验证安全上有什么好处?
    所谓说劫持,只要能拿到 cookie 就可以劫持登录状态吧,这个后台加密也是无能为力啊
    对客户端可见难道不是正常?不理解有什么问题,防 XSS 用 HTTPONLY 这个点 okey
    我还是没有看出来所谓安全在哪里,session 是为了识别用户,cookie 只是实现方式之一,类似的还有 JWT,我不认为这之间有什么可以对比的地方……
    更何况没法修改 session 的数据的话这个…… cookie 加密了也可以储存啊,但是不是不赞同这样做吗

    @killerv +1 感觉是哪里误解了
    jsyzchen
        46
    jsyzchen  
    OP
       2017-09-11 14:17:48 +08:00
    @huage 方便统计而已,嘿嘿。,
    jugelizi
        47
    jugelizi  
       2017-09-11 14:28:36 +08:00
    @AlwaysBehave 曾见过有个开源系统登录的记住我的功能是把用户名和密码编码存在 cookie 里的.....
    gouchaoer
        48
    gouchaoer  
       2017-09-11 14:37:43 +08:00
    这个题目很多有问题吧,那个过滤 js 的只是过滤 script 标签本身就是错的;那个秒杀系统更扯淡,要 2 个 tcp 来回而且对单 uid 重复提交没有过滤,你就算用 redis 集群所有的请求都打到一个 redis 的 list 上能撑住么……
    Xrong
        49
    Xrong  
       2017-09-11 14:37:58 +08:00
    @huage 老哥敏感了点,23333333
    usapla
        50
    usapla  
       2017-09-11 15:23:21 +08:00
    好东西,学习了
    crazyworld825
        51
    crazyworld825  
       2017-09-11 15:30:44 +08:00
    @AlwaysBehave #45 cookie 的产生是为了保持 web 浏览状态,可以存放服务器创建的信息,然后在请求的时候发送给服务器,正如#47 说的,有直接把用户名或密码等敏感信息放在 cookie 里面的,那都是客户端可见的;

    #42 说 cookie 就是传输数据给服务端的一种方式,我们开发都会被提醒,不要相信客户端传过来的数据,要在服务端进行验证,那如果本来需要保存在 cookie 的数据可以直接保存在 session 中,是不是相对安全?

    session 同时也是可以保存用户信息的,不过在服务器中;因为现在的浏览器都支持 cookie,所以一般都将 sessionid 写在 cookie 中进行身份的对应,形成了 cookie 和 session 一般成对使用的情况,在禁用 cookie 的情况下,是可以在链接后面加上相对应的 sessionid 也是可以工作的,如果分开来看,就保存数据而言,session 比 cookie 安全,这说法我觉得没问题。
    wukongkong
        52
    wukongkong  
       2017-09-11 15:51:12 +08:00 via Android
    @jugelizi 应该怎么写呢
    jsyzchen
        53
    jsyzchen  
    OP
       2017-09-11 16:01:06 +08:00
    @gouchaoer 多谢反馈,我会及时修正
    fanhan
        54
    fanhan  
       2017-09-11 17:04:14 +08:00
    7.如何快速寻找一个数组里最小的 1000 个数
    感觉这个算法有问题,时间复杂度上比正常排序后取一千还慢
    rr41ns
        55
    rr41ns  
       2017-09-11 17:59:14 +08:00
    楼主好人
    jsyzchen
        56
    jsyzchen  
    OP
       2017-09-11 18:09:22 +08:00
    @rr41ns 谢谢!
    jsyzchen
        57
    jsyzchen  
    OP
       2017-09-11 18:14:11 +08:00
    @fanhan 嗯嗯,我的那种方法时间复杂度是 O(nk),不过可以改进,可以维护容量为 k 的最大堆,那样时间复杂度就变成 O(k)了
    jsyzchen
        58
    jsyzchen  
    OP
       2017-09-11 18:15:42 +08:00
    @fanhan 维护容量为 k 的最大堆,时间复杂度应该为 O(logk)
    a1044634486
        59
    a1044634486  
       2017-09-11 18:54:14 +08:00
    这是 php 还是运维。。我晕了
    jsyzchen
        60
    jsyzchen  
    OP
       2017-09-11 19:30:49 +08:00
    @a1044634486 哈哈,面试什么都问
    msg7086
        61
    msg7086  
       2017-09-12 04:16:56 +08:00
    function is_same_sign($a, $b)
    {
    if ($a * $b > 0) {
    return true;
    } else {
    return false;
    }
    }

    换我会写成 $a > 0 && $b > 0 || $a < 0 && $b < 0。

    就算用乘法,我也会写成 return $a * $b > 0; 。
    jsyzchen
        62
    jsyzchen  
    OP
       2017-09-12 09:41:24 +08:00
    @msg7086 确实这样更直观一些
    wengang285
        63
    wengang285  
       2017-11-06 17:13:00 +08:00
    @Lucups 超发不会,只是性能不高
    Lucups
        64
    Lucups  
       2017-11-07 09:38:56 +08:00
    @wengang285 写得太复杂了,decr 就可以了,判断减 1 操作后的值是否小于 0。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2788 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 12:51 · PVG 20:51 · LAX 04:51 · JFK 07:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.