[面试系列]富途前端社招面试

富途前端社招面试复盘

上周接到了富途一面的通知,我选择了面基,因为据说面基过的概率比线上大。

刚去的时候需要先做个笔试,给的时间是一个小时,但是我半个小时就做完了。这里想吐槽一下富途的前台,让我去茶水间做笔试,我到的时候是1点半,里面的员工在关灯休息,我真的是靠着微弱的四面八方的灯光做的笔试题。就不能给我找个亮一点的地方?

笔试真的是手撸代码,即给你一张白纸手写,太牛批了。。我&忘记怎么写了,写了个8
笔试题大概有:

  • 至少2种方式实现左边固定宽度右边自适应的布局。
  • 递归实现fibonacci,要求带缓存。
  • 判断是否括号匹配
  • 设计表单提交的数据结构(由于我没用过jquery或者是原生html这些写的比较少,这题我好像题目都没抬读懂,就没写)
  • 简述浏览器加载过程,并针对加载过程可以做哪些性能优化

做完之后直接就是面试了。然后我才发现,面试官现场改你的笔试卷子,然后拿着简历和笔试卷子就可以聊。。

  • 第二题实现斐波那契数列没什么问题,就是带缓存那里我的实现方式是函数第二个参数是个缓存的数组,所以每次重新调用的时候都重新计算。面试官问我希望这个缓存能留下来,我说在函数外部定义一个变量去存这个缓存,他说还有什么方法吗,我想了半天就说往函数的prototype上加一个域去存,看他的表情一脸严肃。。我就不太懂这个带缓存还能有什么方法。。
  • dns解析过程是怎么样的
  • 如何提升首屏渲染速度。这个题目真的是被面试官一句还有吗搞疯了。。我搞了大概7.8个小点。然后面试官只针对其中我说的缓存做深入提问。。
  • 如果在body中间插入一段script,执行一个循环特别大的脚本,页面表现是什么样的?我说页面执行会在这个地方停住,用户无法对页面做任何操作。
  • 为什么?我说因为js会和渲染共用一个进程,被面试官说js怎么会和渲染共用一个进程呢,然后这个问题就到此为止了。
  • 如何实现缓存?我说在cache-control设置过期时间(感觉面试官好像不知道这个点?还问我过期时间是什么意思),public(又被问这个是什么,我说是让资源任何时候都缓存)
  • 是否有存在缓存过期但资源没过期?是
  • 这时怎么做?服务器需返回给客户端状态码表示该资源没有更新
  • 服务器怎么知道资源没有更新?我说我没做过服务器端,不是很清楚(后来查了一下,链接,现在大概懂了,就是第一次向服务器请求资源时服务器会往response里面塞一个eTag域,存储这个资源的标识,一般是版本号或者内容hash,若发现这个没变, 就返回304)
  • 还有什么优化方式吗。。。
  • 原型和原型链讲一下。我说每个函数在创建的时候就会有个原型对象,每个引用类型也都会有个prototype域指向构造函数的原型对象。原型链就是对象的prototype指向另一个对象,另一个对象的prototype又指向下一个对象,以此类推形成原型链。面试官听完说你好像不太熟,然后就过了。我是不是表述的不太准确。。我可是专门把红宝书关于原型那部分看了好几遍。。感觉得花时间整理一下思路了。
  • 判断this指向
var a = {
    b: function() {
        console.log(this)
    },
    c: {
        d: function() {console.log(this)}
    },
    e: () => {console.log(this)}
}
a.b()
a.c.d()
a.e()

我的回答是a c a,前两个是对的。主要是箭头函数应该是错了,第三个应该是window

  • 反问

当时面完感觉希望就不大了,因为富途用的是vue,我对vue又不熟,加上上面这些基础问题自我感觉很多都是不清楚了,现在复盘完之后简直是绝望了。就当丰富自己的见识了吧。

### 前端面试题目及答案总结 #### 一、前端性能优化 在前端开发中,性能优化是一个重要的主题。通过代码分割和路由懒加载技术,可以显著提升应用的加载速度和用户体验[^3]。具体来说,可以通过 Webpack 等构建工具实现模块化打包,并利用动态导入语法 `import()` 实现按需加载。 ```javascript // 路由懒加载示例 const Home = () => import('./components/Home.vue'); const About = () => import('./components/About.vue'); export default [ { path: '/', component: Home }, { path: '/about', component: About } ]; ``` 这种做法减少了初始页面加载时所需的 JavaScript 文件大小,从而提升了首屏渲染的速度。 --- #### 二、JavaScript 类加载过程及相关问题 对于 Java 开发者而言,在理解类加载过程中可能会涉及内存泄漏等问题。虽然这是针对 Java 的描述[^2],但在前端领域同样存在类似的资源管理挑战。例如,未正确释放定时器或事件监听器可能导致内存无法被垃圾回收机制清理。 以下是常见的内存泄漏场景及其解决方案: - **闭包引起的循环引用**:确保父级作用域对象不会因子函数的存在而长期驻留在内存中。 - **DOM 引用未解除绑定**:移除不再使用的 DOM 元素应先解绑其上的事件监听器。 --- #### 三、常见前端框架相关问题 随着 React 和 Vue.js 等现代框架的普及,许多企业会考察候选人对这些框架的理解程度以及实际操作能力。以下是一些典型的技术点: 1. **React 中的状态管理和组件通信** - 使用 Context API 或 Redux 进行全局状态共享。 - 利用 Props 将数据从父组件传递到子组件。 2. **Vue 生命周期钩子的作用** - 如何在 `mounted` 阶段初始化异步请求? - 在 `beforeDestroy` 中清除订阅或停止轮询任务。 --- #### 四、跨浏览器兼容性和调试技巧 由于不同浏览器可能表现出不一致的行为,因此了解如何解决这些问题至关重要。一些常用的手段包括: - 使用 Polyfill 库填补旧版浏览器的功能缺失。 - 测试环境配置多版本浏览器模拟真实用户访问情况。 --- #### 五、安全与 SEO 友好型设计 除了功能性需求外,还需要关注安全性措施(如防止 XSS 攻击)以及搜索引擎优化 (SEO) 方面的知识点。比如预渲染静态 HTML 页面或者借助服务端渲染 SSR 技术提高爬虫抓取效率。 --- ### 示例代码片段展示 下面提供一段简单的基于 Promise 的防抖函数实现方法作为参考: ```javascript function debounce(func, wait) { let timeout; return function(...args) { clearTimeout(timeout); timeout = setTimeout(() => func.apply(this, args), wait); }; } window.addEventListener('resize', debounce(function() { console.log('Window resized!'); }, 300)); ``` 此功能可用于限制频繁触发的操作频率,改善交互流畅度的同时降低服务器压力。 ---
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值