董俊俊 的个人动态
  • 董俊俊 回答了问题
    2个月前

    怎么把react 项目中所有下划线的参数转换为驼峰

    在ajax 请求的接口的地方做一层收敛,参数名遍历处理

    String.prototype.toCamelCase = function(str) {
        return str
            .replace(/\s(.)/g, function($1) { return $1.toUpperCase(); })
            .replace(/\s/g, '')
            .replace(/^(.)/, function($1) { return $1.toLowerCase(); });
    }
    
    //核心处理逻辑
    let obj;
    for(var key in params) {
     obj = params[key].toCamelCase()
    }
  • 董俊俊 回答了问题
    2个月前

    使用Docker在window10下搭建SWOFT开发环境,mysql连接错误

    你的 mysql 和 swoft 是跑在一个容器里吗?

    如果不是,需要先创建桥接网络,让这两个容器处于同一个网段,不然它俩之间就是网络隔离的。

  • 董俊俊 回答了问题
    2个月前

    有点纠结线程池的一些概念

    我觉得很简洁明了,任务就是一个Runnable对象,等着被线程调度执行的。你上面说的t2就是提交的一个任务。他是一个Thread 实例,但是在线程池里面还是被当做是一个Runnable对象。t1可以说是线程对象,只是它调度的是自己内部的任务。
    代码位置:Thread#run()

        @Override
        public void run() {
            if (target != null) {
                target.run();
            }
        }

    线程池的源码,你也可以点进去看看.

    public interface Executor {
    
        /**
         * Executes the given command at some time in the future.  The command
         * may execute in a new thread, in a pooled thread, or in the calling
         * thread, at the discretion of the {@code Executor} implementation.
         *
         * @param command the runnable task
         * @throws RejectedExecutionException if this task cannot be
         * accepted for execution
         * @throws NullPointerException if command is null
         */
        void execute(Runnable command);
    }

    你传进来的参数Runnable对象就是提交给线程池的任务。
    任务传进来之后会根据线程池的策略来决定是创建线程资源去执行还是放入队列等待调度或者其他策略,
    具体的任务被执行的代码可以看ThreadPoolExecutor#runWorker(Worker w) 方法,

        final void runWorker(Worker w) {
            Thread wt = Thread.currentThread();
            Runnable task = w.firstTask;
            w.firstTask = null;
            w.unlock(); // allow interrupts
            boolean completedAbruptly = true;
            try {
                while (task != null || (task = getTask()) != null) {
                    w.lock();
                    // If pool is stopping, ensure thread is interrupted;
                    // if not, ensure thread is not interrupted.  This
                    // requires a recheck in second case to deal with
                    // shutdownNow race while clearing interrupt
                    if ((runStateAtLeast(ctl.get(), STOP) ||
                         (Thread.interrupted() &&
                          runStateAtLeast(ctl.get(), STOP))) &&
                        !wt.isInterrupted())
                        wt.interrupt();
                    try {
                        beforeExecute(wt, task);
                        Throwable thrown = null;
                        try {
                            // 这里执行了任务
                            task.run();
                        } catch (RuntimeException x) {
                            thrown = x; throw x;
                        } catch (Error x) {
                            thrown = x; throw x;
                        } catch (Throwable x) {
                            thrown = x; throw new Error(x);
                        } finally {
                            afterExecute(task, thrown);
                        }
                    } finally {
                        task = null;
                        w.completedTasks++;
                        w.unlock();
                    }
                }
                completedAbruptly = false;
            } finally {
                processWorkerExit(w, completedAbruptly);
            }
        }
  • 董俊俊 回答了问题
    2个月前

    有点纠结线程池的一些概念

    t2 还是个线程对象啊。

    只不过何时执行 t2.start() 是由线程池内部决定的了,不是你代码触发的了。

  • 董俊俊 回答了问题
    2个月前

    小程序全局引入的组件如何使用?

    然后各个页面的 wxml 里你就正常写就好了啊。

    <login></login>

    跟 view / text 之类的原生组件用法一样。

  • 董俊俊 回答了问题
    2个月前

    PHP高并发写入数据重复问题

    • 查重时加锁
    • Redis 用一个 Hash 来存储已经被占用的用户名,然后先判断再插入数据库
  • 董俊俊 回答了问题
    2个月前

    webpack 如何监听html更新的同时不将其打包到入口js

    如果你 import index.pug 的原因仅仅只是让 devserver 监听 .pug 文件 hot reload 的话,
    使用这个可以判断环境是prod还是dev:

    const isDev = process.env.NODE_ENV === 'development'
    if (isDev) require('index.pug')

    如果有帮到你,可以点赞采纳打赏哦~

  • 董俊俊 回答了问题
    2个月前

    正则以2开头的5位数怎么写?

    前面的2占了1位, 后面的[0-5]只要4位就好了;

  • 董俊俊 回答了问题
    2个月前

    java后台返回的json字符串,在前台用js解析的时候为什么会报undefined?

    xmlHttp.responseText 是一个 String 字符串,它当然没有 total 属性了。

    需要先 JSON.parse(xmlHttp.responseText) 转换成一个 Object 对象,再取值。

  • 董俊俊 回答了问题
    2个月前

    Laravel 如何理解文档中计划任务中的这一行代码?

    /dev/null 2>&1 分為兩部分

    1. /dev/null 是系統黑洞,也就是 >> 之前執行的輸出訊息全部丟進這個垃圾桶裡
    2. 在標準輸出中,stdin 是 0,stdout 是 1,stderr 是 2,所以他將 stderr 全部導到 stdout,stdout 又被導回 /dev/null,也就是不輸出

    所以兩段加起來的結果就是 crontab 的執行不會有任何輸出
    若要實際理解可執行以下指令

    php artisan schedule:run >> /home/user/output.txt

    應該就可在 output.txt 中看到 cron 執行結果

  • 董俊俊 回答了问题
    2个月前

    Laravel 如何理解文档中计划任务中的这一行代码?


    > 表示覆盖内容。

    /dev/null 的意思是空设备。

    1 表示 stdout 标准输出,系统默认就是它,所以 >> file.txt 和 1>>file.txt 相等。

    2 表示 stderr 标准错误

    2>&1 表示将所有错误覆盖到标准输出。

    * * * * * php /home/vagrant/Code/larabbs/artisan schedule:run >> /dev/null 2>&1 的意思就是执行 schedule:run 命令,然后将它所有的输出包括错误输出导向空设备,也就是什么都不输出。

  • 董俊俊 回答了问题
    2个月前

    如何判断一个方法应该放在 Model 中还是 ModelHelper 中?

    把整个 Laravel 代码放到一个巨大的 PHP 文件中,是可以执行的,那么问题来了:为啥要费劲分成那么多文件呢?

    因为可读性高。

    ActiveUserHelper 只不过教授一个简单易用的方案,让你的 Model 文件不至于变得太大。知道这个逻辑后,相信你应该可以灵活运用了。

    至于划分的逻辑,如果是你个人项目,只要你自己觉得合理即可。如果是团队项目,跟团队成员约定好,即可。

    谁都能随便写出机器阅读的代码,而真正优秀的开发者,写出来的代码是连傻瓜都能看懂的。

    我个人比较崇尚 代码是写给人看的,所以比较推荐简单直观的程序构建方案,课程中也沿用了我这一思维。

  • 董俊俊 回答了问题
    2个月前

    Laraval 有非常多且优秀的扩展,那么新手应该如何去挑选适合自己项目的扩展??

    个人不太喜欢引入过多的 package

    1. 很简单功能的 package,比如 为你的 Laravel 模型增加分享功能 ,因为功能实在太简单,我自己写可能只要 10 分钟就能搞定,找扩展、学习扩展的用法可能就要花几个小时,不划算,还有可能这个扩展在未来可能并不能满足你的需求,或者是没有支持新版本的 Laravel,你要去改动要么是 fork 之后自己发一个 composer 包,要么是提 issue 等作者更新。
    2. 涉及前端代码的 package,比如 Laravel-Administrator。近几年前端开发发展迅猛,webpack 等前端构建工具已经非常成熟,像 Laravel-Administrator 这种还把前端类库放在代码库里的 package,我是绝对不能接受的。另外就是界面风格基本上锁死,否则 summer 也不会自己 fork 一个来优化 UI 了。

    我通常引入的 package 有这么些特征:

    1. 通用类库,比如 jwt 、predis
    2. 非常复杂的功能,比如 oauth(即 Laravel 的 passport)
    3. 各种 sdk,比如 easywechat
    4. 辅助开发的包,如 laravel-ide-helper、tinker

    另外我不会特地去使用那些专门为 Laravel 封装的 package,比如 laravel-wechat,我宁愿使用 easywechat,原因如下:

    1. 这些 package 通常会注册一些 Facade。而我个人认为除了 Laravel 自带的 Facade,其他 Facade 会带来额外的不必要的学习成本和 debug 成本,特别是在多人合作的情况下。
    2. 这些 package 通常会生成一个 config 文件。当这种 package 非常多的时候,config 目录下文件会非常多,要找某个配置可能得仔细翻半天。

    以上都是我个人对引入 package 的观点,请根据自己项目的实际情况参考。

  • 董俊俊 回答了问题
    2个月前

    python判断变量类型时,为什么不推荐使用type()方法

    实际上还有一种方法是用isinstance
    比如:

    a = 111
    isinstance(a, int)
    True

    isinstance 和 type的区别在于:

    class A:
        pass
    
    class B(A):
        pass
    
    isinstance(A(), A)  # returns True
    type(A()) == A      # returns True
    isinstance(B(), A)    # returns True
    type(B()) == A        # returns False

    区别就是 对于subclass之类的 type就不行事了

    你说的老鸟 应该是这个意思吧? [颤抖ing]

  • 董俊俊 回答了问题
    2个月前

    golang Open函数打开的文件不主动关闭,在程序关闭时会发生什么?

    进程退出时操作系统会回收给进程的所有资源。

    丢不丢失数据要看你有没有手动调用Flush方法
    一般来说Write是写入缓冲区,Flush才是罗盘

    一般情况下请手动调用file.Close(),不然你进程不结束,一直占着

  • 董俊俊 回答了问题
    2个月前

    为什么感觉 pyspider 爬取的速度好慢

    这里可以设置 web ui 控制台上的 rate/burst 参数来调节速度,rate 是 每秒抓取的数量,burst 是并发的数量,默认是 1/3 所以比较慢,还是对这个工具了解不够呀

  • 董俊俊 回答了问题
    2个月前

    图片的懒加载与预加载区别呢?

    关于题目问到的预加载和懒加载的区别:

    1. 预加载是指在页面加载完成之前,提前将所需资源下载,之后使用的时候从缓存中调用;懒加载是延迟加载,按照一定的条件或者需求等到满足条件的时候再加载对应的资源

    2. 预加载增加了服务器压力,换来的是用户体验的提升,典型例子是在一个图片较多的网页中,如果使用了预加载就可以避免网页加载出来是时,图片的位置一片空白(图片可能还没加载出来),造成不好的用户体验;懒加载的作用减少不要的请求,缓解了服务器压力

    关于预加载的实现:

    最常用的图片预加载new Image()原理:设置其src来实现预载,再使用onload方法回调预载完成事件。当浏览器把图片下载到本地后,后续同样的src就可以使用缓存了。

  • 董俊俊 回答了问题
    2个月前

    Php代码质量

    主流框架都有验证器,搭配验证器使用。

     

    可以参考:Yii2 RESTful Web服务 https://www.yiichina.com/doc/...

  • 董俊俊 回答了问题
    2个月前

    Laravel框架中 App ()->isLocal () 请问这行代码什么意思?

    你的配置文件 . env 里默认有这一句:
    APP_ENV=local
    说明现在是本地环境,而不是生产环境。app ()->isLocal () 判断是本地环境才去注册 SudoSo。
    日后产品上线了,可以在.env 里改为:
    APP_ENV=production
    这样 isLocal () 返回 false, 生产环境里就不会引入 SudoSo 了。

  • 董俊俊 回答了问题
    2个月前

    laravel如何使用php-ffmpeg插件?

    别人介绍里面不是写的很清楚,该如何调用?

    你用记事本开发的 Laravel?

    PHPStorm 选中类名,Alt + Enter 自动导入没用过?

最近访客
  • 小花花
    小花花 4周前