定位 MySQL 的问题 SQL,主要有两种方法,查看当前线程(show processlist)和慢日志。一般来说,当前发生的问题用到 show processlit,事后分析用到慢日志。
一维数组的元素访问非常简单,和 Python 列表规则基本差不多。对单一元素的访问,索引遵循从 0 开始,依次递增 1。案例例如,对于创建的一维数组,我们访问第5个元素对象:arr = np.arange(10)arrOut: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])arr[4]Out: 4也可以用负数从末位开始对数组反向索引,例如-1表示末位元素:arr[-1]Out: 9
数组的元素可以通过结合[]方法引用相关元素的索引来访问。例如,要访问数组的第一个和第二个元素。实例:# 定义一个数组> days_of_week = [ "Mon", "Tues", "Wed", "Thu", "Fri", "Sat", "Sun" ]=> [ "Mon", "Tues", "Wed", "Thu", "Fri", "Sat", "Sun" ]> days_of_week[0]=> "Mon"> days_of_week[1]=> "Tues"或者使用at方法:实例:> days_of_week.at(0)=> "Mon"可以使用 Array 类的first和last方法访问首个和末尾元素。实例:> days_of_week.first=> "Mon"> days_of_week.last=> "Sun"
这一节中,我们将带领大家来学习网页设计中元素定位的设置。主要讲解两个知识点,一个是positon定位,一个是浮动定位。在这一节中,理解的东西是重点,而且是难点。定位这个概念相对抽象,但在整个网页排版布局中却是十分重要的。然而,同学们有了本节慕课网 WIKI 的讲解,大可打消恐惧的心理。一方面本节我们介绍的内容并不多,并不会像传统培训机构一样一次性填鸭式教学讲授很多内容,另一方面,老师在本节中也会为大家讲述的特别清晰。在认真研读学习的基础上,相信大家一定能在本篇 WIKI 的引导下充分掌握页面中基础的位置布局本领。下面就请大家跟随老师的脚步一起来学习网页元素定位的设置相关内容吧!
Splash 中涉及到元素定位和操作的方法主要有如下几个:splash:select():从当前网页的 DOM 中选择与指定 CSS 选择器匹配的第一个 HTML 元素;splash:select_all():从当前网页的 DOM 中选择与指定 CSS 选择器匹配的 HTML 元素列表;splash:send_keys():将键盘事件发送到页面上下文;splash:send_text():将文本作为输入发送到页面上下文,一个字符一个字符发送;来看看我们对这些方法的一个简单实例:function main(splash) splash:go("https://www.baidu.com") splash:wait(2) input = splash:select("#kw") input:send_text("慕课网 wiki") splash:wait(2) return { png = splash:png() }end来看看针对百度页面的执行效果:使用 splash 服务获取百度搜索结果另外一个例子,我们还是前面的头条热点数据,我们加上滚动效果后能提取出更多的热点新闻,那么就在这里使用 splash:select_all() 方法将这些热点新闻的标题提取出来。为此,我们编写如下的 lua 代码:function main(splash, args) local treat = require('treat') assert(splash:go(args.url)) assert(splash:wait(2)) splash.scroll_position = {y=1000} assert(splash:wait(2)) splash.scroll_position = {y=1500} assert(splash:wait(5)) news_list = splash:select_all('div.title-box a') local result = {} for idx, a in ipairs(news_list) do result[idx] = a.node.innerHTML end return treat.as_array(result)end来看看渲染后的结果,如下:使用 select_all() 方法提取热点新闻标题
/* 第1、4、7个子元素 */li:nth-child(3n+1) { xxx: xxx;}/* 前三个子元素 */li:first-child, li:nth-child(2), li:nth-child(3) { xxx: xxx;}
上一小节的代码运行过后看似好像没什么问题,那么我们来给它加上个边框试试:加上边框后发现它其实是有点歪了,偏左上角一点,这是因为background-image属性默认是定位在元素的左上角的。
声明一个由 string 和 number 构成的元组:const list: [string, number] = ['Sherlock', 1887] // okconst list1: [string, number] = [1887, 'Sherlock'] // error代码解释: 元组中规定的元素类型顺序必须是完全对照的,而且不能多、不能少,list1 中定义的第一个元素为 string类型,不能赋值为 number类型的数据。当赋值或访问一个已知索引的元素时,会得到正确的类型:const list: [string, number] = ['Sherlock', 1887]list[0].substr(1) // oklist[1].substr(1) // Property 'substr' does not exist on type 'number'.代码解释:第 3 行,list[0] 是一个字符串类型,拥有 substr() 方法。第 4 行,list[1] 是一个数字类型,没有 substr() 方法,所以报错。要注意元组的越界问题,虽然可以越界添加元素(不建议),但是不可越界访问:const list: [string, number] = ['Sherlock', 1887]list.push('hello world')console.log(list) // ok [ 'Sherlock', 1887, 'hello world' ]console.log(list[2]) // Tuple type '[string, number]' of length '2' has no element at index '2'代码解释:第 2 行,向一个声明了只有两个元素的元组继续添加元素,这种操作虽然可行,但是严重不建议!第 5 行,该元组只有两个元素,不可越界访问第三个元素。
2.2.1 获取单个元素与变量的引用一样,数组可以获取单个位置的元素,利用 ${ARG[num]}。例如:[root@master scripts]# echo ${ARG1[0]} //获取AEG1数组中第一个元素1[root@master scripts]# echo ${ARG1[3]} //获取AEG1数组中第四个元素hello Shell2.2.2 获取全部元素获取数组值获取数组全部元素使用 ${ARG[*]} 或 ${ARG[@]}。例如:[root@master scripts]# echo ${ARG1[@]}1 2 3 hello Shell[root@master scripts]# echo ${ARG1[*]}1 2 3 hello Shell获取数组下标获取数组全部下标使用 ${!ARG[*]} 或 ${!ARG[@]}。例如:[root@master ~]# echo ${!ARG1[@]}0 1 2 3[root@master ~]# echo ${!ARG1[*]}0 1 2 32.2.3 获取数组长度获取整个数组长度数组长度及数组中元素的个数,可以利用 ${#ARG[*]} 或 ${#ARG[@]},我们发现其实就是在获取数组全部元素前添加#来获取数组个数。例如:[root@master scripts]# echo ${#ARG1[*]}4[root@master scripts]# echo ${#ARG1[@]}4获取单个元素的长度对于数组中的某个元我们也可以进行长度的获取,可以利用 ${#ARG1[num]}。例如:[root@master scripts]# echo ${ARG1[@]} 100 2 3 hello Shell 10[root@master scripts]# echo ${ARG1[3]} //获取第四个元素内容为:hello Shellhello Shell[root@master scripts]# echo ${#ARG1[3]} //获取四个元素长度为11112.2.4 数组元素的修改数组可以进行一些列对其元素的操作。修改对数组元素的修改,直接对单个元素修改即可,例如:[root@master scripts]# AEG1[0]=100[root@master scripts]# echo ${ARG1[@]}100 2 3 hello Shell增加对数组元素的增加,和修改一致,直接对单个位置元素增加即可,例如:[root@master scripts]# ARG1[10]=10[root@master scripts]# echo ${ARG1[@]}100 2 3 hello Shell 10[root@master scripts]# echo ${#ARG1[@]}5Tips:在此我们发现元素之前有 4 个元素,我们将下标 10 的元素赋值为 10,数组是按照从前往后顺序赋值的。删除删除数组可以使用 unset,unset ARG1[num] 可以删除对应下标的数组元素,如果不带下标则删除数组的全部元素,例如:[root@master scripts]# echo ${ARG1[@]} 100 3 hello Shell 10[root@master scripts]# unset ARG1[0] //删除下标为0的元素[root@master scripts]# echo ${ARG1[@]}3 hello Shell 10[root@master scripts]# unset ARG1 //删除整个数组元素[root@master scripts]# echo ${ARG1[@]}2.2.5 数组的切片和其他语言一样,可以对数组进行切片也称截取操作。可以通过 ${AEG1[@或*]:起始位置:长度} 对原数组进行切片,返回的为字符串,例如:[root@master scripts]# echo ${ARG1[@]}1 2 3 hello Shell[root@master scripts]# echo ${ARG1[@]:0:2} //从第1个元素往后2个元素进行切片1 22.2.6 数组的替换可以替换数组中的某一个元素,例如我们将 ARG1 数组中的第 1 个元素替换为 110。[root@master scripts]# echo ${ARG1[@]}1 2 3 hello Shell[root@master scripts]# echo ${ARG1[@]/1/110}110 2 3 hello Shell
Chrome、Firefox 以及一些套壳浏览器接入的定位服务在国外,有较大的限制,也会造成定位失败,且失败率较高。
使用insert方法在数组指定索引位置插入元素。实例:colors = ["red", "green", "blue"]=> ["red", "green", "blue"]colors.insert( 1, "orange" )=> ["red", "orange", "green", "blue"]使用[]=方法,修改数组指定索引位置的值。实例:colors = ["red", "green", "blue"]=> ["red", "green", "blue"]colors[1] = "yellow"=> "yellow"colors=> ["red", "yellow", "blue"]在[]=方法中使用范围,可以一次修改多个元素。实例:colors = ["red", "green", "blue"]=> ["red", "green", "blue"]colors[1..2] = "orange", "pink"=> ["orange", "pink"]colors=> ["red", "orange", "pink"]
刚刚说到了定位方式,其实常见的定位体系大致上只有三种:第一种是常规的根据文档流进行元素的排布定位,我们称之为流式定位;第二种是绝对定位,就是我们上面提到的某些定位方式;第三种定位方式,就是我们这回要讲解的浮动定位。在 HTML中,浮动定位是使用一个名为 float 的属性来约束元素的位置,下面我们就来仔细讨论学习一下这个 float。
indexOf() 在查询数组中元素时存在一些问题,下面我们就来看看为什么 ES6 要引入 includes() 方法。在 ES5 中使用 indexOf() 方法在数组中可以找到一个给定元素的第一个索引,如果不存在,则返回 -1。但是查找数组时存在一定缺陷,indexOf 不能判断数组中是否有 NaN,对于数组中的空项也不能判断。var arr1 = [,,,,,];var arr2 = [null, undefined, NaN];console.log(arr1[0], arr1[1]) // undefined undefinedarr1.indexOf(undefined) // -1arr2.indexOf(NaN); // -1上面的代码可以看到,在第 1 行中数组的每一项都是空的, 使用 indexOf() 查找返回的结果为 -1,没有查到 undefined 值,但从第 3 行打印的结果可以看到其实空数组的每一项都是 undefined。另外,还有个问题 indexOf() 不能解决,数组中有 NaN 时查询不了,返回的结果也是 -1。ES6 的includes() 可以完美解决上面的问题,看如下示例:[,,,,,].includes(undefined) // true[null, undefined, NaN].includes(NaN)] // true从上面的代码可以看出,使用 includes() 查询可以得到正确的结果。indexOf 返回的是数值型的,而 includes 返回的是布尔型的,方便逻辑判断。如下实例:var arr = ['imooc', 'ES6', 'wiki'];if (arr.includes('ES6')) { // todo}if (arr.indexOf('ES6') !== -1) { // todo}
我们可以通过数组和对象的两种形式绑定元素的 Class。
Unsafe 操作数组元素主要有如下两个方法:public native int arrayBaseOffset(Class arrayClass):返回数组类型的第一个元素的偏移地址 (基础偏移地址);public native int arrayIndexScale(Class arrayClass):返回数组中元素与元素之间的偏移地址的增量,配合 arrayBaseOffset () 使用就可以定位到任何一个元素的地址。实例:import sun.misc.Unsafe;import java.lang.reflect.Field;public class DemoTest { private static String[] names = {"多线程", "Java", "并发编程"}; public static void main(String[] args) { Unsafe unsafe = getUnsafe(); try { Class<?> a = String[].class; int base = unsafe.arrayBaseOffset(a); int scale = unsafe.arrayIndexScale(a); // base + i * scale 即为字符串数组下标 i 在对象的内存中的偏移地址 System.out.println(unsafe.getObject(names, (long) base + 2 * scale)); } catch (Exception e) { e.printStackTrace(); } } public static Unsafe getUnsafe() { Unsafe unsafe = null; try { Field field = Unsafe.class.getDeclaredField("theUnsafe"); field.setAccessible(true); unsafe = (Unsafe) field.get(null); } catch (Exception e) { e.printStackTrace(); } return unsafe; }}结果验证:并发编程通过对数组的元素的地址进行内存偏移,最后得到的结果为最后一个元素,并发编程。base + 2 * scale 表示字符串数组下标 i 在对象的内存中的偏移地址,偏移两个元素,得到最后一个元素。
众所周知,现在的网页中每个元素都是相对固定的,意思是每个网页元素都有其相对其他元素较为固定的位置。从主观的角度来思考,网页中的定位应该至少分为两种:一种是以固定不动的东西作为基准去定位自己的位置;一种应该是以某个已有元素的位置去定位自己的位置。那么,掌握了这两种定位思路,大家就不难掌握今天的知识点了。首先,网页定位。一个合理的定位几乎决定了我们网页的用户查看网页的整个观感效果。因此,学好定位在网页设计中是很重要的。
a 标签还有一个重要的功能,那就是锚点定位。什么是锚点定位呢?通俗的讲,我们想要让页面跳转到的位置,就是锚点。锚点是一种超链接,只不过它是页面内部的超链接,它指向页面特定的部分。那么 a 标签实现锚点定位,需要两个部分组成:锚记 和 指向锚记的链接。有以下方法:1. 方法一:使用 a 标签作为锚记和链接,俗称使用 name 定位,代码如下:<a href="#mao">点击此处到目标位置</a> <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br> <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><a name="mao">目标位置</a>被点击的 a 标签的 href 属性需要和目标位置的 a 标签的 name 属性对应,而且被点击的 a 标签的 href 属性必须加上 # ,但是很多时候锚点对象不一定是 a 标签,那就不必要为了使用锚点定位而额外增加一个 a 标签了。2. 方法二:使用 a 标签作为链接,使用其他元素(建议使用块元素)作为锚记,俗称 id 定位,代码如下:<a href="#mubiao">点击此处到目标位置</a> <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br> <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br></a><div id="mubiao">这里是目标的位置</div>被点击的 a 标签的 href 属性必须和目标位置的 HTML 标签的 id 名一致,而且被点击的 a 标签的href 属性也必须加上 # 。需要注意的是,目标位置的 HTML 元素最好是块级元素。
>>> db.lrange('url', 0, 1)['www', 'imooc']>>> db.lrange('url', 0, 2)['www', 'imooc', 'com']lrange(start, stop) 返回列表中指定区间 [start, stop] 内的元素在第 1 行,获取列表 url 中范围 [0, 1] 内的 2 项元素在第 3 行,获取列表 url 中范围 [0, 2] 内的 3 项元素
我们先来了解 Znode 节点中由哪些元素组成,请看下图:我们可以看到,Znode 节点中由 4 种元素组成,接下来我们来分别介绍一下每个元素具体是什么。Znode 节点元素介绍:data : Znode 存储的数据信息,这里的数据指用户保存的数据;ACL : 对节点进行权限控制,记录了哪些用户或者哪些 IP 地址可以访问本节点;child : 当前节点的子节点引用,通过这个节点来找到它的子节点;stat : 包含 Znode 的各种元数据,比如事务 ID、版本号、时间戳、大小等 Znode 本身的数据。Tips: Znode 的 data 元素存储的信息最大不能超过 1MB 。太大的数据会影响 Zookeeper 的同步性能。在了解了 Znode 的元素组成,每个元素的具体作用之后,我们接下来学习 Znode 节点有哪些类型,以及他们的特点。
由于信号问题有时会出现超时问题,可以适当增加超时属性的设定值以减少这一现象。某个别浏览器本身对定位接口的友好程度较弱,也会超时返回失败,error 信息的 message 字段包含 Geolocation time out 信息。
当我们要一组 class 同名,或者连续的一组元素的其中一个,或者某种规律的元素添加单独样式的时候,不妨看看这类的元素选择器。
元组类型允许在元素类型后缀一个 ? 来说明元素是可选的:const list: [number, string?, boolean?]list = [10, 'Sherlock', true]list = [10, 'Sherlock']list = [10]代码解释: 可选元素必须在必选元素的后面,也就是如果一个元素后缀了 ?号,其后的所有元素都要后缀 ?号。
最大子数组(Max Subarray)问题,是计算机科学与技术领域中一种常见的算法问题,主要可以利用分治思想进行快速实现。最大子数组问题描述如下:假如我们有一个数组,数组中的元素有正数和负数,如何在数组中找到一段连续的子数组,使得子数组各个元素之和最大。最大子数组问题在生活中有很多实际情况可以与其对应,比如说我们观察某一股票在一段时间内的走势,请问如何找出在哪一天买入,哪一天卖出可以赚到最大差价(这里假设你已经知道股票的价格走势)?为了实现最大化的股票收益,我们需要考虑的是买进和卖出时候的价格变化幅度,因此从该股票的每日变化幅度来考虑这个问题更加合适。所以,我们可以将这个问题稍作变形:将股票价格走势对应为每日股票价格涨跌,涨记为正值,跌记为负值,然后一段时间就对应一个正负数数组,并试图找到该数组的最大子数组,就可以获得最大收益。接下来,就让我们看看如何利用分治算法求解最大子数组问题吧。
首先我们还是新建一个空白的 HTML 文档。如图:(具体步骤这里同样不做赘述,同学们可以翻阅之前的慕课 WIKI 章节来自行学习。)我们新建一个DIV元素,点击插入,点击DIV,这里可能有同学会问到,为什么老师每次都是拿 DIV 元素作为讲解?在这里统一给大家做一个解答:首先,因为 DIV 作为一个常见元素,同学们都很熟悉,为了介绍知识的连贯性,尽量采用了同学们熟悉的元素来使用,从而达到为大家讲解知识的目的。其次,DIV 本身就是一个容器元素,因为它既能单独作为一个元素来使用,又可以容纳其他元素(子元素)。因此,基于上述两点考虑,我们在更多情况下采用 DIV 来讲解方便大家后续自己选择元素的时候能够更好的兼容。插入完 DIV 后,我们在其中填入一段文字,这里填入文字的目的,是为了更好地让大家识别到这个 DIV 的位置,出于同样的目的,还为这个元素添加了背景颜色,如图所示,我给文字添加了一个绿色的背景色。那么如何才能达到上述图片,让元素居中的效果呢?我们接下来在 CSS 设计器中源中点击加号,然后选择在页面中定义,然后在选择器中点击加号,关联我们刚刚新建的 DIV 元素。选择器准备好后,我们点击选择器,如图所示的 #moocwiki ,在弹出的属性面板中,我们找到 position 属性。改变属性的默认设置,达到居中的效果。到此,我们就完成了元素居中的设置,应用类似方法,我们可以设置几乎所有的 HTML 页面元素。
可以通过指定起点和要提取的元素数来提取数组元素的子集。例如,从元素1开始并读取3个元素:实例:# 定义一个数组> days_of_week = [ "Mon", "Tues", "Wed", "Thu", "Fri", "Sat", "Sun" ]=> [ "Mon", "Tues", "Wed", "Thu", "Fri", "Sat", "Sun" ]> days_of_week[1, 3]=> ["Tues", "Wed", "Thu"]同样,我们可以指定一个范围(请参考 Ruby的范围章节)。实例:> days_of_week[1..3]=> ["Tues", "Wed", "Thu"]或者,可以使用 Array 类的slice方法。实例:> days_of_week.slice(1..3)=> ["Tues", "Wed", "Thu"]
其实面试有时候并不像大家想象的那样问一些很基础的问题,比如:请谈一下你对CSS盒模型的理解你对flex布局了解的怎么样了解过grid布局吗当元素的外边距为负值时会有什么样的行为当元素重叠在一起时如何控制上下层级如何水平垂直居中什么是事件冒泡怎么控制特定位置的元素样式(比如偶数位置的样式)如何判断事件是从哪个元素冒泡过来的哪个CSS属性值可以减少重复定义颜色值这样问的话效率会比较低,而优秀的面试题只需要一道,就可以考察上述所有的这些问题。
既然可以引用数组元素,就可以修改元素,实例如下:503运行结果:数组arr中,第二个元素为:4
首先,在利用动态规划算法之前,我们需要清楚哪些问题适合用动态规划算法求解。一般而言,能够利用动态规划算法求解的问题都会具备以下两点性质:最优子结构: 利用动态规划算法求解问题的第一步就是需要刻画问题最优解的结构,并且如果一个问题的最优解包含其子问题的最优解,则此问题具备最优子结构的性质。因此,判断某个问题是否适合用动态规划算法,需要判断该问题是否具有最优子结构。Tips: 最优子结构的定义主要是在于当前问题的最优解可以从子问题的最优解得出,当子问题满足最优解之后,才可以通过子问题的最优解获得原问题的最优解。重叠子问题: 适合用动态规划算法去求解的最优化问题应该具备的第二个性质是问题的子问题空间必须足够” 小 “,也就是说原问题递归求解时会重复相同的子问题,而不是一直生成新的子问题。如果原问题的递归算法反复求解相同的子问题,我们就称该最优化问题具有重叠子问题。Tips: 在这里,我们需要注意是,与适用动态规划算法去求解的问题具备重叠子问题性质相反,前面我们介绍的分治算法递归解决问题时,问题的子问题都是互不影响,相互独立的,这个也是我们在选用动态规划算法还是分治法解决问题时的一个判断条件。
网页是由一个一个的区域组成,就像房子中的房间一样,每个区域内可以放置 HTML 元素,然后可以对区域设置样式从而将其与别的区域区分开来。这个区域在 HTML 中由结构元素实现,又可以将其称之为容器元素。通过搭配 ID 属性使用,结构元素将会帮助我们构建结构化条理分明的网站逻辑。本章我们介绍一下 结构元素的使用方式和场景。
在Numpy中,以 bitwise_ 开头的函数是位运算函数。Numpy 位运算包括以下几个函数:函数描述bitwise_and对数组元素执行位与操作bitwise_or对数组元素执行位或操作invert按位取反left_shift向左移动二进制表示的位right_shift向右移动二进制表示的位