简述 首先,底层实现了一个线程本地存储,叫ThreadLocal区域, 一个主线程以及它对应的所有子线程,共享同一个 ThreadLocal对象, 这个ThreadLocal对象中可以说逻辑上维护着一个...), 每一套数据副本也是ThreadLocal对象中这个逻辑表的一个项, 数据副本在这里可以具体化为Looper对象, 而主线程及其所有子线程都可以开辟自己的Looper, 每一个Looper都要绑定在一个...Handler上,(如下方图1图2) 然后这些个每个Looper都是共享的ThreadLocal中逻辑表的一个项, 这个项有key和value两部分, value是每一个线程对应的Looper,...而key则是存放在ThreadLocal中一个唯一的静态的Looper对象了,(如下方图3) 然后这个唯一的静态的Looper对象了关联着一个MessageQueue, 也就是说,所有线程的Looper...都映射到同一个Looper上, 所有线程的Looper中关联的MessageQueue也是映射到对应的同一个MessageQueue上;(如下方图1图2) (常规表述) 附图 ?
外链标识 在文章内的会跳出本站的链接要有小图标进行标识出来。 ? 外链标识 文字选中 文字选中时,可设置与网站主题相符合的颜色。 ? 文字选中 溢出文字自动加省略号 ?...英文单词换行自动加连词符 页面很长 返回顶部按钮 导航滚动时能固定 例如 http://www.36kr.com/ 导航滚动至锚点位置 可以使用自定义的滚动效果 对当前的锚点位置可做一些修饰 Github
否则命令2不会执行 mi 会执行whom 其他特殊符号 符号 作用 ' 单引号,在单引号中所有的特殊符号,如“$”和“`”(反引号)都无特殊含义 " 双引号,在双引号中特殊符号都无特殊含义,但“$”、...“`”(反引号)和“\”是例外,拥有“调用变量值”,“引用命令”和“转义符”的特殊含义 ` 反引号:反引号括起来的内容是系统命令,在Bash中先会执行它和() $() 和反引号作用相同,用来引用系统命令...# 在shell脚本中,#开头的行代表注释 $ 用于调用变量的值,如需要调用变量name的值时,需要用$name的方式得到 \ 转义符,跟在\之后的特殊字符将失去特殊含义,变为普通字符 ---- DNSLog
singleQuote: true, trailingComma: 'all', jsxBracketSameLine: true, arrowParens: 'always' }; // 杀死对应包的后台进程...adb shell am kill [packageName] // 查询所有包名 adb shell pm list packages // 查询所有包名对应的apk名字 adb shell
MySQL的一些小tip 1 Create user和grant 的几点说明 我们都知道Create user和grant for都可以用来创建一个用户,那么这两个语句的处理上有什么区别呢?...这里解释一下,MySQL 5.7版本中create user和grant的区别跟上面的相同,但是有一个细节需要注意: mysql> create user test@localhost identified...而在MySQL5.5版本中,我们使用show create user的方式时会直接报错。...--+---------------+-------------------------------------------+ rows in set (0.00 sec) 而在MySQL 5.5的版本中...MySQL5.7版本中的已经不存在password字段,取而代之的是authentication_string字段,该字段存储加密的密码值;
前段时间看到有关于CTF中PHP黑魔法的总结,其中有一段只有介绍利用方法但是没有详细介绍为什么,我想了一下,思考如下,如果不对,请各位大佬多多指正~ 原话如下: 当有两个is_numeric判断并用and...PHP中is_numeric 检测变量是否为数字或数字字符串,如果 var 是数字和数字字符串则返回 TRUE,否则返回 FALSE。...,根据题目同时出现is_numeric()和and判断(图一) 引用暗羽表姐的博客截图来绕过第二个is_numeric() 判断(图二) 绕过(图三) 但是只是知道这是绕过的一种方式,但是为什么会出现这种情况呢...,本来以为只要第一个判断为真就不会判断后面的条件正确还是不正确 ,以为问题出现在is_numeric,但是问题好像出现在and上面,根据PHP的优先级来看,赋值运算= 优先级大于 and , 举一个例子...(图四) 算是PHP的一种特性吧(图五)...
使用2.中定义的Handler实例调用sendMessage()将Message实例发送到MQ; 至此完成; 相关笔记:Tip | Android的消息机制 ?...在onServiceConnected()方法中, 又通过向下转型得到了MyBinder的实例, 有了它就可以在活动中调用MyBinder中的任何非private方法了, 即实现Service与Activity...可以在新建的继承Service的类的onCreate()方法中,如下编写: ?...Service的类的onStartCommand()方法中, 如下编写: ?...onHandleIntent()方法中为了证实这个方法确实已经在子线程中, 打印了当前线程的id与稍后与主线程的线程id作对比。
关于邮箱的一些tip ---- 本来想写下邮箱的鄙视链的,后来想想反正都是邮箱,哪有什么可鄙视的,只不过有人知道的晚,有人知道的早,我就直接改为邮箱的tip了 正题:简单粗暴,来看下常用的邮箱 (1)...现在看下这个foxmail=qq邮箱的优点,第一点,名称正规了不少;第二点,他可以添加超大附件,想当年给老板发几百M的ppt的时候,就是靠他度过难关。...每个大学或者科研机构都有自己的邮箱 比如说使用edu作为后缀的: PK@pku.edu.cn 使用ac.cn作为后缀的 Cas@im.ac.cn 申请各种license有优惠,反正有就记得常用。...你的学生给你发邮件了 场景二: 我师姐作为一个学术型的大佬,用这个邮箱给学生发邮件 Yeah!!你的老板给你发邮件了 场景三: 我师姐作为一个学术型的大佬,给国外大佬发邮件 Yeah!!...好了,吐槽归吐槽,这个邮箱我没有使用过,本身并不对他的性能做一些评价,但是,凭心而论,他不适合作为一个学术类型的邮箱。但是这个邮箱名称还是很可爱的,我先去注册一个作为珍藏。 ----
大家好,又见面了,我是你们的朋友全栈君。 setTimeout与setTimeInterval均为window的函数,使用中顶层window一般都会省去,这两个函数经常稍不留神就使用错了。...setTimeout内的函数先不执行,隔一段时间后再执行,函数后面的数字是隔的时间,单位是毫秒(千分之一秒) 比如: setTimeout(‘alert(“hello world!”)’..., 400); setInterval() 方法可按照指定的周期(以毫秒计)来调用函数或计算表达式,直到clearInterval()被调用或窗口被关闭。 比如: Stop interval setInterval动作的作用是在播放动画的时...如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
今天我们要说的是结合ES6新特性谈一下js里面的一个很好用的方法-find() 现在的前端和过去的不一样,过去的前端只要会画页面就行了,但是现在仅仅会画页面已经远远不够了,现在前端还需要会处理数据,而且还要会将数据分析分类处理...下面我们讲怎么用前端处理这块的逻辑 首先我们拿到了所有的数据这里我直接放到一个测试用的js里面存放, 要实现之前说的效果,就需要使用我们今天的主角find()方法。 find()是用来做什么的呢?...find()方法返回数组中符合测试函数条件的第一个元素。否则返回undefined 在本文章需要注意的几个点: ①、第一个元素 ②、测试函数 那么如何使用呢?.../find_testcodes.js" type="text/javascript" charset="utf-8">
MySQL 函数的一个小tip 今天上班的时候,同事问了一个问题,关于MySQL函数的。...数据库应该去做它擅长的事情,例如数据的增删改查之类的。...其中routines表显示的是函数的创建信息;parameters表显示的是函数的参数信息。...第二行好理解,就是我们传入的参数param1,它的mode是IN,类型为int。...简单翻译一下: 对于PARAMETER_MODE字段,正常取值是in,out或者inout,但是对于函数返回值,这个值是NULL;我们没有定义param1参数的取值,原因在官方文档中也有体现: Specifying
简单理解: hook(钩子)就是: 把将要执行的的函数或者一系列动作注册到一个统一的接口下面, 当应用程序调用此接口(即hook)时,就等于调用了这一系列动作。...JS中的钩子(hook)的例子 JS中的钩子(hook)的例子1: 例如我们在向后台进行ajax请求的时候,后台经常会返回我们一些常见的错误码,如:001代表用户不存在,002代表用户密码输入错误。...这个时候我们要将错误友好的提示给用户。这个时候我们该怎样实现呢?...一般的写法可能是: $.ajax(option,function(result){ var errCode = result.errCode ;//错误码 if(errCode){...switch case来实现,但是这个两种写法都无法避免一个问题就是如果我的错误码特别多,那得写多少个if else和case 啊?
js 的class 由于存在转换器这种神器,所以代码能直接转换为es5,用es6的语法写。 一些解释 js的class仅仅为一个语法糖,是在原先构造函数的基础上出现的class,仅仅如此。...Rectangle = class { constructor(height, width) { this.height = height; this.width = width; } } 在类表达式中,...static 为一个静态方法,该静态new出的来的对象不能进行使用。...const p1 = new Point(5,5); const p2 = new Point(10,10); console.log(Point.distance(p1,p2)); 关于严格模式 由于js...extends 使用extends创建子类 class Animal { constructor(name) { this.name = name; } speak() { // 由于是在类中定义
js中的this指向 首先,js中的this指向是根据运行时确定的,而非定义时。...js中的this指向大致分为如下几种: 作为对象的方法调用 作为普通函数调用 构造调用 call、apply调用 作为对象的方法调用 var obj = { a: 1, getA: function...this.name = 'sven'; }; var obj = new MyClass(); alert ( obj.name ); // sven 一般情况下,构造调用时this指向new后的对象...; }; var obj = new MyClass(); alert ( obj.name ); // sven call、apply调用 call、apply、bind可以人为改变function的this
数据、内存、变量 数据:以二进制形式存储在内存中,代表一定信息的数字。 内存:内存条通电后产生的存储空间。内存又分为栈内存和堆内存。栈内存中存放的是全局变量或局部变量。而堆内存中存放的是对象。...,而obj1保存了obj内容,只是obj中的内容是{ name: 'clying' }的地址值。...而存在与fun函数内部的o变量,变成了垃圾对象,根本无法使用。 比较 可能会有一些疑惑:变量与函数中,修改了obj的值,为什么在引用变量与函数中,obj的值没有被修改?...首先需要明白,js函数传递变量参数时,是「值传递」(个人理解:传递的是变量的值)。执行函数fun,只是将obj的地址值赋值给o变量。...变量与函数中,o是直接被修改,修改的直接是obj内部age的属性变量。 引用变量与函数中, 「o存放的是obj的值」,即:o内部是{ name: 'dengdeng', age: 22 }的地址值。
js中的对象 在编程语言中,提到对象,一般都含有一个隐藏的上下文面向对象编程。 面向对象编程(Object Oriented Programming,缩写为 OOP)是目前主流的编程范式。..., cedf:function(){console.info("cdef")}, "arr":[1,2,3], o:{"name":"jake"} } “在js中,对象是属性的无序集合...1.2 集合 集合是说 对象中可以有很多个属性。属性之间用逗号分隔。 1.3 无序 属性与属性之间,没有先后顺序之分。 对比一下,数组的元素之间有序的。...2. js中对象的分类 众观整个js中的对象,可以分成三类: 内置对象 宿主对象 自定义的对象 2.1 内置对象 “由ECMA实现、不依赖于宿主环境的对象,这些对象在js程序执行之前就已经存在了”。...js有两个运行的环境: (1) 浏览器。我们在.html文件中加入js代码,再通过浏览器来打开,这里浏览器就是javascript的运行环境。 在浏览器端的js而言,宿主对象就是浏览器对象。
Js的执行并不是由上向下一行一行顺序下来的,一个例子如下: a = 2; var a ; console.log(a) //2 输出的是2,这区别于别的语言。 ...再一个例子: console.log(a); //undefined var a = 2; 输出的是undefined。 ...由var a = 2; Js的引擎机制是先编译,再执 ,先从编译器说起,编译过程中,我们知道编译会先根据声明为其确定作用域。...上面的例子中实际上编译器会将其看成两个声明,分别为var a;和a =2。因为事先需要确定作用域,所以var a;在编译过程中就已经执行,而赋值操作a =2;就会留在原地等待正常顺序的执行。...由于Js特别的机制,书写过程中应该尽量避免重复声明。
有格式的时间 let myDate = new Date(); myDate.getYear(); //获取当前年份(2位) myDate.getFullYear(); //获取完整的年份(4位,1970...000, 1626244862000 日期转换成时间格式 可以有参数,如果没有参数获取的是当前的时间对象 参数可以是时间字符串或者是时间戳,则转换对应时间的时间对象,要注意格式 new Date('2021...Date(1626244866842); //正确 , Wed Jul 14 2021 14:41:06 GMT+0800 (中国标准时间) new Date('2021-07-14'); // 错误的,...这种格式是不支持的, new Date("2021-07-14".replace(/-/g, "/")); //Sat Apr 16 2011 00:00:00 GMT+0800 (中国标准时间)...计算 如果直接使用`new Date()`进行计算,默认会转换成从1970.1.1时开始的毫秒数. new Date('2021,07,13') - 1000 ; 1626105600000 - 1000
这段代码可以在不同的上下文对象( me 和 you )中重复使用函数 identify() 和 speak() ,如果我们不适用this的话,那就需要identity和speak显示传入一个上下文对象,...没关系,我们只要知道在 ECMAScript 规范中还有一种只存在于规范中的类型,它们的作用是用来描述语言底层行为逻辑。...它们是为了更好地描述语言的底层行为逻辑才存在的,但并不存在于实际的 js 代码中。...可以按照下面的顺序来进行判断:函数是否在 new 中调用( new 绑定)?如果是的话 this 绑定的是新创建的对象。...如果是的话, this 绑定的是指定的对象。var bar = foo.call(obj2)函数是否在某个上下文对象中调用(隐式绑定)?如果是的话, this 绑定的是那个上下文对象。
领取专属 10元无门槛券
手把手带您无忧上云