- 博客(79)
- 收藏
- 关注
原创 Python爬虫
爬虫——按照一定的规则,自动获取网页信息爬虫的基本原理——通用框架选取种子URL将这些URL放入待抓取的URL队列取出待抓取的URL,下载并存储到已下载网页库中;此外,将这些URL放入已抓取URL队列中爬虫的基本流程向服务器发送请求,会得到对应的页面解析页面,抽取我们要的信息,并将信息存储在指定的文档或数据库中...
2018-10-08 15:56:26
295
原创 【练习题】数字和为sum的方法数(动态规划)
1、暴力递归法(会超时,只能通过40%,但方法是对的)从第0个数开始,每个位置可以有两种选择,要or不要,当走到最后位置,如果和==sum,就符合要求#include<iostream>#include<vector>using namespace std;int isSum(vector<int> data, int i, int ...
2018-08-07 10:42:45
1886
原创 【练习题】母牛生牛问题
题目:母牛每年生一只母牛,新出生的母牛成长三年后也能每年生一只母牛,假设不会死。求N年后,母牛的数量。不知如何下手,先列出来看一下 我们从列出来的结果可以得出如图的结论: 今年的就=去年的牛+新生的 只有三年前的才可以生牛,每只生一只,所以新生的牛的数量就==三年前牛的数量...
2018-08-06 10:45:38
1246
原创 【练习题】打印一个字符串的全部子序列,包括空字符串
题目:打印一个字符串的全部子序列,包括空字符串首先明确,子序列!=子串 最长公共子串要求在原字符串中是连续的,而子序列只需要保持相对顺序一致,并不要求连续。例:“abc” 从位置0开始,有两种决策1、要;2、不要 向后走,每个位置同样两种决策,递归递归结束就是走到了字符串最后void printAllSub(string str, int i, string res){...
2018-08-06 10:21:11
1541
原创 【练习题】二叉树的镜像
思路:我们先前序遍历这棵树的每个节点,如果遍历到的节点有子结点,就交换它的两个子节点。当交换完所有非叶子节点的左右节点之后,就得到了树的镜像void merrorTree(Node* root){ if(root==NULL) return; if(root->left==NULL&&root->right==NULL) ...
2018-08-02 16:16:04
155
原创 【练习题】打印1到最大的n位数
题目:输入数字n,按顺序打印从1到最大的n位数。 比如,输入3,打印1、2、3陷阱:n的范围不知道,当输入n很大时,要考虑用int、long long是否会溢出,就转变为了大数问题其实这个问题可以转化为数字排列的问题,用递归来解决全排列 n位数,每一位从1到9,从第一位开始依次向下一位递归void oneTomaxN(int n){ if(n<=0) ...
2018-08-02 12:17:39
175
原创 【练习题】加油站 gas-station
在一条环形路线上有N个加油站,在那里i站的油量为i。 你有一辆装有无限油箱的汽车,从第一站到下一站(i+1)需要耗费[i]的汽油。你从一个加油站的空油箱开始旅程。 如果你可以绕着赛道走一次,就返回启动加油站的指数,否则返回-1。 注意: 解决方案保证是唯一的。这道题是LeetCode上的一道题,这道题并不是一道难题,想明白了,是一道非常简单的题 加油站i有油量...
2018-07-10 15:41:24
226
原创 【练习题】数组全排列
next_permutationclass Solution {public: vector<vector<int> > permute(vector<int>& num) { vector<vector&
2018-07-09 14:07:12
214
原创 【练习题】给定两个整数n和k,返回1 ... n中k个数的所有组合
例: For example, If n = 4 and k = 2, a solution is[ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ] 分析题目:例子中,n=4,k=2;1,2,3,4 两个数一组组合 我们通常的思路就是先选定第一个数,从1开始,然后分别和后面的数组合,1完了,再向后遍...
2018-07-07 15:35:15
4588
原创 MySql查询——Select
数据库的查询,我们从表里选出我们想要的数据,查询结构仍是一个表查询时,我们需要使用select语句,配合fromwhereorder bygroup byhaving出了这些子句使用,还有一些库为我们提供的函数可以使用,增强我们的检索能力avg summaxmincount单标查询一、基本查询(无条件查询)1、查询全体学生的学号、姓名...
2018-06-14 13:54:09
21243
1
原创 STL空间配置器分析
今天阅读了《STL源码剖析》了解了一下stl中空间配置器的原理,一下进行分析总结stl中对于空间的配置与释放 std::alloc 在stl中对象构造前的空间配置和对象释放后的空间释放,是由...
2018-06-07 20:49:00
500
原创 【练习题】——连续最大子数组问题(最简单的解释)
问题描述:输入一个整形数组,数组里有正数也有负数。 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。 求所有子数组的和的最大值。要求时间复杂度为O(n)。例:输入的数组为1, -2, 3, 10, -4, 7, 2, -5, 和最大的子数组为3, 10, -4, 7, 2, 因此输出为该子数组的和18。分析:int maxSum(int* a,...
2018-05-28 15:54:27
958
原创 【OJ】STL——unordered_map/unordered_set
今天打算看一下unordered_map/unordered_set相关接口的使用,这两个函数的底层是用“哈希表+红黑树”,所以相比较map/set,它的查找速率更快,但这两个函数实在C++11中加入的所以有些环境下不能用同样,这两个函数的接口很多,但我们一般用哈希表就是为了迅速的查找,所以只看常用的几个,用法其实和map/set相似1、insert unordered_...
2018-05-27 20:27:48
597
原创 【OJ】STL——String的用法
在回顾库里的string时,get到了很多原来不知道的神奇用法,写出来分享一下,也方便自己的查看,以下都是我觉得在做题中非常使用的,更全面的可以去官方的string全部用法查看1、基础用法字符串可以直接打印、字符串的长度、字符串的访问int main(){ string s = "xiao xuan zi"; cout &l
2018-05-23 15:13:58
262
原创 【OJ】STL——sort的使用
前面学习了排序的相关算法,但在做OJ时,我们可以调用库里的函数 今天总结一下常用的sort的使用std::sorttemplate <class RandomAccessIterator> void sort (RandomAccessIterator first, RandomAccessIterator last);template <class
2018-05-22 15:26:11
332
原创 内存分配的原理
内存分配的原理从操作系统角度来看,进程分配内存有两种方式,分别由两个系统调用完成:brk和mmap(不考虑共享内存)。 1、brk是将数据段(.data)的最高地址指针_edata往高地址推; 2、mmap是在进程的虚拟地址空间中(堆和栈中间,称为文件映射区域的地方)找一块空闲的虚拟内存。 这两种方式分配的都是虚拟内存,没有分配物理内存。在第一次访问已分配的虚拟地址空间的时候,...
2018-05-15 14:16:50
3221
1
原创 插入排序--直接插入&希尔
排序的分类这篇先从插入排序说起直接插入排序顾名思义,就是将一个数直接插入到对的位置,这个算法的思想就像我们打扑克时 我们拿到一个数(抽了一张牌),从后先前,将它插入到对的地方从第一个数开始,这个数可以认为已经被排序取出下一个数, 将这个数插入到前面以有序的序列中如果这个数,小于前面的数,将前面的数向后移动,循环这个动作,知道插入合适的位置//直接插...
2018-05-13 22:31:35
208
原创 位图—海量数据的查找
为什么说位图是应用于海量数据的查找呢?当数据不多时,我们要对一个数据进行查找,通常会用哈希表进行存储进行查找,但当数据很多时,显然对于内存有限的空间是不行的,例如说: 给定40亿个整数,要快速判断一个值是否在这其中? 40亿整数=40亿*4 而整数的范围为0到42亿9千万,内存是肯定不够的,那该如何处理呢?所以有了位图这种方法: 我们存储一个整数要4个字节=32比特位,而我们要查...
2018-05-12 22:41:49
682
原创 UDP网络通信
我们知道UDP的通信有一些缺点,但在某些应用领域,例如,即时消息、实时音频信号,更多的强调时效性,特别是对音视频数据的传输,丢失一个数据包一般不会对画像质量产生太大的影响,因此,面向无连接的UDP同样有自己的市场。UDP通信不关心目的主机是否接收该数据包,以及该数据包是否完整无误地传送给对方。UDP通信过程UDP通信过程: 调用socket()函数。创建socket对象,指定通信协...
2018-05-04 16:45:58
353
原创 浅谈UDP与TCP(上)
UDPUDP是传输层的一种重要协议,UDP本身不提供什么复杂的控制机制,(如果需要可以将部分控制交给应用程序处理)就是利用IP提供面向无连接的通信服务。将应用程序发来的数据在收到的那一刻,立即按照原样发送到网络上,这样可以实现即时通信,传输数据非常快,但是也有很多缺陷,当出现网络拥塞的情况下,UDP无法完成流量控制等避免网络拥塞的行为优点:无连接,快,即时通信 缺点:数据传输不可靠,会...
2018-05-01 20:38:36
217
原创 图解TCP三次握手和四次挥手过程
我们都知道,TCP 传送的数据单位是 TCP 报文段(segment) 那么,我们首先先回顾一下TCP报文段首部的信息 TCP报文段首部解析源端口和目的端口字段——各占 2 字节。端口是传输层与应用层的服务接口。传输层的复用和分用功能都要通过端口才能实现。序号字段——占 4 字节。TCP 连接中传送的数据流中的每一个字节都编上一个序号。序号字段的值则指的是本报文段所发送的数...
2018-04-25 14:26:18
340
原创 归并排序
“归并”将两个或者两个以上的有序序列合并成一个新的有序序列 归并示例:2-路归并排序 2-路归并的操作核心是:将数组中前后相邻的两个有序序列归并为一个有序序列归并排序——“分而治之” 我们想要让整个序列有序,那么就要将它们先分割成小部分,分别管理,然后再合在一起,就能实现整个的有序了。这就像管理一个学校的学生,整体管理不好管理,就将学生分为一个班一个班,各个班管理好了,合并在...
2018-04-24 09:13:20
150
原创 哈希表--HashTable(散列表)
哈希表定义是根据关键字(key)而直接访问内存存储位置的一种数据结构 访问数据的方法是通过一个函数,映射到key值对应的位置,进行数据访问 这个映射函数成为散列函数/哈希函数,存放记录的数组称为散列表/哈希表构造哈希表的几种方法一般常用的就是这两种,其它的就不介绍了直接定址法–取关键字的某个线性函数为散列地址,Hash(Key)= Key 或 Hash(Key)= A...
2018-04-23 11:49:29
235
原创 MySql基本语法【菜鸟学习日记】
1、在Linux首先先进入我的mysql 可以看到已经进入了我的mysql 上面两部也可以合并在一起mysql [-h 主机] -u root -p我刚没有写-h 主机,则默认本地连接; 如果需要登录到另外一个mysql,则需要修改配置,一般情况不让远程登录;如果上面的命令不能进入数据库,可能是没有启动数据库service mysqld start; //启动s...
2018-04-18 21:30:53
189
原创 信号知识整理
信号基础知识首先来说说,信号是什么?信号可以理解为是一种“软中断” 信号可以使一个正在运行的进程被异步打断,然后转而去处理一个突发的事件。常见的几种信号的意思 SIGHUP 关闭终端 SIGINT Ctrl+c SIGQUIT Ctrl+\ SIGKILL 杀死进程 SIGPIPE ...
2018-04-15 09:53:22
229
原创 多线程间的同步与互斥
多线程与临界区多线程想要访问临界区时,就要对临界区进行上锁,这与之前写到的进程互斥是一个道理,这也就是防止共享数据被并发访问的解决方法,这种上锁叫做互斥锁互斥锁互斥锁以排他的方式保护共享数据被并发访问。 因为在线程中,内存地址空间是共享的,就像一个大房子,在这个进程中的线程们都可以进来,当我们某一个线程想做一些事时,不想让其他线程打断,那我们就给门上加个锁,当一个进程进来后,...
2018-04-09 20:33:43
6569
原创 多路复用——select&poll&epoll
select()系统调用 select()函数,提供轮循等待的方式从多个文件描述符中获取状态变化后的状态 int select(int nfds, //socket+1 fd_set *readfds, fd_set *writefds, fd_set *exceptfds, s...
2018-04-09 14:22:08
191
原创 Linux--信号练习
信号的响应有三种方式:响应方式: 1、缺省 2、忽略(有些信号不能被忽略,SIGKILL 、SIGSTOP) 3、捕获信号(SIGKILL 、SIGSTOP 也不能被捕获)安装信号我们就收到信号有相应的处理,但首先我们要先有这个信号才行,所以首先要安装信号 下面来用一下看看:我将Ctrl+c的信号SIGINT进行设置一下,我们按Ctrl+c执行我们自己写的函数,...
2018-04-07 21:43:23
287
原创 线程退出前的资源释放问题
线程退出前的资源释放问题类似于进程的atexit()函数,线程在退出前也可以执行用户显示定义的一些函数。无论是可预见的线程终止还是异常终止,都会存在资源释放的问题,在不考虑因为运行出错而退出的情况下,如何保证线程终止时能顺利的释放掉自己所占用的资源,特别是锁资源。资源独占锁的使用:线程为了访问临界资源而为其加上锁,但在访问过程中被外界取消,如果线程处于响应取消状态,且采用异步方...
2018-04-06 18:24:26
4316
原创 信号量
信号量主要用来实现进程间的同步问题,避免并发访问共享资源在实际应用中,两个进程间通信可能会使用多个信号量,因此Linux在管理是以信号量集来管理 信号量集合使用指针指向一个由数组组成的信号量单元,在此信号量单元中存储了个信号量的值 1、创建信号量集合(semget)2、控制信号量集合、信号量(semctl) 该函数最多可有4个函数。当第三个参数为S...
2018-04-04 13:43:04
239
原创 文件I/O方式比较
1、阻塞式文件I/O 如图所示,一旦进程期望读取数据,就调用read/write函数,进程从调用这些函数开始,一直到返回的这段时间里,都处于阻塞状态。当recv正常返回时,进程继续其它操作这种模式的优点在于操作简单,但整个进程在等待过程中处于阻塞状态,不能申请到CPU执行其它操作2、非阻塞式 如果设置某个文件IO操作为非阻塞I/O,即相当于告诉内核:...
2018-04-04 09:44:48
349
原创 【OJ】STL——复习set、map的常用接口
set&&mapset (K)map(K V)1、multiset与set的区别就是,multiset允许键值重复,multimap同理; 2、set和map的底层都是用红黑树实现的 ;在map里存的是一个pair对象template<c
2018-04-02 20:10:42
254
原创 【OJ】STL——复习vector使用
常用接口 resize&reservevoid resize (size_type n, value_type val = value_type());void reserve (size_type n);reserve只是开空间,resize开空间,并初始化resize 1、当前capacity>resize,则截掉后面的...
2018-04-02 20:09:40
211
原创 Linux--线程【菜鸟学习日记】
线程与进程一样,具有创建、退出、取消和等待等基本操作,可以独立完成特定事物的处理;线程同样有自己的特有属性,如线程也有唯一标识自己的线程ID,但线程占用更少的资源什么是线程?线程的定义简单来说线程就是进程中的一个执行流,更准确来说:线程是“一个进程内部的控制序列”进程是资源竞争的基本单位线程是程序执行的最小单位创建线程int pthread_create(...
2018-03-31 10:58:45
198
原创 进程间通信3--共享内存
共享内存机制主要用于实现进程间大量的数据传输共享内存是在内存中单独开辟的一段内存空间,这段内存空间有自己特有的数据结构,包括访问权限、大小和最近访问的时间等。该数据结构如下图1、创建共享内存(shmget)2、共享内存的控制(shmctl)系统使用shmcl函数来实现共享内存的控制,包括读取状态、设置状态和删除 3、映射共享内存(shmat)...
2018-03-31 09:44:02
133
原创 Socket基础【菜鸟学习日记】
Socketsocket是实现网络主机进程间通信的一种机制。从用户空间来看,socket就是一个文件描述符,对socket的操作等同于对普通的文件描述符操作,可以使用read、write、close函数来操作,一旦针对该socket必要的初始化完成后,与对端的数据交互都是通过该socket来实现的例如:要向对方发送数据,只需要将数据write到该socket; ...
2018-03-31 09:28:06
2401
原创 Linux操作系统的层次
简单来说,Linux操作系统整体分为三层最底层的硬件系统,包括CPU、内存、硬盘、网卡等;硬件系统之上是内核,这是操作系统的核心,负责管理硬件系统,同时为上层的应用程序提供操作接口;用户进程在这表示计算机中运行的所有程序,它们运行于用户空间,由内核统一管理; Linux内核Linux内核采用一种整体式的结构,整个内核是一个独立的、非常大的程序,这样可以使操作系统的各个...
2018-03-29 13:28:06
5589
原创 信号基础知识【菜鸟学习日记】
信号与中断Linux信号是一种进程间异步的通信机制,可以理解为是一种“软中断”。 信号可以使一个正在运行的进程被异步打断,然后转而去处理一个突发的事件。 异步事件是不可预见的,只能通过某些特定的方式来预防,或者说,当该异步事件发生时根据原来设定好的的相应操作去完成。 几种常见信号处理SIGCHLD:子进程退出时会给父进程发送该信号。父进程可以根据该信号来完成对子...
2018-03-29 10:54:53
558
原创 小项目--文件压缩学习记录【菜鸟学习日记】
文件压缩原理(这个小项目要用到的知识:哈夫曼树、堆) 例如我们有一个这样的文档 首先我们要先统计字符出现的次数a-4b-3c-2d-1 然后用其去构造一颗Huffman Tree 利用这颗树生成哈夫曼编码 a : 0 b : 11 c : 101 d : 100 将原文件转换成对应的哈夫曼编码,可以看出将 原文件10个字符转换成了不到3个字符...
2018-03-28 10:55:32
166
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人