来源: ApacheCN『JavaScript 编程精解 中文第三版』翻译项目
原文:The Document Object Model
译者:飞龙
协议:CC BY-NC-SA 4.0
自豪地采用谷歌翻译
部分参考了《JavaScript 编程精解(第 2 版)》
Too bad! Same old story! Once you've finished building your house you notice you've accidentally learned something that you really should have known—before you started.
Friedrich Nietzsche,《Beyond Good and Evil》
当你在浏览器中打开网页时,浏览器会接收网页的 HTML 文本并进行解析,其解析方式与第 11 章中介绍的解析器非常相似。浏览器构建文档结构的模型,并使用该模型在屏幕上绘制页面。
JavaScript 在其沙箱中提供了将文本转换成文档对象模型的功能。它是你可以读取或者修改的数据结构。模型是一个所见即所得的数据结构,改变模型会使得屏幕上的页面产生相应变化。
文档结构
你可以将 HTML 文件想象成一系列嵌套的箱子。诸如
和
之类的标签会将其他标签包围起来,而包含在内部的标签也可以包含其他的标签和文本。这里给出上一章中已经介绍过的示例文件。
My home page
My home page
Hello, I am Marijn and this is my home page.
I also wrote a book! Read it
here .
该页面结构如下所示。
浏览器使用与该形状对应的数据结构来表示文档。每个盒子都是一个对象,我们可以和这些对象交互,找出其中包含的盒子与文本。我们将这种表示方式称为文档对象模型(Document Object Model),或简称 DOM。
我们可以通过全局绑定document
来访问这些对象。该对象的documentElement
属性引用了
标签对象。由于每个 HTML 文档都有一个头部和一个主体,它还具有head
和body
属性,指向这些元素。
树
回想一下第 12 章中提到的语法树。其结构与浏览器文档的结构极为相似。每个节点使用children
引用其他节点,而每个子节点又有各自的children
。其形状是一种典型的嵌套结构,每个元素可以包含与其自身相似的子元素。
如果一个数据结构有分支结构,而且没有任何环路(一个节点不能直接或间接包含自身),并且有一个单一、定义明确的“根节点”,那么我们将这种数据结构称之为树。就 DOM 来讲,document.documentElement
就是其根节点。
在计算机科学中,树的应用极为广泛。除了表现诸如 HTML 文档或程序之类的递归结构,树还可以用于维持数据的有序集合,因为在树中寻找或插入一个节点往往比在数组中更高效。
一棵典型的树有不同类型的节点。Egg 语言的语法树有标识符、值和应用节点。应用节点常常包含子节点,而标识符、值则是叶子节点,也就是没有子节点的节点。
DOM中也是一样。元素(表示 HTML 标签)的节点用于确定文档结构。这些节点可以包含子节点。这类节点中的一个例子是document.body
。其中一些子节点可以是叶子节点,比如文本片段或注释。
每个 DOM 节点对象都包含nodeType
属性,该属性包含一个标识节点类型的代码(数字)。元素的值为 1,DOM 也将该值定义成一个常量属性document.ELEMENT_NODE
。文本节点(表示文档中的一段文本)代码为 3(document.TEXT_NODE
)。注释的代码为 8(document.COMMENT_NODE
)。
因此我们可以使用另一种方法来表示文档树:
叶子节点是文本节点,而箭头则指出了节点之间的父子关系。
标准
并非只有 JavaScript 会使用数字代码来表示节点类型。本章随后将会展示其他的 DOM 接口,你可能会觉得这些接口有些奇怪。这是因为 DOM 并不是为 JavaScript 而设计的,它尝试成为一组语言中立的接口,确保也可用于其他系统中,不只是 HTML,还有 XML。XML 是一种通用数据格式,语法与 HTML 相近。
这就比较糟糕了。一般情况下标准都是非常易于使用的。但在这里其优势(跨语言的一致性)并不明显。相较于为不同语言提供类似的接口,如果能够将接口与开发者使用的语言进行适当集成,可以为开发者节省大量时间。
我们举例来说明一下集成问题。比如 DOM 中每个元素都有childNodes
属性。该属性是一个类数组对象,有length
属性,也可以使用数字标签访问对应的子节点。但该属性是NodeList
类型的实例,而不是真正的数组,因此该类型没有诸如slice
和map
之类的方法。
有些问题是由不好的设计导致的。例如,我们无法在创建新的节点的同时立即为其添加子节点和属性。相反,你首先需要创建节点,然后使用副作用,将子节点和属性逐个添加到节点中。大量使用 DOM 的代码通常较长、重复和丑陋。
但这些问题并非无法改善。因为 JavaScript 允许我们构建自己的抽象,可以设计改进方式来表达你正在执行的操作。 许多用于浏览器编程的库都附带这些工具。
沿着树移动
DOM 节点包含了许多指向相邻节点的链接。下面的图表展示了这一点。
尽管图表中每种类型的节点只显示出一条链接,但每个节点都有parentNode
属性,指向一个节点,它是这个节点的一部分。类似的,每个元素节点(节点类型为 1)均包含childNodes
属性,该属性指向一个类数组对象,用于保存其子节点。
理论上,你可以通过父子之间的链接移动到树中的任何地方。但 JavaScript 也提供了一些更加方便的额外链接。firstChild
属性和lastChild
属性分别指向第一个子节点和最后一个子节点,若没有子节点则值为null
。类似的,previousSibling
和nextSibling
指向相邻节点,分别指向拥有相同父亲的前一个节点和后一个节点。对于第一个子节点,previousSibling
是null
,而最后一个子节点的nextSibling
则是null
。
也存在children
属性,它就像childNodes
,但只包含元素(类型为 1)子节点,而不包含其他类型的子节点。 当你对文本节点不感兴趣时,这可能很有用。
处理像这样的嵌套数据结构时,递归函数通常很有用。 以下函数在文档中扫描包含给定字符串的文本节点,并在找到一个时返回true
:
function talksAbout(node, string) {
if (node.nodeType == document.ELEMENT_NODE) {
for (let i = 0; i < node.childNodes.length; i++) {
if (talksAbout(node.childNodes[i], string)) {
return true;
}
}
return false;
} else if (node.nodeType == document.TEXT_NODE) {
return node.nodeValue.indexOf(string) > -1;
}
}
console.log(talksAbout(document.body, "book"));
// → true
因为childNodes
不是真正的数组,所以我们不能用for/of
来遍历它,并且必须使用普通的for
循环遍历索引范围。
文本节点的nodeValue
属性保存它所表示的文本字符串。
查找元素
使用父节点、子节点和兄弟节点之间的连接遍历节点确实非常实用。但是如果我们只想查找文档中的特定节点,那么从document.body
开始盲目沿着硬编码的链接路径查找节点并非良策。如果程序通过树结构定位节点,就需要依赖于文档的具体结构,而文档结构随后可能发生变化。另一个复杂的因素是 DOM 会为不同节点之间的空白字符创建对应的文本节点。例如示例文档中的body
标签不止包含 3 个子节点(
和两个
元素),其实包含 7 个子节点:这三个节点、三个节点前后的空格、以及元素之间的空格。
因此,如果你想获取文档中某个链接的href
属性,最好不要去获取文档body
元素中第六个子节点的第二个子节点,而最好直接获取文档中的第一个链接,而且这样的操作确实可以实现。
let link = document.body.getElementsByTagName("a")[0];
console.log(link.href);
所有元素节点都包含getElementsByTagName
方法,用于从所有后代节点中(直接或间接子节点)搜索包含给定标签名的节点,并返回一个类数组的对象。
你也可以使用document.getElementById
来寻找包含特定id
属性的某个节点。
My ostrich Gertrude:
第三个类似的方法是getElementsByClassName
,它与getElementsByTagName
类似,会搜索元素节点的内容并获取所有包含特定class
属性的元素。
修改文档
几乎所有 DOM 数据结构中的元素都可以被修改。文档树的形状可以通过改变父子关系来修改。 节点的remove
方法将它们从当前父节点中移除。appendChild
方法可以添加子节点,并将其放置在子节点列表末尾,而insertBefore
则将第一个参数表示的节点插入到第二个参数表示的节点前面。
One
Two
Three
每个节点只能存在于文档中的某一个位置。因此,如果将段落Three
插入到段落One
前,会将该节点从文档末尾移除并插入到文档前面,最后结果为Three/One/Two
。所有将节点插入到某处的方法都有这种副作用——会将其从当前位置移除(如果存在的话)。
replaceChild
方法用于将一个子节点替换为另一个子节点。该方法接受两个参数,第一个参数是新节点,第二个参数是待替换的节点。待替换的节点必须是该方法调用者的子节点。这里需要注意,replaceChild
和insertBefore
都将新节点作为第一个参数。
创建节点
假设我们要编写一个脚本,将文档中的所有图像(
标签)替换为其alt
属性中的文本,该文本指定了图像的文字替代表示。
这不仅涉及删除图像,还涉及添加新的文本节点,并替换原有图像节点。为此我们使用document.createTextNode
方法。
The in the
.
Replace
给定一个字符串,createTextNode
为我们提供了一个文本节点,我们可以将它插入到文档中,来使其显示在屏幕上。
该循环从列表末尾开始遍历图像。我们必须这样反向遍历列表,因为getElementsByTagName
之类的方法返回的节点列表是动态变化的。该列表会随着文档改变还改变。若我们从列表头开始遍历,移除掉第一个图像会导致列表丢失其第一个元素,第二次循环时,因为集合的长度此时为 1,而i
也为 1,所以循环会停止。
如果你想要获得一个固定的节点集合,可以使用数组的Array.from
方法将其转换成实际数组。
let arrayish = {0: "one", 1: "two", length: 2};
let array = Array.from(arrayish);
console.log(array.map(s => s.toUpperCase()));
// → ["ONE", "TWO"]
你可以使用document.createElement
方法创建一个元素节点。该方法接受一个标签名,返回一个新的空节点,节点类型由标签名指定。
下面的示例定义了一个elt
工具,用于创建一个新的元素节点,并将其剩余参数当作该节点的子节点。接着使用该函数为引用添加来源信息。
No book can ever be finished. While working on it we learn
just enough to find it immature the moment we turn away
from it.
属性
我们可以通过元素的 DOM 对象的同名属性去访问元素的某些属性,比如链接的href
属性。这仅限于最常用的标准属性。
HTML 允许你在节点上设定任何属性。这一特性非常有用,因为这样你就可以在文档中存储额外信息。你自己创建的属性不会出现在元素节点的属性中。你必须使用getAttribute
和setAttribute
方法来访问这些属性。
The launch code is 00000000.
I have two feet.
建议为这些组合属性的名称添加data-
前缀,来确保它们不与任何其他属性发生冲突。
这里有一个常用的属性:class
。该属性是 JavaScript 中的保留字。因为某些历史原因(某些旧版本的 JavaScript 实现无法处理和关键字或保留字同名的属性),访问class
的属性名为className
。你也可以使用getAttribute
和setAttribute
方法,使用其实际名称class
来访问该属性。
布局
你可能已经注意到不同类型的元素有不同的布局。某些元素,比如段落(
)和标题(
)会占据整个文档的宽度,并且在独立的一行中渲染。这些元素被称为块(Block)元素。其他的元素,比如链接(
或
元素则与周围文本在同一行中渲染。这类元素我们称之为内联(Inline)元素。
对于任意特定文档,浏览器可以根据每个元素的类型和内容计算其尺寸与位置等布局信息。接着使用布局来绘制文档。
JavaScript 中可以访问元素的尺寸与位置。
属性offsetWidth
和offsetHeight
给出元素的起始位置(单位是像素)。像素是浏览器中的基本测量单元。它通常对应于屏幕可以绘制的最小的点,但是在现代显示器上,可以绘制非常小的点,这可能不再适用了,并且浏览器像素可能跨越多个显示点。
同样,clientWidth
和clientHeight
向你提供元素内的空间大小,忽略边框宽度。
I'm boxed in
getBoundingClientRect
方法是获取屏幕中某个元素精确位置的最有效方法。该方法返回一个对象,包含top
、bottom
、left
和right
四个属性,表示元素相对于屏幕左上角的位置(单位是像素)。若你想要知道其相对于整个文档的位置,必须加上其滚动位置,你可以在pageXOffset
和pageYOffset
绑定中找到。
我们还需要花些力气才能完成文档的排版工作。为了加快速度,每次你改变它时,浏览器引擎不会立即重新绘制整个文档,而是尽可能等待并推迟重绘操作。当一个修改文档的 JavaScript 程序结束时,浏览器会计算新的布局,并在屏幕上显示修改过的文档。若程序通过读取offsetHeight
和getBoundingClientRect
这类属性获取某些元素的位置或尺寸时,为了提供正确的信息,浏览器也需要计算布局。
如果程序反复读取 DOM 布局信息或修改 DOM,会强制引发大量布局计算,导致运行非常缓慢。下面的代码展示了一个示例。该示例包含两个不同的程序,使用X
字符构建一条线,其长度是 2000 像素,并计算每个任务的时间。
样式
我们看到了不同的 HTML 元素的绘制是不同的。一些元素显示为块,一些则是以内联方式显示。我们还可以添加一些样式,比如使用
加粗内容,或使用
使内容变成蓝色,并添加下划线。
标签显示图片的方式或点击标签
时跳转的链接都和元素类型紧密相关。但元素的默认样式,比如文本的颜色、是否有下划线,都是可以改变的。这里给出使用style
属性的示例。
Normal link
Green link
样式属性可以包含一个或多个声明,格式为属性(比如color
)后跟着一个冒号和一个值(比如green
)。当包含更多声明时,不同属性之间必须使用分号分隔,比如color:red;border:none
。
文档的很多方面会受到样式的影响。例如,display
属性控制一个元素是否显示为块元素或内联元素。
This text is displayed inline ,
as a block , and
not at all .
block
标签会结束其所在的那一行,因为块元素是不会和周围文本内联显示的。最后一个标签完全不会显示出来,因为display:none
会阻止一个元素呈现在屏幕上。这是隐藏元素的一种方式。更好的方式是将其从文档中完全移除,因为稍后将其放回去是一件很简单的事情。
JavaScript 代码可以通过元素的style
属性操作元素的样式。该属性保存了一个对象,对象中存储了所有可能的样式属性,这些属性的值是字符串,我们可以把字符串写入属性,修改某些方面的元素样式。
Nice text
一些样式属性名包含破折号,比如font-family
。由于这些属性的命名不适合在 JavaScript 中使用(你必须写成style["font-family"]
),因此在 JavaScript 中,样式对象中的属性名都移除了破折号,并将破折号之后的字母大写(style.fontFamily
)。
层叠样式
我们把 HTML 的样式化系统称为 CSS,即层叠样式表(Cascading Style Sheets)。样式表是一系列规则,指出如何为文档中元素添加样式。可以在
标签中写入 CSS。
Now strong text is italic and gray.
所谓层叠指的是将多条规则组合起来产生元素的最终样式。在示例中,
标签的默认样式font-weight:bold
,会被
标签中的规则覆盖,并为
标签样式添加font-style
和color
属性。
当多条规则重复定义同一属性时,最近的规则会拥有最高的优先级。因此如果
标签中的规则包含font-weight:normal
,违背了默认的font-weight
规则,那么文本将会显示为普通样式,而非粗体。属性style
中的样式会直接作用于节点,而且往往拥有最高优先级。
我们可以在 CSS 规则中使用标签名来定位标签。规则.abc
指的是所有class
属性中包含abc
的元素。规则#xyz
作用于id
属性为xyz
(应当在文档中唯一存在)的元素。
.subtle {
color: gray;
font-size: 80%;
}
#header {
background: blue;
color: white;
}
/* p elements with id main and with classes a and b */
p#main.a.b {
margin-bottom: 20px;
}
优先级规则偏向于最近定义的规则,仅在规则特殊性相同时适用。规则的特殊性用于衡量该规则描述匹配元素时的准确性。特殊性取决于规则中的元素数量和类型(tag
、class
或id
)。例如,目标规则p.a
比目标规则p
或.a
更具体,因此有更高优先级。
p>a
这种写法将样式作用于
标签的直系子节点。类似的,p a
应用于所有的
标签中的
标签,无论是否是直系子节点。
查询选择器
本书不会使用太多样式表。尽管理解样式表对浏览器程序设计至关重要,想要正确解释所有浏览器支持的属性及其使用方式,可能需要两到三本书才行。
我介绍选择器语法(用在样式表中,确定样式作用的元素)的主要原因是这种微型语言同时也是一种高效的 DOM 元素查找方式。
document
对象和元素节点中都定义了querySelectorAll
方法,该方法接受一个选择器字符串并返回类数组对象,返回的对象中包含所有匹配的元素。
And if you go chasing
rabbits
And you know you're going to fall
Tell 'em a hookah smoking
caterpillar
Has given you the call
与getElementsByTagName
这类方法不同,由querySelectorAll
返回的对象不是动态变更的。修改文档时其内容不会被修改。但它仍然不是一个真正的数组,所以如果你打算将其看做真的数组,你仍然需要调用Array.from
。
querySelector
方法(没有All
)与querySelectorAll
作用相似。如果只想寻找某一个特殊元素,该方法非常有用。该方法只返回第一个匹配的元素,如果没有匹配的元素则返回null
。
位置与动画
position
样式属性是一种强大的布局方法。默认情况下,该属性值为static
,表示元素处于文档中的默认位置。若该属性设置为relative
,该元素在文档中依然占据空间,但此时其top
和left
样式属性则是相对于常规位置的偏移。若position
设置为absolute
,会将元素从默认文档流中移除,该元素将不再占据空间,而会与其他元素重叠。其top
和left
属性则是相对其最近的闭合元素的偏移,其中position
属性的值不是static
。如果没有任何闭合元素存在,则是相对于整个文档的偏移。
我们可以使用该属性创建一个动画。下面的文档用于显示一幅猫的图片,该图片会沿着椭圆轨迹移动。
我们的图像在页面中央,position
为relative
。为了移动这只猫,我们需要不断更新图像的top
和left
样式。
脚本使用requestAnimationFrame
在每次浏览器准备重绘屏幕时调用animate
函数。animate
函数再次调用requestAnimationFrame
以准备下一次更新。当浏览器窗口(或标签)激活时,更新频率大概为 60 次每秒,这种频率可以生成美观的动画。
若我们只是在循环中更新 DOM,页面会静止不动,页面上也不会显示任何东西。浏览器不会在执行 JavaScript 程序时刷新显示内容,也不允许页面上的任何交互。这就是我们需要requestAnimationFrame
的原因,该函数用于告知浏览器 JavaScript 程序目前已经完成工作,因此浏览器可以继续执行其他任务,比如刷新屏幕,响应用户动作。
我们将动画生成函数作为参数传递给requestAnimationFrame
。为了确保每一毫秒猫的移动是稳定的,而且动画是圆滑的,它基于一个速度,角度以这个速度改变这一次与上一次函数运行的差。如果仅仅每次走几步,猫的动作可能略显迟钝,例如,另一个在相同电脑上的繁重任务可能使得该函数零点几秒之后才会运行一次。
我们使用三角函数Math.cos
和Math.sin
来使猫沿着圆弧移动。你可能不太熟悉这些计算,我在这里简要介绍它们,因为你会在这本书中偶尔遇到。
Math.cos
和Math.sin
非常实用,我们可以利用一个 1 个弧度,计算出以点(0,0
为圆心的圆上特定点的位置。两个函数都将参数解释为圆上的一个位置,0 表示圆上最右侧那个点,一直逆时针递增到2π
(大概是 6.28),正好走过整个圆。Math.cos
可以计算出圆上某一点对应的x
坐标,而Math.sin
则计算出y
坐标。超过2π
或小于 0 的位置(或角度)都是合法的。因为弧度是循环重复的,a+2π
与a
的角度相同。
用于测量角度的单位称为弧度 - 一个完整的圆弧是2π
个弧度,类似于以角度度量时的 360 度。 常量π
在 JavaScript 中为Math.PI
。
猫的动画代码保存了一个名为angle
的计数器,该绑定记录猫在圆上的角度,而且每当调用animate
函数时,增加该计数器的值。我们接着使用这个角度来计算图像元素的当前位置。top
样式是Math.sin
的结果乘以 20,表示圆中的垂直弧度。left
样式是 Math.cos 的结果乘以200
,因此圆的宽度大于其高度,导致最后猫会沿着椭圆轨迹移动。
这里需要注意的是样式的值一般需要指定单位。本例中,我们在数字后添加px
来告知浏览器以像素为计算单位(而非厘米,ems
,或其他单位)。我们很容易遗漏这个单位。如果我们没有为样式中的数字加上单位,浏览器最后会忽略掉该样式,除非数字是 0,在这种情况下使用什么单位,其结果都是一样的。
本章小结
JavaScript 程序可以通过名为 DOM 的数据结构,查看并修改浏览器中显示的文档。该数据结构描述了浏览器文档模型,而 JavaScript 程序可以通过修改该数据结构来修改浏览器展示的文档。
DOM 的组织就像树一样,DOM 根据文档结构来层次化地排布元素。描述元素的对象包含很多属性,比如parentNode
和childNodes
这两个属性可以用来遍历 DOM 树。
我们可以通过样式来改变文档的显示方式,可以直接在节点上附上样式,也可以编写匹配节点的规则。样式包含许多不同的属性,比如color
和display
。JavaScript 代码可以直接通过节点的style
属性操作元素的样式。
习题
创建一张表
HTML 表格使用以下标签结构构建:
name
height
place
Kilimanjaro
5895
Tanzania
标签中,每一行包含一个标签。标签内部则是单元格元素,分为表头()和常规单元格()。
给定一个山的数据集,一个包含name
,height
和place
属性的对象数组,为枚举对象的表格生成 DOM 结构。 每个键应该有一列,每个对象有一行,外加一个顶部带有元素的标题行,列出列名。
编写这个程序,以便通过获取数据中第一个对象的属性名称,从对象自动产生列。
将所得表格添加到id
属性为"mountains"
的元素,以便它在文档中可见。
当你完成后,将元素的style.textAlign
属性设置为right
,将包含数值的单元格右对齐。
Mountains
通过标签名获取元素
document.getElementsByTagName
方法返回带有特定标签名称的所有子元素。实现该函数,这里注意是函数不是方法。该函数的参数是一个节点和字符串(标签名称),并返回一个数组,该数组包含所有带有特定标签名称的所有后代元素节点。
你可以使用nodeName
属性从 DOM 元素中获取标签名称。但这里需要注意,使用tagName
获取的标签名称是全大写形式。可以使用字符串的toLowerCase
或toUpperCase
来解决这个问题。
Heading with a span element.
A paragraph with one , two
spans.
猫的帽子
扩展一下之前定义的用来绘制猫的动画函数,让猫和它的帽子沿着椭圆形轨道边(帽子永远在猫的对面)移动。
你也可以尝试让帽子环绕着猫移动,或修改成其他有趣的动画。
为了便于定位多个对象,一个比较好的方法是使用绝对(absolute
)定位。这就意味着top
和left
属性是相对于文档左上角的坐标。你可以简单地在坐标上加上一个固定数字,以避免出现负的坐标,它会使图像移出可见页面。
你可能感兴趣的:(javascript)
html+css网页设计,我的网站
软件技术NINI
html/css笔记 javascript html css
一、技术简介HTML:超文本标记语言(HyperTextMarkupLanguage),用于创建网页的基本结构和内容。CSS:层叠样式表(CascadingStyleSheets),用于设置网页的样式和布局,包括字体、颜色、边距、对齐方式等。JavaScript:一种用于创建动态和交互式网页的脚本语言。通过JavaScript,可以实现网页的动画效果、表单验证、数据交互等功能。二、创建多页网站的基
Ajax基础学习
喜欢代码的新之助
ajax 学习 okhttp
AJAX浏览器本身就具备网络通信的能力,但在早期浏览器并没有把这个能力开放给JS最早是微软在IE浏览器中把这一能力向JS开放,让JS可以在代码中实现发送请求,这项技术在2005年被正式命名为AJAX(AsynchronousJavascriptAndXML)这套API主要依靠一个构造函数完成;该构造函数的名称为XMLHttpRequest,简称为XHR由于XHRAPI有着诸多缺陷,在HTML5和E
阿里云视频点播,基于thinkphp8上传视频
quweiie
php 阿里云 音视频 云计算
前端参考官方示例(jQuery版)阿里云JavaScript上传SDKDemo(使用jquery).container{width:1200px;margin:0auto;}.input-control{margin:5px0;}.input-controllabel{font-size:14px;color:#333;width:30%;text-align:right;display:inli
网络安全组织架构表 网络安全技术架构
网络安全King
web安全 架构 安全
web安全架构(上)开始之前这们说一下,web网站其实防御也相当重要,不管是服务器防御,后台数据防御,数据库防御都是必须滴,那我们说说常见的几种。后续再给大家分享api接口安全性设计,黑名单白名单,以及防御DDOS。XSS攻击,SQL注入,防盗链,csrf模拟请求,文件上传漏洞,忘记密码漏洞,Api接口幂等,其他问题等等,,,,,,一,什么是XSS?Xss就是javascript脚本攻击,就是在表
什么是重绘?什么是回流?如何减少回流?
Ashy-
前端面试题 前端笔记 css3
重绘是指当元素样式发生改变,但不影响其布局的情况下,浏览器重新绘制元素的过程。例如修改元素的背景色、字体颜色等回流是指元素布局属性发生改变,需要重新计算元素在页面中的布局位置时,浏览器重新进行布局的过程例如元素的宽度高度位置改变如何减少回流?适用css动画代替JavaScript动画css动画利用GPU加速,在性能方面通常比JavaScript动画更高效。使用css的transform和opaci
Node.js 环境搭建指南(手动下载并安装Node.js)
MAX_WT
node.js 服务器 javascript
在服务器上部署Node.js环境是开发全栈应用、运行JavaScript服务端代码的基础步骤。本文将详细介绍如何在Linux服务器上搭建Node.js环境,并验证其是否正常运行。本文适合初学者和有一定经验的开发者参考。一、服务器环境准备1.添加GitHubHosts由于某些网络环境下访问GitHub可能较慢或不稳定,我们可以通过修改/etc/hosts文件来加速访问。操作步骤:1.使用vi编辑器打
JavaScript 简介
强强学习
javascript 开发语言 ecmascript
JavaScript是互联网上最流行的脚本语言,这门语言可用于HTML和web,更可广泛用于服务器、PC、笔记本电脑、平板电脑和智能手机等设备。JavaScript是脚本语言JavaScript是一种轻量级的编程语言。JavaScript是可插入HTML页面的编程代码。JavaScript插入HTML页面后,可由所有的现代浏览器执行。JavaScript很容易学习。
html元素后追加内容,jquery 元素控制(追加元素/追加内容)介绍及应用
王大明白
html元素后追加内容
一、在元素内部/外部追加元素append,prepend:添加到子元素before,after:作为兄弟元素添加html:在我的后面追加一条新闻Javascript:jQuery(function(){//在元素内部追加内容$("#content").append("姚明退役了...");})在#content里面添加元素,这是把姚明退役了...作为子元素添加到#content,如果想在元素外部追
canvas 添加html元素,给canvas添加内容
云舞空城
canvas 添加html元素
画布是一个矩形区域,您可以控制其每一像素。canvas拥有多种绘制路径、矩形、圆形、字符以及添加图像的方法。创建Canvas元素向HTML5页面添加canvas元素。规定元素的id、宽度和高度:通过JavaScript来绘制canvas元素本身是没有canvas画布与画布内容都缩小如何实现?如何将canvas复制给另外一个canvascanvas怎么根据坐标获取上面的内容html5canvas清除
计算机学习建议
qincjun
学习
对于现代得计算机开发者而言;最快的是要见到成效;这是一个功利性的社会;对于99%的人来说,先保证自己可以在社会上活下去才是最重要的;而不是追求梦想;一、职业Web前端:HTML、CSS、JavaScript、Vue3框架、React框架等;客户端:C#后端:(C语言、C++)或者Java数据库:MySQL之类的数据库操作;算法工程师:算法相关书籍;架构师:Linux相关;并做过前后端请一定要想好去
前端面试题常考汇总1
RayFars
前端
JS部分1.解释JavaScript中的闭包,并举例说明其应用场景闭包是指函数能够记住并访问它的词法作用域,即使这个函数在词法作用域之外执行。应用场景:数据隐藏:通过闭包,可以创建私有变量,只通过特定的函数来访问和修改这些变量。回调函数和事件处理:闭包常用于设置回调函数,因为回调函数需要访问其外部函数的变量。functioncreateCounter(){letcount=0;returnfunc
Web组件适配网页中iframe
场景描述:当使用web组件加载带有iframe的页面时,由于H5的iframe标签的几个限制条件,可能会出现以下问题:1.由于iframe也要遵守浏览器同源策略,也有对应的白名单限制,所以也会出现跨域或者无法加载的问题,大多出现在本地或沙箱中的H5资源内联iframe时,并且cookie有时候也设置不上2.在应用侧调用runJavascript方法调用不到iframe里面,且主frame和ifra
JavaScript设计模式 -- 状态模式
鎈卟誃筅甡
javascript 设计模式 状态模式
在软件开发中,很多对象的行为会随着其内部状态的变化而改变。如果将所有状态逻辑写在一个类中,代码不仅臃肿而且难以维护。**状态模式(StatePattern)**正是为了解决这个问题而设计的。通过将对象的状态封装成独立的状态类,并将状态相关的行为转移到这些状态类中,状态模式让对象在内部状态发生变化时自动切换行为,达到了将状态转换与行为实现分离的目的。本文将详细介绍状态模式的核心思想、基本结构与优缺点
在JS中如何转换时间格式
豆豆(前端开发+ui设计)
javascript 开发语言 ecmascript
在JavaScript中,如果你想要转换时间格式,通常涉及到的是日期对象的操作。JavaScript的Date对象提供了许多方法来处理和格式化日期和时间。以下是一些常用的方法来转换时间格式:1、获取日期和时间组件使用Date对象的方法来获取年、月、日、时、分、秒等组件,然后按照你需要的格式拼接字符串。letdate=newDate();letyear=date.getFullYear();//获取
使用 HTML CSS 和 JAVASCRIPT 的黑洞动画
谏君之
javascript css html javascript
使用HTMLCSS和JAVASCRIPT的黑洞动画BlackHoleAnimationbody{margin:0;overflow:hidden;background:radial-gradient(ellipseatcenter,black,#1a1a1a);height:100vh;display:flex;justify-content:center;align-items:center;}
MTTK Vue Wrap 项目介绍
MTTKbelinda
VUE Wrap vue.js 前端 javascript
关键字:Vue3,配置开发,快速开发,组件封装关于本项目概述MttkVueWrap是一个基于Vue3的组件封装工具,核心目标是通过纯JavaScript/TypeScript替代传统的单文件组件(SFC)开发模式,同时兼容与SFC的混合使用.它允许开发者通过类似JSON的配置对象或动态生成的脚本快速构建Vue组件,涵盖模板、双向绑定(v-model)、属性、事件、插槽等核心功能.项目起源在前端开发
对于简单的HTML、CSS、JavaScript前端,我们可以通过几种方式连接后端
昨今
前端 html css
1.使用FetchAPI发送HTTP请求(最简单的方式)://home.html//示例:提交表单数据到后端constsubmitForm=async(formData)=>{try{constresponse=awaitfetch('http://your-backend-url/api/submit',{method:'POST',headers:{'Content-Type':'applic
【Py/Java/C++/C/JS/Go六种语言OD独家2024E卷真题】20天拿下华为OD笔试之【前缀和】2024E-分割数组的最大差值【欧弟算法】全网注释最详细分类最全的华为OD真题题解
闭着眼睛学算法
最新华为OD真题 # 前缀和 java c++ c语言 华为od javascript 算法 python
可上欧弟OJ系统练习华子OD、大厂真题绿色聊天软件戳oj1441了解算法冲刺训练(备注【CSDN】否则不通过)文章目录相关推荐阅读题目描述与示例题目描述输入描述输出描述示例输入输出说明解题思路代码pythonjavaC++CNodejavaScriptGo时空复杂度华为OD算法/大厂面试高频题算法练习冲刺训练相关推荐阅读【华为OD机考】2024E+D卷最全真题【完全原创题解|详细考点分类|不断更新
【Py/Java/C++/C/JS/Go六种语言OD独家2024E卷真题】20天拿下华为OD笔试之【排序】2024E-热点网站统计【欧弟算法】全网注释最详细分类最全的华为OD真题题解
闭着眼睛学算法
最新华为OD真题 # 模拟 java c++ c语言 华为od golang 算法 leetcode
可上欧弟OJ系统练习华子OD、大厂真题绿色聊天软件戳oj1441了解算法冲刺训练(备注【CSDN】否则不通过)文章目录相关推荐阅读题目描述与示例题目描述输入描述输出描述示例一输入输出示例二输入输出解题思路代码pythonjavacppCNodejavaScriptGo时空复杂度华为OD算法/大厂面试高频题算法练习冲刺训练相关推荐阅读【华为OD机考】2024E+D卷最全真题【完全原创题解|详细考点分
【Py/Java/C++/C/JS/Go六种语言OD独家2024E卷真题】20天拿下华为OD笔试之【BFS】2024E-狼羊过河【欧弟算法】全网注释最详细分类最全的华为OD真题题解
闭着眼睛学算法
最新华为OD真题 # BFS # 模拟 算法 java c++ 华为od c语言 javascript leetcode
可上欧弟OJ系统练习华子OD、大厂真题绿色聊天软件戳oj1441了解算法冲刺训练(备注【CSDN】否则不通过)文章目录相关推荐阅读题目描述与示例题目描述输入描述输出描述补充说明示例输入输出说明解题思路转化为搜索状态树最小层数问题节点的设计以及更新重复状态的排除代入BFS代码框架代码pythonJavaC++CNodeJavaScriptGo时空复杂度华为OD算法/大厂面试高频题算法练习冲刺训练相关
【Py/Java/C++/C/JS/Go六种语言OD独家2024E卷真题】20天拿下华为OD笔试之【模拟】2024E-找终点【欧弟算法】全网注释最详细分类最全的华为OD真题题解
闭着眼睛学算法
最新华为OD真题 # 模拟 java c++ c语言 leetcode golang 华为od
可上欧弟OJ系统练习华子OD、大厂真题绿色聊天软件戳oj1441了解算法冲刺训练(备注【CSDN】否则不通过)文章目录相关推荐阅读题目描述与示例题目描述输入描述输出描述示例一输入输出说明示例二输入输出解题思路代码pythonjavaC++CNodejavaScriptGo时空复杂度华为OD算法/大厂面试高频题算法练习冲刺训练相关推荐阅读【华为OD机考】2024E+D卷最全真题【完全原创题解|详细考
【Py/Java/C++/C/JS/Go六种语言OD独家2024E卷真题】20天拿下华为OD笔试之【DFS/BFS】2024E-战场索敌【欧弟算法】全网注释最详细分类最全的华为OD真题题解
闭着眼睛学算法
最新华为OD真题 # BFS # DFS 算法 java c++ c语言 leetcode 华为od javascript
可上欧弟OJ系统练习华子OD、大厂真题绿色聊天软件戳oj1441了解算法冲刺训练(备注【CSDN】否则不通过)文章目录相关推荐阅读题目描述与示例题目描述输入描述输出描述示例输入输出解题思路代码解法一:BFSpythonjavacppCNodejavaScriptGo解法二:DFSpythonjavacppCNodejavaScriptGo时空复杂度华为OD算法/大厂面试高频题算法练习冲刺训练相关推
【Py/Java/C++/C/JS/Go六种语言OD独家2024E卷真题】20天拿下华为OD笔试之【贪心】2024E-用户调度问题【欧弟算法】全网注释最详细分类最全的华为OD真题题解
闭着眼睛学算法
最新华为OD真题 # 贪心 java c++ c语言 leetcode 华为od javascript python
可上欧弟OJ系统练习华子OD、大厂真题绿色聊天软件戳oj1441了解算法冲刺训练(备注【CSDN】否则不通过)文章目录相关推荐阅读题目描述与示例题目描述输入描述输出描述示例输入输出说明解题思路代码pythonjavacppCNodejavaScriptGo时空复杂度华为OD算法/大厂面试高频题算法练习冲刺训练相关推荐阅读【华为OD机考】2024E+D卷最全真题【完全原创题解|详细考点分类|不断更新
【Py/Java/C++/C/JS/Go六种语言OD独家2024E卷真题】20天拿下华为OD笔试之【贪心】2024E-静态代码扫描服务【欧弟算法】全网注释最详细分类最全的华为OD真题题解
闭着眼睛学算法
最新华为OD真题 # 贪心 java c++ c语言 华为od python 算法 javascript
可上欧弟OJ系统练习华子OD、大厂真题绿色聊天软件戳oj1441了解算法冲刺训练(备注【CSDN】否则不通过)文章目录相关推荐阅读题目描述与示例题目描述输入描述输出描述示例一输入输出说明示例二输入输出解题思路题意理解贪心策略代码pythonjavacppCNodejavaScriptgo时空复杂度华为OD算法/大厂面试高频题算法练习冲刺训练相关推荐阅读【华为OD机考】2024E+D卷最全真题【完全
【Py/Java/C++/C/JS/Go六种语言OD独家2024E卷真题】20天拿下华为OD笔试之【二分查找】2024E-部门人力分配【欧弟算法】全网注释最详细分类最全的华为OD真题题解
闭着眼睛学算法
最新华为OD真题 # 二分查找 # 贪心 java c++ 华为od leetcode 算法 python
可上欧弟OJ系统练习华子OD、大厂真题绿色聊天软件戳oj1441了解算法冲刺训练(备注【CSDN】否则不通过)文章目录相关推荐阅读题目描述与示例题目描述输入描述输出描述示例输入输出说明解题思路代码pythonjavacppCNodejavaScriptgo时空复杂度本题易错点左指针初始化问题华为OD算法/大厂面试高频题算法练习冲刺训练相关推荐阅读【华为OD机考】2024E+D卷最全真题【完全原创题
高级前端工程师Vue面试题
盼盼盼
面试题 前端 前端
HTML/CSS1.解释HTML5中的元素及其用途。元素用于通过JavaScript绘制图形,比如图表、图像处理等。它提供了一个图形上下文,可以进行2D图形绘制。2.CSS中display:none和visibility:hidden有什么区别?display:none会将元素从文档流中完全移除,不占据空间。而visibility:hidden则元素依然占据空间,只是变得不可见。3.描述CSSFl
Reached heap limit Allocation failed - JavaScript heap out of memory
祝余、
javascript 开发语言 ecmascript
问题vue3打包时提示ReachedheaplimitAllocationfailed-JavaScriptheapoutofmemory解决方法(vue3可用)npminstallcross-envincrease-memory-limit然后检查package.jons文件下“scripts”是否有“fix-memory-limit”,如果没有,手动添加如下代码"scripts":{"fix-
electron-vue 安装环境、构建+打包(mac和windows)这一篇就够了
阿毛sky
electron vue 前端
由于公司需要,下一个项目需要做CS开发,技术选型分析后,选择了electron(Electron是一个使用JavaScript,HTML和CSS等Web技术创建原生程序的框架)研究发现,electron与vue-cli3.0脚手架做了很好的融合,对于我们这种用惯了vue,以及elementUI这些UI框架的Web前端开发工程师来说,实在太友好了,不过,这是一门国外框架技术,不仅是环境搭建、安装、文
Node.js使用教程
m0_74824112
面试 学习路线 阿里巴巴 node.js vim 编辑器
Node.js使用教程Node.js是一个基于ChromeV8引擎的JavaScript运行环境,它让JavaScript运行在服务器端。以下是一个简单的Node.js使用教程:一、Node.js开发环境和编译1.1安装Node.js访问Node.js官网下载并安装适合您操作系统的Node.js版本。1.2创建一个Node.js项目在您的工作目录中,创建一个新的文件夹作为项目目录,例如命名为my_
three.js性能优化
火辣辣-
学习总结 学习笔记 three.js 性能优化
本文持续更新~~~参考文章three.js是JavaScript编写的WebGL第三方库。提供了非常多的3D显示功能。在使用的时候,虽然three.js做了优化,但是在使用不恰当的代码,也会产生性能损耗。帧率越低,给人感觉就越卡。这是我在开发中自己百度总结的,有不对的可以联系我啊2019-08-22更新———————1、disppose()方法得重要性每当你创建一个three.js中的实例时,都会
桌面上有多个球在同时运动,怎么实现球之间不交叉,即碰撞?
换个号韩国红果果
html 小球碰撞
稍微想了一下,然后解决了很多bug,最后终于把它实现了。其实原理很简单。在每改变一个小球的x y坐标后,遍历整个在dom树中的其他小球,看一下它们与当前小球的距离是否小于球半径的两倍?若小于说明下一次绘制该小球(设为a)前要把他的方向变为原来相反方向(与a要碰撞的小球设为b),即假如当前小球的距离小于球半径的两倍的话,马上改变当前小球方向。那么下一次绘制也是先绘制b,再绘制a,由于a的方向已经改变
《高性能HTML5》读后整理的Web性能优化内容
白糖_
html5
读后感
先说说《高性能HTML5》这本书的读后感吧,个人觉得这本书前两章跟书的标题完全搭不上关系,或者说只能算是讲解了“高性能”这三个字,HTML5完全不见踪影。个人觉得作者应该首先把HTML5的大菜拿出来讲一讲,再去分析性能优化的内容,这样才会有吸引力。因为只是在线试读,没有机会看后面的内容,所以不胡乱评价了。
[JShop]Spring MVC的RequestContextHolder使用误区
dinguangx
jeeshop 商城系统 jshop 电商系统
在spring mvc中,为了随时都能取到当前请求的request对象,可以通过RequestContextHolder的静态方法getRequestAttributes()获取Request相关的变量,如request, response等。 在jshop中,对RequestContextHolder的
算法之时间复杂度
周凡杨
java 算法 时间复杂度 效率
在
计算机科学 中,
算法 的时间复杂度是一个
函数 ,它定量描述了该算法的运行时间。这是一个关于代表算法输入值的
字符串 的长度的函数。时间复杂度常用
大O符号 表述,不包括这个函数的低阶项和首项系数。使用这种方式时,时间复杂度可被称为是
渐近 的,它考察当输入值大小趋近无穷时的情况。
这样用大写O()来体现算法时间复杂度的记法,
Java事务处理
g21121
java
一、什么是Java事务 通常的观念认为,事务仅与数据库相关。 事务必须服从ISO/IEC所制定的ACID原则。ACID是原子性(atomicity)、一致性(consistency)、隔离性(isolation)和持久性(durability)的缩写。事务的原子性表示事务执行过程中的任何失败都将导致事务所做的任何修改失效。一致性表示当事务执行失败时,所有被该事务影响的数据都应该恢复到事务执行前的状
Linux awk命令详解
510888780
linux
一. AWK 说明
awk是一种编程语言,用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入、一个或多个文件,或其它命令的输出。它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具。它在命令行中使用,但更多是作为脚本来使用。
awk的处理文本和数据的方式:它逐行扫描文件,从第一行到
android permission
布衣凌宇
Permission
<uses-permission android:name="android.permission.ACCESS_CHECKIN_PROPERTIES" ></uses-permission>允许读写访问"properties"表在checkin数据库中,改值可以修改上传
<uses-permission android:na
Oracle和谷歌Java Android官司将推迟
aijuans
java oracle
北京时间 10 月 7 日,据国外媒体报道,Oracle 和谷歌之间一场等待已久的官司可能会推迟至 10 月 17 日以后进行,这场官司的内容是 Android 操作系统所谓的 Java 专利权之争。本案法官 William Alsup 称根据专利权专家 Florian Mueller 的预测,谷歌 Oracle 案很可能会被推迟。 该案中的第二波辩护被安排在 10 月 17 日出庭,从目前看来
linux shell 常用命令
antlove
linux shell command
grep [options] [regex] [files]
/var/root # grep -n "o" *
hello.c:1:/* This C source can be compiled with:
Java解析XML配置数据库连接(DOM技术连接 SAX技术连接)
百合不是茶
sax技术 Java解析xml文档 dom技术 XML配置数据库连接
XML配置数据库文件的连接其实是个很简单的问题,为什么到现在才写出来主要是昨天在网上看了别人写的,然后一直陷入其中,最后发现不能自拔 所以今天决定自己完成 ,,,,现将代码与思路贴出来供大家一起学习
XML配置数据库的连接主要技术点的博客;
JDBC编程 : JDBC连接数据库
DOM解析XML: DOM解析XML文件
SA
underscore.js 学习(二)
bijian1013
JavaScript underscore
Array Functions 所有数组函数对参数对象一样适用。1.first _.first(array, [n]) 别名: head, take 返回array的第一个元素,设置了参数n,就
plSql介绍
bijian1013
oracle 数据库 plsql
/*
* PL/SQL 程序设计学习笔记
* 学习plSql介绍.pdf
* 时间:2010-10-05
*/
--创建DEPT表
create table DEPT
(
DEPTNO NUMBER(10),
DNAME NVARCHAR2(255),
LOC NVARCHAR2(255)
)
delete dept;
select
【Nginx一】Nginx安装与总体介绍
bit1129
nginx
启动、停止、重新加载Nginx
nginx 启动Nginx服务器,不需要任何参数u
nginx -s stop 快速(强制)关系Nginx服务器
nginx -s quit 优雅的关闭Nginx服务器
nginx -s reload 重新加载Nginx服务器的配置文件
nginx -s reopen 重新打开Nginx日志文件
spring mvc开发中浏览器兼容的奇怪问题
bitray
jquery Ajax springMVC 浏览器 上传文件
最近个人开发一个小的OA项目,属于复习阶段.使用的技术主要是spring mvc作为前端框架,mybatis作为数据库持久化技术.前台使用jquery和一些jquery的插件.
在开发到中间阶段时候发现自己好像忽略了一个小问题,整个项目一直在firefox下测试,没有在IE下测试,不确定是否会出现兼容问题.由于jquer
Lua的io库函数列表
ronin47
lua io
1、io表调用方式:使用io表,io.open将返回指定文件的描述,并且所有的操作将围绕这个文件描述
io表同样提供三种预定义的文件描述io.stdin,io.stdout,io.stderr
2、文件句柄直接调用方式,即使用file:XXX()函数方式进行操作,其中file为io.open()返回的文件句柄
多数I/O函数调用失败时返回nil加错误信息,有些函数成功时返回nil
java-26-左旋转字符串
bylijinnan
java
public class LeftRotateString {
/**
* Q 26 左旋转字符串
* 题目:定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。
* 如把字符串abcdef左旋转2位得到字符串cdefab。
* 请实现字符串左旋转的函数。要求时间对长度为n的字符串操作的复杂度为O(n),辅助内存为O(1)。
*/
pu
《vi中的替换艺术》-linux命令五分钟系列之十一
cfyme
linux命令
vi方面的内容不知道分类到哪里好,就放到《Linux命令五分钟系列》里吧!
今天编程,关于栈的一个小例子,其间我需要把”S.”替换为”S->”(替换不包括双引号)。
其实这个不难,不过我觉得应该总结一下vi里的替换技术了,以备以后查阅。
1
所有替换方案都要在冒号“:”状态下书写。
2
如果想将abc替换为xyz,那么就这样
:s/abc/xyz/
不过要特别
[轨道与计算]新的并行计算架构
comsci
并行计算
我在进行流程引擎循环反馈试验的过程中,发现一个有趣的事情。。。如果我们在流程图的每个节点中嵌入一个双向循环代码段,而整个流程中又充满着很多并行路由,每个并行路由中又包含着一些并行节点,那么当整个流程图开始循环反馈过程的时候,这个流程图的运行过程是否变成一个并行计算的架构呢?
重复执行某段代码
dai_lm
android
用handler就可以了
private Handler handler = new Handler();
private Runnable runnable = new Runnable() {
public void run() {
update();
handler.postDelayed(this, 5000);
}
};
开始计时
h
Java实现堆栈(list实现)
datageek
数据结构——堆栈
public interface IStack<T> {
//元素出栈,并返回出栈元素
public T pop();
//元素入栈
public void push(T element);
//获取栈顶元素
public T peek();
//判断栈是否为空
public boolean isEmpty
四大备份MySql数据库方法及可能遇到的问题
dcj3sjt126com
DB backup
一:通过备份王等软件进行备份前台进不去?
用备份王等软件进行备份是大多老站长的选择,这种方法方便快捷,只要上传备份软件到空间一步步操作就可以,但是许多刚接触备份王软件的客用户来说还原后会出现一个问题:因为新老空间数据库用户名和密码不统一,网站文件打包过来后因没有修改连接文件,还原数据库是好了,可是前台会提示数据库连接错误,网站从而出现打不开的情况。
解决方法:学会修改网站配置文件,大多是由co
github做webhooks:[1]钩子触发是否成功测试
dcj3sjt126com
github git webhook
转自: http://jingyan.baidu.com/article/5d6edee228c88899ebdeec47.html
github和svn一样有钩子的功能,而且更加强大。例如我做的是最常见的push操作触发的钩子操作,则每次更新之后的钩子操作记录都会在github的控制板可以看到!
工具/原料
github
方法/步骤
">的作用" target="_blank">JSP中 的作用
蕃薯耀
JSP中<base href="<%=basePath%>">的作用
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
linux下SAMBA服务安装与配置
hanqunfeng
linux
局域网使用的文件共享服务。
一.安装包:
rpm -qa | grep samba
samba-3.6.9-151.el6.x86_64
samba-common-3.6.9-151.el6.x86_64
samba-winbind-3.6.9-151.el6.x86_64
samba-client-3.6.9-151.el6.x86_64
samba-winbind-clients
guava cache
IXHONG
cache
缓存,在我们日常开发中是必不可少的一种解决性能问题的方法。简单的说,cache 就是为了提升系统性能而开辟的一块内存空间。
缓存的主要作用是暂时在内存中保存业务系统的数据处理结果,并且等待下次访问使用。在日常开发的很多场合,由于受限于硬盘IO的性能或者我们自身业务系统的数据处理和获取可能非常费时,当我们发现我们的系统这个数据请求量很大的时候,频繁的IO和频繁的逻辑处理会导致硬盘和CPU资源的
Query的开始--全局变量,noconflict和兼容各种js的初始化方法
kvhur
JavaScript jquery css
这个是整个jQuery代码的开始,里面包含了对不同环境的js进行的处理,例如普通环境,Nodejs,和requiredJs的处理方法。 还有jQuery生成$, jQuery全局变量的代码和noConflict代码详解 完整资源:
http://www.gbtags.com/gb/share/5640.htm jQuery 源码:
(
美国人的福利和中国人的储蓄
nannan408
今天看了篇文章,震动很大,说的是美国的福利。
美国医院的无偿入院真的是个好措施。小小的改善,对于社会是大大的信心。小孩,税费等,政府不收反补,真的体现了人文主义。
美国这么高的社会保障会不会使人变懒?答案是否定的。正因为政府解决了后顾之忧,人们才得以倾尽精力去做一些有创造力,更造福社会的事情,这竟成了美国社会思想、人
N阶行列式计算(JAVA)
qiuwanchi
N阶行列式计算
package gaodai;
import java.util.List;
/**
* N阶行列式计算
* @author 邱万迟
*
*/
public class DeterminantCalculation {
public DeterminantCalculation(List<List<Double>> determina
C语言算法之打渔晒网问题
qiufeihu
c 算法
如果一个渔夫从2011年1月1日开始每三天打一次渔,两天晒一次网,编程实现当输入2011年1月1日以后任意一天,输出该渔夫是在打渔还是在晒网。
代码如下:
#include <stdio.h>
int leap(int a) /*自定义函数leap()用来指定输入的年份是否为闰年*/
{
if((a%4 == 0 && a%100 != 0
XML中DOCTYPE字段的解析
wyzuomumu
xml
DTD声明始终以!DOCTYPE开头,空一格后跟着文档根元素的名称,如果是内部DTD,则再空一格出现[],在中括号中是文档类型定义的内容. 而对于外部DTD,则又分为私有DTD与公共DTD,私有DTD使用SYSTEM表示,接着是外部DTD的URL. 而公共DTD则使用PUBLIC,接着是DTD公共名称,接着是DTD的URL.
私有DTD
<!DOCTYPErootSYST