有赞电话面经

部分内容为网上搜索总结,并非自己的,感谢各位

  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;
}

你可能感兴趣的:(前端面试)