- 博客(67)
- 收藏
- 关注
原创 Maven 导入 com.sun.javadoc包
在pom.xml中加入 <dependency> <groupId>com.sun</groupId> <artifactId>tools</artifactId> <scope>system</scope> ...
2019-07-03 14:19:31 4387 2
原创 单链表相交的一系列问题
单链表相交的一系列问题在给定的单链表中,单链表可能有环,可能无环。判断链表是否相交 要求:如果链表1的长度为N,链表2的长度为M,时间复杂度达到了O(M+N),额外空间复杂度为O(1)。这道题需要分析的情况很多,额外空间复杂度O(1)的限制。本题可以拆分为三个子问题,每个问题都可以作为一道独立的算法题,具体如下:问题一:如何判断一个链表是否有环,如果有,返回第一个进入环的节点,没有...
2019-05-09 17:07:23 243
原创 HTTP的缺点和采取的措施
HTTP的缺点和采取的措施1http的主要不足通信使用明文,内容可能会被窃听。不验证通信方身份,可能遭遇伪装。无法证明报文完整性,可能遭到篡改。2http加密处理措施通信的加密:通过SSL(secure socket layer)或者TLS(Transport Layer Security安全传输协议)的组合使用。内容的加密:通过对通信传输内容本身加密,报文主题的内容被加密处理...
2019-05-07 20:07:32 495
转载 Redis的使用场景
Redis使用场景1缓存作为key-value形态的内存数据库,使用Redis缓存数据非常简单,只需要通过String类型将序列化后的对象存起来即可。序列化(Serialization):是将对象的状态信息转化为可以存储或传输的形式的过程。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。不过也有需要注意的地方:必须保证不同对象的key不可以重复,并且key尽量短,...
2019-05-06 22:36:13 3158
原创 InnoDB体系架构
InnoDB体系架构InnoDB是一个单进程多线程的模型。InnoDB存储引擎分为多个内存块,可以认为这些内存块组成了一个大的内存池,负责:维护所有进程/线程需要访问的多个内部数据结构。缓存磁盘中的数据,方便快速的读取,同时对磁盘文件的数据修改之前在这里缓存重做日志(redo log)缓冲…后台线程的作用是负责刷新内存池中的数据,保证缓冲池中的内存缓存是最近的数据。...
2019-05-05 22:17:49 198
原创 Redis之RDB持久化
Redis之RDB持久化1RDB持久化的概念 因为Redis数据库是一个内存数据库,一旦服务器进程退出,那么服务器中的数据库状态也会消失不见,为了解决这个问题,redis提供了RDB(Redis DataBase file)持久化功能。可以将redis中的数据库状态保存到磁盘中,避免数据的意外丢失。2RDB文件的创建和载入 有两个Redis命令可以用于生成RDB文件,一个是SAVE,另...
2019-05-04 15:32:32 174
原创 Redis数据结构之跳跃表
Redis数据结构之跳跃表1.跳跃表的定义跳跃表是一种有序数据结构,通过每个节点中维持多个指向其他节点的指针,从而达到快速访问节点的目的。支持平均O(N),最坏时间复杂度为O(N)复杂度的节点查找,还可以通过顺序性操作批量处理节点。跳跃表在Redis里的用处:一是实现有序集合,另一个是在集群节点中用作内部数据结构。2.跳跃表的实现Redis的跳跃表由zskiplistNode和zski...
2019-04-24 09:50:35 478
原创 Redis数据结构之字典
Redis数据结构之字典字典是一种保存键值对的抽象数据结构。在字典中,一个键可以和一个值进行关联,这些关联的键和值就称为键值对。Redis的数据库就是通过字典作为其底层实现的。对数据库的增删改查都是建立在字典的操作之上。1.字典的实现Redis的字典使用hash表作为底层实现1.1哈希表Redis字典所使用的哈希表结构定义如下typedef struct dictht{ //哈希表...
2019-04-22 21:17:34 131
原创 JVM运行时数据区域划分
JVM运行时数据区域1.程序计数器程序计数器的定义:当前线程所执行的字节码的行号指示器。通过改变计数器的值选取下一条需要执行的字节码指令。分支,循环,跳转,异常处理,线程恢复等基础功能。java虚拟机的多线程通过线程轮流切换并且分配处理器执行时间的方式来实现的。所以线程为了能在切换后恢复正确的执行位置,每个线程都需要有一个独立的程序计数器。因此,程序计数器是线程私有的。2.Java虚拟机...
2019-04-21 17:12:13 116
原创 Redis的数据结构之简单动态字符串SDS
Redis的数据结构-简单动态字符串SDS1.SDS的定义sds结构:struct sdshdr{ //记录buf数组中已经使用的字节数量 //等于SDS中所保存字符串的长度 int len; //记录buf数组中未使用字节的数量 int free; //字节数组 char[] buf}SDS遵循C字符串以空字符结尾的习惯,保存空字符的一字节空间不记录到len属性中。这样...
2019-04-21 09:52:12 91
原创 Leetcode 367有效的完全平方数
给定一个正整数 num,编写一个函数,如果 num 是一个完全平方数,则返回 True,否则返回 False。说明:不要使用任何内置的库函数,如 sqrt。示例 1:输入:16输出:True示例 2:输入:14输出:False解法:最简单的解法是由于1+3+5+7…完全平方数是连续的奇数之和,所以简单方法是class Solution { public boolean ...
2018-12-06 21:25:58 123
原创 java 编程思想学习笔记 Class字面常量
1生成class对象的引用在java中存在另一种方式来生成Class对象的引用,如下:class clazz = Gum.class;相对于直接生成对象和ForName方法,这种方法更加安全,高效。因为在编译期间就会受到检查且无需调用ForName方法,更加的高效,因为此种方式不会自动地初始化该类。2类的加载过程类的加载过程分为 加载,链接,初始化三部分。加载:类加载过程的一个阶段:...
2018-11-27 10:30:08 239
原创 利用BeautifulSoup库爬取虎扑湖区评论并且制作词云(二)
通过之前使用request库和BeautifulSoup库爬取得到了虎扑湖区前几页的帖子评论,接下里就要通过这些评论来制作词云。1利用中文分词库jieba来分词要想从评论中获取话题热度最高的词汇,我们需要将这些评论分成一个个的词汇,中文分词不像英文那般简单,还好jieba为我们提供了这样的功能。首先通过pip安装jieba库,管理员权限打开cmd,输入pip install jiebaji...
2018-11-26 19:33:42 967
原创 利用BeautifulSoup库爬取虎扑湖区评论并且制作词云(一)
最近在学python网络爬虫,想爬一些网站练练手,正好楼主是湖人球迷,又是虎扑的忠实用户,于是就想到可以爬取湖区的当天的前几页评论,制作一个词云来分析一下湖区当天的热点话题。爬虫采取的技术路线是request库+BeautifulSoup库。我查看了虎扑网页源代码:<meta http-equiv="Content-Type" content="text/html; charset=ut...
2018-11-26 16:06:05 1809 1
原创 Leetcode763 划分字母区间
Problem describe:字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一个字母只会出现在其中的一个片段。返回一个表示每个字符串片段的长度的列表。示例 1:输入: S = “ababcbacadefegdehijhklij”输出: [9,7,8]解释:划分结果为 “ababcbaca”, “defegde”, “hijhklij”。每个字母最多出现在一...
2018-11-17 19:43:55 420
原创 BeautifulSoup库的标签理解
**1BeautifulSoup库的引用和标签含义**<p class ="title">...</p>:<p>...</p>:标签Tag,一般是成对出现的class="title":属性Attributes,由0个或者多个键值对构成的BeautifulSoup 常用的引用的方式:from bs4 import BeautifulSoup...
2018-11-13 17:02:45 347
原创 Leetcode 740 删除和获得点数
Problem describe:给定一个整数数组 nums ,你可以对它进行一些操作。每次操作中,选择任意一个 nums[i] ,删除它并获得 nums[i] 的点数。之后,你必须删除每个等于 nums[i] - 1 或 nums[i] + 1 的元素。开始你拥有 0 个点数。返回你能通过这些操作获得的最大点数。示例 1:输入: nums = [3, 4, 2]输出: 6解释:删...
2018-11-08 21:18:25 270
原创 Leetcode 343 整数拆分
Problem describe:给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。示例 1:输入: 2输出: 1解释: 2 = 1 + 1, 1 × 1 = 1。示例 2:输入: 10输出: 36解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。说明: 你可以假设 n 不小于 2 且不大于 58。解法...
2018-11-06 22:06:54 359
原创 python网络爬虫 正则表达式
正则字符串正则字符串:就是任意可以用一系列线性规则构成的字符串。例如:aabbbbb(cc)(d| )将其分解为aa*:a后面跟着的a*表示“重复任意次a,包括0次”,这样就可以保证字母a至少出现一次。bbbbb:没啥特别,5次b(cc)*表示有任意次两个c(可以是0次)(d|):增加一个竖线在表达式里表示“这个或者那个”。表示最后可以跟着与一个d或者空格一个典型的利用正则表达...
2018-11-06 20:19:29 236
原创 leetcode 349 两个数的交集
Problem describe:给定两个数组,编写一个函数来计算它们的交集。示例 1:输入: nums1 = [1,2,2,1], nums2 = [2,2]输出: [2]示例 2:输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出: [9,4]说明:输出结果中的每个元素一定是唯一的。我们可以不考虑输出结果的顺序。解法:采用两个哈希集合...
2018-11-05 21:33:10 158
原创 java编程思想 容器-List
List接口在Collection的基础上添加了大量的方法,使得可以在List中间插入和移除元素。两种类型的list:基本的ArrayList,它长于随机访问元素,插入和输出较慢。LinkedList,在中间插入和删除较慢,随机访问方面相对较慢。方法:1contains():确定某个对象是否在列表中2equals():判断元素是否相等3sublist():允许你很容易的从较大的一个...
2018-11-04 20:33:28 155
原创 java编程思想笔记 容器的基本概念
1Collection。独立元素序列,其中List必须按照插入的顺序保存元素,Set不可以有重复元素。Queue按照排队规则来确定对象产生的顺序(FIFO)。2Map。一组成对的“键值对”对象。ArrayList允许你用下标查找值,因此某种意义上将,它将数组和对象关联在了一起。映射表允许我们使用另一个对象来查找某个对象,也被成为关联数组,或者字典。...
2018-11-01 11:13:19 108
原创 leetcode 611 有效三角形个数
Problem describe:给定一个包含非负整数的数组,你的任务是统计其中可以组成三角形三条边的三元组个数。示例 1:输入: [2,2,3,4]输出: 3解释:有效的组合是:2,3,4 (使用第一个 2)2,3,4 (使用第二个 2)2,2,3注意:数组长度不超过1000。数组里整数的范围为 [0, 1000]。解法:如果我们将给定的数组由大到小排序时,问题就转变...
2018-10-31 22:20:11 426
原创 计算机算法设计与分析 (四) 贪心算法--单源最短路径
1.Dijkstra算法是解决单源最短路径的一个贪心算法。给定一个带权有向图G=(V,E),其中每条边的权都是非负实数,另外,还给定V中的一个顶点,称为源。现在要计算源到其他各个顶点的最短路长度。这里的路的长度指的是路上各边权之和。Dijkstra算法可描述如下,其中输入的带权有向图是G=(V,E),顶点v是源。c是一个二维数组,c[i][j]表示边(i,j)的权。当(i,j)之间无直接的边连接...
2018-10-24 20:27:29 2016
原创 java编程思想 java的垃圾回收机制
1引用计数要理解java中的垃圾回收,先了解其他系统中的垃圾回收机制会很有帮助,引用技术是一种简单但速度很慢的垃圾回收机制。每个对象都含有一个引用计数器,当有引用连接至对象时,引用技术+1,当引用离开作用域或被置为null时,引用计数-1。当发现某个对象的引用计数为0时释放其占用空间。此方法有个缺陷,如果对象之间存在循环引用,可能会出现对象应该被回收,但引用计数却不为0的情况。对垃圾回收器而言,...
2018-10-22 16:33:47 213
原创 c++primer学习笔记 初识泛型算法
1概述大多数算法定义在头文件algorithm中。一般情况下,这些算法并不直接操作容器,而是遍历迭代器指定的元素范围。2迭代器使算法不依赖于容器执行虽然迭代器使用令算法不依赖于容器类型,但大多数算法都使用了一个(或者多个)元素类型上的操作。**关键在于**:泛型算法本身不会执行容器操作,只会运行在迭代器之上,执行迭代器的操作。泛型算法运行于迭代器之上而不会执行容器操作的特性带来了一个令人惊...
2018-10-18 16:39:57 192
原创 leetcode 最小栈
Problem describe:设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。push(x) – 将元素 x 推入栈中。pop() – 删除栈顶的元素。top() – 获取栈顶元素。getMin() – 检索栈中的最小元素。示例:MinStack minStack = new MinStack();minStack.push(-2);minS...
2018-10-15 21:43:04 578
原创 leetcode队列与栈,岛屿的个数
Problem describe:岛屿的个数:给定一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。示例 1:输入:11110110101100000000输出: 1示例 2:输入:11000110000010000011输出: 3...
2018-10-15 21:19:30 410
原创 计算机网络自顶向下方法学习笔记 HTTP和SMTP的区别
SMTP协议和HTTP协议都是用于一台主机向另一台主机传送文件,其中,HTTP从web服务器向web客户机传送文件,而SMTP从一个邮件服务器向另一个邮件服务器传送文件,当进行文件传送时,这两个协议都使用持久连接。因此,这两个协议有一些共同特征。然而,他们有一些重要的区别:一方面,HTTP协议主要是一个拉协议(pull protocol),即人们可以在方便的时候转载web服务器上的信息,也就是说...
2018-10-15 20:19:02 3992 3
原创 c++primer学习笔记 string的一些额外操作
string除了与其他顺序容器相同的构造函数,还额外支持另外三个构造函数。构造string的方法string s(cp, n)s是cp指向的数组中前n个字符的拷贝。此数组至少应该包含n个字符string s(s2,pos2)s是string s2从下标pos2 开始的字符的拷贝。若pos2&amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;s2.size(),则此类行为未定义string
2018-10-15 19:18:16 221
原创 leetcode 栈与队列c++实现循环队列
循环队列是一种线性数据结构,循环队列与普通队列的区别就是循环队列可以使用队列之前用过的空间。下面是实现自己的循环队列class MyCircularQueue{private: vector<int> data; int front; int tail; int size;public: /** Initialize your data structure here....
2018-10-09 22:37:55 416
原创 c++primer学习笔记 容器基本操作
1一些常用的容器操作容器操作类型别名iterator此容器类型的迭代器类型const_iterator可以读取元素,但不能修改元素的迭代器类型size_type无符号的整数类型,足够保存此种容器类型最大可能容器的大小difference_type带符号整数类型,足够保存两个迭代器之间的距离value_type元素类型refenc...
2018-10-08 17:00:53 117
原创 c++primer学习笔记 顺序容器概述
**1顺序容器概述**:顺序容器类型vector可变大小数组,支持快速随机访问。在尾部之外的位置插入和删除元素可能很慢deque双端队列,支持快速随机访问。在头尾位置插入/删除速度很快list双向链表。只支持双向顺序访问。在list中任何位置进行插入/删除操作的速度都很快forward_list单向链表,只支持单向顺序访问。在链表任何位置进行插入删...
2018-10-08 16:30:16 123
原创 计算机网络自顶向下方法学习笔记 Http报文格式
http 报文分为两种:一种为请求报文,另一种为响应报文1.HTTP请求报文下面是一个典型的http请求报文:GET /somedir/page.html HTTP/1.1Host:www.someschool.eduConnection:closeUser-agent:Mozilla/4.0Accept-language:fr该报文是使用普通的ASCLII文本书写的,该报文含有...
2018-09-29 20:37:47 551
原创 c++primer学习笔记 函数匹配
在大多数情况下我们容易确定某次调用应该选择哪个重载函数,然而,当几个重载函数的形参数量相等以及某些形参类型可以由其他类型转换而来时,这项工作就不那么容易了:void f();void f(int);void f(int, int);void f(double,double=3.14);f(5.6); //调用void f(double,double)一 确定候选函数和可行函数...
2018-09-29 18:33:02 186
原创 Day 26leetcode 88 合并两个有序数组
Problem describe:给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。说明:初始化 nums1 和 nums2 的元素数量分别为 m 和 n。你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。示例:输入:nums1 = [1,2,3,0,0,0],...
2018-09-28 20:04:48 129
原创 Day 25 leetcode 215 数组中第k个最大元素
Problem describe:在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例 1:输入: [3,2,1,5,6,4] 和 k = 2输出: 5示例 2:输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4说明:你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。解...
2018-09-27 21:40:47 531
原创 c++primer学习笔记 函数重载
函数重载的定义:如果同一作用域的几个函数名字相同但是形参列表不同,我们称之为重载函数。void print(const char *cp);void print(const int *beg,const int *end);void print(const int ia[],size_t size);这些函数接受的形参类型不一样,但是执行的操作非常相似。当调用这些函数的时候,编译器会根...
2018-09-27 14:49:57 172
原创 计算机网络自顶向下方法 学习笔记-TCP服务和UDP服务的特点
1.TCP服务TCP(Transmisson Control Protocol)服务模型包括面向连接的服务和可靠数据传输服务,当应用程序调用TCP协议作为它的运输层协议时,该应用程序就可以获得这两种服务。面向连接的服务...
2018-09-23 16:20:14 417
原创 c++学习笔记:返回类型和return语句
1.无返回值函数无返回值的return语句只能作用于void函数中,void函数中不一定非要显式的声明一个return语句,这类函数在最后一句后面会隐式的执行return语句。void函数中的return语句可以当作循环中的break语句来使用,来退出void函数。若return语句返回的类型是一个void函数的话,那么它也是正确的,否则,强行让void函数返回其他类型将产生编译错误。2有...
2018-09-23 15:09:22 1725
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人