20180802总结
1. 数据的排序算法
参考https://www.cnblogs.com/real-me/p/7103375.html
2. 遍历对象的键:
Object.keys(obj).forEach(
function
(key,i,v){console.log(key)}
i => 索引;v => 对象本身
3. mysql和mongoose区别:
1. MySQL是传统的关系型数据库,MongoDB则是非关系型数据库,也叫文档型数据库
2.海量存储下,redis与mongodb的读写速度确实比Mysql有着很明显的优势
3.mysql支持事务,mongoodb不支持
其他参考:https://blog.csdn.net/yamaxifeng_132/article/details/53490827
4.什么是mysql事务:
MySQL 事务主要用于处理操作量大,复杂度高的数据。比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务!
具体参考:http://www.runoob.com/mysql/mysql-transaction.html
5.node的数据类型:
Number(数字类型),String(字符串类型),Boolean(不布尔类型:真假类型),Null(空元素类型),Undefined(未定义类型),以及ES6新添加的Symbol(对象,象征)
6.什么是闭包:
闭包就是能够读取其他函数内部变量的函数。
function a(){ var i=0; function b(){ alert(++i); } return b; } var c=a(); c();
10.如何实现深拷贝
深拷贝:
1)JSON.stringify与JSON.parse
function deepClone(obj){ let _obj = JSON.stringify(obj), objClone = JSON.parse(_obj); return objClone } let a=[0,1,[2,3],4], b=deepClone(a);
2)递归复制所有层级属性
function deepClone(obj){ let objClone = Array.isArray(obj)?[]:{}; if(obj && typeof obj==="object"){ for(key in obj){ if(obj.hasOwnProperty(key)){ //判断ojb子元素是否为对象,如果是,递归复制 if(obj[key]&&typeof obj[key] ==="object"){ objClone[key] = deepClone(obj[key]); }else{ //如果不是,简单复制 objClone[key] = obj[key]; } } } } return objClone; } let a=[1,2,3,4], b=deepClone(a);
let a=[0,1,[2,3],4], b=$.extend(true,[],a);
4)lodash的cloneDeep
var objects = [{ 'a': 1 }, { 'b': 2 }]; var deep = _.cloneDeep(objects); console.log(deep[0] === objects[0]); // => false
具体参考:https://www.cnblogs.com/echolun/p/7889848.html
11.数据排序算法
参考:https://segmentfault.com/a/1190000009911526
//1.冒泡排序 var exchange = function (a, i, j) // 交换A[i]和A[j] { var temp = a[i]; a[i] = a[j]; a[j] = temp; } var sort = function (a) { var n = a.length; for (var j = 0; j < n - 1; j++) // 每次最大元素就像气泡一样"浮"到数组的最后 { for (var i = 0; i < n - 1 - j; i++) // 依次比较相邻的两个元素,使较大的那个向后移 { if (a[i] > a[i + 1]) // 如果条件改成A[i] >= A[i + 1],则变为不稳定的排序算法 { exchange(a, i, i + 1); } } } return a; } var a = [6, 5, 3, 1, 8, 7, 2, 4]; // 从小到大排序 // console.log(sort(a)) //------------2.选择排序------------ var exchange = function (a, i, j) // 交换A[i]和A[j] { var temp = a[i]; a[i] = a[j]; a[j] = temp; } var selectSort = function (a) { var n = a.length; var i, j, min; for (i = 0; i <= n - 2; i++) // 已排序序列的末尾 { min = i; for (j = i + 1; j <= n - 1; j++) { // 未排序序列 if (a[j] < a[min])// 依次找出未排序序列中的最小值,存放到已排序序列的末尾 { min = j; } } if (min != i) { exchange(a, min, i); // 该操作很有可能把稳定性打乱,所以选择排序是不稳定的排序算法 } } return a; } var a = [6, 5, 3, 1, 8, 7, 2, 4]; // 从小到大排序 console.log(selectSort(a)) //-----------3.插入排序------------ var insertSort = function (a) { var n = a.length; var i, j, get; for (i = 1; i < n; i++) // 类似抓扑克牌排序 { get = a[i]; // 右手抓到一张扑克牌 j = i - 1; // 拿在左手上的牌总是排序好的 while (j >= 0 && a[j] > get) // 将抓到的牌与手牌从右向左进行比较 { a[j + 1] = a[j]; // 如果该手牌比抓到的牌大,就将其右移 j--; } a[j + 1] = get;// 直到该手牌比抓到的牌小(或二者相等),将抓到的牌插入到该手牌右边(相等元素的相对次序未变,所以插入排序是稳定的) } return a; } var a = [6, 5, 3, 1, 8, 7, 2, 4]; // 从小到大排序 console.log(insertSort(a)) //-----------4.shell排序------------ var shellSort = function (a) { var n = a.length; var i, j, get; var h = 0; while (h <= n) // 生成初始增量 { h = 3 * h + 1; } while (h >= 1) { for (i = h; i < n; i++) { j = i - h; get = a[i]; while ((j >= 0) && (a[j] > get)) { a[j + h] = a[j]; j = j - h; } a[j + h] = get; } h = (h - 1) / 3; // 递减增量 } return a; } var a = [6, 5, 3, 1, 8, 7, 2, 4]; // 从小到大排序 console.log(shellSort(a)) //-----------5.快速排序---------------- var exchange = function (a, i, j) // 交换A[i]和A[j] { var temp = a[i]; a[i] = a[j]; a[j] = temp; } var partition = function (a, left, right) // 划分函数 { var pivot = a[right]; // 选择最后一个元素作为基准 var tail = left - 1; // tail为小于基准的子数组最后一个元素的索引 for (var i = left; i < right; i++) // 遍历基准以外的其他元素 { if (a[i] <= pivot) // 把小于等于基准的元素放到前一个子数组中 { tail++; exchange(a, tail, i); } } exchange(a, tail + 1, right); // 最后把基准放到前一个子数组的后边,剩下的子数组既是大于基准的子数组 // 该操作很有可能把后面元素的稳定性打乱,所以快速排序是不稳定的排序算法 return tail + 1; // 返回基准的索引 } var quicksort = function (a, left, right) { var pivot_index; // 基准的索引 if (left < right) { pivot_index = partition(a, left, right); quicksort(a, left, pivot_index - 1); quicksort(a, pivot_index + 1, right); } return a; } var a = [6, 5, 3, 1, 8, 7, 2, 4]; // 从小到大排序 console.log(quicksort(a, 0, a.length - 1))
12. node的异步实例
1)setimmediat
2)promise
13.node内存机制
14.node是多线程还是单线程