十道前端面试题(2)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_43572937/article/details/102611124
  1. 为什么css样式初始化,目的是为了什么
  2. js继承
  3. 常见布局的方法
  4. rem,px,em的区别
  5. typeof去判断数据类型返回值有哪些
  6. 快排和冒泡的原理
  7. 清除浮动的方法
  8. 定时器setTimeout的运行机制
  9. get和post的请求区别
  10. 浮动元素有什么特性

1. 为什么css样式初始化,目的是为了什么

  1. 之所以要进行css样式初始化是因为不同浏览器对标签对默认样式值不同
  2. 如果不进行初始化会导致页面在不同浏览器上的显示差异

附上各网站初始化代码:

  1. 最简单的初始化样式
* { padding: 0; margin: 0; }
  1. 淘宝样式初始化
 body, h1, h2, h3, h4, h5, h6, hr, p, blockquote, dl, dt, dd, ul, ol, li, pre, form, fieldset, legend, button, input, textarea, th, td { margin:0; padding:0; }
 body, button, input, select, textarea { font:12px/1.5tahoma, arial, \5b8b\4f53; }
 h1, h2, h3, h4, h5, h6{ font-size:100%; }
 address, cite, dfn, em, var { font-style:normal; }
 code, kbd, pre, samp { font-family:couriernew, courier, monospace; }
 small{ font-size:12px; }
 ul, ol { list-style:none; }
 a { text-decoration:none; }
 a:hover { text-decoration:underline; }
sup { vertical-align:text-top; }
sub{ vertical-align:text-bottom; }
legend { color:#000; }
fieldset, img { border:0; }
button, input, select, textarea { font-size:100%; }
table { border-collapse:collapse; border-spacing:0; }
  1. 腾讯QQ官网样式初始化
 body,ol,ul,h1,h2,h3,h4,h5,h6,p,th,td,dl,dd,form,fieldset,legend,input,textarea,select{margin:0;padding:0} 
body{font:12px"宋体","Arial Narrow",HELVETICA;background:#fff;-webkit-text-size-adjust:100%;} 
a{color:#2d374b;text-decoration:none} 
a:hover{color:#cd0200;text-decoration:underline} 
5 em{font-style:normal} 
li{list-style:none} 
img{border:0;vertical-align:middle} 
table{border-collapse:collapse;border-spacing:0} 
p{word-wrap:break-word} 
  1. 新浪官网样式初始化
body,ul,ol,li,p,h1,h2,h3,h4,h5,h6,form,fieldset,table,td,img,div{margin:0;padding:0;border:0;} 
body{background:#fff;color:#333;font-size:12px; margin-top:5px;font-family:"SimSun","宋体","Arial Narrow";} 
ul,ol{list-style-type:none;} 
select,input,img,select{vertical-align:middle;} 
a{text-decoration:none;} 
 a:link{color:#009;} 
 a:visited{color:#800080;} 
a:hover,a:active,a:focus{color:#c00;text-decoration:underline;}

2. JS继承(点击查看答案)


3. 常见布局的方法(点击查看答案


4. rempxem的区别

  • 首先它们都是计量单位,表示尺寸
  1. px(Pixel)像素。相对长度单位。
    像素px是相对于显示屏分辨率而言的。使用px可以准确的定位网页元素,但是,不同显示器网页的显示效果可能会有差异,比较难兼容。(⚠️IE无法调整用px作为单位的字体大小。)

  2. em相对长度单位。
    相对父元素的属性而计算。示例: 如果父元素的font-size:16px,那2em =2*16px = 32px;
    所有未经调整的浏览器都符合:1em=16px

  3. rem相对长度单位。
    rem是CSS3新增的一个单位。rem是相对于HTML根元素的font-size值而言的.\

px,em,rem转换工具:http://pxtoem.com/


5. typeof去判断数据类型返回值有哪些

typeof返回的数据类型一共有6种,分别是:

  1. object
  2. undefined
  3. string
  4. number
  5. boolean
  6. function

⚠️nullArray返回object

使用一个未定义的变量会报错,但是typeof检测一个为定义变量数据类型不会报错,返回undefined

console.log(a);     // error: a is not defined

typeof a ; 	// "undefined"

6. 快排和冒泡的原理

  1. 快排 -> 快速排序 是所有排序算法中最快的一个,其时间复杂度O(n log n)
    基本思想:首先在列表中找一个值作为基准值 -> 数据围绕基准值进行 -> 将列表中小于基准值的元素移到数组的左边,大于基准值的元素移到数组的右边

  2. 冒泡排序
    基本思想: 比较所有相邻元素,如果前一个比后面一个大,两者交换位置。最后比较大的值的元素就会一步一步的移动到后面正确的位置。较小的元素就像冒泡一样出现在数组前面位置。

点击查看js实现各种排序算法。


7. 清除浮动的方法

清除浮动的本质: 主要是为了解决父级元素由于子级元素浮动引起的内部高度为0的问题。

常用的4种方法:

  1. 在最后一个浮动元素后面新加一个额外的标签,给其设置属性clear:both
    示例:
<div class="father">
	  <div class="floatA"></div>
	  <div class="floatB"></div>
	  <div class="otherClear"></div> 
</div>

 .floatA {
   float: left;
}
.floatB {
    float: left;
}
.otherClear {
    clear: both;
}

⚠️不推荐使用,因为添加无意义标签

  1. 给父级元素添加伪类元素after(推荐使用)
    和第一种方法类似,但是不用添加多余标签
    但是:ie6-7不支持伪元素:after,使用zoom:1触发hasLayout.
    示例:
<div class="father">
    <div class="floatA"></div>
    <div class="floatB"></div>
</div>

.father:after{
  clear: both;
}
.father {
   *zoom: 1;/*ie6清除浮动的方式 *号只有IE6-IE7执行,其他浏览器不执行*/
}
  1. 父级元素设置 overflow:hidden(不推荐使用)
    优点: 代码简洁
    缺点:当内容过多的时候,不会自动换行的元素内容被隐藏,无法显示溢出元素

  2. 使用beforeafter双伪元素清除浮动

示例:

 <div class="fahter clearfix">
	   <div class="big">big</div>
	   <div class="small">small</div>
</div>
<div class="footer"></div>
    
.clearfix:after,.clearfix:before{
  	content: "";
     display: table;
 }
.clearfix:after{
      clear: both;
  }
.clearfix{
     *zoom: 1;
 }

8.定时器setTimeout的运行机制

setTimeout()函数是用来指定某个函数或者某段代码在指定时间段后执行。
返回: 这个函数会返回一个整数,表示定时器timer的编号,可用于清除定时器。

补充:
setInterval()函数指定某个函数或者某个代码每隔一定时间段执行一次。
返回: 同样会返回一个定时器编号timer,用于清除定时器。

setTimeout()setInterval()的运行机制是将本次的代码移出本次执行等到下一轮Event Loop时,检测是否到了指定时间,如果到了就执行,如果没到就等下次Event Loop时重新判断。

⚠️思考根据上述描述,如果setTimeout指定时间t执行一段代码,那么这段代码一定是t毫秒时之后执行吗?
理解setTimeout运行机制,必须弄清楚以下名词:

  1. JS单线程
  2. 任务队列
  3. 同步任务
  4. 异步任务
  5. 宏任务
  6. 微任务

点击了解详情。。


9. getpost的请求区别

  1. get用于获取信息,且无副作用,可缓存
  2. post用于修改服务器上的数据,有副作用,不可缓存

报文上的区别:

  1. get请求参数放在URL
  2. post请求参数放在body

数据上区别:

  1. get请求传递的参数有长度限制(URL最大长度微2048字符),只允许ASCII字符
  2. post参数无长度限制,且无类型限制

安全性上区别:

  1. get安全性较差,因为发送数据是URL的一部分,在发送密码或其他敏感信息时不能用get请求
  2. post较安全因为参数不会被保存在浏览器历史或web服务器日志中

10. 浮动元素有什么特性

  1. 脱离文档流
  2. 浮动元素后面如果不是块级元素,后面的元素将会和它并排(除非设置元素宽度,或者放不下时会自动换行)
  3. 浮动元素的上一个元素如果没有浮动,浮动只会在当前行浮动。当浮动元素遇到浮动元素将同行浮动
  4. 元素设置了position:absolute或position:fixed时浮动会被忽略
  5. 浮动会引起父元素高度塌陷
  6. 浮动元素会被后一个元素的margin-top影响

猜你喜欢

转载自blog.csdn.net/weixin_43572937/article/details/102611124