前端基础知识+算法(一)
文章目录
- 算法
- 二分查找
- 条件
- 注意
- 方式
- 基本原理
- 左闭右闭
- 正向写法
- 左闭右开
- 正向写法
- 前端基础知识
- 定时器及清除
- 盒子垂直水平居中的方式
- 垂直水平
- 1.flex布局
- 2.grid布局
- 3.定位
- 对于块级元素
- 解决高度塌陷的方式
- 1.给父元素一个固定的高度
- 2.给父元素添加属性 overflow: hidden;
- 3.在子元素的末尾添加一个空的 div ,并设置下方样式
- 4.清除浮动
- 让盒子隐藏的几种方法
- 绝对定位,相对定位,固定定位
- 相对定位:relative
- 绝对定位:absolute
- 固定定位: fixed
- 几种长度单位的区别
- px
- em
- vw
- vh
- vm
- 闭包
- 内存泄漏
- 常见的内存泄漏
- 解决
- 事件冒泡和事件委托
- 事件冒泡
- 事件委托
- 事件冒泡和事件捕获的区别
- 伪数组和数组
- 伪数组转化成真数组的方法
- 数组的基本操作方法:
- 查找方法:
- 数组类的静态方法:
- 数组填充:
- 迭代方法:
- 修改原数组:
- 不修改原数组:
- call,apply,bind
- 箭头函数和普通函数
- this指向
- 防抖和节流
- Node. js有哪些全局对象
- Dom与Bom
算法
二分查找
##### 简介
二分查找法是一种高效的搜索算法,它用于在已经排好序的数组或者列表中快速找到目标值。它通过不断将搜索范围分割为两半来逐步缩小搜索范围,从而加速查找过程
条件
用于查找的内容逻辑上是有序的;
查找的数量只能是一个,而不能是多个
注意
在二分查找中,目标元素的查找区间的定义十分重要,不同的区间的定义写法不一样,左右区间开闭不一样,对应·的迭代方式也不一样
方式
左闭右闭 [left,right]
左闭右开 [left,right)
基本原理
首先选择数组中间的数字和需要查找的目标值比较,如果相等最好;如果不相等:如果中间的数字大于目标值,则中间向右的数字都大于目标值,全部排除;如果小于目标值,则左边的数字全部排除
数组长度是偶数还是奇数这个真的不重要,不影响怎么排除的问题,无非是多排除一个数字或者少排除一个数字
1.初始化搜索范围:定义两个指针left和right,分别指向数组的开始位置和结束位置
2.计算中间位置:计算中间索引 mid,通常使用 (left + right) / 2 公式
左闭右闭
正向写法
第一种写法:每次查找的区间在[left, right](左闭右闭区间),根据查找区间的定义(左闭右闭区间),就决定了后续的代码应该怎么写才能对。因为定义 target 在[left, right]区间,所以有如下两点:
1.循环条件要使用while(left <= right),因为当(left == right)这种情况发生的时候,得到的结果是有意义的
2.if(nums[middle] > target) , right 要赋值为 middle - 1, 因为当前的 nums[middle] 一定不是 target ,需要把这个 middle 位置上面的数字丢弃,那么接下来需要查找范围就是[left, middle - 1]
int search(int nums[], int size, int target) //nums是数组,size是数组的大小,target是需要查找的值
{int left = 0;int right = size - 1; // 定义了target在左闭右闭的区间内,[left, right]while (left <= right) { //当left == right时,区间[left, right]仍然有效int middle = left + ((right - left) / 2);//等同于 (left + right) / 2,防止溢出if (nums[middle] > target) {right = middle - 1; //target在左区间,所以[left, middle - 1]} else if (nums[middle] < target) {left = middle + 1; //target在右区间,所以[middle + 1, right]} else { //既不在左边,也不在右边,那就是找到答案了return middle;}}//没有找到目标值return -1;
}
左闭右开
正向写法
第二种写法:每次查找的区间在 [left, right),(左闭右开区间), 根据区间的定义,条件控制应该如下:
循环条件使用while (left < right)
if (nums[middle] > target), right = middle,因为当前的 nums[middle] 是大于 target 的,不符合条件,不能取到 middle,并且区间的定义是 [left, right),刚好区间上的定义就取不到 right, 所以 right 赋值为 middle。
int search(int nums[], int size, int target)
{int left = 0;int right = size; //定义target在左闭右开的区间里,即[left, right)while (left < right) { //因为left = right的时候,在[left, right)区间上无意义int middle = left + ((right - left) / 2);if (nums[middle] > target) {right = middle; //target 在左区间,在[left, middle)中 } else if (nums[middle] < target) {left = middle + 1;} else {return middle;}} // 没找到就返回-1return -1;
}
前端基础知识
定时器及清除
1.前端最常用的定时器,及清除方法
setTimeout
是延时的时间一到,就会去调用这个回调函数,而这个函数只会被调用一次,调用结束该定时器也就结束
let timer1=setTimeout(() => {console.log('Executed once after 1000ms');
}, 1000);
clearTimeout(timer1); // 清除一次性定时器
setInterval
是每隔一个延时的时间,就会重新调用这个函数,直到该定时器被清楚或者网页被关闭
let timer2=setInterval(()=>{console.log('Executed once after 1000ms');
},1000)
clearInterval(timer2)。 // 清除重复定时器
盒子垂直水平居中的方式
垂直水平
1.flex布局
display ;flex;
align-items:center;
justify-content:center;
2.grid布局
display:grid;
place-items:center;
3.定位
position:absolute;
top:50%;
left:50%;
4.margin
对于块级元素
//水平居中
设置margin:auto;
//垂直居中
再结合 position: relative 和 top: 50% 来垂直居中
水平居中

垂直居中

解决高度塌陷的方式
高度塌陷(即容器的高度为零或不如预期高)
1.给父元素一个固定的高度
缺点:违背了高度自适应原则
2.给父元素添加属性 overflow: hidden;
缺点:当子元素有定位属性时,设置 overflow: hidden; 容器以外的部分会被裁剪掉。
3.在子元素的末尾添加一个空的 div ,并设置下方样式
缺点:添加无意义的div,使页面结构冗杂
4.清除浮动
可以利用clear样式清除浮动
利用after伪类
给父元素定死高度
父元素添加overflow方法
在父元素中内容的最后添加一个伪元素来实现第三种方案的功能,具体设置样式如下:
父元素:
after{content: "";height: 0;clear: both;display: block;
}
让盒子隐藏的几种方法
1.display:none;
2.overlow:hidden;
3.opacity:0;
4.transform: translateX 将元素移出视口外
5.visibility:hidden;
6.可以用浮动 用一个盒子盖住另一个盒子
7.绝对定位或者固定定位 + left 或者 right 挪出视口外
绝对定位,相对定位,固定定位
相对定位:relative
特点:不脱离文档流 相对于自身在浏览器中的位置定位
绝对定位:absolute
特点: 1. 脱离文档流 原先位置不保留2. 默认定位元素,无论有没有祖先元素,相对于body定位3. 祖先元素设置了定位,相对于祖先元素定位(就近原则)
固定定位: fixed
特点:1.脱离文档流 原先位置不保留2.相对于浏览器视口区域
几种长度单位的区别
px
绝对长度单位
em
相对长度单位,以父元素的font-size为参照
vw
view width的简写,指可视窗口的宽度
可视窗口的宽度 = 100vw
vh
与vw类似
可视窗口的高度 = 100vh
vm
vw和vh中较小的那个
闭包
闭包是在函数内部又定义了一个函数并在内部函数中引用了外部函数的变量
好处:避免全局变量的污染
缺点:容易造成内存泄露
内存泄漏
常见的内存泄漏
闭包,意外的全局变量,未及时清理的定时器和回调函数,循环引用,没有清理的DOM元素引用
解决
首先避免它的使用,其次的话就是变量执行完以后,可以让它赋值为null,最后利用JS的一个垃圾回收机制进行回收
事件冒泡和事件委托
事件冒泡
在一个对象上触发某类事件,这个事件会向这个对象的父级传播,直至这个对象被处理或者达到了对象层次的最顶层,即Document对象
事件委托
事件委托就是利用事件冒泡的机制,利用一个事件处理程序从而达到控制管理者一类得所有事件
事件冒泡和事件捕获的区别
两者处理顺序不同,前者是从最深的节点开始逐级向上触发,后者是从文档根节点开始逐级向下触发
伪数组和数组
区别:伪数组类型是Object,数组类型是Array;伪数组的遍历用for in方法,可用length属性查看长度,可用index查找获取某个元素,不能用数组的其他方法
伪数组转化成真数组的方法
1.Array.from(伪数组)
2.Array.prototype.slice.call(伪数组)
3.[].slice.call(伪数组)
数组的基本操作方法:
push:往数组尾部添加一个元素。 返回数组的长度。
unshift:往数组头部添加一个元素。返回数组的长度。
pop:从数组尾部删除一个元素。返回删除的元素。
shift:从数组头部删除一个元素。返回删除的元素。
slice(开始位置,结束位置):截取数组一部分。只有一个元素则是开始位置,直到截取全部
splice(开始位置,长度,插入元素):删除、修改数组中的一部分元素。
reverse:反转数组。返回反转后的数组。
sort:对数组的元素进行排序。返回排序后的数组。
join:把数组变成字符串。若括号里什么都不写,则默认用逗号分隔。
toString:把数组变成字符串。
split:把字符串变成数组。
concat:合并数组,并返回结果。扩展运算符也可以合并数组。
Math.min:返回数组最小值元素。
Math.max:返回数组最大值元素。
length:获取当前数组的长度。
查找方法:
indexOf:查找数组元素,返回第一个找到的元素下标,找不到返回-1。
lastIndexOf:查找数组元素,返回最后一个找到的元素下标,找不到返回-1,从后向前搜索
includes: 查找数组是否包含某一元素,包含则返回 true,不包含返回 false。
find:查找满足函数条件的第一个值,找不到返回 undefined。
findIndex: 查找满足函数条件的第一个值得下标,找不到返回 -1。
数组类的静态方法:
Array.of:将一数值转化为数组。
Array.from:将类数组转化为数组。
数组填充:
fill(value,start,end):用一个固定值填充一个数组中特定的元素。
迭代方法:
for…in:遍历数组。会遍历数组内所有可枚举的属性,包括原型上的属性和方法。
forEach:遍历数组。不会生成新数组,也不改变原数组,回调函数接收三个值:( 数组的元素,索引,当前数组)
map:通过指定函数处理数组的每个元素,并返回处理后的数组。不会对空数组进行检测,不会改变原始数组。
filter:过滤,检测数组元素,并返回符合条件所有元素的数组。
every:检测数组元素的每个元素是否都符合条件,都符合则返回 true,否则为 false。
some:检测数组元素中是否有元素符合指定条件,有则返回 true,若所有元素都不满足判断条件,则返回 false。
修改原数组:
push、pop、shift、unshift、splice、reverse、sort、fill。
不修改原数组:
slice、concat、indexOf、lastIndexOf、join、toString、filter、every、some、forEach、map、find、findIndex。
call,apply,bind
三者都是改变this指向,接收的第一个参数是this的指向对象,都可利用后续参数传参,call()接受的是一个参数列表,apply()接受的是一个包含多个参数的数组,call()和bind()都是多个参数依次传入,apply()只有两个参数,第二个参数为数组,call()和apply()都是直接对函数进行调用,而bind()是直接床架一个改变this指向后的新函数
箭头函数和普通函数
箭头函数没有自己的this,它的this是继承来的,是外部上下文中的this,this指向不可被改变;
箭头函数是匿名函数,不能作为构造函数,不能使用new;
箭头函数不绑定arguments,用rest参数代替,
箭头函数通过捕获上下文中的this来作为自己的this;
箭头函数没有原型属性
普通函数在默认情况下,this指向的是window对象
this指向
1.全局上下文中的this,在全局作用域中,this指向全局对象
2.函数中的 this:在函数内部,this的值取决于函数的调用方式。具体取值有以下几种情况:
当函数作为普通函数调用时,this指向全局对象或 undefined(在严格模式下)。
当函数作为对象的方法调用时,this指向调用该方法的对象。
当函数作为构造函数调用时,this指向新创建的实例对象。
当函数通过 call()、apply() 或 bind() 方法调用时,this指向传入的第一个参数。
箭头函数中的 this:箭头函数没有自己的 this 值,它会继承外部上下文中的 this 值。
防抖和节流
防抖:单位时间内频繁触发一个事件,以最后一次为准
节流:单位时间内频繁触发一个事件,只会触发一次
Node. js有哪些全局对象
gobal,moudle,exports,process,console
Dom与Bom
DOM(Document Object Model)是文档对象模型的缩写,它提供了访问和操作HTML文档的API。BOM(Browser Object Model)是浏览器对象模型的缩写,它提供了与浏览器交互的API,包括window、location、navigator等对象,用于控制浏览器窗口的行为。
相关文章:
前端基础知识+算法(一)
文章目录 算法二分查找条件注意方式基本原理左闭右闭正向写法 左闭右开正向写法 前端基础知识定时器及清除盒子垂直水平居中的方式垂直水平1.flex布局2.grid布局3.定位对于块级元素 解决高度塌陷的方式1.给父元素一个固定的高度2.给父元素添加属性 overflow: hidden;3.在子元素…...
photozoom classic 9解锁码2024年最新25位解锁码
photozoom classic 9 破解版顾及比恐龙还要稀有,我曾经和你一样一直再找,找了好几个月,也没有找到真的破解版,下载很多次, 都是病毒插件之类的 我昨天下了几次,没有一个不附带插件病毒木马的.......&#x…...
Oracle发邮件功能:设置的步骤与注意事项?
Oracle发邮件配置教程?如何实现Oracle发邮件功能? Oracle数据库作为企业级应用的核心,提供了内置的发邮件功能,使得数据库管理员和开发人员能够通过数据库直接发送邮件。AokSend将详细介绍如何设置Oracle发邮件功能。 Oracle发邮…...
优化理论及应用精解【9】
文章目录 二次型函数二次型函数详细解释一、定义二、性质三、应用四、示例五、图表辅助说明(由于文本限制,无法直接提供图表) “西尔维斯特准则”一、定义二、来源三、应用场景 参考文献 二次型函数 二次型函数详细解释 一、定义 二次型函…...
nginx实现https安全访问的详细配置过程
文章目录 前言什么是 HTTP?什么是 HTTPS?HTTP 和 HTTPS 的区别为什么 HTTPS 被称为安全的?配置过程配置自签名证书 前言 首先我们来简单了解一下什么是http和https以及他们的区别所在. 什么是 HTTP? HTTP,全称为“超…...
1. TypeScript基本语法
TypeScript 学习总结 TypeScript 是一种 JavaScript 的超集,增加了静态类型检查和编译时错误检测,从而提高了代码的可维护性和可靠性。以下是 TypeScript 的基础知识总结,包括语法、运算符、数据类型、变量声明和作用域。 ## 基本语法TypeS…...
C# UDP与TCP点发【速发速断】模式
1、UDP 客户端 //由于收发都在本机,所以只用一个IP地址 IPAddress addr IPAddress.Parse("127.0.0.1"); var ptLocal new IPEndPoint(addr,9001);//本机节点,用于发送var ptDst new IPEndPoint(addr,9002);//目标节点…...
pikachu下
CSRF(跨站请求伪造) CSRF(get) url变成了这样了,我们就可以新开个页面直接拿url去修改密码 http://pikachu-master/vul/csrf/csrfget/csrf_get_login.php?username1&password2&submitLogin CSRF(post) 这里只是请求的方式不同,…...
Go语言开发im-websocket服务和vue3+ts开发类似微信pc即时通讯
前言 IM即时通讯聊天, 为软件开发者打造,不依赖第三方sdk,完全用Go语言开发即时通讯服务,支持H5、Electron、Wails 、Uniapp和各种小程序的IM即时通讯, 快速实现私聊、群聊、在线客服!让你快速搭建一个微信聊天系统,打…...
Redis如何实现分布式锁
目录 获取锁: 释放锁: Lua脚本: Redisson 分布式锁是,满足分布式系统或集群模式下多进程可见并且互斥的锁,因为我们熟知的java中的锁只是在单体架构下单个jvm中才会生效,如果部署了多个jvm则会导致新的…...
面向对象程序设计之继承(C++)
1.继承的定义 1.1继承的概念 继承(inheritance)机制是⾯向对象程序设计使代码可以复⽤的最重要的⼿段,它允许我们在保持原有类特性的基础上进⾏扩展,增加⽅法(成员函数)和属性(成员变量),这样产⽣新的类,称派⽣类。继承 呈现了⾯向…...
IAPP发布《2024年人工智能治理实践报告》
文章目录 前言一、黑箱问题►透明度、可理解性与可解释性二、法律和政策中的注意事项►欧盟的《通用数据保护条例》►欧盟的AI法案►NIST的AI风险管理框架►美国的第14110号行政命令►《生成式人工智能服务管理暂行办法》►新加坡的AI验证三、实施人工智能治理►模型卡与系统卡…...
了解MySQL 高可用架构:主从备份
为了防止数据库的突然挂机,我们需要对数据库进行高可用架构。主从备份是常见的场景,通常情况下都是“一主一从/(多从)”。正常情况下,都是主机进行工作,从机进行备份主机数据,如果主机某天突然意外宕机,从机…...
[OpenCV] 数字图像处理 C++ 学习——15像素重映射(cv::remap) 附完整代码
文章目录 前言1.像素重映射理论基础2.代码实现(1) remap()细节(2)水平翻转(2)垂直翻转(3)旋转 180 度(4)径向扭曲 3.完整代码 前言 像素重映射将图像中的每个像素映射到新位置,实现图像的扭曲、校正等操作。在 OpenCV 中,cv::remap() 函数就是用于实现这…...
Oreace每日运维操作
一.Oreace每日运维操作 目录 一.Oreace每日运维操作 1.1、确认所有的INSTANCE状态正常 1.2、检查文件系统的使用(剩余空间) 1.3 lwh暗码,,、检查日志文件和trace文件记录 1.4 lwh、检查数据库当日备份…...
【XR】AR HUD
1. AR HUD(head up display)原理 目标: 产业链上的各大Tier1及PGU企业都在积极开发这一技术,许多厂家已推出LCOS样机,比如说水晶光电、华阳集团、瀚思通、疆程已在北京车展或去年的上海车展上展出了LCOS方案的AR-HUD样…...
C/C++内存管理——内存泄漏/内存碎片
一、什么是内存泄漏 内存泄漏指的是在程序运行过程中,已经分配给程序使用的内存没有得到及时和正确的释放,导致这部分内存无法被程序再次使用或者被操作系统回收。内存泄漏通常发生在动态分配的内存上,如果这部分内存没有被正确释放,随着时间的推移,越来越多的内存将被占…...
使用 GaLore 预训练LLaMA-7B
项目代码: https://github.com/jiaweizzhao/galorehttps://github.com/jiaweizzhao/galore 参考博客: https://zhuanlan.zhihu.com/p/686686751 创建环境 基础环境配置如下: 操作系统: CentOS 7CPUs: 单个节点具有 1TB 内存的 Intel CP…...
gitlab无法push(pre-receive hook declined)
如果是个人的项目,托管在官网,可以参考这位大佬的, GitLab新建项目后push reject提交失败的解决办法_push rejected-CSDN博客 如果是公司的项目,去项目成员里看自己的身份,如果只是developer,是无法push到…...
物品识别——基于python语言
目录 1.物品识别 2.模型介绍 3.文件框架 4.代码示例 4.1 camera.py 4.2 interaction.py 4.3 object_detection.py 4.4 main.py 4.5 运行结果 5.总结 1.物品识别 该项目使用Python,OpenCV进行图像捕捉,进行物品识别。我们将使用YOLO(…...
在软件开发中正确使用MySQL日期时间类型的深度解析
在日常软件开发场景中,时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志,到供应链系统的物流节点时间戳,时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库,其日期时间类型的…...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...
【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)
🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...
CMake控制VS2022项目文件分组
我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...
稳定币的深度剖析与展望
一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...
2023赣州旅游投资集团
单选题 1.“不登高山,不知天之高也;不临深溪,不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...
【7色560页】职场可视化逻辑图高级数据分析PPT模版
7种色调职场工作汇报PPT,橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版:职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...
Java求职者面试指南:计算机基础与源码原理深度解析
Java求职者面试指南:计算机基础与源码原理深度解析 第一轮提问:基础概念问题 1. 请解释什么是进程和线程的区别? 面试官:进程是程序的一次执行过程,是系统进行资源分配和调度的基本单位;而线程是进程中的…...
日常一水C
多态 言简意赅:就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过,当子类和父类的函数名相同时,会隐藏父类的同名函数转而调用子类的同名函数,如果要调用父类的同名函数,那么就需要对父类进行引用&#…...
从“安全密码”到测试体系:Gitee Test 赋能关键领域软件质量保障
关键领域软件测试的"安全密码":Gitee Test如何破解行业痛点 在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的"神经中枢"。从国防军工到能源电力,从金融交易到交通管控,这些关乎国计民生的关键领域…...
