log

JavaScript之运行机制

我与影子孤独终老i 提交于 2020-03-06 12:56:02
这章节采用先题目后原理的说法为大家讲解。 一、引入题目 我们先看一道题目吧! console.log(1); setTimeout(()=>{ console.log(2) },0); console.log(3) 你们觉得上面打印的顺序是什么呢?如果你不了解JS运行机制,那么你就犯错吧。其实上面打印的是1 3 2,是不是很奇怪呢?这是为什么呢?相信小伙伴现在已经出现了1000多个疑问,不着急,听我慢慢分解吧。 二、单线程是什么?为什么JS要用单线程? 单线程大白话就是你 同一个时间你就只能做一件事情 。JavaScript的单线程,与它的用途有关。JavaScript的主要用途是与用户互动,以及操作DOM。这决定了它只能是单线程,否则会带来很复杂的同步问题。就比如说,你更新的时候同时点击删除,不可能吧。 单线程就意味着,所有任务需要排队,前一个任务结束,才会执行后一个任务。如果前一个任务耗时很长,后一个任务就不得不一直等着 。 三、理解任务队列(消息队列) JavaScript语言的设计者意识到这个问题,将所有任务分成两种, 一种是同步任务(synchronous),另一种是异步任务(asynchronous) 。同步任务指的是,在主线程上排队执行的任务,只有前一个任务执行完毕,才能执行后一个任务;异步任务指的是,不进入主线程、而进入"任务队列"(task queue)的任务

Java日志介绍(5)-commons-logging

♀尐吖头ヾ 提交于 2020-03-06 11:33:11
Apache Commons Logging(JCL) 提供了一个简单的日志抽象,允许开发人员使用特定的日志实现。JCL可以使用其他的日志实现,包括Log4J、Avalon LogKit(Avalon的日志框架)、JDK logging(JUL)。本文主要介绍JCL的简单使用方法,文中所使用到的软件版本:Java 1.8.0_191、commons-logging 1.2。 1、配置 JCL能够在初始化期间自动查找配置文件进行配置;按照优先级查找直到找到,优先级如下: 1.在classpath下寻找配置文件commons-logging.properties,并使用文件中org.apache.commons.logging.Log属性定义的Log实现类 2.查找系统环境变量org.apache.commons.logging.Log对应的Log实现类 3.查看classpath中是否有Log4j的包,如果发现,则自动使用Log4j作为日志实现类(org.apache.commons.logging.impl.Log4JLogger) 4.使用JDK自身的日志实现类(JDK1.4以后才有日志实现类)(org.apache.commons.logging.impl.Jdk14Logger) 5.使用commons-logging自己提供的一个简单的日志实现类SimpleLog(org

linux--mysql(主从复制position)

試著忘記壹切 提交于 2020-03-06 09:03:47
异步复制(主从复制)master节点不会关心slave节点的状态,只需要写自己的数据即可 能不能完成复制看slave节点的io线程和sql线程是否开启 (1)主库开启binlog日志(设置log - bin参数) (2)主从server - id不同 (3)从库服务器能连同主库 mysql的主从配置又叫replication,AB复制,基于binlog二进制日志,主数据库必须开启binlog二进制日志才能进行复制 (1) master将改变记录到二进制日志 ( binary log ) 中(这些记录叫做二进制日志事件,binary log events); (2)从库生成两个线程,一个i / o线程,一个SQL线程,i / o线程去请求主库的binlog,sql线程进行日志回放来复制 (3) slave将master的binary log events拷贝到它的中继日志 ( relay log ) ; (4)slave重做中继日志中的事件,将更改应用到自己的数据上。 mysql的主从复制(异步复制)(基于position)把一个事件拆开来复制,并不是以一个完整的事件为单位来进行复制 一开始两个mysql必须一模一样,否则会报错 master自己做自己的,写在自己的日志里 slave能否同步成功取决于IO线程,和SQL线程回放日志 IO通过联系master拿到master的二进制日志

你不知道的JS系列 ( 21 ) - this显示绑定

时间秒杀一切 提交于 2020-03-06 07:00:30
隐式绑定是必须在一个对象内部包含一个指向函数的属性,并通过这个属间接引用函数,从而把 this 间接隐式绑定到这个对象上。 显示绑定是通过 call() 和 apply() 方法。它们的第一个参数是一个对象,它们会把这个对象绑定到 this. call function foo() {   console.log(this.a); }; var obj = {   a: 2 }; foo.call(obj); // 2 通过 foo.call(obj),调用 foo 时强制把它的 this 绑定到 obj 上。这种绑定是一种显示的强制绑定,我们称之为硬绑定 apply function foo(something){   console.log(this.a, something);   return this.a + something } var obj = {   a: 2 } var bar = function() {   return foo.apply(obj, arguments); } var b = bar(3); // 2 3 console.log(b); //5 硬绑定的典型应用场景就是创建一个包裹函数,传入所有的函数并返回接受到的所有值 bind function foo(something){   console.log(this.a,

JS变量函数提升机制

两盒软妹~` 提交于 2020-03-06 04:22:28
看了大佬的博客 JavaScript引擎运行原理解析 ,对其中的代码段产生好奇。 <script> console.log(a); // 打印[Function: a] var a = 1; function a(){console.log(2);} console.log(a); var a = 3; console.log(a); function a(){console.log(4);} console.log(a) </script> ———————————————— 版权声明:本文为CSDN博主「开心大表哥」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/a419419/article/details/82906049 从结果脑补JS引擎的机制。。。 JS的函数声明 应该是 函数声明(像C里面的函数声明: [返回值类型] [函数名](参数列表);)+ 函数体。为什么说这个呢,函数不像变量有声明和赋值两步走,我觉得JS里函数就是一体的,没得像先声明个函数名字再定义函数代码的,如果这样,那就不叫函数声明了,直接是函数表达式不好莫。为什么是应该是呢,因为我不知道官方文档在哪。。。 函数声明和变量提升后的顺序:猜测1——函数前变量后;猜测2——变量前函数后;猜测3—

Auto-Encoding Variational Bayes, PGM(概率图模型)

我与影子孤独终老i 提交于 2020-03-06 03:49:56
Auto-Encoding Variational Bayes from PGM概率图模型 1. PGM 概率图模型 1.1 Variational Inference 1.2 KL divergence 1.3 The Variational Lower bound 2. Black-box variational inference 2.1 gradient descent 2.2 Score function gradient estimator 3. Our problem - Latent variable model 4. Auto-encoding reformulation 5. The Reparameterization Trick 6. Neural Network pick q and p 7. Loss function in Neural Network 7.1 reformulation of ELBO 7.2 Neural Network distribution 7.3 Loss function 1. PGM 概率图模型 AVEB(Auto-Encoding Variational Bayes)的思想可以从概率图模型来理解。它是建立在概率图模型Inference中的Variational Inference基础上的。 1.1

vue生命周期简概

眉间皱痕 提交于 2020-03-06 01:40:18
什么是生命周期:简单的讲就是数据驱动页面,页面在更新的过程就是生命周期。在这个过程中我们可以写我们的逻辑。 什么是生命周期钩子:生命周期钩子就是指的各个生命周期的回调函数 beforeCreate 组件属性刚创建完,组件计算属性之前 例如data、watcher等 created 实例创建完成后被立即调用,属性已绑定,但是挂载阶段还没开始,$el 属性目前尚不可用 beforeMount 挂载开始之前被调用 mounted 挂载之后被调用,el 被新创建的 vm.$el 替换了 beforeUpdate 数据更新时调用,适合在更新之前访问现有的 DOM,比如手动移除已添加的事件监听器。 updated 数据更改重新渲染和打补丁,在这之后会调用该钩子。 activated 被 keep-alive 缓存的组件激活时调用 deactivated 被 keep-alive 缓存的组件停用时调用 beforeDestroy 实例销毁之前调用。在这一步,实例仍然完全可用。 destroyed 销毁后调用 errorCaptured 当捕获一个来自子孙组件的错误时被调用。 < ! DOCTYPE html > < html > < head > < title > < /title > < script type = "text/javascript" src = "https://cdn

Android开源日志框架xlog

佐手、 提交于 2020-03-06 00:35:48
版权声明:本文为xing_star原创文章,转载请注明出处! 本文同步自 http://javaexception.com/archives/144 xlog的优点 在开发过程中,避免不了要使用日志组件,用来记录程序执行过程中一些关键节点的日志,出了问题,我们可以根据日志信息,快速定位问题。 对了本文所说的xlog不是指的微信mars下的xlog日志。本文中的xlog是国人开发的一个开源日志框架,github上的地址是 https://github.com/elvishew/XLog 它的优点包括,用法简单,日志格式美观,日志输出可以显示所在类的行数,可以扩展Android和java的日志库,可以在多个通道打印日志,如console,File,Logcat等等。除了这些外,他支持打印各种对象或是自定义对象。包括数组,xml,json数据。日志信息包含线程信息,调用栈信息(堆栈信息,方法名,文件名,行号等等)。还支持保存日志文件,日志备份等。对开发者而言相当友好,用法也很简单。 xlog的用法 先添加依赖 implementation 'com.elvishew:xlog:1.6.1' 接着在Application中初始化 XLog.init(BuildConfig.DEBUG ? LogLevel.ALL : LogLevel.NONE); 这是最简单的配置

promise.all 异常处理

和自甴很熟 提交于 2020-03-05 23:30:48
promise.all 中任何一个promise 出现错误的时候都会执行reject, 导致其它正常返回的数据也无法使用了 有两个解决方法: 1.全部改为串行调用(失去了node 并发优势) 2.当promise捕获到error 的时候,代码吃掉这个异常,返回resolve,约定特殊格式表示这个调用成功了 var p1 =new Promise(function(resolve,reject){ setTimeout(function(){ resolve(1); },0) }); var p2 = new Promise(function(resolve,reject){ setTimeout(function(){ resolve(2); },200) }); var p3 = new Promise(function(resolve,reject){ setTimeout(function(){ try{ console.log(XX.BBB); } catch(exp){ resolve("error"); } },100) }); Promise.all([p1, p2, p3]).then(function (results) { console.log("success") console.log(results); }).catch(function(r){

MySQL集群MGR架构for单主模式

那年仲夏 提交于 2020-03-05 18:19:51
本文转载自: https://www.93bok.com MGR简介 MySQL Group Replication(简称MGR)是MySQL官方于2016年12月推出的一个全新的高可用与高扩展的解决方案。MySQL组复制提供了高可用、高扩展、高可靠的MySQL集群服务。 1)高一致性 基于原生复制及paxos协议的组复制技术,并以插件的方式提供,提供一致数据安全保证; 2)高容错性 只要不是大多数节点坏掉就可以继续工作,有自动检测机制,当不同节点产生资源争用冲突时,不会出现错误,按照先到者优先原则进行处理,并且内置了自动化脑裂防护机制; 3)高扩展性 节点的新增和移除都是自动的,新节点加入后,会自动从其他节点上同步状态,直到新节点和其他节点保持一致,如果某节点被移除了,其他节点自动更新组信息,自动维护新的组信息; 4)高灵活性 有单主模式和多主模式,单主模式下,会自动选主,所有更新操作都在主上进行;多主模式下,所有server都可以同时处理更新操作。 MGR是MySQL数据库未来发展的一个重要方向。 MGR基础结构要求 1、引擎必须为innodb,因为需事务支持在commit时对各节点进行冲突检查 2、每个表必须有主键,在进行事务冲突检测时需要利用主键值对比 3、必须开启binlog且为row格式 4、必须打开GTID特性,且主从状态信息存于表中 (--master-info