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

JavaScript—BOM

BOM是什么?

Browser Object Model是浏览器对象模型

官方:浏览器对象模型提供了独立于内容的、可以与浏览器窗口进行互动的对象结构,BOM由多个对象构成,其中代表浏览器窗口的window对象是BOM的顶层对象,其他对象都是该对象的子对象

人话:用来获取或设置浏览器的相关的属性、行为,例如:新建窗口、获取屏幕分辨率、浏览器版本号、浏览器提示语句、粘贴复制……

BOM有什么作用?

获取或设置屏幕的分辨率、禁止浏览器粘贴复制……

BOM和DOM有什么区别?

BOM:浏览器对象模型,获取或设置浏览器的属性

DOM:文档对象模型,获取或设置文档中标签的属性,例如:获取或设置input表单的value值、节点的增删改查,对标签的一些具体操作

BOM有什么缺陷?

不具备浏览器兼容性

BOM里面有什么?

window对象(全局对象):

confirm

location

screen

history

事件对象

注:window就是一个全局的对象(Global),是一个全局的容器。所有的东西都是它的成员


window对象

1、弹窗

①、确认框(confirm)

window.confirm("sometext");用于验证是否接收用户操作,“确认”返回true,“取消”返回false

<!DOCTYPE html>
<html>
<head><meta charset="utf-8" /><title></title><script type="text/javascript">onload = function () {btn.onclick = function () {var res = window.confirm("测试消息,请选择");  //弹出提示框alert(res);};};</script>
</head>
<body><input type="button" name="name" value="click" id="btn" />
</body>
</html>

②、警告框(alert)

用于确保用户可以得到某些信息,当警告窗出现后,用户需要点击确定按钮才能继续进行操作。

window.alert("sonetext");

③、提示框(prompt)

用于提示用户进入页面前输入某个值。

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
</head>
<body><p>点击按钮查看输入的对话框。</p>
<button onclick="myFunction()">点我</button>
<p id="demo"></p>
<script>
function myFunction(){var x;var person=prompt("请输入你的名字","Harry Potter");if (person!=null && person!=""){x="你好 " + person + "! 今天感觉如何?";document.getElementById("demo").innerHTML=x;}
}
</script></body>
</html>

2、reload()方法:刷新

Window.location.href="url";//href:获得或返回页面所在地址
Window.location.reload();


 


screen对象

获取屏幕分辨率:width、height

<script>onload = function () {alert("您的屏幕分辨率是:" + this.screen.width + "*" + this.screen.height);}
</script>


history对象

包含浏览器历史,与浏览器前进后退按钮相同

history.forward() - 与在浏览器中点击向前按钮相同。go(1),参数表示跳转页面的个数,表示前进一个页面

history.back() - 与在浏览器点击后退按钮相同。go(-1),表示页面跳转的个数,表示后退一个页面

history.go(0);表示刷新页面

实战:

 history1.html

<!DOCTYPE html>
<html>
<head><meta charset="utf-8" /><title></title><script type="text/javascript">onload = function () {btn.onclick = function () {history.forward();//history.go(1);};};</script>
</head>
<body><a href="06 history2.html">history对象跳转</a><br /><input type="button" name="name" id="btn" value="->" />
</body>
</html>

history2.html

<!DOCTYPE html>
<html>
<head><meta charset="utf-8" /><title></title><script type="text/javascript">onload = function () {btn.onclick = function () {history.back();//history.go(-1);};};</script>
</head>
<body><input type="button" name="name" id="btn" value="<-" />
</body>
</html>


Location对象

location.hostname 返回 web 主机的域名
location.pathname 返回当前页面的路径和文件名
location.port 返回 web 主机的端口 (80 或 443)
location.protocol 返回所使用的 web 协议(http: 或 https:)


事件对象

1、C#、js对比

C#中:

js中:

2、什么是事件对象?

用来记录一些事件发生时的相关信息的对象(比方说点击按钮时用的哪个鼠标、在屏幕什么位置等等)

3、如何编程?

事件是一个待执行方法,不是我们去调用,而是浏览器。因某个事情的触发而自动的调用。

4、语法:

事件 = function(){ };

这个函数是由浏览器自己调用,那么事件的参数也与浏览器有关。火狐浏览器会在调用事件执行方法的时候,传入一个参数,表示事件对象。

所以我们的代码需要修改成

事件=function(e){ };

早期的IE浏览器(实际上现在的IE也保留),没有这个参数

5、常用成员

鼠标坐标:screenX、screenY    与浏览器页面区域左上角为原点

         clientX、clientY   与浏览器页面区域左上角为原点

         layerX、layerY      与div左上角为原点

鼠标按键:button

功能键:altKey、ctrlKey、shiftKey(表示事件发生时键被按下并保持,为false则键没有按下,反之)

鼠标事件:onmouseover、onmouseout

  • onmouseover: 事件会在鼠标指针移动到指定的元素上时发生
  • onmouseout: 事件会在鼠标指针移出指定的对象时发生。

实战

①、点击鼠标左中右键,出现不同数字

<!DOCTYPE html>
<html>
<head><meta charset="utf-8" /><title></title><script>onload = function () {//获取body标签的所有元素中的第一个,并且用变量名controls接收var controls = document.getElementsByTagName("body")[0].getElementsByTagName("*");//遍历数组for (var i = 0; i < controls.length; i++) {  controls[i].onmousedown = function (e) {  //onmousedown:左键:0    滚轮:1    右键:2//controls[i].onclick = function (e) {   //onclick:点击鼠标右键出现浏览器菜单选项,不能显示2alert(e.button);//alert("点击");};}}</script>
</head>
<body><input type="button" name="name" value="点击"/><div style="border:solid 1px red;width:40px;height:20px" ></div>
</body>
</html>

②、鼠标坐标

<!DOCTYPE html>
<html>
<head><meta charset="utf-8" /><title></title><script type="text/javascript">onload = function () {document.onmousemove = function (e) {//将坐标的结果显示在Title标签中document.title = e.screenX + "," + e.screenY;document.title = e.clientX + "," + e.clientY;//以上都是以浏览器为对照};//以div标签为准dv.onmousemove = function (e) {//document.title = e.layerX + "," + e.layerY;//this就是红框//offset表示document.title = (e.layerX - this.offsetLeft) + "," + (e.layerY - this.offsetTop);};};</script>
</head>
<body><div id="dv" style="border: solid 1px red;width:100px;height:100px;margin:0 auto"></div>
</body>
</html>

③、功能键

<!DOCTYPE html>
<html>
<head><meta charset="utf-8" /><title></title><script>onload = function () {window.btn.onclick = function (e) {e = e || event;alert("alt=" + e.altKey +",shift=" + e.shiftKey +",control=" + e.ctrlKey);};};</script>
</head>
<body><input type="button" id="btn" value="点击" />
</body>
</html>


计时事件

计时器:setInterval() - 间隔指定的毫秒数不停地执行指定的代码

创建:number window.setInterval(“javascript函数”,milliseconds);每隔指定毫秒后调用一次回调函数,返回一个(我觉得有点循环执行的意思)

关闭:windo.clearInterval(计时器Id)

延时器:setTimeout() - 在指定的毫秒数后执行指定代码

创建:number window.setTimeout(callback,millisecond);等待指定时间调用回调函数,注意只会执行一次,返回的是延时器id

关闭:clearTimeout(延迟其Id)

实战

计时器

第一种方法:

<!DOCTYPE html>
<html>
<head><meta charset="utf-8" /><title></title><script type="text/javascript">onload = function () {//第一种方法//页面一开始加载就显示时间,然后每隔一秒钟更新一次时间window.date.innerHTML = new Date().toLocaleString();//window.date.innerHTML:这个窗体的span标签里添加文本//new Date().toLocaleString():实例化一个Date对象,根据本地时间把Date对象转换为字符串,并返回结果var intervalId= setInterval(function () {window.date.innerHTML = new Date().toLocaleString();}, 1000);//setTimeout():在指定的毫秒数后调用函数或计算表达式。每隔1000毫秒调用一次function函数//button按钮点击事件document.getElementById("btn").onclick = function () {if (this.value == "点击停止") {clearInterval(intervalId);  //停止执行this.value = "点击开始";} else {intervalId = setInterval(function () {                   //继续执行window.date.innerHTML = new Date().toLocaleString();}, 1000);this.value = "点击停止";}};};</script>
</head>
<body><p>现在时刻:<span id="date"></span></p><input type="button" id="btn" name="name" value="点击停止" />
</body>
</html>

第二种方法:

<!DOCTYPE html>
<html>
<head><meta charset="utf-8" /><title></title><script type="text/javascript">//第二种方法onload = function () {window.date.innerHTML = new Date().toLocaleString();var isRun = true;    //设置一个布尔类型变量isRun,默认为true//创建一个计时器:每个一秒调用一次function这个函数var intervalId = this.setInterval(function () {           if (isRun) {window.date.innerHTML = new Date().toLocaleString();}}, 1000);//button按钮单击事件this.document.getElementById("btn").onclick = function () {if (this.value == "点击停止") {isRun = !isRun;           //isRun为false,停止执行this.value = "点击开始";} else {isRun = !isRun;this.value = "点击停止";}//第三种方法//isrun = !isRun;//this.value = "点击" + "开始,停止".split(',')[Number(isRun)];}};</script>
</head>
<body><p>现在时刻:<span id="date"></span></p><input type="button" id="btn" name="name" value="点击停止" />
</body>
</html>

倒数跳转:10秒倒计时跳转到其他页面

<!DOCTYPE html>
<html>
<head><meta charset="utf-8" /><title></title><script>onload = function () {//this.window.date.innerHTML = new Date().toLocaleString();var span = document.getElementById("second");var intervalId= setInterval(function () {var num = span.innerHTML - 1;   //获得或设置一个标签下的内容。这个内容可以是html格式的span.innerHTML = num;   //显示秒数if (num <= 0) {    ////停下计时器clearInterval(intervalId);//跳转页面location.href = "https://www.runoob.com/jsref/met-win-setinterval.html";}}, 1000);};</script>
</head>
<body><p>请等待<span id="second">10</span>秒后跳转</p>
</body>
</html>

延时器

<!DOCTYPE html>
<html>
<head><meta charset="utf-8" /><title></title><script type="text/javascript">//思路:鼠标每上抬一次就执行一次交换,创建一次延时器onload = function () {var txt1 = this.document.getElementById("txt1");var txt2 = this.document.getElementById("txt2");var timeoutId;txt2.onkeyup = function () {//关闭旧的演示clearTimeout(timeoutId);    //如果已经关闭或没有数据,这句话无效//开启新的延时timeoutId = setTimeout(function () {txt1.value = txt2.value;}, 500);};};</script>
</head>
<body><input type="text" name="name" value="" id="txt1" /><br /><br /><br /><input type="text" name="name" value="" id="txt2" />
</body>
</html>


clipboardData对象—剪贴板

设置值:clipboardData.setData("text",value);

获取值:  clipboardData.getData("text");

清除值:clipboardData.clearData("text");

oncopy事件、onpaste事件、oncut事件

实战:

获取、设置值

<!DOCTYPE html>
<html>
<head><meta charset="utf-8" /><title></title><style></style><script type="text/javascript">onload = function () {document.getElementById("btncopy").onclick = function () {var url = location.href;//放入剪贴板:ie才能生效window.clipboardData.setData("text", url);};//获取剪贴板内容this.document.getElementById("btnget").onclick = function () {var txt = window.clipboardData.getData("text");document.getElementById("txt").value = txt;};};</script>
</head>
<body><input type="button" name="name" value="点击复制网址" id="btncopy" /><br /><textarea id="txt" style="width:300px;height:300px" ></textarea><input type="button" name="name" value="获取剪贴板内容" id="btnget" /><br />
</body>
</html>

禁止复制、禁止粘贴、复制添加版权案例

<!DOCTYPE html>
<html>
<head><meta charset="utf-8" /><title></title><style type="text/css">#dv {position: absolute;left: 0;top: 0;right: 0;bottom: 0;}</style><script type="text/javascript">onload = function () {document.onkeydown = function (e) {/*    alert(e.key + "," + e.keyCode);*/return false;}document.onkeyup = function (e) {//alert(e.key + "," + e.keyCode);return false;}document.onkeypress = function (e) {//alert(e.key + "," + e.keyCode);return false;}}</script>
</head>
<body><p>美文美文美文美文</p><p>美文美文美文美文</p><p>美文美文美文美文</p><p>美文美文美文美文</p><p>美文美文美文美文</p><p>美文美文美文美文</p><p>美文美文美文美文</p><p>美文美文美文美文</p><p>美文美文美文美文</p><p>美文美文美文美文</p>
</body>
</html>


项目实战—动画案例

高度变化

<!DOCTYPE html>
<html>
<head><meta charset="utf-8" /><title></title><style>#dv {height: 200px;width: 200px;border: solid 1px red;overflow: hidden; /*超出这个范围就隐藏掉*/}</style><script>onload = function () {this.document.getElementById("btn").onclick = function () {//节点.style.样式var div = document.getElementById("dv");第一种思路//首先获得高度var h = div.offsetHeight;  //单位就是数字.offsetHeight:返回元素的高度var intervalId = setInterval(function () {h--;if (h <= 0) {clearInterval(intervalId);//隐藏这个框div.style.display = "none";}div.style.height = h + "px";}, 40);//第二种思路:让操作有速度。var intervalId = setInterval(function () {var h = parseInt(div.style.height || div.offsetHeight)var delta = Math.ceil(h / 10);   //每次应该减去的高度h = h - delta;if (h <= 0) {clearInterval(intervalId);//隐藏这个框div.style.display = "none";}div.style.height = h + "px";}, 20);};};</script>
</head>
<body><input type="button" name="name" value="点击" id="btn"><div id="dv"><p>111111111</p><p>111111111</p><p>111111111</p><p>111111111</p><p>111111111</p><p>111111111</p></div>
</body>
</html>

位置变化

<!DOCTYPE html>
<html>
<head><meta charset="utf-8" /><title></title><style>#dv {border: solid 1px red;width: 100px;height: 100px;background-color: red;}</style><script>onload = function () {var dv = this.document.getElementById("dv");document.getElementById("btn").onclick = function () {//x:800,y:500//平移//创建计时器var intervalId = setInterval(function () {//获取div标签的左边距var currentX = parseInt(dv.style.left || dv.offsetLeft);//每次应该减去的高度var delta = Math.ceil((800 - currentX) / 10);var finalX = currentX + delta;if (finalX >= 800) {clearInterval(intervalId);   //停止计时器}dv.style.left = finalX + "px";}, 20);};};</script>
</head>
<body><input type="button" name="name" value="点击移动" id="btn"><div id="dv"></div>
</body>
</html>

相关文章:

JavaScript—BOM

BOM是什么&#xff1f; Browser Object Model是浏览器对象模型 官方&#xff1a;浏览器对象模型提供了独立于内容的、可以与浏览器窗口进行互动的对象结构&#xff0c;BOM由多个对象构成&#xff0c;其中代表浏览器窗口的window对象是BOM的顶层对象&#xff0c;其他对象都是该…...

C# SocketException(0x2746) asp.net一个现有的连接被远程主机强行关闭

问题原因 如果网页能正常访问&#xff0c;那就是TLS版本支持的问题。 我遇到的问题是&#xff1a; 项目用的是NET Framework 4.6.1&#xff0c;但是 learn.microsoft.com 提到 NET Framework 4.6及更早版本 不支持 TLS 1.1 和 TLS 1.2。 NET Framework 4.6.2 及更高版本 支持 …...

博客系统后端(项目系列2)

目录 前言 &#xff1a; 1.准备工作 1.1创建项目 1.2引入依赖 1.3创建必要的目录 2.数据库设计 2.1博客数据 2.2用户数据 3.封装数据库 3.1封装数据库的连接操作 3.2创建两个表对应的实体类 3.3封装一些必要的增删改查操作 4.前后端交互逻辑的实现 4.1博客列表页 …...

随机化快速排序(Java 实例代码)

随机化快速排序 一、概念及其介绍 快速排序由 C. A. R. Hoare 在 1960 年提出。 随机化快速排序基本思想&#xff1a;通过一趟排序将要排序的数据分割成独立的两部分&#xff0c;其中一部分的所有数据都比另外一部分的所有数据都要小&#xff0c;然后再按此方法对这两部分数…...

JVM 垃圾收集

垃圾收集 分代理论Java 堆的内存分区不同分代收集垃圾收集算法 分代理论 弱分代假说&#xff1a;绝大多数对象都是朝生夕灭&#xff0c;即绝大多数对象都是用完很快需要销毁的。强分代假说&#xff1a;熬过多次垃圾收集过程的对象就越难以消亡&#xff0c;即如果对象经过多次垃…...

kubesphere中部署grafana实现dashboard以PDF方式导出

1&#xff0c;部署grafana-image-renderer 2&#xff0c;部署grafana GF_RENDERING_SERVER_URL http://ip:30323/render #grafana-image-renderer地址 GF_RENDERING_CALLBACK_URL http://ip:32403/ #grafana地址 GF_LOG_FILTERS rend…...

【环境配置】Android-Studio-OpenCV-JNI以及常见错误 ( 持续更新 )

最近一个项目要编译深度学习的库&#xff0c;需要用到 opencv 和 JNI&#xff0c;本文档用于记录环境配置中遇到的常见错误以及解决方案 Invalid Gradle JDK configuration found failed Invalid Gradle JDK configuration foundInvalid Gradle JDK configuration found. Open…...

js 正则表达式 验证 :页面中一个输入框,可输入1个或多个vid/pid,使用英文逗号隔开...

就是意思一个输入框里面&#xff0c;按VID/PID格式输入,VID和PID最大长度是4,最多50组 1、页面代码 <el-form ref"ruleForm" :model"tempSet" :rules"rules" label-position"right"> <!-- 最多 50组&#xff0c;每组9个字符…...

【算法与数据结构】112、LeetCode路径总和

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;本题通过计算根节点到叶子节点路径上节点的值之和&#xff0c;然后再对比目标值。利用文章【算法和数据…...

②matlab桌面和编辑器

目录 matlab编辑器练习 运行脚本 matlab编辑器练习 您可以通过点击灰色代码框在脚本中输入命令。 准备就绪后&#xff0c;您可以通过点击蓝色的提交按钮提交代码。 任务 在脚本中输入命令 r 3。 2.任务 在脚本中添加命令 x pi*r^2。 附加练习 当您在实时编辑器中完成…...

高亮img、pdf重点部分(html2canvas、pdfjs-dist、react-pdf)

可用业务场景 报销单据审批中&#xff0c;高亮发票部分 需求 后台返回一张图片或者pdf、返回一组坐标&#xff0c;坐标类型[number,number,number,number]&#xff0c;分别代表了x、y、width、height。需要根据坐标在图片上高亮出来坐标位置。如下图 高亮的坐标是&#xff1…...

18.神奇导航菜单指示器

效果 源码 <!DOCTYPE html> <html> <head> <title>Magic Menu Indicator | 03</title> <link rel="stylesheet" type="text/css" href="style.css"> </head> <body><div class="navig…...

WPF+Prism+WebApi 学习总结

一、基本概念 WPF:WPF&#xff08;Windows Presentation Foundation&#xff09;是&#xff08;微软推出的&#xff09;基于Windows的用户界面框架&#xff0c;提供了统一的编程模型&#xff0c;语言和框架&#xff0c;做到了分离界面设计人员与开发人员的工作&#xff1b;WPF…...

uniapp热更新

首先热更新需要wgt包&#xff1b; 其次先了解这两个组件 下载的方法 安装的组件 场景&#xff1a; 当你项目的js文件或者页面文件或者静态图片文件css文件更新的时候可以走热更新&#xff1b; 而当你安装新的组件插件或者开启新的权限等功能的时候就无法通过热更新进行更新了…...

AUTOSAR从入门到精通-【应用篇】基于CAN协议的汽车尾气后处理诊断系统的软件开发(续)

目录 尾气后处理诊断程序的开发 5.1 数据库的解析 5.1.1 寻找XML文件 5.1.2 读取XML文件...

mybatis plus新版代码生成器,类型转换处理器ITypeConvertHandler使用

目录 引言关键代码源码分析记录一坑类型转换的第二种方式完整源码地址 引言 当默认生成的数据类型不满足时&#xff0c;就需要自定义指定要生成的类型 关键代码 FastAutoGenerator.create(url, username, password).dataSourceConfig(builder -> {builder.typeConvertHandl…...

python中的matplotlib画直方图(数据分析与可视化)

python中的matplotlib画直方图&#xff08;数据分析与可视化&#xff09; import numpy as np import pandas as pd import matplotlib.pyplot as pltpd.set_option("max_columns",None) plt.rcParams[font.sans-serif][SimHei] plt.rcParams[axes.unicode_minus]Fa…...

【详解】文本检测OCR模型的评价指标

关于文本检测OCR模型的评价指标 前言&#xff1a;网上关于评价标准乱七八糟的&#xff0c;有关于单词的&#xff0c;有关于段落的&#xff0c;似乎没见过谁解释一下常见论文中常用的评价指标具体是怎么计算的&#xff0c;比如DBNet&#xff0c;比如RCNN&#xff0c;这似乎好像…...

Python遥感图像处理应用篇038 GDAL 遥感图像特征提取(统计特征图)

1.图像统计特征 遥感图像的统计特征是对图像中像素值的统计分布进行定量化描述的过程。这些统计特征可以提供关于图像内容和特性的有用信息。下面是一些常用的遥感图像统计特征描述方法: 平均值(Mean):计算图像中所有像素值的平均值,可以反映整个图像的亮度水平。 方差(…...

全局ID生成方式

全局ID生成方式 目录 1. 全局唯一id介绍 1.1 特点 2. 常见的全局唯一id生成策略 2.1 利用数据库自增字段生成id2.2 UUID2.3 Redis生成id2.4 zookeeper生成ID2.5 Twitter的snowflake算法 3. 面试题目&#xff1a;实现一个全局的ID生成器&#xff0c;注意线程安全 3.1 单例模式…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互

物理引擎&#xff08;Physics Engine&#xff09; 物理引擎 是一种通过计算机模拟物理规律&#xff08;如力学、碰撞、重力、流体动力学等&#xff09;的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互&#xff0c;广泛应用于 游戏开发、动画制作、虚…...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候&#xff0c;写过一篇简单实现&#xff0c;后期随着对该模型的深入研究&#xff0c;本次记录涉及到prophet 的公式以及参数调优&#xff0c;从公式可以更直观…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具&#xff0c;可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜&#xff1a; ffmpeg…...

稳定币的深度剖析与展望

一、引言 在当今数字化浪潮席卷全球的时代&#xff0c;加密货币作为一种新兴的金融现象&#xff0c;正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而&#xff0c;加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下&#xff0c;稳定…...

中医有效性探讨

文章目录 西医是如何发展到以生物化学为药理基础的现代医学&#xff1f;传统医学奠基期&#xff08;远古 - 17 世纪&#xff09;近代医学转型期&#xff08;17 世纪 - 19 世纪末&#xff09;​现代医学成熟期&#xff08;20世纪至今&#xff09; 中医的源远流长和一脉相承远古至…...

三分算法与DeepSeek辅助证明是单峰函数

前置 单峰函数有唯一的最大值&#xff0c;最大值左侧的数值严格单调递增&#xff0c;最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值&#xff0c;最小值左侧的数值严格单调递减&#xff0c;最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...

MySQL 部分重点知识篇

一、数据库对象 1. 主键 定义 &#xff1a;主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 &#xff1a;确保数据的完整性&#xff0c;便于数据的查询和管理。 示例 &#xff1a;在学生信息表中&#xff0c;学号可以作为主键&#xff…...

Git常用命令完全指南:从入门到精通

Git常用命令完全指南&#xff1a;从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...

如何应对敏捷转型中的团队阻力

应对敏捷转型中的团队阻力需要明确沟通敏捷转型目的、提升团队参与感、提供充分的培训与支持、逐步推进敏捷实践、建立清晰的奖励和反馈机制。其中&#xff0c;明确沟通敏捷转型目的尤为关键&#xff0c;团队成员只有清晰理解转型背后的原因和利益&#xff0c;才能降低对变化的…...

【Elasticsearch】Elasticsearch 在大数据生态圈的地位 实践经验

Elasticsearch 在大数据生态圈的地位 & 实践经验 1.Elasticsearch 的优势1.1 Elasticsearch 解决的核心问题1.1.1 传统方案的短板1.1.2 Elasticsearch 的解决方案 1.2 与大数据组件的对比优势1.3 关键优势技术支撑1.4 Elasticsearch 的竞品1.4.1 全文搜索领域1.4.2 日志分析…...