C++笔试-剑指offer
剑指offer
文章目录
- 剑指offer
- 数组
- [数组中重复的数据 ](https://leetcode.cn/problems/find-all-duplicates-in-an-array/description/)
- 将元素交换到对应的位置
- 二维数组中的查找
- 二叉搜索树
- 旋转数组的最小数字
- 二分查找
- 数组中出现次数超过一半的数字
- 相互抵消
- 连续子数组的最大和(二)
- 动态规划
- 链表
- 从尾到头打印链表
- 栈
- 反转链表(双指针、递归)
- 拓展:反转链表中间一部分
- 删除链表的节点
- 链表合并
- 链表中倒数最后k个结点
- 双指针思想
- 复杂链表的复制
- 哈希表
- 在每个旧节点后加上新节点
- 删除有序链表中重复的元素-I
- 双指针思想
- 删除链表中重复的结点
- 二叉树
- 二叉树的深度
- 递归
- 二叉树的最小深度
- 二叉树的镜像
- 队列、栈
- 用两个栈实现队列
- 动态规划
- 跳台阶
- DP(ACM模式)
- 递归(ACM模式)
数组
数组中重复的数据
将元素交换到对应的位置
class Solution {
public:vector<int> findDuplicates(vector<int>& nums) {vector<int> result;for (int i = 0; i<nums.size();i++){while (nums[i] != nums[nums[i]-1]){swap(nums[i],nums[nums[i]-1]);}}for (int i = 0; i<nums.size();i++){if (nums[i]-1 != i){result.push_back(nums[i]);}}return result;}
};
时间复杂度O(n)
空间复杂度O(1)
二维数组中的查找
二叉搜索树
class Solution{
public:bool Find(int target, vector<vector><int> arr){if (arr.empty() || arr[0].empty()) return false;int i = 0;//行int j = arr.size()-1;//列while (i<=arr.size()-1 && j>=0){if (target == arr[i][j])return true;else if (tartget < arr[i][j])--j;else++i;}return false;}
}
类似于二叉搜索树:
旋转数组的最小数字
二分查找
最小值一定在右区域!
class Solution {
public:/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * @param nums int整型vector * @return int整型*/int minNumberInRotateArray(vector<int>& nums) {int left = 0, right = nums.size()-1;int mid;while (left<right){mid = (left + right)/2;if (nums[left]<nums[right])//left一定在左区域或最低点,right一定在右区域,左区域的数一定大于等于右区域的数return nums[left];if (nums[mid] > nums[right])//mid在左区域,最小的数字在mid右边{left = mid + 1;}else if (nums[mid] == nums[right])//mid在重复元素{--right;}else //mid在右区域, 最小数字要么是mid要么在mid左边{right = mid;}}return nums[left];}
};
数组中出现次数超过一半的数字
相互抵消
用不同数字相互抵消的方法,最后留下来的一定是超过一半的数字
int MoreThanHalfNum_Solution(vector<int>& numbers) {// write code hereint num = numbers[0];int count = 1;for (int i = 1; i<numbers.size(); ++i){if (count > 0){if (numbers[i]==num){++count;}else {--count;}}else //count = 0{num = numbers[i];count = 1;}}return num;}
};
1287. 有序数组中出现次数超过25%的元素
由于这题是升序,可以直接用步长判断,也可以用上题的步骤判断
连续子数组的最大和(二)
根据剑指offer自己想的,待优化:
int最大值INT_MAX,最小值INT_MIN
int的最小值可以写成0x8000000,最大值可以写成0x7FFFFFFF
class Solution {
public:vector<int> FindGreatestSumOfSubArray(vector<int>& arr) {// write code hereint result = 0x80000000;vector<int> vresult;vector<int> temp;int sum = 0;for (int i =0;i<arr.size();++i){if (sum<0)//如果和为负数,那么前一个和一定是从那个元素开始算的最大和了{temp.clear();temp.push_back(arr[i]);sum=arr[i];}else {sum+=arr[i];temp.push_back(arr[i]);}if (sum>=result){result = sum;vresult = temp;}}return vresult;}
};
动态规划
//只需要保存最大值时:
int res = nums[0];
for (int i = 1; i < nums.size(); i++) {if (nums[i - 1] > 0) nums[i] += nums[i - 1];if (nums[i] > res) res = nums[i];
}
return res;
//需要保存对应的子数组时:
求连续子数组的最大和(ACM模式)
#include <iostream>
#include <string>
#include <vector>
using namespace std;int main() {string str;cin>>str;//输入是个字符串int k =0;vector<int> numbers;while((k = str.find(',')) != str.npos){//注意输出的方法string temp = str.substr(0, k);numbers.push_back(stoi(temp));str = str.substr(k + 1);}numbers.push_back(stoi(str));int tempmax = 0;int result = 0x80000000;int sum = 0;for (int i =0; i<numbers.size();++i){if (sum<0){sum=numbers[i];}else {sum+=numbers[i];}result = max(sum,result);}if (result<0){result = 0;}printf("%d",result);
}
// 64 位输出请用 printf("%lld")
链表
从尾到头打印链表
栈
利用栈先入后出的特点,很好解决
class Solution {
public:vector<int> printListFromTailToHead(ListNode* head) {stack<int> stk;vector<int> result;int value = 0;while (head!=nullptr){stk.push(head->val);head = head->next;}while (!stk.empty()){value = stk.top();result.push_back(value);stk.pop();}return result;}
};
时间复杂度O(n)
空间复杂度O(n)
反转链表(双指针、递归)
双指针:
class Solution {
public:vector<int> printListFromTailToHead(ListNode* head) {ListNode* preNode = nullptr;ListNode* curNode = head;while(curNode!=nullptr){ListNode* temp = curNode->next;curNode->next = preNode;preNode = curNode;curNode = temp;}vector<int> result;while(preNode!=nullptr){result.push_back(preNode->val);preNode = preNode->next;}return result;}
};
时间复杂度O(n)
空间复杂度O(1)
递归:
class Solution {
public:vector<int> printListFromTailToHead(ListNode* head) {ListNode* newhead = ReverseList(head);vector<int> result;while (newhead!=nullptr){result.push_back(newhead->val);newhead = newhead->next;}return result;}ListNode* ReverseList(ListNode* head){if (head==nullptr || head->next==nullptr){return head;}ListNode* newhead = ReverseList(head->next);head->next->next = head;head->next = nullptr;return newhead;}
};
时间复杂度O(n)
空间复杂度O(n)
拓展:反转链表中间一部分
92. 反转链表 II - 力扣(LeetCode)
class Solution {
public:ListNode* reverseBetween(ListNode* head, int left, int right) {if (head->next==nullptr || left==right){return head;}ListNode* dummyhead = new ListNode(0);dummyhead->next = head;ListNode* preleftEdge = dummyhead;ListNode* leftEdge = head;ListNode* rightEdge = head;for(int i = 1; i<left;++i){preleftEdge = preleftEdge->next;leftEdge = preleftEdge->next;}for(int i = 1; i<right;++i){rightEdge = rightEdge->next;}ListNode* nextrightEdge = rightEdge->next;ListNode* leftNode = leftEdge;ListNode* firstNode = leftNode;ListNode* rightNode = leftNode->next;while (rightNode!=nextrightEdge){ListNode* temp = rightNode->next;rightNode->next = leftNode;leftNode = rightNode;rightNode = temp;}preleftEdge->next = leftNode;firstNode->next = nextrightEdge;return dummyhead->next;}
};
删除链表的节点
class Solution {
public:/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * @param head ListNode类 * @param val int整型 * @return ListNode类*/ListNode* deleteNode(ListNode* head, int val) {// write code hereListNode* dummyhead = new ListNode(0);dummyhead->next = head;ListNode* pre = dummyhead;ListNode* cur = head;while (cur!=nullptr){if (cur->val==val){pre->next = cur->next;break;}else {cur = cur->next;pre = pre->next;}}return dummyhead->next;}
};
还有一种不需要知道前驱结点就可以“删除”链表结点的方法,前提是不能删除最后一个结点:
class Solution {
public:void deleteNode(ListNode* node) {node->val = node->next->val;node->next = node->next->next;}
};
链表合并
ACM模式的话要注意输入输出,然后要注意cur指针的更新
#include <iostream>
using namespace std;
struct ListNode
{int val;ListNode* next;ListNode(int val): val(val), next(nullptr){}
};int main() {int a;ListNode* dummyhead = new ListNode(0);ListNode* cur = dummyhead;ListNode* dummyhead1 = new ListNode(0);ListNode* cur1 = dummyhead1;ListNode* dummyhead2 = new ListNode(0);ListNode* cur2 = dummyhead2;while(cin>>a){ListNode* node = new ListNode(a);cur1->next = node;cur1 = cur1->next;if(cin.get()=='\n'){break;}}while(cin>>a){ListNode* node = new ListNode(a);cur2->next = node;cur2 = cur2->next;}cur1 = dummyhead1->next;cur2 = dummyhead2->next;while (cur1!=nullptr && cur2!=nullptr){if (cur1->val<=cur2->val){cur->next = cur1;cur1 = cur1->next;}else {cur->next = cur2;cur2 = cur2->next;}cur = cur->next;}if (cur1==nullptr){cur->next = cur2;}if (cur2==nullptr){cur->next = cur1;}cur = dummyhead->next;while (cur!=nullptr){printf("%d ",cur->val);cur = cur->next;}return 0;
}
// 64 位输出请用 printf("%lld")
链表中倒数最后k个结点
双指针思想
右指针指向左指针后k个元素,这样当右指针为最后一个节点后的元素时,左指针指向的就是所求元素
/*** struct ListNode {* int val;* struct ListNode *next;* ListNode(int x) : val(x), next(nullptr) {}* };*/
class Solution {
public:/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * @param pHead ListNode类 * @param k int整型 * @return ListNode类*/ListNode* FindKthToTail(ListNode* pHead, int k) {// write code hereif (pHead==nullptr){return nullptr;}ListNode* left = pHead;ListNode* right = left;for (int i =0; i<k;++i){if(right==nullptr){return nullptr;}right = right->next; }while (right!=nullptr){right = right->next;left = left->next;}return left;}
};
复杂链表的复制
LCR 154. 复杂链表的复制 - 力扣(LeetCode)
哈希表
键为旧指针,值为新指针。第一次遍历时初始化键和值的label,第二次赋上next和random指针
class Solution {
public:Node* copyRandomList(Node* head) {if (head==nullptr){return nullptr;}unordered_map<Node*,Node*> mp;Node* cur = head;while (cur!=nullptr){Node* newNode = new Node(cur->val);mp[cur] = newNode;cur = cur->next;}cur = head;while (cur!=nullptr){mp[cur]->next = mp[cur->next];mp[cur]->random = mp[cur->random];cur = cur->next;}return mp[head];}
};
在每个旧节点后加上新节点
最后要记得把旧链表头结点断开连接
class Solution {
public:RandomListNode* Clone(RandomListNode* pHead) {if (pHead==nullptr){return nullptr;}//初始化nextRandomListNode* cur1 = pHead;while (cur1!=nullptr){RandomListNode* newNode = new RandomListNode(cur1->label);newNode->next = cur1->next;cur1->next = newNode;cur1 = cur1->next->next;}//赋值randomcur1 = pHead;RandomListNode* cur2 = pHead->next;while (cur1!=nullptr){if (cur1->random != nullptr){cur2->random = cur1->random->next;}cur1 = cur1->next->next;cur2 = cur2->next->next;}//拆分链表RandomListNode* newCloneHead = pHead->next;cur2 = newCloneHead;pHead->next = nullptr;while (cur2->next!=nullptr){cur2->next = cur2->next->next;cur2 = cur2->next;}cur2->next=nullptr;cur1 = pHead;cur2 = pHead->next;return newCloneHead;}
};
删除有序链表中重复的元素-I
双指针思想
ListNode* deleteDuplicates(ListNode* head) {// write code hereif (head==nullptr){return nullptr;}ListNode* dummyhead = new ListNode(0);ListNode* left = dummyhead;ListNode* right = head;while(right!=nullptr){while (right->next!=nullptr && right->val==right->next->val){right = right->next;}left->next = right;left = left->next;right = right->next;}return dummyhead->next;}
删除链表中重复的结点
比前面多了再将right右移一步的动作,以及最后要把left指向nullptr
class Solution {
public:ListNode* deleteDuplication(ListNode* pHead) {if (pHead==nullptr){return nullptr;}ListNode* dummyhead = new ListNode(0);ListNode* left = dummyhead;ListNode* right = pHead;while(right!=nullptr){if(right->next!=nullptr && right->val==right->next->val){while (right->next!=nullptr && right->val==right->next->val){right = right->next;}right = right->next;continue;}left->next = right;left = left->next;right = right->next;}left->next = nullptr;return dummyhead->next;}
};
二叉树
二叉树的深度
递归
返回左子树和右子树深度的最大值加上一(后序遍历)
class Solution {
public:int TreeDepth(TreeNode* pRoot) {if (pRoot==nullptr){return 0;}return max(TreeDepth(pRoot->left),TreeDepth(pRoot->right))+1;}
};
二叉树的最小深度
111. 二叉树的最小深度 - 力扣(LeetCode)
和二叉树的(最大)深度的区别是,计算的是到叶子节点(左右孩子都为空)的最小深度,也用后序遍历实现
class Solution {
public:int minDepth(TreeNode* root) {if (root==nullptr){return 0;}if (root->left==nullptr && root->right!=nullptr){return minDepth(root->right)+1;}else if (root->right==nullptr && root->left!=nullptr){return minDepth(root->left)+1;}else{return min(minDepth(root->left),minDepth(root->right))+1;}}
};
二叉树的镜像
LCR 144. 翻转二叉树 - 力扣(LeetCode)
前序遍历
TreeNode* Mirror(TreeNode* pRoot) {// write code hereif (pRoot==nullptr) return pRoot;swap(pRoot->left,pRoot->right);Mirror(pRoot->left);Mirror(pRoot->right);return pRoot;}
后序遍历
TreeNode* Mirror(TreeNode* pRoot) {// write code hereif (pRoot==nullptr) return pRoot;Mirror(pRoot->left);Mirror(pRoot->right);swap(pRoot->left,pRoot->right);return pRoot;}
队列、栈
用两个栈实现队列
每当要pop的时候就获取stack2的最上面的元素,如果stack2为空,则将stack1依次出栈到stack2。这样stack2上面的就是最先push进去的元素,最底下是最新push进去的元素。
class Solution
{
public:void push(int node) {stack1.push(node);}int pop() {while (!stack2.empty()){int result = stack2.top();stack2.pop();return result;}while (!stack1.empty()){int temp = stack1.top();stack2.push(temp);stack1.pop();}int result = stack2.top();stack2.pop();return result;}private:stack<int> stack1;stack<int> stack2;
};
动态规划
跳台阶
DP(ACM模式)
#include <iostream>
#include <unordered_map>using namespace std;int main() {int a;cin>>a;unordered_map<int,int> dp;dp[0] = 1;dp[1] = 1;dp[2] = 2;if (a<=2){printf("%d",dp[a]);}else {for (int i=3;i<=a;i++){int temp = dp[2];dp[2] +=dp[1];dp[1] = temp;}printf("%d",dp[2]);}return 0;
}
// 64 位输出请用 printf("%lld")
递归(ACM模式)
#include <iostream>
using namespace std;int Jump(int num)
{if (num==0) return 1;if (num==1) return 1;if (num==2) return 2;return Jump(num-1) + Jump(num-2);
}int main() {int a;cin>>a;int result = Jump(a);printf("%d",result);return 0;
}
// 64 位输出请用 printf("%lld")
相关文章:
C++笔试-剑指offer
剑指offer 文章目录 剑指offer数组[数组中重复的数据 ](https://leetcode.cn/problems/find-all-duplicates-in-an-array/description/)将元素交换到对应的位置 二维数组中的查找二叉搜索树 旋转数组的最小数字二分查找 数组中出现次数超过一半的数字相互抵消 连续子数组的最大…...
Mac安装jadx并配置环境
jadx官网:GitHub - skylot/jadx: Dex to Java decompiler 第一种: 安装jadx命令: brew install jadx 启动jadx-gui命令: jadx-gui 可能遇到的问题: Downloading https://formulae.brew.sh/api/formula.jws.json** h…...
前端学习----css基础语法
CSS概述 CAscading Style Sheets(级联样式表) CSS是一种样式语言,用于对HTML文档控制外观,自定义布局等,例如字体,颜色,边距等 可将页面的内容与表现形式分离,页面内容存放在HTML文档中,而用于定义表现形式的CSS在一个.css文件中或HTML文档的某一部分 HTML与CSS的关系 HTM…...
超详解——python条件和循环——小白篇
目录 1. 缩进和悬挂else 2. 条件表达式 3. 和循环搭配的else 4. 可调用对象 总结: 1. 缩进和悬挂else 在Python中,代码块是通过缩进来表示的。条件判断和循环结构的代码块需要正确缩进。悬挂else指的是else子句和相应的if或循环在同一级别的缩进。 …...
DNS协议 | NAT技术 | 代理服务器
目录 一、DNS协议 1、DNS背景 2、DNS协议 域名 域名解析 二、NAT技术 1、NAT技术 2、NAPT技术 3、NAT技术的缺陷 三、代理服务器 1、正向代理服务器 2、反向代理服务器 一、DNS协议 域名系统(Domain Name System,缩写:DNS&#…...
深入ES6:解锁 JavaScript 类与继承的高级玩法
个人主页:学习前端的小z 个人专栏:JavaScript 精粹 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结,欢迎大家在评论区交流讨论! ES5、ES6介绍 文章目录 💯Class🍟1 类的由来🍟2 co…...
领域驱动设计:异常处理
一、异常的处理 异常处理是领域模型要考虑的一部分,原因在于模型的责任不可能无限大。在遇到自己处理能力之外的情况时,要采用异常机制报告错误,并将处理权转交。异常就是这样一种机制,某种程度上,它可以保证领域模型…...
网络网络层之(6)ICMPv6协议
网络网络层之(6)ICMPv6协议 Author: Once Day Date: 2024年6月2日 一位热衷于Linux学习和开发的菜鸟,试图谱写一场冒险之旅,也许终点只是一场白日梦… 漫漫长路,有人对你微笑过嘛… 全系列文章可参考专栏: 通信网络技术_Once-Day的博客-CS…...
《大道平渊》· 拾壹 —— 商业一定是个故事:讲好故事,员工奋发,顾客买单。
《大道平渊》 拾壹 "大家都在喝,你喝不喝?" 商业一定是个故事,人民群众需要故事。 比如可口可乐的各种故事。 可口可乐公司也只是被营销大师们, 作为一种故事载体,发挥他们的本领。 营销大师们开发故事…...
JavaScript 如何访问本地文件夹
在浏览器环境中的JavaScript(通常指的是前端JavaScript)由于安全限制,无法直接访问用户的本地文件或文件夹。这是为了防止恶意脚本访问并窃取用户的敏感数据。 但是,有几种方法可以间接地让用户选择并访问本地文件: 使…...
ArrayList顺序表简单实现
一、创建MyArrayList框架 1.1 MyArrayList 类中实现 arr 数组 import java.util.Arrays;public class MyArrayList {private int[] arr;private int usesize;private static final int P 10;public MyArrayList() {arr new int[P];} 在 MyArrayList 类内创建 arr 数组&…...
144、二叉树的前序递归遍历
题解: 递归书写三要素: 1)确定递归函数的参数和返回值。要确定每次递归所要用到的参数以及需要返回的值 2)确定终止条件。操作系统也是用栈的方式实现递归,那么如果不写终止条件或者终止条件写的不对,都…...
youtube 1080 分辨率 下载方式
YouTube 1080p Video Downloader 这张图像代表了Autodesk Maya中一个名为rocket_body_MAT的材质的着色器网络。下面是对节点及其连接的细分: 节点 place2dTexture12: 该节点用于控制2D纹理在表面上的位置映射。输出: Out UVrocket_body2.jpg: 该节点代表一个纹理文件,具体是…...
计算机网络ppt和课后题总结(下)
常用端口总结 计算机网络中,端口是TCP/IP协议的一部分,用于标识运行在同一台计算机上的不同服务。端口号是一个16位的数字,范围从0到65535。通常,0到1023的端口被称为“熟知端口”或“系统端口”,它们被保留给一些标准…...
测试基础12:测试用例设计方法-边界值分析
课程大纲 1、定义 经验发现,较多的错误往往发生在输入或输出范围的边界上,因为边界值是代码判断语句的点,一般容易出问题(数值写错、多加或丢失等号、写错不等号方向…)。所以增加对取值范围的边界数据的测试ÿ…...
AI大模型在健康睡眠监测中的深度融合与实践案例
文章目录 1. 应用方案2. 技术实现2.1 数据采集与预处理2.2 构建与训练模型2.3 个性化建议生成 3. 优化策略4. 应用示例:多模态数据融合与实时监测4.1 数据采集4.2 实时监测与反馈 5. 深入分析模型选择和优化5.1 LSTM模型的优势和优化策略5.2 CNN模型的优势和优化策略…...
【西瓜书】9.聚类
聚类任务是无监督学习的一种用于分类等其他任务的前驱过程,作为数据清洗,基于聚类结果训练分类模型 1.聚类性能度量(有效性指标) 分类任务的性能度量有错误率、精度、准确率P、召回率R、F1度量(P-R的调和平均)、TPR、FPR、AUC回归…...
使用jemalloc实现信号驱动的程序堆栈信息打印
使用jemalloc实现信号驱动的程序堆栈信息打印 本文介绍应用如何集成jemalloc,在接收到SIGUSR1信号10时打印程序的堆栈信息。 1. 编译jemalloc 首先,确保你已经编译并安装了启用prof功能的jemalloc。以下是ubuntu18.04上的编译步骤: git c…...
树的4种遍历
目录 树的四种遍历方式的总结 1. 前序遍历(Pre-order Traversal) 2. 中序遍历(In-order Traversal) 3. 后序遍历(Post-order Traversal) 4. 层序遍历(Level-order Traversal 或 广度优先遍…...
深入探讨5种单例模式
文章目录 一、对比总览详细解释 二、代码1. 饿汉式2. 饱汉式3. 饱汉式-双检锁4. 静态内部类5. 枚举单例 三、性能对比 一、对比总览 以下是不同单例模式实现方式的特性对比表格。表格从线程安全性、延迟加载、实现复杂度、反序列化安全性、防反射攻击性等多个方面进行考量。 …...
SPOOL
-----How to Pass UNIX Variable to SPOOL Command (Doc ID 1029440.6) setenv只有csh才有不行啊PROBLEM DESCRIPTION: You would like to put a file name in Unix and have SQL*Plus read that file name, instead of hardcoding it, because it will change.You want to pa…...
挑战绝对不可能:再证有长度不同的射线
黄小宁 一空间坐标系中有公共汽车A,A中各座位到司机处的距离h是随着座位的不同而不同的变数,例如5号座位到司机处的距离是h3,…h5,…。A移动了一段距离变为汽车B≌A,B中5号座位到司机处的距离h’h3,…h’h5…...
【机器学习】Python与深度学习的完美结合——深度学习在医学影像诊断中的惊人表现
🔥 个人主页:空白诗 文章目录 一、引言二、深度学习在医学影像诊断中的突破1. 技术原理2. 实际应用3. 性能表现 三、深度学习在医学影像诊断中的惊人表现1. 提高疾病诊断准确率2. 辅助制定治疗方案 四、深度学习对医疗行业的影响和推动作用 一、引言 随着…...
MapStruct的用法总结及示例
MapStruct是一个代码生成器,它基于约定优于配置的原则,使用Java注解来简化从源对象到目标对象的映射过程。它主要用于减少样板代码,提高开发效率,并且通过编译时代码生成来保证性能。 我的个人实践方面是在2021年前那时候在项目中…...
redis 05 复制 ,哨兵
01.redis的复制功能,使用命令slaveof 2. 2.1 2.2 3. 3.1 3.1.1 3.1.2 3.1.3 4 4.1 4.2 例子 5.1 这里是从客户端发出的指令 5.2 套接字就是socket 这里是和redis事件相关的知识 5.3 ping一下...
强大的.NET的word模版引擎NVeloDocx
在Javer的世界里,存在了一些看起来还不错的模版引擎,比如poi-tl看起来就很不错,但是那是人家Javer们专属的,与我们.Neter关系不大。.NET的世界里Word模版引擎完全是一个空白。 很多人不得不采用使用Word XML结合其他的模版引擎来…...
MySQL中所有常见知识点汇总
存储引擎 这一张是关于整个存储引擎的汇总知识了。 MySQL体系结构 这里是MySQL的体系结构图: 一般将MySQL分为server层和存储引擎两个部分。 其实MySQL体系结构主要分为下面这几个部分: 连接器:负责跟客户端建立连 接、获取权限、维持和管理…...
Flink 基于 TDMQ Apache Pulsar 的离线场景使用实践
背景 Apache Flink 是一个开源的流处理和批处理框架,具有高吞吐量、低延迟的流式引擎,支持事件时间处理和状态管理,以及确保在机器故障时的容错性和一次性语义。Flink 的核心是一个分布式流数据处理引擎,支持 Java、Scala、Pytho…...
远程访问及控制
SSH协议 是一种安全通道协议 对通信数据进行了加密处理,用于远程管理 OpenSSH(SSH由OpenSSH提供) 服务名称:sshd 服务端控制程序: /usr/sbin/sshd 服务端配置文件: /etc/ssh/sshd_config ssh存放的客户端的配置文件 ssh是服务端额…...
【代码随想录训练营】【Day 44】【动态规划-4】| 卡码 46, Leetcode 416
【代码随想录训练营】【Day 44】【动态规划-4】| 卡码 46, Leetcode 416 需强化知识点 背包理论知识 题目 卡码 46. 携带研究材料 01 背包理论基础01 背包理论基础(滚动数组)01 背包 二维版本:dp[i][j] 表示从下标为[0-i]的物…...
揭阳建设局网站/网站建设定制
微课程 | 第十三课《全局序列视频演示》上一期我们介绍了全局序列的原理,接下来我们通过视频来演示一下全局序列功能。我们来看一下这两种全局序列是怎么工作的。 时间戳算法 首先是 snowflake ,也就是所谓时间戳算法。 微课程 | 第十三课《全局序列视频…...
网站开发工程师应聘书范文/网页广告调词平台
一、前言 CSS字体属性可以定义文本的字体系列、大小、加粗、颜色、风格(如斜体)和变形(如小型大写字母)。 CSS的字体属性: font-family设置字体系列font-size设置字体的尺寸font-weight 设置字体的粗细font-style设置字…...
中天建设集团有限公司简介/seo难不难
【总结 c语言20题】 问题描述 【问题描述】输入两个正整数m和n(m<1,n<500),统计并输出m和n之间的素数个数以及这些素数的和。注意:1不是素数 要求定义并调用函数prime(m)判断m是否为素数,当m为素数是返回1,否则…...
互联网行业发展/seo网站推广案例
闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。 下面就是我的学习笔记,对于Javascript初学者应该是很有用的。 一、变量的作用域 要理解闭包,首先必须理解Javas…...
易语言做网站爆破工具/百度seo排名点击器app
说起物流大数据,你会想到什么? 因为量大,我首先想到的水,因为水会顺流而下,沿途支流不断汇集壮大,最后百川归海。同样地,数据流也会源源不断注入数据池、数据湖,于是有了信息海洋。 因为数据的…...
往国外卖货的平台/网站优化公司怎么选
Xmind是一个很好的思维导图工具,是学习研究总结的好帮手。 Xmind功能很丰富,这里只是简要列出几个比较有用的技巧。 1.善用属性 选中一个xmind元素(专业名词叫【主题】)后,一般在右下角会出现“属性”。如果你不想老是…...