当前位置: 首页 > 面试经验 >

[秋招提前批]百度前端一面

优质
小牛编辑
129浏览
2023-03-28

[秋招提前批]百度前端一面

8.16投递

8.22约面

8.24 19:00面试

百度个人云部门

大约1小时10分钟

百度自己的即时通讯软件 如流

1.自我介绍

2.自己认为收获最多的项目 展开讲讲

3.我看你用的vite框架,vite和webpack比好在哪

我说作为开发者,主观感受是启动快,控制台有展示diff 问我为什么快,我说vite是打包前确定引用关系,按需加载;webpack是把所有引用到的问价打包好一起加载; vite有热更新,面试官说webpack也有,我说我没用过最新的webpack5哈哈哈 我说vite代理服务器解决跨域问题,这个webpack也有,算是我觉得用框架方便的地方

4.讲讲你用的pinia

我就讲了一下项目中用到的store吧,设计用户登陆状态 具体设计方式就不说了

5.你在开发小程序的过程中学到最多的地方是什么

个人经历可能对大家来说没意义

6.如果说小程序中要嵌套h5页面,怎么保持页面跳转后用户信息自动同步?

我说的是http请求,post请求的时候请求头带上用户不敏感的信息(头像nickname这种)

7.上面说完后顺便问了下https,跳转到h5被抓包怎么办

对称加密+非对称加密 先非对称得到只有两端共识的key,后续两端用key加密交流 普通抓包抓到的是加密后的文件,解不开 如果伪装中间人生成第三方pk/sk,就买个权威机构的证书 证书里会有有效期,加密算法,pk和机构签名 现在的中级证书一般都是2048位的rsa算法,目前算法只能解到768位,比较安全

8.自己实现promise

这部分也是口述的,大致把下面说了,有点不同的是在构造器里引用原型上的函数,避免了每次new promise都要构造resolve和reject函数, 在定义属性的时候如果用箭头函数也会自动挂载到对象属性上,这样子写相当于把res和rej写在原型方法上,构造的时候调用函数,节省内存。 我也不知道这种想法对不对,面试官也没有评价
class myPromise {
    state = 'pending'
    value = undefined
    reason = undefined
    onFulfilledCallback = []
    onRejectedCallback = []
    constructor(executor) {
        this.resolve = this.resolve.bind(this)
        this.reject = this.reject.bind(this)
        try{
            executor(this.resolve, this.reject)
        }catch(err){
            this.reject(err)
        }
    }
    resolve(value){
        if (this.state === 'pending') {
            this.state = 'fulfilled'
            this.value = value
            while(this.onFulfilledCallback.length){
                this.onFulfilledCallback.shift()(value)
            }
        }
    }
    reject(reason){
        if (this.state === 'pending') {
            this.state = 'rejected'
            this.reason = reason
            while(this.onRejectedCallback.length){
                this.onRejectedCallback.shift()(reason)
            }
        }
    }
    then(onFulfilled, onRefected) {
        if (this.state === 'fulfilled') {
            onFulfilled(this.value)
        }
        if (this.state === 'rejected') {
            onRefected(this.reason)
        }
        if(this.state === 'pending'){
            this.onFulfilledCallback.push(onFulfilled)
            this.onRejectedCallback.push(onRefected)
        }   
    }
}


9.http缓存
强制缓存和协商缓存 1.如果强制缓存没过期,不会走协商缓存,直接在浏览器端读取资源 2.如果过期了,同时配置了Etag||last-modified,走协商缓存,如果匹配命中,返回304,使用本地缓存,但是不会更新max-age, 如果协商缓存不存在或者匹配未命中,返回200+新资源+max-age

10.讲讲http的缓存历史(延续上题)

1.0 expires 1.1 cache-control 添加了etag和last-modified

11.爬楼梯

口述秒了 1.动态规划 2.dp[i]的含义 i:楼梯层数 dp[i]:第i层的路径数 3.状态转移方程:斐波那契数列

12.你个人认为原生js,框架这些知识哪些自己比较强,哪些比较弱

随便说就好啦

总的来说就是根据你的项目随机提问,面试官人比较好也不为难你,看牛客上面经一面都比较基础,希望能给二面机会

题目就是这些,答案是我当时的回答,有错误希望大佬们不用忌讳直接骂,骂多学多哈哈哈。

#前端##百度#
 类似资料: