- 博客(46)
- 收藏
- 关注
原创 I/O复用
文章目录select系统调用epoll系统调用select系统调用select:在一段时间内,监听用户感兴趣的文件描述符上可读、可写和异常等事件。#include<sys/select.h>int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);参数:nfds:指定被监听的文件描述符的总数。通常为select监听的所有文件描述符中的最大值+
2021-04-04 20:40:12
157
原创 Linux网络编程基础API
文章目录socket基础编程TCP Server的基本步骤socket基础编程TCP Server的基本步骤创建socket,指定使用TCP协议// create a tcp socketsocket_fd = socket(AF_INET, SOCK_STREAM, 0);if(socket_fd==-1){ perror("create socket error"); exit(1);}设置socket:// set option of socketret = setsoc
2021-04-04 10:19:02
182
原创 leetcode——32. 最长有效括号
给你一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长有效(格式正确且连续)括号子串的长度。示例 1:输入:s = “(()”输出:2解释:最长有效括号子串是 “()”示例 2:输入:s = “)()())”输出:4解释:最长有效括号子串是 “()()”示例 3:输入:s = “”输出:0提示:0 <= s.length <= 3 * 104 s[i] 为 ‘(’ 或 ‘)’将无法匹配的括号的位置标记为1,可以匹配的括号的位置标记为0,如“( ( [
2021-03-29 17:16:17
187
原创 leetcode——20. 有效的括号
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。示例 1:输入:s = “()” 输出:true示例 2:输入:s = “()[]{}” 输出:true示例 3:输入:s = “(]” 输出:false示例 4:输入:s = “([)]” 输出:false示例 5:输入:s = “{[]}” 输出:true提示:1 <=
2021-03-29 16:21:22
171
原创 leetcode——141. 环形链表
给定一个链表,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。如果链表中存在环,则返回 true 。 否则,返回 false 。进阶:你能用 O(1)(即,常量)内存解决此问题吗?示例 1:输入:head = [3,2,0,-4],
2021-03-29 13:36:20
129
原创 leetcode——169. 多数元素
给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入:[3,2,3] 输出:3示例 2:输入:[2,2,1,1,1,2,2] 输出:2进阶:尝试设计时间复杂度为 O(n)、空间复杂度为 O(1) 的算法解决此问题。首先想到的就是用hash表,但是题干中没有对n进行限制,说明n会是一个很大的数,那么新建一个数组,遍历给的vector,将对应的值记录到对应的下标中
2021-03-29 13:20:02
104
原创 leetcode——15. 三数之和
给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。示例 1:输入:nums = [-1,0,1,2,-1,-4]输出:[[-1,-1,2],[-1,0,1]]示例 2:输入:nums = []输出:[]示例 3:输入:nums = [0]输出:[]提示:0 <= nums.length <= 3000-1
2021-03-28 22:44:37
93
原创 关于数组和链表的几个必知必会的代码实现
#include<iostream>using namespace std;class DArray {private: int *da; // 指向分配的内存空间 int size; // 当前数组的真实大小 int capacity; // 允许的最大元素数,即预分配的内存空间public: DArray(); void Expand(); // 扩容 void Push(int value); //向尾端push元素 void Display(); //
2021-03-28 16:26:19
245
原创 leetcode——11. 盛最多水的容器
给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器。示例 1:输入:[1,8,6,2,5,4,8,3,7]输出:49解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。示例 2:输入:heig
2021-03-28 13:28:30
91
原创 数据结构与算法之美学习笔记——复杂度分析
文章目录时间复杂度时间复杂度分析几种常见时间复杂度实例分析空间复杂度分析小结最好、最坏情况时间复杂度平均情况时间复杂度为什么需要复杂度分析?1.测试结果非常依赖测试环境2.测试结果受数据规模影响很大时间复杂度需要一个不用具体的测试数据来测试,就可以粗略估计出算法的执行效率的方法——时间、空间复杂度分析方法。例1:int cal(int n) { int sum = 0; int i = 1; for (; i <= n; ++i) { sum = sum + i;
2021-03-26 20:14:50
196
原创 思科Cisco Packet Tracer仿真实验——访问Web服务器
放置一台主机、一台服务器,并用自动连线相连。给PC主机设置IP地址:给服务器配置IP地址:打开仿真模式,隐藏其他网络协议,只显示HTTP协议:点击Misc,选择HTTP。打开计算机中的浏览器,输入服务器的IP地址。点击右侧的捕获/前进按钮,在右上侧的事件列表中,查看详情。再次点击捕获/前进,服务器收到HTTP请求。...
2021-03-23 22:16:58
9023
原创 HTTP和HTTPS
HTTP:Hypertext Transfer Protocol,超文本传输协议。HTTP是用于在互联网上查看网页的协议。在标准HTTP中,所有信息都以明文发送,在计算机与网页服务器之间交换的所有信息,都通过公共的互联网进行传输,由于它们是明文传输的,因此很容易受到黑客的攻击。如果要输入个人敏感数据,这些敏感数据从计算机出发,必须经过公共的互联网才能达到网页服务器。HTTPS:Secure Hypertext Transfer Protocol,安全超文本传输协议,这是带有安全特性的HTTP。安全HTT
2021-03-23 21:57:22
150
原创 排序学习
文章目录归并排序快速排序分治:把一个任务,分成形式和原任务相同,但规模更小的几个部分任务,分别完成。归并排序数组排序任务可如下完成:把前一半排序把后一半排序把两个归并到一个新的有序数组,然后再拷贝回原数组#include<iostream>using namespace std;void Merge(int a[], int s, int m, int e, int tmp[]){// 将数组a的局部a[s,m]和a[m+1,e]合并到tmp,并保证tmp有序,然后再拷
2021-03-23 21:13:41
119
原创 数据结构——树
文章目录二叉树存储结构二叉树的遍历先序遍历中序遍历后序遍历层序遍历队列实现二叉树存储结构typedef struct TreeNode *BinTree;typedef BinTree Postion;struct TreeNode{ ElementType Data; BinTree Left; BinTree Right;}二叉树的遍历先序遍历遍历过程:①访问根结点②先序遍历其左子树③先序遍历其右子树void PreOrderTraversal(BinTree BT
2021-03-22 23:05:20
223
3
原创 MySQL学习笔记——索引
文章目录基础操作常见的索引模型哈希表有序数组二叉搜索树InnoDB 的索引模型基于主键索引和普通索引的查询有什么区别?索引维护覆盖索引MySQL索引可以大大提高MySQL的检索速度。索引的出现其实就是为了提高数据查询的效率,就像书的目录一样。对于数据库的表而言,索引其实就是它的“目录”。基础操作创建索引:create index index_name on table_name(column_name);修改表结构(添加索引):alter table tablename add index
2021-03-18 23:59:13
114
原创 数据结构——线性结构
文章目录线性表线性表的顺序存储实现线性表的链式存储实现广义表多重链表堆栈线性表线性表:由同类型数据元素构成有序序列的线性结构。List MakeEmpty(); // 初始化一个空线性表ElementType FindKth(int K, List L); // 根据位序K,返回相应元素int Find(ElementType X, List L); // 在线性表L中查找X的第一次出现位置void Insert(ElementType X, int i, List L); // 在位序i前插入
2021-03-18 22:39:14
303
原创 MySQL实战45讲学习笔记——基础篇
文章目录基础架构连接器查询缓存分析器优化器执行器日志系统日志模块:redo log日志模块:binlog两阶段提交事务隔离隔离性与隔离级别索引索引的常见模型哈希表有序数组二叉搜索树InnoDB 的索引模型索引维护覆盖索引最左前缀原则索引下推基础架构执行下面这个查询语句时:myql> select * from T where ID=10;MySQL 可以分为 Server 层和存储引擎层两部分。Server 层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖 MySQL 的大多数核心
2021-03-17 22:53:46
212
原创 C++学习笔记——多态
文章目录虚函数多态多态的表现形式一——基类指针多态的表现形式二——基类引用多态的作用多态实例:魔法门之英雄无敌非多态的实现方法多态的实现方法多态实例:几何形体程序虚函数在类的定义中,前面有virtual关键字的成员函数就是虚函数。class base{ virtual int get();};int base::get() {}virtual关键字只用在类定义里的函数声明中,写函数体时不用。构造函数和静态成员函数不能是虚函数。虚函数可以参与多态,普通成员函数不能。多态多态的表现形式一
2021-03-16 23:30:43
198
原创 C++学习笔记——继承
文章目录继承和派生的概念派生类的写法派生类对象的内存空间继承关系和复合关系派生类覆盖基类成员类的保护成员派生类的构造函数继承和派生的概念继承:在定义一个新的类B时,如果该类与某个已有的类A相似,那么就可以把A作为一个基类,而把B作为基类的一个派生类(也称子类)。· 派生类是通过对基类进行修改和扩充得到的(可以扩充新成员变量与成员函· 数)。· 独立使用不依赖于基类。· 派生类有基类的全部成员函数和变量(private、protected、public)。· 派生类的各个成员函数中,不能访问基类中
2021-03-16 21:07:54
112
原创 C++学习笔记——面向对象的程序设计
文章目录面向对象的程序设计类成员的可访问范围成员函数的重载及缺省参数构造函数复制构造函数面向对象的程序设计面向对象的程序设计方法:· 将某类客观事务共同特点(属性归纳出来),形成一个数据结构;· 将这类事务所能进行的行为也归纳出来,形成一个个函数。面向对象的程序设计的四个基本特点:抽象、封装、继承、多态。类的成员函数和类的定义分开写class CRectangle{public: int w,h; int Area(); int Perimeter(); void Init(int
2021-03-16 16:29:19
173
原创 C++学习笔记——c++基础
文章目录引用const关键字动态内存分配内联函数函数重载函数的缺省参数引用定义一个引用,并将其初始化为引用某个变量:int n = 4;int &r = n;某个变量的引用,等价于这个变量,相当于该变量的一个别名。改变n或r,r或n同步改变。定义引用时一定要初始化成某个变量。初始化后,它就一直引用某个变量,不会再引用其他变量。引用只能引用变量。交换两个变量的值:void swap(int &a, int &b){ int temp; temp=a;a=
2021-03-16 11:34:18
287
1
原创 potree入门踩坑记录
potree是一种基于WebGL的点云数据可视化方案,可以将点云数据再web上渲染成3d模型。是一套基于Three.js的开源系统。github地址:Potree:https://github.com/potree/potree PotreeConverter:https://github.com/potree/PotreeConverter Potree起步:https://github.com/potree/potree/blob/master/docs/getting_started.m
2021-01-12 11:48:11
1563
1
原创 关于flask_login的使用以及循环导入的问题
Flask-Login提供Flask的用户会话管理。它处理登录,注销和记住用户会话的常见任务。flask-login主要有几点功能:在session中记录用户id,完成登录与注销功能;进行登录/注销限制访问视图;保护cookie。安装:$ pip install flask-login使用flask-login首先要创建LoginManager实例:login_manager = LoginManager()如我是在app文件夹中的__init__.py文件中进行创建的。from
2021-01-10 17:33:33
427
原创 Flask Web开发——(二)模板
视图函数的作用是生成请求的响应。很多情况下,请求会改变应用的状态,而这种变化就发生在视图函数中。以用户在网站中注册新账户的过程为例。用户在表单中输入电子邮件地址和密码,然后提交。服务器接收到包含用户输入数据的请求,然后Flask把请求分派给处理注册请求的视图函数。这个视图函数访问数据库,添加新用户,生成响应回送浏览器,指明操作成功/失败。这两个过程分别为业务逻辑和表现逻辑。视图函数里包含函数和HTML代码,但这两部分在一起会影响理解和维护,所有用模板来保存HTML代码。模板是包含响应的文本文件,其中包
2020-12-24 17:42:41
304
5
原创 Flask Web开发——(一)应用的基本结构
一、初始化所有Flask应用都必须创建一个应用实例。Web服务器使用WSGI协议,把自客户端的请求转交给这个对象处理。应用实例是Flask类的对象:from flask import Flaskapp = Flask(__name__)Flask应用__name__参数确定应用的位置,进而找到应用中其他文件的位置,如图像和模板。二、路由和视图函数客户端把请求发送给Web服务器,Web服务器再把请求发送给Flask应用实例。应用实例需要知道对每个URL的请求要运行哪些代码,所有保存了一个UR
2020-12-24 17:30:41
404
1
原创 TCP/IP网络编程——Hello World! 服务器&客户端
Linux环境下:hello_server.c#include<stdio.h>#include<stdlib.h>#include<string.h>#include<unistd.h>#include<arpa/inet.h>#include<sys/socket.h>void error_handling(char *message);int main(int argc, char *argv[]){
2020-10-29 22:57:15
477
原创 chmod、fchmod和fchmodat函数
chmod、fchmod和fchmodat,可更改现有文件的访问权限。#include<sys/stat.h>int chmod(const char *pathname, mode_t mode);int fchmod(const char *pathname, mode_t mode);int fchmodat(int fd, const char *pathname, mode_t mode, int flag);chmod在指定的文件上进行操作。fchmod对已打开的文件进
2020-10-29 22:56:12
673
原创 access和faccessat函数
access和faccess函数按实际用户ID和实际组ID进行访问权限测试。#include<unistd.h>int access(const char *pathname, int mode);int faccess(int fd, const char *pathname, int mode, int flag);参数:pathname:文件路径名mode:要测试的操作模式mode说明F_OK测试是否存在R_OK测试读权限W_OK测试写
2020-10-29 22:27:28
805
原创 read和write函数
调用read函数从打开文件中读数据。#include<unistd.h>ssize_t read(int fd, void *buf, size_t nbytes);参数:fd:文件描述符buf:读取的数据缓存区nbytes:要写入的字节数返回值:读到的字节数,若已到文件尾,返回0;若出错,返回-1.#include<fcntl.h>int main(){ int f = open("test.txt",O_RDONLY); char buf
2020-10-29 21:16:43
979
原创 open、openat和close函数
调用open或openat函数可以打开或创建一个文件。#include<fnctl.h>int open(const char *path, int oflag,.../* mode_t mode */);int openat(int fd, const char *path, int oflag, .../* mode_t mode */);参数:path:要打开或创建的文件。oflag:用来说明此函数的多个选项,由指定的一个或多个常量进行“或"运算构成oflag参数。读写模式
2020-10-29 14:50:21
712
原创 python asyncio异步编程一个简单的例子理解
协程(Coroutine),也可以称为微线程,是一种用户态内的上下文切换技术,其实就是通过一个线程实现代码相互切换执行。对于for循环,是一个个按顺序执行,只有执行完当前的任务,才能执行下一个,如:for i in range(5): print(1) time.sleep(2) print(2)这里的time.sleep(2)就好比在网络中发送出一个请求后,等待响应的过程,如果是传统的for循环,这2s的时间就只是在等待响应,而无法进行其他工作。但如果工作量大或者等待响应的时间过长,就可能造
2020-08-02 15:55:39
412
原创 Flask models分离管理
1.分开models的目的:为了让代码更方便管理2.如何解决循环引用:把db放在一个单独的文件中,切断循环引用的线条就可以了。app.pyfrom flask import Flaskfrom flask_sqlalchemy import SQLAlchemyfrom exts import dbimport configapp = Flask(__name__)app.config.from_object(config)db.init_app(app)db.create_all
2020-07-28 14:42:36
355
原创 Flask-SQLAlchemy学习笔记
SQLAlchemy初始化和数据库连接:这个配置比较多,因为不像狗书和狼书中,使用的是sqlite3,更轻量级配置简单;这个教程使用的是mysql所以需要配置mysql的账户密码等等信息,就像pymysql一样。1.初始化和设置数据库配置信息:使用flask_sqlalchemy中SQLAlchemy进行初始化:from flask_sqlalchemy import SQLAlchemyapp = Flask(__name__)db = SQLAlchemy(app)2.设置配置信息:在c
2020-07-27 17:52:48
286
原创 Flask中的cookie&session
cookie:http是无状态协议,即在一次请求后,服务器不会留下任何关于对方的信息。但对于一些Web程序来说,客户端的某些信息又必须要被记住。Cookie技术通过在请求和响应报文中添加Cookie数据来保存客户端的状态信息。如果服务器返回了cookie给浏览器,那么浏览器下次再请求相同的服务器的时候,就会自动把cookie发送给浏览器,用户就不需要操作了。cookie保存在浏览器中,相对的是浏览器。session:cookie存储在本地浏览器,session存储在服务器。session更加安全。敏
2020-07-26 00:02:52
121
原创 Flask Web使服务器外部可见&改变默认端口
from flask import Flaskapp = Flask(__name__)@app.route('/')def hello_world(): return 'Hello World!'if __name__ == '__main__': app.run( host='0.0.0.0', # 使服务器外部可见 port=8000, # 改变默认端口为8000 debug=True
2020-07-25 14:02:31
378
原创 flask-vue实现留言板功能
代码地址:https://github.com/anRank/message_board.git后端flask:import osimport stringfrom flask_sqlalchemy import SQLAlchemyfrom flask import Flask, render_template, url_for, request, flashimport sqlite3 as sqlimport randombasedir = os.path.abspath(os.p
2020-07-24 23:32:41
486
原创 linux运行py文件的pip与pip3
今天在Linux上跑一个flask项目时,遇到了一个问题,它提示我缺少flask_sqlalchemy这个库。于是我用pip install flask_sqlalchemy下载了一下,提示我还是缺少,后来试了几次才发现,pip install下载的是python2的第三方库,但我要使用的是python3的第三方库,所以说,如果python项目使用python3,则要使用:pip3 install ******如果使用python2,则使用:pip install ******...
2020-07-24 20:39:19
177
原创 Linux vim编辑器颜色显示
命令行语法高亮:vim .bashrc在文件末尾加上:PS1='[\[\e[33;40m\]\u@\h \w \t]$ 'PS1="\[\e[37;40m\][\[\e[33;40m\]\u\[\e[37;40m\]@\h \[\e[36;40m\]\w\[\e[0m\]]\\$ " vim编辑器语法高亮:vim .vimrc在文件末尾加上:set hlsearchset backspace=2set autoindentset rulerset showmodeset bg
2020-07-08 16:39:21
627
原创 1004 成绩排名
读入n(>0)名学生的姓名、学号、成绩,分别输出成绩最高和成绩最低学生的姓名和学号。输入格式:每个测试输入包含 1 个测试用例,格式为第 1 行:正整数 n第 2 行:第 1 个学生的姓名 学号 成绩第 3 行:第 2 个学生的姓名 学号 成绩 ... ... ...第 n+1 行:第 n 个学生的姓名 学号 成绩其中姓名和学号均为不超过 10 个字符的字符串,成绩为 0 到 100 之间的一个整数,这里保证在一组测试用例中没有两个学生的成绩是相同的。输出格式:.
2020-06-19 23:53:01
135
原创 1003 我要通过!
“答案正确”是自动判题系统给出的最令人欢喜的回复。本题属于 PAT 的“答案正确”大派送 —— 只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”。得到“答案正确”的条件是:字符串中必须仅有P、A、T这三种字符,不可以包含其它字符; 任意形如xPATx的字符串都可以获得“答案正确”,其中x或者是空字符串,或者是仅由字母A组成的字符串; 如果aPbTc是正确的,那么aPbATca也是正确的,其中a、b、c均或者是空字符串,或者是仅由字母A...
2020-06-19 00:57:41
105
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人