shopee 前端一面
可以的,给我回顾了一波基础知识,这波不亏
- 自我介绍 
- 队列和栈的区别 
- 排序算法以及各自的复杂度 
- 快排什么时候复杂度最差 
- 五层网络模型 
- 应用层有哪些协议,哪些是TCP,哪些是UDP 
- TCP 三次握手和四次挥手 
- TCP UDP的区别 
- HTTP请求有哪些缓存相关的header字段 
- cache-control和expires的优先级,为什么 - cache-control是http1.1的,expires是http1.0的 
- Etag和Last-Modified的区别 
- Etag返回什么状态码 
- 3开头的还有什么状态码,4开头的呢,5开头的呢,504表示什么(网关超时) 
- 事务的四个特性 - 原子性、一致性、隔离性、持久性 
- 进程与线程的区别 - 1、进程是资源分配的最小单位,线程是程序执行的最小单位(资源调度的最小单位) 2、进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段,这种操作非常昂贵。 而线程是共享进程中的数据的,使用相同的地址空间,因此CPU切换一个线程的花费远比进程要小很多,同时创建一个线程的开销也比进程要小很多。 3、线程之间的通信更方便,同一进程下的线程共享全局变量、静态变量等数据,而进程之间的通信需要以通信的方式(IPC)进行。不过如何处理好同步与互斥是编写多线程程序的难点。 4、但是多进程程序更健壮,多线程程序只要有一个线程死掉,整个进程也死掉了,而一个进程死掉并不会对另外一个进程造成影响,因为进程有自己独立的地址空间。 
- nodejs是单线程还是多线程的,Java呢,C++呢 
- nodejs单线程的好处是什么 - (1)多线程占用内存高 (2)多线程间切换使得CPU开销大 (3)多线程由内存同步开销 (4)编写单线程程序简单 (5)线程安全 
- 水平垂直居中怎么实现 
- 箭头函数与普通函数的区别 
- 箭头函数能实现ES6的类吗 
- 判断数组的方式,instanceof方法有什么弊端 
- v-if 和 v-show的区别 
- display:none和visibility:hidden的区别 
- Vue双向数据绑定原理 
- Vue怎么监听数组的变化 - Vue通过重写数组的某些方法(7种)来监听数组变化,而不是触发数组的setter方法 
- Vue3里通过什么方式监听数据 
- Vue key的作用 
- 列表里调整顺序,虚拟DOM是怎么发生变化的 
- 看代码输出 - Promise.resolve().then(() => { console.log('1'); throw 'Error'; }).then(() => { console.log('2'); }).catch(() => { console.log('3'); throw 'Error'; }).then(() => { console.log('4'); }).catch(() => { console.log('5'); }).then(() => { console.log('6'); }); // 1 3 5 6- console.log('1'); setTimeout(() => { console.log('2'); }, 0); Promise.resolve().then(() => { console.log('3'); }).then(() => { console.log('4'); }); console.log('5'); // 1 5 3 4 2
- 代码讲思路 - 给你一个数组 nums,对于其中每个元素 nums[i],请你统计数组中比它小的所有数字的数目, 以数组形式返回答案。 换而言之,对于每个 nums[i] 你必须计算出有效的 j 的数量,其中 j 满足 j != i 且 nums[j] < nums[i] 。 示例 1: 输入:nums = [8,1,2,4,3] 输出:[4,0,1,3,2] 解释: 对于 nums[0]=8 存在四个比它小的数字:(1,2,4 和 3)。 对于 nums[1]=1 不存在比它小的数字。 对于 nums[2]=2 存在一个比它小的数字:(1)。 对于 nums[3]=4 存在三个比它小的数字:(1,2 和 3)。 对于 nums[4]=3 存在两个比它小的数字:(1,2)。 示例 2: 输入:nums = [6,5,4,8] 输出:[2,1,0,3] - 思路:暴力循环,两层循环,时间复杂度O(N^2) 
 如何优化:先用map将nums的元素与索引保存下来,然后对index排序,排完只要一层遍历即可,时间复杂度O(NlogN)- function solution(nums) { let map = {}; nums.forEach((item, index) => { map[item] = index; }) nums.sort((a, b) => a - b); let res = []; for (let i = 0; i < nums.length; i++) { let n = nums[i]; res[map[n]] = i; } return res; }
- 反问 - 部门业务,前端规模 

 查看30道真题和解析
查看30道真题和解析