有赞电话面经

2019-04-13 15:44发布

部分内容为网上搜索总结,并非自己的,感谢各位
  1. 水平垂直居中的方法(我只回答出了盒子模型的三种情况,当时脑子空白没想到要分类型走,所以建议思路要清晰,先大体分类,然后每个类别几种方法)
(1)对于单行文本:text-align+line-height
text-align:center; line-height:200px
(2)text-align+vertical-align,父元素设置为table-cell,子元素设置为inline-block,
.parent{ display:table-cell; text-align:center; vertical-align:middle;} .child{ display:inline-block;}
(3) img图像为子元素,父元素用行高line-height代替高度,字体大小font-size为0,子元素设置vertacal-align:middle
.parent{ text-align:center; font-size:0; line-height:200px;} .child{ vertical-align:middle}
(4)margin+vertical-align
.parent{ display:table-cell; vertical-align:middle;} .child{ display:table; margin:0 auto;}
(5) 绝对定位和模型和margin:0 auto
.parent{ position:relative;} .child{ position:absolute; top:0; left:0; right:0; bottom:0; margin:0 auto; width:100px; height:200px;}
(6)子元素宽高已知,可以用margin top/left=-50%的宽高
.parent{ position:relative;} .child{ position:absolute; width:100px; height:200px; top:50%; left:50%; margin:-100px 0 0 -50px;}
(7)子元素宽高未知,可以用transform属性
.parent{ position:relative;} .child{ position:absolute; top:50%; left:50%; transform:translate(-50%,-50%);]
(8)使用flex布局
.parent{ display:flex; justify-content:center;//主轴对齐 align-items:center;//侧轴对齐}
  1. 跨域有哪些方法
    我回答的是jsonp,document.domain,iframe,window.name这些,然而,面试官小哥说那你解释一下window.name 怎么实现的,gg。看来不能光看题,要深入挖掘。所以搜了一下网上的资料,总结了一下(还是好多并不是很理解)
什么是跨域?当协议、子域名、主域名或者端口号有一个不一样,就是不同的域,它们之间要相互请求资源就要“跨域”。因为用ajax请求其他域名下的请求,会拒绝访问,基于安全考虑。ajax只能访问本地资源。
域名地址组成:http:// www . google : 8080 / script/jquery.js
  http:// (协议号)   www (子域名)   google (主域名)    8080 (端口号)   script/jquery.js (请求的地址)
处理方法:
(1)JSONP
通过script标签引入一个js文件,这个js文件载入成功后会执行我们在url参数中指定的函数,并且会把我们需要的json数据作为参数传入。
(2)修改document.domain跨子域+iframe
主域必须设置相同, (3)window.name+iframe
在一个窗口(window)的生命周期内,窗口载入的所有的页面都是共享一个window.name的,每个页面对window.name都有读写的权限,window.name是持久存在一个窗口载入过的所有页面中的,并不会因新页面的载入而进行重置。注意,window.name的值只能是字符串的形式,这个字符串的大小最大能允许2M左右甚至更大的一个容量,具体取决于不同的浏览器,但一般是够用了。 (4)window.postMessage
  1. http错误类型
    当时就回答了4开头和5开头的代表什么,具体说不上来。从网上查找了一下,总结的比较好的。常见http错误代码大全
  2. 现在http的版本
    http/0.9:只接受get请求
    http/1.0:第一个在通信中制定的版本号,至今被广泛应用,特别是在代理服务器中。
    http/1.1:当前版本
    http/2.0:最新版本
  3. http有长度限制么?
    (1)url长度限制:
    在Http1.1协议中并没有提出针对URL的长度进行限制,但是Web服务器和浏览器对URI都有自己的长度限制。
    浏览器的限制:每种浏览器也会对url的长度有所限制,下面是几种常见浏览器的url长度限制:(单位:字符)
    IE : 2083
    Firefox:65536
    Chrome:8182
    Safari:80000
    Opera:190000
(2)post数据长度限制
Post数据的长度限制与url长度限制类似,也是在Http协议中没有规定长度限制,长度限制可以在服务器端配置最大http请求头长度的方式来实现。
(3)Cookie的长度限制
每个cookie大概4kb,个数限制根据浏览器不同
IE :原先为20个,后来升级为50个
Firefox: 50个
Opera:30个
Chrome:180个
Safari:无限制
(4)localStorage:长度限制大概5MB
6. 物理地址和逻辑地址(操作系统相关知识,并不会)
物理地址是内存中存储单元的绝对地址,逻辑地址(虚拟地址)是相对地址。
7. sql语句查询一个星期五的员工数据
select * from where 日期条件
8. 共20阶台阶,一次可以走一步或者两步,总共多少种办法
我想到可能要用递归方法,但是具体怎么算答案是多少还没得出。后面再补。
  1. ip知道不(百度百科)
    IP是英文Internet Protocol的缩写,意思是“网络之间互连的协议”,也就是为计算机网络相互连接进行通信而设计的协议。在因特网中,它是能使连接到网上的所有计算机网络实现相互通信的一套规则,规定了计算机在因特网上进行通信时应当遵守的规则。任何厂家生产的计算机系统,只要遵守IP协议就可以与因特网互连互通。正是因为有了IP协议,因特网才得以迅速发展成为世界上最大的、开放的计算机通信网络。因此,IP协议也可以叫做“因特网协议”。
    IP地址是一个32位的二进制数,通常被分割为4个“8位二进制数”(也就是4个字节)。
    (多的不再写了,我觉得这些记着总记不住,知道大概然后再查找)
  2. http都有哪些请求,除了get和post还知道哪些
    options:可使服务器传回该资源所支持的所有http请求方法,向web服务器发送options请求,可以测试服务器功能是否正常运作。
    head:与get一样,向服务器发出指定资源的请求。只不过服务器不传回资源的本文部分。好处在于不必传输全部内容的情况下,九可以获取该资源的信息。
    get:向指定资源发出显示请求。只能读取数据。
    post:向指定资源提交数据。
    put:向指定资源未知上传最新内容。
    delete:请求服务器删除request-uri所标识的资源。
    trace:回显服务器受到的请求,主要用于测试或诊断。
    connect:通常用于ssl加密服务器的链接。
  3. 手撸代码:数组去重(其实简单思路有了,无奈手笨,写不出来,口头更难表述,基础太差,上网搜了一下,我大概就是那样想的gg)
/** * 数组去重,题目 * @param {any[]} arr * @return {any[]} * * @example * [1,'1',1] -> [1,'1'] * [{a: 1}, {b: 1}, {a: 1}] -> [{a: 1}, {b: 1}] * [[1], [2], [3], [1]] -> [[1], [2], [3]] */ (1)简单数组 //新建新的空数组,不在新的数组里的就push进去,用indexOf判断 function only(arr){ var arr1=[]; for(var i=0;i<array.length;i++){ if(arr1.indexOf(array[i]==-1){ arr1.push(arr[i]); } } return arr1; } (2)用键值对,速度快,但占空间多 function only(arr){ var tup={},arr1=[],len=arr.length,val,type; for(var i=0;ival=array[I]; type=typeof val; if(!tup[val]){ tup[val]=[type]; arr1.push(val); }else if(tup[val].indexOf(type)==-1){ tup[val].push(type); arr1.push(val); } } return arr1; } (3)排序去除相邻相同值 function only(arr){ arr.sort(); var arr1=[arr[0]]; for(var i=0;i<arr.length;i++){ if(arr[i]!==arr1[arr1.length-1]){ arr1.push(arr[i]); } } return arr1; } (4)数组下标法
依旧利用indexOf,第I个元素的下标第一次出现的位置不是i,就可以不用加入新数组 function only(arr){ var arr1=[]; for(var I=0;i<arr.length;i++){ if(arr.indexOf(arr[i]==i){ arr1.push(arr[i]); } } return arr1; } (5)优化遍历数组法
获取没重复的最右一个值放入新数组 function only(arr){ var arr1=[]; var index=[]; var len=arr.length; for(var i=0;ifor(var j=i+1;jif(arr[i]===arr[j]){ i++; j=i; } } arr1.push(arr[i]); index.push(i); } return arr1; }