面试流程:小天才步步高

春招笔试:
单选:html内联 css选择器 vue的绑定事件 vue生命周期 vue的父子传值

多选:数据结构 的队和栈特点,很简单。

简答:
osi七层模型和tcp/ip四层模型
浏览器url发生的过程
前端优化的常用方法

编程题:
div盒子,垂直水平居中,高度为宽度一半。
防抖和节流函数编写。

简答:
1 ,OSI定义了网络互连的七层模型(物理层、数据链路层、网络层、传输层、会话层、表示层、应用层)
应用层:为应用程序或用户请求提供各种请求服务。
表示层:数据编码、格式转换、数据加密
会话层:创建、管理和维护会话。
传输层:数据通信。建立主机端到端的链接
网络层:IP选址及路由选择
数据链路层:提供介质访问和链路管理
物理层:管理通信设备和网络媒体之间的互联互通

TCP/IP协议体系结构四层分别是:1、数据链路层;实现网卡接口的网络驱动程序,以处理数据在物理媒介上的传输。2、网络层;实现数据包的选路和转发。3、传输层;为两台主机上的应用程序提供端到端的通信。4、应用层;负责处理应用程序的逻辑。

2.从打开浏览器输入网址到最终的网页呈现在浏览器中,大致以下过程:

DNS解析——解析域名,获取对应的ip地址
TCP连接——TCP三次握手
浏览器发送http请求
服务器处理请求并返回http报文
浏览器解析返回的数据并渲染页面
断开连接:TCP四次挥手

3,前端优化的手段:
(1) 减少http请求次数:CSS Sprites, JS、CSS源码压缩、图片大小控制合适;网页Gzip,CDN托管,data缓存 ,图片服务器。

(2) 前端模板 JS+数据,减少由于HTML标签导致的带宽浪费,前端用变量保存AJAX请求结果,每次操作本地变量,不用请求,减少请求次数

(3) 用innerHTML代替DOM操作,减少DOM操作次数,优化javascript性能。

(4) 当需要设置的样式很多时设置className而不是直接操作style。

(5) 少用全局变量、缓存DOM节点查找的结果。减少IO读取操作。

(6) 避免使用CSS Expression(css表达式)又称Dynamic properties(动态属性)。

(7) 图片预加载,将样式表放在顶部,将脚本放在底部 加上时间戳。

(8) 避免在页面的主体布局中使用table,table要等其中的内容完全下载之后才会显示出来,显示比div+css布局慢。

编程题:
1,

方法一:利用定位(常用方法,推荐)

.parent{

position:relative;

}

.child{

position:absolute;

top:50%;

left:50%;

margin-top:-50px;

margin-left:-50px;

}

方法一的原理就是定位中心点是盒子的左上顶点,所以定位之后我们需要回退盒子一半的距离。

 

方法二:利用margin:auto;

.parent{

position:relative;

}

.child{

position:absolute;

margin:auto;

top:0;

left:0;

right:0;

bottom:0;

}

方法三:利用display:table-cell;

.parent{

display:table-cell;

vertical-align:middle;

text-align:center;

}

.child{

display:inline-block;

}

方法四:利用display:flex;设置垂直水平都居中;

.parent{

display:flex;

justify-content:center;

align-items:center;

}

方法五:计算父盒子与子盒子的空间距离(这跟方法一是一个道理);

计算方法:父盒子高度或者宽度的一半减去子盒子高度或者宽的的一半。

.child{

margin-top:200px;

margin-left:200px;

}

方法六:利用transform

.parent{

position:relative;

}

.child{

position:absolute;

top:50%;

left:50%;

transform:translate(-50%,-50%);

}

方法七:利用calc计算

.parent{

position:relative;

}

.child{

position:absolute;

top:calc(200px);//(父元素高-子元素高)÷ 2=200px

let:calc(200px);//(父元素宽-子元素宽)÷ 2=200px

}

让盒子的高度始终等于宽度的一半
宽度在可变的情况下,要设置高度始终等于宽度的一半,那么就得提一下margin和padding的百分比值的参照是谁,他们的百分比等于的不是高度的而是宽度的百分比;
所以这里只需要设置padding:25% 0;这样就让高度变成了宽度的一半;

2,防抖节流:
防抖
每次事件触发后总是等待一段时间执行,如果在等待时间内事件再次触发,则重新计算等待时间(停止触发的时候只会执行一次,最后一次生效)

let timer = null;
function debounce (fun,wait) {
  return function () {
  	const argu = arguments;
  	// 事件触发,如果之前有等待的事件,则清空计时,重新进行事件等待执行
    if (timer) {
      clearTimeOut(timer);
    }
    timer = setTimeout(function () {
      fun.apply(this, argu);
    }, wait);
  }
}

// 调用
debounce(fun, 100)(argu1, argu2);

节流
每次事件触发后总是等待一段时间执行,如果在等待时间内事件再次触发(事件触发时有其他事件在等待),则不作处理。如果事件触发时没有其他事件在等待,则将事件进行绑定(等待时间到则进行事件执行)多次触发事件时只有一次生效,对应时间内只执行一次,第一次生效。

let timer = null;
function throttle (fun,wait) {
  return function () {
  	const argu = arguments;
    // 事件触发,如果之前有等待的事件,则不作处理
    if (timer) {
    } else {
      事件触发,前面没有事件在等待,则将事件进行等待执行
      timer = setTimeout(function () {
        fun();
      }, wait);
    }
  }
}

// 调用
throttle(fun, 100)(argu1, argu2);

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值