Javascript 进阶笔记(Web APIs)
Javascript 进阶笔记(Web APIs)
目录
Web API 基本认知
DOM 基础知识
DOM
DOM 树
DOM 对象
DOM 基础操作
DOM 获取元素
DOM 设置/修改元素内容
DOM 设置/修改元素属性
设置/修改常用属性
设置/修改样式属性
设置/修改表单属性
DOM节点操作
DOM节点
查找节点
父节点查找
子节点查找
兄弟节点查找
增加节点
创建节点
追加节点
克隆节点
删除节点
事件基础
事件
事件类型
鼠标事件
键盘事件
焦点事件
文本事件
事件进阶
事件对象
获取事件对象
事件对象常用属性
事件流
事件流介绍
事件捕获和事件冒泡
阻止事件流动
事件委托
事件高级
滚动事件 scroll
加载事件 load
加载事件 DOMContentLoaded
元素大小和位置 三大系列
scroll
offset
client
定时器
间歇函数
延时函数
BOM
BOM 基础认知
location 对象
navigator 对象
histroy 对象
本地存储
本地存储特性
localStorage存储
sessionStorage存储
高阶函数
函数表达式
回调函数
环境对象
编程思想
排他思想
时间对象
实例化时间对象
时间对象方法
时间戳
重绘和回流
正则表达式
正则表达式定义
元字符
修饰符
JS 执行机制
JS 单线程
同步和异步
Web API 基本认知
作用: 使用 JS 去操作 html 和浏览器 分类:DOM (文档对象模型) 和 BOM(浏览器对象模型)
DOM 基础知识
DOM
DOM(Document Object Model——文档对象模型 ):用来呈现以及与任意 HTML 或 XML文档交互的API,简单的说,DOM是浏览器提供的一套专门用来 操作网页内容 的功能
DOM的作用:开发网页内容特效 和实现用户交互
DOM 树
DOM树:将 HTML 文档以树状结构直观地表现出来,我们称之为文档树或 DOM 树
DOM树的作用:直观地体现了标签与标签之间的关系
DOM 对象
DOM对象:浏览器根据 html 标签生成的 JS 对象
核心思想:把网页内容当做对象来处理
document 对象 :是 DOM 里提供的一个对象
注意:① 它提供的属性和方法都是用来访问和操作网页内容的 例:document.write() ② 网页所有内容都在document里面
DOM 基础操作
DOM 获取元素
方法一:* 根据CSS选择器来获取DOM元素 *
① 选择匹配到的第一个元素
语法如下:
document.querySelector('css选择器')
//参数:包含一个或多个有效的CSS选择器字符串
//返回值:CSS匹配的第一个元素,一个HTMLElement对象,若没有匹配到,则返回null
举例如下:
我是第一个盒子
我是第二个盒子
我是第三个盒子
② 选择匹配到的多个元素
语法如下:
document.querySelectorAll('css选择器')
//参数:包含一个或多个有效的CSS选择器字符串
//返回值:CSS选择器匹配的 NodeList 对象集合
注意:① 该方法得到的是一个 伪数组 :有长度、有索引号的数组,但是没有 pop() 、push() 等数组方法
② 想要得到里面的每一个对象,则需要 遍历(for)的方式 获得
③ 哪怕只有一个元素,通过querySelectAll() 获取过来的也是一个伪数组,里面只有一个元素而已
举例如下:
方法二:其他获取DOM元素的方法
//1.根据标签的id编号定位标签对应的DOM对象
let dom = document.getElementById('id内容')
//2.根据标签的class属性值定位标签对应的DOM对象
let domArray = document.getElementsByClassName('class属性内容')
//3.根据标签的类型定位标签对应的DOM对象
let domArray = document.getElementsByTagName('标签类型名')
//4.根据标签的name属性值定位标签对应的DOM对象
let domArray =document.getElementsByName('name属性内容')
DOM 设置/修改元素内容
方法一:document.write() 方法
特点:只能将文本内容追加 到
前面 的位置,文本中包含的标签会被解析
语法如下:
document.write('追加内容')
举例如下:
旧内容
方法二:元素.innerText 属性
特点:将文本内容添加/更新到任意 标签位置,文本中包含的标签不会被解析
语法如下:
元素名.innerText = '添加内容'
举例如下:
Javascript
方法三:元素.innerHTML 属性
特点:将文本内容添加/更新到任意 标签位置,文本中包含的标签会被解析
语法如下:
元素名.innerHTML = '添加内容'
举例如下:
Javascript
DOM 设置/修改元素属性
设置/修改常用属性
语法如下:
//获取对象
let 对象 = document.querySelector('css选择器')
//操作对象
对象.属性 = 值
设置/修改样式属性
① 通过 style 属性操作 CSS
语法如下:
//获取对象
let 对象 = document.querySelector('css选择器')
//操作对象
对象.syles.样式属性 = 值
注意:① 如果属性有 - 连接符,需要转换为 小驼峰命名 法,比如 要修改元素的padding-left,则 元素.style.paddingLeft = ‘修改的新值’
② 赋值的时候,需要的时候不要忘记加CSS单位
③ style属性只能获取和设置html里的 行内样式 ,在类样式中定义的样式通过style获取不到
④ 由于body是唯一的标签,设置页面的整体样式(比如背景)时可以直接写 document.body.style
② 操作类名 (className ) 操作 CSS
如果修改的样式比较多,直接通过style属性修改比较繁琐,我们可以通过借助于css类名的形式,新建一个目标样式的类名,然后进行赋值
语法如下:
//获取对象
let 对象 = document.querySelector('css选择器')
//操作对象
对象.classname = '目标样式的类名'
注意:① 由于class是关键字, 所以使用className去代替 ② className是 使用新值覆盖旧值 , 如果仅仅需要添加一个类,并且还要保留之前的类名,需将原来的类名也写上去
③ 通过 classList 操作类控制CSS
为了解决 className 容易覆盖以前的类名,我们可以通过classList方式追加和删除 类名,不影响之前的类名
语法如下:
//获取对象
let 对象 = document.querySelector('css选择器')
//操作对象
// 追加类
对象.classList.add('新类名')
// 删除类
对象.classList.remove('原类名')
// 切换类(有就去掉,没有就加上)
对象.classList.toggle('新类名/旧类名')
设置/修改表单属性
一般表单属性修改操作基本跟修改常用属性一致, 独有的表单属性添加就有效果,移除就没有效果,一律使用布尔值 表示。如果为true,代表添加了该属性;如果是false,代表移除了该属性。eg: disabled、checked、selected
举例如下:
按钮
1
2
DOM节点操作
DOM节点
DOM节点:DOM树里每一个内容都称之为节点
节点类型:① 元素节点 ( 所有的标签 比如 body、 div,html 是根节点) ② 属性节点(所有的属性 比如 href) ③ 文本节点(所有的文本) ④ 其他节点
查找节点
使用背景:可通过父节点、子节点、兄弟节点对目标节点进行定位,然后进行操作,比如点击 x 号关闭二维码(直接获取二维码图片对象即可,x号通过查找节点即可找到)等
父节点查找
// parentNode 属性
let 父节点 = 子元素.parentNode
//返回最近一级的父节点,找不到返回为null
子节点查找
① childNodes 属性
获得所有子节点、包括文本节点(空格、换行)、注释节点等
② * children 属性*
//children 属性
let 子节点集合 = 父元素.children
//返回的是一个伪数组,仅获得所有元素节点
兄弟节点查找
//下一个兄弟节点 nextElementSibling 属性
let 目标节点 = 此节点.nextElementSibling
//上一个兄弟节点 previousElementSibling 属性
let 目标节点 = 此节点.previousElementSibling
增加节点
使用背景:很多情况下,我们需要在页面中增加元素,比如,点击发布按钮,可以新增一条信息等
一般情况下,新增节点的操作 如下: ①先创建 :创建一个新的节点,然后进行节点样式设置 ②后追加 :把创建的新的节点放入到指定的元素内部
创建节点
//创建一个新的元素节点
let 新的节点 = document.createElement('标签名')
追加节点
①插入到父元素的最后一个子元素的后面
//插入到父元素中最后一个子元素的后面
父元素.appendChild(要插入的元素节点)
②插入到父元素中某个子元素的前面
//插入到父元素中某个子元素的前面
父元素.insertBefore(要插入的元素节点,目标子元素)
克隆节点
//克隆一个已有的元素节点
let 新的克隆节点 = 被克隆元素.cloneNode(布尔值)
//若为true,则代表克隆时会包含后代节点,一起克隆(深克隆)
//若为false(默认),则代表克隆时不包含后代节点(浅克隆)
删除节点
使用背景:若一个节点在页面中已不需要时,可以删除它,在 JavaScript 原生DOM操作中,要删除元素必须通过父元素删除
//删除节点
父元素.removeChild(子元素(要删除的元素))
注意:①如不存在父子关系则删除不成功
②删除节点和隐藏节点(display:none)有区别: 隐藏节点,节点还是存在html中的,但是删除节点,则从html中删除节点
事件基础
事件
事件:是在编程时系统内发生的动作或者发生的事情,比如用户在网页上单击一个按钮
事件监听:让程序检测是否有事件产生,一旦有事件触发,就立即调用一个函数做出响应,也称为 注册事件
语法如下:
//建立事件监听
事件源.addEventListener('事件',要执行的函数)
事件监听三要素 : ①事件源:被事件触发的dom元素 ②事件:事件触发的方式,比如鼠标单击 click、鼠标经过 mouseover 等 ③事件调用的函数:事件触发后实现的效果
注意:①事件类型要加 引号
②函数是事件触发之后再去执行,每次触发都会执行一次
事件监听版本
//版本一:DOM L0
事件源.on事件 = function() { }
//版本二:DOM L2
事件源.addEventListener('事件',事件处理函数)
事件监听版本发展史 L:level(了解): ① DOM L0:是 DOM 的发展的第一个版本 ② DOM L1:DOM级别1于1998年10月1日成为W3C推荐标准 ③ DOM L2:使用addEventListener注册事件 ④ DOM L3:DOM3级事件模块在DOM2级事件的基础上重新定义了这些事件,也添加了一些新事件类型
事件类型
鼠标事件
由鼠标触发,包含 click 鼠标点击、mouseenter 鼠标经过、mouseleave 鼠标离开
键盘事件
由键盘触发,包含 Keydown 键盘按下触发、Keyup 键盘抬起触发
焦点事件
由表单获得光标触发,包含 focus 获得焦点、blur 失去焦点
文本事件
由表单输入触发,包含 input 用户输入事件
事件进阶
事件对象
获取事件对象
事件对象:也是一个对象,这个对象里有事件触发时的相关信息 ,比如:鼠标点击事件中,事件对象就存了鼠标点在哪个位置等信息
获取语法:
//获取事件对象
元素.addEventListener('事件',function(e){ })
在事件绑定的回调函数的第一个参数就是事件对象,一般命名为event、ev、e
事件对象常用属性
属性
含义
type
获取当前的事件类型
clientX/clientY
获取光标相对于浏览器可见窗口左上角的位置
offsetX/offsetY
获取光标相对于当前DOM元素左上角的位置
pageX/pageY
获取光标相对于浏览器整个页面左上角的位置
key
用户按下的键盘键的值(不提倡使用keyCode )
事件流
事件流介绍
事件流:事件完整执行过程中的流动路径,包括捕获阶段(从父到子)和冒泡阶段(从子到父 )
事件捕获和事件冒泡
事件冒泡:当目标元素的事件被触发时,同样的事件 将会在该元素的所有祖先元素 中依次被触发 ,这一过程被称为事件冒泡。简单的说就是,当一个元素触发事件后,会依次向上调用所有父级元素的同名事件 。事件冒泡是默认存在 的
举例如下:
//点击'son'div,页面依次弹出'我是儿子' '我是爸爸' '我是爷爷'
事件捕获:从DOM的根元素开始去执行对应的事件 (从外到里)
事件捕获需要写对应代码才能看到效果,语法如下:
//事件捕获
触发事件元素.addEventListener('事件',事件处理函数,是否使用捕获机制)
举例如下:
//点击'son'div,页面依次弹出'我是爷爷' '我是爸爸' '我是儿子'
注意:①addEventListener的第三个参数 传入true代表捕获阶段触发,传入false代表冒泡阶段触发,默认为false
②若是用 L0 事件监听,则只有冒泡阶段,没有捕获
阻止事件流动
使用背景:由于默认有冒泡模式的存在,所以容易导致同名事件影响到父级元素,若想把事件就限制在当前元素内 ,就需要阻止事件流动阻止事件流动需要拿到事件对象 语法: 此方法可以阻断事件流动传播 ,不光在冒泡阶段有效,捕获阶段也有效
阻止事件流动需要拿到事件对象,语法如下:
//阻止事件流动
事件对象.stopPropagation()
举例如下:
//点击'son'div,页面只弹出'我是儿子'
//点击'father'div,页面依次弹出'我是爸爸' '我是爷爷'
注意: ① 鼠标经过事件: mouseover 和 mouseout 会有冒泡效果
mouseenter 和 mouseleave 没有冒泡效果( * 推荐 * )
②阻止默认行为,比如链接点击不跳转,表单域的不提交等
语法如下:
//阻止默认行为
事件对象.preventDefault()
举例如下:
百度
//点击百度,无法进行跳转
▶补充: * 两种注册事件的区别 *
传统on注册(L0)
事件监听注册(L2)
覆盖问题
同一个对象,后面注册的事件 会覆盖 前面注册的事件(同一个事件)
后面注册的事件 不会覆盖 前面注册的事件(同一个事件)
执行阶段
都是 冒泡阶段 执行的
可以通过第三个参数去确定是在 冒泡或者捕获阶段 执行
解绑问题
直接使用 null覆盖 就可以实现事件的解绑
必须使用 removeEventListener (事件类型, 事件处理函数, 获取捕获或者冒泡阶段) ,匿名函数无法被解绑
举例如下:
点击
事件委托
事件委托:是利用事件流的特征解决一些开发需求的知识技巧,事件委托其实是利用事件冒泡 的特点, 给父元素添加事件(可以提高性能 ),子元素都可以触发,通过事件对象.target 可以获得真正触发事件的元素
举例如下:
我是第1个小li
我是第2个小li
我是第3个小li
我是第4个小li
我是第5个小li
//实现效果:点击谁谁变红
事件高级
滚动事件 scroll:当页面进行滚动时触发的事件
使用背景:很多网页需要检测用户把页面滚动到某个区域后做一些处理, 比如固定导航栏、返回顶部
语法如下:
// 页面滚动事件
window.addEventListener('scroll',function(){
//执行的操作
})
// 元素区域滚动事件
元素.addEventListener('scroll',function(){
//执行的操作
})
加载事件 load
加载事件 load:加载外部资源(如图片、外联CSS和JavaScript等)加载完毕时触发的事件
使用背景:有时候需要等页面资源全部加载完了才进行处理或者老代码喜欢把
时间对象
实例化时间对象
时间对象:用来表示时间的对象,可以得到当前系统时间
实例化时间对象语法如下:
//获取当前时间
let date = new Date()
//获得指定时间
let date = new Date('xxxx-xx-xx')
时间对象方法
时间对象方法如下:
方法
作用
说明
getFullYear()
获得年份
获取四位年份
getMonth()
获得月份
取值为 0 ~ 11
getDate()
获取月份中的每一天
不同月份取值也不相同
getDay()
获取星期
取值为 0 ~ 6
getHours()
获取小时
取值为 0 ~ 23
getMinutes()
获取分钟
取值为 0 ~ 59
getSeconds()
获取秒
取值为 0 ~ 59
注意:调用getMonth()、getDay()方法时,记得 +1
举例如下:
//将当前时间以:YYYY-MM-DD HH:mm 形式显示在页面
时间戳
时间戳:指1970年01月01日00时00分00秒起至现在的毫秒数 ,它是一种特殊的计量时间的方式
获取时间戳方式代码如下:
//使用 getTime() 方法
let date = new Date()
let timeStamp = date.getTime()
//简写 +new Date() (推荐)
let timeStamp = +new Date()
//使用 Date().now()
let timeStamp = Date().now()
注意:使用Date().now()无需实例化,但是只能得到当前的时间戳, 而其他两种可以返回指定时间的时间戳
补充:* 倒计时转换公式 *
倒计时总秒数 = (将来的时间戳 - 现在的时间戳)/ 1000 计算天数 d = parseInt(总秒数/ 60/60 /24) 计算小时 h = parseInt(总秒数/ 60/60 %24) 计算分数 m = parseInt(总秒数 /60 %60 ) 计算当前秒数 s = parseInt(总秒数%60)
注意:通过时间戳得到是毫秒,需要转换为秒再计算
重绘和回流
浏览器进行界面渲染的过程
① 解析(Parser)HTML,生成DOM树(DOM Tree)
② 同时解析(Parser) CSS,生成样式规则 (Style Rules)
③ 根据DOM树和样式规则,生成渲染树(Render Tree)
④ 进行布局 Layout(回流/重排):根据生成的渲染树,得到节点的几何信息(位置,大小)
⑤ 进行绘制 Painting(重绘): 根据计算和获取的信息进行整个页面的绘制
⑥ Display: 展示在页面上
回流(重排)
回流(重排):当 Render Tree 中部分或者全部元素的尺寸、结构、布局 等发生改变时,浏览器就会重新渲染部分或全部文档的过程称为回流
重绘
重绘:由于节点(元素)的样式 (比如:color、background-color、outline等)的改变并不影响它在文档流中的位置和文档布局时, 称为重绘
注意:* 重绘不一定引起回流,而回流一定会引起重绘 *
理解:会导致回流(重排)的操作 :
① 页面的首次刷新 ② 浏览器的窗口大小发生改变 ③ 元素的大小或位置发生改变 ④ 改变字体的大小 ⑤ 内容的变化(如:input框的输入,图片的大小) ⑥ 激活css伪类 (如::hover) ⑦ 脚本操作DOM(添加或者删除可见的DOM元素)
简单理解:影响到布局,就会有回流
正则表达式
正则表达式定义
正则表达式(Regular Expression):是用于匹配字符串中字符组合的模式
使用场景:验证表单(匹配)、过滤掉页面内容中的一些敏感词(替换),或从字符串中获取我们想要的特定部分(提取)等
正则表达式定义语法如下:
let 变量名 = /表达式/
//其中/ /是正则表达式字面量
正则表达式使用步骤:
①定义正则表达式
②检测查找是否匹配:test() 方法和exec() 方法
判断是否有符合规则的字符串
test() 方法:用来查看正则表达式与指定的字符串是否匹配,如果匹配 ,返回true,否则false
语法如下:
//判断是否有符合规则的字符串
regObj.test('被检测的字符串')
检索(查找)符合规则的字符串
exec() 方法:在一个指定字符串中执行一个首次搜索匹配, 如果匹配成功,返回一个数组(包含首次出现符合规则的字符串的下标),否则返回null
语法如下:
//检索(查找)符合规则的字符串
regObj.exec('被检测的字符串')
元字符
元字符(特殊字符): 是一些具有特殊含义的字符,极大提高了灵活性和强大的匹配功能
元字符包含边界符、量词、字符类
边界符
边界符(位置符):用来提示字符所处的位置
边界符
说明
^
表示匹配行首的文本(以谁开始)
$
表示匹配行尾的文本(以谁结束)
注意:如果 ^ 和 $ 在一起,表示必须是 精确匹配 ,正则表达式和待检测字符串完全相同
量词
量词:用来设定某个模式出现的次数
量词
说明
*
重复零次或更多次
+
重复一次或更多次
?
重复0次或一次
{n}
重复n次
{n,}
重复n或更多次
{n,m}
重复n到m次
注意:①逗号左右两侧千万 不要出现空格
② 量词只对 最近 的模式有效
字符类
① [ ] 匹配字符集合:后面的字符串只要包含[ ]中任意一个字符 ,都返回 true
② [ ] 里面加上 - 连字符:使用连字符 - 表示一个 范围
③ [ ] 里面加上 ^ 取反字符:使用取反字符 ^ 表示 范围之外
④ . 匹配除换行符之外的任何单个字符
⑤ 预定义: 某些常见模式的简写方式,包含以下预定类:
预定类
说明
\d
匹配0-9之间的任一数字,相当于[0-9]
\D
匹配所有0-9以外的字符,相当于[^0-9]
\w
匹配任意的字母、数字和下划线,相当于[A-Za-z0-9_]
\W
除所有字母、数字和下划线以外的内容,相当于[^A-Za-z0-9_]
\s
匹配空格(包括换行符、制表符、空格符等),相等于[\t\r\n\v\f]
\S
匹配非空格的字符,相当于[^\t\r\n\v\f]
修饰符
修饰符:用来约束正则执行的某些细节行为,如是否区分大小写、是否支持多行匹配等
语法如下:
/正则表达式/修饰符
//ignore 正则匹配时字母不区分大小写
/正则表达式/i
//global 匹配所有满足正则表达式的结果
/正则表达式/g
replace 替换,语法如下:
新的字符串 = 字符串.replace(/正则表达式/,'替换的文本')
举例如下:
JS 执行机制
JS 单线程
JavaScript 语言是单线程 ,也就是说,同一个时间只能做一件事 ,意味着,所有任务需要排队,前一个任务结束,才会执行后一个任务,如果 JS 执行的时间过长,这样就会造成页面的渲染不连贯,导致页面渲染加载阻塞 的感觉
同步和异步
HTML5 提出 Web Worker 标准,允许 JavaScript 脚本创建多个线程,因此JS 中出现了同步 和异步
同步任务
同步任务都在主线程上执行,形成一个执行栈
异步任务
通过回调函数将异步任务添加到任务队列 中(任务队列也称为消息队列)
一般而言,异步任务有以下三种类型:
① 普通事件,如 click、resize 等
② 资源加载,如 load、error 等
③ 定时器,包括 setInterval、setTimeout 等
JS 执行机制
* JS 执行机制步骤 *
① 先执行 执行栈中的同步任务 ,并且将异步任务提交给异步进程处理
② 异步任务完成后放入任务队列中
③ 一旦执行栈中的所有同步任务执行完毕,系统就会按 次序 读取 任务队列中的异步任务 ,于是被读取的异步任务结束等待状态,进入执行栈,开始执行
注意: 由于主线程不断重复获得任务执行任务、再获取任务再执行,所以这种机制被称为 事件循环( event loop)
举例如下:
//输出: 1 2 3 4
你可能感兴趣的:(前端三剑客,javascript,前端,开发语言)
移动端城市区县二级联动选择功能实现包
good2know
本文还有配套的精品资源,点击获取简介:本项目是一套为移动端设计的jQuery实现方案,用于简化用户在选择城市和区县时的流程。它包括所有必需文件:HTML、JavaScript、CSS及图片资源。通过动态更新下拉菜单选项,实现城市到区县的联动效果,支持数据异步加载。开发者可以轻松集成此功能到移动网站或应用,并可基于需求进行扩展和优化。1.jQuery移动端解决方案概述jQuery技术简介jQuery
day15|前端框架学习和算法
universe_01
前端 算法 笔记
T22括号生成先把所有情况都画出来,然后(在满足什么情况下)把不符合条件的删除。T78子集要画树状图,把思路清晰。可以用暴力法、回溯法和DFS做这个题DFS深度搜索:每个边都走完,再回溯应用:二叉树搜索,图搜索回溯算法=DFS+剪枝T200岛屿数量(非常经典BFS宽度把树状转化成队列形式,lambda匿名函数“一次性的小函数,没有名字”setup语法糖:让代码更简洁好写的语法ref创建:基本类型的
用代码生成艺术字:设计个性化海报的秘密
本文围绕“用代码生成艺术字:设计个性化海报的秘密”展开,先概述代码生成艺术字在海报设计中的独特价值,接着介绍常用的代码工具(如HTML、CSS、JavaScript等),详细阐述从构思到实现的完整流程,包括字体样式设计、动态效果添加等,还分享了提升艺术字质感的技巧及实际案例。最后总结代码生成艺术字的优势,为设计师提供打造个性化海报的实用指南,助力提升海报设计的独特性与吸引力,符合搜索引擎SEO标准
vue element 封装表单
影子信息
vue vue.js javascript 前端
背景:在前端系统开发中,系统页面涉及到的表单组件比较多,所以进行了简单的封装。封装的包括一些Form表单组件,如下:input输入框、select下拉框、等实现效果:理论知识:表单组件官方链接:点击跳转封装组件:封装组件的思路:不封装element组件,每一个input组件绑定一个form对象,例如官网。简单封装element组件,利用for循环生成form表单的每一项el-form-item。进
前端面试每日 3+1 —— 第39天
浪子神剑
今天的面试题(2019.05.25)——第39天[html]title与h1、b与strong、i与em的区别分别是什么?[css]写出你知道的CSS水平和垂直居中的方法[js]说说你对模块化的理解[软技能]公钥加密和私钥加密是什么?《论语》,曾子曰:“吾日三省吾身”(我每天多次反省自己)。前端面试每日3+1题,以面试题来驱动学习,每天进步一点!让努力成为一种习惯,让奋斗成为一种享受!欢迎在Iss
前端数据库:IndexedDB从基础到高级使用指南
文章目录前端数据库:IndexedDB从基础到高级使用指南引言一、IndexedDB概述1.1什么是IndexedDB1.2与其他存储方案的比较二、基础使用2.1打开/创建数据库2.2基本CRUD操作添加数据读取数据更新数据删除数据三、高级特性3.1复杂查询与游标3.2事务高级用法3.3性能优化技巧四、实战案例:构建离线优先的待办事项应用4.1数据库设计4.2同步策略实现五、常见问题与解决方案5.
【Java Web实战】从零到一打造企业级网上购书网站系统 | 完整开发实录(三)
笙囧同学
java 前端 状态模式
核心功能设计用户管理系统用户管理是整个系统的基础,我设计了完整的用户生命周期管理:用户注册流程验证失败验证通过验证失败验证通过用户名已存在用户名可用失败成功用户访问注册页面填写注册信息前端表单验证显示错误提示提交到后端后端数据验证返回错误信息用户名唯一性检查提示用户名重复密码加密处理保存用户信息保存成功?显示系统错误注册成功跳转登录页面登录认证机制深度解析我实现了一套企业级的多层次安全认证机制:认
从零到一:打造基于GigaChat AI的艺术创作平台 | 笙囧同学的全栈开发实战
作者简介:笙囧同学,中科院计算机大模型方向硕士,全栈开发爱好者联系方式:
[email protected] 各大平台账号:笙囧同学座右铭:偷懒是人生进步的阶梯前言在AI技术飞速发展的今天,如何将前沿的大模型技术与实际应用相结合,一直是我们开发者关注的焦点。今天,笙囧同学将带大家从零开始,构建一个基于GigaChatAI的艺术创作平台,实现React前端+Django后端的完整全栈解决方案。这不仅仅是
14.tornado操作之应用Websocket协议实现聊天室功能
孤寒者
Tornado框架从入门到实战 websocket tornado 聊天室功能实现 python
目录:每篇前言:1.什么是WebSocket(1)定义(2)优点(3)和HTTP对比(4)适用场景2.WebSocket关键方法3.本tornado项目中使用WebSocket(1)准备一个聊天室的页面:第一步:编写视图:第二步:编写接口:(app.py中加入以下接口!)第三步:编写前端页面:测试接口——响应OK!(2)使用WebSocket:(3)聊天室的聊天功能的最终实现:第一步:战前准备第二
为什么学习Web前端一定要掌握JavaScript?
web前端学习指南
为什么学习Web前端一定要掌握JavaScript?在前端的世界里,没有什么是JavaScript实现不了的,关于JS有一句话:凡是可以用JavaScript来写的应用,最终都会用JavaScript,JavaScript可运行在所有主要平台的所有主流浏览器上,也可运行在每一个主流操作系统的服务器端上。现如今我们在为网站写任何一个主要功能的时候都需要有懂能够用JavaScript写前端的开发人员。
小架构step系列25:错误码
秋千码途
架构 java
1概述一个系统中,可能产生各种各样的错误,对这些错误进行编码。当错误发生时,通过这个错误码就有可能快速判断是什么错误,不一定需要查看代码就可以进行处理,提高问题处理效率。有了统一的错误码,还可以标准化错误信息,方便把错误信息纳入文档管理和对错误信息进行国际化等。没有错误码的管理,开发人员就会按自己的理解处理这些错误。有些直接把堆栈直接反馈到前端页面上,使用看不懂这些信息体验很差,也暴露了堆栈信息有
Java朴实无华按天计划从入门到实战(强化速战版-66天)
岫珩
Java 后端 java 开发语言 学习 Java 时间安排 学习计划
致敬读者感谢阅读笑口常开生日快乐⬛早点睡觉博主相关博主信息博客首页专栏推荐活动信息文章目录Java朴实无华按天计划从入门到实战(强化速战版-66天)1.基础(18)1.1JavaSE核心(5天)1.2数据库与SQL(5天)1.3前端基础(8天)2.进阶(17天)2.1JavaWeb核心(5天)2.2Mybatis与Spring全家桶(6天)2.3中间件入门(4天)2.4实践项目(2天)3.高阶(1
《跨域资源共享CORS的深层逻辑与前端实践精要》
不同源头的资源交互已成为常态,而跨域资源共享(CORS)正是支撑这种交互的隐形架构。现代Web安全体系中平衡开放与防护的精妙设计。理解CORS的深层逻辑,不仅能解决实际开发中的跨域难题,更能触及网络安全与资源流通的核心矛盾,为前端工程师构建稳健的应用提供底层认知支撑。跨域资源共享的诞生,源于网络安全与应用发展的必然冲突。浏览器的同源策略,作为早期网络安全的基石,通过限制不同源文档的交互,有效阻挡了
深入了解 Kubernetes(k8s):从概念到实践
目录一、k8s核心概念二、k8s的优势三、k8s架构组件控制平面组件节点组件四、k8s+docker运行前后端分离项目的例子1.准备前端项目2.准备后端项目3.创建k8s部署配置文件4.部署应用到k8s集群在当今云计算和容器化技术飞速发展的时代,Kubernetes(简称k8s)已成为容器编排领域的事实标准。无论是互联网巨头、传统企业还是初创公司,都在广泛采用k8s来管理和部署容器化应用。本文将带
Vue CSR 到 Nuxt 3 SSR 迁移:技术实现与问题解决实录
二倍速播放
前端 vue.js
1.迁移动机与技术选型1.1CSR架构的局限性基于Vue3和Vite构建的客户端渲染(CSR)单页应用(SPA)提供了良好的开发体验和用户交互流畅性。但是其核心局限在于:搜索引擎优化(SEO):初始HTML响应仅包含一个根div元素,实际内容由JavaScript在浏览器端动态生成。虽然主流搜索引擎(如Google)能够执行部分JavaScript,但其抓取效率和稳定性不如直接获取完整HTML。非
大厂都在用的前端缓存策略,你掌握了吗?
AI架构全栈开发实战笔记
前端 缓存 ai
大厂都在用的前端缓存策略,你掌握了吗?关键词:前端缓存、HTTP缓存、ServiceWorker、CDN缓存、缓存策略、性能优化、浏览器缓存摘要:本文将深入探讨前端开发中常用的缓存策略,从浏览器缓存到ServiceWorker,从HTTP缓存头到CDN缓存,全面解析大厂都在使用的高效缓存技术。通过生动的比喻和实际代码示例,帮助开发者理解并掌握这些提升Web应用性能的关键技术。背景介绍目的和范围本文
26. 什么是雪碧图,作用和原理了解吗
yqcoder
前端面试-CSS css 前端 html
总结小图合成一张,使用background来使用,减少资源请求一、什么是雪碧图?雪碧图(CSSSprite)是一种前端优化技术,指的是将多个小图标合并成一张大图,通过CSS控制显示其中的某一部分。它常用于网站中图标、按钮等小图较多的场景。二、雪碧图的作用作用说明✅减少HTTP请求次数合并多个图片为一张图,减少请求资源数✅提升页面加载速度尤其在图片较多时效果明显✅避免图片加载闪烁鼠标悬停切换图片时不
12. 什么是事件委托
yqcoder
前端面试-CSS css 面试
总结事件委托(EventDelegation)是JavaScript中一种重要的事件处理机制,它利用了事件冒泡的特性,将事件的处理程序绑定到父元素或祖先元素上,而不是直接绑定到具体的子元素上。什么是事件委托?事件冒泡:在DOM中,事件通常会从触发元素开始,然后逐级向上冒泡到其父元素、祖先元素,直到window对象。核心思想:事件委托的核心思想是利用事件冒泡机制,在父元素上监听事件,而不是在每个子元
H5UI微信小程序前端框架实战指南
ai
本文还有配套的精品资源,点击获取简介:H5UI是一个为微信小程序开发设计的前端框架,基于H5技术,提供简洁高效的组件库。框架集成了丰富的UI元素,如按钮、表格、导航栏等,简化了界面布局和交互的实现。通过安装、引入、使用组件和事件绑定四个步骤,开发者可以轻松构建功能齐全的应用。了解性能优化等注意事项对于高效开发同样重要。1.微信小程序前端开发框架介绍微信小程序概述微信小程序是微信官方推出的一种无需下
Ubuntu安装LAMP
L_h1
测试 ubuntu linux
在安装vim时遇到了一个问题:E:无法获得锁/var/lib/dpkg/lock-frontend-open(11:资源暂时不可用)E:无法获取dpkg前端锁(/var/lib/dpkg/lock-frontend),是否有其他进程正占用它?解决办法:强制解锁sudorm/var/lib/dpkg/lock-frontendsudorm/var/cache/apt/archives/locksud
震惊!DOM变化监控神器MutationObserver,前端开发必知的隐藏武器!
coding随想
JavaScript 前端 javascript html5
一、什么是MutationObserver?如果你是一个前端开发者,一定会遇到这样的场景:页面动态加载内容后,某些操作失效了。比如,你写了一个监听按钮点击的代码,但按钮是通过AJAX动态加载的,你的代码根本无法触发。这个时候,你就需要一个“监控哨兵”——MutationObserver,它能实时监听DOM树的变化,帮你捕获那些“暗中作祟”的节点变动。MutationObserver是HTML5引入
Coze Studio 架构拆解:AI Agent 开发平台项目结构全分析
代码简单说
2025开发必备(限时特惠) 架构 人工智能 Coze Studio 架构 AI Agent 开发平台 全栈 AI 工程化 图解架构
CozeStudio架构拆解:AIAgent开发平台项目结构全分析标签:CozeStudio项目架构、领域驱动设计DDD、全栈开发规范、Hertz框架、前后端协作、云原生容器、前端测试、IDL接口设计、微服务解耦、AI开发平台源码分析在最近研究AIAgent开发平台的过程中,我深入分析了刚刚开源的CozeStudio项目。这套系统是国内少有的开源全栈AI工程化项目,代码整洁、架构先进,特别是它基于
关于前端的性能优化
性能优化主要涵盖了以下四个方面:(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
linux网卡显示未知未托管,linux有线网络显示设备未托管
NetworkManagerNetworkManager是为了使网络配置尽可能简单而开发的网络管理软件包,如果使用DHCP,NetworkManager会替换默认的路由表、从DHCP服务器获取IP地址并根据情况设置域名服务器,NetworkManager的目标是使网络能够开箱即用。NetworkManager由两部分组成:一个以超级用户运行的守护进程(network-manager);一个前端管理
页面开发样式和布局入门:Vite + Vue 3 + Less
页面开发样式和布局入门:Vite+Vue3+Less引言在现代前端开发中,样式和布局是页面开发的核心部分。随着技术的不断发展,Vite、Vue3和Less等工具和框架的出现,使得前端开发变得更加高效和灵活。然而,尽管这些工具和框架提供了强大的功能,但在实际开发中仍然会遇到各种样式和布局的问题。本文将结合Vite、Vue3和Less,详细介绍在页面开发中常见的样式和布局问题,并提供解决方案和最佳实践
推客系统小程序机构版开发上线全攻略(2025年最新版)
vx_qutudy
推客小程序 推客系统开发 推客系统源码
一、开发前准备:筑牢基础,合规先行1.1注册与认证账号注册:登录微信公众平台注册小程序账号,选择“机构版”类型,获取唯一AppID。资质认证:基础资质:企业营业执照、法人身份证、对公账户信息。特殊资质:涉及支付功能:需办理《增值电信业务经营许可证》(ICP证)。涉及教育/医疗内容:需《互联网信息服务许可证》或相关行业资质。1.2技术选型:高效与扩展并重模块推荐方案前端框架微信原生框架(WXML+W
网络安全第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开发者的终极参考书。如果你还在为原型链、闭包、异步编
开发者关心的那些事
圣子足道
ios 游戏 编程 apple 支付
我要在app里添加IAP,必须要注册自己的产品标识符(product identifiers)。产品标识符是什么?
产品标识符(Product Identifiers)是一串字符串,它用来识别你在应用内贩卖的每件商品。App Store用产品标识符来检索产品信息,标识符只能包含大小写字母(A-Z)、数字(0-9)、下划线(-)、以及圆点(.)。你可以任意排列这些元素,但我们建议你创建标识符时使用
负载均衡器技术Nginx和F5的优缺点对比
bijian1013
nginx F5
对于数据流量过大的网络中,往往单一设备无法承担,需要多台设备进行数据分流,而负载均衡器就是用来将数据分流到多台设备的一个转发器。
目前有许多不同的负载均衡技术用以满足不同的应用需求,如软/硬件负载均衡、本地/全局负载均衡、更高
LeetCode[Math] - #9 Palindrome Number
Cwind
java Algorithm 题解 LeetCode Math
原题链接:#9 Palindrome Number
要求:
判断一个整数是否是回文数,不要使用额外的存储空间
难度:简单
分析:
题目限制不允许使用额外的存储空间应指不允许使用O(n)的内存空间,O(1)的内存用于存储中间结果是可以接受的。于是考虑将该整型数反转,然后与原数字进行比较。
注:没有看到有关负数是否可以是回文数的明确结论,例如
画图板的基本实现
15700786134
画图板
要实现画图板的基本功能,除了在qq登陆界面中用到的组件和方法外,还需要添加鼠标监听器,和接口实现。
首先,需要显示一个JFrame界面:
public class DrameFrame extends JFrame { //显示
linux的ps命令
被触发
linux
Linux中的ps命令是Process Status的缩写。ps命令用来列出系统中当前运行的那些进程。ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程,如果想要动态的显示进程信息,就可以使用top命令。
要对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程,而 ps 命令就是最基本同时也是非常强大的进程查看命令。使用该命令可以确定有哪些进程正在运行
Android 音乐播放器 下一曲 连续跳几首歌
肆无忌惮_
android
最近在写安卓音乐播放器的时候遇到个问题。在MediaPlayer播放结束时会回调
player.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
mp.reset();
Log.i("H
java导出txt文件的例子
知了ing
java servlet
代码很简单就一个servlet,如下:
package com.eastcom.servlet;
import java.io.BufferedOutputStream;
import java.io.IOException;
import java.net.URLEncoder;
import java.sql.Connection;
import java.sql.Resu
Scala stack试玩, 提高第三方依赖下载速度
矮蛋蛋
scala sbt
原文地址:
http://segmentfault.com/a/1190000002894524
sbt下载速度实在是惨不忍睹, 需要做些配置优化
下载typesafe离线包, 保存为ivy本地库
wget http://downloads.typesafe.com/typesafe-activator/1.3.4/typesafe-activator-1.3.4.zip
解压r
phantomjs安装(linux,附带环境变量设置) ,以及casperjs安装。
alleni123
linux spider
1. 首先从官网
http://phantomjs.org/下载phantomjs压缩包,解压缩到/root/phantomjs文件夹。
2. 安装依赖
sudo yum install fontconfig freetype libfreetype.so.6 libfontconfig.so.1 libstdc++.so.6
3. 配置环境变量
vi /etc/profil
JAVA IO FileInputStream和FileOutputStream,字节流的打包输出
百合不是茶
java核心思想 JAVA IO操作 字节流
在程序设计语言中,数据的保存是基本,如果某程序语言不能保存数据那么该语言是不可能存在的,JAVA是当今最流行的面向对象设计语言之一,在保存数据中也有自己独特的一面,字节流和字符流
1,字节流是由字节构成的,字符流是由字符构成的 字节流和字符流都是继承的InputStream和OutPutStream ,java中两种最基本的就是字节流和字符流
类 FileInputStream
Spring基础实例(依赖注入和控制反转)
bijian1013
spring
前提条件:在http://www.springsource.org/download网站上下载Spring框架,并将spring.jar、log4j-1.2.15.jar、commons-logging.jar加载至工程1.武器接口
package com.bijian.spring.base3;
public interface Weapon {
void kil
HR看重的十大技能
bijian1013
提升 能力 HR 成长
一个人掌握何种技能取决于他的兴趣、能力和聪明程度,也取决于他所能支配的资源以及制定的事业目标,拥有过硬技能的人有更多的工作机会。但是,由于经济发展前景不确定,掌握对你的事业有所帮助的技能显得尤为重要。以下是最受雇主欢迎的十种技能。 一、解决问题的能力 每天,我们都要在生活和工作中解决一些综合性的问题。那些能够发现问题、解决问题并迅速作出有效决
【Thrift一】Thrift编译安装
bit1129
thrift
什么是Thrift
The Apache Thrift software framework, for scalable cross-language services development, combines a software stack with a code generation engine to build services that work efficiently and s
【Avro三】Hadoop MapReduce读写Avro文件
bit1129
mapreduce
Avro是Doug Cutting(此人绝对是神一般的存在)牵头开发的。 开发之初就是围绕着完善Hadoop生态系统的数据处理而开展的(使用Avro作为Hadoop MapReduce需要处理数据序列化和反序列化的场景),因此Hadoop MapReduce集成Avro也就是自然而然的事情。
这个例子是一个简单的Hadoop MapReduce读取Avro格式的源文件进行计数统计,然后将计算结果
nginx定制500,502,503,504页面
ronin47
nginx 错误显示
server {
listen 80;
error_page 500/500.html;
error_page 502/502.html;
error_page 503/503.html;
error_page 504/504.html;
location /test {return502;}}
配置很简单,和配
java-1.二叉查找树转为双向链表
bylijinnan
二叉查找树
import java.util.ArrayList;
import java.util.List;
public class BSTreeToLinkedList {
/*
把二元查找树转变成排序的双向链表
题目:
输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。
要求不能创建任何新的结点,只调整指针的指向。
10
/ \
6 14
/ \
Netty源码学习-HTTP-tunnel
bylijinnan
java netty
Netty关于HTTP tunnel的说明:
http://docs.jboss.org/netty/3.2/api/org/jboss/netty/channel/socket/http/package-summary.html#package_description
这个说明有点太简略了
一个完整的例子在这里:
https://github.com/bylijinnan
JSONUtil.serialize(map)和JSON.toJSONString(map)的区别
coder_xpf
jquery json map val()
JSONUtil.serialize(map)和JSON.toJSONString(map)的区别
数据库查询出来的map有一个字段为空
通过System.out.println()输出 JSONUtil.serialize(map): {"one":"1","two":"nul
Hibernate缓存总结
cuishikuan
开源 ssh javaweb hibernate缓存 三大框架
一、为什么要用Hibernate缓存?
Hibernate是一个持久层框架,经常访问物理数据库。
为了降低应用程序对物理数据源访问的频次,从而提高应用程序的运行性能。
缓存内的数据是对物理数据源中的数据的复制,应用程序在运行时从缓存读写数据,在特定的时刻或事件会同步缓存和物理数据源的数据。
二、Hibernate缓存原理是怎样的?
Hibernate缓存包括两大类:Hib
CentOs6
dalan_123
centos
首先su - 切换到root下面1、首先要先安装GCC GCC-C++ Openssl等以来模块:yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel2、再安装ncurses模块yum -y install ncurses-develyum install ncurses-devel3、下载Erang
10款用 jquery 实现滚动条至页面底端自动加载数据效果
dcj3sjt126com
JavaScript
无限滚动自动翻页可以说是web2.0时代的一项堪称伟大的技术,它让我们在浏览页面的时候只需要把滚动条拉到网页底部就能自动显示下一页的结果,改变了一直以来只能通过点击下一页来翻页这种常规做法。
无限滚动自动翻页技术的鼻祖是微博的先驱:推特(twitter),后来必应图片搜索、谷歌图片搜索、google reader、箱包批发网等纷纷抄袭了这一项技术,于是靠滚动浏览器滚动条
ImageButton去边框&Button或者ImageButton的背景透明
dcj3sjt126com
imagebutton
在ImageButton中载入图片后,很多人会觉得有图片周围的白边会影响到美观,其实解决这个问题有两种方法
一种方法是将ImageButton的背景改为所需要的图片。如:android:background="@drawable/XXX"
第二种方法就是将ImageButton背景改为透明,这个方法更常用
在XML里;
<ImageBut
JSP之c:foreach
eksliang
jsp forearch
原文出自:http://www.cnblogs.com/draem0507/archive/2012/09/24/2699745.html
<c:forEach>标签用于通用数据循环,它有以下属性 属 性 描 述 是否必须 缺省值 items 进行循环的项目 否 无 begin 开始条件 否 0 end 结束条件 否 集合中的最后一个项目 step 步长 否 1
Android实现主动连接蓝牙耳机
gqdy365
android
在Android程序中可以实现自动扫描蓝牙、配对蓝牙、建立数据通道。蓝牙分不同类型,这篇文字只讨论如何与蓝牙耳机连接。
大致可以分三步:
一、扫描蓝牙设备:
1、注册并监听广播:
BluetoothAdapter.ACTION_DISCOVERY_STARTED
BluetoothDevice.ACTION_FOUND
BluetoothAdapter.ACTION_DIS
android学习轨迹之四:org.json.JSONException: No value for
hyz301
json
org.json.JSONException: No value for items
在JSON解析中会遇到一种错误,很常见的错误
06-21 12:19:08.714 2098-2127/com.jikexueyuan.secret I/System.out﹕ Result:{"status":1,"page":1,&
干货分享:从零开始学编程 系列汇总
justjavac
编程
程序员总爱重新发明轮子,于是做了要给轮子汇总。
从零开始写个编译器吧系列 (知乎专栏)
从零开始写一个简单的操作系统 (伯乐在线)
从零开始写JavaScript框架 (图灵社区)
从零开始写jQuery框架 (蓝色理想 )
从零开始nodejs系列文章 (粉丝日志)
从零开始编写网络游戏 
jquery-autocomplete 使用手册
macroli
jquery Ajax 脚本
jquery-autocomplete学习
一、用前必备
官方网站:http://bassistance.de/jquery-plugins/jquery-plugin-autocomplete/
当前版本:1.1
需要JQuery版本:1.2.6
二、使用
<script src="./jquery-1.3.2.js" type="text/ja
PLSQL-Developer或者Navicat等工具连接远程oracle数据库的详细配置以及数据库编码的修改
超声波
oracle plsql
在服务器上将Oracle安装好之后接下来要做的就是通过本地机器来远程连接服务器端的oracle数据库,常用的客户端连接工具就是PLSQL-Developer或者Navicat这些工具了。刚开始也是各种报错,什么TNS:no listener;TNS:lost connection;TNS:target hosts...花了一天的时间终于让PLSQL-Developer和Navicat等这些客户
数据仓库数据模型之:极限存储--历史拉链表
superlxw1234
极限存储 数据仓库 数据模型 拉链历史表
在数据仓库的数据模型设计过程中,经常会遇到这样的需求:
1. 数据量比较大; 2. 表中的部分字段会被update,如用户的地址,产品的描述信息,订单的状态等等; 3. 需要查看某一个时间点或者时间段的历史快照信息,比如,查看某一个订单在历史某一个时间点的状态, 比如,查看某一个用户在过去某一段时间内,更新过几次等等; 4. 变化的比例和频率不是很大,比如,总共有10
10点睛Spring MVC4.1-全局异常处理
wiselyman
spring mvc
10.1 全局异常处理
使用@ControllerAdvice注解来实现全局异常处理;
使用@ControllerAdvice的属性缩小处理范围
10.2 演示
演示控制器
package com.wisely.web;
import org.springframework.stereotype.Controller;
import org.spring