We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
text-align: center
margin: 0 auto
absolute + transform
flex + justify-content: center
line-height: height
flex + align-items: center
flex + justify-content + align-items
table-cell
rem 响应适配的原理是动态计算为当前页面的 newFontSize并赋值给 html 根节点,从而 rem 参照可以根据根节点进行缩放。
newFontSize
设计稿宽度 / 预设 font-size = 实际屏幕宽度 / newFontSize
预设 font-size
newFontSize = 实际屏幕宽度 * 预设 font-size / 设计稿宽度
还有一种响应方案,html 根元素 font-size 设置 13.33vm 是什么意思 ?
这也是 100px 的一种表示方式。
750px = 100vm, 即 1vm = 7.5px
100px = 100px / 7.5px = 13.33vm
块级格式化上下文,是一个独立的渲染区域,让处于 BFC 内部的元素与外部的元素相互隔离,不会相互影响。
定位一共有 5 种,static(默认静态定位)、absolute、relative、fixed、sticky(粘性定位)。
static:默认定位属性值。该关键字指定元素使用正常的布局行为,即元素在文档常规流中当前的布局位置。此时 top, right, bottom, left 和 z-index 属性无效。
static
relative: 元素的定位永远是相对于元素自身位置的,和其他元素没关系,也不会影响其他元素(因此会在此元素未添加定位时所在位置留下空白)。
relative
absolute:绝对定位,它会从父类开始一层一层向上找起,寻找 position 值不是 static 的祖先元素,直到 html 根标签为止。
absolute
fixed:不为元素预留空间,而是通过指定元素相对于屏幕视口(viewport)的位置来指定元素位置。元素的位置在屏幕滚动时不会改变
fixed
sticky: 粘性布局,可以被认为是相对定位和固定定位的混合。元素在跨越特定阈值前为相对定位,之后为固定定位。
sticky
https://developer.mozilla.org/zh-CN/docs/Web/CSS/position
其核心就是用来选择那些不能够被普通选择器选择的文档之外的元素,比如:hover。
:hover
还有E:hover、E:not()、 E:first-child、 E:last-child、 E:nth-child(n)、E:nth-last-child(n)等,作为个性选择器使用。
E:hover
E:not()
E:first-child
E:last-child
E:nth-child(n)
E:nth-last-child(n)
其核心就是需要创建通常不存在于文档中的元素,比如::before。
::before
::before、::after、::selection、::first-line、::first-letter (常用清除浮动,画三角箭头、修饰文字等)
::after
::selection
::first-line
::first-letter
可以粗略的区分,伪类和伪元素分别用单冒号 :和双冒号 ::来表示。
类型判断:
String(null) === 'null'
浅拷贝与深拷贝?如何实现深拷贝?
说一下对闭包的理解,以及你在什么场景下会用到闭包?
闭包属于一种特殊的作用域,称为 静态作用域。它的定义可以理解为: 父函数被销毁 的情况下,返回出的子函数的[[scope]]中仍然保留着父级的单变量对象和作用域链,因此可以继续访问到父级的变量对象,这样的函数称为闭包。
原型,一个简单的对象,用于实现对象的属性继承,可以使用obj.__proto__ 来访问; 构造函数,可以通过 new 来新建一个对象的函数; 实例:通过 new 一个构造函数创建出的对象,实例通过 __proto__ 来指向原型,通过 constructor 来指向构造函数。
obj.__proto__
__proto__
constructor
实例.__proto__ === 原型; 原型.constructor === 构造函数; 构造函数.prototype === 原型
原型链是由原型对象组成的,每个对象的__proto__ 指向其构造函数的原型,__proto__ 像链条一样将对象向上连接,直至 Object.prototype的上一级 null,原型链上溯结束。
Object.prototype
const arr = [] // 数组都继承于 Array.prototype // (Array.prototype 中包含 indexOf, forEach 等方法) // 原型链如下: // arr ---> Array.prototype ---> Object.prototype ---> null
宏任务:script 代码块 , setTimeout ,setInterval ,setImmediate ,I/O ,UI rendering 微任务:process.nextTick ,promise.then ,Object.observe ,MutationObserver
console.log('script start') setTimeout(function() { console.log('setTimeout') }, 0) new Promise(resolve => { console.log('Promise') resolve() }) .then(function() { console.log('promise1') }) .then(function() { console.log('promise2') }) console.log('script end') // script start => Promise => script end => promise1 => promise2 => setTimeout
很多人有个误区,认为微任务快于宏任务,其实是错误的。因为宏任务中包括了 script ,浏览器会先执行一个宏任务,接下来有异步代码的话就先执行微任务。 所以正确的一次 Event loop 顺序是这样的
ES6
简单归纳下 Promise:三个状态、两个过程、一个方法,当然还有其他概念,如 catch、 Promise.all/race/allSettled。
Promise.all 错误捕获
vue3
Advanced-Frontend/Daily-Interview-Question#129
参考 vue 源码对 v-model 的实现中,对输入中文的处理
<input id="myinput" />
function jeiliu(timeout) { var timer function input(e) { if (e.target.composing) { return } if (timer) { clearTimeout(timer) } timer = setTimeout(() => { console.log(e.target.value) timer = null }, timeout) } return input } function onCompositionStart(e) { e.target.composing = true } function onCompositionEnd(e) { //console.log(e.target) e.target.composing = false var event = document.createEvent('HTMLEvents') event.initEvent('input') e.target.dispatchEvent(event) } var input_dom = document.getElementById('myinput') input_dom.addEventListener('input', jeiliu(1000)) input_dom.addEventListener('compositionstart', onCompositionStart) input_dom.addEventListener('compositionend', onCompositionEnd)
function debounce(fn, delay) { let timer = null return function(...args) { const ctx = this if (timer) { clearTimeout(timer) } else { timer = setTimeout(() => { fn.bind(ctx, ...args) }, delay) } } } const handlerChange = ev => { console.log(ev.target.value) } const handlerDebChange = debounce(handlerChange, 1e3)
<input onChange={handlerDebChange} />
Advanced-Frontend/Daily-Interview-Question#108
Advanced-Frontend/Daily-Interview-Question#141
The text was updated successfully, but these errors were encountered:
No branches or pull requests
每轮都考察什么?
问题列表
CSS
解答
解答
text-align: center
margin: 0 auto
absolute + transform
flex + justify-content: center
line-height: height
absolute + transform
flex + align-items: center
absolute + transform
flex + justify-content + align-items
table-cell
解答
rem 响应适配的原理是动态计算为当前页面的
newFontSize
并赋值给 html 根节点,从而 rem 参照可以根据根节点进行缩放。设计稿宽度 /
预设 font-size
= 实际屏幕宽度 /newFontSize
newFontSize
= 实际屏幕宽度 *预设 font-size
/ 设计稿宽度还有一种响应方案,html 根元素 font-size 设置 13.33vm 是什么意思 ?
这也是 100px 的一种表示方式。
750px = 100vm, 即 1vm = 7.5px
100px = 100px / 7.5px = 13.33vm
解答
解答
块级格式化上下文,是一个独立的渲染区域,让处于 BFC 内部的元素与外部的元素相互隔离,不会相互影响。
解答
定位一共有 5 种,static(默认静态定位)、absolute、relative、fixed、sticky(粘性定位)。
static
:默认定位属性值。该关键字指定元素使用正常的布局行为,即元素在文档常规流中当前的布局位置。此时 top, right, bottom, left 和 z-index 属性无效。relative
: 元素的定位永远是相对于元素自身位置的,和其他元素没关系,也不会影响其他元素(因此会在此元素未添加定位时所在位置留下空白)。absolute
:绝对定位,它会从父类开始一层一层向上找起,寻找 position 值不是static
的祖先元素,直到 html 根标签为止。fixed
:不为元素预留空间,而是通过指定元素相对于屏幕视口(viewport)的位置来指定元素位置。元素的位置在屏幕滚动时不会改变sticky
: 粘性布局,可以被认为是相对定位和固定定位的混合。元素在跨越特定阈值前为相对定位,之后为固定定位。https://developer.mozilla.org/zh-CN/docs/Web/CSS/position
解答
其核心就是用来选择那些不能够被普通选择器选择的文档之外的元素,比如
:hover
。还有
E:hover
、E:not()
、E:first-child
、E:last-child
、E:nth-child(n)
、E:nth-last-child(n)
等,作为个性选择器使用。其核心就是需要创建通常不存在于文档中的元素,比如
::before
。::before
、::after
、::selection
、::first-line
、::first-letter
(常用清除浮动,画三角箭头、修饰文字等)解答
JavaScript
解答
原始类型,按值存储,string,null,boolean,undefined,number,symbol,bigint 对象类型,按引用指针存储,Object 类的所有,包括 Date,Function,Array等类型判断:
String(null) === 'null'
来判断浅拷贝与深拷贝?如何实现深拷贝?
说一下对闭包的理解,以及你在什么场景下会用到闭包?
解答
闭包属于一种特殊的作用域,称为 静态作用域。它的定义可以理解为: 父函数被销毁 的情况下,返回出的子函数的[[scope]]中仍然保留着父级的单变量对象和作用域链,因此可以继续访问到父级的变量对象,这样的函数称为闭包。
解答
原型,一个简单的对象,用于实现对象的属性继承,可以使用
obj.__proto__
来访问;构造函数,可以通过 new 来新建一个对象的函数;
实例:通过 new 一个构造函数创建出的对象,实例通过
__proto__
来指向原型,通过constructor
来指向构造函数。原型链是由原型对象组成的,每个对象的
__proto__
指向其构造函数的原型,__proto__
像链条一样将对象向上连接,直至Object.prototype
的上一级 null,原型链上溯结束。解答
解答
宏任务:script 代码块 , setTimeout ,setInterval ,setImmediate ,I/O ,UI rendering
微任务:process.nextTick ,promise.then ,Object.observe ,MutationObserver
很多人有个误区,认为微任务快于宏任务,其实是错误的。因为宏任务中包括了 script ,浏览器会先执行一个宏任务,接下来有异步代码的话就先执行微任务。 所以正确的一次 Event loop 顺序是这样的
ES6
解答
解答
简单归纳下 Promise:三个状态、两个过程、一个方法,当然还有其他概念,如 catch、 Promise.all/race/allSettled。
Promise.all 错误捕获
浏览器
网络
vue
vue3
代码托管
前端工程化
项目
开放性问题
前端常见需求
input 搜索如何防抖,如何处理中文输入
参考 vue 源码对 v-model 的实现中,对输入中文的处理
<input onChange={handlerDebChange} />
可以通过一个 flag isInCompos 来判断 字符真正输入到 input 或 textarea 中的时机
compositionstart isInCompos=true
compositionupdate isInCompos=true
compositionend isInCompos=false
如何设计实现无缝轮播
实现模糊搜索结果的关键词高亮显示
参考
The text was updated successfully, but these errors were encountered: