网站首页 > 技术文章 正文
1.项目介绍
简单介绍
2.项目中遇到的问题
简单介绍
3.最近一个项目用到哪些技术
Vue , Vant ,对接微信小程序和支付宝小程序
4.移动端适配方案
①定高适配
②流式布局
③响应式布局
④Rem 适配
5. 数组的求最大值,排序,删除
冒泡排序, arr.sort(( a, b )=>{ b-a }), splice(0, 1, ***)
6. 清除浮动
(1) 父级 div 定义 height
(2) 结尾处加空 div 标签 clear:both
(3) 父级 div 定义 伪类 :after 和 zoom
(4) 父级 div 定义 overflow:hidden
(5) 父级 div 定义 overflow:auto
(6) 父级 div 定义 display:table
7. Es6的新特性
- 新增了块级作用域 (let,const)
- 提供了定义类的语法糖 (class)
- 新增了一种基本数据类型 (Symbol)
- 新增了变量的解构赋值
- 新增了箭头函数
- 数组新增了一些 API ,如 isArray / from / of 方法
- 对象和数组新增了扩展运算符
- 新增了模块化 (import/export)
- 新增了 Set 和 Map 数据结构
- 原生提供 Promise构造函数
8. 说说你了解的 promise
Promise 是一个构造函数,用来解决异步操作的
promise 有三种状态 : fulfilled, rejected, pending.
Promise 的优点 :
一旦状态改变,就不会再变,任何时候都可以得到这个结果
可以将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数
Promise 的缺点 :
无法取消 Promise
当处于 pending 状态时,无法得知目前进展到哪一个阶段
Promise 的构造函数是同步执行的; then 中的方法是异步执行的。
Promise 是微任务, setTimeout 是宏任务,同一个事件循环中, promise.then 总是先于 setTimeout 执行。
9.Css3做轮播图原理
我们会在同样的位置准备好多个大小相同的图片,并且横放在 div 容器内,然后在 div 容器之上设置一个展示容器,其中展示容器的大小和图片大小相同,最后给图片容器添加自定义动画,并且在动画不同阶段设置递增的偏移值。
首先必须保证展示容器大小与图片大小相同,再为图片添加 float 效果,然后确定插入的图片数量并且为每个图片设置动画阶段,其中每个阶段都是通过使用 keyframes 设置递增的 margin-left值达到切换的效果。
10.let, const和var
- let 和 const 定义的变量不会出现变量提升,而 var 定义的变量会提升。
- let 和 const 是 JS 中的块级作用域
- let 和 const 不允许重复声明 ( 会抛出错误 )
- let 和 const 定义的变量在定义语句之前,如果使用会抛出错误 ( 形成了暂时性死区 ) ,而 var不会。
- const 声明一个只读的常量。一旦声明,常量的值就不能改变 ( 如果声明是一个对象,那么不能改变的是对象的引用地址 )
const 只是一个指针,指向一个内存空间,内存空间的内容可以改变,但是 const 指向一个新的空间就会会抛出错误
11.如何做个三角形
设置 width: 0; height: 0;border-left , border-right 为 50px solid transpa'rent ; border-bottom: 50px solid red; 即可
12.Vue的常用钩子函数
- beforeCreate
这个时候, this 变量还不能使用,在 data 下的数据,和 methods 下的方法, watcher 中的事件都不能获得到;
- created
这个时候可以操作 vue 实例中的数据和各种方法,但是还不能对 "dom" 节点进行操作;
- mounted
这个时候挂载完毕,这时 dom 节点被渲染到文档内,一些需要 dom 的操作在此时才能正常进行。
注意:
mounted
在整个实例的生命周期中只执行一次。
- computed
是把所有需要依赖其他值计算的值写成对象的 key 值。
- watch
把监听的值写成对象的 key 值
13.如何隐藏一个元素,会不会引起重绘和回流
①display: none;
②position:absolute;left: -99999px;
③margin-left: -99999px;height: 0;
④transform: scale(0);height: 0;
⑤opacity: 0;
⑥visibility: hidden;
⑦position: relative;z-index: -999;
回流必将引起重绘,而重绘不一定会引起回流。比如:只有颜色改变的时候就只会发生重绘而不会引起回流
当页面布局和几何属性改变时就需要回流
比如:添加或者删除可见的
DOM
元素,元素位置改变,元素尺寸改变——边距、填充、边框、宽度和高度,内容改变
14.Vue加载完成在哪个阶段,在created可以Windows查询吗
完成是在 mounted,created 可以 windows 查询
15.H5和Css3的新特性
H5 新特性:
1. 拖拽释放 (Drag and drop) API
2. 语义化更好的内容标签( header,nav,footer,aside,article,section )
3. 音频、视频 API(audio,video)
4. 画布 (Canvas) API
5. 地理 (Geolocation) API
6. 本地离线存储 localStorage 长期存储数据,浏览器关闭后数据不丢失;
7. sessionStorage 的数据在浏览器关闭后自动删除
8. 表单控件, calendar 、 date 、 time 、 email 、 url 、 search
9. 新的技术 webworker, websocket, Geolocation
10. 本地离线存储 localStorage 长期存储数据,浏览器关闭后数据不丢失; sessionStorage 的数据在浏览器关闭后自动删除。
Css3 的新特性 :
- 颜色:新增 RGBA , HSLA 模式
- 文字阴影( text-shadow 、)
- 边框: 圆角( border-radius )边框阴影: box-shadow
4. 盒子模型: box-sizing
5. 背景: background-size 设置背景图片的尺寸 background-origin 设置背景图片的原点
background-clip 设置背景图片的裁切区域,以”,”分隔可以设置多背景,用于自适应布局
- 渐变: linear-gradient 、 radial-gradient
7. 过渡: transition ,可实现动画
8. 自定义动画
9. 在 CSS3 中唯一引入的伪元素是 :: selection.
10. 媒体查询,多栏布局
11. border-image
12. 2D/3D转换
16.介绍下盒模型,如何转换
所有 HTML 元素可以看作盒子,在 CSS 中, "box model" 这一术语是用来设计和布局时使用。
CSS 盒模型本质上是一个盒子,封装周围的 HTML 元素,它包括:边距,边框,填充,和实际内容。盒模型允许我们在其它元素和周围元素边框之间的空间放置元素
Margin( 外边距 ) - 清除边框外的区域,外边距是透明的。
Border( 边框 ) - 围绕在内边距和内容外的边框。
Padding( 内边距 ) - 清除内容周围的区域,内边距是透明的。
Content( 内容 ) - 盒子的内容,显示文本和图像。 、
如何转换:
box-sizing 值为 content-box 时:即 标准盒模型
box-sizing 值为 border-box 时:即 怪异盒模型
17.js数据类型,基本类型和引用类型区别
基本数据类型: Number , String , Bollean , Null , Undefined, Symbol(Es6 新增 )
引用数据类型: Array , Object , Function
区别:
基本数据类型指的是简单的数据段,引用数据类型指的是有多个值构成的对象。
基本数据类型是按值访问的,因为可以直接操作保存在变量中的实际值。引用数据类型是保存在堆内存中的对象。复制变量和参数传递不同。
18.如何解决用户登录权限判断
在每一个路由的 meta 属性里,将能访问该路由的角色添加到 roles 里。用户每次登陆后,将用户的角色返回。然后在访问页面时,把路由的 meta 属性和用户的角色进行对比,如果用户的角色在路由的 roles 里,那就是能访问,如果不在就拒绝访问。
19.如何解决跨域问题
1. 比如 jsonp; 在页面中添加 script 标签 , 通过 src 属性请求不同域的 js 代码 , 只能支持 get 请求 .
2. window.postMessage
3. 跨域资源共享( CORS )
4. nginx 正向代理代理客户端,反向代理代理服务器;反向代理,其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器 IP 地址。
15. Jsonp工作原理
利用 <script> 标签没有跨域限制的“漏洞”(历史遗迹啊)来达到与第三方通讯的目的。当需要通讯时,本站脚本创建一个 <script> 元素,地址指向第三方的 API 网址,形如:
<script src="http://www.example.net/api?param1=1?m2=2"></script>
并提供一个回调函数来接收数据(函数名可约定,或通过地址参数传递)。
第三方产生的响应为 json 数据的包装(故称之为 jsonp ,即 json padding ),形如:
callback({"name":"hax","gender":"Male"})
这样浏览器会调用 callback 函数,并传递解析后 json 对象作为参数。本站脚本可在 callback
函数里处理所传入的数据。
20.flex布局下如何换行
Flex-wrap: wrap;
21. 数组的常用方法有哪些, foreach和map有什么区别
修改原数组的 API 有 :
splice/reverse/fill/copyWithin/sort/push/pop/unshift/shift
不修改原数组的 API 有 :
slice/map/forEach/every/filter/reduce/entries/find
1 、 forEach() 返回值是 undefined ,不可以链式调用。
2 、 map() 返回一个新数组,原数组不会改变。
3 、没有办法终止或者跳出 forEach() 循环,除非抛出异常,所以想执行一个数组是否满足什么条件,返回布尔值,可以用一般的 for 循环实现,或者用 Array.every() 或者 Array.some();
4 、 $.each() 方法规定为每个匹配元素规定运行的函数,可以返回 false 可用于及早停止循环。
22. 使用过 slot 插槽吗,介绍下
slot 插槽可以在组件的内容预留一个位置 . 类似于 placeholder.
在需要的使用 , 把你需要的任何内容填充进去 .
单个 Slot
在子组件内使用特殊的 <slot> 元素就可以为这个子组件添加一个 slot ( 插槽 ), 在父组件模板里 ,插入在子组件标签内的所有内容将替代子组件的 <slot> 标签及它的内容
.
23.Vuex的理解
Vuex 简单说就是全局状态管理的 , 项目中常常需要有几个参数所有组件都要用 , 或者同级组件之间的数据传递和通信。此时使用 vuex 非常方便开发。
核心属性为: state , getter , mutation , action , module
state :存储数据,存储状态;在根实例中注册了 store 后,用 this.$store.state 来访问;对应vue 里面的 data ;存放数据方式为响应式, vue 组件从 store 中读取数据,如数据发生变化,组件也会对应的更新。
getters :可以认为是 store 的计算属性,相当于 vue 中的 computed ,依赖于 state 里面的值。它的返回值会根据它的依赖被缓存起来,且只有当它的依赖值发生了改变才会被重新计算。
mutations :用于修改状态, store 里面的数仅能通过 mutations 里面的方法改变 , 但是必须是同步的。更改 vuex 的 store 中的状态的唯一方法是提交 mutation ,也就是 $store.commit 。
actions :包含任意异步操作,用它处理完后再触发 mutations 来改变状态。
module :将 store 分割成模块,每个模块都具有 state 、 mutation 、 action 、 getter 、甚至是嵌套子模块。
24.v-if和v-show的区别
手段: v-if 是动态的向 DOM 树内添加或者删除 DOM 元素; v-show 是通过设置 DOM 元素的display 样式属性控制显隐
编译过程: v-if 切换有一个局部编译 / 卸载的过程,切换过程中合适地销毁和重建内部的事件监听和子组件; v-show 只是简单的基于 css 切换
编译条件: v-if 是惰性的,如果初始条件为假,则什么也不做;只有在条件第一次变为真时才开始局部编译(编译被缓存?编译被缓存后,然后再切换的时候进行局部卸载 ); v-show 是在任何条件下(首次条件是否为真)都被编译,然后被缓存,而且 DOM 元素保留
性能消耗: v-if 有更高的切换消耗; v-show 有更高的初始渲染消耗
使用场景: v-if 适合运营条件不大可能改变; v-show 适合频繁切换
相同点 v-show 都可以动态控制着 dom 元素的显示隐藏
不同点: v-if 的显示隐藏是将 DOM 元素整个添加或删除, v-show 的显示隐藏是为 DOM 元素添加 css 的样式 display ,设置 none 或者是 block , DOM 元素是还存在的
在渲染多个元素的时候,可以把一个 元素作为包装元素,并使用 v-if 进行条件判断,最终的渲染不会包含这个元素, v-show 是不支持 语法
25. 项目开发中 git的使用,如何合并
一. git clone 项目到本地
在多人开发中,一般的项目有 master 和其他分支,那么 clone 操作就需要你指定对应的分支把项目工程 clone 到本地,
1. 首先新建一个空文件夹,把文件夹进行 git 初始化操作 , 在文件夹的根目录下,右键选择 git bash here ,在弹出的窗体中输入命令: git init
这样就把该文件夹 git 初始化了
2. 接下来就是 clone 操作了,继续输入命令: git clone xx( 此处为你的项目的 git 地址),一般这个命令 clone 下来的是 master 分支的项目,你也可以 clone 指定分支的工程,命令: git clone -b 分支名 git 地址
二. 使用 git 把本地项目提交到 github
1. 如果该工程没有 git 初始化,那么在工程根目录下使用 git init 进行初始化,如果已经初始化,则省略这步
2. 将项目的文件添加到仓库中使用 git add ,( git add . )表示将所有文件都添加,( git add xx( 指定文件 ) )表示将指定文件添加进去
3. 将 add 的文件 commit 到仓库,命令: git commit -m " 你想写的注释 "
4. 将本地的仓库关联到 github 上,命令如下: git remote add origin xxx (此处为你的 git 地址)
5. 在进行 push 之前,先进行 pull 操作,命令如下: git pull origin xxx( 此处为你的分支名, master 或者其他分支名 )
6. 上传代码到 github 远程仓库,命令如下: git push -u origin xxx (此处为你的分支名),在这个步骤中可能会有弹窗要你输入你的用户名和密码,按照指示操作即可
冲突是如何解决的
情况 1 : 无冲突
先拉取远端代码,更新本地代码。然后提交自己的更新代码即可。
情况 2 :有冲突
拉去远端代码,存在冲突,会报错。此时我们需要将本地代码暂存起来 stash; 更新本地代码,将本地代码版本更新和远端的代码一致,将暂存的代码合并到更新后的代码后,有冲突的要手动解决冲突,然后提交解决冲突后的代码。
有想了解更多的朋友可以去https://www.jianshu.com/p/86bb74768d12 看一下。
猜你喜欢
- 2024-11-15 CSS3+JS实现静态圆形进度条(css 圆形进度条)
- 2024-11-15 前端必读榜——如何在React中用SpreadJS导入/导出Excel文件
- 2024-11-15 Svelte教程翻译(六、生命周期)(servelet生命周期阶段)
- 2024-11-15 uniapp(Vue) 实现可粘贴的 个性化验证码 输入框
- 2024-11-15 国产开源,GoLang也可以高效处理Excel的利器了
- 2024-11-15 css精髓:这些布局你都学废了吗?(css布局技术)
- 2024-11-15 Java 中的 AI:使用 Spring Boot 和 LangChain 构建 ChatGPT 克隆
- 2024-11-15 仅用18行JavaScript实现一个倒数计时器
- 2024-11-15 Web上的图片技巧「前端篇」(web网页图片)
- 2024-11-15 55个JS代码让你轻松当大神(完整的js代码)
- 标签列表
-
- content-disposition (47)
- nth-child (56)
- math.pow (44)
- 原型和原型链 (63)
- canvas mdn (36)
- css @media (49)
- promise mdn (39)
- readasdataurl (52)
- if-modified-since (49)
- css ::after (50)
- border-image-slice (40)
- flex mdn (37)
- .join (41)
- function.apply (60)
- input type number (64)
- weakmap (62)
- js arguments (45)
- js delete方法 (61)
- blob type (44)
- math.max.apply (51)
- js (44)
- firefox 3 (47)
- cssbox-sizing (52)
- js删除 (49)
- js for continue (56)
- 最新留言
-