自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(37)
  • 收藏
  • 关注

原创 Ubuntu上安装并启动Tengine踩坑

Tengine作为一款在nginx基础上开发的一款Web服务器,添加了许多高级特性。本文记录在Ubuntu系统上安装Tengine总结。1.下载解压wget http://tengine.taobao.org/download/tengine-2.3.2.tar.gztar zxvf tengine-2.3.2.tar.gz2.安装依赖cd tengine-2.3.2apt-get updateapt-get install libpcre3 libpcre3-devapt-ge

2022-05-16 17:57:31 647

原创 线程退出总结

线程结束

2022-05-14 22:03:33 1981

原创 【pthread_join/pthread_detach踩坑

pthread_join/pthread_detach

2022-05-14 20:06:37 475

原创 VMWare虚拟机安装卡死问题

VMWare虚拟机安装卡死问题1.关闭3D加速2.分配2G以上内存

2021-01-08 09:24:08 4514

原创 Ubuntu系统安装编译quagga

Ubuntu系统安装编译quagga1.Quagga简介Quagga是一款开源路由软件套件,它可以用来将你的Linux设备变成一个功能完备的路由器,支持RIP,RIPNG,OSPFv2,OSPFv3,BGP等路由协议。2. Quagga基本结构quagga主要由bgpd、ripd、ripngd、ospfd、ospf6d、vtysh等几个服务(这些服务的名称被建立之后,被挂上 Linux 使用时,通常在服务的名称之后会加上一个 d,这也就是daemon的命名规则),根据实际需要我们选用相应的服务。但q

2020-11-30 09:57:18 942

转载 进程与线程

进程与线程进程与线程区别

2020-11-05 22:33:15 117

原创 TCP粘包问题

TCP粘包问题1.背景:在socket网络编程中,都是端到端通信,由客户端端口+服务端端口+客户端IP+服务端IP+传输协议组成的五元组可以明确的标识一条连接。在TCP的socket编程中,发送端和接收端都有成对的socket。发送端为了将多个发往接收端的包,更加高效的的发给接收端,于是采用了优化算法(Nagle算法),将多次间隔较小、数据量较小的数据,合并成一个数据量大的数据块,然后进行封包。那么这样一来,接收端就必须使用高效科学的拆包机制来分辨这些数据。2.问题TCP粘包就是指发送方发送的若干包

2020-10-29 10:53:04 190

原创 Linux IO模型

Linux IO模型Linux IO 模型介绍同步:所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。也就是必须一件一件事做,等前一件做完了才能做下一件事。例如普通B/S模式(同步):提交请求->等待服务器处理->处理完毕返回 这个期间客户端浏览器不能干任何事异步:异步的概念和同步相对。当一个异步过程调用发出后,调用者不能立刻得到结果。实际处理这个调用的部件在完成后,通过状态、通知和回调来通知调用者。 例如 ajax请求(异步): 请求通过事件触发-&gt

2020-10-29 10:13:08 89

原创 1024.视频拼接

1024.视频拼接贪心算法动态规划贪心算法暴力遍历每一个起点,每次找区间能到达的最远点,下一次的起始点小于等于这次的终点,下一次的终点继续尽可能远,当下一次的终点大于等于T时退出循环,如果最后终点也没有大于等于T,则返回-1.class Solution {public: int videoStitching(vector<vector<int>>& clips, int T) { int res = 1; int slow =

2020-10-24 17:24:13 30703

原创 99.恢复二叉搜索树

99.恢复二叉搜索树二叉搜索树中的两个节点被错误地交换。请在不改变其结构的情况下,恢复这棵树1.dfs分情况讨论左子树最大值与右子树最小值交换左子树最大值与根节点交换右子树最小值与根节点交换左子树两个节点互换右子树两个节点互换class Solution {public: void maxNode(TreeNode* root,TreeNode* &big) { if(!root)return; if(root->val&

2020-09-29 10:41:16 83

原创 动态规划练习1

动态规划96. 不同的二叉搜索树给定一个整数 n,求以 1 … n 为节点组成的二叉搜索树有多少种?F(i,n)=G(i−1)⋅G(n−i)动态规划思想将n拆分class Solution {public: int numTrees(int n) { vector<int>G(n+1,0); G[0] = 1; G[1] = 1; for(int i=2;i<=n;i++) {

2020-09-28 10:36:59 93

原创 10.正则表达式匹配

正则表达式匹配给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘’ 的正则表达式匹配‘.’ 匹配任意单个字符'’ 匹配零个或多个前面的那一个元素1.递归思路class Solution {public: bool isMatch(string s, string p) { if(p.empty())return s.empty(); bool first_match = !s.empty() && (s[0]==

2020-09-25 00:11:00 246

原创 322.零钱兑换

322.零钱兑换给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。1.背包问题动态规划解决背包问题:dp[j] = min[dp[j],1+dp[j-coins[i]]]class Solution {public: int coinChange(vector<int>& coins, int amount) { const int INF

2020-09-24 15:36:28 90

原创 1122.数组的相对排序

1122.数组的相对排序给你两个数组,arr1 和 arr2,arr2 中的元素各不相同arr2 中的每个元素都出现在 arr1 中对 arr1 中的元素进行排序,使 arr1 中项的相对顺序和 arr2 中的相对顺序相同。未在 arr2 中出现过的元素需要按照升序放在 arr1 的末尾。1.暴力法暴力遍历两个数组,若相等代表为arr2中元素出现在arr1,与前面元素交换,最后再对剩余元素排序class Solution {public: vector<int> rela

2020-09-20 19:26:33 213 1

原创 1333. 餐厅过滤器

1333. 餐厅过滤器中规中矩的过滤筛选加排序class Solution {public: vector<int> filterRestaurants(vector<vector<int>>& restaurants, int veganFriendly, int maxPrice, int maxDistance) { vector<int> res; vector<vector<int&g

2020-09-20 18:00:11 111

原创 1452. 收藏清单

1452. 收藏清单给你一个数组 favoriteCompanies ,其中 favoriteCompanies[i] 是第 i 名用户收藏的公司清单(下标从 0 开始)。请找出不是其他任何人收藏的公司清单的子集的收藏清单,并返回该清单下标。下标需要按升序排列。1.调用stl库中的inludes函数,比较两个集合是否包含先对数组进行排序,再调用stl库中的inludes函数,比较两个集合是否包含class Solution {public: vector<int> peo

2020-09-20 11:47:50 157

原创 922. 按奇偶排序数组 II

922. 按奇偶排序数组 II给定一个非负整数数组 A, A 中一半整数是奇数,一半整数是偶数。对数组进行排序,以便当 A[i] 为奇数时,i 也是奇数;当 A[i] 为偶数时, i 也是偶数。你可以返回任何满足上述条件的数组作为答案。1.暴力法,遍历比较并在新开辟的数组中添加class Solution {public: vector<int> sortArrayByParityII(vector<int>& A) { vector&

2020-09-20 11:13:32 159

原创 767. 重构字符串

767. 重构字符串给定一个字符串S,检查是否能重新排布其中的字母,使得两相邻的字符不同。若可行,输出任意可行的结果。若不可行,返回空字符串。拆解字符串+重构字符串先用一个26位vector存储每一个字母出现次数,出现次数大于字符串长度一半时无法重构,其他情况都可以重构。按出现次数由大到小排序vector,保证先插入出现次数多的元素。重构时按奇数偶数位置插入元素。class Solution {public: string reorganizeString(string S) {

2020-09-17 11:11:38 97

原创 220. 存在重复元素 III

220. 存在重复元素 III在整数数组 nums 中,是否存在两个下标 i 和 j,使得 nums [i] 和 nums [j] 的差的绝对值小于等于 t ,且满足 i 和 j 的差的绝对值也小于等于 ķ 。如果存在则返回 true,不存在返回 false。暴力法class Solution {public: bool containsNearbyAlmostDuplicate(vector<int>& nums, int k, int t) {

2020-09-17 09:56:59 76

原创 1471. 数组中的 k 个最强值

1471. 数组中的 k 个最强值给你一个整数数组 arr 和一个整数 k 。设 m 为数组的中位数,只要满足下述两个前提之一,就可以判定 arr[i] 的值比 arr[j] 的值更强:|arr[i] - m| > |arr[j] - m||arr[i] - m| == |arr[j] - m|,且 arr[i] > arr[j]请返回由数组中最强的 k 个值组成的列表。答案可以以 任意顺序 返回。中位数 是一个有序整数列表中处于中间位置的值。形式上,如果列表的长度为 n ,那么中

2020-09-15 09:00:18 110

原创 1498. 满足条件的子序列数目

给你一个整数数组 nums 和一个整数 target 。请你统计并返回 nums 中能满足其最小元素与最大元素的 和 小于或等于 target 的 非空 子序列的数目。由于答案可能很大,请将结果对 10^9 + 7 取余后返回。1.枚举法vmin<=vmax<=target-vminvmin2<=target枚举vmin,固定vmin,vmax为vmin到【target-vmin】,对剩余元素做二分查找,找到vmax个数,由于vmin2<=target,每个vmin贡.

2020-09-15 00:19:10 208

原创 面试题 16.16. 部分排序

给定一个整数数组,编写一个函数,找出索引m和n,只要将索引区间[m,n]的元素排好序,整个数组就是有序的。注意:n-m尽量最小,也就是说,找出符合条件的最短序列。函数返回值为[m,n],若不存在这样的m和n(例如整个数组是有序的),请返回[-1,-1]。正向遍历找极小值,反向遍历找极大值,然后分别找到极小值和极大值本应所在的位置即可,时间复杂度O(n)。class Solution {public: vector<int> subSort(vector<int>&a.

2020-09-03 09:48:40 211

原创 Leetcode524

Leetcode524给定一个字符串和一个字符串字典,找到字典里面最长的字符串,该字符串可以通过删除给定字符串的某些字符来得到。如果答案不止一个,返回长度最长且字典顺序最小的字符串。如果答案不存在,则返回空字符串。双指针判断是否为候选答案sort排序进一步筛选答案class Solution {public: string findLongestWord(string s, vector<string>& d) { string res ="";

2020-09-01 21:45:19 125

原创 Leetcode148链表排序

Leetcode148链表排序在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。快速排序:采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。该方法的基本思想是:1.先从数列中取出一个数作为基准数。2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。3.再对左右区间重复第二步,直到各区间只有一个数。class Solution {public: ListNode* quickSort(Li

2020-09-01 19:09:50 134

原创 Leetcode147.链表插入排序

Leetcode147.链表插入排序插入排序算法:插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在序列中适当的位置,并将其插入。重复直到所有输入数据插入完为止。class Solution {public: ListNode* insertionSortList(ListNode* head) { if(head==NULL || head->next==NULL)re

2020-09-01 00:21:50 61

原创 排序75.颜色分类

75.颜色分类给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。注意:不能使用代码库中的排序函数来解决这道题。示例:输入: [2,0,2,1,1,0]输出: [0,0,1,1,2,2]计数排序class Solution {public: void sortColors(vector<int>& nums) {

2020-08-31 23:57:42 162

原创 排序57.插入区间

Leetcode57.插入区间给出一个无重叠的 ,按照区间起始端点排序的区间列表。在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。示例:输入:intervals = [[1,3],[6,9]], newInterval = [2,5]输出:[[1,5],[6,9]]顺序比较,插入class Solution {public: vector<vector<int>> insert(vector<vect

2020-08-31 23:17:52 107

原创 排序56.合并区间

Leetcode排序56.合并区间给出一个区间的集合,请合并所有重叠的区间。示例 1:输入: intervals = [[1,3],[2,6],[8,10],[15,18]]输出: [[1,6],[8,10],[15,18]]解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].双指针法:class Solution {public: vector<vector<int>> merge(vector<vector<i

2020-08-31 00:23:26 77

原创 OVS系统重启时重启步骤

OVS系统重启时重启步骤OVS系统重启时重启步骤先杀掉ovsdb进程,然后重启服务sudo killall ovsdb-serversudo service openvswitch-switch force-reload-kmodovsdb-server --remote=punix:/usr/local/var/run/openvswitch/db.sock –pidfile --d...

2020-01-13 11:04:23 2178

原创 OVS安装流程

OVS安装流程OVS安装流程安装环境:Ubuntu 16.04 LTS (GNU/Linux 4.4.0-92-generic x86_64)安装准备:apt-get install gitapt-get install autoconf automake libtoolapt-get install opensslapt-get install libssl-devapt-ge...

2020-01-08 10:15:07 588

原创 C++ math error

C++中abs函数问题-C++ 编译中error: call of overloaded “abs(double)” is ambiguous问题:C++98中,abs与fabs都不支持对整型操作,在调用函数时有歧义C++11中,abs与fabs都支持对整型操作,但abs编译不通过问题为编译器不支持C++11标准,说明编译器出现问题abs函数存在于头文件,fabs函数存在于头文件因此,...

2019-12-13 16:49:42 1128

转载 Linux内核

Linux内核linux 内核网络Linux内核路由机制

2019-11-14 11:48:36 118

原创 多个netns连通问题

多个netns连通问题创建netns并启动网卡ip netns add sat1ip netns exec sat1 ip link set dec lo upip netns add sat2ip netns exec sat2 ip link set dec lo up`开启路由转发功能ip netns exec sat1 sysctl net.ipv4.conf.al...

2019-11-12 15:41:49 212

原创 ubuntu虚拟机网卡配置经历

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Ma...

2019-11-10 14:09:55 259

转载 socket获取网卡地址

#include <stdio.h>#include <string.h>#include <sys/socket.h>#include <arpa/inet.h>#include <net/if.h> int get_ip(const char *ifname, char *ip){ int sock_get_i...

2019-11-07 21:34:08 426

转载 socket绑定指定网卡发包

socket绑定制定网卡发包SO_BINDTODEVICE网络编程中有时明明用eth0的地址来bind一个udp套接口, 可是发出去的包却是从eht1走的, 在网上找到这么一段话解释该问题:在多 IP/网卡主机上,UDP 包/协议会自动根据路由最优来选择从哪个网卡发数据包出去,即使你在此之前把该 SOCKET 绑定到了另一个网卡上。这样一来,如果你执行了绑定,则在 UDP 包中所代表的源 IP...

2019-11-07 21:08:15 12357 3

转载 Linux进程间通信的方式

进程通信的方式管道( pipe ):管道包括三种:普通管道PIPE:通常有两种限制,一是单工,只能单向传输;二是只能在父子或者兄弟进程间使用.流管道s_pipe: 去除了第一种限制,为半双工,只能在父子或兄弟进程间使用,可以双向传输.命名管道:name_pipe:去除了第二种限制,可以在许多并不相关的进程之间进行通讯从原理上,管道利用fork机制建立,从而让两个进程可以连接到同一个...

2019-11-03 20:03:39 136

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除