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

    vue如何实现让audio自动播放?

    最好在监听canplay事件在触发play

    audio.addEventListener('canplay', () => {
        audio.play()
    })
    Chrome好像会自动关闭自动播放功能,你可能需要手动配置一下。
  • 董俊俊 回答了问题
    2个月前

    vue 在keeplive的作用下 二级路由跳转一级路由滚动条没有保存上次的位置

    scrollBehavior 这个api无法使用

    window.addEventListener('scroll', this.onScroll) 记录好当前滚动距离 scrllNum存在data的变量里

    然后利用activated缓存钩子 再次返回的时候 直接让滚动条回到记录的位置

    this.$nextTick(() => {

    window.scrollTo(0,this.scrllNum)

    });

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

    docker-run启动shadowsocks后面跟的参数是什么意思?docker为什么没有报格式错误

    docker image 有一个 Entrypoint ,负责解释执行 CMD ,也就是后面的命令,或者参数。

    oddrationale/docker-shadowsocks 的 Entrypoint 是 /usr/local/bin/ssserver

    ENTRYPOINT ["/usr/local/bin/ssserver"]
  • 董俊俊 回答了问题
    2个月前

    JavaScript合并两个数组报错,为何呢?

    let arrA = [1,2,3]
    let arrB = [3,4,5,6]
    let result = []; // 这里加个分号
    
    [...arrA,...arrB].forEach(item => {
      if(arrA.includes(item)&&!arrB.includes(item)) result.push(item)
    })
    console.log(result)

    具体原因,解释器的问题 有点小复杂 总之加分号没毛病

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

    求助filter过滤器

    filter 实现
      const data = [
        { code: "110000", name: "北京市" },
        { code: "110100", name: "北京市" },
        { code: "110101", name: "东城区" }
      ];
      let obj = {};
      const result = data.filter(item =>
        obj[item.name] ? false : (obj[item.name] = true && true)
      );
      obj = null; //释放内存
      console.log(result);

    除了filter可以实现,还有mapreduce或者for循环也能实现,需要的话再进行补充

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

    微信小程序前端token问题,如何判断token过期

    举例说,跟后端定义接口时,约定当响应头的状态码是401时,表示token过期;那你每次待着token去请求后,遇到 401 的状态码,就知道过期了。

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

    vscode如何打开加密后的文件?

    我以前公司也有加密, 需要管理员配置好哪些软件打开哪些后缀的文件自动解密, 所以找管理员吧

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

    python 中的 *args 原理?

    *的语义在不同的场景下会有一些理解上的差别,对于题中出现的几种
    1.为什么a,b,c = *args不可以 a,*b,c = args可以?
    因为args不一定要平均分割 如果*放在被操作数上 会导致 a,*b = *args 这样的冗余语法 所以这时候放在左边是最简单的

    2.a = *args,
    args并不是解包赋值给a,而是args解包后和后面元素组成一个tuple再赋值给a

    3.为什么test_args_kwargs(*args)可以?
    函数的局部变量表就是一个tuple,对于test(a,b,c)需要先把栈中的a b c 组成一个tuple,而test(*args) 则会直接使用args这个tuple,如果args不是tuple 那还是需要先创建tuple

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

    PHP 多进程的困惑

    你提问里说对了一半。
    时间有两个指标,一个叫墙上钟时间,也就是现实中流逝的时间,另一个叫 CPU 时间,是 CPU 花费在执行程序的时间片的总和。
    使用多线程和多进程,会减少 Wall clock 时间,但会增加 CPU clock 时间。
    对于 CPU 密集型任务来说,单进程单线程效率更高。
    对于经常需要 CPU 等待的任务来说,多进程多线程可以增加 CPU 利用率,减少现实流逝时间。

    更好的选择是事件回调模型,既可以并发多任务,又不需要多线程支持,结合了两者的优点,效率最高。

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

    Laravel中服务提供者的register和boot分别是干什么

    register方法用于绑定接口和实现,初始化配置等,在这个函数中不能保证其它服务已经完全加载完毕,因此只能用于注册相关的工作,不能调用其它服务,而boot调用的时候,所有的服务都已经注册完毕,可以放心的使用Laravel中注册的对象,可以调用其它服务。

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

    symfony与 laravel的区别是什么

    Symfony是企业级的框架,有很多成熟的插件和解决方案,学习起来也更复杂;Laravel的话更简单,速度也快些。
    你个人用的话还是建议用Laravel,做中小型项目比较适合。

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

    Laravel provider 中 register 到底是用来干嘛的?

    • ServiceProvider 中的 register 到底是做什么用的

    简短一点:就是文档中提到的用于「注册服务」。

    详细一点:

    1. 什么是服务:就是我们在项目中需要使用到的功能(组件或者说模块)
    2. 服务如何注册:这里解释 $this->app->singleton 用途, 通过服务容器($this->app)的 singleton 方法 ($this->app->singleton ('your_service', closure)) 将服务 (your_service) 绑定到容器,后续可以通过 $this->app->make('your_service') 解析出具体服务实例。
    3. register 里面能干什么:在 register 里仅能够完成绑定(包括 bind, singleton)操作;为什么仅能支持绑定操作呢?因为项目错综复杂,一个服务(功能或模块)可能依赖于其它服务,如果在 register 方法内执行其它操作(这里具体指解析服务( make(your_service))), 那么可能在 服务容器执行依赖注入解析(实例化服务)时所依赖的服务可能还没有完成注册即绑定操作(这时就无法解析出( make) 这个依赖服务实例)从而导致出错。
  • 董俊俊 回答了问题
    2个月前

    mysql 大数据分表问题

    主要还是看你的使用数据结构,增删改查的业务场景,是否有活跃数据和非活跃数据之分。
    拆表有几个大方向:
    有序拆分和无序拆分。
    应用层面去控制,还是数据库底层去控制。

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

    mysql 大数据表删除 - JPA

    1、truncate table

    2、分段删除

    3、如果你的表引擎是Myisam或者是innode(独立表空间类型),那么可以把这个表结构导出来备份,然后把这个表文件直接删除了,然后再根据导出来的表文件重新建一个一样的表就好了。

    4、也是把表结构导出来,然后drop table,最后重新建这个表

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

    mysql 大数据 全文检索 思路

    全文搜索这中的最好使用sphinx,这是很良好的建议。。

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

    mysql主从不一致解决方案(260G数据)

    大概的步骤是这样
    1、配置好slave;
    2、备份master;
    3、记录该备份相应的binlog位置(产生master当前状态的最后一个事件所在的位置);
    4、在slave上恢复备份;
    5、配置slave从这个binlog的位置开始复制;

    备份master的流程如下,使用Mysqldump,还有其他的备份方式
    考虑到master可能在线,所以需要刷新(flush)所有表并且锁定数据库,防止在检查binlog位置之前数据库发生改变

      

    //清空表缓存并且锁住表
    mysql>flush tables with read lock;
    //查看binlog并记录下来
    mysql>show master status\G;
    file+position就是slave复制的起点
    //备份数据库
    $mysqldump --all-databases --host=master>backup.sql
    //解除数据库锁定
    mysql>unlock tables;
    //slave恢复备份
    mysql --host=slave < backup.sql
    //启动slave
    mysql>change master to master_host='master',master_port=3306,master_user='***',master_password='***',master_log_file='file',master_log_pos='position'
    mysql>start slave;
  • 董俊俊 回答了问题
    2个月前

    为什么要进行内存对齐内存对齐?

    主要内存对齐主要是为了速度
    如果数据不是对齐的 cpu执行一些运算 要花费额外的时钟周期来处理对齐问题 再做运算

    还有一些就是平台移植

    还有就是网络编程中的数据对其 也是为了节省不必要的空间浪费 提高传输效率

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

    如何防止PHP木马攻击

    以下方法也是经过众多程序员总结出来的10条经验,虽然有时候无法完全遵守,但是开发的时候还是应该尽量注重安全,能避开安全问题就尽量避开。

    (1) 打开php的安全模式

    php的安全模式是个非常重要的内嵌的安全机制,能够控制一些php中的函数,同时把很多文件操作函数进行了权限控制,也不允许对某些关键文件的文件
    但是默认的php.ini是没有打开安全模式的
    (2) 用户组安全

    当safe_mode打开时,safe_mode_gid被关闭,那么php脚本能够对文件进行访问,而且相同组的用户也能够对文件进行访问。如果不进行设置,可能我们无法对我们服务器网站目录下的文件进行操作了,比如我们需要对文件进行操作的时候。

    (3) 安全模式下执行程序主目录

    如果安全模式打开了,但是却是要执行某些程序的时候,可以指定要执行程序的主目录
    一般情况下是不需要执行什么程序的,所以推荐不要执行系统程序目录,可以指向一个目录,然后把需要执行的程序拷贝过去,但是,我更推荐不要执行任何程序,那么就可以指向我们网页目录

    (4) 安全模式下包含文件

    如果要在安全模式下包含某些公共文件,
    其实一般php脚本中包含文件都是在程序自己已经写好了,这个可以根据具体需要设置。

    (5) 控制php脚本能访问的目录

    使用open_basedir选项能够控制PHP脚本只能访问指定的目录,这样能够避免PHP脚本访问
    不应该访问的文件,一定程度上限制了phpshell的危害,我们一般可以设置为只能访问网站目录

    (6) 关闭危险函数

    如果打开了安全模式,那么函数禁止是可以不需要的,但是我们为了安全还是考虑进去。比如,我们觉得不希望执行包括system等在那的能够执行命令的php函数,或者能够查看php信息的,如果你要禁止任何文件和目录的操作,那么可以关闭很多文件操作,以上只是列了部分不叫常用的文件处理函数,你也可以把上面执行命令函数和这个函数结合,就能够抵制大部分的phpshell了。

    (7) 关闭PHP版本信息在http头中的泄漏

    我们为了防止黑客获取服务器中php版本的信息,可以关闭该信息斜路在http头中

    (8) 关闭注册全局变量

    在PHP中提交的变量,包括使用POST或者GET提交的变量,都将自动注册为全局变量,能够直接访问,这是对服务器非常不安全的,所以我们不能让它注册为全局变量,就把注册全局变量选项关闭,当然,如果这样设置了,那么获取对应变量的时候就要采用合理方式

    (9) SQL注入

    SQL注入是非常危险的问题,小则网站后台被入侵,重则整个服务器沦陷,所以一定要小心。这个默认是关闭的,如果它打开后将自动把用户提交对sql的查询进行转换,

    (10) 错误信息控制

    一般php在没有连接到数据库或者其他情况下会有提示错误,一般错误信息中会包含php脚本当前的路径信息或者查询的SQL语句等信息,这类信息提供给黑客后,是不安全的

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

    如何防止PHP木马攻击

    1、防止跳出web目录

      首先修改httpd.conf,如果你只允许你的php脚本程序在web目录里操作,还可以修改httpd.conf文件限制php的操作路径。比如你的web目录是/usr/local/apache/htdocs,那么在httpd.conf里加上这么几行:

      php_admin_value open_basedir /usr/local/apache/htdocs 这样,如果脚本要读取/usr/local/apache/htdocs以外的文件将不会被允许.

      2、防止php木马执行webshell

      打开safe_mode,在php.ini中设置disable_functions= passthru,exec,shell_exec,system

      二者选一即可,也可都选

      3、防止php木马读写文件目录

      在php.ini中的disable_functions= passthru,exec,shell_exec,system后面加上php处理文件的函数主要有

      fopen,mkdir,rmdir,chmod,unlink,dir

      fopen,fread,fclose,fwrite,file_exists

      closedir,is_dir,readdir.opendir

      fileperms.copy,unlink,delfile

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