文章目录
-
- 1. css的居中方式
- 2. px,em,rem,%
- 3. display的值和作用
- 4. 路由跳转的方式
- 5.vue生命周期的理解
- 6.vue数据双向绑定的原理,用了什么设计模式(web高级)
- 7.数组去重
- 8.统计字符串中出现最多的字符
- 9.js垃圾回收机制
- 10. 原型、原型链
- 11.作用域链
- 14. 页面渲染过程
- 15. 闭包
- 16. http协议
- 17. http中的方法,除了get方法、post方法
- 18. 数据结构(排序算法,冒泡以外的)
- 19. vue和react的区别,用法区别
- 20. 网页上哪里可以看到请求的所有信息
- 21. 继承方法
- 22. 团队合作的经验
- 23. 通宵经历(不是玩的)
- 24. 课外项目(自己瞎做的那种)
- 25. 为什么学前端?
- 26. 有没有参赛或者除了学校课程内容外的经验?应该是想知道有没有合作经验
- 28. 辗转相除法
- 29. 数组转字符串
- 30. 二级下拉菜单
- 31. bind() apply()
- 32. const用法
- 33. Utf-8编码汉字占多少个字节
- 34. Vue的钩子函数
- 35. http和https的区别
- 36. 前端开发工具webstorm
- 37. Vue基于什么语言
- 38. Vue的第三方组件库ivew
- 39. HTML5的新特性
- 40. ajax
- 41. js对数组的操作,包括向数组中插入删除数据
- 42. 组件之间的传参(例如子组件和父组件之间的传参)
- 43. css3的新特性
- 44.localstore和sessionstore的区别
- 45. 盒子模型(怪异模型)
- 46. 谈谈fixed ,relative, absolute
- 47. js的选择器
- 48. 两种定时器,setinterval和settimeout。因为settimeout是只执行一次的,如果要执行多次怎么做。
- 49. bookstrap的响应式是怎么实现的。
- 50. js的数据类型
- 51. JS内存回收机制
- 52. promise是什么?能解决什么问题?
- 53. float和absolute有什么区别?
- 54. cookie和session有什么联系?
- 55. vue如何实现双向据绑定?
- 56. vue父组件子组件通信?
- 57. 图片预加载和懒加载?
- 58. MVVM和MVC区别?
- 59. vue删除数据监测不到?
- 60. 编程:连接两个数组并返回?
- 61. 冒泡排序?
- 62. 创建新数组,向数组插入数据
- 63. 父组件子组件传参
- 64. es6新特性
- 65. js对数组有哪些操作方法
- 66. 什么是ajax,可以用来做什么
- 67. 讲下你做轮播图的思路,无缝轮播
- 68. http协议
- 69. css3新特性
- 70. css选择器的权重
- 71. js数据类型
- 72. 减少页面加载时间的方法
- 73. 怎么理解模块化开发
- 74. 什么是闭包,有什么作用?
- 75. transition transform translate 之间的区别transform的属性有哪些?
- 76. css3中的选择器
- 77. html5新特性 css3
- 78. 定时器 settimeout和setinterval的区别,如果用settimeout实现每隔一定的时间就执行一次,怎么实现
- 79. bookstrap栅格系统,你怎么理解栅格系统
- 80. localstorage和sessionstorage的区别
- 81. 路由跳转的方式
- 82. 页面之间是怎么传参数的?
- 83. 分析代码中最终生效的CSS样式(CSS样式权重计算)
- 84. 手机号的正则表达式(以1开头的11位数字)
- 85. 用CSS实现一个背景色为红色,半径为200px的圆,并设置不停的上下移动动画
- 86. 列举两种清除浮动的方法(代码实现或者描述思路)
- 87. 代码实现3栏效果,左右两栏固定宽度,中间栏随着浏览器宽度自适应变化
- 88. 结构的html代码,写原生js实现点击某个li就弹出对应的索引值
- 89. 对数组进行随机排序, 要求数组中的每个元素不能停留在原来的位置
- 90. 代码实现parse方法,将有效的JSON字符串转换成JavaScript对象
- 93. cookie和localStorage的区别,如何获得他们?
- 94. 是否可以在html中写 标签?是否可以用?如何让它正常显示?怎么创建自定义标签?
- 97. es6的有哪些扩展?新增的数组方法有哪些?用什么方法连接两个数组?函数扩展中的箭头函数中的this所指向的是什么?一般函数的this指向的又是什么?
- 98. 用什么方法判断是否是数组?又用什么方法判断是否是对象?
- 99. 引用样式的方式有哪几种?他们的优先级排序怎么样?
- 101. 对H5新增的语义化标签的理解?
- 102. 最近有没有在看某一本书?或者是有没有学习某一个课程?有没有什么学习的计划?
- 103. 前端优化可以做什么?
- 104. 什么情况会造成跨域,以及怎么解决跨域?
- 105. 深拷贝和浅拷贝
1. css的居中方式
margin:0 auto;
/*(适用于行内元素)*/
text-align:center;
position: absolute;
top: 0;
left: 0;
bottom: 0;
right: 0;
transfrom: translate(-50%,-50%);
display: flex;
2. px,em,rem,%
一、px是固定的像素,一旦设置了就无法因为适应页面大小而改变。
二、em和rem相对于px更具有灵活性,他们是相对长度单位,意思是长度不是定死了的,更适用于响应式布局。
三、em是相对于其父元素来设置字体大小的,一般都是以的“font-size”为基准。这样就会存在一个问题,进行任何元素设置,都有可能需要知道他父元素的大小。而Rem是相对于根元素,这样就意味着,我们只需要在根元素确定一个参考值。
3. display的值和作用
常用的有none、inline、block、inline-block。分别的意思是:
-
none: 元素不会显示,而且改元素现实的空间也不会保留。但有另外一个 visibility: hidden, 是保留元素的空间的。
-
inline:
display的默认属性。将元素显示为内联元素,元素前后没有换行符。我们知道内联元素是无法设置宽高的,所以一旦将元素的display 属性设为 inline,设置属性height和width是没有用的。此时影响它的高度一般是内部元素的高度(font-size)和padding。 -
block: 将元素将显示为块级元素,元素前后会带有换行符。设置为block后,元素可以设置width和height了。元素独占一行。
-
inline-block:行内块元素。这个属性值融合了inline 和 block 的特性,即是它既是内联元素,又可以设置width和height。
4. 路由跳转的方式
// 1.router-link
1. 不带参数
<router-link :to="{name:'home'}">
<router-link :to="{path:'/home'}"> //name,path都行, 建议用name
// 注意:router-link中链接如果是'/'开始就是从根路由开始,如果开始不带'/',则从当前路由开始。
2.带参数
<router-link :to="{name:'home', params: {id:1}}">
// params传参数 (类似post)
// 路由配置 path: "/home/:id" 或者 path: "/home:id"
// 不配置path ,第一次可请求,刷新页面id会消失
// 配置path,刷新页面id会保留
// html 取参 $route.params.id
// script 取参 this.$route.params.id
<router-link :to="{name:'home', query: {id:1}}">
// query传参数 (类似get,url后面会显示参数)
// 路由可不配置
// html 取参 $route.query.id
// script 取参 this.$route.query.id
2. this.$router.push() (函数里面调用)
1. 不带参数
this.$router.push('/home')
this.$router.push({
name:'home'})
this.$router.push({
path:'/home'})
2. query传参
this.$router.push({
name:'home',query: {
id:'1'}})
this.$router.push({
path:'/home',query: {
id:'1'}})
// html 取参 $route.query.id
// script 取参 this.$route.query.id
3. params传参
this.$router.push({
name:'home',params: {
id:'1'}}) // 只能用 name
// 路由配置 path: "/home/:id" 或者 path: "/home:id" ,
// 不配置path ,第一次可请求,刷新页面id会消失
// 配置path,刷新页面id会保留
// html 取参 $route.params.id
// script 取参 this.$route.params.id
4. query和params区别
query类似 get, 跳转之后页面 url后面会拼接参数,类似?id=1, 非重要性的可以这样传, 密码之类还是用params刷新页面id还在
params类似 post, 跳转之后页面 url后面不会拼接参数 , 但是刷新页面id 会消失
3. this.$router.replace() (用法同上,push)
4. this.$router.go(n) ()
this.$router.go(n)
向前或者向后跳转n个页面,n可为正整数或负整数
ps : 区别
this.$router.push
跳转到指定url路径,并想history栈中添加一个记录,点击后退会返回到上一个页面
this.$router.replace
跳转到指定url路径,但是history栈中不会有记录,点击返回会跳转到上上个页面 (就是直接替换了当前页面)
this.$router.go(n)
向前或者向后跳转n个页面,n可为正整数或负整数
5.vue生命周期的理解
-
beforeCreate:在实例初始化之后,**数据观测(data observer) ** 和 event/watcher事件配置 之前被调用,注意是 之前,此时data、watcher、methods统统没有。
这个时候的vue实例还什么都没有,但是$route对象是存在的,可以根据路由信息进行重定向之类的操作。 -
created:在实例已经创建完成之后被调用。在这一步,实例已完成以下配置:数据观测(data observer) ,属性和方法的运算, watch/event 事件回调。然而,挂载阶段还没开始, e l 属 性 目 前 不 可 见 。 此 时 t h i s . el属性目前不可见。 此时 this. el属性目前不可见。此时this.data 可以访问,watcher、events、methods也出现了,若根据后台接口动态改变data和methods的场景下,可以使用。
-
beforeMount:在挂载开始之前被调用,相关的 render 函数 首次被调用。但是render正在执行中,此时DOM还是无法操作的。我打印了此时的vue实例对象,相比于created生命周期,此时只是多了一个$el的属性,然而其值为undefined,
页面渲染时所需要的数据,应尽量在这之前完成赋值。 -
mounted:在挂载之后被调用。在这一步 创建vm.$el并替换el,并挂载到实例上。
此时元素已经渲染完成了,依赖于DOM的代码就放在这里吧~比如监听DOM事件。 -
beforeUpdate: v m . d a t a 更 新 之 后 , 虚 拟 D O M 重 新 渲 染 和 打 补 丁 之 前 被 调 用 。 你 可 以 在 这 个 钩 子 中 进 一 步 地 修 改 vm.data更新之后,虚拟DOM重新渲染 和打补丁之前被调用。 你可以在这个钩子中进一步地修改 vm.data更新之后,虚拟DOM重新渲染和打补丁之前被调用。你可以在这个钩子中进一步地修改vm.data,这不会触发附加的重渲染过程。
-
updated:虚拟DOM重新渲染 和打补丁之后被调用。
当这个钩子被调用时,组件DOM的data已经更新,所以你现在可以执行依赖于DOM的操作。但是不要在此时修改data,否则会继续触发beforeUpdate、updated这两个生命周期,进入死循环! -
beforeDestroy:实例被销毁之前调用。在这一步,实例仍然完全可用。
实例要被销毁了,赶在被销毁之前搞点事情吧哈哈~
- destroyed:Vue实例销毁后调用。此时,Vue实例指示的所有东西已经解绑定,所有的事件监听器都已经被移除,所有的子实例也已经被销毁。
这时候能做的事情已经不多了,只能加点儿提示toast之类的东西吧。
6.vue数据双向绑定的原理,用了什么设计模式(web高级)
原理:
利用访问器属性(如下)实现数据属性变化到view变化的映射,set用于在数据发生变化时加入相应的数据带view的处理方法
Object.defineProperty(obj,