目录
5.请编写一个JavaScript函数,实现清除数据中重复的元素
求 10000 以内 3 和 5 的倍数和,写出JavaScript实现函数
1. TCP/IP 建立连接的过程
在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。
- 第一次握手:建立连接时,客户端发送连接请求到服务器,并进入SYN_SEND状态,等待服务器确认;
- 第二次握手:服务器收到客户端连接请求,向客户端发送允许连接应答,此时服务器进入SYN_RECV状态;
- 第三次握手:客户端收到服务器的允许连接应答,向服务器发送确认,客户端和服务器进入通信状态,完成三次握手
2.头文件的作用是什么?
答:
一、通过头文件来调用库功能。在很多场合,源代码不便(或不准)向用户公布,只要向用户提供头文件和二进制的库即可。用户只需要按照头文件中的接口声明来调用库功能,而不必关心接口怎么实现的。编译器会从库中提取相应的代码。
二、头文件能加强类型安全检查。如果某个接口被实现或被使用时,其方式与头文件中的声明不一致,编译器就会指出错误,这一简单的规则能大大减轻程序员调试、改错的负担。
3.Js正则表达式
i 大小写不敏感
g 全局匹配,查找所有匹配而非在第一个匹配后停止
m 执行多行匹配
将10进制转换为其他进制的字符串 Number.toString
Number(10进制数字).toString(36)转36进制数,最大
Number(10进制数字).toString(16)
Number(10进制数字).toString(8)
Number(10进制数字).toString(2)
生成一个用不重复的ID
function GenNonDuplicateID(randomLength){
return Number(Math.random().toString().substr(3,randomLength) + Date.now()).toString(36)
}
//Date.now返回当前日期和时间的Date对象与'1970/01/01 00:00:00'之间的毫秒值(北京时间的时区为东8区,起点时间实际为:'1970/01/01 08:00:00')
//GenNonDuplicateID()将生成 rfmipbs8ag0kgkcogc 类似的ID
var id = GenNonDuplicateID();
console.log(id);
4.Ajax 编程中所使用的Javascript对象是什么(XMLHttpRequest)?
怎么去创建它(variable = new XMLHttpRequest())?
var xmlhttp;
if (window.XMLHttpRequest)
{
xmlhttp=new XMLHttpRequest();
}
else
{
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
如何取服务器响应给客户端的XML对象信息使用ajax
4.URL解析函数,将URL转化成对象形式。
统一资源定位系统
function parseQueryString(url) {
// 先将字符串通过 split 方法,以 "?" 为分割符将其分割成数组;
// 该数组有两个元素,第一个为空字符串,第二个为 url 参数字符串
let arr = url.split('?')
// 将参数字符串以 "&" 符号为分隔符进行分割
let params = arr[1].split('&')
// 定义一个数组用于存储参数
let obj = {}
// 通过循环将参数以键值对的形式存储在变量 obj 中
for (let i = 0; i < params.length; i++) {
let ams = params[i].split('=')
obj[ams[0]] = arr_params[1]
}
return obj
}
console.log(parseQueryString('?ie=utf-8&f=3&rsv_bp=1&rsv_idx=1&tn=baidu&wd=splice'))
深拷贝:A 与 B 值相等,但改动 A 并不会影响 B。
浅拷贝一般指的是基本类型的复制
var arr1 = new Array(12,23,34)
Var arr2 = arr1;//这就是一个最简单的浅拷贝
这是最简单的浅拷贝,因为,只是把arr1的地址拷贝的一份给了arr2,并没有把arr1的数据拷贝一份。所以,拷贝的深度不够
深拷贝一般指引用类型的拷贝,把引用类型的值也拷贝出来
const obj1 = {
name:'小一',
age:20,
color:['yellow','green'],
say(){
console.log(1)
}
};
function deepClone(obj){
var _obj = JSON.stringify(obj)//将一个 JavaScript 对象或值转换为 JSON 字符串
var objClone = JSON.parse(_obj)//将返回 JavaScript 数组,而不是 JavaScript 对象。
return objClone
}
//深拷贝:A 与 B 值相等,但改动 A 不会影响 B。
const obj3 = deepClone(obj1)
obj3.name = '小三'
console.log('obj1',obj1)
console.log('obj3',obj3)
5.请编写一个JavaScript函数,实现清除数据中重复的元素
function del(arr){
for(var i=0;i<arr.length;i++){
for(var j=i+1;j<arr.length;j++){
if(arr[i]===arr[j]){
arr.splice(j,1);// splice方法可以用来对js的数组进行删除,添加,替换等操作参数1下标值从j下标开始 参数2 删除几个元素
}
}
}
return arr;
}
var arr=[1,2,3,4,5,2,6,1];
var arrs=[4,1,2,2,3,4,5,2,6,1,7];
function test(arrs){
return Array.from(new Set(arrs))
}
del(arr);
var s = test(arrs);
console.log(arr);//[1,2,3,4,5,6]
console.log(s);
求 10000 以内 3 和 5 的倍数和,写出JavaScript实现函数
var sum = 0;
// sum = 3%3
for(var a = 0 ; a<=10; a++){
if(a%3==0 || a%5==0){
sum+=a;
}
}
console.log(sum);//234168
回文数字
//对称数的逆序数等于自身:回文数字
let isSymmetry = function(num) {
nInversionNumber = +(num.toString().split("").reverse().join(""));
if (num === nInversionNumber && num >= 10) {
return true;
}
return false;}
//1-number之间的对数
let arr = [],number = 10000;
for (let j = 0; j < number; j++) {
isSymmetry(j) ? arr.push(j) : false
}
console.log(arr, '返回对数数组')
transitionEnd
事件什么时候触发?它会冒泡吗?怎么冒泡的,冒泡到哪里?
transitionend 事件在 CSS 完成过渡后触发 。如果过渡在完成前移除,过渡事件将不被触发。
会冒泡,冒泡到父级
解释JSONP的工作原理。
json 是一种数据格式
jsonp 是一种数据调用的方式,
联系 带callback的json就是jsonp
工作原理:
jsonp之所以能跨域,是因为他并不是发送ajax请求,并不是利用XMLHTTPRequest对象和服务端进行通信,利用的是动态创建的script标签,而script标签是没有同源策略限制的,可以跨域的。创建script标签,然后将其src,指向我们真实的服务端的地址,在这个地址的后面有一个参数比如calback=a,然后服务端可以解析到这个url中的callback=a,服务端在返回的数据时,就会调用a方法,去包裹一段数据,然后返回这段js代码,相当于在前端去执行这个a方法。那么在前端发送请求之前,就要在window上去注册这个a方法,那么在服务端返回这个a方法执行的时候,就可以去之前在window上定义的a方法中获得数据了
什么是内存泄露,那些操作会造成内存泄露?
内存泄漏指任何对象在您不再拥有或需要它之后仍然存在。
- 意外的全局变量引起的内存泄漏
- 闭包引起的内存泄漏
- 没有清理的DOM元素引用
- 被遗忘的定时器或者回调
- 子元素存在引用引起的内存泄漏
Ajax是什么?Ajax的交互模型?同步和异步的区别?如何解决跨域问题?
即异步 JavaScript 和XML。Ajax是一种用于创建快速动态网页的技术。
异步模式下:
当我们使用AJAX发送完请求后,可能还有代码需要执行。这个时候可能由于种种原因导致服务器还没有响应我们的请求,但是因为我们采用了异步执行方式,所有包含AJAX请求代码的函数中的剩余代码将继续执行。如果我们是将请求结果交由另外一个JS函数去处理的,那么,这个时候就好比两条线程同时执行一样。
同步模式下:
当我们使用AJAX发送完请求后,后续还有代码需要执行,我们同样将服务器响应交由另一个JS函数去处理,但是这时的代码执行情况是:在服务器没有响应或者处理响应结果的JS函数还没有处理完成return时,包含请求代码的函数的剩余代码是不能够执行的。就好比单线程一样,请求发出后就进入阻塞状态,直到解除阻塞,余下的代码才会继续执行。
1、jsonp跨域
JSONP(JSON with Padding:填充式JSON),应用JSON的一种新方法,
JSON、JSONP的区别:
1、JSON返回的是一串数据、JSONP返回的是脚本代码(包含一个函数调用)
2、JSONP 只支持get请求、不支持post请求
(类似往页面添加一个script标签,通过src属性去触发对指定地址的请求,故只能是Get请求)
2、nginx反向代理:
www.baidu.com/index.html需要调用www.sina.com/server.php,可以写一个接口www.baidu.com/server.php,由这个接口在后端去调用www.sina.com/server.php并拿到返回值,然后再返回给index.html
3、PHP端修改header
header(‘Access-Control-Allow-Origin:*’);//允许所有来源访问
header(‘Access-Control-Allow-Method:POST,GET’);//允许访问的方式
ajax 的过程是怎样的?
- 创建XMLHttpRequest对象,也就是创建一个异步调用对象.
- 创建一个新的HTTP请求,并指定该HTTP请求的方法、URL及验证信息.
- 设置响应HTTP请求状态变化的函数.
- 发送HTTP请求.
- 获取异步调用返回的数据.
- 使用JavaScript和DOM实现局部刷新.
工作原理:
1.用户将请求交给Ajax引擎处理. (请求)
2.Ajax引擎接收到用户请求之后,自己发起新的URL请求,向服务器获取数据.
3.服务器接收到请求之后,根据自身进行业务处理,最终将结果返回 返回给引擎.
4.Ajax引擎通过事先规定好的 回调函数实现返回值的传递. 当用户获取返回值之后,则开始调用函数中的内容.
局部刷新