您好,我是¥%¥¥,想应聘贵公司的前端开发工程师岗位,我硕士毕业于¥%¥¥信息与通信工程专业,目前就职于¥%¥¥,我熟悉的技术栈是js、vue、小程序开发、webpack、nodejs。在项目经验上,曾参与过多个大型前端项目的研发与架构设计。
比如,数字身份小程序,这个项目是通过获取人脸、身份证信息生成身份二维码,实现无实体身份证件的一码通行。我主要负责核心代码逻辑实现,需求分析、接入方对接、bug修复。所用的框架是原生小程序。在这个项目里,我通过合理的分包和分包预加载策略,有效的提升了页面加载速度。
动态表单项目是公司大前端架构组的创新类项目,为了提高表单类项目的开发效率,降低代码重复率、bug率。动态表单是根据管理端配置的不同的 Schema 结构,动态渲染出不同的表单项的一种表单,属于低代码平台的一类的项目。这个系统分为管理端和渲染端。管理端用来配置表单项及相应的交互,并产出 Schema 数据,渲染端根据 Schema 数据相应的渲染出不同的表单项并实现简单的交互。同时,项目使用koa+mogoDB技术提供后端接口,实现了Schema的存储和读取。我负责项目的调研、立项、可行性报告分析、demo演示生成、后续开发任务拆解、难点攻克。
数字身份开放平台是整个数字身份支撑系统的重要部分,平台主要功能是提供机构注册、文档预览、应用创建管理、能力数据申请等。这个平台中有大量的表单页面,因此是动态表单的最佳实践。我负责项目架构搭建、需求分析、任务拆解、bug修复、项目优化。该项目体量大、功能多、逻辑复杂,我对于出现的打包速度慢和加载速度慢等问题做了一系列的优化,整体提升了项目的渲染速度。
小程序是如何分包的:****
动态表单项目架构介绍:
1、客户端部分:
管理端:
采用了可拖拽式的所见即所得配置面板。这里共分为四个部分,组件面板,拖拽面板,组件属性面板和表单属性配置面板。
组件面板包含一些常用的表单控件:input、select、复选框等等,系统内置了elementUI的组件库。通过一个配置列表componentsConfig遍历就可以,这个列表有一份默认的配置,包含每个基础空间的type、options等信息。拖拽功能是通过vuedraggable组件来实现的。拖拽成功后触发(emit)on-field-add事件,并将拖拽的组件信息传入事件中。
拖拽面板是用来维护组件间关系的面板,提供拖拽、排序、删除、复制、预览等功能。在Widget-form组件中实现。on-field-add被触发后,接收到新增的组件信息,整理格式添加到dataList中。格式是type,options、key、model、rules。这时候就生成了jsonShema。在Widget-form中是需要根据生成的jsonSchema显示出组件,遍历dataList,判断type、models等属性,显示出组件。这里只显示没有真正的表单的交互。
组件属性面板是用来配置组件的字段名称、宽度、布局、校验规则等属性。在widget-config组件中实现。根据当前的表单控件显示不同的表单属性配置,比如输入框可以配置字段名、标签名、宽度、校验规则等等,下拉框可以配置下拉内容,是否从后端获取,api地址等。这里配置好后,会更新前面说的componentsConfig。
表单属性面板是用来维护标签对齐方式、组件size等全局属性。
渲染端:
GenenrateForm组件来实现的,和Widget-form类似的显示功能就不重复赘述了,嵌套功能实现:通过generateModel函数实现,data.list遍历,value值传入,校验规则注入到渲染的表单控件中。核心功能表单的交互:models值传入表单控件,同时监听每个表单控件value的变化,有变化时,同时更新传入的models,利用语法糖this.$emit(update:name, newName) :name.sync
提供getData函数,获取校验后的数据.
提供on-field-change函数,监听每个控件变化(控件的value值变化时,触发on-filed-change函数),实现表单间联动。
提供disable、display、hide函数,为每个属性置灰、隐藏
渲染端组件发布到npm上
2、服务端部分:
动态表单系统支持表单保存、查询、项目模块管理。使用koa-generate脚手架创建项目,引入mongoose插件,建立项目列表模型、表单数据模型。实现项目与表单数据的增删改查功能。
Koa引入了哪些中间件:koa-bodyparser 处理返回的数据 Koa logger 打印日志 Koa-router路由中间件
前端项目如何优化的:****
项目中遇到哪些难题:****
上传文件后会把表单其他内容清空:由于在文件组件中传入的value值是引用类型,把传入的props赋值给一个本地变量时,没有深拷贝,导致在改变本地变量时,父组件的值也发生了变化,父组件中有一些逻辑是,当value值修改时,会认为是首次进入表单页面,然后重置整个表单对象的数据,最后改为了深拷贝,就没有出现这个问题。
koa具体使用
Koa为什么没有回调函数
Koa跨域
Promise.Race源码 多个并发请求都 catch后还能then吗?
动态表单的json结构
数组转成树状结构
NextTick
New Image上报错误信息 为什么不用post,浏览器崩溃了
后端接口设置哪些请求头
前端请求设置哪些请求头