# 前端面试题
每日5道面试题
坚持每天都刷5道真实面试题,保持面试感觉
# 2024/08/28
讲一下输入一个URL网址,到看到页面都经历了什么?
讲一下浏览器缓存机制?
Expires
:Cache-Control
:Last-Modified
:If-Modified-Since
:ETag
:If-None-Match
:如何解决跨域问题,为什么要有同源限制?
将一下浏览器history对象,或者问(vue/react)route的实现原理?
什么是防抖/节流,讲一下他们的原理?
# 2024/08/27
for in 和 for of的区别,Generator 怎么用?
for循环绑定onckick事件,点击拿下标(函数中this的指向问题)?
箭头函数与普通函数的区别?
let与var和const的区别是什么?
讲一下String Array Date方法有哪些?
# 2024/08/26
介绍javascript的数据类型(它们的区别)?
== 和 === 的区别,说一下js的隐式转化?
怎么给一个数组去重,尽量说多几种方法?
...是深拷贝还是浅拷贝?说多几种深拷贝方法?
apply, call, bind三者的使用与区别 ?
# 2024/08/25
讲一下什么是闭包,作用域,和作用域链(区分一下原型链)?
变量提升,js执行上下文
讲一下DOM事件级别,事件流是什么,事件的冒泡与捕获?
讲一下浏览器器怎么执行js,什么是事件循环,说说 event loop?
讲一下cookie和localSrorage 、session 、indexDB 的区别?
说出下面代码的打印顺序,讲一下Generator 、Promise 、async await 都有什么不同?
console.log(1); async function asyncFn (){ console.log(2); await console.log(3); console.log(4); } setTimeout(()=>{ console.log(5) }); const promise = new Promise((resolve,reject)=>{ console.log(6); resolve() }) promise.then(res=>{ console.log(7) }) asyncFn(); console.log(8); // 1 6 2 3 8 7 4 5
# 2024/08/24
- 如何实现一个三角形,怎么给这个三角形加阴影,如果这个三角形边要弧度怎么办?
实现一个三角形有多种方法,比如css,svg等:
用css,将div宽高设为零,在设置3边的边框高度。
角对着那边就不设置边框,反方向边框设置颜色和高度。
其他两边设置透明,且高度是角反方向边框的一半;
用svg画三角形比较简单,只要在points 填好坐标就好;
给三角形加阴影需要用到css的滤镜。设置 filter: drop-shadow值,svg也一样;
那只能想到用svg画了,在points里设置好路径,这种一般都是UI设计好给我们;
下面是代码以及原理:
/* 用css实现三角形 */ .triangle { width: 0; height: 0; border-left: 50px solid transparent; border-right: 50px solid transparent; border-bottom: 100px solid #007BFF; }
<!-- svg三角形 --> <svg width="200" height="200"> <polygon points="100 0 0 200 200 200" fill="blue"></polygon> </svg>
/* 用三角形阴影 css svg */ .triangle-shadow { filter: drop-shadow(5px 5px 5px rgba(0, 0, 0, 0.5)); }
<!-- svg三角形有弧度 --> <svg width="250" height="250"> <polygon stroke-linejoin="round" points="100,10,10,200,200,200" style="fill: #00f;stroke: #00f;stroke-width: 20;" ></polygon> </svg>
- css盒居中有几种办法?如何居中一个浮动元素?如何让绝对定位的div居中?
盒居中有很多中,像 flex,position,grid都可以;
- 使用
flexbox
:设置父容器display: flex; justify-content: center; align-items: center;- 使用
flex
: 设置父容器display: flex;子盒子 margin: auto 居中块级元素;- 使用
position
:设置盒子position: absolute;top: 50%; left: 50%;margin-top,margin-left: 宽高的一半;- 使用
position
:设置盒子position: absolute;top: 50%; left: 50%;transform:translate(-50%, -50%);- 使用
grid
;设置父容器display: grid;在设置place-items: center;下面是代码以及原理:
/* 使用 `flexbox */ .parent { display: flex; justify-content: center; /* 水平居中 */ align-items: center; /* 垂直居中 */ height: 100vh; } .child { width: 100px; height: 100px; }
/* 使用 flex */ .parent { width: 100%; height: 100vh; display: flex; } .child { margin: auto; /* 水平垂直居中 */ width: 100px; height: 100px; }
/* 使用position */ .parent { position: relative; height: 100vh; } .child { width: 100px; height: 100px; position: absolute; top: 50%; /* 水平居中 */ left: 50%; /* 垂直居中 */ margin-top: 25px; /* 垂直中心点居中 */ margin-left: 25px;/* 水平中心点居中 */ }
/* 使用position */ .parent { position: relative; height: 100vh; } .child { width: 100px; height: 100px; position: absolute; top: 50%; /* 水平居中 */ left: 50%; /* 垂直居中 */ transform: translate(-50%, -50%); /* 水平垂直中心点居中 */ }
.parent { display: grid; place-items: center; /* 上下左右居中 */ height: 100vh; } .child { width: 100px; height: 100px; }
- flex1代表什么意思?如何实现一个三列布局? 双飞翼和圣杯?
flex: 1
是 CSS 中flexbox
布局的一个简写属性,它的完整形式是flex-grow
,flex-shrink
, 和flex-basis
,flex: 1
等价于以下设置:.item { flex-grow: 1; /* 元素可以根据可用空间进行扩展 */ flex-shrink: 1; /* 如果空间不足,元素可以收缩 */ flex-basis: 0%; /* 元素的初始基础尺寸为 0,实际尺寸由 flex-grow 决定 */ }
flex-grow: 1
:表示该元素在父容器中有剩余空间时,可以按比例扩展。1
代表元素将根据其容器中的可用空间,按照其他子元素的flex-grow
值来分配空间。例如,如果有两个子元素,一个flex-grow
为1
,另一个为2
,则第二个子元素将获得两倍于第一个子元素的可用空间。
flex-shrink: 1
:表示当空间不足时,该元素会按比例收缩。1
表示元素将按比例缩小,以适应父容器的尺寸。如果没有设置flex-shrink
,元素可能会超出容器范围。
flex-basis: 0%
:表示元素的初始尺寸为0
,即元素没有固定的基础尺寸,完全依赖于flex-grow
的设置来决定其尺寸。如果你想设置一个具体的初始尺寸,可以直接指定,例如flex-basis: 100px;
。双飞翼布局
这个常考,效果就是中间不变,两边自适应;主要了解flex: 0 0 600px;这个设置;和flex: 1;
<div class="container"> <div class="side left">左侧内容</div> <div class="main">中间内容</div> <div class="side right">右侧内容</div> </div>
.container { display: flex; width: 100%; } .side { flex: 1; /* 左右两侧自适应宽度 */ background-color: #f0f0f0; } .main { flex: 0 0 600px; /* 中间内容区宽度固定为 600px */ background-color: #eaeaea; } .left { background-color: #ccc; /* 左侧背景颜色 */ } .right { background-color: #aaa; /* 右侧背景颜色 */ }
圣杯布局
这个一般不会考,这个效果就是中间改变,两边不变;了解一下效果和order,flex-shrink属性就好;
<div class="container"> <div class="left">左侧内容</div> <div class="main">中间内容</div> <div class="right">右侧内容</div> </div>
* { margin: 0; padding: 0; box-sizing: border-box; } .container { display: flex; width: 100%; position: relative; padding-left: 200px; padding-right: 200px; } .main { flex: 1; order: 2;/* 保证主内容在文档结构中优先展示 */ background-color: #fff; } .left,.right { width: 200px; flex-shrink: 0;/* 防止左右侧栏缩小 */ position: absolute; top: 0; bottom: 0; } .left { left: 0; order: 1; background-color: #ccc; } .right { right: 0; order: 3; background-color: #aaa; }
学习Flex用法,参考这个链接:CSS Flex (opens new window)
- css3有哪些新特性?
过渡与动画(Transitions and Animations):
过渡(Transitions):
transition
属性允许定义属性变化时的平滑过渡效果。动画(Animations):
@keyframes
规则和animation
属性允许创建复杂的动画效果。变换(Transforms):
- 2D 和 3D 变换:
transform
属性支持旋转、缩放、倾斜和平移元素,还支持 3D 变换。弹性盒容器(Flexbox Container):
- Flexbox 容器:通过
display: flex
可以将一个元素设为弹性盒容器,其子元素自动成为弹性盒项目,支持各种排列方式。媒体查询(Media Queries):
- 媒体查询:
@media
规则允许根据不同的设备特性(如屏幕大小、分辨率等)应用不同的 CSS 样式,实现响应式设计。背景与渐变(Backgrounds and Gradients):
- 多背景图片:一个元素可以使用多个背景图片,使用
background-image
属性定义。- 线性渐变和径向渐变:
linear-gradient
和radial-gradient
属性允许创建平滑的颜色过渡效果。
- 对BFC规范的理解,高度塌陷怎么修复?
BFC(Block Formatting Context,块级格式化上下文)是CSS中的一个重要概念,它决定了元素如何布局以及它们与其他元素的关系。理解BFC对于控制页面布局和解决一些常见的CSS问题(如浮动、边距重叠等)非常有用。
BFC的形成条件
一个元素可以通过以下几种方式形成BFC:
- 根元素:通常是
<html>
标签,它本身就是一个BFC。- 浮动元素:应用了
float
属性且值不为none
的元素。- 绝对定位元素:应用了
position: absolute
或position: fixed
的元素。display
值为inline-block
、table-cell
、table-caption
、flex
、inline-flex
、grid
、inline-grid
等的元素。overflow
值不为visible
的元素:如overflow: hidden
、auto
或scroll
。BFC的作用与特性
- 阻止外边距折叠:BFC元素内部的块级子元素的垂直外边距不会与其外部元素发生折叠。也就是说,当两个相邻的块级元素位于不同的BFC中时,它们的外边距不会重叠。
- 包含浮动元素:当一个元素形成BFC时,它会包含内部的浮动元素,而不会影响到外部的布局。通常用于清除浮动。
- 阻止元素被浮动元素覆盖:在BFC中,子元素不会被浮动元素覆盖,它们会根据正常的文档流进行布局。
- 自适应高度:BFC会扩展以包含它的子元素,不会像普通容器一样塌陷。
BFC的常见应用场景
- 清除浮动:通常使用
overflow: hidden
或overflow: auto
来清除浮动,确保父容器可以正确包裹浮动元素。- 防止外边距折叠:通过创建BFC可以防止外边距折叠,解决因外边距引起的布局问题。
- 处理复杂布局:通过创建BFC可以更好地控制和管理复杂的页面布局,特别是在浮动、绝对定位和网格布局中。