原生js随笔
原生js随笔
JavaScript是一种基于对象和事件驱动的客户端脚本语言
组成: ECMAScript---------------标准语法
Bom(browser Object Model) Dom(document)-------浏览器提供的扩充
API : application programming interface 应用程序接口
js引入,内部和外部,最好都放到body里的
标签前;
外部:-----可维护性高,可缓存的;放在head和body中也可以,但是考虑加载顺序
document.write()方法,将html内容输出到浏览器窗口,所以在document.write()中换行就是
变量:声明一个变量用var来声明 ------var 变量名 = 初始化值;
js 是弱类型语言,定义时不声明变量类型;
js的五种基本数据类型:字符串String,整数Number,布尔型Boolean,null,undefined
从逻辑上看,null值表示一个空对象指针,所以类型是object
变量在定义时可以使用逗号一次性定义多个变量,变量命名也就是标识符的命名规则;
标识符包括变量,函数,属性的名字,最好见名知意,小写字母开头,不能有空格,不能是关键字,不能是保留字,区分大小写;
驼峰命名法
alert() 提示框, document提供的方法,所以换行就是"/n";alert只接收字符串作为参数,自动调用toString()方法转换;
字符串类型的变量定义可以用""也可以用'';
console.log();方法是在控制台输出结果,chrome浏览器的控制台输出,会自动提供换行;
字符串拼接:+
转型函数: 布尔型---Boolean();返回值就是true和false;
字符串返回true ,空串返回false;
数值0返回false ,其他返回true;
null型返回false;undefined返回false ;
float,型由于精度问题,计算不是精确计算,true为1,false为0;
数值型----parseFloat();返回值是浮点型数值;
解析一个字符串,返回一个浮点型数值;
数值型----parseInt();返回值是整型数值,true为1,false为0;
解析一个字符串,返回一个整形的数值;
解析时候,参数如是0开头的数值,会按照8进制转
解析时候,参数如果是0开头的字符串,0就会被忽略;
解析时候,参数如果是ox开头的数值,就会按照16进制进行转换数值;(A~F是10~15);
显示类型转换:
.toString()方法,强制类型转换,转为字符串,对于null和undefined,无法转换,要用String()函数
对象:
Object(),创建一个对象要用new关键字,它是一组数据和功能的集合;创建后可以为它添加属性和方法
算数运算符:
+:只要出现了字符串,就会变成字符串拼接;
- * / %:调用Number()转化;
赋值操作:
就是将右边的值,给 左边的 变量;
简单的赋值操作符: =
复合赋值操作符: += -= *= /= %= (i += 1; 就是 i=i+1);
布尔操作符: ! && ||
逻辑&&: 都真才为真,如果第一个为假,那么就不判断第二个元素,一定是假;
逻辑||:只要一个为真,就为真,第一个为真,就不判断第二个元素,一定为真;
逻辑 !:就是取反
if语句:
if(){}
if(){}else{}
if(){}else if(){} else if(){} else{}
switch case :
switch (条件):
case 0: .....(每一个case后要有break;)
case穿透;
条件可以为true,case中可以写判断式;
关系操作符: > < >= <= 比较规则:
都是字符串就比较字符串编码
一个是数值,另一就会转化为数值
布尔值转换为数值,true为1,false为0;
相等性关系: == 相等 != 不等:
如果比较类型相同:返回值为布尔值,相等返回true,不等返回false
如果比较类型不同:转换后再比较
一个布尔时,布尔转为数值;
一个数值,一个字符串,字符转为数值;
null和undefined是相等的;
null和undefined不转换;
只要有NaN就不等;
全等性关系: ==== 全等 !== 不全等 :
不仅要比较类型,还要比较值;
循环: for(var i = 0; i小于循环条件;i++){
循环体;
} //常用于知道循环次数的循环;
while(循环条件){
循环体;
自增条件;
}//常用于不知道循环次数的循环;
break:跳出整个循环
continue:跳出本次循环,继续程序
死循环: 由于编程错误,使得其自身无法控制终止的程序;
由于需要,希望程序一直执行,当达到某一特定要求才终止循环的情况下;
浏览器调试:(debug) sources 里查看,可以设置断点,想要观察的变量可以右键Add watch,刷新后,点击下一步,一步一步看执行;
函数: 可以重用的代码块(分为自定义函数,内置函数)
函数的声明:function 函数名(参数1,参数2){
函数体;
}
函数可以没有名字,我们称为匿名函数
函数可以没有参数
函数的调用------函数名(实际参数1,实际参数2);
理解参数:函数的参数不介意传进来多少个,也不介意传进来的数据类型,
也就是说定义的时候是要传进来两个参数,但是在调用的时候也未必一定要传进来两个参数,
可以是一个,也可以是三个;参数的内部是直接存在一个数组中的,所以,
我们在访问时,可以通过arguments对象取得传递给函数的每一个参数;
局部变量 和 全局变量:
优先级:局部 大于 全局 ;
如果一个函数内定义一个变量,没有添加var来声明,那么系统自认为这个变量是全局变量;
随机数: function randomNum(min, max){
return Math.floor(Math.random()*(max-min+1)+ min);
}
事件驱动:1获取元素,2绑定事件
事件:onclick 鼠标点击事件
ondblclick 鼠标双击事件
onmouseover 鼠标移入
onmouseout 鼠标移出
onmouseenter
onmouseleave
递归函数:函数通过名字调用自己的情况;
数组: 一组数组的有序列表,每一项可以保存任何类型的数据;
数组的长度是可以动态调整;
数组长度:数组名.length;
创建:var 数组名 = new Array[];
var 数组名 = [];
添加:数组名[位置下标]= "";
数组名.push(a"");从数组的最后一个位置添加元素"a";
数组名.unshift("a");从数组的第一个位置添加元素"a";
数组名.concat(参数1,参数2....)方法;基于当前数组创建一个新数组;
作用是合并,可以合并两个或多个数组,如果是一个值,就会添加到新数组
如果是一个或者多个数组,那么参数数组中的 每一项都会添加到新数组中
删除:数组名.pop(a"");从数组的最后一个位置删除元素"a";
数组名.shift("a");从数组的第一个位置删除元素"a";
转串:数组名.join("")方法就是将数组里的每一项按照字符连接组成一个新的字符串;
排序:数组名.sort()方法;就是数组的排序:
升序:数组名.sort(function(a,b){return a-b;});
降序:数组名.sort(function(a,b){return b-a;});
反序:数组名.reverse()方法;数组反序
查找:数组名.indexOf("a")方法;从数组第一个元素开始查找a,并返回下标值;找不到返回-1;
数组名.indexOf(a,b)方法;从数组的地a+1个元素开始查找b,并返回找到的元素的下小标
数组名.lastIndexOf("a")方法;从数组的最后一个元素查找a,并返回下标值;找不到返回-1;
截取:数组名.slice()方法;截取数组得到一个字数组,接受一个或者两个参数
一个参数就是从参数的位置到最后截取,
两个参数就是从参数1取到参数2,不含参数2;
接受负数参数,负数就是从数组的最后项找位置截取;
数组名.splice()方法;可以实现数组的添加删除和截取;参数接受两个,三个或者多个,接受负数参数;
String对象:是字符串的对象类型,可以用构造函数来创建;
创建:var str = new String("内容");
var str1= "内容"; //基本都这么创建,因为基本类型的字符串也可以用String的方法;
方法:
查找: 字符串.charAt() 方法;返回给定位置的字符;
字符串.charCodeAt()方法;返回给定位置的字符的编码;//与String.fromCharCode()相反的方法;
String.fromCharCode()方法;静态方法,接收字符编码,转成字符串;
字符串.indexOf("a")方法;返回a在字符串中第一次出现的位置下标;如果找不到返回-1;
字符串.lastIndexOf("a")方法;返回a在字符串中最后一次出现的位置下标;如果找不到返回-1;
添加: 字符串.concat("a","b","c".....)方法;不改变原串,生成在原有串上添加的新串;多用于多个字符串的拼接;
加号 + 字符串的拼接 //最长用;
取子串:
字符串.substring(x)方法;截取下标x开始到字符串结尾的子串,不改变原串;
字符串.substring(x,y)方法;截取字符串下标x到y的子串,含x不含y,不改变原串;
字符串.slice(x);截取下标x开始到字符串结尾的子串,不改变原串;
字符串.slice(x,y);截取字符串下标x到y的子串,含x不含y,不改变原串;
字符串.substr(x);截取下标x开始到字符串结尾的子串,不改变原串;
字符串.substr(x,y);截取字符串下标x开始,后面的y个;不改变原串;
去空格:字符串.trim()方法;去掉字符串头和尾的空格;
字符串.trimLeft()方法;去掉字符串最左边的空格;
字符串.trimRight()方法;去掉字符串最右边的空格;
分割:根据分割符将字符串拆分成数组;不改变原串;
字符串.solid("原字符串中有规律的字符"); //找不到 原字符串中有规律的字符 返回1;
大小写转换:
字符串.toLowerCase()方法;转换为小写;
字符串.toUpperCase()方法;转换为大写;
替换:字符串.replace();接受一个或两个参数,一个参数是从下标参数到最后,两个参数是参数2替换参数1字符串;
保留小数位:字符串.toFixed(s);保留小数后s位;
Math对象:该对象的方法都是静态方法,数学公式和信息,与自己编写的方法相比较,Math提供的方法效率更加高;
属性: .PI 就是数学里的圆周率π
方法:Math.random() 随机数0~1
Math.min(x,y);x y 返回最小值;
Math.max(x,y);x y 返回最大值;
Math.ceil(a) ;a向上取整,取最大整数;
Math.round(a);a数学四舍五入取整;
Math.floor(a);a向下取整,取最小整数;//通常考虑到效率问题,用该方法代替parseInt()取整方法;
Math.ads(a);返回a的绝对值;
Math.sqrt(a);a开平方;
Math.pow(a,n);a的n次方;
Date()对象:ECMAScript中的日期是在1970年1月1日午夜零时开始经过的毫秒数保存时间的;
创建:
var 变量名 = new Date(); Date()系统当前时间,在传参时,会自动调用Date类型的toString()方法;
var d = new Date(年,月,日); d Date类型
方法:在方法使用前,都要new一个Date对象,才能使用;
Date对象.getFullYear(); 获得年份;
Date对象.getMonth(); 获得月份;
Date对象.getDate(); 获得日期;
Date对象.getHours(); 获得小时数;
Date对象.getMinutes(); 获得分钟数;
Date对象.getSeconds(); 获得秒数;//一秒 = 1000毫秒;
Date对象.setFullYear();设置年份;
Date对象.setMonth();设置月份;
Date对象.setDay();设置日期;
Date对象.setHours();设置小时数;
Date对象.setMinutes();设置分钟;
Date对象.setSeconds();设置秒数;
Date.now() //当前时间的毫秒数;
Date对象.parse(2016,8,23)//将日期20160823转成距离1970年1月1日的毫秒数;
getTime();获取指定日期的毫秒数
setTime();根据指定毫秒数,设置或者修改日期;
串和数组的转换:
将数组转成字符串:arr.join("符号");//每个字符串之间用符号分隔
将字符串转成数组:str.split("符号");//字符串中以字符规律,分隔成数组元素;
DOM:(document object model)文档对象类型;
注意: 标签.innerHTML =" " ; :写入内容到输出标签内,可以直接写入html标签;
顶层对象:window:
window.screen 屏幕对象
window.location 地址栏对象
window.history 历史记录对象
window.navigator 浏览器对象
方法:
window.alert();//alert();//只接收字符串参数;不是会调用toString()方法;
window.document.write();//输出内容;
window.promet("");//提示输入框
window.confirm();//确认信息框,返回值是布尔类型
if(window.confirm()){
alert("您点击了确定");
}else{
alert("您点击了取消");
}
window.onload = function(){
} //网页加载完成之后执行;
//一般当有要求将js写在head中的时候,就要写这个,避免因加载顺序取不到元素;
定时器:
一次性定时器:
setTimeout(参数1,参数2);//参数1一般是函数,参数2 一般是时间单位毫秒;
setTimeout(function(){
},时间(毫秒));
循环定时器:
setIterval(参数1,参数2);//参数1一般是函数,参数2 一般是间隔执行参1的时间,单位毫秒;
var temer = setInterval(function(){
},间隔时间(毫秒));
为了能够关闭定时器,一般在写定时器的时候都要给定时器的返回值 付给一变量;
定时器的关闭:
cleatInterval(参数);//参数一定是一个定时器的返回值;
焦点事件:
onfocus //得到焦点
onblur //失去焦点
//焦点事件一般就是表单用的比较多:表单元素.onfocus = function(){}
this关键字:触发事件的本身就是this;
//以下对新窗口的操作都要让新窗口获取焦点( onfocus )
window.open(参数1,参数2,参数3);//该方法可以在当前的窗口再打开一个指定大小和位置的新窗口;
//参数1:url 参数2:"窗口名" 参数3:窗口设置的字符串(值对之间逗号分开) ;
window.close() //关闭新窗口;
window.moveTo();//设置新窗口位置;
window.resizeTo(width,height);//设置新窗口宽高;
Location对象:
主机域名:window.location.hostname
当前页面路径:window.location.pathname
完整URL:window.location
方法:assign("url");//传递一个地址,根据地址跳转;
reload() //刷新当前页面;
function reloadPage(){
window.location.reload();
}
roSource(); //表示对象的源代码,通常由JS自动后台调用,不写在代码中(火狐不支持);
属性:location.href = "url";//根据地址跳转;
理解构造函数:
构造函数可以创建指定类型的对象,原生构造函数在运行时会自动出现在运行环境中,
可以创建自定义的构造函数,从而定义对象类型和方法;
构造函数本身也是函数,只是可以用来创造对象;
按照惯例,构造函数始终以大写字母开头;
实例化一个对象时: var 实例化对象 = new 构造函数
Navigator对象:
浏览器名称:
浏览器版本:
操作系统信息:
//以上的基本不用了,最新的浏览器都只要:
navigator.userAgent; //浏览器以及操作系统信息;
//在http协议的头中,也会传该信息;
screen 对象: //显示屏幕
window.screen.width //宽
window.screen.height//高
window.screen.availWidth //可用宽(除去任务栏)
window.screen.availHeight//可用高(除去任务栏)
history对象:
属性:history.length //是0就是新开的一个页面
方法:history.go();//参数是-1 和 1 代表上一页和下一页;
滚动事件 ( onscroll ) :
兼容:
var scrollLeft = document.body.scrollLeft || document.documentElement.scrollLeft;
var sctollTop = document.body.scrollTop || document.documentElement.scrollTop;
DOM中获取元素的方法:
document.getElementById("id名");
document.getElementsByTagName("标签名");//放到数组中
document.getElementsByClassName("class名");//放到数组中
document.getElementsByName("name名");//放到数组中,元素有name属性才可以取
document.querySelector("css选择器");//只要第一个,IE8以下不支持;
document.querySelectorAll("css选择器");// 找到所有,放到数组中,IE8以下不支持;
表达式的优先级:
小括号可以改变优先级
算数(+) > 关系(==) > 逻辑(&&) > 赋值(=);
DOM树:
节点:是包含了标签,注释,文本,doctype等在内的多种组合;
节点的属性:nodeType 节点类型 返回值 : 1 2 3
nodeName 节点名称
nodeValue 节点值
nodeType nodeName nodeValue
元素节点 1 大写元素名(标签名) null或者undefined
属性节点 2 属性值
文本节点 3 #text 文本本身
节点关系:
childNodes :元素的所有子节点(包含空格,回车,tab空白);
children : 元素的所有元素子节点,不包含文本节点;
firstChild : 元素的第一个子节点
lastChild : 元素的最后一个子节点
parentNode: 元素的父亲节点
nextSibling: 元素的下一个兄弟节点
previousSibling:元素的上一个兄弟节点
firstElementChild :元素的第一个子节点
lastElementChild : 元素的最后一个子节点
nextElementSibling:元素的下一个兄弟
previousElementsibling:元素的上一个兄弟
节点操作:
查 :就是获取节点(dom中获取元素的六种方法)
增加:增加分两步,先创建,在加入
创建:createElement("属性名");//创建属性节点
createTextNode("");//创建文本节点
加 :父级元素.appendChild("创");//将创添加到父中;
父级元素.insertBefore("创","节点")//添加到父级的某节点前;
修改:父级.replaceChild("新的","旧的");//父级中旧的被新的替换;
删除:父级.removeChild("节点");//删除父级中的节点
删.remove() //IE不支持;
克隆:节点.cloneNode(true);//克隆后再添加到新的节点中即可;
获得特定元素节点属性的值:
某元素.getAttribute("属性名");//获得末元素的某属性的值---等价:某元素.属性名
设置特定元素节点属性的值:
某元素.setAttribute("属性名","属性值");//设置某元素的某属性和对应的值---等价:某元素.某属性 = 属性值;
删除特定元素节点的属性值:
某元素.removeAttribute("属性名");//删除某元素的某属性;----等价:某元素.某属性 = "";
自定义属性:
自定义属性多用于懒加载图片
按照惯例:data_属性名 = 属性值;
这时只能用Attribute才能取到;
获取非行内样式属性和属性值:
兼容:
if(某元素.currentStyle){
某元素.currentStyle.属性名;
}else{
window.computedStyle("某元素","null").属性名; //没有伪类参数2就是null
}
偏移量:(相对于定位父级的)
offsetWidth: 元素在水平空间上占用的大小(内容+边框+内边距)
offsetHight:元素在垂直空间上占用的大小(内容+边框+内边距)
offsetTop:元素上边界到父级元素上边界
offsetLeft:元素左边界到父级元素左边界
offsetParent:参照物为父级元素
事件:是对用户操作的响应,用于处理表单验证等,事件通常和函数结合使用,函数不会再事件发生前执行;
例如:
用户点击:onclick ondbclick
验证用户输入合法性:onsubmit
窗口滚动:onscroll
页面大小改变:onresize
事件对象:event是事件中的一个隐含元素,可以通过arguments[0]来获取;
在触发一个DOM事件时,就会产生一个event对象,它包含着事件的所有信息,例如鼠标位置,键盘按下等
阻止默认事件(兼容): //例如右键 菜单 (oncontextmenu)
if(event.preventDefault){
event.preventDefault();
}else{
return false;
}
阻止事件冒泡(兼容): //例如右键 菜单 中li的点击和 点击其他地方 ul 消失;
if(event.stopPropagation){
event.stopProragation();
}else{
event.cancelBubble = true;
}
事件绑定:标签直接绑定------< input type="button" οnclick= "func()">
script中:onclick = function(){}
addeEventListener("click",functon(){}, false/true);
第一个参数,事件名没有on,
第二个参数多是函数,如果不是匿名函数,只写函数名,没有小括号,
第三个参数,都false冒泡(冒泡就是从子级元素向父级执行) 都true 捕获(捕获机制就是从父级元素向自己元素执行)
如果多个一个事件绑定多个函数,谁true先执行谁,都true先父级,都false就冒泡;
键盘事件:
获取键盘编码:event.keyCode //每次只能存一个值
onkeydown 键盘按下
onkeypress 键盘一直按着
onkeuup 键盘松开
键盘的组合功能键:
ctrl shift alt 是特殊的按键
按下ctrl event.ctrlKey 返回true;
按下shift event.shiftKey 返回true;
按下alt event.altKey 返回true;
所以组合键的判定:
if(event.keyCode == 按键编码 && event.ctrlKye){}//同事按下Ctrl和一个按键,才会执行;
鼠标事件:
onclick 左键单击
ondbclick 左键双击
oncontextmenu 右键单击
onmousedown 左键按下
onmouseup 左键送开
onmusemove 鼠标移动
onmouseover 鼠标移入
onmouseout 鼠标移出
可以通过event对象,获得鼠标坐标:
event.offsetX //相对于事件源的 对象的偏移量 就是元素相对坐标;
event.offsetY //
event.clientX //可视区的位置 ,就是浏览器坐标
event.clientY //
event.offsetWidth //内容+padding+border(除去margin)
event.offsetHeight//
event.clientWidth //内容+padding
event.clientHeight//
event.screenX //屏幕的坐标 (用的少)
even.screenY //
event.pageX //页面的坐标
event.pageY //
事件监听;addEventListener("dbclick",函数, false);//默认false (冒泡)
捕获机制/冒泡:捕获就是父向子,冒泡就是子向父;
事件委托; 就是利用冒泡机制,将事件添加到父级元素上,然后通过event.target();找到所对应的实际目标对象,提高效率;
cookie:
构成:名称; 值; 域(有默认); 失效时间(有默认); 安全标志(有默认); path(有默认);
写法:分号和空格 分隔每一段cookie;
读写不直观,所以调用cookie,js(自己写的)
工作中的cookie都是规定好后直接拿来用的JS文件;
客户端存储用户信息能力的要求,属于某个特定用户的信息应该存在该用户的机器上,例如登陆信息、偏好设置等等,简单说cookie就是在客户端存储数据的一种选项
兼容整理:
event||window.event(获取event对象,兼容IE老版本)
stopPropagation||cancelBubble = true(阻止事件冒泡,兼容IE老版本)
preventDefault()||return false(阻止默认事件,兼容IE)
window.getComputedStyle("","")||currentStyle(获取非行内样式,兼容IE)
document.documentElement.scrollTop()||document.body.scrollTop(onscroll,兼容的是谷歌)
addeventListener("click",function(){},false/ture)方法||attachEvent("onclick",function(){})(事件监听器的兼容IE写法,执行顺序按照绑定顺序的反序进行执行)
正则:
var reUser = /^[a-zA-Z_]\w{5,14}$/;//用户名
var rePhone = /^1[3,4,5,7,8]\d{9}$/;//手机号
var reIdcard = /^\d{17}(\d|X)$/;//身份证
var reString = /[\u4e00-\u9fa5]+/g;//找中文
var reGang = /(\/{1,})/g;//找 / 或//
转载于:https://www.cnblogs.com/yuejie/p/5979704.html
你可能感兴趣的:(操作系统,javascript)
移动端城市区县二级联动选择功能实现包
good2know
本文还有配套的精品资源,点击获取简介:本项目是一套为移动端设计的jQuery实现方案,用于简化用户在选择城市和区县时的流程。它包括所有必需文件:HTML、JavaScript、CSS及图片资源。通过动态更新下拉菜单选项,实现城市到区县的联动效果,支持数据异步加载。开发者可以轻松集成此功能到移动网站或应用,并可基于需求进行扩展和优化。1.jQuery移动端解决方案概述jQuery技术简介jQuery
用代码生成艺术字:设计个性化海报的秘密
本文围绕“用代码生成艺术字:设计个性化海报的秘密”展开,先概述代码生成艺术字在海报设计中的独特价值,接着介绍常用的代码工具(如HTML、CSS、JavaScript等),详细阐述从构思到实现的完整流程,包括字体样式设计、动态效果添加等,还分享了提升艺术字质感的技巧及实际案例。最后总结代码生成艺术字的优势,为设计师提供打造个性化海报的实用指南,助力提升海报设计的独特性与吸引力,符合搜索引擎SEO标准
在Windows11上安装Linux操作系统的几种技术方案
yuanpan
linux 运维 服务器
在Windows11上安装Linux主要有以下几种技术方案,每种方案适用于不同的需求场景:1.WindowsSubsystemforLinux(WSL)适用场景:开发、命令行工具、轻量级Linux环境支持发行版:Ubuntu、Debian、KaliLinux、Fedora等优点:轻量级:无需虚拟机,直接在Windows上运行Linux命令行环境。无缝集成:可访问Windows文件系统,支持VSCo
Linux中Samba服务器安装与配置文件
長樂.-
linux 运维 服务器
Samba简述27zkqsamba是一个基于TCP/IP协议的开源软件套件,可以在Linux、Windows、macOS等操作系统上运行。它允许不同操作系统的计算机之间实现文件和打印机共享。samba提供了一个服务,使得Windows操作系统可以像访问本地文件一样访问Linux、Mac等操作系统上的共享文件。实现跨平台的文件共享,提高办公环境的效率和便利性。samba也支持Windows网络邻居协
Ubuntu24安装MariaDB/MySQL后不知道root密码如何解决
Ubuntu24.04安装MariaDB后root密码未知?解决方案在此在Ubuntu24.04上新安装MariaDB后,许多用户会发现自己不知道root用户的密码,甚至在安装过程中也没有提示设置密码。这是因为在较新的MariaDB版本中,默认情况下root用户采用了unix_socket身份验证插件。这意味着您可以使用操作系统的root用户权限直接登录MariaDB,而无需输入密码。本文将为您详
如何在 Ubuntu 24.04 或 22.04 Linux 上安装和使用 NoMachine
山岚的运维笔记
Linux 运维及使用 linux ubuntu 运维 nomachine 远程连接
NoMachine是一款适用于Linux(Ubuntu)及其他支持的操作系统的远程桌面应用程序,允许用户通过本地或远程系统从世界任何地方控制计算机。它可以在低带宽连接下工作,被专业人士和家庭用户广泛使用。NoMachine的主要功能高性能远程访问跨平台兼容性易于使用,因为用户界面友好提供强大的加密协议,如SSH、SSL及其他安全标准支持远程文件传输和打印服务允许从远程计算机进行音频和视频流媒体传输
为什么学习Web前端一定要掌握JavaScript?
web前端学习指南
为什么学习Web前端一定要掌握JavaScript?在前端的世界里,没有什么是JavaScript实现不了的,关于JS有一句话:凡是可以用JavaScript来写的应用,最终都会用JavaScript,JavaScript可运行在所有主要平台的所有主流浏览器上,也可运行在每一个主流操作系统的服务器端上。现如今我们在为网站写任何一个主要功能的时候都需要有懂能够用JavaScript写前端的开发人员。
OpenCloudOS 城市行·成都站圆满落幕,共探操作系统技术新未来!
CSDN资讯
业界资讯 资讯 数据库 人工智能
7月26日,由OpenCloudOS社区主办,海光信息战略合作的OpenCloudOS城市行・成都站活动在成都欧洲中心圆满举办,线上观看人次超3万。当前,数字化浪潮席卷全球各行各业,在国产化进程加速的背景下,操作系统的技术突破与生态构建不仅是保障信息安全的关键,更是推动产业升级、实现高质量发展的必由之路。然而,国产操作系统在性能优化、安全防护、多场景适配等方面仍面临诸多挑战,亟需产业链上下游协同创
涵盖轻量级锁(SpinLock)与操作系统同步原语(如 CRITICAL_SECTION)的性能优化、Monitor 的原子性和数据竞争防护、Monitor.Wait 和 Pulse 在生产者-消费者
zhxup606
C#实战教程 李工篇 wpf 开发语言 C#
涵盖轻量级锁(SpinLock)与操作系统同步原语(如CRITICAL_SECTION)的性能优化、Monitor的原子性和数据竞争防护、Monitor.Wait和Pulse在生产者-消费者中的作用、控制线程执行顺序、Thread.Join的含义、避免嵌套锁的锁顺序策略,以及防止伪唤醒的条件检查。每个问题包括核心概念、实现细节、与之前讨论的关联(如线程池、进程间同步、分布式同步)、代码示例、测试用
Vue CSR 到 Nuxt 3 SSR 迁移:技术实现与问题解决实录
二倍速播放
前端 vue.js
1.迁移动机与技术选型1.1CSR架构的局限性基于Vue3和Vite构建的客户端渲染(CSR)单页应用(SPA)提供了良好的开发体验和用户交互流畅性。但是其核心局限在于:搜索引擎优化(SEO):初始HTML响应仅包含一个根div元素,实际内容由JavaScript在浏览器端动态生成。虽然主流搜索引擎(如Google)能够执行部分JavaScript,但其抓取效率和稳定性不如直接获取完整HTML。非
群晖 File Station:集中浏览与管理 NAS 文件的工具
Trihawk宇麦科技
群晖NAS
FileStation是SynologyDSM(DiskStationManager)操作系统中的核心内建应用,以网页形式提供友好的图形界面,供用户在浏览器中管理NAS上的文件和共享资料核心功能特色1.文件浏览与管理Navigate文件夹、执行拖放上传、剪贴、重命名、移动、删除等常用操作,类似WindowsExplorer或macOSFinder的使用体验,直观且便捷支持批量操作、压缩与解压、多文
12. 什么是事件委托
yqcoder
前端面试-CSS css 面试
总结事件委托(EventDelegation)是JavaScript中一种重要的事件处理机制,它利用了事件冒泡的特性,将事件的处理程序绑定到父元素或祖先元素上,而不是直接绑定到具体的子元素上。什么是事件委托?事件冒泡:在DOM中,事件通常会从触发元素开始,然后逐级向上冒泡到其父元素、祖先元素,直到window对象。核心思想:事件委托的核心思想是利用事件冒泡机制,在父元素上监听事件,而不是在每个子元
Windows系统第一次运行C语言程序,环境配置,软件安装等遇到的坑及解决方法
灬爱码士灬
windows c语言 开发语言
明确需要编辑器和编译器,并选择自己要用什么(我选的编辑器是VSCode:VisualStudioCode;编译器是gcc)下载VSCode并配置环境变量(这里没啥问题),安装C/C++的拓展安装Cygwin,用来在Windows操作系统上模拟Unix/Linux环境(Cygwin官网:https://www.cygwin.com/。)安装过程中镜像可以选择https://mirrors.aliyu
Windows下Oracle安装图解
叫我老村长
Windows下Oracle安装图解----oracle-win-64-11g详细安装步骤一、Oracle下载官方下地址http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.htmlwin32位操作系统下载地址:http://download.oracle.com/otn/nt/oracle11g
关于前端的性能优化
性能优化主要涵盖了以下四个方面:(tip:仅代表个人总结,如有不当,还希望看到的大佬多多指示)减少网络请求:合并文件、使用CDN、启用缓存。优化资源加载:代码分割、懒加载、图片压缩。提升渲染性能:减少重绘回流、防抖节流、使用WebWorker。监控和迭代:定期使用工具检测性能,持续优化。一、网络层面优化减少HTTP请求合并文件:将多个CSS或JavaScript文件合并成一个,减少请求次数。使用C
时间组件库Day.js那些事
前端小白花
javascript 开发语言 ecmascript
一、简介1.什么是Day.jsDay.js是一个轻量级,易于使用的JavaScript日期库,提供了强大的日期和时间处理功能,与Moment.js的API设计相似,但具有更高的性能和更小的体积。Day.js官网https://day.js.org/docs/zh-CN/installation/installation2.优势a.特点轻量级:Dayjs的压缩后大小只有2KB左右,远小于Moment
JavaScript正则表达式去除括号但保留内容与去除括号与内容
Selicens
javascript 正则表达式
项目上碰到一个需求,是取多个递增文件的文件名,类似于test(1).txt、test(2).txt,但是不需要括号,只要test1、test2这种格式,最开始想到的办法就是js里的replace替换,先上一个比较笨但是也能实现效果的例子letname="test(1).txt"letdata=name.split('.')[0].replace('(','').replace(')','')con
java callable 详解_详解Java Callable接口实现多线程的方式
想法臃肿
java callable 详解
在Java1.5以前,创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口。无论我们以怎样的形式实现多线程,都需要调用Thread类中的start方法去向操作系统请求io,cup等资源。因为线程run方法没有返回值,如果需要获取执行结果,就必须通过共享变量或者使用线程通信的方式来达到效果,这样使用起来就比较麻烦。而自从java1.5开始,就提供了Callable和F
网络安全第14集
不灭锦鲤
web安全 安全
前言:小迪安全14集,这集重点内容:0、什么是js渗透测试?在javascript中也存在变量和函数,存在可控变量和函数就有可能存在在漏洞,js开发的web应用和php、java开发的区别是,js能看得到的源代码,php看不到,但是风险就是未授权访问、配置信息泄露(加密算法、key秘钥等),源代码看得到,存在更多的url泄露,从而可能会出现未授权访问,从url,前提:web应用可以采用前端语言或后
25年不倒的“犀牛书“:为什么《JavaScript权威指南第7版》仍是程序员的案头圣经?
阿蒙Armon
javascript 开发语言 ecmascript
25年不倒的"犀牛书":为什么《JavaScript权威指南第7版》仍是程序员的案头圣经?当一本技术书能连续畅销25年,历经7次迭代仍稳坐领域第一梯队,它必然藏着超越时代的硬实力。《JavaScript权威指南(原书第7版)》就是这样一部传奇——豆瓣9.4分的封神之作,程序员口中的"犀牛书",从网景时代到ES2020,它始终是JavaScript开发者的终极参考书。如果你还在为原型链、闭包、异步编
基于C/S架构与JAVA SWING的简易酒店管理系统实现
想法臃肿
本文还有配套的精品资源,点击获取简介:本系统名为“简易酒店管理操作系统”,采用C/S架构和JAVASWING工具开发,旨在提供高效的酒店业务流程管理。系统包括客房管理、餐饮服务、前台接待、财务管理、库存管理和报表统计等核心模块,旨在通过技术手段提升酒店运营效率和客户体验,同时注重系统安全和数据保护。1.酒店管理系统概念与C/S架构1.1酒店管理系统简介在当今数字化时代,酒店管理系统是酒店运营不可或
Linux从入门到精通——基础篇
weixin_30390075
一.关于Linux的简介1.什么是Linux?Linux这个词指的是Linux内核,它是用来驱动电脑里的硬件的,而Linux操作系统指的是Linux内核和GUN组织(GUN的全称为GUNisnotUnix)所编写的软件,有了这个内核和相应的软件,由“死”的机械硬件组成的计算机才变成了“活”的,需要注意的是,单纯的软件并不能代表Linux系统。2.Linux的特点和优势1.模块化程度高Linux的内
如何查看 Windows 电脑的处理器类型(x64 或 ARM64)
枫萏
Other 经验分享 笔记
方法1:通过「设置」查看按Win+I打开「设置」进入系统→关于在设备规格部分,查看系统类型:①如果显示64位操作系统,基于x64的处理器→选择GitforWindows/x64Portable②如果显示64位操作系统,基于ARM的处理器→选择GitforWindows/ARM64Portable方法2:通过「任务管理器」查看按Ctrl+Shift+Esc打开「任务管理器」切换到性能选项卡查看CPU
配置环境变量(以 JDK 1.8为例)macOS Mojave
夜色曾沁凉
编程语言 & 程序设计 macOS 编程语言 &amp; 程序设计
什么是环境变量环境变量(environmentvariables)一般是指在操作系统中用来指定操作系统运行环境的一些参数,如:临时文件夹位置和系统文件夹位置等。环境变量是在操作系统中一个具有特定名字的对象,它包含了一个或者多个应用程序所将使用到的信息。例如Windows和DOS操作系统中的path环境变量,当要求系统运行一个程序而没有告诉它程序所在的完整路径时,系统除了在当前目录下面寻找此程序外,
Linux 逻辑卷管理实例详解
ORA_无花果
os Linux 逻辑卷管理 lvm实例详解 linux
Linux逻辑卷管理(LVM)LVM(LogicalVolumeManager,逻辑卷管理器)是一种把硬盘空间划分成“弹性”逻辑卷的方法。这里的“弹性”体现在硬盘不必重新分区也能够被简单地重新划分大小。需要强调说明的是,LVM是Linux操作系统中一个磁盘管理子系统,而不是文件系统!1、LVM基本概念一般来说,一个分区大小是固定的。如果一个分区上没有空间时,我们只能重新分区以扩大相应分区的大小(这
在 Windows 系统 下直接使用了 Linux/macOS 的环境变量设置语法 PLATFORM=android
一、报错原因由于开发这个项目的同事,使用电脑的操作系统是macOS。所以才会出现这个错误,因为我是在Windows系统下直接使用了Linux/macOS的环境变量设置语法PLATFORM=android(项目根目录下的package.json文件,找到scripts部分,检查test:android的定义),而Windows不支持这种语法。二、解决方案cross-env是一个解决跨平台环境变量设置
[分享]钛极OS(TiJOS)物联网操作系统介绍
钛极OS(TiJOS)物联网操作系统介绍官方链接:http://dev.tijos.net/overview/TiJOS_overview/1.tijos_introduction/钛极OS(TiJOS)是一个支持使用Java开发嵌入式智能硬件应用的物联网操作系统,支持多种MCU芯片,为开发者提供高效、成熟的物联网应用开发平台,让智能硬件及IoT应用开发更快捷简单。钛极OS(TiJOS)可运行于低
什么是JSON,如何与Java对象转化
doublez234
java json spring spring boot
JSON概念JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。它易于人阅读和编写,同时也易于机器解析和生成。JSON基于JavaScript(ECMAScript(欧洲计算机协会制定的js规范))编程语言的一个子集,但它是一种独立于语言的数据格式,被广泛应用于各种编程语言和平台之间的数据交换。JSON的主要特点:轻量级:JSON格式非常简洁,只包含必要的数据信
APP开发入门:了解主流的编程语言
agi大模型
Python 职业与职场 程序员 开发语言 数据分析 编程语言
前言在过去的几年里,有许多程序员开始学习和使用编程语言。这其中包括C、C++、Java和Python。尽管有许多语言可供选择,但大多数程序员都会选择最容易学习的编程语言。如今,有很多编程语言供选择。程序员们在学习这些语言时可以自由地选择他们喜欢的方式,因为他们的目标是构建任何软件,而不仅仅是创建一个应用程序。你可以在Linux上学习C/C++、Java、Python、C#或JavaScript,你
运维-资产梳理
资产梳理一、明确目标与范围1.1、确定梳理目的网络安全:缩小攻击面、识别风险点。资源配置:优化资源利用率、降低成本。合规要求:满足法律法规或行业标准(如等保、ISO27001)。1.2、界定资产范围物理资产:服务器、网络设备、终端设备、IoT设备等。数字资产:操作系统、数据库、应用程序、域名、IP地址、云资源、容器/K8s集群、SaaS应用。数据资产:敏感数据(如客户信息、财务数据)、业务数据、备
JAVA基础
灵静志远
位运算 加载 Date 字符串池 覆盖
一、类的初始化顺序
1 (静态变量,静态代码块)-->(变量,初始化块)--> 构造器
同一括号里的,根据它们在程序中的顺序来决定。上面所述是同一类中。如果是继承的情况,那就在父类到子类交替初始化。
二、String
1 String a = "abc";
JAVA虚拟机首先在字符串池中查找是否已经存在了值为"abc"的对象,根
keepalived实现redis主从高可用
bylijinnan
redis
方案说明
两台机器(称为A和B),以统一的VIP对外提供服务
1.正常情况下,A和B都启动,B会把A的数据同步过来(B is slave of A)
2.当A挂了后,VIP漂移到B;B的keepalived 通知redis 执行:slaveof no one,由B提供服务
3.当A起来后,VIP不切换,仍在B上面;而A的keepalived 通知redis 执行slaveof B,开始
java文件操作大全
0624chenhong
java
最近在博客园看到一篇比较全面的文件操作文章,转过来留着。
http://www.cnblogs.com/zhuocheng/archive/2011/12/12/2285290.html
转自http://blog.sina.com.cn/s/blog_4a9f789a0100ik3p.html
一.获得控制台用户输入的信息
&nbs
android学习任务
不懂事的小屁孩
工作
任务
完成情况 搞清楚带箭头的pupupwindows和不带的使用 已完成 熟练使用pupupwindows和alertdialog,并搞清楚两者的区别 已完成 熟练使用android的线程handler,并敲示例代码 进行中 了解游戏2048的流程,并完成其代码工作 进行中-差几个actionbar 研究一下android的动画效果,写一个实例 已完成 复习fragem
zoom.js
换个号韩国红果果
oom
它的基于bootstrap 的
https://raw.github.com/twbs/bootstrap/master/js/transition.js transition.js模块引用顺序
<link rel="stylesheet" href="style/zoom.css">
<script src=&q
详解Oracle云操作系统Solaris 11.2
蓝儿唯美
Solaris
当Oracle发布Solaris 11时,它将自己的操作系统称为第一个面向云的操作系统。Oracle在发布Solaris 11.2时继续它以云为中心的基调。但是,这些说法没有告诉我们为什么Solaris是配得上云的。幸好,我们不需要等太久。Solaris11.2有4个重要的技术可以在一个有效的云实现中发挥重要作用:OpenStack、内核域、统一存档(UA)和弹性虚拟交换(EVS)。
spring学习——springmvc(一)
a-john
springMVC
Spring MVC基于模型-视图-控制器(Model-View-Controller,MVC)实现,能够帮助我们构建像Spring框架那样灵活和松耦合的Web应用程序。
1,跟踪Spring MVC的请求
请求的第一站是Spring的DispatcherServlet。与大多数基于Java的Web框架一样,Spring MVC所有的请求都会通过一个前端控制器Servlet。前
hdu4342 History repeat itself-------多校联合五
aijuans
数论
水题就不多说什么了。
#include<iostream>#include<cstdlib>#include<stdio.h>#define ll __int64using namespace std;int main(){ int t; ll n; scanf("%d",&t); while(t--)
EJB和javabean的区别
asia007
bean ejb
EJB不是一般的JavaBean,EJB是企业级JavaBean,EJB一共分为3种,实体Bean,消息Bean,会话Bean,书写EJB是需要遵循一定的规范的,具体规范你可以参考相关的资料.另外,要运行EJB,你需要相应的EJB容器,比如Weblogic,Jboss等,而JavaBean不需要,只需要安装Tomcat就可以了
1.EJB用于服务端应用开发, 而JavaBeans
Struts的action和Result总结
百合不是茶
struts Action配置 Result配置
一:Action的配置详解:
下面是一个Struts中一个空的Struts.xml的配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
&quo
如何带好自已的团队
bijian1013
项目管理 团队管理 团队
在网上看到博客"
怎么才能让团队成员好好干活"的评论,觉得写的比较好。 原文如下: 我做团队管理有几年了吧,我和你分享一下我认为带好团队的几点:
1.诚信
对团队内成员,无论是技术研究、交流、问题探讨,要尽可能的保持一种诚信的态度,用心去做好,你的团队会感觉得到。 2.努力提
Java代码混淆工具
sunjing
ProGuard
Open Source Obfuscators
ProGuard
http://java-source.net/open-source/obfuscators/proguardProGuard is a free Java class file shrinker and obfuscator. It can detect and remove unused classes, fields, m
【Redis三】基于Redis sentinel的自动failover主从复制
bit1129
redis
在第二篇中使用2.8.17搭建了主从复制,但是它存在Master单点问题,为了解决这个问题,Redis从2.6开始引入sentinel,用于监控和管理Redis的主从复制环境,进行自动failover,即Master挂了后,sentinel自动从从服务器选出一个Master使主从复制集群仍然可以工作,如果Master醒来再次加入集群,只能以从服务器的形式工作。
什么是Sentine
使用代理实现Hibernate Dao层自动事务
白糖_
DAO spring AOP 框架 Hibernate
都说spring利用AOP实现自动事务处理机制非常好,但在只有hibernate这个框架情况下,我们开启session、管理事务就往往很麻烦。
public void save(Object obj){
Session session = this.getSession();
Transaction tran = session.beginTransaction();
try
maven3实战读书笔记
braveCS
maven3
Maven简介
是什么?
Is a software project management and comprehension tool.项目管理工具
是基于POM概念(工程对象模型)
[设计重复、编码重复、文档重复、构建重复,maven最大化消除了构建的重复]
[与XP:简单、交流与反馈;测试驱动开发、十分钟构建、持续集成、富有信息的工作区]
功能:
编程之美-子数组的最大乘积
bylijinnan
编程之美
public class MaxProduct {
/**
* 编程之美 子数组的最大乘积
* 题目: 给定一个长度为N的整数数组,只允许使用乘法,不能用除法,计算任意N-1个数的组合中乘积中最大的一组,并写出算法的时间复杂度。
* 以下程序对应书上两种方法,求得“乘积中最大的一组”的乘积——都是有溢出的可能的。
* 但按题目的意思,是要求得这个子数组,而不
读书笔记-2
chengxuyuancsdn
读书笔记
1、反射
2、oracle年-月-日 时-分-秒
3、oracle创建有参、无参函数
4、oracle行转列
5、Struts2拦截器
6、Filter过滤器(web.xml)
1、反射
(1)检查类的结构
在java.lang.reflect包里有3个类Field,Method,Constructor分别用于描述类的域、方法和构造器。
2、oracle年月日时分秒
s
[求学与房地产]慎重选择IT培训学校
comsci
it
关于培训学校的教学和教师的问题,我们就不讨论了,我主要关心的是这个问题
培训学校的教学楼和宿舍的环境和稳定性问题
我们大家都知道,房子是一个比较昂贵的东西,特别是那种能够当教室的房子...
&nb
RMAN配置中通道(CHANNEL)相关参数 PARALLELISM 、FILESPERSET的关系
daizj
oracle rman filesperset PARALLELISM
RMAN配置中通道(CHANNEL)相关参数 PARALLELISM 、FILESPERSET的关系 转
PARALLELISM ---
我们还可以通过parallelism参数来指定同时"自动"创建多少个通道:
RMAN > configure device type disk parallelism 3 ;
表示启动三个通道,可以加快备份恢复的速度。
简单排序:冒泡排序
dieslrae
冒泡排序
public void bubbleSort(int[] array){
for(int i=1;i<array.length;i++){
for(int k=0;k<array.length-i;k++){
if(array[k] > array[k+1]){
初二上学期难记单词三
dcj3sjt126com
sciet
concert 音乐会
tonight 今晚
famous 有名的;著名的
song 歌曲
thousand 千
accident 事故;灾难
careless 粗心的,大意的
break 折断;断裂;破碎
heart 心(脏)
happen 偶尔发生,碰巧
tourist 旅游者;观光者
science (自然)科学
marry 结婚
subject 题目;
I.安装Memcahce 1. 安装依赖包libevent Memcache需要安装libevent,所以安装前可能需要执行 Shell代码 收藏代码
dcj3sjt126com
redis
wget http://download.redis.io/redis-stable.tar.gz
tar xvzf redis-stable.tar.gz
cd redis-stable
make
前面3步应该没有问题,主要的问题是执行make的时候,出现了异常。
异常一:
make[2]: cc: Command not found
异常原因:没有安装g
并发容器
shuizhaosi888
并发容器
通过并发容器来改善同步容器的性能,同步容器将所有对容器状态的访问都串行化,来实现线程安全,这种方式严重降低并发性,当多个线程访问时,吞吐量严重降低。
并发容器ConcurrentHashMap
替代同步基于散列的Map,通过Lock控制。
&nb
Spring Security(12)——Remember-Me功能
234390216
Spring Security Remember Me 记住我
Remember-Me功能
目录
1.1 概述
1.2 基于简单加密token的方法
1.3 基于持久化token的方法
1.4 Remember-Me相关接口和实现
位运算
焦志广
位运算
一、位运算符C语言提供了六种位运算符:
& 按位与
| 按位或
^ 按位异或
~ 取反
<< 左移
>> 右移
1. 按位与运算 按位与运算符"&"是双目运算符。其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1 ,否则为0。参与运算的数以补码方式出现。
例如:9&am
nodejs 数据库连接 mongodb mysql
liguangsong
mongodb mysql node 数据库连接
1.mysql 连接
package.json中dependencies加入
"mysql":"~2.7.0"
执行 npm install
在config 下创建文件 database.js
java动态编译
olive6615
java HotSpot jvm 动态编译
在HotSpot虚拟机中,有两个技术是至关重要的,即动态编译(Dynamic compilation)和Profiling。
HotSpot是如何动态编译Javad的bytecode呢?Java bytecode是以解释方式被load到虚拟机的。HotSpot里有一个运行监视器,即Profile Monitor,专门监视
Storm0.9.5的集群部署配置优化
roadrunners
优化 storm.yaml
nimbus结点配置(storm.yaml)信息:
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional inf
101个MySQL 的调节和优化的提示
tomcat_oracle
mysql
1. 拥有足够的物理内存来把整个InnoDB文件加载到内存中——在内存中访问文件时的速度要比在硬盘中访问时快的多。 2. 不惜一切代价避免使用Swap交换分区 – 交换时是从硬盘读取的,它的速度很慢。 3. 使用电池供电的RAM(注:RAM即随机存储器)。 4. 使用高级的RAID(注:Redundant Arrays of Inexpensive Disks,即磁盘阵列
zoj 3829 Known Notation(贪心)
阿尔萨斯
ZOJ
题目链接:zoj 3829 Known Notation
题目大意:给定一个不完整的后缀表达式,要求有2种不同操作,用尽量少的操作使得表达式完整。
解题思路:贪心,数字的个数要要保证比∗的个数多1,不够的话优先补在开头是最优的。然后遍历一遍字符串,碰到数字+1,碰到∗-1,保证数字的个数大于等1,如果不够减的话,可以和最后面的一个数字交换位置(用栈维护十分方便),因为添加和交换代价都是1