当前位置: 首页 > news >正文

影刀RPA开发-CSS选择器介绍

影刀RPA网页自动化开发,很多时候需要我们查看页面源码,查找相关的元素属性,这就需要我们有必要了解CSS选择器。本文做了些简单的介绍。希望对大家有帮助!
在这里插入图片描述

1. CSS选择器概述

1.1 定义与作用

CSS选择器是CSS(层叠样式表)中用于选择HTML元素的工具。它们定义了哪些HTML元素将应用指定的样式规则。通过使用不同的选择器,开发者可以精确地控制页面中元素的样式。

  • 通用选择器* 选择页面上的所有元素。例如,* { margin: 0; padding: 0; } 可以重置所有元素的外边距和内边距,确保页面布局的一致性。
  • 类选择器:通过.加类名选择具有特定类的元素。例如,.header { background-color: #f2f2f2; } 会选择所有class="header"的元素并设置背景颜色。
  • ID选择器:通过#加ID名选择具有特定ID的元素。例如,#main { width: 80%; } 会选择id="main"的元素并设置宽度。
  • 标签选择器:直接使用HTML标签名选择所有该标签的元素。例如,p { color: blue; } 会选择所有<p>标签并设置文字颜色为蓝色。
  • 伪类选择器:用于选择元素的特定状态。例如,:hover 选择鼠标悬停时的元素,:active 选择元素被激活时的状态。如 a:hover { color: red; } 会使鼠标悬停在链接上时文字变为红色。
  • 属性选择器:通过元素的属性来选择元素。例如,input[type="text"] { width: 200px; } 会选择所有type="text"<input>元素并设置宽度。

CSS选择器的作用是实现样式的精确控制,使开发者能够根据页面结构和需求灵活地应用样式规则。通过合理使用选择器,可以提高代码的可维护性和可读性,同时提升页面的视觉效果和用户体验。

2. 基本选择器类型

2.1 元素选择器

元素选择器基于HTML标签名来选择页面上的元素。它是最简单的选择器类型,能够一次性选择页面上所有相同标签的元素。

  • 选择方式:直接使用HTML标签名作为选择器。例如,p { color: green; } 会选择页面上所有的<p>标签,并将它们的文字颜色设置为绿色。
  • 应用场景:适用于对页面上某一类元素进行统一的样式设置。比如,设置所有段落的字体大小和行高,p { font-size: 16px; line-height: 1.5; },这样可以快速统一页面中段落的样式,而无需为每个段落单独设置样式。
  • 优先级:元素选择器的优先级相对较低。如果页面上某个<p>标签同时被类选择器或ID选择器选中,那么类选择器或ID选择器的样式会覆盖元素选择器的样式。例如,页面上有<p class="special">,同时存在以下样式规则:
    p { color: green; }
    .special { color: red; }
    
    那么这个<p class="special">的文字颜色将是红色,因为类选择器的优先级高于元素选择器。

2.2 类选择器

类选择器通过类名来选择页面上的元素。它允许开发者为具有相同样式的元素定义一个类名,然后通过类选择器统一设置样式。

  • 选择方式:使用.加类名作为选择器。例如,.highlight { background-color: yellow; } 会选择页面上所有class="highlight"的元素,并将它们的背景颜色设置为黄色。
  • 应用场景:适用于为页面上多个元素应用相同的样式,同时又不想改变它们的HTML标签。比如,页面上有多个段落和标题需要高亮显示,可以为它们添加相同的类名highlight,然后通过类选择器设置样式:
    <p class="highlight">这是一个段落。</p>
    <h1 class="highlight">这是一个标题。</h1>
    
    .highlight { background-color: yellow; }
    
    这样,无论是段落还是标题,只要添加了highlight类,都会应用相同的高亮样式。
  • 优先级:类选择器的优先级高于元素选择器,但低于ID选择器。如果一个元素同时被元素选择器和类选择器选中,类选择器的样式会覆盖元素选择器的样式。例如:
    p { color: green; }
    .highlight { color: red; }
    
    对于<p class="highlight">,文字颜色将是红色。

2.3 ID选择器

ID选择器通过ID属性来选择页面上的元素。每个ID在页面上应该是唯一的,因此ID选择器通常用于选择单个特定的元素。

  • 选择方式:使用#加ID名作为选择器。例如,#main { width: 80%; } 会选择页面上id="main"的元素,并将它的宽度设置为80%。
  • 应用场景:适用于为页面上某个特定的元素设置独特的样式。比如,页面上有一个主内容区域,可以通过ID选择器为其设置宽度、边距等样式:
    <div id="main">这是主内容区域。</div>
    
    #main { width: 80%; margin: 0 auto; }
    
    这样,#main元素的宽度将被设置为页面宽度的80%,并且水平居中。
  • 优先级:ID选择器的优先级是所有选择器中最高的(除内联样式外)。如果一个元素同时被元素选择器、类选择器和ID选择器选中,ID选择器的样式会覆盖其他选择器的样式。例如:
    p { color: green; }
    .highlight { color: red; }
    #main { color: blue; }
    
    对于<p id="main" class="highlight">,文字颜色将是蓝色,因为ID选择器的优先级最高。

3. 属性选择器

3.1 简单属性选择器

简单属性选择器通过元素的属性名来选择页面上的元素,不考虑属性值。它能够选择所有具有指定属性的元素,无论属性值是什么。

  • 选择方式:使用[属性名]作为选择器。例如,[title] { color: orange; } 会选择页面上所有具有title属性的元素,并将它们的文字颜色设置为橙色。
  • 应用场景:适用于对具有特定属性的元素进行统一的样式设置。比如,为页面上所有带有title属性的元素设置提示文字的样式:
    <a href="https://example.com" title="访问示例网站">示例链接</a>
    <img src="image.jpg" title="示例图片" alt="示例图片">
    
    [title] { color: orange; }
    
    这样,所有带有title属性的元素的文字颜色都会变为橙色。
  • 优先级:简单属性选择器的优先级与类选择器相同,高于元素选择器,低于ID选择器。如果一个元素同时被元素选择器、简单属性选择器和类选择器选中,类选择器或简单属性选择器的样式会覆盖元素选择器的样式。例如:
    p { color: green; }
    [title] { color: red; }
    
    对于<p title="示例段落">,文字颜色将是红色。

3.2 属性值选择器

属性值选择器不仅根据属性名选择元素,还会根据属性值进行更精确的选择。它有多种匹配方式,可以根据属性值的精确值、部分值或模式进行选择。

  • 精确值选择器:使用[属性名="属性值"]来选择属性值完全匹配的元素。例如,[type="text"] { width: 200px; } 会选择页面上所有type="text"<input>元素,并将它们的宽度设置为200像素。

    <input type="text" name="username">
    <input type="password" name="password">
    
    [type="text"] { width: 200px; }
    

    这样,所有type="text"的输入框宽度都会被设置为200像素。

  • 包含值选择器:使用[属性名~="属性值"]来选择属性值中包含指定单词的元素。属性值被视为由空格分隔的单词列表。例如,[class~="highlight"] { background-color: yellow; } 会选择所有class属性值中包含highlight单词的元素,并将它们的背景颜色设置为黄色。

    <div class="highlight important">这是一个重要段落。</div>
    <p class="highlight">这是一个普通段落。</p>
    
    [class~="highlight"] { background-color: yellow; }
    

    这样,所有class属性值中包含highlight的元素都会应用黄色背景。

  • 开始值选择器:使用[属性名^="属性值"]来选择属性值以指定字符串开头的元素。例如,[href^="https"] { color: blue; } 会选择所有href属性值以https开头的链接,并将它们的文字颜色设置为蓝色。

    <a href="https://example.com">示例链接</a>
    <a href="http://example.com">另一个链接</a>
    
    [href^="https"] { color: blue; }
    

    这样,所有以https开头的链接文字颜色都会变为蓝色。

  • 结束值选择器:使用[属性名$="属性值"]来选择属性值以指定字符串结尾的元素。例如,[href$=".pdf"] { color: green; } 会选择所有href属性值以.pdf结尾的链接,并将它们的文字颜色设置为绿色。

    <a href="document.pdf">PDF文档</a>
    <a href="image.jpg">图片链接</a>
    
    [href$=".pdf"] { color: green; }
    

    这样,所有以.pdf结尾的链接文字颜色都会变为绿色。

  • 包含值选择器:使用[属性名*="属性值"]来选择属性值中包含指定字符串的元素。例如,[href*="example"] { color: purple; } 会选择所有href属性值中包含example字符串的链接,并将它们的文字颜色设置为紫色。

    <a href="https://example.com">示例链接</a>
    <a href="http://anotherexample.com">另一个链接</a>
    
    [href*="example"] { color: purple; }
    

    这样,所有href属性值中包含example的链接文字颜色都会变为紫色。

属性值选择器的优先级与简单属性选择器相同,高于元素选择器,低于ID选择器。它们能够根据属性值的精确匹配或模式匹配来选择元素,提供了更灵活的样式控制方式。

4. 伪类与伪元素选择器

4.1 伪类选择器示例

伪类选择器用于选择元素的特定状态或位置,它们以冒号:开头。以下是一些常见的伪类选择器及其示例:

  • :hover:当鼠标悬停在元素上时触发。例如,为链接设置悬停状态的样式:

    a:hover {color: red;text-decoration: underline;
    }
    

    这样,当鼠标悬停在链接上时,链接的文字颜色会变为红色,并且会有下划线。

  • :active:当元素被激活(如点击)时触发。例如,为按钮设置激活状态的样式:

    button:active {background-color: darkgray;transform: scale(0.95);
    }
    

    这样,当按钮被点击时,背景颜色会变为深灰色,并且按钮会稍微缩小。

  • :focus:当元素获得焦点时触发(如输入框被选中)。例如,为输入框设置焦点状态的样式:

    input:focus {border: 2px solid blue;outline: none;
    }
    

    这样,当输入框获得焦点时,边框会变为蓝色,并且默认的轮廓样式会被移除。

  • :first-child:选择父元素的第一个子元素。例如,为每个列表的第一个项目设置样式:

    li:first-child {font-weight: bold;
    }
    

    这样,每个<ul><ol>列表的第一个<li>项目文字会加粗。

  • :last-child:选择父元素的最后一个子元素。例如,为每个列表的最后一个项目设置样式:

    li:last-child {color: gray;
    }
    

    这样,每个<ul><ol>列表的最后一个<li>项目文字颜色会变为灰色。

  • :nth-child(n):选择父元素的第n个子元素。例如,为每个列表的第二个项目设置样式:

    li:nth-child(2) {background-color: lightyellow;
    }
    

    这样,每个<ul><ol>列表的第二个<li>项目背景颜色会变为浅黄色。

4.2 伪元素选择器示例

伪元素选择器用于创建虚拟的元素,它们以双冒号::开头。以下是一些常见的伪元素选择器及其示例:

  • ::before:在元素内容之前插入内容。例如,为每个段落前添加一个装饰符号:

    p::before {content: "★ ";color: gold;
    }
    

    这样,每个<p>标签的内容之前都会插入一个金色的星号符号。

  • ::after:在元素内容之后插入内容。例如,为每个段落后添加一个装饰符号:

    p::after {content: " ★";color: gold;
    }
    

    这样,每个<p>标签的内容之后都会插入一个金色的星号符号。

  • ::first-letter:选择元素的第一个字母。例如,为每个段落的第一个字母设置大写并加粗:

    p::first-letter {font-size: 24px;font-weight: bold;
    }
    

    这样,每个<p>标签的第一个字母会放大并加粗。

  • ::first-line:选择元素的第一行。例如,为每个段落的第一行设置不同的字体颜色:

    p::first-line {color: darkgreen;
    }
    

    这样,每个<p>标签的第一行文字颜色会变为深绿色。

伪类和伪元素选择器为开发者提供了更灵活的样式控制方式,能够根据元素的状态、位置或内容进行更精细的样式定制,从而提升页面的视觉效果和用户体验。

5. 组合选择器

5.1 后代选择器

后代选择器用于选择某个元素内部的所有后代元素。它通过空格分隔两个选择器来实现。

  • 选择方式:使用空格分隔两个选择器。例如,div p { color: blue; } 会选择所有位于<div>内部的<p>元素,并将它们的文字颜色设置为蓝色。
  • 应用场景:适用于对特定区域内的元素进行样式设置。比如,为某个模块内的所有段落设置统一的样式:
    <div class="module"><p>这是一个段落。</p><section><p>这是另一个段落。</p></section>
    </div>
    
    .module p { color: blue; }
    
    这样,.module内部的所有<p>元素,无论是直接子元素还是嵌套的后代元素,都会应用蓝色文字样式。
  • 优先级:后代选择器的优先级高于单独的元素选择器,但低于类选择器和ID选择器。如果一个元素同时被后代选择器和类选择器选中,类选择器的样式会覆盖后代选择器的样式。

5.2 子代选择器

子代选择器用于选择某个元素的直接子元素,而不包括嵌套的后代元素。它通过>符号分隔两个选择器来实现。

  • 选择方式:使用>符号分隔两个选择器。例如,div > p { color: red; } 会选择所有直接位于<div>内部的<p>元素,并将它们的文字颜色设置为红色。
  • 应用场景:适用于仅对直接子元素进行样式设置。比如,为某个模块内的直接子段落设置样式,而不影响嵌套的段落:
    <div class="module"><p>这是一个直接子段落。</p><section><p>这是一个嵌套的段落。</p></section>
    </div>
    
    .module > p { color: red; }
    
    这样,只有.module的直接子元素<p>会应用红色文字样式,而嵌套的<p>不会受到影响。
  • 优先级:子代选择器的优先级与后代选择器相同,高于单独的元素选择器,但低于类选择器和ID选择器。

5.3 相邻兄弟选择器

相邻兄弟选择器用于选择某个元素的紧邻下一个兄弟元素。它通过+符号分隔两个选择器来实现。

  • 选择方式:使用+符号分隔两个选择器。例如,h1 + p { margin-top: 0; } 会选择紧随<h1>之后的<p>元素,并将它的上边距设置为0。
  • 应用场景:适用于对紧邻的兄弟元素进行样式调整。比如,为标题之后的第一个段落去除上边距:
    <h1>标题</h1>
    <p>这是一个段落。</p>
    <p>这是另一个段落。</p>
    
    h1 + p { margin-top: 0; }
    
    这样,只有紧随<h1>之后的第一个<p>会应用上边距为0的样式,而其他段落不会受到影响。
  • 优先级:相邻兄弟选择器的优先级与后代选择器和子代选择器相同,高于单独的元素选择器,但低于类选择器和ID选择器。

5.4 通用兄弟选择器

通用兄弟选择器用于选择某个元素之后的所有兄弟元素,而不仅仅是紧邻的下一个兄弟元素。它通过~符号分隔两个选择器来实现。

  • 选择方式:使用~符号分隔两个选择器。例如,h1 ~ p { font-size: 14px; } 会选择<h1>之后的所有<p>兄弟元素,并将它们的字体大小设置为14像素。
  • 应用场景:适用于对某个元素之后的所有兄弟元素进行统一的样式设置。比如,为标题之后的所有段落设置统一的字体大小:
    <h1>标题</h1>
    <p>这是一个段落。</p>
    <p>这是另一个段落。</p>
    <div><p>这是嵌套的段落。</p>
    </div>
    
    h1 ~ p { font-size: 14px; }
    
    这样,<h1>之后的所有<p>兄弟元素,无论它们的位置如何,都会应用14像素的字体大小。
  • 优先级:通用兄弟选择器的优先级与后代选择器、子代选择器和相邻兄弟选择器相同,高于单独的元素选择器,但低于类选择器和ID选择器。

6. CSS选择器性能分析

6.1 性能差异

不同类型的CSS选择器在性能上存在显著差异,这主要取决于浏览器解析和匹配选择器的效率。

  • ID选择器:性能最高。由于ID在页面中是唯一的,浏览器可以通过快速查找直接定位到目标元素。例如,#main { color: blue; } 的匹配速度非常快,因为浏览器可以直接通过ID索引找到对应的元素。
  • 类选择器:性能次之。浏览器需要扫描页面上所有元素的class属性来匹配类选择器。例如,.highlight { background-color: yellow; } 的匹配速度比ID选择器慢,但仍然较快,因为类选择器的匹配范围相对较小。
  • 元素选择器:性能较低。元素选择器会匹配页面上所有指定的HTML标签,因此匹配范围较大。例如,p { color: green; } 会扫描页面上所有的<p>标签,性能相对较差。
  • 属性选择器:性能因具体类型而异。简单属性选择器(如[title])的性能较好,因为浏览器只需要检查元素是否有该属性。而属性值选择器(如[type="text"])的性能较差,因为浏览器需要检查属性值是否匹配,增加了计算量。
  • 伪类选择器:性能差异较大。一些伪类选择器(如:hover:focus)的性能较好,因为它们只在特定状态下触发。而像:nth-child(n)这样的伪类选择器性能较差,因为浏览器需要计算元素的顺序。
  • 组合选择器:性能取决于其组成部分。后代选择器(如div p)的性能较差,因为浏览器需要检查所有<div>内部的<p>元素。而子代选择器(如div > p)的性能相对较好,因为它只匹配直接子元素。

6.2 优化建议

为了提高CSS选择器的性能,可以采取以下优化措施:

  • 优先使用ID选择器:在需要对单个元素进行样式设置时,优先使用ID选择器,因为它的性能最高。例如,#main { width: 80%; }.main { width: 80%; } 更高效。
  • 减少使用通用选择器:尽量避免使用通用选择器(如*),因为它会匹配页面上所有元素,性能较差。如果需要重置样式,可以使用更具体的选择器。
  • 避免深度嵌套选择器:深度嵌套的选择器(如div > ul > li > a)会增加浏览器的解析负担,降低性能。尽量使用更简洁的选择器结构。
  • 使用类选择器代替属性选择器:如果可能,使用类选择器代替属性选择器。例如,使用.highlight代替[class~="highlight"],因为类选择器的性能更好。
  • 合理使用伪类选择器:伪类选择器虽然功能强大,但某些类型(如:nth-child(n))性能较差。如果可以,尽量用类选择器代替伪类选择器来实现相同的效果。
  • 避免过度使用组合选择器:组合选择器(如后代选择器、子代选择器)虽然可以实现更精确的选择,但会降低性能。尽量使用更具体的选择器来减少匹配范围。
  • 使用CSS预处理器:通过CSS预处理器(如Sass或Less),可以将复杂的样式规则分解为更简单的模块,提高代码的可维护性和性能。
  • 测试和分析:使用浏览器的开发者工具(如Chrome DevTools)分析CSS性能,找出性能瓶颈并进行优化。

7. 总结

影刀RPA办公自动化入门到实战
在这里插入图片描述

CSS选择器是网页设计中不可或缺的工具,它为开发者提供了强大的元素选择能力,从而实现对页面样式的精确控制。从简单的元素选择器到复杂的组合选择器,每种选择器都有其独特的功能和应用场景。合理使用这些选择器,不仅可以提升页面的视觉效果,还能增强用户体验。

在实际开发中,选择器的性能差异不容忽视。ID选择器由于其唯一性,具有最高的匹配效率,而元素选择器和一些复杂的伪类选择器则相对性能较低。因此,开发者在编写CSS时,应尽量遵循性能优化的原则,优先使用性能较高的选择器,并避免过度嵌套和复杂的选择器结构。

同时,CSS选择器的灵活性也要求开发者具备良好的代码组织能力。通过合理地使用类选择器和ID选择器,可以提高代码的可维护性和可读性。此外,随着CSS技术的不断发展,新的选择器和伪类也在不断涌现,开发者需要持续学习和更新知识,以充分利用这些新特性来提升开发效率。

相关文章:

影刀RPA开发-CSS选择器介绍

影刀RPA网页自动化开发&#xff0c;很多时候需要我们查看页面源码&#xff0c;查找相关的元素属性&#xff0c;这就需要我们有必要了解CSS选择器。本文做了些简单的介绍。希望对大家有帮助&#xff01; 1. CSS选择器概述 1.1 定义与作用 CSS选择器是CSS&#xff08;层叠样式…...

DeepSeek、B(不是百度)AT、科大讯飞靠什么坐上中国Ai牌桌?

在国产AI舞台上&#xff0c;DeepSeek、阿里、字节、腾讯、讯飞群雄逐鹿&#xff0c;好不热闹。 这场堪称“军备竞赛”的激烈角逐&#xff0c;绝非简单的市场竞争&#xff0c;而是一场关乎技术、创新与未来布局的深度博弈。在竞赛中&#xff0c;五大模型各显神通&#xff0c;以…...

MySQL全局优化

目录 1 硬件层面优化 1.1 CPU优化 1.2 内存优化 1.3 存储优化 1.4 网络优化 2 系统配置优化 2.1 操作系统配置 2.2 MySQL服务配置 3 库表结构优化 4 SQL及索引优化 mysql可以从四个层面考虑优化&#xff0c;分别是 硬件系统配置库表结构SQL及索引 从成本和优化效果来看&#xf…...

【github】主页显示star和fork

数据收集&#xff1a;定期&#xff08;例如每天&#xff09;获取你所有仓库的 Star 和 Fork 总数。数据存储&#xff1a;将收集到的数据&#xff08;时间戳、总 Star 数、总 Fork 数&#xff09;存储起来。图表生成&#xff1a;根据存储的数据生成变化曲线图&#xff08;通常是…...

网站遭受扫描攻击,大量爬虫应对策略

网站的日志里突然有很多访问路径不存在的&#xff0c;有些ip地址也是国外的&#xff0c;而且访问是在深夜且次数非常频繁紧密。判定就是不怀好意的扫描网站寻找漏洞。也有些是爬虫&#xff0c;且是国外的爬虫&#xff0c;有的也是不知道的爬虫爬取网站。网站的真实流量不多&…...

【 Redis | 实战篇 秒杀实现 】

目录 前言&#xff1a; 1.全局ID生成器 2.秒杀优惠券 2.1.秒杀优惠券的基本实现 2.2.超卖问题 2.3.解决超卖问题的方案 2.4.基于乐观锁来解决超卖问题 3.秒杀一人一单 3.1.秒杀一人一单的基本实现 3.2.单机模式下的线程安全问题 3.3.集群模式下的线程安全问题 前言&…...

手搓传染病模型(SEIARW)

在传染病传播的研究中&#xff0c;水传播途径是一个重要的考量因素。SEAIRW 模型&#xff08;易感者 S - 暴露者 E - 感染者 I - 无症状感染者 A - 康复者 R - 水中病原体 W&#xff09;综合考虑了人与人接触传播以及水传播的双重机制&#xff0c;为分析此类传染病提供了全面的…...

【C++】深入理解 unordered 容器、布隆过滤器与分布式一致性哈希

【C】深入理解 unordered 容器、布隆过滤器与分布式一致性哈希 在日常开发中&#xff0c;无论是数据结构优化、缓存设计&#xff0c;还是分布式架构搭建&#xff0c;unordered_map、布隆过滤器和一致性哈希都是绕不开的关键工具。它们高效、轻量&#xff0c;在性能与扩展性方面…...

第五天——贪心算法——射气球

1.题目 有一些球形气球贴在一个表示 XY 平面的平坦墙壁上。气球用一个二维整数数组 points 表示&#xff0c;其中 points[i] [xstart, xend] 表示第 i 个气球的水平直径范围从 xstart 到 xend。你并不知道这些气球的具体 y 坐标。 可以从 x 轴上的不同位置垂直向上&#xff0…...

麦肯锡110页PPT企业组织效能提升调研与诊断分析指南

“战略清晰、团队拼命、资源充足&#xff0c;但业绩就是卡在瓶颈期上不去……”这是许多中国企业面临的真实困境。表面看似健康的企业&#xff0c;往往隐藏着“组织亚健康”问题——跨部门扯皮、人才流失、决策迟缓、市场反应滞后……麦肯锡最新研究揭示&#xff1a;组织健康度…...

BFS算法篇——从晨曦到星辰,BFS算法在多源最短路径问题中的诗意航行(上)

文章目录 引言一、多源BFS的概述二、应用场景三、算法步骤四、代码实现五、代码解释六、总结 引言 在浩渺的图论宇宙中&#xff0c;图的每一条边、每一个节点都是故事的组成部分。每当我们站在一个复杂的迷宫前&#xff0c;开始感受它的深邃时&#xff0c;我们往往不再局限于从…...

理解 C# 中的各类指针

前言 变量可以理解成是一块内存位置的别名&#xff0c;访问变量也就是访问对应内存中的数据。 指针是一种特殊的变量&#xff0c;它存储了一个内存地址&#xff0c;这个内存地址代表了另一块内存的位置。 指针指向的可以是一个变量、一个数组元素、一个对象实例、一块非托管内存…...

MySQL 事务(二)

文章目录 事务隔离性理论理解隔离性隔离级别 事务隔离级别的设置和查看事务隔离级别读未提交读提交&#xff08;不可重复读&#xff09; 事务隔离性理论 理解隔离性 MySQL服务可能会同时被多个客户端进程(线程)访问&#xff0c;访问的方式以事务方式进行一个事务可能由多条SQL…...

【HarmonyOS】ArkTS开发应用的横竖屏切换

文章目录 1、简介2、静态 — 横竖屏切换2.1、效果2.2、实现原理2.3、module.json5 源码 3、动态 — 横竖屏切换3.1、应用随系统旋转切换横竖屏3.2、setPreferredOrientation 原理配置3.3、锁定旋转的情况下&#xff0c;手动设置横屏状态 1、简介 在完成全屏网页嵌套应用开发后…...

Linux中find命令用法核心要点提炼

大家好&#xff0c;欢迎来到程序视点&#xff01;我是你们的老朋友.小二&#xff01; 以下是针对Linux中find命令用法的核心要点提炼&#xff1a; 基础语法结构 find [路径] [选项] [操作]路径&#xff1a;查找目录&#xff08;.表当前目录&#xff0c;/表根目录&#xff09;…...

专栏项目框架介绍

项目整体实现框图 如下图所示&#xff0c;是该项目的整体框图&#xff0c;项目的功能概括为&#xff1a;PC端下发数据文件&#xff0c;FPGA板卡接收数据文件&#xff0c;缓存至DDR中&#xff0c;待数据文件发送完毕&#xff0c;循环读取DDR有效写区域数据&#xff0c;将DDR数据…...

WSL 安装 Debian 12 后,Linux 如何安装 vim ?

在 WSL 的 Debian 12 中安装 Vim 非常简单&#xff0c;只需使用 apt 包管理器即可。以下是详细步骤&#xff1a; 1. 更新软件包列表 首先打开终端&#xff0c;确保系统包列表是最新的&#xff1a; sudo apt update2. 安装 Vim 直接通过 apt 安装 Vim&#xff1a; sudo apt …...

【SpringBoot】从零开始全面解析Spring MVC (一)

本篇博客给大家带来的是SpringBoot的知识点, 本篇是SpringBoot入门, 介绍Spring MVC相关知识. &#x1f40e;文章专栏: JavaEE初阶 &#x1f680;若有问题 评论区见 ❤ 欢迎大家点赞 评论 收藏 分享 如果你不知道分享给谁,那就分享给薯条. 你们的支持是我不断创作的动力 . 王子…...

C++—特殊类设计设计模式

目录 C—特殊类设计&设计模式1.设计模式2.特殊类设计2.1设计一个无法被拷贝的类2.2设计一个只能在堆上创建对象的类2.3设计一个只能在栈上创建对象的类2.4设计一个类&#xff0c;无法被继承2.5设计一个类。这个类只能创建一个对象【单例模式】2.5.1懒汉模式实现2.5.2饿汉模…...

初入OpenCV

OpenCV简介 OpenCV是一个开源的跨平台计算机视觉库&#xff0c;它实现了图像处理和计算机视觉方面的很多通用算法。 应用场景&#xff1a; 目标识别&#xff1a;人脸、车辆、车牌、动物&#xff1b; 自动驾驶&#xff1b;医学影像分析&#xff1b; 视频内容理解分析&#xff…...

霍夫圆变换全面解析(OpenCV)

文章目录 一、霍夫圆变换基础1.1 霍夫圆变换概述1.2 圆的数学表达与参数化 二、霍夫圆变换算法实现2.1 标准霍夫圆变换算法流程2.2 参数空间的表示与优化 三、关键参数解析3.1 OpenCV中的HoughCircles参数3.2 参数调优策略 四、Python与OpenCV实现参考4.1 基本实现代码4.2 改进…...

互联网大厂Java求职面试:优惠券服务架构设计与AI增强实践-4

互联网大厂Java求职面试&#xff1a;优惠券服务架构设计与AI增强实践-4 场景设定 面试官&#xff1a;某互联网大厂技术总监&#xff0c;拥有超过10年大型互联网企业一线技术管理经验&#xff0c;擅长分布式架构、微服务治理、云原生等领域。 候选人&#xff1a;郑薪苦&#…...

项目中会出现的css样式

1.重复渐变边框 思路&#xff1a; 主要是用重复的背景渐变实现的 如图&#xff1a; <div class"card"><div class"container">全面收集中医癌毒临床医案&#xff0c;建立医案共享机制&#xff0c;构建癌毒病机知识图谱&#xff0c;便于医疗人…...

LeetCode[101]对称二叉树

思路&#xff1a; 对称二叉树是左右子树对称&#xff0c;而不是左右子树相等&#xff0c;所以假设一个树只有3个节点&#xff0c;那么判断这个数是否是对称二叉树&#xff0c;肯定是先判断左右两个树&#xff0c;然后再看根节点&#xff0c;这样递归顺序我们就确认了&#xff0…...

黑马k8s(四)

1.资源管理介绍 本章节主要介绍yaml语法和kubernetes的资源管理方式 2.YAML语言介绍 3.资源管理方式 命令式对象管理 dev下删除了pod&#xff0c;之后发现还有pod&#xff0c;把原来的pod删除了&#xff0c;重新启动了一个 命令式对象配置 声明式对象配置 命令式对象配置&…...

华为ensp实现跨vlan通信

要在网络拓扑中实现主机192.168.1.1、192.168.1.2和192.168.2.1之间的互相通信&#xff0c;需要正确配置交换机&#xff08;S5700&#xff09;和路由器&#xff08;AR3260&#xff09;&#xff0c;以确保不同网段之间的通信&#xff08;即VLAN间路由&#xff09;。 网络拓扑分析…...

TCPIP详解 卷1协议 十 用户数据报协议和IP分片

10.1——用户数据报协议和 IP 分片 UDP是一种保留消息边界的简单的面向数据报的传输层协议。它不提供差错纠正、队列管理、重复消除、流量控制和拥塞控制。它提供差错检测&#xff0c;包含我们在传输层中碰到的第一个真实的端到端&#xff08;end-to-end&#xff09;校验和。这…...

Java笔记4

第一章 static关键字 2.1 概述 以前我们定义过如下类&#xff1a; public class Student {// 成员变量public String name;public char sex; // 男 女public int age;// 无参数构造方法public Student() {}// 有参数构造方法public Student(String a) {} }我们已经知道面向…...

Matlab 垂向七自由度轨道车辆开关型半主动控制

1、内容简介 Matlab 229-垂向七自由度轨道车辆开关型半主动控制 可以交流、咨询、答疑 2、内容说明 略 3、仿真分析 略 4、参考论文 略...

Matlab 短时交通流预测AR模型

1、内容简介 Matlab 230-短时交通流预测AR模型 可以交流、咨询、答疑 2、内容说明 略 3、仿真分析 略 4、参考论文 略城市道路短时交通流预测.pdf...

MYSQL之表的约束

表中真正约束字段的是数据类型, 但是只有数据类型约束就很单一, 也需要有一些额外的约束, 从而更好的保证数据的合法性, 从业务逻辑角度保证数据的正确性. 比如有一个字段是email, 要求是唯一的. 为什么要有表的约束? 表的约束: 表中一定要有各种约束, 通过约束, 让我们未来…...

使用ACE-Step在本地生成AI音乐

使用ACE-Step v1-3.5B开源模型从文本提示、标签和歌词创建完整的AI生成歌曲 — 无需云服务,无需API,仅需您的GPU。 这是由ACE Studio和StepFun开发的开源音乐生成模型。 在对数据隐私和云服务依赖性日益增长的担忧时代,ACE-Step将强大的文本转音乐生成完全离线,使其成为A…...

web 自动化之 Unittest 四大组件

文章目录 一、如何开展自动化测试1、项目需求分析&#xff0c;了解业务需求 web 功能纳入自动化测试2、选择何种方式实现自动化测试 二、Unittest 框架三、TestCase 测试用例四、TestFixture 测试夹具 执行测试用例前的前置操作及后置操作五、TestSuite 测试套件 & TestLoa…...

2025年渗透测试面试题总结-渗透测试红队面试七(题目+回答)

网络安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 渗透测试红队面试七 一百八十一、Shiro漏洞类型&#xff0c;721原理&#xff0c;721利用要注意什么&am…...

Mysql的索引,慢查询和数据库表的设计以及乐观锁和悲观锁

设计高性能数据表的原则 数据库设计经验和技巧 单张数据表的字段不宜过多&#xff08;20个&#xff09;&#xff0c;如果确实存在大量field,考虑拆成多张表或json text存储 数据表字段都是not null的&#xff0c;即使没有数据&#xff0c;最好也使用无意义的值填充&#xff0c…...

day012-软件包管理专题

文章目录 1. 生成随机密码2. 软件包管理2.1 类红帽系统2.1.1 安装软件包2.1.2 查找软件包2.1.3 查看软件包内容2.1.4 查看命令或文件属于哪个软件包2.1.5 重新安装软件包2.1.6 删除软件包2.1.7 升级2.1.8 rpm安装软件包2.1.9 rpm升级软件包2.1.10 rpm检查软件包文件是否改变 3.…...

学习黑客5 分钟深入浅出理解Windows Firewall

5 分钟深入浅出理解Windows Firewall &#x1f525; 大家好&#xff01;今天我们将探索Windows防火墙——这是Windows操作系统中的核心安全组件&#xff0c;负责控制进出计算机的网络流量。无论你是计算机初学者&#xff0c;还是在TryHackMe等平台上学习网络安全的爱好者&…...

node .js 启动基于express框架的后端服务报错解决

问题&#xff1a; node .js 用npm start 启动基于express框架的后端服务报错如下&#xff1a; /c/Program Files/nodejs/npm: line 65: 26880 Segmentation fault "$NODE_EXE" "$NPM_CLI_JS" "$" 原因分析&#xff1a; 遇到 /c/Program F…...

feign.RequestInterceptor 简介-笔记

1. feign.RequestInterceptor 简介 Feign 是一个声明式 Web 服务客户端&#xff0c;用于简化 HTTP 请求的编写与管理。feign.RequestInterceptor 是 Feign 提供的一个接口&#xff0c;用于在请求发出之前对其进行拦截和修改。这在微服务架构中非常有用&#xff0c;比如在请求中…...

软考错题(四)

在程序执行过程中&#xff0c;高速缓存cache与主存间的地址映射由硬件自动完成 以下关于两个浮点数相加运算的叙述中&#xff0c;正确的是首先进行对阶&#xff0c;阶码小的向阶码大的对齐 认证只能阻止主动攻击不能阻止被动攻击 BGP是外部网关协议 查看端口信息&#xff1…...

SSRF相关

SSRF(Server Side Request Forgery,服务器端请求伪造)&#xff0c;攻击者以服务器的身份发送一条构造好的请求给服务器所在地内网进行探测或攻击。 产生原理&#xff1a; 服务器端提供了能从其他服务器应用获取数据的功能&#xff0c;如从指定url获取网页内容、加载指定地址的图…...

供应链学习

供应链安全 供应链&#xff1a;整个业务系统中的节点&#xff08;一般是上游节点&#xff09; 乙方一般提供资源&#xff1a;人 软件 硬件 服务 如何寻找供应链 1.招投标信息&#xff1a;寻标包 例如&#xff1a;烟草 智能办公 2.网站本身指纹 例如&#xff1a; powered by xxx…...

力扣HOT100之二叉树:226. 翻转二叉树

这道题很简单&#xff0c;用递归来做&#xff0c;对于一个根节点来说&#xff0c;有两种情况我们不需要翻转&#xff1a;一是根节点为空&#xff0c;二是根节点为叶子节点。这很容易理解&#xff0c;当传入的节点不满足上面的两种情况时&#xff0c;我们就需要做一个翻转&#…...

如何让rabbitmq保存服务断开重连?保证高可用?

在 Spring Boot 集成 RabbitMQ 时&#xff0c;可以通过以下几种方式让 RabbitMQ 保存服务断开重连&#xff0c;以保证高可用&#xff1a; 配置自动重连 application.properties 配置 &#xff1a;在 Spring Boot 的配置文件 application.properties 中&#xff0c;可以设置 Ra…...

TCPIP详解 卷1协议 九 广播和本地组播(IGMP 和 MLD)

9.1——广播和本地组播&#xff08;IGMP 和 MLD&#xff09; IPv4可以使用4种IP地址&#xff1a;单播&#xff08;unicast&#xff09;、任播&#xff08;anycast&#xff09;、组播&#xff08;multicast&#xff09;和广播&#xff08;broadcast&#xff09;。 IPv6可以使用…...

全球变暖-bfs

1.不沉的就是4个方向没有海&#xff0c;一个大岛屿有一个不沉就行了&#xff0c;其余染色就好了 2.第一个bfs来统计总岛屿个数 3.第二个来统计不沉岛屿个数 4.一减就ac啦 #include<bits/stdc.h> using namespace std; #define N 100011 typedef long long ll; typede…...

DDD领域驱动开发

1. 现象: 软件设计质量最高的时候是第一次设计的那个版本&#xff08;通常是因为第一次设计时&#xff0c;业务技术沟通最充分&#xff0c;从业务技术整体视角出发设计系统&#xff09;。当第一个版本设计上线以后就开始各种需求变更&#xff0c;这常常又会打乱原有的设计。 2…...

【HarmonyOS 5】鸿蒙App Linking详解

【HarmonyOS 5】鸿蒙App Linking详解 一、前言 HarmonyOS 的 App Linking 功能为开发者提供了一个强大的工具&#xff0c;通过创建跨平台的深度聚合链接&#xff0c;实现用户在不同场景下的无缝跳转&#xff0c;极大地提升了用户转化率和应用的可用性。 其安全性、智能路由和…...

Android Studio 中 build、assemble、assembleDebug 和 assembleRelease 构建 aar 的区别

上一篇&#xff1a;Tasks中没有build选项的解决办法 概述&#xff1a; 在构建 aar 包时通常会在下面的选项中进行构建&#xff0c;但是对于如何构建&#xff0c;选择哪种方式构建我还是处于懵逼状态&#xff0c;所以我整理了一下几种构建方式的区别以及如何选择。 1. build…...

【爬虫】12306查票

城市代码&#xff1a; 没有加密&#xff0c;关键部分&#xff1a; 完整代码&#xff1a; import json import requests with open(rE:\学习文件夹&#xff08;关于爬虫&#xff09;\项目实战\12306\城市代码.json,r,encodingutf-8) as f:city_codef.read() city json.loads(c…...