牛客字节面经总结
HTML,CSS
- 盒模型有哪些?有哪些使用场景?
- 实现一个等腰三角形
- BFC是什么?有什么用?
- 列出 flex 常用属性和值,并解释。
- 文档流有了解吗?
- css的href属性和script的src属性的区别?
- 容器固宽 一行元素的时候居中 多行的时候左对齐?
- z-index 在什么情况下会失效?
- position: sticky 的作用?
- 如何看待 CSS 预处理器?
- 有一个类似表格(或者日历)的布局,每个单元格的border为1px,相邻单元格中间的border也为1px,怎么实现?现在要实现选择某一单元格会高亮,怎么实现?
- html中link一个很大的css文件,导致加载很慢。那用户看到的浏览器加载过程是怎样的,是一直空白么?还是先出现个骨架?还是什么?如果中间有js语句,会怎么样?页面加载会终止么?
- HTML:meta标签干什么的,都有什么属性;doctype是干嘛的,都有哪些属性?
- HTML:语义化标签说出几个;form表单的属性说一说?
- 怎么实现抽屉侧边栏?
- head 有啥标签,各有啥用?
- 设置一个元素margin-top: -20%,具体是什么效果?
- 元素line-height设置为1,具体是多少像素,怎么计算?
- 如何计算1rem具体等于多少像素?
- 图片渲染下方有一条白线是什么原因造成的?
- css实现一个梯形?
- CSS动画 GPU加速开启(3d属性)与原理(GPU)?
- 伪类与伪元素差别?
- Flex: 0 1 auto是代表什么?
- 了解iframe吗?
- script标签属性defer和async的作用,什么区别?
- 类选择器和伪类的区别及优先级?
- 用css实现一个模态窗口,要从窗口下面向上弹的动画?
- 讲一讲flex布局?给子元素设置flex:1是什么含义?flex是哪几个属性的简写?flex-shrink默认值是几?剩余空间的分配规则是怎样的?
- CSS单位 px rem em vw vh?如果窗口尺寸调整,vw,vh会产生变化吗?
- BFC会与float元素相互覆盖吗?
- css选择器优先级排序?
- CSS实现一个秒针效果(一分钟转一圈,匀速和一秒一走)?
- CSS实现类似微信朋友圈的效果,要求根据图片数量显示不同的布局。(一张时占比50%,四张是田字布局,九张时九宫格布局)?
- box-sizing的意义是什么?
JavaScript
- 遍历object的value方法?
- js如何实现继承?
- 数据类型有哪些,为什么存在栈和堆?
- 如何捕获async await的异常,如果不写await promise报错了你的try catch 能捕获到错误么?
- 如何在不使用ES6的情况下,达到let的效果?
- map和Object的区别?
- js垃圾回收机制?
- 函数创建和执行的过程?
- css 动画与 js动画区别?
- for in / for of/object.key的区别
- js能表示的最大整数,小数在计算机内部的存储过程?
- 怎么判断是不是空对象?
- 静态作用域和动态作用域?
- 如何排查内存泄漏? 火焰图接触过吗?
- 浏览器的事件模型?在当前的事件模型中,哪些事件可以冒泡,哪些不会冒泡,为什么?不会冒泡的怎么实现事件委托?
- 从继承,多态,封装三方面讲一下js是怎么实现的?
- 为什么JS执行的时候要阻塞HTML解析?
- setInterval 的细节?
- v8引擎的sort()实现?
- removeEventListener(eventName,callback)拿不到函数名(callback)怎么办?
- JS里面印象最深刻的技术,说三个?
- 创建一个原型链只有name属性的对象(除了name属性其他属性都没有)?
- ES6 module和commonjs的区别?
- e.target和e.currentTarget的区别?
- addEventLisenter的第三个参数?
- with 的了解?
- 页面有一个iframe,将主页面的一个数组传到iframe中再用 instanceof 判断数组是否可行?
- Fetch API与传统 XHR 的区别?
- JS如何性能监测,如何监测用户页面是否卡顿?
- sort()是内部使用了什么算法 时间复杂度是多少 indexOf()的时间复杂度是多少?
- 宏任务、微任务的区别是什么,除了执行流程还有什么区别?
- postMessage、fetch是宏任务还是微任务?
- 区别微任务宏任务的标准是什么?
- 递归和循环在代码的执行层面有什么区别?
- 闭包是什么,有什么作用?
- 事件循环?
- 在js中0.1+0.2===0.3吗?如果不相等如何解决?
- localStorage里可以存图片吗,怎么存?
Vue
- vue2和vue3的区别?
- 原生框架和Vue框架有什么不同?Vue给你带来了一些什么?
- 从应用方面,比如性能方面,Vue带来了什么?
- 什么场景下用单页应用会好,什么时候用多页应用会好?
- 不同组件进行通信有哪些方式?
- keep-alive是如何实现缓存的,keep-alive原理?
- 怎么理解单一职责性,为什么要遵循这一原则?
- diff算法?
- Vue Scoped CSS 是做什么的,怎么实现的,如果让你自己实现有什么思路?
- 你对于封装、模块化的理解,项目中自己封装过组件吗?
- vue中的scoped style是如何实现作用域样式以及为什么vue不使用css module来实现作用域?
- watch和computed的区别?
- MVC MVVC MVP的异同?
- 使用框架一定比原生的或者jQuery好吗?为什么?
- vue框架有什么特点?
- vuex的mutation和action的区别,为什么要设立两个而不是直接都用mutation操作state?
- 框架里用到了哪些设计模式?
- vue3的代理对比vue2的defineProperty有什么优点?
- vuex使用,原理?
- SPA是什么?
Node
- 用过nodejs吗,nodejs的架构?
- nodejs如何开启多进程?如何开启多线程?
- Koa洋葱圈模型?
- koa 的原理 与express 的对比?
- 非js写的Node.js模块是如何使用Node.js调用的?
- node为什么是异步?
- node如何充分利用CPU?
- node如果想多开几个进程该怎么操作?
网络和安全方面
- 输入url到显示全过程?
- get post的区别?
- DNS使用什么协议传输?为什么?
- 如果TCP传输中第二个包丢失了,会怎么办?
- cookie相关,相同一级域名跨域、不同一级域名跨域?
- 常见的Http状态码?
- Http头的字段你了解哪些?
- http压缩你除了gzip还了解哪些?
- gzip是有损压缩还是无损压缩?
- https加密的具体过程?
- CA证书的作用?
- tcp 的可靠性怎么实现的,tcp 复用是怎么实现的?
- http 缓存,不同资源一般采取什么缓存方式?
- dns解析,七层协议,应用层有什么协议,浏览器缓存,http状态码?
- url由哪些部分组成?
- cookie的空间大小?怎么验证呢?cookie有哪些字段?
- 跨域是什么?有哪些实现方式?CORS响应头?
- 怎么让跨域请求携带Cookie,协议名不一样算跨域吗?
- 讲一下JWT机制?
- 常见的协议有哪些?
- 最上面两层里面的协议?
- 非简单请求为什么要发options,有什么用吗?
- 服务端如何检查用户是否登录?
- 如何预防xss/csrf攻击?
- samesite属性说一下? samesite属性的lax值? domain属性说一下 ? 如何配置跨域允许携带cookie?子域也能携带cookie吗?
- 如何获取重定向后的地址?
- http和https的区别?
- HTTP协议的各个版本的特性都是什么?
- TCP和UDP的区别? TCP是怎么保证数据准确可靠的 ? TCP的拥塞控制,校验和是怎么做的?
- HTTP和HTTPS 的区别? HTTPs的加密方式? 除了安全性还有没有其他的优点?
- https的加密方式有了解吗?CA证书客户端放在哪里?
- 知道数字签名和数字信封吗?
- 怎么确定哪个CDN节点离用户最近呢?
- DNS使用什么网络协议?
- https全过程 握手的每一步?
- ssl tls有什么区别讲一下?
- 对称加密非对称加密?
- DNS递归查找的弊端?
- 正向代理、反向代理?
浏览器以及操作系统相关
- Number精度丢失问题,底层原因,解决方案?
- 32bit和64bit的区别
- 说说进程、线程是什么,了解协程么?
- 说说读写锁?
- 浏览器进程和线程?
- 线程与进程的关系?JS为什么是单线程的?
- 如何计算浏览器的帧?
- 浏览器的多个标签页如何通信?
- 进程的调度策略,线程的同步和线程间通讯?
- 为什么32位操作系统最大支持内存为4GB?
- 内存大了有啥好处?
- 线程共享为什么比进程共享容易?
- 计算机的原码、反码、补码?
- 为什么要有协程?协程的目的?
- 进程和线程有什么区别?如果某个线程挂掉了,这个进程会挂掉吗?如果某个线程修改了内存,另一个线程能感知到吗?
- 浏览器几个进程,之间有什么关系,解释一下?
Webpack以及优化
- 前端模块化的优势?
- 对前端工程化的理解?
- 前端性能优化?
- 讲讲性能优化,能实际实现的?
- Webpack构建流程?
- HMR 热更替原理?
- loader与plugin plugin遵循的事件流机制?
- webpack打包过程?
- 怎样从零搭建项目?
- packjson文件里有一些key,value。其中一个key叫dependencies和devDependencies,能说说作用吗?
- externals是怎么实现的?
- CDN优化时,你是如何判断该将哪些包分离。?
- loader与plugin的区别?
数据结构
- 数据结构有哪些,每种的特点,给数据结构分类的方法?
- 快排 原理和优化 分析复杂度?
- hash表结构,解决冲突的办法,hash函数有什么类型?
- 学数据结构或者算法过程中,有没有什么地方觉得很巧妙?
- 数组和链表的区别?
算法和手写题
-
给定一个二叉树与一个值,找到和为该值的二叉树的所有路径?
-
数组去重,不使用ES6语法,要求时间复杂度低?
-
给两个矩形,有每个矩形点坐标以及长宽高,判断是否相交(包含也算相交)?
-
如何在不使用ES6的情况下,达到let的效果?
-
求一个数组的最大连续子数组,输出他们的和?
-
常见排序算法?
-
找出dom节点下所有标签类型?
-
最短路径和?
-
深度遍历 dom,打印遍历路径?
-
vue:实现一个模态框组件,过深的组件该怎么配合定位属性?
-
在很多数中怎么查找前10个大的数?
-
最长无重复子串?
-
K 个一组翻转链表?
-
手写jsonp?
-
计算中缀表达式的值?
-
求两个数组交集?
-
在字符串里面找到第k个唯一出现一次的字符串?
-
怎么实现抽屉侧边栏?
-
1123456789 -> 1,123,456,789
-
二叉树最近公共祖先?
-
最长不重复子串?
-
把数字的0都移到数组末端?
-
打印蛇形矩阵?
-
传入一个正整数 n, 输出一个"内卷"形输出, 如
输入 1, 输出:1 输入 2, 输出:1, 2, 4, 3
-
求最长回文字符串
-
说代码结果及原因:
[1]==[1] [1]===[1] 0.1+0.2==0.3
-
二叉树先序中序 生成后序 ?
-
二叉树的最大深度?
-
2维数组斜45度输出?
-
字符串匹配,大概是给一个str,再给一个exp,判断str能否被exp匹配(如"sss"可以被".*"匹配)?
-
二分查找?
-
手写深拷贝?
-
a=[1,[2,[3,[4,null]]]], 实现数组 b=[4,[3,[2,[1,null]]]]?
-
实现一个计算器,求字符串的值,例如((2 + (3 * 2) ) * (2 + 3) + (3 - 1) )
-
数组随机排序?
-
判断对称二叉树?
-
写一段匹配URL的正则,包括协议、域名、端口、path、hash、querystring?
-
两个链表找相交节点?
-
创建一个原型链只有name属性的对象?
-
leetcode 112路径总和?
-
手写reduce?
-
fn([['a', 'b'], ['n', 'm'], ['0', '1']]) => ['an0', 'am0', 'an1', 'am1', 'bn0', 'bm0', 'bn1', 'bm0']
-
写一个事件代理函数,需要判断child是parent的子节点?
-
给数组中的字符串编号,f(['ab', 'c', 'd', 'ab', 'c']) => ['ab1', 'c1', 'd', 'ab2', 'c2']
-
无重复字符的最长子串?
-
最长回文子串?
-
斐波那契(尾递归优化)?
-
给定一个正整数数组和n,求最短子数组,要求子数组之和大于等于n(滑动窗口)?
-
爬楼梯?
-
JavaScript实现一个带并发限制的异步调度器,保证同时最多运行2个任务?
-
实现一个防抖函数 function debounce() {},资源竞态的情况怎么处理?
-
用css实现一个模态窗口,要从窗口下面向上弹的动画?
-
用reduce实现map的功能?
-
树的遍历,前序和中序能确定一颗树吗?
-
给定一个数组,返回最小的k个数字,数组中可能会有重复数字,不需要去重,用快排的思想?
-
实现一个订阅发布模式的类,要求另外加一个once方法,实现仅触发一次响应事件?
-
力扣,最小栈?
-
js实现树的深度优先搜索、广度优先搜索?
-
arr是number数组,k是number,返回前k个最小的数字组成的数组,保持相对顺序
输入:[1,2,3,4,5,3,2],3,输出:[1,2,2] 输入:[1,2,3,4,5,3,2],4,输出:[1,2,3,2] 输入:[1,2,3,4,5,3,2],5,输出:[1,2,3,3,2]
-
二叉树的右视图
-
if ([] == false) {console.log(1);};
if ({} == false ) {console.log(2);};
if ([]) {console.log(3);};
if ([1] == [1]) {console.log(4);};
-
实现ES5中Function原型的bind方法?
-
repeat 实现,使用JS实现一个repeat方法?
-
如何实现一个 setTimeout?
-
递归和循环的方式写一个斐波那契?
-
查出数组中次数超过一半的数?
-
一杯咖啡5元 每个人只买一杯 分别可能付5元 10元 20元 (补充每个人只买一杯咖啡 一杯咖啡的售价为5元 每个人可能付 5元 10元 20元 一开始咖啡店没有零钱 问是否每次是否能找零 样例 1 输入 10 5 5 结果 false (第一次别人付10元 我们没有5元零钱) 样例 2 输入 5 10 5 20 结果 true (第一次别人付5元 我们不需要找零 然后第二次付10元 我们找零5元 第三次付5元 不需要找零 第四次付20元 找零15元)
-
CSS实现一个秒针效果(一分钟转一圈,匀速和一秒一走)