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; }
反问
部门业务,前端规模