- 面试公司:新格尔
- 面试岗位:南京-web3d开发工程师
- 面试时间:2025/02/12/09:30
- 面试时长:技面(30min)+ hr面(30min)
- 面试体验:良好,虽然回答的不咋样,但是面试官比较有耐心,会纠正和提示你,2场面试面试官都会认真回答问题
- 技术栈:
- 几何算法/3D技术/数理逻辑/算法优化/后端技术
- canvas/webgl/electron/ts/threejs/babylonjs
- 微信小程序/uniapp/vue3
公司介绍
- 期待薪资:8k
- 定制家具产业互联网企业
- BIM软件
- 软件:
- 柜柜App
- 画门窗
- 老板良
- 四合院
- 门窗CC
- 测量大师
技术面反问
- 方便问一下公司前端使用的技术栈吗
- 可以问一下岗位的主要职责和期待人选吗
- 总重要的是态度吧,需要端正态度,愿意学习web3d技术
- 可以介绍一下成为一名在web3d领域比较专业的程序员大概需要多长时间吗?需要掌握哪些技能呢?
- 这个主要看个人的兴趣和行动吧,如果有足够的驱动力的话,大概1年多就能掌握的比较熟练了
- 掌握技能
- 首先,我们是要和vue层进行交互,需要对vue的实现原理非常熟悉
- 其次,使用的图形库中的api需要足够熟悉,在什么场景下采用什么方案要有自己的判断
- 最后,我们是门窗行业的,你至少需要知道这个行业对技术层面的实现有什么要求吧
hr面反问
- 可以了解一下岗位是否有考核标准和上升空间吗?
- 可以介绍一下我所应聘的岗位,部门人员怎样组成的呢
- 我个人的理解是:咱们这个岗位对软件开发、图形学、数理逻辑以及业务理解能力要求都比较高
- 我个人是非常感兴趣的,也愿意积极的了解和学习
- 方便问一下,您认为要在这个岗位上做的非常出色,需要具备哪些特质呢?
技术问题
js
session、localstorage、cookie区别是什么
说一下宏任务和微任务,宏任务和微任务哪个先执行
说一下堆和栈的区别
堆和栈是2种不同的内存管理方式,用于存储不同类型的数据
堆(Heap)
- 用于动态分配内存的数据
- 存储引用类型数据,如对象和数组
栈(Stack)
- 用于存储基本类型数据,以及函数执行上下文
- 分配固定大小的内存
- 内存管理由系统自动处理,通过栈指针的移动来分配和释放内存
- 在堆中分配的内存不会自动释放,需要垃圾回收机制
说一下浅拷贝和深拷贝
区别
- 浅拷贝
- 创建新的数据,这个数据有着原始数据属性值的一份精确拷贝
- 如果属性是基本值,拷贝的就是基本类型的值
- 如果属性是引用类型,拷贝的就是内存地址
- 深层次的引用类型则共享内存地址
- 浅拷贝实现方法
- Object.assign
- 使用扩展运算符实现的复制
- slice/concat
- 深拷贝
- 开辟一个新的栈,两个对象属性完全相同,对应的地址不同
- 修改一个对象的属性,不会改变另一个对象的属性
- 深拷贝方式
- _.cloneDeep()
- jQuery.extend()
- JSON.stringify()
- 缺点:会忽略undefined、symbol、函数
- 手写循环递归
使用JSON.parse有什么问题
JSON.stringify会忽略undefined、symbol和函数
说一下es6常用的特性有哪些
map和set的使用场景有哪些
es6中promise常用的场景有哪些
- Promise是异步编程的一种解决方案
- 使用Promise.then实现链式操作
- promise有三种状态
- pending 进行中
- fulfilled 已成功
- rejected 已失败
- 一旦状态改变无法重新修改
- 用法
- all 返回所有异步请求的结果,需要所有异步响应状态都成功
- race 返回最先有响应的异步请求结果
- allSettled 返回所有异步请求结果,不管请求成功还是失败
- resolve 返回一个新的Promise,实例的状态是fulfilled
- reject 返回一个新的Promise,实例的状态是rejected
- 使用场景
- 当需要同时获取到几个接口的响应,再执行下一步操作时,使用Promise.all
- 通过Promise异步请求获取到接口数据之后,执行then操作,进行下一步数据处理
说一下null和undefined的区别
css
可以讲一下什么是bfc吗
- BFC(Block Formatting Context)
- 块级格式化上下文(形成一个相对于外界完全独立的空间,让内部的子元素不会影响外部的元素)
- 是页面的一块渲染区域,有一套自己的渲染规则
- 内部的盒子会在垂直方向上一个接一个的放置
- 对于同一个BFC的两个相邻盒子的margin会发生重叠,与方向无关
- 每个元素的左边距与包含块的左边界相接触(从左到右),即使浮动元素也是如此
- BFC的区域不会与float的元素区域重叠
- 计算BFC的高度时,浮动子元素也参与计算
- BFC就是页面上的一个隔离的独立容器,容器的子元素不会影响外面的元素
- 如何触发BFC
- overflow:hidden
- display:inline-block
- position:absolute|fixed
- display:table-cell|flex
- bfc应用场景
- 防止margin重叠
- 解决方法,在其中一个盒子外面包裹一个div盒子
- 清除内部浮动
- 解决方式:父组件overflow:hidden
- 自适应多栏布局:左边使用浮动,右边栏左侧与父盒子的左边栏相触,
- 解决方法:给右边栏添加overflow:hidden
- 防止margin重叠
可以讲一下iframe的缺点吗
优点
- iframe能够显示嵌入的网页
- 可以实现头部、菜单、尾部组件不变,仅仅对iframe嵌套部分修改页面内容,实现代码复用
缺点
- iframe会阻塞主页面的onload事件
- iframe和主页面共享连接池,浏览器对相同域连接数量有限制,影响页面的并行加载
- 使用iframe不利于seo优化
- 对很多移动设备而言,iframe兼容性差
- 使用iframe会增加服务器的http请求
如何实现一个宽度为0.5px的线宽边框呢
- 使用box-shadow实现
- 使用border+transform-scaleY缩放
- 使用伪元素选择器:after/:before + transform-scaleY缩放
大屏的响应式大小是怎么做的
html
href和src的区别是什么
- 请求资源类型不同
- href:用来简历当前元素和文档之间的链接,常用有link/a
- src:会将其指向资源下载并应用到文档中,常用有script/img/iframe
- 作用结果不同
- href用于文档和资源之间建立关系
- src用于替换当前内容
- 浏览器解析方式不同
- href:浏览器会识别文档为css,并行下载资源并且不会停止对当前文档的处理
- src:会暂停其他资源的下载和处理,直到该资源加载、编译、执行完毕,将所指向资源应用到当前内容,因此建议将js脚本放在尾部执行
vue
了解vue的mixin吗
- mixin是面向对象程序设计语言中的类,其他类可以访问mixin类的方法而不必成为其子类
- mixin类常用作功能模块使用,在需要该功能时进行混入,利于代码复用避免多继承的复杂
- Vue的mixin
- 用来分发vue组件中的可复用内容
- 本质是一个js对象
- 当组件使用mixins对象时,所有mixins对象的选项都被混入该组件本身的选项中
- vue支持局部混入和全局混入
- 局部混入
- 定义一个mixin对象,有options的data、methods属性,组件通过mixins属性调用mixin对象
- 全局混入
- Vue.mixin({created:()=>{}})
- 常用于插件的编写
- 局部混入
- 组件的选项会覆盖mixin的选项
- 如果相同的选项是生命周期钩子,会合并成数组,先执行mixin的钩子,在执行组件的钩子
- 使用场景
- 定义一个modal弹窗组件
说一下hash和history的区别
能说一下v-model的实现原理吗
如果不是绑定的value,v-model是如何实现绑定的呢
- 原生v-model:可以看成是value和input的语法糖
- 自定义:prop传入值,在子组件中通过emit事件对prop进行更新
说一下父子组件的生命周期调用顺序
项目问题
有用过canvas画图的一些库吗
看到你用到了若依框架,当菜单过多时有遇到过栈溢出的情况吗
什么场景用到websocket了呢
uniapp实现的小程序如何实现登录功能
- wx.login获取用户的code,判断用户是否授权读取用户信息
- 调用wx.getUserInfo读取用户数据
- 通过wx.request请求业务方服务器,后端把appid、小程序密钥、code一起发送到微信服务器
- 服务器返回了openid及会话密钥session_key
- 后端从数据库查找openid
- 没找到,用户没注册
- session_key是对用户数据进行加密签名的密钥
- 生成session返回给小程序,存入storage
- 下次请求时,从storage里读取,发送给服务端
- 服务端比对session记录,校验有效期
其它问题
- 之前做的App的直播是怎么实现的,App里的3d交互实现的具体内容是什么
- electron做的项目是包壳还是什么,里面包的是链接吗
- 有没有开发过需要和桌面硬件进行联动的项目
- 能接受从threejs转Babylonjs吗
HR面试
- 可以简述一下过往公司是做什么的,公司规模以及研发团队规模吗?
- 可以介绍一下你在每家公司的离职原因吗?
- 可以简述一下你在上份工作中负责的模块吗?
- 除了工作之外,你还有其它爱好吗?
- 你的朋友对你的评价是什么?
- 你是如何看待加班的?
- 你的职业规划是什么?
- 有没有朝管理方向发展的意向?
- 目前有没有收到其它公司的offer
- 上学期间成绩怎么样