JavaScript刷LeetCode拿offer-经典高频40题vaScript刷LeetCode拿offer-经典高频40题
工作太忙没有时间刷算法题,面试的时候好心虚。这里双手奉上40道LeetCode上经典面试算法题,整理的内容有点长,建议先收藏,慢慢消化,在来年顺利拿到满意的offer。
1、[LeetCode] 两数之和
给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。
你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
var twoSum = function(nums, target) {var len = nums.length;for(var i=0; i<len; i++){for(var j=i+1; j<len;j++){if(nums[i] + nums[j] == target){return [i, j];}} }return [];
};
2、[LeetCode]路径总和
给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。
说明: 叶子节点是指没有子节点的节点。
var hasPathSum = function(root, sum) {if (!root) return false;var cur = sum-root.val;if (!root.left&&!root.right&&cur==0) return true;if (!root.left) return hasPathSum(root.right, cur);if (!root.right) return hasPathSum(root.left, cur);return hasPathSum(root.left, cur)||hasPathSum(root.right, cur);};
3、[LeetCode]二叉树的最小深度
给定一个二叉树,找出其最小深度。
最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
说明: 叶子节点是指没有子节点的节点。
var minDepth = function(root) {if (!root) return 0;if (!root.left&&!root.right) return 1;if (!root.left) return minDepth(root.right)+1;if (!root.right) return minDepth(root.left)+1;return Math.min(minDepth(root.left), minDepth(root.right))+1;};
4、[LeetCode] 二进制求和
给定两个二进制字符串,返回他们的和(用二进制表示)。
var addBinary = function(a, b) {var res = [];var num = 0;var addOne = 0;//是否进位//字符串对其while(a.length < b.length){a = 0 + a;}while(b.length < a.length){b = 0 + b;}for (var i=a.length-1; i>=0; i--){num = parseInt(a[i])+parseInt(b[i])+addOne;if(num>=2){res[i] = num-2;addOne = 1;}else{res[i] = num;addOne = 0;}}if(addOne>0){res.unshift(1);}return res.join('');};
5、[LeetCode]x的平方根
实现 int sqrt(int x) 函数。
计算并返回 x 的平方根,其中 x 是非负整数。
由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。
var mySqrt = function(x) {var i = 1;while(x>=i*i){i++;}return i-1;}; //方法2 ES6var mySqrt = function(x) {return Math.floor(x ** 0.5);//向下取整 x^0.5};
6、[LeetCode] 加一
给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。
var plusOne = function(digits) {var len = digits.length;for (var i=len-1; i>=0; i--){if(digits[i]<9){digits[i]++;return digits;}digits[i] = 0;}digits.unshift(1);return digits;};
7、[LeetCode] 最后一个单词的长度
给定一个仅包含大小写字母和空格 ’ ’ 的字符串,返回其最后一个单词的长度。
var lengthOfLastWord = function(s) {s = s.trim();var arr = s.split(' ');return arr[arr.length-1].length;};
8、[LeetCode] 最大子序和
给定一个整数数组 nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素)返回其最大和。参考视频:传送门
var maxSubArray = function(nums) {var max = nums[0];var sum = 0;for (let num of nums){if (sum < 0){sum = 0;}sum += num;max = Math.max(sum, max);}return max;};
9、[LeetCode]报数
报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。
var countAndSay = function(n) {var resultStr = '1';for (var i=1; i<n; i++){var repeatCount = 1;var str = '';for (var j=0; j<resultStr.length; j++) {if (resultStr[j]===resultStr[j+1]){repeatCount++;} else {str += repeatCount + resultStr[j];repeatCount = 1;}}resultStr = str;}return resultStr;};
10、[LeetCode]杨辉三角
给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。
在杨辉三角中,每个数是它左上方和右上方的数的和。
示例:
输入: 5
输出:
[
[1],
[1,1],
[1,2,1],
[1,3,3,1],
[1,4,6,4,1]
]
var generate = function(numRows) {var res = [];for (var i=0; i<numRows; i++){var arr = [1];for (var j=1; j<i; j++){arr[j] = res[i-1][j]+res[i-1][j-1];}arr[i] = 1;res.push(arr);}return res;};
11、[LeetCode]杨辉三角 II
给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行。
var getRow = function(rowIndex) {var res = [1];if (rowIndex==0) return [1];if (rowIndex==1) {return [1,1];}var arr = getRow(rowIndex-1);for (var i=1; i<rowIndex; i++){res[i] = arr[i]+arr[i-1];}res.push(1);return res;};
12、[LeetCode]相交链表
编写一个程序,找到两个单链表相交的起始节点。
例如
思路:
遍历 A 表,指针 l1 等于尾部 c3 时,让它指向 B 表的 b1
遍历 B 表,指针 l2 等于尾部 c3 时,让它指向 A 表的 a1
如果两链表有交点,则会同时指向 c1,因为:
a1 → a2 → c1 → c2 → c3 → b1 → b2 → b3 → c1 与
b1 → b2 → b3 → c1 → c2 → c3 → a1 → a2 → c1 相等。
var getIntersectionNode = function(headA, headB) {if (!headA || !headB) return null;if (headA == headB) return headA;var l1 = headA;var l2 = headB;var count = 0;while(l1 != l2 && count < 3){if (!l1.next || !l2.next) count++;l1 = l1.next ? l1.next : headB;l2 = l2.next ? l2.next : headA;}return l1==l2 ? l1 : null;
};
13、[LeetCode]打家劫舍
你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。
给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。
思路:
偷取第 i 家时,有两种选择:
偷取第 i 家,此时金额为:res[i] = res[i-2]+nums[i];
不偷,此时金额为:res[i] = res[i-1];
所以最高金额为两者取较大值。
var rob = function(nums) {var len = nums.length;if (len < 2) return nums[len-1]?nums[len-1]:0;var res = [nums[0], Math.max(nums[0], nums[1])];for (let i=2; i<len; i++){res[i] = Math.max(res[i-1], nums[i]+res[i-2]);}return res[len-1];
};
14、[LeetCode]最小栈
设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。
push(x) – 将元素 x 推入栈中。
pop() – 删除栈顶的元素。
top() – 获取栈顶元素。
getMin() – 检索栈中的最小元素。
var MinStack = function() {this.stack = []};MinStack.prototype.push = function(x) {this.stack[this.stack.length] = x; };MinStack.prototype.pop = function() {this.stack.length--;};MinStack.prototype.top = function() {return this.stack[this.stack.length-1];};MinStack.prototype.getMin = function() {var min = this.stack[0];var len = this.stack.length;for (var i=1; i<len; i++){if (this.stack[i]<min){min = this.stack[i];}}return min;};
15、[LeetCode]只出现一次的数字
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
var singleNumber = function(nums) {nums.sort(function(a, b){return a-b;});var len = nums.length;for (var i=0; i<len; i=i+2){if(nums[i]!=nums[i+1]){return nums[i];}}};
16、[LeetCode]验证回文串
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
var isPalindrome = function(s) {var str1 = s.toUpperCase().replace(/\W/g,'');var str2 = str1.split('').reverse().join('');return str1==str2;};
17、[LeetCode]买卖股票的最佳时机 II
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。
设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。
注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
var maxProfit = function(prices) {var max = 0;var len = prices.length;for (var i=0; i<len-1; i++){if (prices[i+1]>prices[i]){max += prices[i+1]-prices[i];}}return max;};
18、[LeetCode]移除元素
给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。
不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。
元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
var removeElement = function(nums, val) {var i = 0;var len = nums.length;for (var j = 0; j<len; j++){if(nums[j]!==val){nums[i] = nums[j]i++;}}return i;};//方法2var removeElement = function(nums, val) {var i = 0;var len = nums.length;while (i < len){if (nums[i] == val) {nums[i] = nums[len-1];len--;} else {i++;}}return len;};
19、[LeetCode]平衡二叉树
给定一个二叉树,判断它是否是高度平衡的二叉树。
本题中,一棵高度平衡二叉树定义为:
一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。
var isBalanced = function(root) {if (!root) return true;if (Math.abs(depth(root.left)-depth(root.right))>1) return false; return isBalanced(root.left) && isBalanced(root.right); function depth(node){if (!node) return 0;var left = depth(node.left);var right = depth(node.right);return Math.max(left, right)+1;}};
20、[LeetCode]删除排序数组中的重复项
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
var removeDuplicates = function(nums) {var i = 0;var len = nums.length;for (var j=1; j<len; j++){if (nums[i] !== nums[j]){i++;nums[i] = nums[j]}}return i+1;};
21、[LeetCode]合并两个有序链表
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
var mergeTwoLists = function (l1, l2) {var lHead = new ListNode(0);var lCur = lHead;while (l1 !== null && l2 !== null) {if(l1.val < l2.val) {lCur.next = l1;lCur = lCur.next;l1 = l1.next;} else {lCur.next = l2;lCur = lCur.next;l2 = l2.next; }}if (l1 === null) {lCur.next = l2;} if (l2 === null) {lCur.next = l1;}return lHead.next;};
22、[LeetCode]有效的括号
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
var isValid = function(s) {var stack = [];var len = s.length;for (var i=0; i<len; i++){var char = s[i];var stackLen = stack.length;if(stackLen==0) {stack.push(char); }else{if(isMatch(stack[stackLen-1],char)){stack.pop();}else{stack.push(char);}} }return stack.length==0;function isMatch(char1, char2){if (char1=='(' && char2==')'||char1=='{' && char2=='}'||char1=='[' && char2==']'){return true;}return false;}};
23、[LeetCode]最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。
var longestCommonPrefix = function(strs) {if (!strs.length) return '';var str1 = strs[0];var res = '';var str1Len = str1.length;var strsLen = strs.length;for (var i=0; i<str1Len; i++) {for (var j=1; j<strsLen; j++) {if (str1[i] !== strs[j][i]) {return res;}}res += str1[i];}return res;};
24、[LeetCode]罗马数字转整数
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。
字符 数值
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。
var romanToInt = function(s) {var romanObj = {'I': 1,'V': 5,'X': 10,'L': 50,'C': 100,'D': 500,'M': 1000};var num = 0;var len = s.length;for (var i=0; i<len-1; i++) {var curNum = romanObj[s.charAt(i)];var rightNum = romanObj[s.charAt(i+1)];num += curNum>=rightNum?curNum:-curNum;}num += romanObj[s.charAt(i)]return num;};
25、[LeetCode]回文数
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
var isPalindrome = function(x) {var num = x.toString();return x == num.split('').reverse().join('');}; //方法2 找到中间位置,然后两边对比 var isPalindrome = function(x) {var str = x.toString();var len = str.length;var halfLen = (len-1)/2;for (var i=0; i<halfLen; i++){if(str.charAt(i)!==str.charAt(len-1-i)){return false;}}return true;};
26、[LeetCode]反转整数
给定一个 32 位有符号整数,将整数中的数字进行反转。
var reverse = function(x) {var num = x.toString().split('').reverse();var res = parseInt(num.join(''));if(res>2**31) return 0;return x>0?res:-res;};
27、[LeetCode]实现 strStr() 函数
给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。
var strStr = function(haystack, needle) {if (needle=='') return 0;var len2 = needle.length;var len = haystack.length - len2;for (var i = 0; i<=len; i++) {if (haystack.substring(i, i+len2) == needle) {return i;}}return -1;};//超简做法var strStr = function(haystack, needle) {return haystack.indexOf(needle);};
28、[LeetCode]搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
var searchInsert = function(nums, target) {var len = nums.length;for(var i=0; i<len; i++){if(target<=nums[i]){return i;}}return len;};
29、[LeetCode]将有序数组转换为二叉搜索树
将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。
本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。
var sortedArrayToBST = function(nums) {var len = nums.length;if(!len) return null;if(len===1) return new TreeNode(nums[0]);var mid = parseInt(len/2);var root = new TreeNode(nums[mid]);root.left = sortedArrayToBST(nums.slice(0, mid));root.right = sortedArrayToBST(nums.slice(mid+1));return root;};
30、[LeetCode]二叉树的层次遍历 II
给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)
var levelOrderBottom = function(root) {var queue = [];var result = [];if(root) queue.push(root);while(queue.length){var arr = [];var len = queue.lengthfor(var i=0; i<len; i++){var curNode = queue.shift();arr.push(curNode.val);if(curNode.left) queue.push(curNode.left);if(curNode.right) queue.push(curNode.right);}result.unshift(arr);}return result;};
31、[LeetCode]二叉树的最大深度
给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。
var maxDepth = function(root) {if(!root) return 0;var left_depth = maxDepth(root.left);var right_depth = maxDepth(root.right);return Math.max(left_depth, right_depth)+1;};
32、[LeetCode]爬楼梯
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
思路:
f(1) : 1
f(2) : 11 , 2
f(3) : 12, 111, 21
f(4) : 121, 1111, 211, 112, 22
f(n) = f(n-1) + f(n-2)
var climbStairs = function(n) {let a = b = 1;for (let i = 0; i < n; i++) {[a, b] = [b, a + b];//ES6的递归写法}return a;};
33、[LeetCode]合并两个有序数组
给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。
说明:
初始化 nums1 和 nums2 的元素数量分别为 m 和 n。
你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。
示例:
输入:
nums1 = [1,2,3,0,0,0], m = 3
nums2 = [2,5,6], n = 3
输出: [1,2,2,3,5,6]
var merge = function(nums1, m, nums2, n) {for (let i=0; i<n; i++){nums1[m+i] = nums2[i]}nums1.sort(function(a, b){return a-b;})};
34、[LeetCode]相同的树
给定两个二叉树,编写一个函数来检验它们是否相同。
如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。
var isSameTree = function(p, q) {if (p===null && q===null) return true;if (p===null || q===null) return false;if (p.val != q.val) return false;return isSameTree(p.left, q.left) && isSameTree(p.right, q.right);};
35、[LeetCode]对称二叉树
给定一个二叉树,检查它是否是镜像对称的。
var isSymmetric = function(root) {if (!root) return true;var leftAndRight = function(left, right){if (!left && !right) return true;if (!left || !right) return false;if (left.val != right.val) return false;return leftAndRight(left.left, right.right) && leftAndRight(left.right, right.left);}return leftAndRight(root.left, root.right);};
36、[LeetCode]删除排序链表中的重复元素
删除排序链表中的重复元素
var deleteDuplicates = function(head) {var l = head;if(l==null) return nullwhile(l.next){if(l.val == l.next.val){l.next = l.next.next;}else{l = l.next;}}return head;};
37、[LeetCode]Excel表列名称
给定一个正整数,返回它在 Excel 表中相对应的列名称。
例如,
1 -> A
2 -> B
3 -> C
…
26 -> Z
27 -> AA
28 -> AB
…
var convertToTitle = function(n) {var res='';while(n>0){var a = parseInt((n-1)%26);n = parseInt((n-1)/26);res = String.fromCharCode(a+65) + res;}return res;
};
相关文章:

JavaScript刷LeetCode拿offer-经典高频40题vaScript刷LeetCode拿offer-经典高频40题
工作太忙没有时间刷算法题,面试的时候好心虚。这里双手奉上40道LeetCode上经典面试算法题,整理的内容有点长,建议先收藏,慢慢消化,在来年顺利拿到满意的offer。 1、[LeetCode] 两数之和 给定一个整数数组和一个目标值…...

动态规划,这将是你见过最详细的讲解
文章目录一、为什么要讲动态规划呢?二、什么是动态规划三、感受一下递归算法、备忘录算法、动态规划递归算法带备忘录的递归解法(自定向下)自底向上的动态规划四、动态规划的解题套路1. 穷举分析2. 确定边界3. 确定最优子结构4. 写出状态转移…...

【服务器数据恢复】FreeNAS层UFS2文件系统数据恢复案例
服务器数据恢复环境: Dell存储服务器,采用esxi虚拟化系统,esxi虚拟化系统里有3台虚拟机;上层iSCSI使用FreeNAS构建,通过iSCSI方式实现FCSAN功能;FreeNAS层采用UFS2文件系统。 esxi虚拟化系统里有3台虚拟机中…...

Zookeeper安装和基本使用
目录标题一、下载二、安装三、启动客户端测试四、使用zk一、下载 注意:自zk3.5.5版本以后,已编译的jar包,尾部有bin,应该使用的是apache-zookeeper-3.8.0-bin.tar.gz。,因此在下载高版本时,因该下载后缀带b…...

字节面试惨败,闭关修炼再战美团(Android 面经~)
作者:王旭 前言 本人从事Android 开发已经有5年了,受末日寒气影响,被迫在家休整,事后第一家选择字节跳动面试,无奈的被面试官虐得“体无完肤”,好在自己并未气馁,于是回家开始回家进行闭关修炼…...

【机器学习实战】七、梯度下降
梯度下降 一、线性回归 线性回归算法推导过程可以基于最小二乘法直接求解,但这并不是机器学习的思想,由此引入了梯度下降方法。本文讲解其中每一步流程与实验对比分析。 1.初始化 import numpy as np import os %matplotlib inline import matplotli…...

什么是极速文件传输,极速文件传输如何进行大文件传输
当谈到大文件传输时,人们总是担心大数据文件的大小以及将它们从一个位置交换到另一个位置需要多长时间。由于数据捕获高分辨率视频和图像的日益复杂,文件的大小不断增加。数据工作流在地理上变得越来越分散。在一个位置生成的文件在其他位置处理或使用。…...

Spring Boot 日志
目录 1.概述 2.切换日志实现 3.使用 3.1.日志级别 3.3.日志离线 3.4.详细定制 1.概述 由一些历史原因,JAVA领域存在有很多日志框架,如Log4j、Logback、log4j2。 log4j是Java日志框架的元老,在log4j被Apache Foundation收入门下之后&a…...

好用的研发管理看板工具有哪些?10款主流看板管理软件盘点
10大企业看板工具软件:1.软件开发项目看板 PingCode;2.通用看板软件 Worktile;3.开源看板软件 Wekan;4.免费看板软件 Trello;5.个人和小团队的看板软件 Todoist ;6.开源免费看 Kanboard;7.面向个…...

【软考系统架构设计师】2022下案例分析历年真题
【软考系统架构设计师】2022下案例分析历年真题 【软考系统架构设计师】2022下案例分析历年真题【软考系统架构设计师】2022下案例分析历年真题2022下案例分析历年真题第一题(25分)2022下案例分析历年真题第二题(25分)2022下案例分…...

Java skill - @JsonAlias 和 @JsonProperty
Java skill - JsonAlias 和 JsonPropertyJava skill系列目录:JsonAlias 和 JsonProperty使用 JsonProperty 的麻烦场景:使用 JsonAlias 应对麻烦场景:Java skill系列目录: 【Java skill - 统计耗时用StopWatch】 【Java skill - …...

【实际开发18】- 静态 3
目录 1. 调试与评估 2. 单元测试的管理 1. 单元测试的文档 3. 系统集成的模式与方法 1. 集成测试前的准备 2. 集成测试的模式 3. 大棒集成方法 ( Big-bang Integration) 4. 自顶向下和自底向上集成方法 1. 自顶向下法 ( Top-down Integration ) 2. 自底向上法 ( Bott…...

【swagger2】开发api文档
文章目录一、swagger2 简介背景Open API ???swagger2的作用swagger2常用工具组件:二、Springfox三、springBoot使用swagger2(简单示例)四、Swagger-UI使用五、配置文件1、配置类:给docket上下文配置api描述信息2、配置类&#…...

Github 上如何提交 pull request
什么是复刻(forking)? 我们可以通过复刻操作将喜爱的仓库保存自己的Github账户中,以便独立地对其进行操作。 通过复刻,我们可以得到包含完整版本历史的目标仓库的实例,之后可以对复刻得到的仓库进行任意操作而不会影响…...

Redis面试知识
概述 Redis 是速度非常快的非关系型(NoSQL)内存键值数据库,可以存储键和五种不同类型的值之间的映射。 键的类型只能为字符串,值支持五种数据类型:字符串、列表、集合、散列表、有序集合。 Redis 支持很多特性,例如将内存中的数据持久化到硬盘中,使用复制来扩展读性能…...

Spring面试重点(四)——Spring事务
Spring事务 事务的方式 spring中使用事务有两种方式,一种是编程式事务,一种是声明式事务。编程式事务推荐使用TransactionTemplate,实现TransactionCallback接口,需要编码实现;声明式事务只需要在函数增加注解Transa…...

♡ — MySQL 存储引擎
MySQL 存储引擎架构 MySQL 存储引擎采用的是插件式架构,支持多种存储引擎,我们甚至可以为不同的数据库设置不同的存储引擎以适应不同场景的需要;存储引擎是基于表的,而不是数据库。 MyISAM 和 InnoDB 的区别 MySQL 5.5 之前&am…...

大数据技术架构(组件)34——Spark:Spark SQL--Optimize
2.2.3、Optimize2.2.3.1、SQL3.3.1.1、RB1、Join选择在Hadoop中,MR使用DistributedCache来实现mapJoin。即将小文件存放到DistributedCache中,然后分发到各个Task上,并加载到内存中,类似于Map结构,然后借助于Mapper的迭…...

Zookeeper实现分布式锁
文章目录ZK节点类型watch监听机制Zookeeper实现分布式锁锁原理创建锁的过程释放锁的过程ZK锁的种类代码实现Zookeeper是一个开源的分布式协调服务,是一个典型的分布式数据一致性解决方案。 分布式应用程序可以基于Zookeeper实现诸如数据发布/订阅,负载均…...

MFC 添加重新启动管理器支持
重启管理器是添加到 Visual Studio for Windows Vista 或更高版本操作系统的功能 如果发生意外关闭或重启,重新启动管理器将为你的应用程序添加支持。 重新启动管理器的行为取决于应用程序的类型。 如果你的应用程序是文档编辑器,则重新启动管理器让应用…...

一文带你深刻的进入Python,并且了解Python的优缺点
最近几年Python被吹的神乎其神,很多同学都不清楚Python到底能干什么?就盲目去学习Python,今天我就Python的应用领域来简单盘点一下,让想学习Python 的同学找对方向不迷茫。 2. Python 的特点 这里就谈谈自己的看法,首先 Python是…...

别具一格,原创唯美浪漫情人节表白专辑,(复制就可用)(html5,css3,svg)表白爱心代码(4)
别具一格,独此一家,原创唯美浪漫情人节表白专辑 不一样的惊喜哦~!(html5,css3,svg)表白爱心代码(复制就可用)(4) 目录 款式四:时光的记忆款 1、拷贝完整源代码 2、更新时光盒所…...

编译原理—翻译方案、属性栈代码
系列文章戳这里👇 什么是上下文无关文法、最左推导和最右推导如何判断二义文法及消除文法二义性何时需要消除左递归什么是句柄、什么是自上而下、自下而上分析什么是LL(1)、LR(0)、LR(1)文法、LR分析表LR(0)、SLR(1)、LR(1)、LALR(1)文法之间的关系编译原理第三章习…...

链表
一、从尾到头打印链表题目:输入一个链表,按链表从尾到头的顺序返回一个ArrayList。解题思路:使用栈作为中转,可以实现倒置打印classSolution { public:vector<int> printListFromTailToHead(ListNode* head){//使用栈完成中…...

CSS 样式优先级
CSS 样式优先级决定了最终呈现在浏览器中的样式是哪一组样式,在多组样式中有冲突时,最终呈现在浏览器中的样式是具有最高优先级的样式。 CSS 样式优先级顺序如下: 内联样式 > 内部样式 > 外部样式 !important > 内联样式 > ID…...

SpingMVC获取请求参数
通过ServletAPI获取请求参数将HttpServletRequest作为控制器方法的形参,此时HttpServletRequest类型的参数表示封装了当前请求的请求报文的对象。html<form th:action"{/param/servletAPI}" method"post">用户名:<input ty…...

微搭使用笔记(二)微搭低代码平台介绍及基础使用
概述 官网地址: 官网 官方文档: 官方文档 FAQ: FAQ 腾讯云微搭低代码是一个高性能的低代码开发平台,用户可通过拖拽式开发,可视化配置构建 PC Web、H5 和小程序应用。支持打通企业内部数据,轻松实现企业微信管理、工…...

CountDownLatch的定义、使用 、原理
一、定义 CountDownLatch的作用很简单,就是一个或者一组线程在开始执行操作之前,必须要等到其他线程执行完才可以。我们举一个例子来说明,在考试的时候,老师必须要等到所有人交了试卷才可以走。此时老师就相当于等待线程ÿ…...

《Terraform 101 从入门到实践》 Terraform在公有云Azure上的应用
《Terraform 101 从入门到实践》这本小册在南瓜慢说官方网站和GitHub两个地方同步更新,书中的示例代码也是放在GitHub上,方便大家参考查看。 简介 Azure是微软的公有云,它提供了一些免费的资源,具体可以查看: https:/…...

别具一格,原创唯美浪漫情人节表白专辑,(复制就可用)(html5,css3,svg)表白爱心代码(3)
别具一格,原创唯美浪漫情人节表白专辑, (复制就可用)(html5,css3,svg)表白爱心代码(3) 目录 款式三:心形实时显示认识多长时间桃花飞舞(猫咪)款 1、拷贝完整源代码 2、拷贝完整js代码 3、修改时间 4、…...