JavaScript WebApi(二) 详解
监听事件
介绍
事件监听是一种用于在特定条件下执行代码的编程技术。在Web开发中,事件监听器可以用于捕获和响应用户与页面交互的各种操作,如点击、滚动、输入等。
事件监听的基本原理是,通过在特定元素上注册事件监听器,当事件在该元素上触发时,相应的处理函数会被执行。以下是事件监听的基本步骤:
-
选择要监听事件的元素:可以使用JavaScript中的
document.getElementById()
、document.getElementsByClassName()
等方法,或者使用现代的JavaScript库和框架(如jQuery、React等)提供的选择器来选择要监听事件的元素。 -
注册事件监听器:使用元素的
addEventListener()
方法来注册事件监听器,该方法接受两个参数:要监听的事件类型和事件发生时要执行的处理函数。例如:element.addEventListener('click', handleClick)
。 -
编写事件处理函数:根据需要编写处理函数,它会在事件触发时被调用。处理函数可以接收一个事件对象作为参数,其中包含了与事件相关的信息,例如触发事件的元素、鼠标位置等。
-
执行相应的操作:在事件处理函数中编写代码来执行想要的操作,例如修改页面内容、发送请求、更新数据等。
-
可选:注销事件监听器。如果不再需要监听某个事件,可以使用
removeEventListener()
方法来注销事件监听器,以释放资源。例如:element.removeEventListener('click', handleClick)
。
推荐写法:
页面加载事件
加载外部资源(如图片,外链css和JavaScript)加载完毕时触发的事件。
基本使用:当我们需要实现只有资源显示的时候才执行对应步骤的效果时,可以使用页面加载事件(load)比如说当打开一个小说网站的时候,章节还没有加载完成,如果这时候鼠标一通乱点可能会执行一些用户不想要执行的事件,或导致体验感很差。
这边举一个常见的渲染案例。
效果展示:
代码:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title></title><style>*{padding:0;margin:0;box-sizing: border-box;}ul {width: 650px;}li{margin:10px;float: left;list-style: none;width: 100px;height: 100px;background-size: cover;transition: all .4s;}li:hover{transform: scale(1.2);border: 1px solid #ccc;box-shadow: 0 0 10px rgba(1,1,1,0.5);}</style>
</head>
<body><div class="main"><ul></ul></div><script>const ul = document.querySelector('.main ul')for(let i = 1 ; i <= 10 ; i++){const li = document.createElement('li')li.style.backgroundImage = `url('../Selenium入门/极简壁纸/${i}.jpg')`ul.append(li)}</script>
</body>
</html>
这是基本的渲染模块,我们加入一个事件监听。
加载事件:
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title></title><style>* {padding: 0;margin: 0;box-sizing: border-box;}ul {width: 650px;}li {margin: 10px;float: left;list-style: none;width: 100px;height: 100px;background-size: cover;transition: all .4s;}li:hover {transform: scale(1.2);border: 1px solid #ccc;box-shadow: 0 0 10px rgba(1, 1, 1, 0.5);}</style>
</head><body><div class="main"><ul></ul></div><script>window.onload = function () {const ul = document.querySelector('.main ul')for (let i = 1; i <= 10; i++) {const li = document.createElement('li')li.style.backgroundImage = `url('../Selenium入门/极简壁纸/${i}.jpg')`ul.append(li)}}</script>
</body></html>
页面点击事件
点击指定模块后执行相应的操作,使用click事件
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title></title><style>* {padding: 0;margin: 0;box-sizing: border-box;}ul {width: 650px;}li {margin: 10px;float: left;list-style: none;width: 100px;height: 100px;background-size: cover;transition: all .4s;}li:hover {transform: scale(1.2);border: 1px solid #ccc;box-shadow: 0 0 10px rgba(1, 1, 1, 0.5);}.d {position: fixed;right: 0;top: 100px;background-color: #ccc;}</style>
</head><body><div class="d"><div style="color: red;" data-id="1">顶部栏</div><div style="color:blue" data-id="2">下边栏</div></div><div class="main"><ul></ul></div><script>window.onload = function () {const ul = document.querySelector('.main ul')for (let i = 1; i <= 10; i++) {const li = document.createElement('li')li.style.backgroundImage = `url('../Selenium入门/极简壁纸/${i}.jpg')`ul.append(li)}// 点击事件在这里//开始const top = document.querySelector('div[data-id="1"]')const end = document.querySelector('div[data-id="2"]')top.addEventListener('click',function(){console.log("点了一下",top.innerHTML)})end.addEventListener('click',function(){console.log("点了一下",end.innerHTML)})//结束}window.addEventListener('scroll', function () {console.log(1)})</script>
</body></html>
页面滚动事件
看代码还能看段小说:想获取的话,看我之前的博客。直接scroll然后执行相应的事件
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title></title><style>* {padding: 0;margin: 0;box-sizing: border-box;}ul {width: 650px;}li {margin: 10px;float: left;list-style: none;width: 100px;height: 100px;background-size: cover;transition: all .4s;}li:hover {transform: scale(1.2);border: 1px solid #ccc;box-shadow: 0 0 10px rgba(1, 1, 1, 0.5);}</style>
</head><body><div class="main"><ul></ul></div><div>第4章敲门咚,咚咚。沉闷,怪异的敲门声依然以一个固定的频率响起,如一个调好的闹钟发出声响。教室的大门并没有锁上,甚至都没有拴住,只是随意的关上了而已,只要稍微用力的话就能轻易的推开。但是让人毛骨悚然的是,那个身穿黑色长衫,浑身布满尸斑的老人并没有推开大门,依然僵硬的站在那门外敲响着大门,没有丝毫想要进来的意思。可那老人虽然没有进来,但走廊外如墨汁一般浓郁的黑暗却是迅速袭来。整个教室开始发生了难以想象的巨大变化。崭新的墙壁上变的斑驳发霉,墙皮不断的脱落下来,变成了凹凸不平的墙面,那坑坑洼洼的墙面上更事长出了黑绿色的霉菌,散发出了一股阴冷,湿晦的味道,座椅上的书本迅速的变黄,然后腐烂,甚至连地面上的水泥也开始迅速的被风化了,露出了锈迹斑斑的钢筋,有些地方甚至开始出现了坍塌。仿佛在一瞬间的功夫这里已经经历了几十年的时间,被岁月给摧残。然而教室的灯光还在极力抗争着这股黑暗,白亮的灯光就像是风中残烛,散发出最后一丝昏暗的光亮,仿佛随时都要熄灭了一样。恐惧,出现在每一个学生的脸上,有人尖叫,有人呼救,也有人颤抖唯一镇定的是讲台上的周正。他一动不动,目光四处打量,留意着周围的任何动静。危险级别的鬼,还能拥有鬼域.这不是他能对付的。“周正,你看。”这个时候,方镜突然喊了一声,他脸色格外难看,指着教室课桌上的几个同学。之前并未留意,此刻看见方才反应过来。“咚,咚咚。”敲门声再次响起。这个时候刚才站在人群里活着的男同学突然浑身一颤,然后整个人僵直的栽倒在了地上。“李明你怎么了?”“怎么会这样,怎么会这样,谁来救救我们啊。”有女同学吓的瘫坐在地上哭泣道。“还之前还好好的,怎么突然就?”有人声音颤抖,哆哆嗦嗦的说道。一旁的方镜脸色铁青:“乱叫什么,门外有一只鬼,我们怎么死都有可能,能产生鬼域的鬼有多恐怖你们很快就会知道了。”其他人惊恐不已的看着他,一个个像是落入笼子之中的猎物,满是恐惧,慑慑发抖。“周正,还没有想出办法么?再想不出来我们都要死在这里。”方镜又怒道。他心中也在颤抖,因为鬼域之中谁都可能会死去,包括他。“啰嗦,你等不及的话就自己逃去,别指望我。”周正也一脸焦急,他不敢轻举妄动。“鬼域之中乱跑死的更快,你当我什么都不知道么?”方镜道。“既然知道就给我站在那里老实待着,真要死,你以为就你会死,所有人都一样,别以为知道一些东西就觉得自己很特殊,在鬼的面前人人平等。”周正道。“妈的。”方镜忍不住骂了一声。杨间此刻也手脚冰冷,他强迫自己冷静下来,因为这个时候不是开玩笑。可当他无意间看见那几乎要在墙壁上掉落下来的黑板时,顿时楞了一下。目光停留在了之前周正所写的那三句话上,尤其是最后一句:洞察鬼的规律。“周正不敢轻举妄动是因为他也在观察门外的那老人,寻找他的规律,只有找出规律,他才敢行动,快想想,快想想,这老人到底有什么规律可寻.”他脑子开始疯狂的转动起来,回想论坛里那个故事记录的一切,再联想到这眼前发生的事情。一定会有共同点,一定会有相似的地方。那个叫雷电法王的网友是在家里,当时他家的门是关上的,这个老人站在门外敲门然后进来了,接着来到房门口,再次敲门,然后又进来了。此刻,这只鬼出现在走廊外,同样也在敲门.但是还没有进来。为什么在那网友家中这老人进来了,这里却没有进来?同样的情况,同样的事情,是什么导致了其中的差异。是时间不够么?那么是什么时间不够。难道是敲门的时间不够?也许就是这里是关键。拼了。蓦地,杨间鼓起勇气喊道:“周正,是敲门声。”“敲门声?”周正一凝,目光灼灼的盯着这个突然出声的学生:“怎么说。”杨间忍住恐惧道:“虽然只是猜测,但我觉得这东西是在通过敲门方式来杀人的,也许那老人是在计时,也许是别的什么,但一定和敲门有关,如果能制止那东西敲门的话或许有用.”敲门杀人。如果真是这样那这鬼也未免太可怕了。“这家伙的潜力这么快就开始显现出来了”方镜目光很不善的看着他,死死的捏住了拳头:“绝不能让他活着离开这学校。”“相信你一回。”周正凝重的收回目光,他没有选择的余地。再不行动,这里的所有人都会死。立刻周正动了,他如一头狂暴的野兽般冲了出去,上瘦下肥的怪异身躯拥有着常人所不及的爆发力。“砰~!”一声巨响,教室的大门被他硬生生的撞开了,同时撞开了还有教室外那个身穿黑色长衫,一脸死灰,浑身长满尸斑的老人。老人撞倒,跌在了地上,可是没有人敢扶。他的身躯呈现一个怪异的姿势,就像是一个随意摆动手脚的僵直人偶一样,没有活人该有的韧性和柔软。鬼是杀不死的。周正自己写下的话自己当然不会忘记。哪怕这个老人被碾成泥,烧成灰,依然不会死,还会以一个匪夷所思的方式继续出现。能对付鬼的只有鬼。周正一咬牙,回头吼道:“你们看准时机,一有机会就逃出去,我来拖住这东西。”说完,他那宽大的风衣下,鼓起的肚子诡异的蠕动了几下。一只手,确切的说是一个手的轮廓,在一层皮肤的包裹下伸了出来,这只手呈现灰青色,指甲尖锐,仿佛要撕开那层肚皮从里面探出来。但包裹那只手的肚皮十分有韧性,并没有被撕破,而且让人恐惧的是,这只手足足伸出了两米多。这还是人的手么?就这样这只灰青色的怪手抓住了地上的老人。“滋滋~!”灯管闪烁的声音响起。瞬间,笼罩在教室内的黑暗消失不见了,明亮的灯光再次出现,虽然墙壁依然斑驳,地面还是要塌陷的样子,但似乎灾难得到了制止。“有用。”周正心中微微松了口气。但随后让他的眼睛却是陡然睁大,消瘦的几乎皮包骨的脸上被一股恐惧笼罩。倒在地上的老人此刻缓缓的站了起来,死灰色的眼睛微微转动了一下,似乎看向了周正。“不可能,被我限制了还能动?”周正脸色大变,当即回头吼道;“走,快走,趁着鬼域还没有出现,离开这里,我留在这里拖住这玩意。”这鬼,绝对不只是危险级别。他心中冷汗直冒。请收藏本站:https://www.bige3.cc。笔趣阁手机版:https://m.bige3.cc </div><script>window.onload = function () {const ul = document.querySelector('.main ul')for (let i = 1; i <= 10; i++) {const li = document.createElement('li')li.style.backgroundImage = `url('../Selenium入门/极简壁纸/${i}.jpg')`ul.append(li)}}window.addEventListener('scroll',function(){console.log(1)})</script>
</body></html>
基本使用的方法
使用scrollTop获取滚动的高度,这个高度指的是 页面被卷起来的高度,也可以直接修改页面高度,使用document.documentElement.scrollTop = 指定高度 这段代码用来直接修改当前页面的高度。
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title></title><style>* {padding: 0;margin: 0;box-sizing: border-box;}ul {width: 650px;}li {margin: 10px;float: left;list-style: none;width: 100px;height: 100px;background-size: cover;transition: all .4s;}li:hover {transform: scale(1.2);border: 1px solid #ccc;box-shadow: 0 0 10px rgba(1, 1, 1, 0.5);}.d {position: fixed;right: 0;top: 100px;background-color: #ccc;}</style>
</head><body><div class="d"><div style="color: red;" data-id="1">顶部栏</div><div style="color:blue" data-id="2">下边栏</div></div><div class="main"><ul></ul></div><script>window.onload = function () {const ul = document.querySelector('.main ul')for (let i = 1; i <= 10; i++) {const li = document.createElement('li')li.style.backgroundImage = `url('../Selenium入门/极简壁纸/${i}.jpg')`ul.append(li)}const top = document.querySelector('div[data-id="1"]')const end = document.querySelector('div[data-id="2"]')top.addEventListener('click',function(){//点击侧边栏的时候直接跳转到顶部document.documentElement.scrollTop = 0})end.addEventListener('click',function(){console.log("点了一下",end.innerHTML)//跳转到底部document.documentElement.scrollTop = 1000})//结束}window.addEventListener('scroll', function () {console.log(1)})</script>
</body></html>
记得点击事件应该在windows加载成功后才有的,所以要把事件获取写道onload之中
页面尺寸事件,使用resize事件
方法讲解:
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title></title><style>div{width: 500px;height: 500px;background-color: pink;}</style>
</head>
<body><div id="container"></div><script>// 获取容器元素var container = document.getElementById('container');// 定义处理函数function handleResize() {// 获取当前窗口的宽度和高度var windowWidth = window.innerWidth || document.documentElement.clientWidth;var windowHeight = window.innerHeight || document.documentElement.clientHeight;// 根据窗口大小调整容器样式if (windowWidth < 600) {container.style.backgroundColor = 'red';container.style.color = 'white';} else if (windowWidth >= 600 && windowHeight < 800) {container.style.backgroundColor = 'blue';container.style.color = 'white';} else {container.style.backgroundColor = 'yellow';container.style.color = 'black';}}// 添加事件监听器window.addEventListener('resize', handleResize);</script>
</body></html>
属性
获得宽高:offsetWidth offsetHeigh 获取元素的宽这个值包含元素自身设置的宽高,注意如果盒子时隐藏的获取的结果是0,注意该属性是只读属性并不可以修改。
焦点事件
直接使用focus (获得焦点)和blur(失去焦点)
- 获得焦点focus事件是当元素获得焦点时触发的事件。元素获得焦点意味着用户的操作重点放在该元素上,通常是通过点击或者通过键盘导航(Tab 键)来实现。
- 例如,当用户点击一个文本输入框时,该输入框就会获得焦点,这时就会触发focus事件。我们可以通过监听focus事件来执行特定的操作,比如显示相关的提示信息、改变样式等,以增强用户交互体验。
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head><body><input type="text" name="" id=""><script>const input = document.querySelector('input')input.addEventListener('focus', function () {input.value = '你好亲爱的读者'input.style.color = 'red'})input.addEventListener('blur', function () {input.value = '你好亲爱的读者'input.style.color = 'pink'})</script>
</body></html>
键盘事件
点击键盘keydown,脱离键盘keyup
其中监听对象e是记录键盘敲击按键对象,key是按键名称
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><input type="text"><script>const input = document.querySelector('input')input.addEventListener('keydown',function(e){ console.log(e.key)console.log("键盘敲0下")})input.addEventListener('keyup',function(){console.log("键盘起来")})</script>
</body>
</html>
表单提交事件
表单事件(submit、change):当用户提交表单或更改表单字段的值时触发。
change时只有当内容改变时才触发
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><input type="text"><script>const text = document.querySelector('input')text.addEventListener('change',function(){console.log("修改了")})</script>
</body>
</html>
鼠标事件
.鼠标事件(mousedown(点击)、mouseup(释放)、mousemove(移动)):当用户在页面上移动鼠标或按下鼠标按钮时触发。
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head><body><button id="myButton">点击我</button><script>const button = document.getElementById('myButton');button.addEventListener('mousedown', function () {console.log('按下鼠标按钮');});button.addEventListener('mouseup', function () {console.log('释放鼠标按钮');});button.addEventListener('mousemove', function () {console.log('移动鼠标');});</script>
</body></html>
以上是基本的事件监听,要是对你有帮助的话请留下一个赞。
相关文章:

JavaScript WebApi(二) 详解
监听事件 介绍 事件监听是一种用于在特定条件下执行代码的编程技术。在Web开发中,事件监听器可以用于捕获和响应用户与页面交互的各种操作,如点击、滚动、输入等。 事件监听的基本原理是,通过在特定元素上注册事件监听器,当事件…...

纯新手发布鸿蒙的第一个java应用
第一个java开发鸿蒙应用 1.下载和安装华为自己的app开发软件DevEco Studio HUAWEI DevEco Studio和SDK下载和升级 | HarmonyOS开发者 2.打开IDE新建工程(当前用的IDEA 3.1.1 Release) 选择第一个,其他的默认只能用(API9)版本,…...

UI自动化(selenium+python)之元素定位的三种等待方式!
前言 在UI自动化过程中,常遇到元素未找到,代码报错的情况。这种情况下,需要用等待wait。 在selenium中可以用到三种等待方式即sleep,implicitly_wait,WebDriverWait 一、固定等待(sleep) 导入time模块,设定固定的等待时间 缺…...

[C++]指针与结构体
标题 一.指针1.指针的定义和使用2.指针所占的内存空间3.空指针与野指针4.const修饰指针5.指针和数组6.指针和函数 二.结构体1.结构体的定义与使用2.结构体数组3.结构体指针4.结构体的嵌套使用5.结构体做函数参数6.结构体中const使用场景7.案例练习 一.指针 作用: 可以通过指针…...
注解原理是什么 Spring MVC常用的注解有哪些?
文章目录 注解原理是什么Spring MVC常用的注解有哪些? 通过这篇文章来和大家一起认识springMVC常用的注解,那么首先需要来了解注解。 注解原理是什么 注解本质是一个继承了Annotation的特殊接口,其具体实现类是Java运行时生成的动态代理类。…...

【数据结构】树与二叉树(廿五):树搜索指定数据域的结点(算法FindTarget)
文章目录 5.3.1 树的存储结构5. 左儿子右兄弟链接结构 5.3.2 获取结点的算法1. 获取大儿子、大兄弟结点2. 搜索给定结点的父亲3. 搜索指定数据域的结点a. 算法FindTargetb. 算法解析c. 代码实现a. 使用指向指针的指针b. 直接返回找到的节点 4. 代码整合 5.3.1 树的存储结构 5.…...

深度学习图像风格迁移 - opencv python 计算机竞赛
文章目录 0 前言1 VGG网络2 风格迁移3 内容损失4 风格损失5 主代码实现6 迁移模型实现7 效果展示8 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 深度学习图像风格迁移 - opencv python 该项目较为新颖,适合作为竞赛课题…...
提高SQL语句执行效率的8个方法
提高SQL语句执行效率的8个方法 在日常的数据库操作中,如何提高SQL语句的执行效率是每个程序员都需要关注的问题,SQL语句的执行效率对系统的性能有着重要影响,本文将介绍8种提高SQL语句执行效率的方法。 合理使用索引 索引介绍 索引是数据…...

C语言,通过数组实现循环队列
实现循环队列最难的地方就在于如何判空和判满,只要解决了这两点循环队列的设计就没有问题。接下来我们将会使用数组来实现循环队列。 接下来,为了模拟实现一个容量为4的循环队列,我们创建一个容量为4 1 的数组。 接下来我们将会对这个数组…...

python+pygame+opencv+gpt实现虚拟数字人直播(一)
AI技术突飞猛进,不断的改变着人们的工作和生活。数字人直播作为新兴形式,必将成为未来趋势,具有巨大的、广阔的、惊人的市场前景。它将不断融合创新技术和跨界合作,提供更具个性化和多样化的互动体验,成为未来的一种趋…...

c语言:模拟实现各种字符串函数(2)
strncpy函数: 功能:拷贝指定长度的字符串a到字符串b中 代码模拟实现: //strncpy char* my_strncpy(char* dest, char* str,size_t num) {char* ret dest;assert(dest && str);//断言,如果其中有一个为空指针ÿ…...

【Proteus仿真】【STM32单片机】感应水龙头设计
文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真STM32单片机控制器,使用LCD1602液晶模块、HCSR04超声波等。 主要功能: 系统运行后,LCD1602显示超声波模块检测的距离,若检测距离小…...

P15 C++ 枚举
The ChenPi 前言 今天我们要讲的是 C 中的枚举。 enum 是 enumeration 的缩写,基本上可以说,它就是一个数值集合。如果你想要给枚举一个更实际的定义,它们是给一个值命名的一种方法。 所以我们不用一堆叫做 A、B、C 的整数。我们可以有一个…...

深入理解路由协议:从概念到实践
路由技术是Internet得以持续运转的关键所在,路由是极其有趣而又复杂的课题,永远的话题。 SO:这是一个解析路由协议的基础文章。 目录 前言路由的概念路由协议的分类数据包在网络中的路由过程理解路由表的结构路由器关键功能解析 前言 在互联…...

Qt 串口编程-从入门到实战
1. Qt 串口通信流程解析 1.1 串行通信和并行通信对比 并行通信适合距离较短的通信,且信号容易受干扰,成本高串口通讯-设备(蓝牙, wifi, gprs, gps) 1.2 Qt 串口通信具体流程 1. 创建 QSerial…...

如何获得微软MVP徽章
要成为微软MVP,需要在特定领域成为专家,并积极参与社区,为其他人提供帮助和支持。以下是一些步骤可以帮助你成为MVP: 在特定领域成为专家:要成为MVP,需要在某个领域具有专业知识和经验。这可以通过阅读相关…...

Java架构师软件架构开发
目录 1 基于架构的软件开发导论2 ABSD架构方法论3 ABSD方法论具体实现4 ABSD金融业案例5 基于特定领域的软件架构开发导论6 DSSA领域分析7 DSSA领域设计和实现8 DSSA国际电商平台架构案例9 架构思维方法论概述10 AT方法论和案例想学习架构师构建流程请跳转:Java架构师系统架构…...

西南科技大学数字电子技术实验一(数字信号基本参数与逻辑门电路功能测试及FPGA 实现 )预习报告
手写报告稍微认真点写,80+随便有 目录 一、计算/设计过程 1、通过虚拟示波器观察和测量信号 2、通过实际电路(电阻、开关、发光二极管)模拟逻辑门电路 二、画出并填写实验指导书上的预表...
Java八股文面试全套真题【含答案】- SpringMVC篇
以下是一些关于Spring MVC语言的经典面试题以及它们的答案: 什么是Spring MVC框架?它的特点是什么? Spring MVC是基于Java的一种Web应用框架,用于开发基于MVC(模型-视图-控制器)模式的Web应用程序。它的特…...

Spring第二课响应的完全,如何理解前后端互联
目录 一、响应 Control,RestController 1.Controller的源码,代表什么意思 2.返回数据 Responsebody 3.返回HTML片段 4.返回JSON 5.那么假如我们使用集合会怎么样呢 设置状态码,虽然不影响展示,但是确实显示起来也就是401的情况。 2.我…...
Android Wi-Fi 连接失败日志分析
1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分: 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析: CTR…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...

聊聊 Pulsar:Producer 源码解析
一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台,以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中,Producer(生产者) 是连接客户端应用与消息队列的第一步。生产者…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)
宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

mac 安装homebrew (nvm 及git)
mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用: 方法一:使用 Homebrew 安装 Git(推荐) 步骤如下:打开终端(Terminal.app) 1.安装 Homebrew…...
Redis:现代应用开发的高效内存数据存储利器
一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发,其初衷是为了满足他自己的一个项目需求,即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源,Redis凭借其简单易用、…...

[ACTF2020 新生赛]Include 1(php://filter伪协议)
题目 做法 启动靶机,点进去 点进去 查看URL,有 ?fileflag.php说明存在文件包含,原理是php://filter 协议 当它与包含函数结合时,php://filter流会被当作php文件执行。 用php://filter加编码,能让PHP把文件内容…...
区块链技术概述
区块链技术是一种去中心化、分布式账本技术,通过密码学、共识机制和智能合约等核心组件,实现数据不可篡改、透明可追溯的系统。 一、核心技术 1. 去中心化 特点:数据存储在网络中的多个节点(计算机),而非…...
第八部分:阶段项目 6:构建 React 前端应用
现在,是时候将你学到的 React 基础知识付诸实践,构建一个简单的前端应用来模拟与后端 API 的交互了。在这个阶段,你可以先使用模拟数据,或者如果你的后端 API(阶段项目 5)已经搭建好,可以直接连…...