2023-4-23 快手本地生活 一面 寄问题
自我介绍(略短)
项目
低代码平台的实现原理
托拉拽实现页面的原理
事后:组件拖拽到新的组件上位置偏移
基础知识
Promise
看代码,判断执行结果
函数的 this
看代码,判断 this 的指向
Vue2 和 Vue3 的差别
手写 lodash 中的 at 方法(对象取值)
反问
技术栈
基础
建议尽快接触实习,接触更复杂的业务
小程序笔记跨平台框架
uni-app
使用 Vue 开发,可以发布到多端,ios,安卓,web,各种小程序
taro
支持 React/Vue/Nerv 等框架
更加灵活
小程序的配置和架构双线程模型web-view 和 jsCore,渲染层和逻辑层
WXML 和 WXSS 运行于渲染层,使用 WebView 渲染
JS 运行于逻辑层,使用 JsCore 运行
两个线程都会经由微信客户端进行中转交互
生命周期
面试官:说说微信小程序的生命周期函数有哪些? | web 前端面试 - 面试官系列 (vue3js.cn)
生命周期 | 微信开放文档 (qq.com)
双线程
App.js获取进入小程序的方式
场景值
场景值列表
在 onLaunch 和 onShow 生命周期回调函数中,有 options 参数,其中有 scene 值,可以用于判断
onShow(options) { console.log("onShow"); console.log(options); // 判断进入小程序的方式 console ...
2023-5-15 小红书一面准备
岗位:安全前端
地点:上海
15 点给我打电话吧,就说 17 点面试,感觉确实很着急
大小周
23 春招 4.23 安全前端一面二面 过4.23 一面面试时间 1h,面试官很温和,比隔壁美团好太多了。至少先介绍了部门的情况,面试会给反馈,遇到不太会的会引导
介绍了 xhs 的部门,然后让我自我介绍
说说实习遇到最有挑战性的项目吧,是怎么解决的
在滴滴的实习主要干什么,产出多少
vue3 对比 vue2 区别
vue-router 两种模式和实现原理
keep-alive 使用场景,你觉得和 vue-router 结合能怎么用
watch 和 watchEffect 区别
vue 的 diff 算法
怎么前端性能优化
webpack 的 plugin 和 loader 区别和原理,有自己写过吗
手写题:实现个防抖函数
手写 promise,要求实现 resolve、reject、then 方法
反问:
项目组技术栈(vue 居多)
工作强度(大小周,说到这面试官都笑了 hhh)
面试官反问:有其他在流程的企业吗,我说有,然后说那尽快帮我推进一 ...
浏览器原理面试知识点前端缓存&本地存储
五步吃透前端缓存,让页面飞起
Session,Cookie,Token
看完这篇 Session、Cookie、Token,和面试官扯皮就没问题了
Cookie主要用于的目的:
会话管理,登录,购物车等服务器应该记住的其他内容
个性化,用户偏好,主题等
追踪,记录分析用户行为
Cookie 曾经用于一般的客户端存储。虽然这是合法的,因为它们是在客户端上存储数据的唯一方法,但如今建议使用现代存储 API。Cookie 随每个请求一起发送,因此它们可能会降低性能(尤其是对于移动数据连接而言)。
常见字段:
Name:Cookie 的名称。
Value:Cookie 的值。 值:Cookie
Domain:Cookie 有效的域名。 域名:Cookie
Path:Cookie 有效的目录路径。
Expires/Max-Age:Cookie 的过期时间或存活时间。 有效期/最大值
Secure:指示浏览器仅在通过 HTTPS 协议访问时才发送 Cookie。
HttpOnly:指示浏览器禁止通过 JavaScript 访问 ...
2023-5-16 猿辅导一面准备4.27 日常实习 寄
自我介绍
项目相关
nginx 配置
浮点数的二进制表现形式
小数点往右就是$$x*2^{-n}$$,例如 0.1->0.5,0.01->0.25
https 建立过程
客户端使用 https url 访问服务器,则要求 web 服务器建立 ssl 连接
web 服务器收到客户端请求之后,会将网站的证书传输给客户端
客户端和服务器协商 SSL 连接的安全等级
通过双方确立的安全等级建立会话密钥,然后通过网站的公钥加密会话密钥,并传送给网站
web 服务器通过自己的私钥解密出会话密钥
web 服务器通过会话密钥与客户端之间通信
async defer 下载后执行有什么不同
async 是加载完就执行
defer 是中间加载,最后执行
背的面筋里面没说 BFC
块级格式化上下文
垂直方向边距重叠
可以解决高度塌陷,margin 重叠等
创建:overflow:hidden/auto,display:flex/inline-block,
看代码输出(Promise)
c ...
2023-5-13 零禅智能一面准备牛客一面 寄
自我介绍
盒模型? 盒模型的内容?
分为 boder-box 就是 IE 盒子模型,和 content-box,标准盒子模型
他们之间可以用box-sizing:content-box|border-box 切换
标准盒子的 w,h 只包括内容,不包括 border 和 padding
IE 盒子的包括上面俩
css 定位 position ?
static,不常用,默认是这样
relative,占用的空间和原本相同,偏移是相对于原本的位置
absolute,不占用空间,相对于最近的不是 static 的祖先元素偏移,就比如父元素 relative,子元素 absolute
fixed,不占用空间,相对于屏幕窗口改变位置,在屏幕滚动时不变换位置
元素垂直居中
line-height=height
margin:auto
绝对定位+ transform:translate(-50%,-50%)
flex 布局display:flex; align-items:center; justify-content:cen ...
二分法704. 二分查找704. 二分查找 - 力扣(Leetcode)
有序数组中查询目标值,数组中无重复元素
对于二分个人感觉难点就是在于边界条件的判断,就好比while(l < r)还是while(l <= r),还有r = m还是r = m - 1,这是一直搞混的。
一般写二分区间定义就是俩种,左闭右闭[l, r],左闭右开[l, r)
左闭右闭
while(l <= r),因为l === r的时候也有意义
if(nums[m] > target) r = m - 1;,因为此时的nums[m]一定不是 target,[ l , m - 1]
var search = function (nums, target) { let l = 0 let r = nums.length - 1 // 可以取到最后一位 while (l <= r) { // 左闭右闭 const m = Math.floor((l + r) / 2) // 防止溢出 // const m = Math.floor(l + ...
计算机网络
计算机网络太难?了解这一篇就够了
OSI 七层模型
TCP 和 UDP 的区别
tcp 面向连接,发送数据之前必须两端连接,建立可靠连接,仅支持点对点,面向字节流,有拥塞控制
udp 无连接,不需要三次握手,想法数据直接发,能单播,多播,广播,面向报文,不可靠,高效
gpt
连接导向 vs 无连接:
TCP 是面向连接的协议,建立连接后才能传输数据,数据传输前需要进行三次握手建立连接。
UDP 则是无连接的协议,不需要建立连接即可直接传输数据。
可靠性:
TCP 提供可靠的数据传输,通过 TCP 建立的连接可以保证数据的有序性、不丢失、不重复,同时还提供拥塞控制和流量控制机制。
UDP 则没有可靠性保证,数据传输时可能会发生丢失、重复等情况,但是由于没有连接建立和拥塞控制等机制,UDP 传输速度较快。
基于字节流 vs 基于数据包:
TCP 是基于字节流的协议,应用层传输的数据被分割成 TCP 报文段进行传输,而 TCP 对于传输数据的大小并没有限制,能够保证数据的可靠性和有序性。
UDP 则是基于数据包的协议,应用层传输的数据被封装成 UDP 数据包进行传输 ...
Vue响应式原理数据变化更新视图,试图变化更新数据
数据劫持 + 发布订阅模式
Vue2
利用的是Object.defineProperty(),劫持 data 对象中各个属性的getter和setter
缺点是:
监听不到数组值的变化
监听不到对象属性的新增或者删除
解决方案:使用vm.$set,vm.$delete
解除响应式:对数据深拷贝,了或者用Object.freeze()对数据进行冻结
Vue 响应式原理是 Vue 框架的核心,它实现了数据和视图的双向绑定。在 Vue2 中,Vue 的响应式原理基于 Object.defineProperty 实现,它会将 data 中的属性转化为 getter/setter,并在 getter/setter 中进行依赖收集和派发更新。当我们修改数据时,Vue 会检测到数据变化,并通知相关的视图进行更新。
具体实现流程如下:
初始化时,将 data 中的属性通过 Object.defineProperty 方法转化为 getter/setter;
在 getter 中收集依赖,即将依赖的 watche ...
JS 基础let,const,var
var 声明变量的作用域是函数级别的,不受块级作用域的限制。在全局作用域中声明的变量会成为全局对象的属性。
let 声明的变量是块级作用域的,只在声明的块内有效。在 for 循环中,每次迭代都会创建一个新的变量。
const 声明的变量也是块级作用域的,和 let 类似,但是其值不能被重新赋值,只能被赋值一次。
数据类型首先分为两种,基本类型和引用类型
基本:
number
string
boolean
undefined
symbol
null
引用统称 object
array
object
function
区别:
原始数据类型存储在栈里面,因为频繁使用,占据空间小,大小固定
引用数据类型存储在堆里面,占据空间大,大小不固定。
在栈里面存储了指针,指针指向堆中该实体的其实位置。
寻找引用值时,会现在栈里面检索地址,再从堆里面获得实体
判断数据类型typeof 3 // 'number'typeof 'a' // 'string'typeof true // ...