自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Melo琦

在这里,我们一起交流

  • 博客(66)
  • 收藏
  • 关注

原创 滑动窗口 算法

C++实现滑动窗口算法

2023-04-08 19:10:32 365 1

原创 前缀和 算法

/ 第(i+1)个元素的前缀和。所以: [i ,j]的和为 presum[j + 1] - presum[i - 1]。所以: nums[i] = presum[i] - presum[i - 1];presum[i + 1] 就是nums[0] + …+ num[i]的和。presum[j + 1] 就是nums[0] + …+ num[j]的和。前缀和数组: presum[len + 1] // 这里len+1。

2023-03-28 22:20:03 304

原创 TCP/IP socket

(3)如果待发送数据的长度大于s的内核发送缓冲区的长度时,会先将s(发送端)的内核发送缓冲区填满,然后发送端会将内核发送缓冲区的数据发送到接收端socket的内核接收缓冲区,所以s(发送端)的内核发送缓冲区又会慢慢腾出空间,send又会将待发送数据往s(发送端)的内核发送缓冲区中copy。在阻塞模式下,send函数的过程是将应用程序请求发送的数据拷贝到内核发送缓存中,待发送数据完全被拷贝到内核发送缓存区中才返回,当然如果内核发送缓存区一直没有空间能容纳待发送的数据,则一直阻塞。

2023-03-26 17:41:06 673

原创 回溯 算法

/ 恢复当前组合new_combination = combination。// 2: 定义回溯所需的组合combination,索引index。//按需更新当前组合 new_combination。// 上述可能使用for遍历选择列表 或者使用 if更新。for (选择列表) { // 或者if。// 1: 定义返回的结果集合res。if (满足题目要求的目标) {// 4: 结束 return。// 3: 撤销选择。// 3: 调用回溯函数。

2023-03-20 22:32:29 219

原创 链表 算法

/ 新的尾指向当前cur (或者写为 pre->next->next = tail) 当前cur 指向了当前后驱tail。// 头节点就是倒数第k个节点 之后返回头节点的下一个节点,实现删除目标节点。约瑟夫环: cur指向头节点,找到目标节点后,删除节点。更新新的头节点head,cur重新指向新的头节点。(快慢指针问题: (1)求是否为环, (2)求环的起点, (3)求倒数第k个节点) (4)链表的中间节点。// cur_pre为移动的pre。// 不是环 找不到环的起点。// 先指向当前链表的头节点。

2023-03-18 20:01:50 605

原创 剑指Offer算法题(C++)

面试题1:整数除法基础知识:整数的数据类型包括 32位int(-2^31 ~ 2^31 -1) , 16位short (-2^15 ~ 2^15 -1)思路: 一个很直观的想法是基于减法实现除法。例如,为了求 19/2 可以从 19 中不断减去 2,那么减去 9 个 2 以后就剩下 1,可以得到 19/2 = 9,但是效率很低,当被除数是 n,除数是 1 的时候,算法复杂度最差为 O(n)。如果将上述解法做一些调整,当被除数大于除数时,继续判断是不是大于除数的 2 倍? 4 倍? 8 倍?....如果被除数

2022-06-19 16:39:45 395

原创 C/C++ 二维数组使用

1: 二维数组的初始化(1) C风格,数组的自动分配方式。这种方式内存在栈上申请,不用手动销毁内存。注意:数组维度不能太大,否则会爆栈溢出;同时数组元素访问\赋值注意数组越界问题。const int row = 2;const int col = 3;int arr[row][col]; // 编译器识别的类型是 int(*)[3](2) C风格,malloc手动分配方式。这种方式内存在堆上申请,用完需要free手动销毁内存。如果不销毁,会造成内存泄漏。const int row = 2;const int

2022-06-08 10:47:54 701

原创 二叉树 算法

树:基本概念:数据结构与算法-树_Evan_L的博客-CSDN博客_数据结构与算法 树树的算法求解本质上:是递归运算树的遍历:前序:根左右;中序:左根右;后序:左右根1: 二叉树的中序遍历思路: 递归、 左根右.................................

2022-06-06 10:49:23 370

原创 栈/队列常见面试算法题(C++实现)

1: 实现最小栈思路: 建立两个栈,一个栈用来存放数据;一个栈用来存放当前最小栈。最小栈就是: 栈底到栈顶,元素递减,栈底元素最大,栈顶元素最小。2: 栈实现队列;思路: 一个栈存放栈数据;一个栈存放队列数据。栈到队列是通过栈顶出栈压入另一个栈实现。........................

2022-06-03 18:05:38 465

原创 链表面试常见考题(C++实现)

链表2: 单链表实现约瑟夫环约瑟夫环问题: 围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。思路:利用单链表数据结构,每次找到目标节点,之后将该节点从链表移除。更新当前的头节点,再次遍历寻找目标节点,之后剩下一个节点为止。3: 逆置/反转单链表反转链表: 1 2 3 4 5 反转

2022-05-31 21:08:06 630

原创 快速入门PostgresSQL

一: 访问数据1: psql的使用psql --help 查看命令行使用帮助eg: psql连接数据库例子:psql -h 127.0.0.1 -p 12345 -U postgres -d postgres2: 使用select语句(1)查看select 语法:postgres=# \h select(2) select 常用语法介绍[1] 别名postgres=# select 'nihao' as col_alias ----列别名...

2022-04-25 17:47:40 2549

原创 PostgreSQL 数据库性能

1:数据库性能常用的度量指标(1)运行时间 run time(2)QPS:Queries Per Second意思是“每秒查询率”,是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。(3)TPS:是TransactionsPerSecond的缩写,也就是事务数/秒。它是软件测试结果的测量单位。一个事务是指一个客户机向服务器发送请求然后服务器做出反应的过程。客户机在发送请求时开始计时,收到服务器响应后结束计时,以此来计算使用的时间和完成的事务个数..

2022-04-22 11:34:45 7166

原创 PostgresSQL 使用实践

1: 常见的系统表和系统视图(1)显示所有的系统表\dt pg_*表名字 用途pg_class 表、索引、序列、视图(“关系”)pg_database 本集群内的数据库pg_index 附加的索引信息pg_proc 函数和过程pg_trigger 触发器pg_type 数据类型(2) 显示所有的系统视图\dv pg_*视图名 用途pg_cursors 打开的游标pg_locks 当前持有的锁pg_roles...

2022-04-21 22:15:40 2177

原创 Postgres 词法分析和语法分析

1: 基本概念postgres数据库将用户输入的sql命令作为字符串传递给查询分析器,并对其进行词法分析和语法分析,最后生成分析数。2: 使用工具词法分析和语法分析是由Unix工具Yacc和Lex制作的。具体使用的是Bison和Flex。3:postgres相关的文件[1] kwlist.h: 声明keyword列表(包括保留关键字和非保留关键字)。具体的:keyword: (name, token_value,category)。[2] kwlookup.cpp: 定义Scan

2022-02-26 14:26:59 1467

原创 Postgres 之 Bison编译相关学习

bison编译学习1:在实现时,bison 会创建一组状态,每个状态用来表示规则中的一个可能位置,同时还会维护一个堆栈,这个堆栈叫做分析器堆栈 (parser stack)。每次读入一个终结符 (token),它会将该终结符及其语意值一起压入堆栈,把一个 token 压入堆栈通常叫做移进 (shifting)。当已经移进的后 n 个终结符可以与一个左侧的文法规则相匹配时,这个 n 各终结符会被根据那个规则结合起来,同时将这 n 个终结符出栈,左侧的符号如栈,这叫做归约 (reduction)。2

2022-02-20 14:09:12 666

原创 C++ 编程技巧

1:vector<int> res // 用vector声明一个数组, 元素为int类型unordered_map<int, int> m // 用unordered_map声明一个无序map, key为int, val为intres.size() // vector用.size()去求解大小或去计算元素个数m.count(key) // 查找hash_map中有没有这个key-val,返回个数res.push_back(i) // 向容器res尾部插......

2021-07-28 22:41:19 579

原创 git常见使用命令

1: 什么是githttps://www.cnblogs.com/jjlee/p/10305194.html2: git安装(1)直接从比的主机拷贝一个过来(2)linux: yum安装 (3) windows: 直接现在界面版本安装git3: 创建代码文件路径并配置git权限git config --global user.name "XXXX"git config --global user.email 邮箱git config -lssh-keygen -t .

2021-07-28 20:05:21 196

原创 linux 常用命令

单调栈的代码实现框架#define MAX_NUM 1432int theNextMaxEle(int* nums int numsSize){ int top = -1; // 初始化栈顶指针 // 生成一个数组式的栈空间,把初始值赋值为-1 int* stack = (int*)calloc(MAX_NUM, sizeof(int)); // 临时变量cur,记录当前的出栈的栈顶元素 int cur = 0; // result可以记...

2021-07-28 19:08:49 930

原创 Leetcode 算法题学习链接

转载:https://www.cnblogs.com/grandyang/p/4606334.html

2021-07-09 20:08:30 558 1

原创 Linux 信号处理

分布式系统的一致性: 集群中多个节点状态达成一致,保证在物理环境可靠场景下,可以将集群中的多个节点视为一个整体。Paxos、Raft等一致性协议可以保证集群中大多数节点可用状态下、集群能够提供正确的输出。这里“大部分节点可用”指的是超过半数的节点可用,对外体现整个集群可用。常见的一致性算法: Paxos:1990年提出,基于消息传递、具有高度容错特性的一致性算法。Raft协议之Leader选举: 1:Raft协议的工作模式: Lea...

2021-07-06 19:40:10 775

原创 基于linux shell的自动化脚本

1:**linux shell中常用的特殊变量** (1) $@ 所有参数列表。如"$@" , 是传给脚本的所有参数的列表 (2) $0 是脚本本身的名字,$1是传递给该shell脚本的第一个参数 (3) $? 最后运行的命令的结束代码(返回值), 或函数的返回值。 (4) $$ shell本身的PID(ProcessID)2: **shell 脚本的第一行**#!/bin/bash此脚本使用/bin/bash来解释执行,#!是特殊的表示...

2021-07-02 14:05:37 311

原创 PostgreSQL的WAL基本原理

1:tcp是如何保证可靠性,以及的建立连接和断开连接(1)序列号、确认应答、超时重传(2)窗口控制(3)拥塞控制2:

2021-06-29 21:28:42 2655

原创 PostgreSQL内核技术--基础概览

一: 一些基本概念:1: 数据库集簇(database cluster) : 一组数据库(databse)的集合。2: 数据库对象: 存储或引用数据的数据结构。

2021-06-19 12:28:38 2407

原创 Postgresql基础sql

#创建数据库create database my_db1;create database tpcc with template=tmplate0 encoding='UTF8' owner hh;#查看已经存在的数据库\l#进入某数据库\c+ 数据库名#删除数据库drop database my_db1; #系统目录项并且删除包含数据的文件目录,只有超级用户和数据库管理人员可以执行#创建表格create table company( id int primary key.

2021-05-18 14:04:20 249 1

原创 操作系统相关基础知识

1:进程和线程有什么区别:进程是系统进行资源调度和分配的基本单位。用于实现操作系统的并发。线程是进程的子任务,是cpu调度和分配的基本单位。用于实现进程的并发。一个线程只能属于一个进程,一个进程可以有多个线程。进程在执行过程中,拥有独立的内存单元。而多个线程共享进程的内存。共享代码段(代码和常量)、数据段(全局变量和静态变量)、扩展段(堆)。但是每个线程拥有自己的栈段,用来存放自己的局部变量和临时变量。进程切换的开销大于线程切换的开销:线程切换只需要保存和设置少量寄存器内容,而进程的切换涉

2021-05-07 23:00:21 200

原创 C语言---leetcode每日一题(1)

556. 下一个更大元素 III给你一个正整数n ,请你找出符合条件的最小整数,其由重新排列 n中存在的每位数字组成,并且其值大于 n 。如果不存在这样的正整数,则返回 -1 。注意 ,返回的整数应当是一个 32 位整数 ,如果存在满足题意的答案,但不是 32 位整数 ,同样返回 -1 。示例 1:输入:n = 12输出:21示例 2:输入:n = 21输出:-1提示:1 <= n <= 231 - 1思路:看到题目后,有几个关键点: 1...

2021-03-28 17:10:56 492

原创 C语言数据结构与算法 ---滑动窗口

框架:滑动窗口的基本实现框架int FindSubArry(char* nums){ int start = 0; // 左指针,用于在不满足条件场景下的滑动窗口收缩,被迫移动 int end = 0; // 右指针,用于滑动窗口的向前移动,主动移动 // [start, end] 用于保存当前有效的遍历区间 int res = 0; // 存放结果 int len = strlen(nums); // 这个长度也是最后end移动的边界值(数组或字符串的长度)

2021-03-23 10:05:01 1570

原创 Linux 内核网络收发数据的基本原理

linux数据通信的基本流程1: 数据包到网卡设备2:网卡设备依据配置进行DMA操作3:网卡发送中断,唤醒处理器4:驱动软件填充读写缓存区的数据结构5:数据报文到达内核协议,进行高层处理6:如果最终应用在用户态,数据从内核态拷贝到用户态7:如果最终应用在内核态,在内核态继续运行NAPI机制:系统被中断唤醒后,尽量使用轮询的方式一次处理多个数据包,直到网络再次空闲重新传入终端等待。以往是每个报文就会触发一个中断,带来大量的开销。优点:适用于高通吐、内核处理:网络包,进.

2021-02-05 19:45:24 491

原创 Python数据结构与算法系列---双指针

双指针主要用于数组遍历,两个指针指向不同的元素,从何协同完成任务1:两数之和 II - 输入有序数组输入: numbers = [2, 7, 11, 15], target = 9输出: [1,2]解释: 2 与 7 之和等于目标数 9 。因此 index1 = 1, index2 = 2 。class Solution(object): def twoSum(self, numbers, target): """ :type numbers: Li

2021-01-31 15:45:08 394

原创 Python数据结构与算法---数组(二)

1:买卖股票的最佳时机 II输入: [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。 随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6-3 = 3 。思路: 贪心法class Solution(object): def maxProfit(self, prices)...

2021-01-25 21:35:16 191

原创 C语言Leetcode每日记录

1: 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 【21】示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4/*server.c*/#include <stdio.h>#include <stdlib.h>#include <string.h>#include <stdbool.h>typede

2020-12-22 12:01:05 337

原创 利用C库qsort函数对二维数组进行排序

C 库函数void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*))对数组进行排序。base-- 指向要排序的数组的第一个元素的指针。 nitems-- 由 base 指向的数组中元素的个数。 size-- 数组中每个元素的大小,以字节为单位。 compar-- 用来比较两个元素的函数。代码Demo/*server.c*/#include <st...

2020-12-22 11:03:26 1449

原创 C语言你不得不知道的小知识

C语言你不得不知道的小知识:1: 常见的变量修饰关键字:static、const、extern、volatile、registerstatic:(该变量保存在全局静态区)a.修饰局部变量——>会提升局部变量的生存周期(此时局部变量可以理解为全局变量)b.修饰全局变量——>作用域被限制——>被限制到当前的原文件中 c.修饰函数——>作用域被限制——>被限制到当前的原文件中const:(该变量保存在常量区)1.声明常变量,,使得指定的变量不能被修改。2.修饰函数.

2020-12-21 11:52:06 321

原创 linux之Socket编程基础篇

socket编程是在tcp/IP上的网络编程1:tcp 三次握手请查看链接https://blog.csdn.net/panker2008/article/details/46502783 (看清tcp 和 socket, 讲解的很好)hit-alibaba.github.io/interview/basic/network/TCP.htmlhttps://blog.csdn.net/lengxiao1993/article/details/82771768 (让你看清三次握手)2:基本.

2020-11-30 10:28:12 357

原创 Linux系统调优常用的命令

1,top常用选项:-p <pid> 持续跟踪某一进程的状态;常用操作指令:数字键1:展开所有cpu的状态;shift+< 或者 shift+> : 切换排序的参照字段,向左或者向右;特殊用法,用于持续跟踪:把输出结果重定向到文件:top -n 1 -b | head -30 > top.log(或者用htop)2,sar (由 sysstat 包提供,操作系统可能不自带)我习惯上用来监控网卡流量(-n):用法: sar -n EDEV 1(采样间隔

2020-11-27 15:56:24 531

原创 C语言数据结构与算法----数组

1:盛水最多的容器/*server.c*/#include <stdio.h>#include <stdlib.h>#include <string.h>#include <stdbool.h>#define MIN(x, y) (((x)>(y))?(y):(x))int maxArea(int* height, int heightSize){ int left = 0; int right = heightS

2020-11-20 09:17:49 206

原创 C语言数据结构与算法--栈

1:逆波兰表达式:逆波兰表达式(Reverse Polish Notation):有效的运算符包括 +, -, *, / 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。输入: ["2", "1", "+", "3", "*"]输出: 9解释: ((2 + 1) * 3) = 9分析:栈遍历数组,逐渐压入栈中,如果遇到运算字符,则弹出栈顶两个元素,之后将计算结果再压入栈中/*server.c*/#include <stdio.h>#include <std

2020-11-17 14:59:29 161

原创 C语数据结构与算法--字符串

1:无重复字符的最长子串输入: "abcabcbb"输出: 3解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: "pwwkew"输出: 3解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。 请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。 思路:一次遍历;同时建立字...

2020-11-16 15:41:05 200

原创 gdb的简单实用介绍

gdb调试:0: gdb的功能:(0-1):启动你的程序,可以按照你自定义的要求随心所欲的运行程序。(0-2):可以让调试程序在你所指定的位置的断点处停止。(0-3):当程序停止时,可以检查此时你的程序中所发生的事情。(0-4):动态的改变你程序的执行环境。1:编译生成执行文件:(linux下)gcc -g test.c -o testcpp (C++下 g++ -g test.c -o testcpp)2:gdb启动方式: 以下的testcpp为执行文件 (2-....

2020-11-14 20:26:02 1837

原创 C语言数据结构与算法--两数相加

/*server.c*/#include <stdio.h>#include <stdlib.h>#include <string.h>// Definition for singly-linked list.struct ListNode { int val; struct ListNode* next;};typedef struct ListNode ListNode;ListNode* addTwoNumbers(List.

2020-11-14 18:55:54 541

空空如也

空空如也

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

TA关注的人

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