JavaScript之事件高级(53rd)

news2025/8/3 8:51:18

1、注册事件(绑定事件)

给元素添加事件,称为注册事件或者绑定事件。

注册事件有两种方式:传统方式和方法监听注册方式
在这里插入图片描述

1、addEventListener事件监听方式

1、eventTarget.addEventListener()方法将指定的监听器注册到 eventTarget(目标对象)上
2、当该对象触发指定的事件时,就会执行事件处理函数

eventTarget.addEventListener(type,listener[,useCapture])

该方法接收三个参数:

1、type:事件类型字符串,比如click,mouseover,注意这里不要带on
2、listener:事件处理函数,事件发生时,会调用该监听函数
3、useCapture:可选参数,是一个布尔值,默认是 false。学完 DOM 事件流后,我们再进一步学习

<body>
    <button>传统注册事件</button>
    <button>方法监听注册事件</button>
    <button>ie9 attachEvent</button>
    <script>
        var btns = document.querySelectorAll('button');
        // 1. 传统方式注册事件
        btns[0].onclick = function() {
            alert('hi');
        }
        btns[0].onclick = function() {
                alert('hao a u');
            }
            // 2. 事件监听注册事件 addEventListener 
            // (1) 里面的事件类型是字符串 所以加引号 而且不带on
            // (2) 同一个元素 同一个事件可以添加多个侦听器(事件处理程序)
        btns[1].addEventListener('click', function() {
            alert(22);
        })
        btns[1].addEventListener('click', function() {
                alert(33);
            })
            // 3. attachEvent ie9以前的版本支持
        btns[2].attachEvent('onclick', function() {
            alert(11);
        })
    </script>
</body>

2、attachEvent事件监听方式(兼容)

1、eventTarget.attachEvent()方法将指定的监听器注册到 eventTarget(目标对象) 上
2、当该对象触发指定的事件时,指定的回调函数就会被执行

eventTarget.attachEvent(eventNameWithOn,callback)

该方法接收两个参数:

1、eventNameWithOn:事件类型字符串,比如 onclick 、onmouseover ,这里要带 on
2、callback: 事件处理函数,当目标触发事件时回调函数被调用
3、ie9以前的版本支持

3、注册事件兼容性解决方案

兼容性处理的原则:首先照顾大多数浏览器,再处理特殊浏览器

 function addEventListener(element, eventName, fn) {
      // 判断当前浏览器是否支持 addEventListener 方法
      if (element.addEventListener) {
        element.addEventListener(eventName, fn);  // 第三个参数 默认是false
      } else if (element.attachEvent) {
        element.attachEvent('on' + eventName, fn);
      } else {
        // 相当于 element.onclick = fn;
        element['on' + eventName] = fn;
 } 

2、删除事件(解绑事件)

2.1、removeEventListener删除事件方式

eventTarget.removeEventListener(type,listener[,useCapture]);

该方法接收三个参数:

1、type:事件类型字符串,比如click,mouseover,注意这里不要带on
2、listener:事件处理函数,事件发生时,会调用该监听函数
3、useCapture:可选参数,是一个布尔值,默认是 false。学完 DOM 事件流后,我们再进一步学习

2.2、detachEvent删除事件方式(兼容)

eventTarget.detachEvent(eventNameWithOn,callback);

该方法接收两个参数:

1、eventNameWithOn:事件类型字符串,比如 onclick 、onmouseover ,这里要带 on
2、callback: 事件处理函数,当目标触发事件时回调函数被调用
3、ie9以前的版本支持

2.3、传统事件删除方式

eventTarget.onclick = null;

事件删除示例:

<body>
    <div>1</div>
    <div>2</div>
    <div>3</div>
    <script>
        var divs = document.querySelectorAll('div');
        divs[0].onclick = function() {
            alert(11);
            // 1. 传统方式删除事件
            divs[0].onclick = null;
        }
        // 2.removeEventListener 删除事件
        divs[1].addEventListener('click',fn);   //里面的fn不需要调用加小括号

        function fn(){
            alert(22);
            divs[1].removeEventListener('click',fn);
        }
        // 3.IE9 中的删除事件方式
        divs[2].attachEvent('onclick',fn1);
        function fn1() {
            alert(33);
            divs[2].detachEvent('onclick',fn1);
        }
    </script>

</body>

2.4、删除事件兼容性解决方案

 function removeEventListener(element, eventName, fn) {
      // 判断当前浏览器是否支持 removeEventListener 方法
      if (element.removeEventListener) {
        element.removeEventListener(eventName, fn);  // 第三个参数 默认是false
      } else if (element.detachEvent) {
        element.detachEvent('on' + eventName, fn);
      } else {
        element['on' + eventName] = null;
 } 

3、DOM事件流(事件传播过程)

1、事件流描述的是从页面中接收事件的顺序
2、事件发生时会在元素节点之间按照特定的顺序传播,这个传播过程即DOM事件流
在这里插入图片描述
1、事件冒泡: IE 最早提出,事件开始时由最具体的元素接收,然后逐级向上传播到到 DOM 最顶层节点的过程。

2、事件捕获: 网景最早提出,由 DOM 最顶层节点开始,然后逐级向下传播到到最具体的元素接收的过程。

加深理解:

我们向水里面扔一块石头,首先它会有一个下降的过程,这个过程就可以理解为从最顶层向事件发生的最具体元素(目标点)的捕获过程;之后会产生泡泡,会在最低点( 最具体元素)之后漂浮到水面上,这个过程相当于事件冒泡。
在这里插入图片描述

3.1、捕获阶段

document -> html -> body -> father -> son
两个盒子嵌套,一个父盒子一个子盒子,我们的需求是当点击父盒子时弹出 father ,当点击子盒子时弹出 son

<body>
    <div class="father">
        <div class="son">son盒子</div>
    </div>
    <script>
        // dom 事件流 三个阶段
        // 1. JS 代码中只能执行捕获或者冒泡其中的一个阶段。
        // 2. onclick 和 attachEvent(ie) 只能得到冒泡阶段。
        // 3. 捕获阶段 如果addEventListener 第三个参数是 true 那么则处于捕获阶段  document -> html -> body -> father -> son
        var son = document.querySelector('.son');
        son.addEventListener('click', function() {
             alert('son');
        }, true);
        var father = document.querySelector('.father');
        father.addEventListener('click', function() {
            alert('father');
        }, true);
    </script>
</body>

但是因为DOM流的影响,我们点击子盒子,会先弹出 father,之后再弹出 son
在这里插入图片描述
这是因为捕获阶段由 DOM 最顶层节点开始,然后逐级向下传播到到最具体的元素接收

1、document -> html -> body -> father -> son

2、先看 document 的事件,没有;再看 html 的事件,没有;再看 body 的事件,没有;再看 father 的事件,有就先执行;再看 son 的事件,再执行。

3.2、冒泡阶段

son -> father ->body -> html -> document

<body>
    <div class="father">
        <div class="son">son盒子</div>
    </div>
    <script>
		// 4. 冒泡阶段 如果addEventListener 第三个参数是 false 或者 省略 那么则处于冒泡阶段  son -> father ->body -> html -> document
        var son = document.querySelector('.son');
        son.addEventListener('click', function() {
            alert('son');
        }, false);
        var father = document.querySelector('.father');
        father.addEventListener('click', function() {
            alert('father');
        }, false);
        document.addEventListener('click', function() {
            alert('document');
        })
    </script>
</body>

我们点击子盒子,会弹出 son、father、document
在这里插入图片描述
这是因为冒泡阶段开始时由最具体的元素接收,然后逐级向上传播到到 DOM 最顶层节点

son -> father ->body -> html -> document

3.3、小结

1、JS 代码中只能执行捕获或者冒泡其中的一个阶段

2、onclickattachEvent只能得到冒泡阶段

3、addEventListener(type,listener[,useCapture])第三个参数如果是 true,表示在事件捕获阶段调用事件处理程序;如果是 false (不写默认就是false),表示在事件冒泡阶段调用事件处理程序

4、实际开发中我们很少使用事件捕获,我们更关注事件冒泡。

5、有些事件是没有冒泡的,比如 onblur、onfocus、onmouseenter、onmouseleave

4、事件对象(event)

1、什么是事件对象

eventTarget.onclick = function(event) {
   // 这个 event 就是事件对象,我们还喜欢的写成 e 或者 evt 
} 
eventTarget.addEventListener('click', function(event) {
   // 这个 event 就是事件对象,我们还喜欢的写成 e 或者 evt  
})

1、官方解释:event 对象代表事件的状态,比如键盘按键的状态、鼠标的位置、鼠标按钮的状态
2、简单理解:
1、事件发生后,跟事件相关的一系列信息数据的集合都放到这个对象里面
2、这个对象就是事件对象 event,它有很多属性和方法,比如“
1、谁绑定了这个事件
2、鼠标触发事件的话,会得到鼠标的相关信息,如鼠标位置
3、键盘触发事件的话,会得到键盘的相关信息,如按了哪个键
3、这个 event 是个形参,系统帮我们设定为事件对象,不需要传递实参过去
4、当我们注册事件时, event 对象就会被系统自动创建,并依次传递给事件监听器(事件处理函数)

<body>
    <div>123</div>
    <script>
        // 事件对象
        var div = document.querySelector('div');
        div.onclick = function(e) {
                // console.log(e);
                // console.log(window.event);
                // e = e || window.event;
                console.log(e);


            }
        // 1. event 就是一个事件对象 写到我们侦听函数的 小括号里面 当形参来看
        // 2. 事件对象只有有了事件才会存在,它是系统给我们自动创建的,不需要我们传递参数
        // 3. 事件对象 是 我们事件的一系列相关数据的集合 跟事件相关的 比如鼠标点击里面就包含了鼠标的相关信息,鼠标坐标啊,如果是键盘事件里面就包含的键盘事件的信息 比如 判断用户按下了那个键
        // 4. 这个事件对象我们可以自己命名 比如 event 、 evt、 e
        // 5. 事件对象也有兼容性问题 ie678 通过 window.event 兼容性的写法  e = e || window.event;
    </script>
</body>

2、事件对象的兼容性方案

事件对象本身的获取存在兼容问题:

1、标准浏览器中是浏览器给方法传递的参数,只需要定义形参 e 就可以获取到。
2、在 IE6~8 中,浏览器不会给方法传递参数,如果需要的话,需要到 window.event 中获取查找

解决:

e = e || window.event;

3、事件对象的常见属性和方法

在这里插入图片描述

4、e.target 和 this 的区别

1、e.target :e.target 返回的是触发事件的对象(元素),点击了哪个元素触发了事件,就返回那个元素。
2、this:事件绑定的元素,这个事件函数的调用者。

点击了某一个元素节点,这个节点不一定绑定了事件。但是由于 DOM 事件流的冒泡现象,会触发其父节点所绑定的事件。

<body>
    <ul>
        <li>123</li>
        <li>456</li>
        <li>789</li>
    </ul>
    <script>
        let ul = document.querySelector("ul");
        ul.addEventListener('click', function (e) {
            // 点击 li 中的 123
            console.log(e.target); // <li>...</li>
            console.log(this); // <ul>...</ul>
        })
    </script>
</body>

了解:跟this有一个非常相似的属性 currentTarget ie678不认识

5、事件对象阻止默认行为

阻止默认行为(事件) 让链接不跳转 或者让提交按钮不提交 ,e.preventDefault()

<body>
    <div>123</div>
    <a href="http://www.baidu.com">百度</a>
    <form action="http://www.baidu.com">
        <input type="submit" value="提交" name="sub">
    </form>
    <script>
        // 常见事件对象的属性和方法
        // 1. 返回事件类型
        var div = document.querySelector('div');
        div.addEventListener('click', fn);
        div.addEventListener('mouseover', fn);
        div.addEventListener('mouseout', fn);

        function fn(e) {
            console.log(e.type);

        }
        // 2. 阻止默认行为(事件) 让链接不跳转 或者让提交按钮不提交
        var a = document.querySelector('a');
        a.addEventListener('click', function(e) {
                e.preventDefault(); //  dom 标准写法
            })
            // 3. 传统的注册方式
        a.onclick = function(e) {
            // 普通浏览器 e.preventDefault();  方法
            // e.preventDefault();
            // 低版本浏览器 ie678  returnValue  属性
            // e.returnValue;
            // 我们可以利用return false 也能阻止默认行为 没有兼容性问题 特点: return 后面的代码不执行了, 而且只限于传统的注册方式
            return false;
            alert(11);
        }
    </script>
</body>

6、阻止事件冒泡

1、阻止事件冒泡的两种方式

事件冒泡:开始时由最具体的元素接收,然后逐级向上传播到到 DOM 最顶层节点

事件冒泡本身的特性,会带来的坏处,也会带来的好处,需要我们灵活掌握。

1、标准写法

e.stopPropagation();

2、非标准写法: IE6-8 利用对象事件 cancelBubble属性

e.cancelBubble = true;

一个例子:点击 son 子盒子,在设置阻断事件冒泡前,点击子盒子也触发了父盒子 fahter 的事件。设置了之后,打印台不再输出 father。

<body>
    <div class="father">
        <div class="son">son儿子</div>
    </div>
    <script>
        // 常见事件对象的属性和方法
        // 阻止冒泡  dom 推荐的标准 stopPropagation() 
        var son = document.querySelector('.son');
        son.addEventListener('click', function(e) {
            alert('son');
            e.stopPropagation(); // stop 停止  Propagation 传播
            e.cancelBubble = true; // 非标准 cancel 取消 bubble 泡泡
        }, false);

        var father = document.querySelector('.father');
        father.addEventListener('click', function() {
            alert('father');
        }, false);
        document.addEventListener('click', function() {
            alert('document');
        })
    </script>
</body>

2、阻止事件冒泡的兼容性解决方案

if(e && e.stopPropagation){
      e.stopPropagation();
  }else{
      window.event.cancelBubble = true;
  }

7、事件委托

1、事件委托也称为事件代理,在 jQuery 里面称为事件委派

2、事件委托的原理
不是每个子节点单独设置事件监听器,而是事件监听器设置在其父节点上,然后利用冒泡原理影响设置每个子节点

案例:
点击每个 li 都会弹出对话框,以前需要给每个 li 注册事件,是非常辛苦的,而且访问 DOM 的次数越多,这就会延长整个页面的交互就绪时间。

<body>
    <ul>
        <li>知否知否,点我应有弹框在手!</li>
        <li>知否知否,点我应有弹框在手!</li>
        <li>知否知否,点我应有弹框在手!</li>
        <li>知否知否,点我应有弹框在手!</li>
        <li>知否知否,点我应有弹框在手!</li>
    </ul>
    <script>
        // 事件委托的核心原理:给父节点添加侦听器, 利用事件冒泡影响每一个子节点
        var ul = document.querySelector('ul');
        ul.addEventListener('click', function(e) {
            // alert('知否知否,点我应有弹框在手!');
            // e.target 这个可以得到我们点击的对象
            e.target.style.backgroundColor = 'pink';
            // 点了谁,就让谁的style里面的backgroundColor颜色变为pink
        })
    </script>
</body>

以上案例:给 ul 注册点击事件,然后利用事件对象的 target 来找到当前点击的 li,因为点击 li,事件会冒泡到 ul 上, ul 有注册事件,就会触发事件监听器。

8、常见的鼠标事件

在这里插入图片描述

1、禁止鼠标右键与鼠标选中

1、contextmenu主要控制应该何时显示上下文菜单,主要用于程序员取消默认的上下文菜单
2、selectstart 禁止鼠标选中

<body>
    <h1>我是一段不愿意分享的文字</h1>
    <script>
        // 1. contextmenu 我们可以禁用右键菜单
        document.addEventListener('contextmenu', function(e) {
                e.preventDefault(); // 阻止默认行为
            })
            // 2. 禁止选中文字 selectstart
        document.addEventListener('selectstart', function(e) {
            e.preventDefault();

        })
    </script>
</body>

2、鼠标事件对象

1、event对象代表事件的状态,跟事件相关的一系列信息的集合
2、现阶段我们主要是用鼠标事件对象 MouseEvent 和键盘事件对象 KeyboardEvent。
在这里插入图片描述

<body>
    <script>
        // 鼠标事件对象 MouseEvent
        document.addEventListener('click', function(e) {
            // 1. client 鼠标在可视区的x和y坐标
            console.log(e.clientX);
            console.log(e.clientY);
            console.log('---------------------');

            // 2. page 鼠标在页面文档的x和y坐标
            console.log(e.pageX);
            console.log(e.pageY);
            console.log('---------------------');

            // 3. screen 鼠标在电脑屏幕的x和y坐标
            console.log(e.screenX);
            console.log(e.screenY);

        })
    </script>
</body>

3、跟随鼠标运动的天使案例(mousemove)

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        img {
            position: absolute;
            top: 2px;
        }
    </style>
</head>

<body>
    <img src="images/angel.gif" alt="">
    <script>
        var pic = document.querySelector('img');
        document.addEventListener('mousemove', function(e) {
            // 1. mousemove只要我们鼠标移动1px 就会触发这个事件
            // console.log(1);
            // 2.核心原理: 每次鼠标移动,我们都会获得最新的鼠标坐标, 把这个x和y坐标做为图片的top和left 值就可以移动图片
            var x = e.pageX;
            var y = e.pageY;
            console.log('x坐标是' + x, 'y坐标是' + y);
            //3 . 千万不要忘记给left 和top 添加px 单位
            pic.style.left = x - 50 + 'px';
            pic.style.top = y - 40 + 'px';


        });
    </script>
</body>

</html>

9、常用的键盘事件

1、常用的键盘事件

在这里插入图片描述
1、如果使用addEventListener 不需要加 on
2、onkeypress 和前面2个的区别是,它不识别功能键,比如左右箭头,shift 等
3、三个事件的执行顺序是: keydown – keypress — keyup

<body>
    <script>
        // 常用的键盘事件
        //1. keyup 按键弹起的时候触发 
        // document.onkeyup = function() {
        //         console.log('我弹起了');

        //     }
        document.addEventListener('keyup', function() {
            console.log('我弹起了');
        })

        //3. keypress 按键按下的时候触发  不能识别功能键 比如 ctrl shift 左右箭头啊
        document.addEventListener('keypress', function() {
                console.log('我按下了press');
            })
            //2. keydown 按键按下的时候触发  能识别功能键 比如 ctrl shift 左右箭头啊
        document.addEventListener('keydown', function() {
                console.log('我按下了down');
            })
            // 4. 三个事件的执行顺序  keydown -- keypress -- keyup
    </script>
</body>

2、键盘对象属性

在这里插入图片描述
1、onkeydownonkeyup 不区分字母大小写,onkeypress 区分字母大小写。
2、在我们实际开发中,我们更多的使用keydownkeyup, 它能识别所有的键(包括功能键)
3、Keypress 不识别功能键,但是keyCode属性能区分大小写,返回不同的ASCII值

<body>
    <script>
        // 键盘事件对象中的keyCode属性可以得到相应键的ASCII码值
        // 1. 我们的keyup 和keydown事件不区分字母大小写  a 和 A 得到的都是65
        // 2. 我们的keypress 事件 区分字母大小写  a  97 和 A 得到的是65
        document.addEventListener('keyup', function(e) {
            console.log('up:' + e.keyCode);
            // 我们可以利用keycode返回的ASCII码值来判断用户按下了那个键
            if (e.keyCode === 65) {
                alert('您按下的a键');
            } else {
                alert('您没有按下a键')
            }

        })
        document.addEventListener('keypress', function(e) {
            console.log('press:' + e.keyCode);
        })
    </script>
</body>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/15920.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

springMVC异常处理的知识点+异常处理案例

springMVC异常处理的知识点异常处理案例 异常介绍&#xff1a; 我们知道系统中的异常包括两类&#xff1a;预期异常和运行时异常RuntimeException,前者通过捕获异常从而获取异常信息&#xff0c;后者主要通过规范代码开发、测试等手段减少运行时异常的发生 在SpringMVC处理异…

有关服务器虚拟化的常见问题解答

虚拟化”一词经常使用&#xff0c;尤其是与服务器相关的时候。以下是一些有关服务器虚拟化常见问题的解答。 什么是服务器虚拟化? 虚拟化是一个经常应用于范围广泛的技术的术语。从本质上讲&#xff0c;虚拟化技术就是使用分布式软件硬件。在服务器虚拟化领域&#xff0c;这意…

Android

直接运行 最新版的 apktool 可以通过brew安装&#xff0c;命令如下 brew install apktool # 验证安装结果apktool -version (Mac)反编译Android APK详细操作指南[ApkTool,dex2jar,JD-GUI] - CrazyCodeBoy的技术博客官网|CrazyCodeBoy|Devio|专注移动技术开发(Android&I…

【计算机网络】广域网协议分析

注&#xff1a;最后有面试挑战&#xff0c;看看自己掌握了吗 文章目录广域网WAN广域网局域网区别PPP协议----链路层------广域网PPP协议组成3个ppp状态图PPP协议帧格式HDLC协议--------链路层------广域网帧格式------无监信PPP协议和HDLC&#x1f343;博主昵称&#xff1a;一拳…

通用Mapper获取数据表中id为0解决方法。千万别瞎改int为integer了

项目场景&#xff1a; 最近准备自己写一个框架。由于是舍弃了成熟框架&#xff0c;所以在集成一些组件的时候&#xff0c;发现了一些之前没有注意过的问题。 这次是集成通用mapper时出现的一个问题。。。 问题描述 使用通用Mapper的selectAll()方法后&#xff0c;得到的id值都…

Java【抽象类和接口】是什么?

文章目录前言一、抽象类1.什么是抽象类2.抽象类的特征3.抽象类的作用二、接口1.什么是接口2.语法规范3.接口的使用4.接口的特征5.实现多个接口6.接口间的继承总结前言 前篇文章分享过了 面向对象语言的三大特征&#xff1a;封装&#xff0c;继承&#xff0c;多态 本篇呢将继续…

LCR表测电容怎么实现连续测试?ATECLOUD云测试平台帮您解决

河南某企业在生产测试中需要用到LCR表测试电容的容量和损耗&#xff0c;目前在使用是德科技E4980a LCR 测试数据时&#xff0c;发现不能连续测试&#xff0c;不能自动记录数据。通过和纳米软件Namisoft沟通&#xff0c;希望我们可以实现连续测试并将测试数据自动记录&#xff0…

steam搬砖项目,当下最稳定长久的

我为什么这么推荐普通人来做CSGO搬砖&#xff0c;最主要的原因就两点&#xff0c;一是平台流量大知道的人少&#xff0c;二就是不需要什么成本&#xff01; CSGO是基于steam衍生出来的&#xff0c;steam的流量池有多大&#xff0c;想必大家都心知肚明&#xff0c; Steam平台是…

实验(一):开发环境的安装及基本操作

一、实验目的与任务 实验目的&#xff1a; 1. 掌握KeilC集成开发环境的安装及基本操作&#xff1b; 2. 掌握Protues仿真软件的安装及基本操作。 任务&#xff1a; 1.完成KeilC集成开发环境的安装&#xff0c;建立工程&#xff1b; 2. 完成Protues仿真软件的安装&#xff0c;建立…

[附源码]java毕业设计票务销售网站

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Gartner发布首份中国RPA魔力象限报告,弘玑Cyclone被重点推荐

11月17日&#xff0c;国际权威研究机构Gartner重磅发布首份中国RPA魔力象限报告&#xff1a;《China Context: Magic Quadrant for Robotic Process Automation》。 毫无悬念&#xff0c;在2022全球RPA魔力象限报告&#xff08;Gartner RPA MQ&#xff09;中表现优异的弘玑Cyc…

魔百和CM311-1A_YST、(YM)_安卓9_S905L3A_默认开启ADB_纯净精简语音_完美线刷包

魔百和CM311-1A_YST、(YM)_安卓9_S905L3A_默认开启ADB_纯净精简语音_完美线刷包 固件特点&#xff1a; 1、修改dns&#xff0c;三网通用&#xff1b; 2、开放原厂固件屏蔽的市场安装和u盘安装apk&#xff1b; 3、无开机广告&#xff0c;无系统更新&#xff0c;不在被强制升…

什么是云原生的应用?

云原生应用的三个核心概念 链接&#xff1a;https://pan.baidu.com/s/10ocbDCGsdS3i7hEzvUlatA?pwdm9nr 提取码&#xff1a;m9nr –来自百度网盘超级会员V5的分享 脑图大家可以下载使用并补充 微服务 什么是单体应用&#xff1f; 传统的单体应用架构都是三层模式&#xff1…

分治策略与递归

目录分治策略分治概念递归概念分治策略的特征分治法步骤举例阶乘斐波那契数列打印数组数组中查找元素分治策略 分治概念 任何可以用计算机求解的问题所需要的时间都与其规模有关。问题规模越小&#xff0c;所解题所需要的时间就越小&#xff0c;从而也较容易处理。例如&#…

11.9 至 11.17 四道典型题记录: Counter 弹出 | map函数 | 子集求取 | 有序字符桶分装

11.9 至 11.17 四道典型题记录&#xff1a; Counter 弹出 | map函数 | 子集求取 | 有序字符桶分装 昨天休息的时候一直在想应该学习哪种语言&#xff0c;我想这也是好多人发愁无法下手的原因之一&#xff0c;今年找工作的时候发现更多的研究岗位需要的是 C 语言 或 C 语言&…

RocketMQ的事务消息和改造

什么是 rmq分布式事务消息&#xff1f; Apache RocketMQ在4.3.0版中已经支持分布式事务消息&#xff0c;这里RocketMQ采用了2PC的思想来实现了提交事务消息&#xff0c;同时增加一个补偿逻辑来处理二阶段超时或者失败的消息&#xff0c;如下图所示。 事务消息解决什么问题&…

Java学习笔记 --- 多线程

一、线程相关概念 程序 程序是为完成特定任务&#xff0c;用某种语言编写的一组指令的集合。简单的说就是我们写的代码 进程 1、进程是指运行中的程序&#xff0c;比如我们使用QQ&#xff0c;就启动了一个进程&#xff0c;操作系统就会为该进程分配内存空间。当我们使用迅雷&…

程序控制结构

程序控制结构程序流程控制介绍顺序控制分支控制if-else单分支案例&#xff1a;编写一个程序&#xff0c;可以输入人的年龄&#xff0c;如果该同志的年龄大于等于 18 岁, 则输出 "你年龄大于 18,要对自己的行为负责,送入监狱"。双分支案例&#xff1a;编写一个程序&am…

关于Python函数的几点说明

关于Python函数的几点说明 本文介绍Python函数返回值、调用函数加括号和不加括号有什么区别、冒号后面省略号&#xff08;...&#xff09;和 pass等说明。 一、为什么函数意外返回“None” 初学者可能遇到这种情况&#xff0c;定义的函数意外返回“None”&#xff0c;例如&a…

Qt error: fatal error: Killed signal terminated program cc1plus

Qt error: fatal error: Killed signal terminated program cc1plus 文章目录Qt error: fatal error: Killed signal terminated program cc1plus摘要1 出现问题原因2 解决方法虚拟机物理机增加SWAP交换空间关键字&#xff1a; qt、 fatal、 error、 cc1plus、 Killed signal …