面试官:说说你对git reset 和 git revert 的理解?区别?
面试官:说说你对git reset 和 git revert 的理解?区别?
一、是什么git resetreset用于回退版本,可以遗弃不再使用的提交
执行遗弃时,需要根据影响的范围而指定不同的参数,可以指定是否复原索引或工作树内容
git revert在当前提交后面,新增一次提交,抵消掉上一次提交导致的所有变化,不会改变过去的历史,主要是用于安全地取消过去发布的提交
二、如何用git reset当没有指定ID的时候,默认使用HEAD,如果指定ID,那么就是基于指向ID去变动暂存区或工作区的内容
12345// 没有指定ID, 暂存区的内容会被当前ID版本号的内容覆盖,工作区不变git reset// 指定ID,暂存区的内容会被指定ID版本号的内容覆盖,工作区不变git reset <ID>
日志ID可以通过查询,可以git log进行查询,如下:
1234567891011commit a7700083ace1204ccdff9f71631fb34c9913f7c5 (HEAD -> master)Author: linguanghui <lin ...
面试官:说说你对git stash 的理解?应用场景?
面试官:说说你对git stash 的理解?应用场景?
一、是什么stash,译为存放,在 git 中,可以理解为保存当前工作进度,会把暂存区和工作区的改动进行保存,这些修改会保存在一个栈上
后续你可以在任何时候任何分支重新将某次的修改推出来,重新应用这些更改的代码
默认情况下,git stash会缓存下列状态的文件:
添加到暂存区的修改(staged changes)
Git跟踪的但并未添加到暂存区的修改(unstaged changes)
但以下状态的文件不会缓存:
在工作目录中新的文件(untracked files)
被忽略的文件(ignored files)
如果想要上述的文件都被缓存,可以使用-u或者--include-untracked可以工作目录新的文件,使用-a或者--all命令可以当前目录下的所有修改
二、如何使用关于git stash常见的命令如下:
git stash
git stash save
git stash list
git stash pop
git stash apply
git stash show
git stash d ...
60个JS实用的代码小技巧
JavaScript 有很多很酷的特性,大多数初学者和中级开发人员都不知道。今天分享一些,我经常在项目中使用一些技巧。
1. JS 为什么单线程一个简单的原因就是,js在设计之初只是进行一些简单的表单校验,这完全不需要多线程,单线程完全可以胜任这项工作。即便后来前端发展迅速,承载的能力越来越多,也没有发展到非多线程不可的程度。
而且还有一个主要的原因,设想一下,如果js是多线程的,在运行时多个线程同时对DOM元素进行操作,那具体以哪个线程为主就是个问题了,线程的调度问题是一个比较复杂的问题。
HTML5新的标准中允许使用new Worker的方式来开启一个新的线程,去运行一段单独的js文件脚本,但是在这个新线程中严格的要求了可以使用的功能,比如说他只能使用ECMAScript, 不能访问DOM和BOM。这也就限制死了多个线程同时操作DOM元素的可能。
2.使用 css 写出一个三角形角标元素宽高设置为0,通过border属性来设置,让其它三个方向的border颜色为透明或者和背景色保持一致,剩余一条border的颜色设置为需要的颜色。
1234567div { widt ...
ES6来简化代码,你都用过哪些
块级作用域为什么需要块级作用域?
ES5 只有全局作用域和函数作用域,没有块级作用域,这导致很多场景不合理。
第一种场景,内层变量可能会覆盖外层变量。
123456789var tmp = new Date();function fn() { console.log(tmp); if (false) { var tmp = "hello world"; }}fn(); // undefined
以上代码的原意是, if 代码块的外部使用外层的 tmp 变量,内部使用内层的 tmp 变量。但是,函数 fn 执行后,输出结果为 undefined ,原因在于变量提升导致内层的 tmp 变量覆盖了外层的 tmp 变量。
第二种场景,用来计数的循环变量泄露为全局变量。
123456var s = "hello";for (var i = O; i < s.length; i++) { console.log(s[i]);}console.log(i); // 5
...
ES6面试理论知识点汇总
一、问:ES6 是什么,为什么要学习它,不学习 ES6 会怎么样?答:ES6 是新一代的 JS 语言标准,对分 JS 语言核心内容做了升级优化,规范了 JS 使用标准,新增了 JS 原生方法,使得 JS 使用更加规范,更加优雅,更适合大型应用的开发。学习 ES6 是成为专业前端正规军的必经之路。不学习 ES6 也可以写代码打鬼子,但是最多只能当个游击队长。
二、问:ES5、ES6 和 ES2015 有什么区别?答:ES2015 特指在 2015 年发布的新一代 JS 语言标准,ES6 泛指下一代 JS 语言标准,包含 ES2015、ES2016、ES2017、ES2018 等。现阶段在绝大部分场景下,ES2015 默认等同 ES6。ES5 泛指上一代语言标准。ES2015 可以理解为 ES5 和 ES6 的时间分界线。
三、问:babel 是什么,有什么作用?答:babel 是一个 ES6 转码器,可以将 ES6 代码转为 ES5 代码,以便兼容那些还没支持 ES6 的平台。
四、问:let 有什么用,有了 var 为什么还要用 let?答:在 ES6 之前,声明变量只能用 var,v ...
NodeJS框架Express与Koa对比
NodeJS框架Express与Koa对比框架介绍express框架是一个基于 Node.js 平台的极简、灵活的 web 应用开发框架,主要基于 Connect 中间件,并且自身封装了路由、视图处理等功能。
koa是 Express 原班人马基于 ES6 新特性重新开发的框架,主要基于 co 中间件,框架自身不包含任何中间件,很多功能需要借助第三方中间件解决,但是由于其基于 ES6 generator 特性的异步流程控制,解决了 “callback hell” 和麻烦的错误处理问题。
相同点两个框架都对http进行了封装。相关的api都差不多,同一批人所写。
不同点express内置了许多中间件可供使用,而koa没有。
express包含路由,视图渲染等特性,而koa只有http模块。
express的中间件模型为线型,而koa的中间件模型为U型,也可称为洋葱模型构造中间件。
express通过回调实现异步函数,在多个回调、多个中间件中写起来容易逻辑混乱。
一、起步:创建一个简单的服务器原生node
123456789101112131415161718var http = requ ...
一份前端够用的 Linux 命令
一份前端够用的 Linux 命令我在建站的过程中,必不可少会用到 Linux 命令,所以此篇写一份基本够用的 Linux 命令,会涵盖博客搭建系列文章用到的各种命令,方便查询和学习使用。
0. Owner、Group、Others、RootLinux 系统是一种多用户系统,它将文件访问者身份分为三种:
文件所有者(Owner)当创建一个用户的时候,Linux 会为该用户创建一个主目录,路径为 /home/<username>,我们可以使用 cd ~,快捷进入主目录。如果你想放一个私密文件,就可以放在自己的主目录里,然后设置只能自己查看。
群组(Group)每个用户都有一个用户组,方便多人操作的时候,为一群人分配权限。当创建用户的时候,会自动创建一个与它同名的用户组。
如果一个用户同时属于多个组,用户需要在用户组之间切换,才能具有其他用户组的权限。
其他人(Others)既不是文件所有者又不是文件所属群组成员的用户,就是其他人。
超级用户(Root)Root 用户是一类特殊的用户,该用户可以访问所有文件。
1. adduser 添加用户 和 passwd 更改密码12345# ...
面试官:== 和 ===区别,分别在什么情况使用
面试官:== 和 ===区别,分别在什么情况使用
一、等于操作符等于操作符用两个等于号( == )表示,如果操作数相等,则会返回 true
前面文章,我们提到在JavaScript中存在隐式转换。等于操作符(==)在比较中会先进行类型转换,再确定操作数是否相等
遵循以下规则:
如果任一操作数是布尔值,则将其转换为数值再比较是否相等
1let result1 = (true == 1); // true
如果一个操作数是字符串,另一个操作数是数值,则尝试将字符串转换为数值,再比较是否相等
1let result1 = ("55" == 55); // true
如果一个操作数是对象,另一个操作数不是,则调用对象的 valueOf() 方法取得其原始值,再根据前面的规则进行比较
12let obj = {valueOf:function(){return 1}}let result1 = (obj == 1); // true
nul ...
面试官:说说你对BOM的理解,常见的BOM对象你了解哪些?
面试官:说说你对BOM的理解,常见的BOM对象你了解哪些?
一、是什么BOM (Browser Object Model),浏览器对象模型,提供了独立于内容与浏览器窗口进行交互的对象
其作用就是跟浏览器做一些交互效果,比如如何进行页面的后退,前进,刷新,浏览器的窗口发生变化,滚动条的滚动,以及获取客户的一些信息如:浏览器品牌版本,屏幕分辨率
浏览器的全部内容可以看成DOM,整个浏览器可以看成BOM。区别如下:
二、windowBom的核心对象是window,它表示浏览器的一个实例
在浏览器中,window对象有双重角色,即是浏览器窗口的一个接口,又是全局对象
因此所有在全局作用域中声明的变量、函数都会变成window对象的属性和方法
12345678var name = 'js每日一题';function lookName(){ alert(this.name);}console.log(window.name); //js每日一题lookName(); //js每日一题window.lookName(); ...
面试官:DOM常见的操作有哪些?
面试官:DOM常见的操作有哪些?
一、DOM文档对象模型 (DOM) 是 HTML 和 XML 文档的编程接口
它提供了对文档的结构化的表述,并定义了一种方式可以使从程序中对该结构进行访问,从而改变文档的结构,样式和内容
任何 HTML 或XML文档都可以用 DOM 表示为一个由节点构成的层级结构
节点分很多类型,每种类型对应着文档中不同的信息和(或)标记,也都有自己不同的特性、数据和方法,而且与其他类型有某种关系,如下所示:
12345678<html> <head> <title>Page</title> </head> <body> <p>Hello World!</p > </body></html>
DOM像原子包含着亚原子微粒那样,也有很多类型的DOM节点包含着其他类型的节点。接下来我们先看看其中的三种:
12345<div> <p title="title" ...