面试题

本文是一位前端开发者在面试中的自我介绍,详细讲述了在不同公司中使用的技术栈,包括Vue全家桶、Vant-UI、Element-UI等,并分享了匠心小镇等项目中的实践经验,如搜索功能、二级分类切换、收藏功能、瀑布流布局、购物车功能的实现等。还讨论了Vue的双向数据绑定、虚拟DOM、Promise原理、浏览器兼容性、性能优化、封装组件等方面的知识,以及Vue路由、Vuex、数据存储的区别等前端核心技术。
摘要由CSDN通过智能技术生成

自我介绍:
我是来面试公司web前段开发的
你好,我叫xxx,来自xxxx
在此期间就职过两家公司,中科yi倚天和光合公司 都有过1年多的工作经验,
在我河南郑州的光和公司我们做项目主要用到的技术栈 就是
html,css,javaScript原生,
,jQuery,bootstrap第三方ui框架来开发项目

在中科倚天公司 做项目主要用到 技术 Vue全家桶Vue-Cli、Vue、Vue-Router、Axios、Vuex,Vant-UI , Element-UI,Webpack 等。
做过,电商项目,移动端的项目 ,PC端等行业的项目。
负责过 匠心小镇app项目
一家民宿项目 觅食蜂app、项目,微信小程序入艺,,好物匠后台管理系统,
使用Git进行项目版本控制协助开发
以上是我的自我介绍 谢谢 你还有什么要问的吗?

匠心小镇 移动端

这个匠心小镇是一款家庭的生活用品
项目里面功能的实现?

搜索功能的实现

在搜索这块我是调了一个后台搜索的接口,通过v-model双向数据绑定
把页面中用户在input框中输入的值作为参数传递给接口,
可以实现字母搜索或着拼音搜索
然后接口会返回我通过关键字(或者拼音字母)作为参数而指定的一些数据返回给用户,
最后把这些数据进行排版渲染到页面上即可

二级分类切换

二级分类切换我就是使用第三方的vant-ui 的Sidebar侧边栏实现切换
,通过数据接口将对应的title渲染出来,绑定了点击事件通过id传参,每次点击的时候对应id下的内容显示

收藏的功能

首先要得到当前收藏数据id 请求收藏的接口 返回数据 让收藏图标变成已收藏
取消收藏,就在取消收藏的接口上拼接上当前收藏的数据 请求取消收藏的接口 返回数据 让收藏图标变成取消收藏
然后在我的页面 收藏里面渲染收藏的数据
收藏 直接请求收藏接口 返回数据,渲染页面
取消收藏 传当前数据的id 请求取消收藏的接口,判断data里面的data如果是1 就取消收藏

瀑布流布局的原理实现

瀑布流又称瀑布流式布局,视觉表现为参差不齐的多栏布局
后面的元素依次添加到其后,等宽不等
高,根据图片原比例缩放直至宽度达到我们的要求,依次按照规则放入指定位置。
当第一排排满足够多的等宽图片时之后
放置的图片会往下面排放。

到底加载 在外面加一个大盒子 不设置高 提示里面的元素撑起了的

实现 :我用的是css3的特性以及弹性盒子布局 实现的

购物车功能 的 加减 全选 总价 删除

这里功能都是调取后端接口来实现的
全选的实现:先双向数据绑定flag
通过 change点击事件
在return里面定义一个flag 为false 在定义一个空数组
通过all 这个方法 把arr的方法添加到str里面他为true方法他就全选了 取消呢就是把str这个数组为空
//全选
all(){
// alert(this.flag)
if(this.flag){
for(var i in this.arr){
this.aa.push(this.arr[i].id)
}
}else{
this.aa=[]
}
}
},

总价的实现:

后台会返回数据,用到了计算属性,具体定义一个变量为零,循环遍历被选中的数组,变量加等于商品数量乘以商品单价,最后返回变量就是总价
computed:{
// 总价
// count(){
// var sum =0 ;
// for(var i in this.arr){
// sum+=this.arr[i].number*this.arr[i].price
// }
// return sum
// }

删除的实现

首先后台会返回接口,然后调用后台返回的接口,通过delete属性进行删除;如果后台没有返回数据接口的话,就通过Splice实现的删除。
del(key){
this.arr.splice(key,1)
},

加减 的实现

首先在vuex里面定义一个状态count,
然后在异步操作里面调用加减的接口,在同步操作里面让count++,和count–,在执行count–的时候会判断count不能为0,或者为0的时候进行删除

add(key){
this.arr[key].number ++
},
jan(key){
if(this.arr[key].number>1){
this.arr[key].number –

        }else{
         alert("请不能少于1哦!")
        }
       
    },

封装 的实现 思路

我封装过弹出框 星星评分 taost轻提示
封装
点击botton 按钮 确定和取消 他弹出的内容那块的框 在封装的组件 写好多种样式 在子组件中用$emit()暴露(派发)事件,父组件中用绑定的事件去监听 然后挂载上传递的数据 在子组件 props 来接受这个数据

Get和post的区别 ?

get参数通过url传递,post放在 body中。

get请求在url中传递的参数是有长度限制的,而post没有。

get比post更不安全,因为参数直接暴露在url中,所以不能用来传递敏感信息。

get请求只能进行url编码,而post支持多种编码方式

get请求参数会被完整保留在浏览历史记录里,而post中的参数不会被保留。

GET和POST本质上就是TCP链接,并无差别。但是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。

GET产生一个TCP数据包;POST产生两个TCP数据包。

对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);

而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。

state 的存储和localstorage 存储的区别?

1.最重要的区别:vuex存储在内存,localstorage则以文件的方式存储在本地
2.应用场景:vuex用于组件之间的传值,localstorage则主要用于不同页面之间的传值。
3.永久性:当刷新页面时vuex存储的值会丢失,localstorage不会。

、使用vant来实现上拉刷新,下拉加载功能模块;

思路:这个地方我是使用了vant-ui里面的PullRefresh- 下拉刷新和Loading 加载,把接口里面的数据使用拓展运算符进行拼接,拼接的时候使用Loading 加载

Animate。Css的使用

animate里面包含了许多常用的css动画,我们要使用的它的话需要把它加到自己的页面中,接着就可以在需要动画的元素标签上直接调用里面的动画,然后调节动画次数延迟等达到自己需要的效果就可以了。
完成路由拦截,app的登录,注册以及验证码功能;
思路:路由拦截我们使用的是全局的路由拦截,如果点击到了需要登录之后才能进入的页面之后,如果数据里面没有存储到token,那么就会重定向到登录页面,以及登录获取token

公司项目开发流程

1第一呢我们是公司呢是开一个需求讨论会
然后大家对这个项目的这个功能 进行一个分析和
和确定一下项目的一个周期 大家认领一下任 务
2 产品经理 用一些蓝湖 的之类的软件进行原型图的设计
3 就是公司我们的 UI 设计师 把效果图设计出来
4 ul效果图设计好给我 和后台数据
给我 我拿到效果图 就要高度还原页面
把特效和业务逻辑给实现
5 后端 封装接口
6项目 就是提测模块然后如果有bug就要打回
给我然后进行修改 最后测试没有问题
7 部署
8 发布上线
前端简称 :FE
后端 :BE
QA :测试

进公司主要问的 兼容 优化 封装 你开发遇到的 问题怎么解决的

1vue浏览器兼容问题?

  • 浏览器默认的margin和padding不同。解决方案是加一个全局的*{margin:0;padding:0;}来统一。
    2优化 ?
  1. 加载方面

1、路由懒加载

加载的资源过多,页面会出现白屏的情况,不利于用户体验。被访问的时候才加载对应的组件,这样就更加高效了。
路由懒加载:

. 缓存方面
利用keep-alive结合导航守卫实现页面缓存
性能考虑避免多次重复渲染降低性能。keep-alive组件。
项目实践<

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值