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

【js基础笔记] - 包含es6 类的使用

文章目录

  • js基础
    • js 预解析
    • js变量提升
  • DOM相关知识
    • 节点选择器
    • 获取属性节点
    • 创建节点
    • 插入节点
    • 替换节点
    • 克隆节点
    • 获取节点属性
    • 获取元素尺寸
      • 获取元素偏移量
      • 标准的dom事件流
      • 阻止事件传播
      • 阻止默认行为
      • 事件委托
  • 正则表达式
    • js复杂类型
    • 元字符 - 基本元字符
    • 元字符 - 边界符
    • 元字符 - 限定符
    • 元字符 - 特殊符号
    • 正则表达式 - 捕获
    • 正则与字符串写法
  • js 类写法 (es6)
  • js 构造函数 (es5)
    • js原型链
      • js面向对象继承 es5
    • es6 类继承

js基础

js 预解析

js 代码的编译和执行

通俗的说,预解析是在代码执行之前,先对代码进行通读和解释 ,之后执行代码

js变量提升

    // 声明式函数var fn = 100;function fn() {console.log('方法执行')}console.log(fn);//100fn()//fn is not a function
  • 变量提升执行步骤
    fn
    fn()
    fn = 100

DOM相关知识

节点选择器

<div id="hbox">强大的内心<div id="box"></div>
</div>
  • childNodes属性 children
  box.childNodes //获取所有节点box.children 所有元素
  • firstChild and firstElementChild
  box.firstChild //获取所有节点中的第一个 包含 text /nbox.firstElementChild 所有元素 标签
  • lastChild lastElementChild
  • previousSibling previousElementSibling //上一个节点的兄弟节点
  • nextSibling nextElementSibling //下一个节点的兄弟节点
  • parentNode parentElement //父节点 parentElement拿不到则为null

获取属性节点

box.getAttribute('index');
console.log(box.attributes[1]);

创建节点

创建之后,直接可以利用 '.'方式更改/添加的属性

const newDiv = document.creatElement('div');
newDiv.className = 'newd';
newDiv.id = 'dd';
newDiv.innerHTML = "玫瑰和王子不属于一个世界";

插入节点

<div id="box"><div id="box1"></div>
</div><script>
box.appendChild(newDiv) //在box下增加一个节点 // insertBefore(要插入的节点,谁的前面)
hbox.insertBefore(newDiv,box);// 删除节点(节点对象)
box.removeChild(newDiv);// 删除自己以及后代
box.remove();
</script>

替换节点

replaceChild(新的节点,老的节点)

<script>
// 替换节点 
const newDiv = document.createElement('div')
newDiv.innerHTML = '替换'
box.replaceChild(newDiv,box1)
</script>

克隆节点

cloneNode() 默认不传参 仅克隆当前j节点

<script>
// 克隆节点 
// cloneNode(true) 克隆包含后代
const clnode = box.cloneNode(true);
clnode.id = 'cloneId';
document.body.appendChild(clnode);
</script>

获取节点属性

节点类型属性名属性值
元素节点nodeType1
属性节点nodeName2
文本节点text3
<script>
const box = document.getElementbyId('box')
console.log(box.nodeType)
</script>

获取元素尺寸

offsetWithoffsetHeight
获取尺寸:内容+padding+border 宽/高 度

clientWidth clientHeight
获取尺寸:内容+padding 宽/高 度

获取元素偏移量

offsetLeft 和 offsetTop

参考点是定位父级 position:relative;
如果元素没有定位,偏移量相对于body

标准的dom事件流

捕获:window -> document -> body -> outer
目标:inner
冒泡:outer -> body -> document -> window

默认情况 只在冒泡触发 按照 dom2事件绑定,并进行配置,才能看到捕获的回调函数被触发

阻止事件传播

// propagation 传播e.stopPropagation();

阻止默认行为

 e.preventDefault();

事件委托

e.target

减少多个函数绑定 的 性能损耗
动态添加li也 有事件处理

可以根据dom流,将事件委托给父组件,在父组件中获取到点击元素

详见示例 caseDomCurd.html 和 caseMouseFollow.html


正则表达式

js复杂类型

  • 字面量 //

字符中包含 连续字符 abc

const reg = /abc/
//验证data.value是否符合表达式规则
reg.test(data.value)
  • 内置构造函数
const reg = new RegExp("abc")

元字符 - 基本元字符

  • \d 包含一位数字(0-9)
  const reg = /\d/console.log(reg.test("abc"))//falseconsole.log(reg.test("123"))//true
  • \D 包含一位 数字
  const reg = /\D/console.log(reg.test("abc"))//trueconsole.log(reg.test("123"))//false
  • \s 包含一位空白 (空格 缩进 换行)
  const reg = /\s/console.log(reg.test("ab c"))//trueconsole.log(reg.test("123"))//false
  • \S 包含一位 空白 (空格 缩进 换行)
  const reg = /\S/console.log(reg.test("ab c"))//falseconsole.log(reg.test("123"))//true
  • \w 包含一位 字母 数字 下划线
  const reg = /\w/const reg2 = /\w\w/ //包含两个console.log(reg.test("123ab c"))//trueconsole.log(reg.test("&*"))//false
  • \W 包含一位 字母 数字 下划线
  const reg = /\W/const reg2 = /\W\W/ //包含两个console.log(reg.test("123ab c"))//falseconsole.log(reg.test("&*"))//true
  • . 任意内容( 换行不算 )

一个符合条件就可以 如果 exec() 截取 只会截取第一个

  const reg = /./console.log(reg.test("\n\n\n"))//falseconsole.log(reg.test("&\naac*"))//true
  • . \转义字符
  const reg = /\d\.\d/console.log(reg.test("1.2"))//trueconsole.log(reg.test("1a2"))//false

元字符 - 边界符

  • ^ 以什么为开头
const reg = /^\d/ //以数字开头
console.log(reg.test('abc'))//false
console.log(reg.test('1abc'))//true
  • $ 以什么为结尾
const reg = /\d$/ //以数字结尾
console.log(reg.test('abc'))//false
console.log(reg.test('abc33'))//true
  • ^开头结尾$
const reg = /^ae$/
console.log(reg.test('abc'))//false
console.log(reg.test('ae'))//true
  const reg = /^a\de$/console.log(reg.test('abc'))//falseconsole.log(reg.test('a2e'))//trueconsole.log(reg.test('a232323e'))//false

元字符 - 限定符

  • * 0到多次
 const reg = /^a\d*c$/;console.log(reg.test('a222222c'))//trueconsole.log(reg.test('a222222'))//f
  • + 1到多次
 const reg = /\d+/;console.log(reg.test('a222222c'))//trueconsole.log(reg.test('a222222'))//fconsole.log(reg.exec('ads222222'))//可以取出符合条件的字符
  • 0-1次
 const reg = /\d?/;console.log(reg.test('a222222c'))//trueconsole.log(reg.test('ac'))//true
  • {n} 指定次数 n
  const reg = /\d{3}/console.log(reg.test('ac'))//falseconsole.log(reg.test('a2c'))//falseconsole.log(reg.test('a232e'))//true
  • {n,m} 指定次数 n < x < m
  const reg = /\d{1,3}/console.log(reg.test('ac'))//falseconsole.log(reg.test('a2c'))//trueconsole.log(reg.test('a232e'))//trueconsole.log(reg.test('a123456e'))//trueconsole.log(reg.exec('a123456e'))//123

元字符 - 特殊符号

  • () 整体
  const reg = /(a){2}/console.log(reg.test('aca'))//falseconsole.log(reg.test('aac'))//true
  • | 或 , 左右是一个整体
  const reg = /a|2/ // a或者是2console.log(reg.test('aca'))//falseconsole.log(reg.test('aac'))//true
  const reg = /(abc|234)/ //abc或者是 234console.log(reg.test('ab234'))//trueconsole.log(reg.test('abc34'))//trueconsole.log(reg.test('abc'))//true
  const reg = /abc|234/ //ab c或2 34console.log(reg.test('ab234'))//trueconsole.log(reg.test('abc'))//trueconsole.log(reg.test('ab34'))//falseconsole.log(reg.test('c23'))//falseconsole.log(reg.test('234'))//true
  • [] 包含其中1个

[a-zA-Z0-9_] 等价于 \w 字母数字下划线

[0-9] <=> \d

  const reg = /[123sad]/console.log(reg.test('abc'))//trueconsole.log(reg.test('234'))//true
  const reg = /[123sad]{3,5}/console.log(reg.test('ba2s'))//trueconsole.log(reg.test('ab2s'))//false 要包含在【】中 连续在一起的为true
  • [^abc] 取反 ^

^ 写在外面 以什么为开头 写在[]中 取反

  const reg = /[^abc]/console.log(reg.test('wabc'))//trueconsole.log(reg.test('abc'))//false 要包含在【】中 连续在一起的为^ 取反

正则表达式 - 捕获

  • exec(‘表达式’)
    截取字符串中,符合正则表达式的内容
    但是是懒惰模式,只会匹配遇到的第一个内容,不会返回多个片段
  const str = 'who say 2025-05-20'const reg = /\d{4}-\d{1,2}-\d{1,2}/console.log(reg.test(str))//trueconsole.log(reg.exec(str)[0])//2025-05-20
  • 标识符 g i

g 全局匹配 global

  const str = 'who say 2025-05-20 is my birthday,my birthday in 2025-6-1';const reg = /\d{4}-\d{1,2}-\d{1,2}/gconsole.log(reg.test(str))//trueconsole.log(reg.exec(str)[0])//2025-05-20

const reg = /(\d{4})-(\d{1,2})-(\d{1,2})/g该表达式 加了()会 将符合的整体单独提取

  const str = 'who say 2025-05-20 is my birthday,my birthday in 2025-6-1';const reg = /\d{4}-\d{1,2}-\d{1,2}/g// const reg = /(\d{4})-(\d{1,2})-(\d{1,2})/g 加了()会 将符合的整体单独提取console.log(reg.test(str))//true 全局模式 会记录此次内容const res1 = reg.exec(str);//2025-6-1',const res2 = reg.exec(str);// null  最上面的console.log 输出一次 调用了reg 匹配 全局g记录了输出的操作,所以 只剩下 第二次的结果

i 忽略大小写 - ignore

  const str = 'who say 2025-05-20 is my birthday,my birthday in 2025-6-1';const reg = /a-z/iconsole.log(reg.test(str))//true
  • 贪婪 非贪婪?

示例

贪婪匹配 匹配 符合条件的最大次数

  const reg = /\d{1,4}/console.log(reg.exec('aca124856'))//1248  贪婪匹配 匹配 符合条件的最大次数

?非贪婪匹配 匹配 符合条件的最小次数

  const reg = /\d{1,4}?/console.log(reg.exec('aca124856'))//1  ?非贪婪匹配 匹配 符合条件的最小次数

常见搭配

*?
+?
??
{n,}? {n,m}?

场景应用

  const str = `<p class='list'> xxxxx <p/>`const reg = /^<p.*>$/const reg = /./ //一个符合条件就可以console.log(reg.exec(str))//<p class='list'> xxxxx <p/>  贪婪匹配
  const str = `<p class='list'> xxxxx <p/>`const reg = /^<p.*?>$/console.log(reg.exec(str))//<p class='list'> xxxxx <p/> >$存在 正则引擎 必须要找到正确的,所以会匹配到 第二个p 。为了满足 $,.*? 会继续扩展直到能匹配到字符串末尾的 >
  const str = `<p class='list'> xxxxx <p/>`const reg = /^<p.*?>/console.log(reg.exec(str))//<p class='list'> 非贪婪匹配

正则与字符串写法

正则.test(字符串)
正则.exec(字符串)
字符串.replace search match

  const str = 'I will marry with my boy friend,I do not want get marry';const reg = /marry/gconsole.log(str.replace(reg, '*'))//I will * with my boy friend,I do not want get marry
  const str = '';const reg = /marry/gconsole.log(str.search(reg))//有返回 开始下标 没有则 -1
  const str = 'I will marry with my boy friend,I do not want get marry';const reg = /marry/gconsole.log(str.match(reg))// ['marry', 'marry'] 

js 类写法 (es6)

本质是 构造函数 class 写法是es6的语法糖 可以用prototype修改

class Hander {constructor(name, adge) {this.name = name;this.adge = adge;}introduce() {console.log('hello', this.name, this.adge)}
}
const obj = new Hander('张三',12)//传递的参数,会被构造函数 construct 接收
obj.introduce();//调用类中的 方法

js 构造函数 (es5)

function Hander(name,age){this.name = name;this.age = age;
}// 节省空间公用内存,将function写在原型prototype上
Hander.prototype.introduce(){console.log('挂在原型上的方法',name,age)
}const obj = new Hander('百里'400);
obj.introduce();

js原型链

每一个对象上都有一个 __proto__
通过 obj.__proto__ 可以获取到上一级方法的构造方法,逐级向上,形成原型链
obj.__proto__ === 构造函数.prototype

这俩的区别是 __proto__是一个内置函数。类似君子协议,以__开头的方法不允许被调用。所以,使用prototype代替
原型链的源头:
可以理解为null 因为 Object.prototype.__proto__ = null
也可以说是 Object.prototype

js面向对象继承 es5

分为构造函数继承 和 原型继承
通过 改变this指向(call || apply),实现远程继承
通过 prototype 改变父类构造函数 实现增强 或 复用

function Person(name,age){this.name = name;this.age = age;
}
function getGrades(){console.log(this.name,this.age,'3年级');
} // 构造函数继承 继承属性
function Student(name,age){// call('this要指向的对象',参数1,...,参数n)Person.call(this,name,age);
}// const obj = new Student('1班','35号')
// console.log(obj)//成功继承 能看到有name 和 age// 对象原型继承 继承方法
Student.prototype = new Person();// 原型增加
Student.prototype.getName = function () {console.log(this.name)
}// 原型增强1 
Student.prototype.getGrades2 = function () {this.getGrades();console.log('增强了原来的方法')
}
// 原型增强2
Student.prototype.getGrades = function () {Person.prototype.getGrades.call(this)// console.log('增强了你的方法',this.name)
}// 原型覆盖
Student.prototype.getGrades = function () {console.log('覆盖了你的方法',this.name)
}const obj = new Student('1班','35号')obj.getGrades();//可以看到 getGrades方法被调用 成功继承// 注意:在原型继承的时候 要在 new 实例化之前

es6 类继承

通常使用super继承父类的变量 和 方法

在子类中,如果是同名方法,父类同名方法会被覆盖。
也可以通过super继承方法,并提升方法

父类代码示例

//父类 father.js
class father{construct(gender){this.gender = gender}getToal(){console.log('父类方法')}
}

子类继承示例

//子类 child.js
class child extends father{construct(gender,name,age){super(gender)//继承父类的属性this.name = name;this.age = age;}
//如果只写 父类同名方法,父类会被覆盖;
//可以使用 super继承父类
getToal(){super.getToal(){console.log('我是子类')}
}
}

相关文章:

【js基础笔记] - 包含es6 类的使用

文章目录 js基础js 预解析js变量提升 DOM相关知识节点选择器获取属性节点创建节点插入节点替换节点克隆节点获取节点属性获取元素尺寸获取元素偏移量标准的dom事件流阻止事件传播阻止默认行为事件委托 正则表达式js复杂类型元字符 - 基本元字符元字符 - 边界符元字符 - 限定符元…...

《Linux命令行大全(第2版)》PDF下载

内容简介 本书对Linux命令行进行详细的介绍&#xff0c;全书内容包括4个部分&#xff0c;第一部分由Shell的介绍开启命令行基础知识的学习之旅&#xff1b;第二部分讲述配置文件的编辑&#xff0c;如何通过命令行控制计算机&#xff1b;第三部分探讨常见的任务与必备工具&…...

补补表面粗糙度的相关知识(一)

表面粗糙度&#xff0c;或简称粗糙度&#xff0c;是指表面不光滑的特性。这个在机械加工行业内可以说是绝绝的必备知识之一&#xff0c;但往往也是最容易被忽略的&#xff0c;因为往往天天接触的反而不怎么关心&#xff0c;或者没有真正的去认真学习掌握。对于像我一样&#xf…...

Python实用工具:pdf转doc

该工具只能使用在英文目录下&#xff0c;且无法转换出图片&#xff0c;以及文本特殊格式。 下载依赖项 pip install PyPDF2 升级依赖项 pip install PyPDF2 --upgrade 查看库版本 python -c "import PyPDF2; print(PyPDF2.__version__)" 下载第二个依赖项 pip i…...

基于Dify实现对Excel的数据分析

在dify部署完成后&#xff0c;大家就可以基于此进行各种应用场景建设&#xff0c;目前dify支持聊天助手&#xff08;包括对话工作流&#xff09;、工作流、agent等模式的场景建设&#xff0c;我们在日常工作中经常会遇到各种各样的数据清洗、格式转换处理、数据统计成图等数据分…...

Win全兼容!五五 Excel Word 转 PDF 工具解决多场景转换难题

各位办公小能手们&#xff01;今天给你们介绍一款超牛的工具——五五Excel Word批量转PDF工具V5.5版。这玩意儿专注搞批量格式转换&#xff0c;能把Excel&#xff08;.xls/.xlsx&#xff09;和Word&#xff08;.doc/.docx&#xff09;文档唰唰地变成PDF格式。 先说说它的核心功…...

java加强 -Collection集合

集合是一种容器&#xff0c;类似于数组&#xff0c;但集合的大小可变&#xff0c;开发中也非常常用。Collection代表单列集合&#xff0c;每个元素&#xff08;数据&#xff09;只包含1个值。Collection集合分为两类&#xff0c;List集合与set集合。 特点 List系列集合&#…...

BGP实验练习1

需求&#xff1a; 要求五台路由器的环回地址均可以相互访问 需求分析&#xff1a; 1.图中存在五个路由器 AR1、AR2、AR3、AR4、AR5&#xff0c;分属不同自治系统&#xff08;AS&#xff09;&#xff0c;AR1 在 AS 100&#xff0c;AR2 - AR4 在 AS 200&#xff0c;AR5 在 AS …...

Nginx location静态文件映射配置

遇到问题&#xff1f; 以下这个Nginx的配置&#xff0c;愿意为访问https://abc.com会指向一个动态网站&#xff0c;访问https://abc.com/tongsongzj时会访问静态网站&#xff0c;但是配置之后&#xff08;注意看后面那个location /tongsongzj/静态文件映射的配置&#xff09;&…...

四、Hive DDL表定义、数据类型、SerDe 与分隔符核心

在理解了 Hive 数据库的基本操作后&#xff0c;本篇笔记将深入到数据存储的核心单元——表 (Table) 的定义和管理。掌握如何创建表、选择合适的数据类型、以及配置数据的读写方式 (特别是 SerDe 和分隔符)&#xff0c;是高效使用 Hive 的关键。 一、创建表 (CREATE TABLE)&…...

每日脚本 5.11 - 进制转换和ascii字符

前置知识 python中各个进制的开头 二进制 &#xff1a; 0b 八进制 &#xff1a; 0o 十六进制 : 0x 进制转换函数 &#xff1a; bin() 转为2进制 oct() 转换为八进制的函数 hex() 转换为16进制的函数 ascii码和字符之间的转换 &#xff1a; chr(97) 码转为字符 …...

cookie和session的区别

一、基本概念 1. Cookie 定义​​&#xff1a;Cookie 是服务器发送到用户浏览器并保存在本地的一小块数据&#xff08;通常小于4KB&#xff09;&#xff0c;浏览器会在后续请求中自动携带该数据。作用​​&#xff1a;用于跟踪用户状态&#xff08;如登录状态&#xff09;、记…...

Kotlin Multiplatform--03:项目实战

Kotlin Multiplatform--03&#xff1a;项目实战 引言配置iOS开发环境配置项目环境运行程序 引言 本章将会带领读者进行项目实战&#xff0c;了解如何从零开始编译一个能同时在Android和iOS运行的App。开发环境一般来说需要使用Macbook&#xff0c;笔者没试过Windows是否能开发。…...

图形学、人机交互、VR/AR领域文献速读【持续更新中...】

&#xff08;1&#xff09;笔者在时间有限的情况下&#xff0c;想要多积累一些自身课题之外的新文献、新知识&#xff0c;所以开了这一篇文章。 &#xff08;2&#xff09;想通过将文献喂给大模型&#xff0c;并向大模型提问的方式来快速理解文献的重要信息&#xff08;如基础i…...

opencascade.js stp vite 调试笔记

Hello, World! | OpenCascade.js cnpm install opencascade.js cnpm install vite-plugin-wasm --save-dev 当你不知道文件写哪的时候trae还是有点用的 ‘’‘ import { defineConfig } from vite; import wasm from vite-plugin-wasm; import rollupWasm from rollup/plugi…...

openharmony系统移植之gpu mesa3d适配

openharmony系统移植之gpu mesa3d适配 文章目录 openharmony系统移植之gpu mesa3d适配1. 环境说明2. gpu内核panfrost驱动2.1 使能panfrost驱动2.2 panfrost dts配置 3. buildroot下测试gpu驱动3.1 buildroot配置编译 4. ohos下mesa3d适配4.1 ohos下mesa3d编译调试4.1.2 编译4.…...

Java开发经验——阿里巴巴编码规范经验总结2

摘要 这篇文章是关于Java开发中阿里巴巴编码规范的经验总结。它强调了避免使用Apache BeanUtils进行属性复制&#xff0c;因为它效率低下且类型转换不安全。推荐使用Spring BeanUtils、Hutool BeanUtil、MapStruct或手动赋值等替代方案。文章还指出不应在视图模板中加入复杂逻…...

Linux中常见开发工具简单介绍

目录 apt/yum 介绍 常用命令 install remove list vim 介绍 常用模式 命令模式 插入模式 批量操作 底行模式 模式替换图 vim的配置文件 gcc/g 介绍 处理过程 预处理 编译 汇编 链接 库 静态库 动态库&#xff08;共享库&#xff09; make/Makefile …...

深入理解深度Q网络DQN:基于python从零实现

DQN是什么玩意儿&#xff1f; 深度Q网络&#xff08;DQN&#xff09;是深度强化学习领域里一个超厉害的算法。它把Q学习和深度神经网络巧妙地结合在了一起&#xff0c;专门用来搞定那些状态空间维度特别高、特别复杂的难题。它展示了用函数近似来学习价值函数的超能力&#xf…...

使用lldb看看Rust的HashMap

目录 前言 正文 读取桶的状态 获取键值对 键值对的指针地址 此时&#xff0c;读取数据 读取索引4的键值对 多添加几个键值对 使用i32作为键&#xff0c;&str作为值 使用i32作为键&#xff0c;String作为值 前言 前面使用ldb看了看不同的类型&#xff0c;这篇再使用…...

Vue3简易版购物车的实现。

文章目录 一、话不多说&#xff0c;直接上代码&#xff1f; 一、话不多说&#xff0c;直接上代码&#xff1f; <template><div><input type"text" placeholder"请输入内容" v-model"keywords"><button click"addGood…...

比亚迪全栈自研生态的底层逻辑

比亚迪全栈自研生态的底层逻辑&#xff1a;汽车工程师必须理解的闭环技术革命 引言&#xff1a;当技术壁垒成为护城河 2023年比亚迪销量突破302万辆的震撼数据背后&#xff0c;隐藏着一个更值得工程师深思的事实&#xff1a;其全栈自研体系覆盖了新能源汽车83%的核心零部件。这…...

[Java实战]Spring Boot 快速配置 HTTPS 并实现 HTTP 自动跳转(八)

[Java实战]Spring Boot 快速配置 HTTPS 并实现 HTTP 自动跳转(八) 引言 在当今网络安全威胁日益严峻的背景下&#xff0c;为 Web 应用启用 HTTPS 已成为基本要求。Spring Boot 提供了简单高效的方式集成 HTTPS 支持&#xff0c;无论是开发环境测试还是生产环境部署&#xff0…...

5.1.1 WPF中Command使用介绍

WPF 的命令系统是一种强大的输入处理机制,它比传统的事件处理更加灵活和可重用,特别适合 MVVM (Model, View, ViewModel)模式开发。 一、命令系统核心概念 1.命令系统基本元素: 命令(Command): 即ICommand类,使用最多的是RoutedCommand,也可以自己继承ICommand使用自定…...

设计模式简述(十九)桥梁模式

桥梁模式 描述基本组件使用 描述 桥梁模式是一种相对简单的模式&#xff0c;通常以组合替代继承的方式实现。 从设计原则来讲&#xff0c;可以说是单一职责的一种体现。 将原本在一个类中的功能&#xff0c;按更细的粒度拆分到不同的类中&#xff0c;然后各自独立发展。 基本…...

常用设计模式

一、什么是设计模式 设计模式&#xff08;Design Pattern&#xff09;是一套被反复使用、多数人知晓的、经过分类编目的代码设计经验总结&#xff0c;旨在解决面向对象设计中反复出现的问题&#xff0c;提升代码的可重用性、可理解性和可靠性。以下从多个维度详细讲解&#xff…...

20242817-李臻-课下作业:Qt和Sqlite

实验内容 阅读附件内容&#xff0c;编译运行附件中第一章&#xff0c;第三章的例子。 实验过程 第一章 t1实践 #include <QApplication> #include <QWidget> #include <QPushButton> #include <QVBoxLayout>int main(int argc, char *argv[]) {QA…...

嵌入式机器学习平台Edge Impulse图像分类 – 快速入门

陈拓 2025/05/08-2025/05/11 1. 简介 官方网址 https://edgeimpulse.com/ 适用于任何边缘设备的人工智能&#xff1a; Gateways - 网关 Sensors & Cameras - 传感器和摄像头 Docker Containers - Docker容器 MCUs, NPUs, CPUs, GPUs 构建数据集、训练模型并优化库以…...

JavaWeb, Spring, Spring Boot

出现时间 JavaWeb - Spring - Spring Boot 一、JavaWeb 的发展历程 Servlet 和 JSP&#xff1a; Servlet&#xff1a;1997 年首次发布&#xff0c;用于处理 HTTP 请求和响应。 JSP&#xff1a;1999 年首次发布&#xff0c;用于动态生成 HTML 页面。 特点&#xff1a;提供了基…...

upload-labs靶场通关详解:第五关

一、分析源代码 $is_upload false; $msg null; if (isset($_POST[submit])) {if (file_exists(UPLOAD_PATH)) {$deny_ext array(".php",".php5",".php4",".php3",".php2",".html",".htm",".ph…...

【问题】Watt加速github访问速度:好用[特殊字符]

前言 GitHub 是全球知名的代码托管平台&#xff0c;主要用于软件开发&#xff0c;提供 Git 仓库托管、协作工具等功能&#xff0c;经常要用到&#xff0c;但是国内用户常因网络问题难以稳定访问 。 Watt Toolkit&#xff08;原名 Steam&#xff09;是由江苏蒸汽凡星科技有限公…...

GitHub打开缓慢甚至失败的解决办法

在C:\Windows\System32\drivers\etc的hosts中增加如下内容&#xff1a; 20.205.243.166 github.com 199.59.149.236 github.global.ssl.fastly.net185.199.109.153 http://assets-cdn.github.com 185.199.108.153 http://assets-cdn.github.com 185.199.110.153 http://asset…...

【25软考网工】第六章(3)数字签名和数字证书

博客主页&#xff1a;christine-rr-CSDN博客 ​专栏主页&#xff1a;软考中级网络工程师笔记 ​​ 大家好&#xff0c;我是christine-rr !目前《软考中级网络工程师》专栏已经更新二十多篇文章了&#xff0c;每篇笔记都包含详细的知识点&#xff0c;希望能帮助到你&#xff01…...

Android Native 函数 Hook 技术介绍

版权归作者所有&#xff0c;如有转发&#xff0c;请注明文章出处&#xff1a;https://cyrus-studio.github.io/blog/ 前言 Android Native 函数 Hook 技术是一种在应用运行时拦截或替换系统或自身函数行为的手段&#xff0c;常见实现包括 PLT Hook、Inline Hook。 PLT Hook 和…...

代码随想录算法训练营第60期第三十二天打卡

大家好&#xff0c;今天是我们贪心算法章节的第三阶段&#xff0c;前面我们讲过的几道题不知道大家理解的情况如何&#xff0c;还是那句话&#xff0c;贪心算法没有固定的套路与模板&#xff0c;一道题一个思路&#xff0c;我们要多思考这样慢慢地我就就可以水到渠成。今天我们…...

Problem C: 异常1

1.题目描述 检测年龄&#xff0c;其中若为负数或大于等于200岁皆为异常&#xff0c;请将下列代码补充完整。 // 你的代码将被嵌入这里 class Main{ public static void main(String[] args){ Person p1new Person("John",80); Person p2new Pers…...

Ollama部署使用以及模型微调和本地部署

ollama是一款开源的本地大语言模型管理工具&#xff0c;专注于简化大语言模型&#xff08;LLM&#xff09;的本地部署和使用。以下是关于 Ollama 应用的详细介绍&#xff1a; Ollama 的主要功能 本地化部署&#xff1a; Ollama 支持在本地运行模型&#xff0c;无需依赖外部云…...

汇编学习——iOS开发对arm64汇编的初步了解

汇编学习——iOS开发对arm64汇编的初步了解 文章目录 汇编学习——iOS开发对arm64汇编的初步了解前言栈 指令 寄存器寄存器指令运算指令寻址指令前变基 与 后变基 栈堆&#xff08;Heap&#xff09;内存机制三、栈&#xff08;Stack&#xff09;内存机制 3. 多级调用示例 例子A…...

前端代理问题

在前后端联调的时候&#xff0c;有一次因为前端项目代理配置有问题&#xff0c;导致请求接口对不上&#xff0c; transpileDependencies: true,devServer: {hot: true,port: 8081,proxy: {/api: {target: http://localhost:8080,changeOrigin: true,ws: true,pathRewrite: {^/a…...

E+H流量计通过Profibus DP主站转Modbus TCP网关与上位机轻松通讯

EH流量计通过Profibus DP主站转Modbus TCP网关与上位机轻松通讯 在现代工业自动化的广阔舞台上&#xff0c;Profibus DP与Modbus TCP这两种通信协议各领风骚&#xff0c;它们在不同的应用场景中发挥着举足轻重的作用。但工业生产的复杂性往往要求不同设备、系统之间能够顺畅沟…...

TCP/IP 模型每层的封装格式

TCP/IP 模型是一个四层网络架构&#xff0c;每一层在数据传输时都会对数据进行封装&#xff0c;添加相应的头部&#xff08;和尾部&#xff09;信息。以下是各层的封装格式及关键字段说明&#xff1a; 1. 应用层&#xff08;Application Layer&#xff09; 封装格式&#xff1a…...

openjdk底层汇编指令调用(一)——汇编指令及指令编码基础

汇编指令 计算机在执行过程时只识别代表0或者1的电信号。因此为了让计算机能够执行则须向计算机输入一系列01构成的指令。 例如在x64平台下&#xff0c;0x53&#xff0c;二进制为01010011&#xff0c;表示将rbx寄存器中的值压栈。 但是&#xff0c;对于程序员而言&#xff0c;…...

5G-A来了!5G信号多个A带来哪些改变?

5G-A来了&#xff01;5G信号多个A带来哪些改变&#xff1f; 随着科技不断进步&#xff0c;通信网络的迭代升级也在加速。自4G、5G的推出以来&#xff0c;我们见证了通信技术的飞跃式发展。最近&#xff0c;越来越多的用户发现自己手机屏幕右上角的5G标识已经变成了“5G-A”。那…...

探索虚拟化:云计算时代的资源优化之道

前言 如果您想知道云提供商如何在全球范围内运行无数应用程序&#xff0c;而每个应用程序都没有机架服务器&#xff0c;那么答案就在于虚拟化。 它是为云提供支持的核心技术之一&#xff0c;在幕后悄悄工作&#xff0c;使现代计算高效、可扩展且具有成本效益。 在本文中&#x…...

用户登录构件示例

目录 一、登录构件概述 二、构件内部结构 1. 构件组成元素(表格形式) 2. 组件连接件设计...

【软件测试】基于项目驱动的功能测试报告

目录 一、项目的介绍 1.1 项目背景 二、测试目标 2.1 用户服务模块 2.1.1 用户注册模块 2.1.1.1 测试点 2.1.1.2 边界值分析法(等价类+边界值) 2.1.1.2.1 有效等价类 2.1.1.2.2 无效等价类 2.1.1.2.3 边界值 2.1.1.2.4 测试用例设计 2.2 文章标签模块 2.3 文章模…...

【QT】UDP通讯本地调试

qt已经写好了udp通讯代码&#xff0c;现在要进行测试。 1、终端输入ipconfig查看本机网卡的ipv4地址 2、 用udpBind函数&#xff0c;绑定到此ip和自定义的端口号。 3、 打开网络调试助手&#xff0c;自动检测到本机的ip地址&#xff0c;输入任意一个和程序里不一样的端口号。 …...

web animation API 锋利的css动画控制器 (更新中)

什么是web animation api 以及为什么要使用web animation api&#xff1f; web animation API 是web页面中控制DOM元素动画效果的javascript原生API。 它能够逐个关键帧控制动画效果&#xff0c;具有Timeline 机制‌能通过javascript来实现动画的暂停&#xff0c;播放&#x…...

Nginx的增强与可视化!OpenResty Manager - 现代化UI+高性能反向代理+安全防护

以下是对OpenResty Manager的简要介绍&#xff1a; OpenResty Manager &#xff08;Nginx 增强版&#xff09;&#xff0c;是一款容易使用、功能强大且美观的反向代理工具 &#xff0c;可以作为OpenResty Edge 的开源替代品基于 OpenResty 开发&#xff0c;支持并继承 OpenRes…...

Spring Boot 中的重试机制

Retryable 注解简介 Retryable 注解是 Spring Retry 模块提供的&#xff0c;用于自动重试可能会失败的方法。在微服务架构和分布式系统中&#xff0c;服务之间的调用可能会因为网络问题、服务繁忙等原因失败。使用 Retryable 可以提高应用的稳定性和容错能力 1。 使用步骤 &…...