转载请注明来源:
, http://blog.csdn.net/tingya 谢谢合作
原文出处: http://www.ews.uiuc.edu/~dengcai2/tr-2003-79.pdf
VIPS:基于视觉的Web页面分页算法
1.问题的提出
目前,随着互联网的高速发展,Web已经成为这个世界上最大的信息来源。Web 作为信息技术的载体已成为人们重要的工作、学习、生活、娱乐工具。Web的发展给人类生活带来了巨大的方便,人们可以跨越时间和空间界限来共享大量信息。但是如何去获取这些Web信息为我们所用则是大家面临的共同问题。在最基本的层次上,整个Web网络就是由无数的Web页面而构成,因此如果获取了这些Web页面就相当于获取了Web信息内容。事实上,目前的很多Web信息获取技术都是基于这种理论。
但是把整个页面作为一个基本的信息获取单位并不是太合理,尽管用户通常会把一些相关的内容放在同一页面中,但是大多数情况下,一个页面中通常会包含不止一类的主题,比如在新浪的页面中,可能包含体育类信息,可能包含健康类信息,也可能包含广告,导航链接等信息。这些信息分布在整个页面的不同位置。因此,如果要更准确的获取Web信息,我们必须能够对给定的Web页面进行更进一步的语义提取。
Web页面的语义提取在很多方面都有应用。比如,在Web信息访问中,为了克服关键字搜索所带来的局限性,许多研究者开始使用数据库技术,构建包装器将Web数据进行结构化处理。在构建包装器的过程中,将Web文档分割为一定数目的数据块是首要的工作。目前的工作大多数停留在使用自适应的方法上。如果我们能够获取Web页面的语义内容结构信息,那么构建包装器的过程就非常的简单,当然语义信息也就很容易提取出来。
语义块的提取另外一个应用场合就是搜索引擎。对于搜索引擎而言,链接分析是一个极为重要的工作。目前,对于大部分的搜索引擎而言,链接分析算法的基本前提假设就是如果两个页面之间存在链接关系,那么这两个页面整体上肯定存在着一定的关系。但是在大部分情况下,从页面A到页面B的链接仅仅意味着页面A的某部分与页面B的某部分之间可能存在一定的关系。目前的很多算法比如PageRank以及HITS都是基于前面的假设。把链接关系定义在两个完整的页面之间与定义在两个页面的某部分之间相比,则更粗糙一些。因此对于搜索引擎而言,如果要更准确的获取链接的关系,把一个完整页面分割为多个语义块是一个必须的工作。目前已经有一些工作针对这方面进行展开。不过这些工作都是基于DOM树分析页面的结构。但是DOM树并不能完全反映页面的语义结构,因此这种做法还存在一定的缺陷。
Web页面的语义分块另外一个潜在的用途就是移动终端访问互联网。目前大部分的Web页面都是针对台式机而设计的,由于移动设备通常屏幕较小,计算能力有限,因此这些页面并不适合移动设备直接访问。目前通常通过两种手段来解决这种问题:或者通过服务器进行页面转换或者使用网页缩略图。前者首先将用户访问的页面进行分页和转换,然后将分页的结果提交给移动设备;后者则是将整个Web页面生成缩略页面,整个页面被分割为数目不等的区域,用户如果对特定区域感兴趣,则可以再次访问该区域的内容。通过这两个策略,基本可以完成移动终端访问互联网的任务,但是核心内容还是如何对页面进行语义分割。
如果对Web页面进行有效的分页,目前已经很多工作展开。[Chakrabarti etal.2002]致力于从HTML DOM树中提取出结构化信息。不过由于HTML语法的灵活性,目前大部分的网页都没有完全遵循W3C规范,这样可能会导致DOM树结构的错误。更重要的是,DOM树最早引入是为了在浏览器中进行布局显示而不是进行Web页面的语义结构描述。比如,即使DOM树中两个结点具有同一个父结点,那么这两个结点在语义上也不一定就是有联系得。反之,两个在语义上有关系的结点却可能分布在DOM树的不同之处。因此仅仅通过分析DOM树并不能完全获取Web页面的语义信息。
从人类的角度来看,当一个用户观察Web页面的时候,它总是会自然而然的把一个语义块作为一个单一对象来看待,而不会管Web页面的内部结构是如何描述的。通常情况下,在分辨语义块的时候,用户会使用一些视觉因素来进行帮助,比如背景颜色、字体颜色和大小、边框、逻辑块和逻辑块之间的间距等等。因此如果充分的使用Web页面的视觉提示,并结合DOM树进行页面语义分块,则可以弥补仅使用DOM树所带来的一些缺憾。
在论文中,我们提出了VIPS(Vision-based page segmentation)算法用以提取给定网页的语义结构。这种语义结构是层次性的结构,在该结构中,每一个结点代表一个语义块。每一个语义块都定义一个DOC值来描述该语义块内部内容的关联性。DOC的值越大,则表明语义块内部的内容,它们之间的联系越紧,反之越松散。VIPS算法充分利用了Web页面的布局特征:它首先从DOM树中提取出所有的合适的页面块,然后根据这些页面块检测出它们之间的所有的分割条,包括水平和垂直方向。最后基于这些分割条,Web页面的语义结构将被重新构建。对于每一个语义块又可以使用VIPS算法继续分割为更小的语义块。因此整个VIPS算法是自顶向下,非常高效的。
2.相关工作
忽略不介绍。
3.Web页面的基于视觉的内容结构描述
与[chen et al. 2001]类似,VIPS算法中首先也定义了“基本对象”的概念,通常DOM树上的叶子结点被定义为基本对象,因为这些结点已经不能再被继续分割了。在本论文中,我们首先引入了基于视觉的内容结构,它里面的每一个结点我们称之为“块”,这些块或者是一个基本对象或者是一些基本对象的组合。有一点需要注意的是,基于视觉的内容结构中的块与DOM树中的结点没有绝对的对应关系。
与[Tang et al.1999]中文档的描述结构类似,VIPS算法中Web页面的结构定义如下。
对于每一个页面而言,我们可以将其看作一个三元组Ω=(Ο,Φ,δ),其中
Ο=(Ω1,Ω2,…ΩN),表示给定页面上的所有的语义块的集合,这些语义块之间没有重叠覆盖,而每一个语义块Ωi又可以被定义为前面所描述的三元组Ωi = (Οi,Φi,δi),如此迭代循环;
Φ=( ϕ1 ,ϕ2 ,…ϕT ),表示当前页面上的所有的分隔条的集合。事实上,一旦确定了一个页面上的两个语义块,那么这两个语义块之间的分隔条也就被确定了。当然,VIPS中的分隔条并不是真正存在的分隔条,而是虚拟。分隔条包括水平分隔条,也包括垂直分隔条。每一个分隔条都具有一定的宽度和高度。
δ=(ζ1,ζ=,…,ζM)则描述了Ω集合中两个语义块之间的关系,这种关系可以用下面的式子描述:δ =Ο×O
→
Φ∪{NULL}。其中的每个ζ都是一个形如(Ωi,Ωj)二元组,其表示块Ωi和Ωj之间存在一个分割条。
上图演示了Yahoo页面的基于视觉的Web页面内容结构。它同时给出了页面的布局结构和基于视觉的内容结构。在第一层,整个原有的页面被分割为四个大的可视对象VB1-VB4,同时在这四个对象之间检测出了三个分隔条ϕ1 –ϕ3(原来有五个,最上面的和最下面的被舍弃)。检测出的四个可视对象并不是这轮分割的最终的局部。最终得到的语义块必须根据检测出的四个可视对象和三个分隔条进一步构建而成,其中可能需要合并一些语义块,舍弃一些分隔条等等。
比如,对于VB2,从它的内部又可以检测出三个子对象和两个分隔条,如图1所示。
对于每一个Block,VIPS算法都定义一个DoC(Degree of Coherence)与之对应。该值的大小反映了当前语义块内部内容联系的紧密程度。如果。它具有下面两个重要的特性:
1)、DoC的值越大,则语义块内部的内容之间的联系紧密程度就越大,它们之间就关系就越连续,反之越小。
2)、在层次数上,语义块的子块的DoC的值肯定要比父块的值大。
在VIPS算法中,DoC的值位于1到10之间。不过这个范围是可以更改的。在对Web页面进行语义分割之前,我们首先设定一个预定义DoC值PDoC(Permitted Degree of Coherence),通过该值来限定分割的语义块的粗糙程度。当语义块的DoC值达到PDoC之后,迭代分割就停止。PDoC越小,则分割的语义块就越粗糙,反之,分割的语义块就越精细。比如在图1中,如果给出一个适当的PDoC的值,VB2_1块将变的不再允许分割。不同的应用程序可以设置不同的PDoC值来达到自己的要求。
基于视觉的页面分割最主要的目的就是对给定的页面进行语义分割,因此分割后生成的基于视觉的内容结构中的结点通常总是一定的语义单位,包含一定的语义。比如在图1(a)中,我们可以看到VB2_1_1表示Yahoo宠物商店的目录链接,而VB2_2_1和VB2_2_2则表明了两种不同的comics。
4.VIPS算法描述
这部分我们将详细介绍VIPS算法。整体来说,页面的基于视觉的内容结构是结合DOM树以及一些视觉提示信息而得到的。整个分页过程可以用图2描述。它具有三个步骤:页面块提取、分隔条提取以及语义块重构。这三个步骤联合一起作为一次语义块检测的完整步骤。Web页面首先被分割为几次比较大的语义块,同时这几个语义块所组成的层次结构将被记录下来。对于检测出来的每一个大的语义块分页过程又可以继续进行,直到语义块的DoC值达到预先设定的PdoC为止。
在每次迭代循环中,当前逻辑块的DOM树结构以及它的视觉信息都将被获取。然后,从DOM树的根结点开始,逻辑块检测过程将基于视觉信息开始从DOM树中开始检测页面块。每一个DOM结点(图3b中的结点1,2,3,4,5,6,7)都会被检查它能够构成一个单独的页面块。如果不能,比如图3b中的1,3,4结点,那么它的子结点将被执行同样的检查。对于每一个提取出来的页面块,比如图3b中的2,5,6,7结点,我们都会根据当前页面块的内部可视属性赋予一个DoC值。当本次迭代过程中所有的页面块都被检测出来之后,它们将被保存到页面块池中。基于这些页面块,分隔条检测过程将开始工作。这些页面块之间的所有的水平分隔条和垂直分隔条最终将被识别出来并且赋予一定的宽度和高度。基于这些分隔条,页面的布局层次将被重新构建——一些页面块将被合并,形成语义块。最终,本次迭代过程中的所有语义块都被检测出来。
迭代过程是否需要继续进行取决于本层次的语义块中是否存在DoC值小于PdoC的语义块。对于那些DoC>=PdoC的语义块,分隔过程将停止,否则分隔过程将继续。比如再下图中,语义块C的DoC值小于PdoC,那么该语义块将被作为新的子Web页面,继续执行分割算法,最终又被分割为两部分:C1和C2,如图4a和4b所示:
当所有的语义块被提取出来后,最终整个Web页面的基于视觉的内容结构也就构建完成。在上面的例子中,我们最终获取的内容层次结构如图5所示。在下面的部分我们将详细的描述语义块的检测、分隔条的检测以及内容结构重建过程。
4.1语义块提取
在这步骤中,我们的目标是提取出当前子页面中所包含的所有的可视语义块。通常情况下,DOM树中的每一个结点都可以表示一个可视语义块。不过,在HTML中,一些标签比如和通常用来进行数据组织,因此不适合表示单独的可视语义块。对于这种结点,对他们的提取将被它们的孩子结点替代。而且由于HTML语法的灵活性,很多的Web页面并没有严格遵循W3C的HTML规范,这导致DOM树并不能总是能反映不同的DOM结点之间的关系。
对于提取出来的每一个可视语义块,我们将根据它的内部的视觉差异设置它的DoC值。整个迭代提取过程可以用下面的算法描述:
如何判断给定的结点能否被继续分割,我们给出下面的几个方面进行判断:
1)、DOM结点本身的属性。比如当前DOM结点的标签,结点的背景色,当前结点所代表的页面块的大小,形状。
2)、当前DOM结点的孩子结点。比如孩子结点的标签,孩子结点所代表的区域的背景色,前景色,区域的大小以及不同类型的孩子的数目等等。
基于WWW HTML规范4.0,我们将DOM结点分为两大类:inline结点和line-break结点。
所谓Inline结点是指:如果该结点的标签能够影响文字的外观同时不会引起换行的话,那么这类结点我们称之为Inline结点,比如、、、、、、等等,这类结点通常仅仅影响文字的外观而不会影响文字的布局。
所谓Line-break结点,则就是除了inline结点之外的所有结点。
另外,基于各种结点在浏览器中的显示以及结点的孩子结点属性,我们给出下面的定义:
1)、有效结点(Valid node):如果一个结点能够在浏览器中表现出来,那么这个结点就是有效结点。通常有效结点的长度和宽度都不为零。另外如果一个结点内部没有任何有用的信息,我们也称之为无效结点。比如图7中的第二个和第四个TR结点都是无效结点。
2)、文本结点:这类结点通常是指HTML中的文字,通常它们不被任何标签所包围。
3)、虚拟文本结点(这个定义是递归定义)
¢ 如果一个结点是文本结点,那么它自然就是虚拟文本结点
¢ 如果一个结点是inline结点,并且它的所有子结点要不是文本结点,要不是虚拟文本结点,那么这个结点也就是虚拟文本结点。
如果一段文字加上了、、等标签之后,该文字只是在浏览器中的显示外观发生了变化而已,并不影响这段文字本质上为文字的属性,VIPS中将之称之为虚拟文本结点,并不难理解。
可视语义块的提取算法DivideDomtree如图6所示。在该算法中一些很重要的信息可以用于产生推测规则:
¢ 标签提示
1)、一些标签比如 通常用来从视觉上分隔不同主题的内容。因此如果DOM结点中包含这些标签,那么我们倾向于认为该结点允许被继续分割。
2)、如果inline结点的孩子结点存在line-break结点,那么该结点将被倾向于被分割。
¢ 色彩提示
如果当前结点的孩子结点中有一个结点的背景色与它的背景色不同,那么我们倾向于分割该DOM结点。同时,具有不同背景色的节点在本次循环中不再被分割。分割由下一次迭代完成。
¢ 文本提示
如果当前结点的大部分孩子结点都是文本结点或者是虚拟文本结点,那么我们倾向于不再继续分割该结点。
¢ 尺寸提示
我们通常可以对不同的结点类型预定义一个门槛尺寸(结点的大小与整个页面大小的比较),如果结点的相对尺寸小于门槛大小,那么分割就停止。
基于上面的这些提示信息,我们给出一些推理规则用以判断当前的结点是否应该被分割。如果一个结点不需要再分割,那么该结点块将被提取出来,同时设置相应得DoC值,并保存到页面块池中。推理规则如下表所示:
规则 1
如果当前结点不是文本结点,同时它又没有任何有效的孩子结点,那么该结点将不被分割,并且从结点集合中删除。
规则 2
如果当前结点只有一个有效的孩子结点,同时该孩子结点不是文本结点,那么当前结点将被分割。
规则 3
如果当前的DOM结点是整个子DOM树的根结点(与页面块对应),同时只有一个子DOM树与当前的页面块关联,那么分割该结点。
规则 4
如果当前结点的所有的孩子结点都是文本结点或者是虚拟文本结点,那么不分割该节点。如果当前所有孩子结点的字体大小和字体重量都是相同的,那么该页面块的DoC设置为10,否则设置为9。
规则 5
如果当前DOM结点的孩子结点中有一个line-break结点,那么该结点将被继续分割
规则 6
如果当前结点的孩子结点中存在 结点,那么该结点将被继续分割
规则 7
如果当前结点的背景色与它的所有子结点中的某个的背景色不相同,那么该结点将被分割,同时具有不同颜色的子结点在本次迭代中不分割,分割在下轮迭代中进行。与此同时,孩子结点的DoC的值根据标签和尺寸的不同设置为6-8。
规则 8
如果结点至少具有一个文本或者虚拟文本子结点,同时结点的相对大小小于门槛大小,那么这个结点不再分割,同时根据标签的不同,DoC的值设置为5-8。
规则 9
如果当前结点的所有子结点中最大的尺寸也小于门槛大小,那么该结点将不再分割,同时DoC值根据HTML标签和结点大小设置。
规则 10
如果前一个兄弟结点没有被分割,那么该结点也不会被继续分割
规则 11
分割该结点
规则12
不要分割该结点,同时基于当前结点的标签和大小设置DoC值
对于不同的DOM结点,我们使用不同的推理规则:
让我们考虑图1的情况。在第一次页面块提取得过程中,最终VB1,VB2_1,VB2_2,VB2_3以及VB3和VB4被提取出来,然后放进了语义块池中。下面我们将详细描述VB2_1,VB2_2以及VB2_3提取的过程。
图7(b)显示的是一个表格,该表格是整个Web页面的一部分。它的DOM树结构显示在左边的部分。在页面块的提取过程中,当遇到结点的时候,它只有一个有效的孩子结点。根据规则2,我们进入 标签。该 结点具有五个孩子结点,但是它们中只有三个是有效结点。而且第一个孩子结点的背景颜色与父亲结点的颜色不同。根据规则8,该 结点将被分割,而第一个结点在本次迭代中部进行分割。第一个 结点被保存到页面块池中。第二个和第四个 结点为无效结点,因此它们将被删除。对于第三个和第五个结点,根据推理规则11,在本次迭代中不再分割,因此最终我们得到三个页面块VB2_1,VB2_2和VB2_3。
4.2分隔条检测
当所有的页面块被提取出来之后,它们都被保存在页面块池中以便进行分隔条检测。在VIPS算法中,分隔条是Web页面中的垂直的或者水平的行。从视觉的角度而言,separators are good indicators for discriminating different semantics within the page。
在VIPS中,一个可视的分隔条可以用二维向量(Ps,Pe)描述,其中,Ps是分隔条的起始坐标,而Pe则是分隔条的终止坐标。坐标的单位全部为像素pixel。根据Ps和Pe,很容易计算当前分隔条的宽度和高度。
4.2.1 分隔条检测
分隔条的检测算法如下描述:
1)、初始化分隔条列表。最早的分隔条列表中仅仅存在一个分隔条,它的起始和终止坐标为(Pbe,Pee),分别对应整个Web页面的起始坐标和终止坐标。
2)、对于页面块池中的每一个页面块,它与分隔条的关系包括下面三种:
■ 页面块被包含在分隔条中,此时,该分隔条将从页面块的边缘裂变为多个分隔条。
■ 页面块与分隔条发生部分重合,那么根据页面块的边界重新调整分隔条的参数
■ 页面块跨越分隔条,那么此时移除该分隔条。
3)、移除页面边缘的四个分隔条
图8演示了分隔条的检测过程。为了简单期间,我们仅仅演示水平分隔条的检测过程。开始的时候我们之后一个大的分隔条,它的起始和终止位置就是整个页面的起始和终止位置。当我们将第一个页面块放入到池中的时候,由于该页面块被包含在分隔条内部,此时原有的分隔条将裂变为S1和S2。同理当第二个和第三个页面块放入到池中的时候,四个分隔条S1,S2,S3和S4被检测出来。
当第四个页面块放入到池中的时候,它跨越了S3分隔条,同时与S2分隔条有部分重合,此时S3分隔条将被删除,同时S2将被调整,从图中可以看出,调整后,S3明显的变细了。
4.2.2 设置分隔条的权重
分隔条通常用于区别不同语义的页面块,因此基于给定分隔条两边的语义块的在视觉上的差异,我们可以设置分隔条的权重。如果分隔条的权重越重,该分隔条最终成为分隔条的可能性就越大。
下面的规则可以用来设置分隔条的权重:
1)、分隔条两边的页面块的距离越远,该分隔条的权重就越高。
2)、如果某个分隔条是通过检测HTML标签获取的,比如 ,那么该分隔条的权重就越高。
3)、如果分隔条两侧的页面块的背景色是不相同的,那么该分隔条的权重将相应增高。
4)、对于水平分隔条而言,如果分隔条两侧的页面块的字体属性,比如字体大小,字体重量是不同的,那么该分隔条的权重将增加。而且如果分隔条上侧的页面块的字体小于分隔条下侧的页面块的字体,那么分隔条的权重将增加。
5)、对于水平分隔条而言,当分隔条两侧的页面块的结构非常相似,比如文本,那么该分隔条的权重将递减。
考虑图7中的第三个 。与该结点对应的子页面如图9(b)所示,同时它的DOM树结构如图9(a)所示。我们可以看到根据我们的定义,该DOM树中的很多结点都是无效的,它们无法在浏览器中显示出来,在页面块的提取过程忠,这些结点将被忽略。当这些页面块提取出来之后,六个页面块将保存到池中,同时五个水平分隔条也被检测出来。同时,基于上面的五个分隔条规则,这些分隔条的权重将被设置。在本例中,页面块2和3之间的分割条要比页面块1和页面块2之间的分割条权重高,这是因为字体不同的原因。同样的原因,4和5之间的分隔条权重也高一些。最终的分隔条以及它们的权重如图9(c)所示。
4.2.3 内容结构构建
当分隔条被检测出来,同时权重设置完毕后,相应的内容重建过程就可以开始了。构建过程从最小权重的分隔条开始,该分隔条两侧的页面块将合并在一起组成一个新的页面块。该合并过程不停的进行迭代,直到遇到权重最高的分隔条为止。对于每一个新的语义块,相应的DoC也被相应设置。
当页面块最终合并成为语义块之后,本轮的迭代也就结束了。对于这些语义块,每一个语义块的DoC都会与PdoC进行对比,如果DoC的值小于PdoC,那么新的迭代过程将重新开始:页面块检测,分隔条检测以及内容结构重构。当所有的语义块的DoC的值都不大于PdoC,迭代过程将停止。同时针对整个Web页面的内容结构将构建出来。
以图9为例,在第一轮迭代中,第一,三以及五个分隔条将被选择出来,同时页面块1和2被合并为新的语义块VB2_2_2_1。同样的合并发生在页面块3和4上,它们被合并为新的语义块VB2_2_2_2,页面块5和6最终合并为VB2_2_2_3。新的语义块VB2_2_2_1,VB2_2_2_2以及VB2_2_2_3是语义块VB2_2_2的子结点。对于每一个页面结点,比如VB2_2_2_2_1_1,VB2_2_2_1_1以及VB2_2_2_2_1它们的DoC的值将被检查,以便确定是否满足PdoC的值。最终的内容结构构建完毕。
转载请注明来源: http://blog.csdn.net/tingya
如果你觉得本文不错,请点击文后的“推荐本文”链接!!
你可能感兴趣的:(VIPS:基于视觉的页面分割算法[微软下一代搜索引擎核心分页算法])
lc13 Roman to Integer
相太阳
lc13RomantoInteger遇到那六种特殊情况分别-2,-20,-200,按照罗马数字的规则,每种只可能出现一次。所以只需要考虑一次,用indexOf()即可判断是否出现这几种特殊情况然后遍历s,按照每个字符的定义,加上value即可1classSolution{2publicintromanToInt(Strings){3intres=0;45if(s.indexOf("IV")!=-1
d3中文案例_D3js初探及数据可视化案例设计实战 -web开发
萌萌爱恋
d3中文案例
编辑推荐:本文来自cnblogs,本文主要介绍了D3js一个可视化工具,并且以实际案例讲解了数据可视化的设计、方法、过程和结果等相关内容。摘要:本文以本人目前所做项目为基础,从设计的角度探讨数据可视化的设计的方法、过程和结果,起抛砖引玉之效。在技术方案上,我们采用通用web架构和d3js作为主要技术手段;考虑到项目需求,这里所做的可视化案例都是数据演示工具,不是数据探索工具。其中所用截图,并非最终
自动语音识别(ASR)模型全览
u013250861
# 语音识别 人工智能
以下为截至2024年底主流ASR模型的详细列表,涵盖传统模型、端到端模型、开源框架及商业解决方案,按技术类型分类整理,并标注适用场景:一、传统混合模型(GMM/HMM、DNN/HMM)GMM/HMM公开时间:1980年代参数量:百万级(依赖状态数)特点:基于高斯混合模型(GMM)与隐马尔可夫模型(HMM)结合,需手工对齐音素状态。适用场景:早期电话语音识别(嵌入式设备)、孤立词识别(工业控制终端)
【flask扩展】Flask-SQLAlchemy的安装与配置
爱音斯坦牛
flask框架从入门到实战 flask python 后端
个人简介作者简介:大家好,我是阿牛,全栈领域新星创作者。博主的个人网站:阿牛的博客小屋支持我:点赞+收藏⭐️+留言系列专栏:flask框架快速入门格言:要成为光,因为有怕黑的人!目录个人简介前言Flask-SQLAlchemy的介绍与数据库驱动的选择Flask-SQLAlchemy与flask-mysqldb的安装Flask-SQLAlchemy的配置其他常用的SQLAlchemy字段类型常用的S
Redis缓存判断热点数据及进行数据预热的几种方式介绍
hxj..
分布式 缓存 redis 数据库 热点数据 数据预热
Redis缓存如何判断热点数据?热点数据计算整体来讲就是基于访问频率,可以是整体的访问次数,可以是一定时间内的频率,可以是部分请求的采样,可以借助成熟工具等,要根据业务需求来定1.基于访问频率原理:通过统计每个键的访问频率(如每秒访问次数),识别出访问频率最高的数据。实现方法:使用Redis的INCR命令或监控工具(如RedisMonitor)统计键的访问频率。统计访问频率要确保并发场景下数据操作
网络运维学习笔记(DeepSeek优化版) 018 HCIA-Datacom综合实验03
技术小齐
网络 运维 学习
文章目录综合实验3实验需求一:A公司网络规划二:B公司网络规划配置一、ip、vlan、vlanif,stp、eth-trunkSW1SW2R1二、ospfSW1R1三、NATR1ISP四、拒绝ping允许httpSW1五、右半部分vlan、dhcp、ospf、NATSW4R2综合实验3实验需求一:A公司网络规划SW1/2/3组成了A公司的交换网络,其中SW1是核心层,SW2/3是接入层。三台交换机
Flask 学习-95.Flask-SQLAlchemy 查询今天当天的数据
上海-悠悠
flask flask 学习 python
前言查询今天的数据,或者查询某一天的数据SQLDATE()function使我们能够从特定的历史或当前时间戳值访问日期值。DATE()函数Date()函数返回从传递的datetime表达式中提取的日期。DATE(datetimeexpression)SQL语句按create_time获取某一天的数据select*frommytablewhereDATE(create_time)=='2022-11
PHP 处理csv 文件 解决中文乱码
MountainYanYL
PHP csv php
/***读取csv格式的数据*@param$file*@returnarray*/publicstaticfunctionread_csv($file){setlocale(LC_ALL,'zh_CN');//linux系统下生效$data=[];//返回的文件数据行if(!is_file($file)&&!file_exists($file)){return$data;}$cvs_file=fo
PHP编译安装oci8扩展
爬山虎还上班
php oci8
文档:https://www.php.net/manual/zh/ref.pdo-oci.php如果Oracle数据库与PHP在同一台机器上,则数据库软件已经包含了必要的库。当PHP在另一台机器上时,请使用免费的»OracleInstantClient库点击“OracleInstantClient”进入官网相关地址,根据服务器情况选择对应版本,此处我选择的OracleLinux7(OracleIn
大语言模型微调和大语言模型应用区别
AI Echoes
深度学习 人工智能 自然语言处理
大语言模型微调和大语言模型应用区别微调与应用LLM的区别微调大语言模型(LLM)是指取一个已经预训练好的模型,进一步用特定数据集训练,使其更好地适应某个任务或领域,比如为医疗聊天机器人优化医疗术语理解。应用LLM则是直接使用这些预训练模型来完成任务,如通过提示生成文本或回答问题,无需更改模型本身。研究表明,微调适合需要领域专精的任务,而应用更适合通用任务,效果因模型和任务复杂性而异。学习所需技术栈
[学习笔记] Windows编程——GDI——(六)设备上下文
根本没在怕哦
Windows 编程 学习 笔记 windows
前言:学习笔记,随时更新。如有谬误,欢迎指正。说明:红色字体为较为重要部分。绿色字体为个人理解部分。原文链接:https://learn.microsoft.com/en-us/windows/win32/gdi/device-contexts6设备上下文设备上下文是一种结构,用于定义一组图形对象及其关联属性,以及影响输出的图形模式。图形对象包括用于线条绘制的笔、用于绘制和填充的画刷、用于复制或滚
MySQL的行级锁锁的到底是什么?
java1234_小锋
mysql mysql 数据库
大家好,我是锋哥。今天分享关于【Mysql自增主键会遇到什么问题?】面试题。希望对大家有帮助;MySQL的行级锁锁的到底是什么?1000道互联网大厂Java工程师精选面试题-Java资源分享网MySQL的行级锁(Row-levelLocking)是一种粒度较细的锁定机制,它用于对数据库中的单行数据进行锁定,确保在并发环境中多个事务能够安全地访问数据,同时减少锁的争用,提升系统性能。行级锁是MySQ
[学习笔记] Windows编程——GDI——(三)裁剪
根本没在怕哦
Windows 编程 学习 笔记 windows
前言:学习笔记,随时更新。如有谬误,欢迎指正。说明:红色字体为较为重要部分。绿色字体为个人理解部分。原文链接:https://learn.microsoft.com/en-us/windows/win32/gdi/clipping3裁剪剪裁是将输出限制为应用程序窗口的工作区中的某个区域或路径的过程。3.1关于裁剪应用程序通过多种方式使用剪裁。Word和Excel应用程序剪裁键盘输入,使其不显示在页
Mysql自增主键会遇到什么问题?
java1234_小锋
mysql mysql 数据库
大家好,我是锋哥。今天分享关于【Mysql自增主键会遇到什么问题?】面试题。希望对大家有帮助;Mysql自增主键会遇到什么问题?1000道互联网大厂Java工程师精选面试题-Java资源分享网MySQL自增主键(AUTO_INCREMENT)在使用过程中,虽然非常方便,但也可能会遇到一些潜在问题。下面列举了几个常见的问题及其解决方案:1.主键值跳跃自增主键可能会出现跳跃的情况。常见的原因有:删除记
MySQL中有哪几种锁?
java1234_小锋
mysql mysql 数据库
大家好,我是锋哥。今天分享关于【MySQL中有哪几种锁?】面试题。希望对大家有帮助;MySQL中有哪几种锁?1000道互联网大厂Java工程师精选面试题-Java资源分享网在MySQL中,锁是用来控制并发访问的机制,确保多个事务同时访问数据库时不会发生冲突。MySQL中主要有以下几种锁:1.全局锁(GlobalLocks)定义:全局锁是最重的锁类型,锁住了整个数据库实例,所有的数据库表和操作都会受
Mybaits的优点&缺点?
java1234_小锋
mybatis mybatis
大家好,我是锋哥。今天分享关于【Mybaits的优点&缺点?】面试题。希望对大家有帮助;Mybaits的优点&缺点?1000道互联网大厂Java工程师精选面试题-Java资源分享网MyBatis是My一种Batis是一个优秀流的Java行的Java持久化持框久架化,它框通过架将SQL,它简语化句了与数据库Java操作与方法Java进行对映象射之间来的简映化射数据库。操作相。对于它J具有PA很多(优
MyBatis中的动态SQL是什么?
java1234_小锋
mybatis mybatis java 开发语言
大家好,我是锋哥。今天分享关于【MyBatis中的动态SQL是什么?】面试题。希望对大家有帮助;MyBatis中的动态SQL是什么?1000道互联网大厂Java工程师精选面试题-Java资源分享网在MyBatis中,动态SQL是指在SQL查询执行时,能够根据不同的条件动态生成SQL语句的功能。动态SQL使得你可以根据业务需求的不同,灵活地拼接SQL语句,而不需要在每次需求变化时都手动编写不同的SQ
mysql中in和exists的区别?
java1234_小锋
mysql mysql 数据库
大家好,我是锋哥。今天分享关于【mysql中in和exists的区别?】面试题。希望对大家有帮助;mysql中in和exists的区别?1000道互联网大厂Java工程师精选面试题-Java资源分享网在MySQL中,IN和EXISTS都用于进行子查询,但它们的使用方式和适用场景有所不同。下面是它们的主要区别:1.IN子查询IN用于检查某个值是否存在于一个给定的值列表中,通常用于列和子查询结果集的比
MySQL中有哪几种锁?
java1234_小锋
mysql mysql 数据库
大家好,我是锋哥。今天分享关于【MySQL中有哪几种锁?】面试题。希望对大家有帮助;MySQL中有哪几种锁?1000道互联网大厂Java工程师精选面试题-Java资源分享网在MySQL中,锁是用于确保数据的一致性和并发控制的机制,主要有以下几种锁:1.表级锁(TableLock)表级锁是MySQL中最粗粒度的锁,它锁定整个表。在表级锁下,只有持有锁的会话能够对表进行修改或读取操作,其他会话只能等待
uni-app快速入门(十三)--常用API(下)
baozhengw
uni-app
本文介绍uni-app的扫码、动画、下拉刷新、授权登录、微信支付、节点信息、调试API。一、扫码扫码功能支持使用相机直接扫码和从相册中选择图片进行扫码,也支持条码扫描。使用uni.scanCode可调出客户端扫码界面,扫码成功后返回对应结果。不支持H5平台。下面是uni-app的官方介绍:uni.scanCode(OBJECT)|uni-app官网uni-app,uniCloud,serverle
Miniconda 安装及使用
achi010
Python Miniconda 安装及使用 Miniconda Miniconda 安装 Miniconda 常用命令 Linux Miniconda Python 环境管理 UbuntuMiniconda
文章目录前言1、Miniconda简介2、Linux环境说明2.1、安装2.2、配置2.3、常用命令2.4、常见问题及解决方案前言在Python中,“环境管理”是一个非常重要的概念,它主要是指对Python解释器及其相关依赖库进行管理和隔离,以确保开发环境的稳定性和项目的可移植性。什么是Python环境Python解释器:Python是一种解释型语言,代码的运行需要通过Python解释器来执行。不
解决PHP中文乱码问题
UqConstruction
php android oracle
在PHP开发中,中文乱码是一个常见的问题。当我们在处理中文字符时,有时会遇到显示不正常的情况,这就是中文乱码。本文将介绍一些常见的方法来解决PHP中文乱码问题。设置字符编码PHP中文乱码问题的根本原因是字符编码不匹配。为了正确显示中文字符,我们需要确保在所有的环节中使用相同的字符编码。常见的字符编码包括UTF-8、GBK等。首先,在PHP文件的开头添加以下代码,将文件的字符编码设置为UTF-8:h
一篇文章介绍清楚什么是Web自动化智能体?
霍格沃兹测试开发学社
人工智能 前端 自动化 运维 人工智能 deepseek 语言模型 开源
Web自动化正逐渐成为提升效率、降低成本的利器。无论是数据抓取、表单填写,还是复杂的业务流程自动化,Web自动化智能体都能轻松应对。那么,这些智能体是如何工作的?它们的核心元素有哪些?今天,我们就来一探究竟!大模型智能体的“大脑”Web自动化智能体的核心驱动力来自于大模型(如ChatGPT、Claude、Ollama)。这些大模型赋予了智能体强大的自然语言理解和任务规划能力。任务理解:智能体能够准
Redis持久化 - AOF
DxJavascript
redis bootstrap 数据库
Redis是一款高性能的内存数据库,但由于其数据存储在内存中,断电或异常情况下可能会导致数据丢失。为了解决这个问题,Redis提供了持久化机制,其中AOF(Append-OnlyFile)是一种常用的持久化方式。本文将详细介绍Redis的AOF持久化机制,并提供相应的源代码示例。AOF持久化机制是将Redis的写命令以追加的方式写入到一个文件中,这样即使Redis重启,也可以通过重新执行AOF文件
呵护斜颈老人:解锁护理关键,重塑健康生活
全力以赴66
生活
痉挛性斜颈是一种以颈肌扭转或阵挛导致头部倾斜、旋转为特征的疾病,给老人的生活带来诸多不便。做好健康护理,对缓解症状、提升生活质量至关重要。在日常生活中,要注重老人的姿势管理。为老人选择高度合适、有良好颈部支撑的枕头,睡觉时保持头部、颈部和脊柱在一条直线上,有助于减轻颈部肌肉的压力。日常坐姿也不容忽视,应提醒老人保持端正,避免长时间低头或歪头,可使用靠垫辅助维持正确姿势。康复训练是护理的关键环节。鼓
PHP与MySQL的高效数据交互:最佳实践与优化技巧
奥顺互联V
php php android 开发语言
在现代Web开发中,PHP与MySQL的组合仍然是最常见的技术栈之一。PHP作为一种广泛使用的服务器端脚本语言,与MySQL这一强大的关系型数据库管理系统相结合,能够构建出功能强大且高效的Web应用。然而,随着数据量的增长和用户需求的提升,如何实现高效的数据交互成为了开发者必须面对的重要课题。本文将探讨PHP与MySQL高效数据交互的最佳实践与优化技巧,帮助开发者提升系统性能与用户体验。1.使用预
计算机四级 - 数据库原理 - 第7章「数据库系统实现技术」
akbar&
计算机四级 数据库 笔记
7.1数据库管理系统概述7.1.1数据库管理系统的基本功能数据定义功能:数据库模式(包括外模式、模式、内模式)的定义、数据库完整性的定义、安全保密的定义,索引和视图的定义数据操纵功能数据存储和管理功能事务管理功能数据定义功能7.1.2数据库管理系统的主要成分和工作流程:存储管理器:高效的利用辅助存储器来存放数据,并使得数据能够快速存取重要模块:索引、文件、记录管理器查询处理器:高效的执行用SQL等
Redis的持久化-RDB
努力学习java的哈吉米大王
redis 数据库 缓存
1.持久化一提到持久化,我们就会第一时间联想到MySQL的事务,MySQL的事务有4个比较核心的特征:原子性(把多个操作打包成一个整体),一致性(事务执行之前和之后,数据都不能离谱),持久性(事务中做出的修改都会保存在硬盘上),隔离性(事务并发执行,涉及一系列的问题)Redis是一个内存数据库,数据存储在内存中,内存中的数据是不持久的,要想做到持久,就需要让Redis把数据存储到硬盘上。Redis
【NLP】 5. Word Analogy Task(词类比任务)与 Intrinsic Metric(内在度量)
pen-ai
NLP 机器学习 自然语言处理 word 人工智能
WordAnalogyTask(词类比任务)定义:WordAnalogyTask是用于评估词向量质量的内在指标(IntrinsicMetric)。该任务基于这样的假设:如果词向量能够捕捉单词之间的语义关系,那么这些关系应该能够在向量空间中保持一定的结构。示例:在一个理想的词向量空间中,单词之间的关系应该满足如下等式:king−man+woman≈queenking−man+woman≈queenk
Manus(一种AI代理或自动化工具)与DeepSeek(一种强大的语言模型或AI能力)结合使用任务自动化和智能决策
zzlyx99
人工智能 自动化 语言模型
一、Manus与DeepSeek差异十分好奇DeepSeek和Manus究竟谁更厉害些,DeepSeek是知识型大脑,Manus则是全能型执行者。即DeepSeek专注于语言处理、知识整合与专业文本生成。其核心优势在于海量参数支持的深度学习和知识推理能力,例如撰写论文、润色法律合同、解答专业问题等。Manus则更强调从规划到交付的闭环能力。它通过工具链调用(如浏览器、代码编辑器)自主执行复杂任务,
tomcat基础与部署发布
暗黑小菠萝
Tomcat java web
从51cto搬家了,以后会更新在这里方便自己查看。
做项目一直用tomcat,都是配置到eclipse中使用,这几天有时间整理一下使用心得,有一些自己配置遇到的细节问题。
Tomcat:一个Servlets和JSP页面的容器,以提供网站服务。
一、Tomcat安装
安装方式:①运行.exe安装包
&n
网站架构发展的过程
ayaoxinchao
数据库 应用服务器 网站架构
1.初始阶段网站架构:应用程序、数据库、文件等资源在同一个服务器上
2.应用服务和数据服务分离:应用服务器、数据库服务器、文件服务器
3.使用缓存改善网站性能:为应用服务器提供本地缓存,但受限于应用服务器的内存容量,可以使用专门的缓存服务器,提供分布式缓存服务器架构
4.使用应用服务器集群改善网站的并发处理能力:使用负载均衡调度服务器,将来自客户端浏览器的访问请求分发到应用服务器集群中的任何
[信息与安全]数据库的备份问题
comsci
数据库
如果你们建设的信息系统是采用中心-分支的模式,那么这里有一个问题
如果你的数据来自中心数据库,那么中心数据库如果出现故障,你的分支机构的数据如何保证安全呢?
是否应该在这种信息系统结构的基础上进行改造,容许分支机构的信息系统也备份一个中心数据库的文件呢?
&n
使用maven tomcat plugin插件debug关联源代码
商人shang
maven debug 查看源码 tomcat-plugin
*首先需要配置好'''maven-tomcat7-plugin''',参见[[Maven开发Web项目]]的'''Tomcat'''部分。
*配置好后,在[[Eclipse]]中打开'''Debug Configurations'''界面,在'''Maven Build'''项下新建当前工程的调试。在'''Main'''选项卡中点击'''Browse Workspace...'''选择需要开发的
大访问量高并发
oloz
大访问量高并发
大访问量高并发的网站主要压力还是在于数据库的操作上,尽量避免频繁的请求数据库。下面简
要列出几点解决方案:
01、优化你的代码和查询语句,合理使用索引
02、使用缓存技术例如memcache、ecache将不经常变化的数据放入缓存之中
03、采用服务器集群、负载均衡分担大访问量高并发压力
04、数据读写分离
05、合理选用框架,合理架构(推荐分布式架构)。
cache 服务器
小猪猪08
cache
Cache 即高速缓存.那么cache是怎么样提高系统性能与运行速度呢?是不是在任何情况下用cache都能提高性能?是不是cache用的越多就越好呢?我在近期开发的项目中有所体会,写下来当作总结也希望能跟大家一起探讨探讨,有错误的地方希望大家批评指正。
1.Cache 是怎么样工作的?
Cache 是分配在服务器上
mysql存储过程
香水浓
mysql
Description:插入大量测试数据
use xmpl;
drop procedure if exists mockup_test_data_sp;
create procedure mockup_test_data_sp(
in number_of_records int
)
begin
declare cnt int;
declare name varch
CSS的class、id、css文件名的常用命名规则
agevs
JavaScript UI 框架 Ajax css
CSS的class、id、css文件名的常用命名规则
(一)常用的CSS命名规则
头:header
内容:content/container
尾:footer
导航:nav
侧栏:sidebar
栏目:column
页面外围控制整体布局宽度:wrapper
左右中:left right
全局数据源
AILIKES
java tomcat mysql jdbc JNDI
实验目的:为了研究两个项目同时访问一个全局数据源的时候是创建了一个数据源对象,还是创建了两个数据源对象。
1:将diuid和mysql驱动包(druid-1.0.2.jar和mysql-connector-java-5.1.15.jar)copy至%TOMCAT_HOME%/lib下;2:配置数据源,将JNDI在%TOMCAT_HOME%/conf/context.xml中配置好,格式如下:&l
MYSQL的随机查询的实现方法
baalwolf
mysql
MYSQL的随机抽取实现方法。举个例子,要从tablename表中随机提取一条记录,大家一般的写法就是:SELECT * FROM tablename ORDER BY RAND() LIMIT 1。但是,后来我查了一下MYSQL的官方手册,里面针对RAND()的提示大概意思就是,在ORDER BY从句里面不能使用RAND()函数,因为这样会导致数据列被多次扫描。但是在MYSQL 3.23版本中,
JAVA的getBytes()方法
bijian1013
java eclipse unix OS
在Java中,String的getBytes()方法是得到一个操作系统默认的编码格式的字节数组。这个表示在不同OS下,返回的东西不一样!
String.getBytes(String decode)方法会根据指定的decode编码返回某字符串在该编码下的byte数组表示,如:
byte[] b_gbk = "
AngularJS中操作Cookies
bijian1013
JavaScript AngularJS Cookies
如果你的应用足够大、足够复杂,那么你很快就会遇到这样一咱种情况:你需要在客户端存储一些状态信息,这些状态信息是跨session(会话)的。你可能还记得利用document.cookie接口直接操作纯文本cookie的痛苦经历。
幸运的是,这种方式已经一去不复返了,在所有现代浏览器中几乎
[Maven学习笔记五]Maven聚合和继承特性
bit1129
maven
Maven聚合
在实际的项目中,一个项目通常会划分为多个模块,为了说明问题,以用户登陆这个小web应用为例。通常一个web应用分为三个模块:
1. 模型和数据持久化层user-core,
2. 业务逻辑层user-service以
3. web展现层user-web,
user-service依赖于user-core
user-web依赖于user-core和use
【JVM七】JVM知识点总结
bit1129
jvm
1. JVM运行模式
1.1 JVM运行时分为-server和-client两种模式,在32位机器上只有client模式的JVM。通常,64位的JVM默认都是使用server模式,因为server模式的JVM虽然启动慢点,但是,在运行过程,JVM会尽可能的进行优化
1.2 JVM分为三种字节码解释执行方式:mixed mode, interpret mode以及compiler
linux下查看nginx、apache、mysql、php的编译参数
ronin47
在linux平台下的应用,最流行的莫过于nginx、apache、mysql、php几个。而这几个常用的应用,在手工编译完以后,在其他一些情况下(如:新增模块),往往想要查看当初都使用了那些参数进行的编译。这时候就可以利用以下方法查看。
1、nginx
[root@361way ~]# /App/nginx/sbin/nginx -V
nginx: nginx version: nginx/
unity中运用Resources.Load的方法?
brotherlamp
unity视频 unity资料 unity自学 unity unity教程
问:unity中运用Resources.Load的方法?
答:Resources.Load是unity本地动态加载资本所用的方法,也即是你想动态加载的时分才用到它,比方枪弹,特效,某些实时替换的图像什么的,主张此文件夹不要放太多东西,在打包的时分,它会独自把里边的一切东西都会集打包到一同,不论里边有没有你用的东西,所以大多数资本应该是自个建文件放置
1、unity实时替换的物体即是依据环境条件
线段树-入门
bylijinnan
java 算法 线段树
/**
* 线段树入门
* 问题:已知线段[2,5] [4,6] [0,7];求点2,4,7分别出现了多少次
* 以下代码建立的线段树用链表来保存,且树的叶子结点类似[i,i]
*
* 参考链接:http://hi.baidu.com/semluhiigubbqvq/item/be736a33a8864789f4e4ad18
* @author lijinna
全选与反选
chicony
全选
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>全选与反选</title>
vim一些简单记录
chenchao051
vim
mac在/usr/share/vim/vimrc linux在/etc/vimrc
1、问:后退键不能删除数据,不能往后退怎么办?
答:在vimrc中加入set backspace=2
2、问:如何控制tab键的缩进?
答:在vimrc中加入set tabstop=4 (任何
Sublime Text 快捷键
daizj
快捷键 sublime
[size=large][/size]Sublime Text快捷键:Ctrl+Shift+P:打开命令面板Ctrl+P:搜索项目中的文件Ctrl+G:跳转到第几行Ctrl+W:关闭当前打开文件Ctrl+Shift+W:关闭所有打开文件Ctrl+Shift+V:粘贴并格式化Ctrl+D:选择单词,重复可增加选择下一个相同的单词Ctrl+L:选择行,重复可依次增加选择下一行Ctrl+Shift+L:
php 引用(&)详解
dcj3sjt126com
PHP
在PHP 中引用的意思是:不同的名字访问同一个变量内容. 与C语言中的指针是有差别的.C语言中的指针里面存储的是变量的内容在内存中存放的地址 变量的引用 PHP 的引用允许你用两个变量来指向同一个内容 复制代码代码如下:
<?
$a="ABC";
$b =&$a;
echo
SVN中trunk,branches,tags用法详解
dcj3sjt126com
SVN
Subversion有一个很标准的目录结构,是这样的。比如项目是proj,svn地址为svn://proj/,那么标准的svn布局是svn://proj/|+-trunk+-branches+-tags这是一个标准的布局,trunk为主开发目录,branches为分支开发目录,tags为tag存档目录(不允许修改)。但是具体这几个目录应该如何使用,svn并没有明确的规范,更多的还是用户自己的习惯。
对软件设计的思考
e200702084
设计模式 数据结构 算法 ssh 活动
软件设计的宏观与微观
软件开发是一种高智商的开发活动。一个优秀的软件设计人员不仅要从宏观上把握软件之间的开发,也要从微观上把握软件之间的开发。宏观上,可以应用面向对象设计,采用流行的SSH架构,采用web层,业务逻辑层,持久层分层架构。采用设计模式提供系统的健壮性和可维护性。微观上,对于一个类,甚至方法的调用,从计算机的角度模拟程序的运行情况。了解内存分配,参数传
同步、异步、阻塞、非阻塞
geeksun
非阻塞
同步、异步、阻塞、非阻塞这几个概念有时有点混淆,在此文试图解释一下。
同步:发出方法调用后,当没有返回结果,当前线程会一直在等待(阻塞)状态。
场景:打电话,营业厅窗口办业务、B/S架构的http请求-响应模式。
异步:方法调用后不立即返回结果,调用结果通过状态、通知或回调通知方法调用者或接收者。异步方法调用后,当前线程不会阻塞,会继续执行其他任务。
实现:
Reverse SSH Tunnel 反向打洞實錄
hongtoushizi
ssh
實際的操作步驟:
# 首先,在客戶那理的機器下指令連回我們自己的 Server,並設定自己 Server 上的 12345 port 會對應到幾器上的 SSH port
ssh -NfR 12345:localhost:22
[email protected]
# 然後在 myhost 的機器上連自己的 12345 port,就可以連回在客戶那的機器
ssh localhost -p 1
Hibernate中的缓存
Josh_Persistence
一级缓存 Hiberante缓存 查询缓存 二级缓存
Hibernate中的缓存
一、Hiberante中常见的三大缓存:一级缓存,二级缓存和查询缓存。
Hibernate中提供了两级Cache,第一级别的缓存是Session级别的缓存,它是属于事务范围的缓存。这一级别的缓存是由hibernate管理的,一般情况下无需进行干预;第二级别的缓存是SessionFactory级别的缓存,它是属于进程范围或群集范围的缓存。这一级别的缓存
对象关系行为模式之延迟加载
home198979
PHP 架构 延迟加载
形象化设计模式实战 HELLO!架构
一、概念
Lazy Load:一个对象,它虽然不包含所需要的所有数据,但是知道怎么获取这些数据。
延迟加载貌似很简单,就是在数据需要时再从数据库获取,减少数据库的消耗。但这其中还是有不少技巧的。
二、实现延迟加载
实现Lazy Load主要有四种方法:延迟初始化、虚
xml 验证
pengfeicao521
xml xml解析
有些字符,xml不能识别,用jdom或者dom4j解析的时候就报错
public static void testPattern() {
// 含有非法字符的串
String str = "Jamey친ÑԂ
div设置半透明效果
spjich
css 半透明
为div设置如下样式:
div{filter:alpha(Opacity=80);-moz-opacity:0.5;opacity: 0.5;}
说明:
1、filter:对win IE设置半透明滤镜效果,filter:alpha(Opacity=80)代表该对象80%半透明,火狐浏览器不认2、-moz-opaci
你真的了解单例模式么?
w574240966
java 单例 设计模式 jvm
单例模式,很多初学者认为单例模式很简单,并且认为自己已经掌握了这种设计模式。但事实上,你真的了解单例模式了么。
一,单例模式的5中写法。(回字的四种写法,哈哈。)
1,懒汉式
(1)线程不安全的懒汉式
public cla