Web backend developer. Electrical Engineer.
博客文章
最近发表的评论
  • 分享一个很基础但是又很考验基本功的面试题 at 2个月前

    @FreeMason__set() 的已经很接近了,可惜是错误答案。类 Foo 没有 __set() 魔术方法,所以两种情况下都没有调用它的开销。答案在我刚写的这篇简短的博客里,你可以参考一下。

  • PHP array_column 引发的一个小问题 at 3个月前

    这个解决方案不足的一点是,array_walk, array_column, array_search 都遍历了数组,因此这个操作为平方时间复杂度。

    下面提供一个实现方案,可以在线性时间复杂度解决问题(为了简化代码,用到了我开发的collections扩展):

    $partition = Collection::init($items)->partition(function ($value) {
        return $value['pid'];
    });
    $pid_views = Collection::init($partition->first)->associate(function ($value) {
        return new Pair($value['uid'], $value['views']);
    });
    $uid_items = Collection::init($partition->second)
        ->associateBy(function ($value) {
            return $value['uid'];
        })
        ->map(function ($value, $key) use ($pid_views) {
            $value['views'] += $pid_views->get($key, function ($value) {
                return 0;
            });
            return $value;
        });
    //var_dump($uid_items->toArray());
  • [扩展推荐] ext-collections: 优雅、快速地操作 PHP 数组【Now going BETA】 at 3个月前

    第一个beta版本已经发布,在正式发布之前,还需要进行一些最后的测试工作。如果顺利的话,这两个月可以进驻PECL。

  • @ 庞浩然 Paul 在 2018-06-21 17:25:38 的动弹 at 5个月前

    说反了吧老哥 :joy:

  • 你们敲代码时都在听什么音乐 at 6个月前

    我只有在比较安静的环境下才能敲代码

    所以音乐是不可能听的,必要的时候还需要耳塞 :neutral_face:

  • @CismonX 在 2018-05-23 15:33:55 的动弹 at 6个月前

    @会飞的猪 后端。美团的后端以Java为主,所以这也是我跳出舒适区的一次尝试。

  • 国内使用 Laravel 搭建的线上项目都有哪些 at 6个月前

    目前我校网络工作室几乎所有项目都是使用Laravel开发的。之前是用ThinkPHP写的,这两年全都用Laravel重构了。

  • @rswordx 在 2018-05-13 11:20:39 的动弹 at 7个月前

    这是一个以Laravel以及“偏前端的Web后端开发”为主的PHP社区,自然不会有太多做游戏后端的开发者活跃在这里。

  • @Summer 在 2018-05-11 16:43:44 的动弹 at 7个月前

    第一次跳出舒适区是从Windows的桌面应用开发转向Linux的后端开发,第二次就是从我熟悉的PHP/C++的技术栈尝试转向Java/Kotlin。最近也是找了Java后端的工作,就快拿到offer了。

  • MySQL 创建高性能的索引 at 7个月前

    @overfalse

    MySQL官方文档指出:

    Declare columns to be NOT NULL if possible. It makes SQL operations faster, by enabling better use of indexes and eliminating overhead for testing whether each value is NULL. You also save some storage space, one bit per column. If you really need NULL values in your tables, use them. Just avoid the default setting that allows NULL values in every column.

    尽可能避免使用NULL,它会影响索引的性能。但是查询中IS NULL是可以使用索引的,参考MySQL官方文档

    MySQL can perform the same optimization on col_name IS NULL that it can use for col_name = constant_value. For example, MySQL can use indexes and ranges to search for NULL with IS NULL.

  • 忘记 MD5 Sha1 吧 从现在开始使用 Bcrypt 和 Argon2i 吧 at 7个月前

    PHP7.2起libsodium被纳入标准库,建议使用libsodium的sodium_crypto_pwhash()函数。它使用Argon2算法,而且支持自定义计算结果长度。如果有非对称加密的需要,可以试试libhydrogen的hydro_pwhash_xxxx()系列函数。它的PHP binding最近正在持续更新。

  • @Max 在 2018-05-03 17:58:15 的动弹 at 7个月前

    HJKL方向键。。是的这很vim :joy:

  • 3. PHP 引用解惑 at 7个月前

    本来这一章要讲在扩展中定义函数和传参,但是后来想一想,还是先把几个GC类型都讲完再讲那些吧,于是就先从引用讲起。而且其实定义函数和传参这块并不需要展开讲,简单看一看一些扩展的源码就能轻松掌握了,而原理性的东西还是值得多说一说的。

  • cp 命令可以复制多个文件 at 7个月前

    这并不是cp的特性,而是bash的特性。参考这里

  • [数据结构] 链表的实现在 PHP 中 at 7个月前

    @DianWang 其实早在4年多前已经有了嵌套类的RFC,但是作者考虑到一些因素后撤稿了。详见这里

  • [扩展推荐] ext-collections: 优雅、快速地操作 PHP 数组【Now going BETA】 at 7个月前

    @Hanson 嗯,我刚才看了下那个扩展,实现的功能还是少了些。相比,ext-collections有将近100个方法,其命名和功能严格依照Kotlin.Collections中的实现。其实这类扩展实现难度很低(写起来没有成就感),也有一些人写过(有重复造轮子之嫌),但是以我目前见过的类似开源扩展来看,多半有诸如内存泄漏或者违背写时复制原则的bug,而且无一例外地功能少。所以我觉得用心开发出一个适用性强、高效且稳定的数组操作扩展还是很有必要的。

  • @Summer 在 2018-04-18 08:56:54 的动弹 at 8个月前

    记得很久以前框架不流行,大家都直接在PHP里面混写HTML的时候每天都能看到if(...) ... endif;这样的语法,现在除了在一些模版里偶尔见到之外,基本上已经绝迹了 :joy:

  • 如何在不会导致服务器宕机的情况下,用 PHP 读取大文件 at 8个月前

    补充一下。libuv支持异步文件系统I/O,有需求的可以使用php-uv扩展。

  • Web 开发进阶指南 at 8个月前

    @chenos 其实像PHP-CPP这种库对Zend API的进一步封装,对于一般PHP开发者来说反而减少了他们踩的坑,但是它们都有相当大的局限性,而且可能会对扩展的性能大打折扣,尤其是在不熟悉PHP底层机制的初级开发者手中。所以,我更倾向于推荐PHP扩展开发的入门者先研究PHP底层,再熟悉使用Zend API开发扩展,在这基础上如果有快速开发的需求再考虑使用PHP-CPP这种高度封装的库。

  • @DenverB 在 2018-04-13 15:28:57 的动弹 at 8个月前

    其实这些算是非常简单的。之前我的实习一面,让我举例说明JVM性能调优,简述InnoDB在底层是如何实现的transaction,还有从底层实现一个关系型数据库的group by功能的实现思路等等。看我不太会,问简单一些的,比如像说明Spring Framework中的依赖注入的实现原理,TCP发错重传机制,B+树的实现等等,我感觉答得还可以,然而最终还是挂了。