智商测试的科学与艺术:分类详解及应用场景
简介
智商,即智力商数(Intelligence Quotient),系个人智力测验成绩和同年龄被试成绩相比的指数,是衡量个人智力高低的标准。分类
按测验的内容分:能力测验学绩测验,如成套的成就测验等。按测验的对象特点分:个别测验和团体测验。
按测验表现形式分:文字测验(纸笔测验)和非文字测验。
按测验要求分:有最高作为测验和典型行为测验。
按测验的目的分:描述性测验、诊断性测验、预测性测验。
按测验的时间分:速度测验和难度测验。
比奈-西蒙智力量表
比奈-西蒙智力量表Binet-Simon Tests
1905年法国心理学家制定出第一个正式的心理测验:比奈-西蒙智力量表(包括30个项目),
1908年进行了第一次修订,
1922年传入我国,
1982年由北京吴天敏先生修订,共51题,主要适合测量小学生和初中生的智力
韦克斯勒智力量表
韦克斯勒智力量表Wechsler Intelligence Scale
由美国心理学家D.韦克斯勒制定。为了更真实的反应出一个人的智力情况,韦克斯勒编制了若干套智力量表。
韦氏成人智力量表(Wechsler Adult Intelligence Scale ,WAIS,1955),适用于16岁以上的成人;
韦氏儿童智力量表(Wechsler Intelligence Scale for Children,WISC,1949),适用于6到16岁儿童;
韦氏学前儿童智力量表(Wechsler Preschool and Primary Scale of Intelligence,WPPSI,1963),适用于4到6岁半。
计算公式:IQ=100 +15Z Z为标准分数
斯坦福一比奈智力量表
斯坦福一比奈智力量表Stanford-Binet Intelligence Scale (V)
斯坦福一比奈智力量表是美国斯坦福大学教授推孟(Lewis Terman)于1916年对“比奈一西孟智力量表”修订而成的,
1937年和1960年,斯坦福—比奈智力量表又经过两次修订,成为目前世界上广泛流传的标准测验之一 。
智龄(mental age)即人的智力年龄。推蒙提出了智力商数的概念,其公式为:智商(IQ)=智龄(MA)/实龄(CA)×100。测验以个别方式进行,通常幼儿不超过30~40分钟,成人被试不多于90分钟。测验程序是以稍低于被试实际年龄组开始,如果在这组内有任何一项目未通过则降到低一级的年龄组继续进行,直至某组全部项目都通过,这一年龄组就作为该被试智龄分数的“基础年龄”;然后再依次实施较大的各年龄组,直至某组的项目全部失败为止,此年龄组作为该被试的“上限年龄”。
军队甲种团体智力测验
军队甲种团体智力测验军队甲种团体智力测验是一种文字测验。适用于具有中学以上文化水平的人。测试时限40~50分钟,由8个分测验组成,即:遵循指示、算术、判断、词义异同、词句重组、完成数序、类比和常识。每个分测验的项目按难度顺序排列,有5个复份。信度系数为.95,效度(与斯坦福-比奈智力量表的相关系数)为.80~.90。
军队乙种团体智力测验
军队乙种团体智力测验军队乙种团体智力测验是一种非文字测验,适用于文盲和不懂英语的人,测验时限50分钟,由7个分测验组成,即:迷津、数立方体、完成图序、译码、校对数字、图像指缺和几何组构测验。该测验与军队甲种团体智力测验的相关系数为.80,与斯坦福-比奈智力量表的相关系数为.73。
找到属于你的职业道路:霍兰德职业兴趣测试将帮助你迈出成功的第一步!
约翰.霍兰德于1959年提出了具有广泛社会影响的人业互择理论。这一理论首先根据劳动者的心理素质和择业倾向,将劳动者划分为6种基本类型,相应的职业也划分为6种类型:社会型(Social)、企业型(Enterprising)、现实型(Realistic)、常规型(Conventional)、研究型(Investigative)、艺术型(Artistic)。霍兰德认为,绝大多数人都可以被归于六种类型中的一种。
霍兰德职业兴趣测试的意义
发掘潜在能力:测试报告中的各项得分可以帮助你发现自己在不同职业领域的潜在能力。针对得分较高的领域,你可以进一步发掘和培养自己的相关技能,提升自己的竞争力。保持开放心态:虽然霍兰德职业兴趣测试为你提供了一个了解自己职业兴趣的视角,但这并不意味着你必须严格遵循测试结果。在职业发展过程中,保持开放心态,勇于尝试新事物,有助于你发掘更多的潜力和可能性。
了解并接受自己的职业兴趣:首先,通过霍兰德职业兴趣测试,你可以更深入地了解自己的职业兴趣类型。接受并理解自己的职业兴趣,有助于你更好地规划职业发展路径,避免盲目跟从他人或社会的期望。
制定实施计划:为了实现职业目标,你需要制定具体的实施计划。这包括学习计划、实践计划、社交计划等。通过不断学习和实践,提升自己的专业能力和综合素质,为未来的职业发展打下坚实的基础。
明确职业目标:基于测试结果,你可以明确自己的职业目标和发展方向。设定明确的职业目标有助于你更有针对性地规划学习计划和职业路径,避免在职业发展中迷失方向。
职业测试的员工案例
江女士为大四学生,药学专业,实习是在一家小型医院做人事助理,比较迷茫,将来就业在做药剂师、人力资源、医药代表三个方面徘徊不定。经过测评江女士社会型分数最高,管理型次之。经过面谈咨询之后,也验证了江女士在这两方面存在优势,于是江女士去了一家医药上市公司做医药代表,半年后发展还不错,已经成为了小组中的销售冠军。霍兰德职业兴趣测试 人群占比
霍兰德职业兴趣测试报告的人群占比并没有一个固定的标准,因为每个人的职业兴趣都是独特的,而且职业兴趣也会随着个人的成长和经历而发生变化。然而,根据霍兰德职业兴趣理论,可以将人群大致划分为六个类型:现实型、研究型、艺术型、社会型、企业型和常规型。这六个类型的人群占比可能会因不同的研究样本和地域而有所不同。
一般来说,不同职业兴趣类型的人群占比可能会受到性别、年龄、教育程度、文化背景等多种因素的影响。例如,一些研究表明,男性更倾向于选择现实型、研究型和企业型职业,而女性则更倾向于选择社会型、艺术型和常规型职业。
需要注意的是,霍兰德职业兴趣测试只是一种工具,它可以帮助人们更好地了解自己的职业兴趣类型,但并不能完全决定一个人的职业选择和发展方向。因此,在选择职业时,还需要考虑自己的能力、兴趣、价值观等多方面因素。
**HTTP请求方法的真相:还有哪些我们不曾了解的秘密?**
HTTP 请求方法
get 请求指定的页面信息,并返回实体主体。post 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改。
delete 请求服务器删除指定的页面。
put 从客户端向服务器传送的数据取代指定的文档的内容。
patch 是对 PUT 方法的补充,用来对已知资源进行局部更新 。
connect HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。
options 允许客户端查看服务器的性能。
head 类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头
trace 回显服务器收到的请求,主要用于测试或诊断。
请求服务器数据,get和post请求的区别是什么?
get是在url后面 post放在虚拟载体里面get 有大小限制(只能提交少量参数)
post 比 get 安全
HTTP状态码
分类 分类描述1** 信息,服务器收到请求,需要请求者继续执行操作
2** 成功,操作被成功接收并处理
3** 重定向,需要进一步的操作以完成请求
4** 客户端错误,请求包含语法错误或无法完成请求
5** 服务器错误,服务器在处理请求的过程中发生了错误
200 OK 请求成功
204 No Content(无内容)
301 Moved Permanently(永久重定向)
302 Found(临时重定向)
303 See Othe(查看其他地址)
304 Not Modified(未修改)
305 Use Proxy(使用代理)
400 Bad Request (语法错误)
401 Unauthorized(未授权)请求要求用户的身份认证
403 Forbidden(禁止)
404 Not Found(未找到)请求的资源(网页等)不存在
405 Method Not Allowed (方法禁用)
406 Not Acceptable(不接受)
407
Proxy Authentication Required
请求者应当使用代理进行授权
408 Request Time-out(请求超时)
500Internal Server Error(服务器内部错误)
501 Not Implemented(尚未实施)
502 Bad Gateway(错误网关)
503 Service Unavailable(服务不可用)
504 Gateway Time-out(网关超时)
505 HTTP Version not supported(HTTP 版本不受支持)
AJAX请求的生命周期及其影响因素
ajax的请求过程
1、新建ajax对象:IE6不兼容new XMLHttpRequest();
IE6下,ajax对象的兼容方法:
try判断的方法:
var xhr = null;
try { xhr = new XMLHttpRequest(); }
catch (e) { xhr = new ActiveXObject(‘Microsoft.XMLHTTP‘); }
window判断的方法:
var xhr = null;
if (window.XMLHttpRequest) { xhr = new XMLHttpRequest(); }
else { xhr = new ActiveXObject(‘Microsoft.XMLHTTP‘); }
2、发送请求的准备工作 :
通过get、post发送某个信息,但是这一步无法显示出来,相当于网址,post方式,文件信息地址在xhr.send();中
open()有3个参数:请求方式、请求地址、是否异步
如:xhr.open(‘get‘,‘1.php‘,true); xhr.open(‘post‘,‘2.post.php‘,true);
请求方式:get、post、request:
如:xhr.open(‘get‘,‘2.get.php?username=leo&age=30&‘,true);
get方式:
中文乱码无法显示:编码encodeURI 如:xhr.open(‘get‘,‘2.get.php?username=‘ encodeURI(‘刘伟‘) ‘&age=30&‘ new Date().getTime(),true);
缓存引起无法刷新:在url?后面连接一个随机数,时间轴如:xhr.open(‘get‘,‘2.get.php?username=leo&age=30&‘ new Date().getTime(),true);
如:xhr.send(‘username=刘伟&age=30‘);
post方式:
post没有缓存问题
中文无需编码
数据放在send()里面作为参数传递
在send()前面,必须申明发送的数据类型 如:xhr.setRequestHeader(‘content-type‘, ‘application/x-www-form-urlencoded‘);
地址(接口):
静态地址,如:xhr.open(‘get‘,‘1.txt‘,true);
动态地址:如:xhr.open(‘get‘,‘1.php‘,true);
是否异步:
false:同步:阻塞 前面的代码会影响后面代码的执行 很少使用同步(除非后面的操作,需要前面的数据)
true:异步:非阻塞 前面的代码不会影响后面代码的执行
3、提交发送的请求:
如:xhr.send();
4、等待服务器返回内容:
返回正确内容的条件:1、readyState值发生改变 2、readyState属性值为4 3、status属性值为200
onreadystatechange事件 当状态值发生改变时触发
readyState属性:请求状态
0 未初始化)还没有调用open()方法
1 (载入)已调用send()方法,正在发送请求
2 (载入完成)send()方法完成,已收到全部响应内容
3 (解析)正在解析响应内容
4 (完成)响应内容解析完成,可以在客户端调用了
status属性:服务器(请求资源)的状态码(http状态码)
1、消息(1字头)
2、成功(2字头) 如:200 OK
3、重定向(3字头)
4、请求错误(4字头)
5、服务器错误(5、6字头)
返回的内容
responseText:ajax返回的内容,就存在于这个属性下面,以字符串的形式
BFC:超越常规布局的秘密武器
BFC
BFC是指页面中的一个渲染区域,并且拥有一套渲染规则,他决定了 其子标签如何定位,以及与其他标签的相互关系和作用。BFC的特性
垂直方向上的距离由margin决定,属于同一个BFC的两个相邻标签的margin会发生重叠。
每个标签的左外边距与包含块的左边界相接触(从左向右),即使浮动标签也是如此。
BFC 的区域不会与 float 的标签区域重叠。(不包括固定定位方法)
计算BFC的髙度时,浮动子标签也参与计算。
BFC就是页面上的一个隔离的独立容器,容器里面的子标签不会影响到外面标签, 反之亦然。
BFC解决的问题
外边距塌陷
清浮动
两栏或者三栏自适应布局 (只能用overflow:hidden)
BFC:网页设计的隐秘利器
BFC
BFC是指页面中的一个渲染区域,并且拥有一套渲染规则,他决定了 其子标签如何定位,以及与其他标签的相互关系和作用。BFC解决的问题
外边距塌陷
清浮动
两栏或者三栏自适应布局 (只能用overflow:hidden)
BFC的特性
垂直方向上的距离由margin决定,属于同一个BFC的两个相邻标签的margin会发生重叠。
每个标签的左外边距与包含块的左边界相接触(从左向右),即使浮动标签也是如此。
BFC 的区域不会与 float 的标签区域重叠。(不包括固定定位方法)
计算BFC的髙度时,浮动子标签也参与计算。
BFC就是页面上的一个隔离的独立容器,容器里面的子标签不会影响到外面标签, 反之亦然。
揭秘2024年web前端面试常问问题:竟然有这样的答案!
js的防抖、节流
防抖(Debounce)防抖的基本思想是设置一个等待时间,在这个等待时间内,事件可以被连续触发,但函数只会在最后一次触发后的等待时间结束时执行一次。如果在等待时间内再次触发事件,那么会重新计算等待时间。
使用场景:搜索框实时搜索、窗口大小变化后的计算等。
节流(Throttle)
节流的基本思想是保证在一定时间内只触发一次函数。与防抖不同的是,节流不管事件触发多频繁,都会保证在一段时间内至少执行一次函数。
使用场景:滚动事件中的加载更多、拖拽场景等。
触发机制:
防抖是在事件停止触发 N 秒后执行一次,如果你在一个事件执行的 N 秒内又触发了这个事件,则会重新计算执行时间。
节流是在固定的时间间隔内只执行一次函数,不论事件触发多频繁,都会保证在一段时间内至少执行一次函数。
使用场景:
防抖通常用于输入框的实时搜索、窗口大小变化后的计算等场景,需要等待用户停止输入或窗口大小变化停止后再执行相应的操作。
节流通常用于滚动事件中的加载更多、拖拽场景等,需要保证在一定时间内至少执行一次函数来响应用户的操作。
实现方式:
防抖的实现方式通常是在事件触发时设置一个延迟执行的函数,并清除之前的延迟执行函数。
节流的实现方式通常是在事件触发时判断距离上次执行函数的时间是否达到了指定的时间间隔,如果达到了则执行函数,否则不执行。
宏任务、微任务
javaScript是单线程语言(如果多线程dom会疯掉)所以在同一时间只能执行一个任务,称为主线程,用来执行同步任务
同时还有两个任务列表用于存放异步任务,宏任务、微任务
执行顺序为:主线程=>微任务=>宏任务
宿主环境提供的叫宏任务,不是立即执行
由语言标准提供的叫微任务,立即执行
宿主环境:简单来说就是能使javascript完美运行的环境,只要能完美运行javascript的载体就是javascript的宿主环境。目前我们常见的两种宿主环境有浏览器和node
语言标准:我们都知道JavaScript是一种编程语言,但其实JavaScript由ECMA制定标准,称之为ECMAScript,所以由语言标准提供的就是微任务,比如ES6提供的promise。
宏任务:script(全局任务), setTimeout, setInterval, setImmediate, I/O, UI rendering.
微任务:Promise, process.nextTick, Object.observer, MutationObserver
引用、复制(深/浅拷贝)的区别
直接赋值对象(array、json),是引用,如果想复制,必须循环赋值每一项。或者使用JSON.Stringify()、JSON.parse()等等进行转换直接赋值数字、字符串,是复制
基本数据类型:string、number、boolean、undefined、null
引用数据类型:object、array、function
闭包
闭包是指有权访问另一个函数作用域中变量的函数闭包:函数嵌套函数,内部函数可以引用外部函数的参数和变量,参数和变量不会被垃圾回收机制所收回。
JS中的垃圾回收机制:函数调用完后,函数中的参数和变量,会被垃圾回收机制收回,不再存在
闭包需要注意的地方:在IE下可能引发内存泄漏,页面跳转时,变量不会释放,一直存在,造成累加,只有关闭浏览器时,才会释放
IE下发生内存泄漏的条件:在一个闭包中,内部函数与外部函数互相引用,
如果过多使用闭包,容易导致内存泄露。
闭包的好处:
希望一个变量长期驻扎在内存当中
避免全局变量的污染
私有成员的存在。
用法:
模块化代码:减少全局变量的污染
在循环中直接找到对应元素的索引
函数定义的同时,马上执行
( function(){ ... } )();
案例:闭包
function aaa(){
var a = 1; //a是局部变量,一直存在于内存中
return function(){
a ;
alert(a);
}
}
var b = aaa();
b(); //2
b(); //3
//alert(a); //a是全局变量,未被定义,避免了全局变量的污染
将函数改写成闭包形式的模块代码
function aaa(){
var a = 1;
return function(){
a;
alert(a);
}
}
var b = aaa();
b(); //2
b(); //3
//alert(a);
改写后的模块代码
var aaa = (function(){
var a = 1;
return function(){
a;
alert(a);
}
})();
aaa(); //2
aaa(); //3
js哪些操作会造成内存泄露?
内存溢出是指应用系统中存在无法回收的内存或使用的内存过多,最终使得程序运行要用到的内存大于虚拟机能提供的最大内存。闭包
意外的全局变量引起的内存泄露
被遗忘的定时器或者回调:没有使用clearInterval()、clearTimeout()清理
事件
引用
脱离 DOM 的引用
回调函数
vue内存泄漏
vue是单页应用 (SPA),页面路由切换后,内存未释放。vue-router跳转到别的组件导致的内容泄漏
keep-alive将组件保存到了内存中,不会释放
通过原型连,将插件绑定在vue实例上,通过this全局引用
在钩子函数(如:mounted/created)中,绑定了DOM/BOM 对象中的事件、变量的初始化,内存不会释放。需要在beforeDestroy 中做对应销毁处理
如果在mounted/created 钩子中使用了$on,需要在beforeDestroy 中做对应解绑($off)处理
通过插件新建的对象,使用完之后一定要删除,释放内存
使用第三方库、插件引起的
使用其他的框架(如:jquery)创建元素、绑定事件,v-if的值变成false时,无法删除这些元素、事件
使用其他的框架(如:jquery)创建元素、绑定事件,v-if的值变成false时,无法删除这些元素、事件
1、v-if绑定到false的值,但是实际上dom元素在隐藏的时候没有被真实的释放掉
2、就是非常常见的比如我们通过v-if删除了父级元素,但是并没有移除父级元素里的dom片段。
dom、bom渲染浏览器的原理
DOM:document对象,通过它可以对html中的元素进行操作、访问body 提供对body元素的直接访问。对于定义了框架集的文档,该属性引用最外层的frameset
cookie
设置或返回与当前文档有关的所有 cookie。
domain
返回当前文档的域名。
lastModified
返回文档被最后修改的日期和时间。
referrer
返回载入当前文档的文档的 URL。
title
返回当前文档的标题。
URL
返回当前文档的 URL。
close()
关闭用 document.open() 方法打开的输出流,并显示选定的数据。
getElementById()
返回对拥有指定 id 的第一个对象的引用。
getElementsByName()
返回带有指定名称的对象集合。
getElementsByTagName()
返回带有指定标签名的对象集合。
open()
打开一个流,以收集来自任何 document.write() 或 document.writeln() 方法的输出。
write()
向文档写 HTML 表达式 或 JavaScript 代码。
writeln()
等同于 write() 方法,不同的是在每个表达式之后写一个换行符。
BOM:浏览器对象模型,通过它可以访问、操作浏览器
window
location
History
Screen
Navigator
cookie
Cookie:数据存储到计算机中,通过浏览器控制添加与删除数据,当用户访问了某个网站(网页)的时候,我们就可以通过cookie来向访问者电脑上存储数据cookie的格式:document.cookie = key ‘=‘ value ‘;path=/;expires=‘ oDate.toGMTString();
cookie的共享原则:
兄弟关系的文件夹之间,cookie无法共享
子文件夹可以共享父文件夹的cookie
父文件夹不能共享子文件夹的cookie
cookie的特点
cookie保存的是字符串
cookie的数据可以设置名字的
cookie默认是临时存储的,当浏览器关闭进程的时候自动销毁;如果我们想长时间存放一个cookie。需要在设置这个cookie的时候同时给他设置一个过期的时间
cookie的存储是以域名形式(文件夹)(并非网址)进行区分的,作用域为对应的文件夹
同1个网站域名设置:path=/
不同的浏览器存放的cookie位置不一样,也是不能通用的
一个域名下存放的cookie的个数是有限制的,不同的浏览器存放的个数不一样
每个cookie存放的内容大小也是有限制的,不同的浏览器存放大小不一样;
如:域名100个cookie,每组值大小4KB
cookie过期时间设置方式:
cookie.setMaxAge(0);//不记录cookie
cookie.setMaxAge(-1);//会话级cookie,关闭浏览器失效
cookie.setMaxAge(60*60);//过期时间为1小时
toGMTString() 方法可根据格林威治时间 (GMT) 把 Date 对象转换为字符串,并返回结果。
/*key、value、t分别对应名称、值、将可以保存t天(负数时为过期删除)*/
function setCookie(key, value, t) {
var oDate = new Date();
oDate.setDate( oDate.getDate() t );
document.cookie = key ‘=‘ value ‘;path=/;expires=‘ oDate.toGMTString();
}
常见数据结构与算法整理总结
线性表数组实现
链表
栈与队列
树与二叉树
树
二叉树基本概念
二叉查找树
平衡二叉树
红黑树
图
事件委托是什么?
利用事件冒泡的原理,让自己的所触发的事件,让他的父元素代替执行将所有的操作交给父元素,将事件添加给父元素,父元素接收到这个事件的发生,找到具体触发事件的子元素,让子元素处理事件
前端面试达人必备!2024年最新的10个重要原理和概念
宏任务、微任务
javaScript是单线程语言(如果多线程dom会疯掉)所以在同一时间只能执行一个任务,称为主线程,用来执行同步任务
同时还有两个任务列表用于存放异步任务,宏任务、微任务
执行顺序为:主线程=>微任务=>宏任务
宿主环境提供的叫宏任务,不是立即执行
由语言标准提供的叫微任务,立即执行
宿主环境:简单来说就是能使javascript完美运行的环境,只要能完美运行javascript的载体就是javascript的宿主环境。目前我们常见的两种宿主环境有浏览器和node
语言标准:我们都知道JavaScript是一种编程语言,但其实JavaScript由ECMA制定标准,称之为ECMAScript,所以由语言标准提供的就是微任务,比如ES6提供的promise。
宏任务:script(全局任务), setTimeout, setInterval, setImmediate, I/O, UI rendering.
微任务:Promise, process.nextTick, Object.observer, MutationObserver
js的防抖、节流
防抖(Debounce)防抖的基本思想是设置一个等待时间,在这个等待时间内,事件可以被连续触发,但函数只会在最后一次触发后的等待时间结束时执行一次。如果在等待时间内再次触发事件,那么会重新计算等待时间。
使用场景:搜索框实时搜索、窗口大小变化后的计算等。
节流(Throttle)
节流的基本思想是保证在一定时间内只触发一次函数。与防抖不同的是,节流不管事件触发多频繁,都会保证在一段时间内至少执行一次函数。
使用场景:滚动事件中的加载更多、拖拽场景等。
触发机制:
防抖是在事件停止触发 N 秒后执行一次,如果你在一个事件执行的 N 秒内又触发了这个事件,则会重新计算执行时间。
节流是在固定的时间间隔内只执行一次函数,不论事件触发多频繁,都会保证在一段时间内至少执行一次函数。
使用场景:
防抖通常用于输入框的实时搜索、窗口大小变化后的计算等场景,需要等待用户停止输入或窗口大小变化停止后再执行相应的操作。
节流通常用于滚动事件中的加载更多、拖拽场景等,需要保证在一定时间内至少执行一次函数来响应用户的操作。
实现方式:
防抖的实现方式通常是在事件触发时设置一个延迟执行的函数,并清除之前的延迟执行函数。
节流的实现方式通常是在事件触发时判断距离上次执行函数的时间是否达到了指定的时间间隔,如果达到了则执行函数,否则不执行。
引用、复制(深/浅拷贝)的区别
直接赋值对象(array、json),是引用,如果想复制,必须循环赋值每一项。或者使用JSON.Stringify()、JSON.parse()等等进行转换直接赋值数字、字符串,是复制
基本数据类型:string、number、boolean、undefined、null
引用数据类型:object、array、function
闭包
闭包是指有权访问另一个函数作用域中变量的函数闭包:函数嵌套函数,内部函数可以引用外部函数的参数和变量,参数和变量不会被垃圾回收机制所收回。
JS中的垃圾回收机制:函数调用完后,函数中的参数和变量,会被垃圾回收机制收回,不再存在
闭包需要注意的地方:在IE下可能引发内存泄漏,页面跳转时,变量不会释放,一直存在,造成累加,只有关闭浏览器时,才会释放
IE下发生内存泄漏的条件:在一个闭包中,内部函数与外部函数互相引用,
如果过多使用闭包,容易导致内存泄露。
闭包的好处:
希望一个变量长期驻扎在内存当中
避免全局变量的污染
私有成员的存在。
用法:
模块化代码:减少全局变量的污染
在循环中直接找到对应元素的索引
函数定义的同时,马上执行
( function(){ ... } )();
案例:闭包
function aaa(){
var a = 1; //a是局部变量,一直存在于内存中
return function(){
a ;
alert(a);
}
}
var b = aaa();
b(); //2
b(); //3
//alert(a); //a是全局变量,未被定义,避免了全局变量的污染
将函数改写成闭包形式的模块代码
function aaa(){
var a = 1;
return function(){
a;
alert(a);
}
}
var b = aaa();
b(); //2
b(); //3
//alert(a);
改写后的模块代码
var aaa = (function(){
var a = 1;
return function(){
a;
alert(a);
}
})();
aaa(); //2
aaa(); //3
js哪些操作会造成内存泄露?
内存溢出是指应用系统中存在无法回收的内存或使用的内存过多,最终使得程序运行要用到的内存大于虚拟机能提供的最大内存。闭包
意外的全局变量引起的内存泄露
被遗忘的定时器或者回调:没有使用clearInterval()、clearTimeout()清理
事件
引用
脱离 DOM 的引用
回调函数
vue内存泄漏
vue是单页应用 (SPA),页面路由切换后,内存未释放。vue-router跳转到别的组件导致的内容泄漏
keep-alive将组件保存到了内存中,不会释放
通过原型连,将插件绑定在vue实例上,通过this全局引用
在钩子函数(如:mounted/created)中,绑定了DOM/BOM 对象中的事件、变量的初始化,内存不会释放。需要在beforeDestroy 中做对应销毁处理
如果在mounted/created 钩子中使用了$on,需要在beforeDestroy 中做对应解绑($off)处理
通过插件新建的对象,使用完之后一定要删除,释放内存
使用第三方库、插件引起的
使用其他的框架(如:jquery)创建元素、绑定事件,v-if的值变成false时,无法删除这些元素、事件
使用其他的框架(如:jquery)创建元素、绑定事件,v-if的值变成false时,无法删除这些元素、事件
1、v-if绑定到false的值,但是实际上dom元素在隐藏的时候没有被真实的释放掉
2、就是非常常见的比如我们通过v-if删除了父级元素,但是并没有移除父级元素里的dom片段。
cookie
Cookie:数据存储到计算机中,通过浏览器控制添加与删除数据,当用户访问了某个网站(网页)的时候,我们就可以通过cookie来向访问者电脑上存储数据cookie的格式:document.cookie = key ‘=‘ value ‘;path=/;expires=‘ oDate.toGMTString();
cookie的共享原则:
兄弟关系的文件夹之间,cookie无法共享
子文件夹可以共享父文件夹的cookie
父文件夹不能共享子文件夹的cookie
cookie的特点
cookie保存的是字符串
cookie的数据可以设置名字的
cookie默认是临时存储的,当浏览器关闭进程的时候自动销毁;如果我们想长时间存放一个cookie。需要在设置这个cookie的时候同时给他设置一个过期的时间
cookie的存储是以域名形式(文件夹)(并非网址)进行区分的,作用域为对应的文件夹
同1个网站域名设置:path=/
不同的浏览器存放的cookie位置不一样,也是不能通用的
一个域名下存放的cookie的个数是有限制的,不同的浏览器存放的个数不一样
每个cookie存放的内容大小也是有限制的,不同的浏览器存放大小不一样;
如:域名100个cookie,每组值大小4KB
cookie过期时间设置方式:
cookie.setMaxAge(0);//不记录cookie
cookie.setMaxAge(-1);//会话级cookie,关闭浏览器失效
cookie.setMaxAge(60*60);//过期时间为1小时
toGMTString() 方法可根据格林威治时间 (GMT) 把 Date 对象转换为字符串,并返回结果。
/*key、value、t分别对应名称、值、将可以保存t天(负数时为过期删除)*/
function setCookie(key, value, t) {
var oDate = new Date();
oDate.setDate( oDate.getDate() t );
document.cookie = key ‘=‘ value ‘;path=/;expires=‘ oDate.toGMTString();
}
dom、bom渲染浏览器的原理
DOM:document对象,通过它可以对html中的元素进行操作、访问body 提供对body元素的直接访问。对于定义了框架集的文档,该属性引用最外层的frameset
cookie
设置或返回与当前文档有关的所有 cookie。
domain
返回当前文档的域名。
lastModified
返回文档被最后修改的日期和时间。
referrer
返回载入当前文档的文档的 URL。
title
返回当前文档的标题。
URL
返回当前文档的 URL。
close()
关闭用 document.open() 方法打开的输出流,并显示选定的数据。
getElementById()
返回对拥有指定 id 的第一个对象的引用。
getElementsByName()
返回带有指定名称的对象集合。
getElementsByTagName()
返回带有指定标签名的对象集合。
open()
打开一个流,以收集来自任何 document.write() 或 document.writeln() 方法的输出。
write()
向文档写 HTML 表达式 或 JavaScript 代码。
writeln()
等同于 write() 方法,不同的是在每个表达式之后写一个换行符。
BOM:浏览器对象模型,通过它可以访问、操作浏览器
window
location
History
Screen
Navigator
常见数据结构与算法整理总结
线性表数组实现
链表
栈与队列
树与二叉树
树
二叉树基本概念
二叉查找树
平衡二叉树
红黑树
图
事件委托是什么?
利用事件冒泡的原理,让自己的所触发的事件,让他的父元素代替执行将所有的操作交给父元素,将事件添加给父元素,父元素接收到这个事件的发生,找到具体触发事件的子元素,让子元素处理事件
智商测试原理探微:心理学、统计学与测试科学的交融
简介
智力测试就是对智力的科学测试,它主要测验一个人的思维能力、学习能力和适应环境的能力。现代心理学界对智力有不同的看法。所谓智力就是指人类学习和适应环境的能力。智力包括观察能力、记忆能力、想象能力、思维能力等等。智商测试的原理
心理学理论:智商测试的设计和实施基于心理学的相关理论。最早的智商测验由法国心理学家比奥福尔(Alfred Binet)和西蒙(Theodore Simon)提出,他们认为智商是一个相对稳定的普遍能力,并通过一系列问题和任务来测量个体的智力水平。统计学原理:智商测试的设计和结果分析基于统计学原理。通过对大量被试的测试数据进行分析,智商测试可以计算出一个平均值和标准差,从而比较个体与整体的智力水平差异。
测试科学原理:智商测试的设计和实施需要遵循测试科学的原则,包括测试的标准化、可靠性和效度等方面。测试标准化是指在测试过程中要严格按照设定的标准和程序进行,以确保测试结果的有效性和可比性。测试的可靠性是指测试结果的稳定性和一致性,通过重复测试同一被试可以得到相似的结果。测试的效度是指测试结果与被测智力的相关性,即测试是否能够准确衡量被测智力。
心理测量理论:智商测试的设计和分析基于心理测量理论。心理测量理论提供了测量模型和方法,用于解释和分析智力测试的数据。其中,最常用的是经典测量理论和现代测量理论。经典测量理论将测量误差和真实得分分开,通过计算真实得分的期望值来估计被测智力。现代测量理论则基于潜在变量模型,通过估计个体的智力水平和测量的准确性来计算真实得分。
另外,智商测试一般通过韦氏智力量表等工具进行测试,包括多个项目,如常识、理解、算术、类同、记忆、字词、图像、积木、排列、拼图、符号分别测验等。这些测试旨在全面评估个体的智力水平,但结果仅作为一种参考,需要结合其他因素进行综合分析。
智商与智力的关系
智商是智力商数的简称,它通过一系列的标准测试测量人在其年龄段的智力发展水平。智力是一种综合的认识方面的心理特性,它主要包括:
1、感知记忆能力,特别是观察力:
2、抽象概括能力(包括想象能力),抽象概括能力(即逻辑思维能力)是智力的核心成分;
3、创造力,则是智力的高级表现。
智商与情商的区别
首先,智商和情商反映着两种性质不同的心理品质。智商主要反映人的认知能力、思维能力、语言能力、观察能力、计算能力、律动能力等。也就是说,它主要表现人的理性的能力。它可能是大脑皮层特别主要是主管抽象思维和分析思维的左半球大脑的功能。情商主要反映一个人感受、理解、运用、表达、控制和调节自己情感的能力,以及处理自己与他人之间的情感关系的能力。情商所反映个体把握与处理情感问题的能力。情感常常走在理智的前面。它是非理性的,其物质基础主要与脑干系统相联系。大脑额叶对情感有控制作用。其次,智商和情商的形成基础有所不同。情商和智商虽然都与遗传因素、环境因素有关,但是它们与遗传、环境因素的关系是有所区别的。智商与遗传因素的关系远大于社会环境因素。据英国《简明不列颠百科全书·智力商数》词条载:“根据调查结果,约70%-80%智力差异源于遗传基因,20%-30%的智力差异系受到不同的环境影响所致。”情商的形成和发展,先天的因素也是存在的。美国心理学家艾克曼的研究表明,从未与外界接触过的新几内亚人能够正确地判断其它民族照片上的表情。情感又有很大的文化差异。民俗学研究表明,不同的民族的情感表达方式有显著差异。儿童心理学研究表明,先天盲童由于社会交流的障碍导致的社会化程度的影响,其情感能力相对薄弱。人类学研究表明,原始人类的情感与文明人的情感有极大差异。他们易怒易喜,喜怒无常,自控能力很差。美国有的人类学研究者认为,人类童年时代的情感控制能力很弱,以现今的眼光看,很像是患有集体精神病。从近代史研究中也可以看到,人的情感容易受到社会环境的影响,人总是有着根深蒂固的从众心理。
再次,智商和情商的作用不同。智商的作用主要在于更好地认识事物。智商高的人,思维品质优良,学习能力强,认识程度深,容易在某个专业领域作出杰出成就,成为某个领域的专家。调查表明,许多高智商的人成为专家、学者、教授、法官、律师、记者等,在自己的领域有较高造诣。情商主要与非理性因素有关,它影响着认识和实践活动的能力。它通过影响人的兴趣、意志、毅力,加强或弱化认识事物的驱动力。智商不高而情商较高的人,学习效率虽然不如高智商者,但是,有时能比高智商者学得更好,成就更大。因为锲而不舍的精神使之勤能补拙。另外,情商是自我和他人情感把握和调节的一种能力,因此,对人际关系的处理有较大关系。其作用与社会生活、人际关系、健康状况、婚姻状况有密切关联。情商低的人人际关系紧张,婚姻容易破裂,领导水平不高。而情商较高的人,通常有较健康的情绪,有较完满的婚姻和家庭,有良好的人际关系,容易成为某个部门的领导人,具有较高的领导管理能力,情商(EQ)会影响智商(IQ)的发挥。
标准
智力的高低直接影响到一个人在社会上是否成功。智力的高低以智商IQ来表示,不同的智力理论或者智力量表用不同的分数来评估智商 ,比如,在韦氏量表中,正常人的智力是IQ在90到109之间;110到119是中上水平;120到139是优秀水平;140以上是非常优秀水平;而80到89是中下水平;70到79是临界状态水平;69以下是智力缺陷。
一般来说,智商比较高的人,学习能力比较强,但这两者之间不一定完全有正相关。因为智商还包括社会适应能力,有些人学习能力强,他的社会适应能力并不强。
进行这种测验,首先需设计出一套问题,让应试人回答,从答案中计算得分。如著名的法国“西比量表”,共30个题目,后来美国人增补为90个题目,改称1916年“西比量表”。
量表中的问题,难度由浅入深排列,以通过题多少作为鉴别智商的标准。得分在90-110为正常智力,140以上者为最优,70分以下者为心智不足。
智力测试分为两类:一般智力测试和特定智力测试。
API接口的奥秘解析:免费获取无限可能的秘诀!
API的全称是“Application Programming Interface”,意为“应用程序编程接口”
API接口是软件系统中不同组件之间进行交互的一种方式。它定义了不同软件组件之间的通信规范和数据格式,使得这些组件能够相互调用和交换数据。
定义与规范:
函数调用方式:API接口规定了如何调用特定的函数或方法,包括所需的参数、返回值等。数据格式:API接口定义了数据交换的格式,如JSON、XML等,使得不同的系统能够理解并处理这些数据。
标准化:API接口通过定义一套标准化的规范,确保不同的软件应用或系统能够按照相同的规则进行通信。
通信机制:
请求与响应:API接口通常基于请求-响应模型。一个系统(客户端)发送请求到另一个系统(服务器),服务器处理请求后返回响应。协议:API接口使用各种通信协议,如HTTP、HTTPS、WebSocket等,来确保数据在不同系统之间能够正确、安全地传输。
身份验证与授权:
安全性:为了确保数据的安全性和隐私性,API接口通常需要进行身份验证和授权。这可以通过令牌(如OAuth)、API密钥等方式实现。权限控制:API接口还定义了哪些系统或用户有权访问特定的数据或功能。
错误处理与日志记录:
错误处理:当请求失败或出现问题时,API接口会返回相应的错误代码和描述,以便调用方能够识别并处理错误。日志记录:API接口通常会记录所有的请求和响应,以便进行故障排查和问题追踪。
版本控制:
兼容性:随着时间和业务需求的变化,API接口可能会进行更新和迭代。版本控制允许API维护多个版本,确保新旧系统之间的兼容性。迭代改进:通过版本控制,API可以逐步引入新功能、优化性能或修复漏洞,而不影响现有用户的正常使用。
文档与社区支持:
社区支持:许多API接口都有开发者社区支持,提供常见问题解答、教程、示例代码等,帮助开发者更好地理解和使用API。文档:良好的API接口通常会提供详细的文档,说明如何使用接口、参数的含义、返回值等,以方便开发者使用。
API接口的工作流程
请求:客户端(如网页、APP或其他服务)向服务器发送请求。请求中包含需要的数据,如URL、HTTP方法(GET、POST等)、请求头和请求体等2。接收请求:服务器接收请求并开始处理。在这一步中,服务器可能会对请求进行验证,比如检查是否有正确的认证信息2。
处理请求:服务器根据接收到的请求进行相应的处理。这可能包括查询数据库、执行某些操作或进行计算等2。
返回结果:处理完成后,服务器将结果返回给客户端。返回的数据通常包含在HTTP响应中,如状态码、响应头和响应体等2。
客户端响应:客户端接收到响应后,会根据具体情况进行下一步操作,比如显示数据、进行跳转或发送新的请求等2。