自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(52)
  • 资源 (2)
  • 收藏
  • 关注

原创 (3)nginx 配置(nginx.conf)

nginx 配置文件默认在安装目录的 conf/ 目录下,主配置文件则为 /usr/local/nginx/conf/nginx.conf# 使用的用户和组; user root rootuser nobody;# 指定工作进程数,一般为CPU总核数,或总核数的两倍,语法: worker_processes number | auto;worker_processes 1;# 错误日志路径, 日志记录级别:[ debug | info | notice | warn | error

2022-04-04 18:04:04 3456

原创 (2)nginx 安装、启停

1、下载nginx: downloadhttp://nginx.org/en/download.html2、安装pcre库(支持rewrite模块)、zlib库(支持gzip模块)、openssl库(支持ssl模块)忘了截图,下次安装再补上3、解压安装包tar zxvf nginx-1.14.0.tar.gz4、编译安装./configure && make && make install5、启停使用 systemctl 或 servic

2022-01-08 16:51:09 1412

原创 (0)Nginx 功能特性

以下内容来源于对《Nginx高性能Web服务器详解》(苗泽 编著)一书学习、摘录。 Nginx支持基本HTTP服务、高级HTTP服务、邮件服务三大类。一、基本HTTP服务可以作为HTTP代理服务器和反向代理服务器,支持通过缓存加速访问,可以完成简单的负载均衡和容错,支持包过滤功能,支持SSL等。 1、处理静态文件(如HTML静态网页及请求),支持FastCGI、SSL、Virtual Host、URL Rewrite、HTTP Bas...

2022-01-08 16:09:28 1172

原创 LeeCode74 搜索二维矩阵

先看下题目看到这个题我第一时间想的是二分查找,只不过跟官方不同的是,我的是外层遍历,找到可能存在target的行,然后内层二分查找,判断具体有没有target这个数。我觉得我的想法也可以实现,只不过题目要求用高效的方法求解,遍历明显不太高效。看看官方的程序class Solution {public: bool searchMatrix(vector<vector<int>> matrix, int target) { auto.

2021-03-31 14:49:05 130

原创 LeeCode61 旋转链表

给一个链表的头结点,旋转链表,是每一个结点右移k个位置输入:head = [1,2,3,4,5], k = 2输出:[4,5,1,2,3]struct ListNode { int val; ListNode *next; ListNode() : val(0), next(nullptr) {} ListNode(int x) : val(x), next(nullptr) {} ListNode(int x, ListNode *next)

2021-03-27 10:04:42 72

原创 判断单链表中是否存在环

1、使用快慢指针慢指针每次移动一个结点,快指针每次移动两个结点,快指针移动的快,必将先进入环,待慢指针移动进环内,就有点像追及问题了,快指针移动的快,当p1 == p2 时,就说明快慢指针相遇了,即链表有环。懒得画图,就描述一下算了。。。bool hasCycle(ListNode *head) { if(head == null) return false; ListNode *p1 = head,*p2=head; wh.

2021-03-23 17:40:51 394

原创 LRU缓存算法

LRU 缓存机制可以通过哈希表辅以双向链表实现,我们用一个哈希表和一个双向链表维护所有在缓存中的键值对。双向链表按照被使用的顺序存储了这些键值对,靠近头部的键值对是最近使用的,而靠近尾部的键值对是最久未使用的。哈希表即为普通的哈希映射(HashMap),通过缓存数据的键映射到其在双向链表中的位置。#include <iostream>#include <unordered_map>using namespace std;struct ListedNode{

2021-03-23 16:20:53 101

原创 链表翻转

class Solution {public: ListNode* reverseList(ListNode* head) { // 迭代 ListNode* pre = nullptr, * cur = head, * next; while (cur) { next = cur->next; cur->next = pre; pre = cur; .

2021-03-23 11:39:19 68

原创 工厂模式&抽象工厂

面向对象系统设计中经常遇到的两类问题&工厂模式要解决的问题1、为了提高内聚和松耦合,我们经常会抽象出一些类的公共接口以形成抽象基类或者接口。这样我们可以通过声明一个指向基类的指针来指向实际的子类实现,达到了多态的目的。这里很容易出现的一个问题是:若干个子类继承自抽象基类,我们必须在每次要用到子类的地方就写如: new ×××; 的代码。这里带来两个问题: (1)客户程序员必须知道实际子类的名称(当系统复杂后,命名将是一个很不好处理的问题,为了处理可能的名字冲突,有的命名可能并不...

2021-03-22 19:14:16 79

原创 单例模式(懒汉模式、饿汉模式)

单例模式要解决的问题主要用于解决一个全局使用的类频发的创建和销毁的问题。单例模式下确保某一个类中只有一个实例,并且自行实例化,然后自行提供给整个系统使用。单例的实现步骤1、将该类的构造方法定义为私有方法。这样其他程序就无法通过调用该类的构造方法来实例化该类的对象,只能通过类提供的静态方法,得到该类的唯一实例;2、在该类中提供一个静态方法。当调用这个方法时,如果存在实例,就返回这里实例。如果不存在,就创建这个实例,并返回。代码实现1、懒汉模式(线程不安全)// 经典懒汉模式(用时

2021-03-22 17:29:50 170

原创 翻转字符串

#include <iostream>using namespace std;char* reverse(char* str){ if (str == NULL || str == "\0") return str; char* start=str, *end=str; while (*end != '\0') { end++; } --end; char temp; while (start < end) { temp = *start; *.

2021-03-09 16:28:32 61

原创 (10)STL算法之搜索(二)& 二分查找

之前在(3)STL算法之搜索里边介绍过几个查找函数,如find()、search(),这些函数的底层实现的都是顺序查找,采用的是遍历的方式,在某些时候效率并不高,例如当指定区域里的数据处于有序状态时,查找某个目标值,显示二分查找的效率更高。然后我是昨天写算法题的时候才看到别人用到了STL算法里的lower_bound()。才了解到了lower_bound()等其他几个底层为二分查找的查找函数。先来看下我遇到的那道题。问题:给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于

2021-03-06 17:48:59 294

原创 LeeCode 21&25 合并两个(K个)有序链表

关于合并两个有序链表,LeeCode官方提供了两种解决办法;一、迭代listnode* mergetwolist(listnode* l1, listnode* l2) // 迭代{ listnode* prehead = new listnode(-1); //创建哨兵结点 listnode* pre = prehead; //创建pre指针, while (l1 != nullptr && l2 != nullptr) {

2021-03-04 18:30:05 123 1

原创 判断哪个函数调用会有问题?

#include <iostream>using namespace std;class A{public: void FunctionA() { cout << "FunctionA" << endl;// cout << x; } virtual void FunctionB() { cout << "FunctionB" << endl; } static void FunctionC() { cout.

2021-03-03 17:45:46 165 1

原创 LeeCode 27 移除元素,返回数组新长度

一、利标准库提供的移除算法remove()int removeElement(vector<int>& nums, int val) { remove(nums.begin(), nums.end(), val); return nums.size();}二、利用vector容器自带的删除函数erase()int removeElement(vector<int>& nums, int val) { auto it = nums.begin()

2021-03-03 16:37:19 173 1

原创 LeeCode 26 删除排序数组中的重复项,返回数组新长度

一、利用算法中的unique函数实现去重的目的,unique函数是C++中的标准库函数,包含于<algorithm>头文件中。功能是将数组中相邻的重复元素去除。但是本质上是将重复的元素移动到数组的末尾,最后再将迭代器末尾指向不重复序列的下一个元素。unique函数使用前一般还要用到sort函数排序、erase函数,以达到彻底清除重复元素的目的。int remove(vector<int>& nums){ sort(nums.begin(),nums.end());.

2021-03-03 15:56:26 194 1

原创 LeeCode 20.有效的括号

问题:源程序加上了自己的注释bool isValid(string s) // Leecode 20 { if (s.size() % 2 == 1) return false; unordered_map<char, char> pairs = { //哈希表的键为右括号,值为相同类型的左括号 {')','('}, {']','['}, {'}','{'} }; stack<char> sta; for (char c : s..

2021-03-02 18:47:02 134 1

原创 数组指针&指针数组

数组指针:int (*p) [n] 指针数组:int *p [4]详见https://www.cnblogs.com/mq0036/p/3382732.html

2021-03-02 13:59:39 77 1

原创 类构造、析构、赋值函数示例

平常自己写一些例程的时候,一般想的、写的都比较简单,但是在实际工程应用的时候应该尽可能的将程序写的优美、高效。class String{public: String(const char* str = NULL); String(const String& other); ~String(void); String& operator=(const String& other);private: char* m_data;};String::String(

2021-03-01 14:42:19 121 2

原创 编写一个函数,实现将char类型的字符串,循环右移n个位置

例如 abcdefg 右移2个位置变成 fgabcdevoid LoopMove(char* pStr, int n){ int str_n = strlen(pStr); if (str_n == 0 || n < 0) return; int st = n % str_n; char temp[128]; memcpy(temp,pStr+str_n-st,st); memcpy(temp+st,pStr,str_n-st); memcpy(pStr, temp, s.

2021-03-01 13:12:26 1582

原创 算法分析

算法(algorithm)是对特定问题求解步骤的一种描述,它是指令的有限序列。算法分析就是分析算法执行时占用计算机系统资源的多少。计算机资源主要是CPU时间和内存空间。分析算法的目的就是分析算法的时空性能以便改进算法。时间复杂度分析一个算法是由控制结构(循环、分支、顺序)和普通语句(a = 5、cout<<" "; 等)构成,所以算法的执行时间由这两者的综合效果决定。算法执行时间大致等于普通语句所需时间 * T(n)(该语句执行的次数,也叫频度)。void fun(i.

2021-01-26 16:51:27 736 1

原创 动态规划

动态规划(Dynamic Programming)把一个简单的问题变成相对简单的子问题,再利用保存解决这些子问题得到的结果来减少运算复杂度。动态规划问题的一般形式为:求最值,比如最大背包价值、最短路线等,这种问题最简单无脑的办法就是穷举,使用到动态规划的问题一般还涉及重叠子问题。看一个例子,比如求斐波那契(Fibonacci)数列的第N项斐波那契数列:1 1 2 3 5 8 13 21.....fib(1) = 1fib(2) = 1fib(3) = 2fib(...

2021-01-25 22:13:11 240

原创 STL之unordered_map

关联容器:unordered_map详细介绍看这个,基本就够用了。粘一个力扣编程题:给定一个数组nums和一个整数目标值target,请在数组中找到和为目标值的两个整数,返回它们的数组下标。你可以假设每种输入只会对应一个答案,但是数组中同一个元素不能使用两边。看到这个我想到暴力破解的办法,但是暴力破解时间复杂度比较高,原因在于在寻找target-x的时间复杂度高,所以使用哈希表来快速寻找数组中的目标元素,我们先创建一个哈希表,对于每一个x,查找哈希表中是否存在target-x,然后将x插入到哈希

2021-01-22 21:22:51 146 1

原创 STL之map(关联式容器)

map是一种关联式容器。由许多对的[key,value]组成,按照特定顺序排列,其键值独一无二,不可重复。在映射中,键值通常用于排序和唯一标识元素,而映射值存储与此键关联的内容,键和映射值的类型可能不同。map通常实现为二叉搜索树,STL map底层用RB-tree实现。网易校招笔试:从一篇文章里找出一个单词作为这篇文章的关键词,一个单词可以作为关键词当且仅当它在这篇文章中出现的频率不低于1%,现在他想知道有多少个不同的单词可以作为关键词。一个单词出现的频率=(某一单词出现次数/文章单词总数).

2021-01-20 22:14:17 140

原创 NFS安装使用

最近发现不会用nfs了,而我的一个Linux系统又装不上vm tools,只能使用nfs来与其他系统相互传输文件了。先来粘贴一下对nfs的介绍。网络文件系统,英文Network File System(NFS),是由SUN公司研制的UNIX表示层协议(presentation layer protocol),能使使用者访问网络上别处的文件就像在使用自己的计算机一样。NFS是基于UDP/IP协议的应用,其实现主要是采用远程过程调用RPC机制,RPC提供了一组与机器、操作系统以及低层传送协议无关的存取.

2021-01-17 15:46:51 248

原创 (9)STL算法之逆转&&旋转

1、逆转是指将容器或序列中的元素按逆向顺序翻转。STL算法提供了几个实现逆转功能的算法reverse()和reverse_copy()。先来看看reverse()的底层实现。template <class BidirectionalIterator>void reverse (BidirectionalIterator first, BidirectionalIterator last);template <class BidirectionalIterator>voi

2021-01-16 20:29:30 295

原创 (8)STL算法之替换

在STL算法中可以使用替换函数replace()、replace_if()完成替换操作。先来看下replace函数的底层实现。// replace() 声明与实现template <class ForwardIterator, class T>void replace (ForwardIterator first, ForwardIterator last,const T& old_value, const T& new_value);template <c

2021-01-15 21:07:30 223

原创 C++数据结构之单链表

node.h#ifndef __NODE_H__#define __NODE_H__// 结点类模板template <class ElemType>struct Node{ // 数据成员: ElemType data; // 数据成分 Node<ElemType>* next; // 指针成分// 构造函数模板: Node(); // 无参数的构造函数模板 Node(const ElemType& e, Node<E

2021-01-15 20:29:42 421

原创 C++数据结构之顺序表

顺序表头文件 sq_list.h#ifndef __SQ_LIST_H__#define __SQ_LIST_H__#ifndef DEFAULT_SIZE#define DEFAULT_SIZE 1000 // 缺省元素个数#endif// 顺序表类模板template <class ElemType>class SqList{protected: // 数据成员: ElemType* elems; // 元素存储空间 int maxSize;

2021-01-14 15:37:33 450

原创 改善程序与设计的N个做法

经验往往包含着珍贵的学问。1、尽量用const、enum、inline替换#define对于简单常量,使用 const 代替宏定义,其优点:const 常量能够出现在符号表中,方便调试。宏定义因为进行的宏替换,有时候会造成代码冗余,const 常量能够很好的避免这个问题。const 常量可以作为类属成员,#define 则毫无封装性。整型族类属常量可以在类中声明时直接初始化。enum 也可以作为整型常量使用,并且无法取得其地址。使用内联函数代替宏定义的函数将会在不损失效率的情况下降低发.

2021-01-13 20:16:35 121

原创 菱形继承问题

先来看程序......#include <iostream>using namespace std;class Animal{ //动物public: int m_Age;};class horse : public Animal{ // 马};class donkey : public Animal{ // 驴};class mule : public horse, public donkey{ // 骡子};void test(){ m

2021-01-12 21:31:46 117

原创 (7)STL算法之交换&&赋值

3、互换STL的大部分容器都提供了成员函数swap(),用于两个不同容器对象之间的元素交换,同时,STL算法也提供了算法swap()。个人认为尽量使用容器自己的swap()。(1)swap()// 声明及定义template <class T> void swap (T& a, T& b);template <class T> void swap (T& a, T& b){ T c(std::move(a));

2021-01-11 17:55:46 414

原创 (6)STL算法之转换

2、转换函数transform()实现了将源区间的元素复制到目标区间,也可以修改元素、合并两个区间。//对源区间 [first1,last1]的每一个元素均调用函数 op(elem) ,结果写入以result为起始位置的目标区间,函数返回值是最后一个被转换元素的下一位置。 template <class InputIterator, class OutputIterator, class UnaryOperation>OutputIterator transform (InputI

2021-01-11 00:15:08 290

原创 (5)STL算法之复制

修改序列式算法能对容器内容造成修改,而改变容器一般有两种方法:(1)使用迭代器遍历序列的过程中,直接改变元素的值;(2)在元素复制的过程中,改变元素的值。能对容器内容造成改变的算法主要包括:复制、转换、互换、赋值、替换、逆转、排列等 8种。1、复制元素复制是指在两个容器变量之间进行元素传递。(1)copy()// 声明及定义template <class InputIterator, class OutputIterator>OutputIterato.

2021-01-10 21:40:26 194

原创 QtTCP通信示例

程序下载地址:https://download.csdn.net/download/qq_42631200/14017995运行如果出现错误,注释掉即可。

2021-01-03 23:39:51 214

原创 Linux TCP通信示例

TCP通信流程server.h#include <stdio.h>#include <unistd.h>#include <stdlib.h>#include <strings.h>#include <ctype.h>#include <sys/socket.h>#include <arpa/inet.h>#define MAX_LINE 100/* 用于将大写字符转换为小写字符。参数为需要转

2021-01-03 23:10:05 279 1

转载 linux中实现线程同步的6种方法

https://blog.csdn.net/u022812849/article/details/109225200版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本文链接:https://blog.csdn.net/u022812849/article/details/109225200...

2021-01-03 20:40:29 173

原创 (4)STL算法之比较

区间比较算法(1)equal()该函数可以实现两个容器对象的比较,如果两个对象相等,函数返回true,只能比较属于同一类型的不同变量。template <class InputIterator1, class InputIterator2>bool equal (InputIterator1 first1, InputIterator1 last1,InputIterator2 first2);template <class InputIterator1, class

2020-12-30 17:05:05 312

原创 STL算法

【算法库简介】 #include<algorithm>用有限的步骤解决逻辑或数学上的问题,称为算法。具体的算法是指对解题方案准确而完整的描述,是一系列解决问题的清晰地指令。算法一般分为基本算法、数据结构的算法、数论与代数算法、计算几何算法、图论算法、动态规划及数值分析、加密算法、排序算法、检索算法、随机化算法、并行算法等。STL算法一般采用覆盖,而非插入,调用时应当保证目标空间拥有足够的元素空间。STL算法允许使用容器自带的算法操作,这些算法更适合容器自身,效率更高。STL中.

2020-12-28 13:13:38 146

原创 (3)STL算法之搜索

3、搜寻算法STL也提供了一系列搜寻算法。【 find() 】template <class InputIterator, class T>InputIterator find (InputIterator first, InputIterator last, const T& val);template<class InputIterator, class T>InputIterator find (InputIterator first, Inpu

2020-12-28 11:55:28 125

基于Qt的TCP通信示例

基于Qt的TCP通信示例

2021-01-03

微信小程序项目结构.xmind

小程序项目结构图

2020-11-06

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

TA关注的人

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