自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(77)
  • 收藏
  • 关注

原创 如何兼容Python2.x和Python3.x

背景当我们的代码需要同时在Python2和Python3环境下跑通时,有时候会因为同一个库在Python2和Python3中的引用方式不同,或者甚至库名就不同,这时候为了能够兼容,可参考以下实现。实现以urllib库为例:import sysPY2 = sys.version_info[0] == 2PY3 = sys.version_info[0] == 3if PY3: import urllib.parseelse: import urllibdef

2020-07-06 11:01:47 425

原创 HBase系统简介

网上看到一篇HBase原理分享的文章,解决了很多疑惑,很赞,原文连接:https://www.jianshu.com/p/20aff7d85e95,在此转载记录。点击原文链接查看更清晰!!!!一、HBase简介Hbase是什么HBase是一种构建在HDFS之上的分布式、面向列、多版本、非关系型的数据库。在需要实时读写、随机访问超大规模数据集时,可以使用HBase。HBase 是Goo...

2019-12-30 17:42:27 331

原创 IDEA+Tomcat+SpringMVC项目如何使用自定义日志

背景: 在IDEA下使用Maven构建了一个Tomcat+SpringMVC的web项目,希望能够将自定义日志输出到控制台。但是在这个过程中使用JDK Logging发现输出到控制台的日志完全没有打印,控制台打印的只是tomcat的日志。此外也参考网上的配置尝试使用log4j2(没用log4j是因为我的Spring版本用的是5.X的)和slf4j,但都出现无法找到日志配置文件的情...

2019-11-06 11:28:57 756

原创 什么是云计算

今天无意中看到阿里云栖社区的一篇关于云计算相关内容的科普型文章,感觉写得很好,在此记录,以便回顾和分享。文章内容以通俗易懂的语言主要介绍了什么是公有云、私有云、社区云以及混合云,也对什么是IaaS、PaaS、SaaS进行了科普介绍。文章链接如下:https://yq.aliyun.com/articles/669847?spm=a2c4e.11153940.0.0.6ed42972KHDz...

2019-09-09 17:29:10 218

原创 go中如何实现php的urlencode和rawurlencode的功能

1、背景urlencode:编码 URL 字符串,返回字符串,此字符串中除了-_.之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,空格则编码为加号(+)。rawurldecode与urlencode同样用于编码URL字符串,区别在于rawurldecode会将空格则编码为“%20”2、PHP语言中对URL的编码和解码在PHP中使用rawurlencode和r...

2019-09-05 16:01:45 1482

原创 C++、Java在学习Go时需要注意的地方

对C++和Java使用比较多一些,现在需要使用Go,以下记录了学习Go过程中,Go与C++、Java在语法和使用上一些不同之处。好记性不如烂笔头,记录下来,以便查询。1、当标识符(包括常量、变量、类型、函数名、结构字段等等)以一个大写字母开头,如:Group1,那么使用这种形式的标识符的对象就可以被外部包的代码所使用(客户端程序需要先导入这个包),这被称为导出(像面向对象语言中的 public...

2019-08-19 21:27:48 196

原创 Mac下Go+GoLand安装教程

先需在Mac下搭建1、Go安装教程1> 下载Go语言安装包https://storage.googleapis.com/golang/go1.7.darwin-amd64.pkg,双击安装2> 配置Go语言环境变量,打开终端。 cd ~ vi .bash_profile 将以下几行添加到最后,把YOUR WORKSPACE替换成你想存...

2019-08-19 18:29:58 7249

原创 C++11新特性

1、“=delete”函数// 为了能够让程序员显式的禁用某个函数,C++11 标准引入了一个新特性:"=delete"函数。程序员只需在函数声明后上“=delete;”,就可将该函数禁用。class X3{public: X3(); X3(const X3&) = delete; // 声明拷贝构造函数为 deleted 函数 X3& ope...

2019-08-07 19:21:03 109

原创 Mac OS下JDK1.7安装

项目中需要使用JDK1.7,但是找了半天也没找到JDK1.7的安装包,现将JDK1.7的安装方法总结如下:1、下载地址https://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase7-521261.html2、JDK安装进入下载页面后(如下图所示),根据自己电脑操作系统选择...

2019-07-30 21:39:56 6207

原创 Java学习笔记——基础篇

1、命名规则类名:对于所有的类来说,类名的首字母应该大写。如果类名由若干单词组成,则每个单词的首字母应该大写,例如MyFirstJavaClass。方法名:所有的方法名都应该以小写字母开头。如果方法名含有若干单词,则后面的每个单词首字母大写。源文件名:源文件名必须和类名相同。当保存文件的时候,你应该使用类名作为文件名保存(切记 Java 是大小写敏感的),文件名的后缀为.java...

2019-07-30 21:26:32 126

原创 浅谈问题:为什么既要有Mac地址又要有IP地址

MAC地址: MAC地址又称为物理地址,每一台主机有一个固定的MAC地址,可以理解成这台主机出厂就具备了该物理地址,就好比人的身份证号,每个人都有自己唯一的身份证号。IP地址: IP地址并不是主机唯一的,我们知道IP地址有共有IP地址和私有IP地址之分(如下图所示)。其中公有地址是由统一管理分配的,例如我们搭建了一个网站,希望能被所有地方的人访问到,则需要去购买一个公有的...

2019-04-20 17:24:15 4113

原创 LeetCode165 比较版本号

题目描述:比较两个版本号version1和version2。如果version1>version2返回1,如果version1<version2返回-1, 除此之外返回0。你可以假设版本字符串非空,并且只包含数字和.字符。.字符不代表小数点,而是用于分隔数字序列。例如,2.5不是“两个半”,也不是“差一半到三”,而是第二版中的第五...

2019-04-01 20:05:41 169

原创 LeetCode151 翻转字符串里的单词

题目描述:给定一个字符串,逐个翻转字符串中的每个单词。示例 1:输入: "the sky is blue"输出:"blue is sky the"示例 2:输入: " hello world! "输出:"world! hello"解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。示例 3:输入: "a good e...

2019-04-01 19:05:37 120

原创 LeetCode437 路径总和

题目描述:给定一个二叉树,它的每个结点都存放着一个整数值。找出路径和等于给定数值的路径总数。路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。二叉树不超过1000个节点,且节点数值范围是 [-1000000,1000000] 的整数。示例:root = [10,5,-3,3,2,null,11,3,-2,null,1], s...

2019-03-31 10:53:46 92

原创 LeetCode102 二叉树的层序遍历

题目描述:给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。例如:给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其层次遍历结果:[ [3], [9,20], [15,7]]C++实现:/** * Definition ...

2018-12-25 21:54:13 81

原创 前序遍历二叉树递归与非递归实现

struct treeNode { treeNode* left; treeNode* right; int val; treeNode():left(NULL),right(NULL),val(-1){ }};//前序遍历递归void preOrderTravser(treeNode* head){ if(head==NULL) ...

2018-12-25 21:41:17 106

原创 LeetCode94 二叉树中序遍历

题目描述:给定一个二叉树,返回它的中序 遍历。示例:输入: [1,null,2,3] 1 \ 2 / 3输出: [1,3,2]C++实现:递归实现:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeN...

2018-12-25 21:31:59 106

原创 浅谈对称加密与非对称加密

1、场景小天:准备剁手买买买的用户网站A:卖东西的网址黑客B:仿冒网站A的黑客网站;或者仿冒用户小天,获取A发来的数据有一天小天到网址A上买东西,下单的时候小天需要输入银行账号密码来付款,这个时候黑客B蠢蠢欲动了...2、没有加密1)黑客网站B可能冒充网站A截获小天的请求消息2)黑客B可能冒充小天接收原本A发给小天的消息数据3、对称加密        采用对称加...

2018-12-14 14:21:45 766

原创 如何解决递归重复计算问题

        在日常编写递归函数的时候,存在一个问题,即重复计算(如下图所示)。解决该问题的常用方法之一是将已经计算过的节点值用一个map容器保存起来,每次递归先查找该容器中是否存在该节点(key),如果存在则直接返回对应的值(value);否则计算,并将新的节点(key)和值(value)存入map中,具体参考实现代码以及注释,比较清楚 C++实现:#include&lt;ios...

2018-12-07 14:14:16 2867

原创 循环队列

       队列的实现主要包括两种:顺序队列和链式队列,其中,顺序队列由数组实现,链式队列依靠链表实现。顺序队列大小有限,链式队列大小无限制,在线程池或者数据库连接池中,在资源有限时,则经常会用到队列来实现排队。其中,链式队列可以不限制等待者的数量,但是排在队列尾部的等待者的响应时间却很慢;顺序队列限制了排队等待者的数量,使得等待者响应时间相对较快。因此,顺序队列更适合对响应时间要求较高或者更敏...

2018-12-03 18:53:15 122

原创 LeetCode5 最长回文子串

题目描述:给定一个字符串s,找到s中最长的回文子串。你可以假设s的最大长度为 1000。示例 1:输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。示例 2:输入: "cbbd"输出: "bb"解题思路:维护一个二维数组dp,其中dp[i][j]表示字符串区间[i, j]是否为回文串,当i = j时,只有一个字符,肯定是...

2018-12-03 13:50:42 85

原创 LeetCode3 无重复字符串的最长子串

题目描述:给定一个字符串,找出其中不含重复字符的最长子串的长度。比如:输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。Java实现:import java.util.HashSet;import java.util....

2018-12-03 12:21:16 93

原创 《程序员代码面试指南》——由两个栈组成的队列(Java实现)

题目:    用两个栈实现队列,支持队列的add、poll、peek操作思路:    两个栈,一个用于每次向里面添加元素,另一个用于弹出元素,弹出规则是:若栈不为空,则直接弹出;若为空,则将第一个栈的所有元素都移动到这个栈,再弹出/输出栈顶元素。进而实现用两个栈的先进后出来模拟队列的先进先出Java实现:import java.util.Stack;public clas...

2018-11-06 14:24:12 113

原创 《程序员代码面试指南》——设计一个有getMin功能的栈(Java实现)

题目:    设计一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作要求:    pop、push、getMin操作的时间复杂度都是O(1)思路:用两个栈,一个做正常的pop、push操作,另一个辅助栈用于存放每次操作后的最小值Java实现:import java.util.Stack;public class Main { public ...

2018-11-06 13:54:30 141

原创 快速排序

思路:      快速排序到关键在于先在数组中选择一个数字,接下来将比选择的数字小的数字移到数组的左边,比选择的数字大的数字移到数组的右边C++实现:#include&lt;iostream&gt;#include&lt;vector&gt;using namespace std;void helper(vector&lt;int&gt;&amp; vec,int left,...

2018-11-01 12:24:46 93

原创 用两个栈实现队列

题目要求:      用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。思路:      栈先进后出、队列先进先出;用两个栈sta1、sta2,每次push元素都放到sta1中;每次pop元素,先判断sta2是否为空,若为空,则将sta1里都元素全部移动到sta2中,在pop sta2中到元素;若sta2不为空,则直接pop sta2中到元素。(可以自...

2018-11-01 12:08:50 75

原创 LeetCode1 两数之和

题目:给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]解答:参考leetcode阅读解答部分,https://leetcode-c...

2018-10-28 20:09:50 79

转载 一篇很直观的docker介绍

很早前无意之中了解到docker,但是一直没有好好看看了解,今天搜索到一篇还不错的文章,至少我这个小白基本上理解了什么是DOCKER,分享出来原文连接:https://www.cnblogs.com/SzeCheng/p/6822905.html什么是dockerDocker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目。它基于 Google 公司推出的...

2018-07-05 16:26:20 625

原创 海量数据处理

1、常见海量数据处理方法hash、bit-map(位图法)、bllomfilter、数据库优化、倒排索引、外排序、Trie树、堆、双层桶、mapReduce法、分治2、hash法在海量数据处理中,Hash法一般可以快速存取、统计某些数据,将大量数据进行分类,例如,提取某日网站次数最多的IP地址3、bit-map位图法又叫位图法,基本原理是使用位数组来表示某些元素是否存在,它适用于海量数据的快速查找...

2018-06-07 21:26:55 386

原创 ubuntu16.04下TensorFlow安装

ubuntu 16.04、Python 2.71、安装pipsudo apt-get install python-pip python-dev2、安装TensorFlowsudo pip install --upgrade https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.8.0-cp27-none-linux_x8...

2018-05-26 15:21:27 125

原创 策略模式——C++实现

策略模式其实和简单工厂模式很相似,在看《大话设计模式》这本书时,一开始也是一度弄混这两个模式,关于简单工厂模式的一个介绍以及C++代码可以参考上一篇文章点击打开链接。策略模式和简单工厂模式最主要的区别在于客户端用户需要操作几个类,下面仍以加、减、乘、除计算来讲解:在上简单工厂模式中,客户端代码:int main() { double A, B; ...

2018-05-17 15:24:04 475

原创 redis跳跃表

跳跃表是一种可以对有序链表进行近似二分查找的数据结构,redis在两个地方用到了跳跃表,一个是实现有序集合,另一个是在集群节点中用作内部数据结构。首先看什么是跳跃表,redis中的跳跃表只是为了支持自己的一些操作,而对普通的跳跃表做了一些改动,但整体思想都差不多。网上有很多关于跳跃表的博客,本文对自己学习过程中看到的参考资料和学习的过程做一个归纳整理。1、普通跳跃表为什么要用到跳跃表:http:/...

2018-05-14 11:14:30 8218 4

原创 ubuntu16.04下go安装

1、安装gosudo apt-get install golang-go2、设置go环境变量export GOROOT=$HOME/goexport PATH=$GOROOT/bin:$PATHU3、新建一个文件hello.go,在里面写入内容package main import ( "fmt" "runtime" ) func ...

2018-05-09 16:33:09 1333

原创 用户级线程与核心级线程

1、用户级线程把整个线程实现部分放在用户空间中,内核对线程一无所知,内核看到的就是一个单线程进程。只有一个用户栈优点:1)整个用户级线程的切换发生在用户空间,这样的线程切换至少比陷入内核要快一个数量级(不需要陷入内核、不需要上下文切换、不需要对内存高速缓存进行刷新,这就使得线程调度非常快捷)2)用户级线程有比较好的可扩展性,线程能够利用的表空间和堆栈空间比内核级线程多,这是因为在内核空间中内核线程...

2018-05-07 21:27:14 10443

原创 redis-字典

1、字典,又称为符号表、关联数组、映射,是一种用于保存键值对的抽象数据结构。由于C语言里并没有内置字典这种数据结构,因此redis构建了自己的字典实现2、reids的数据库就是使用字典来作为底层实现的,对数据库的增、删、改、查操作也是构建在对字典的操作之上的例如:SET msg "hello world" //在数据库中创建一个键为"msg",值为"hello world"的键值对,这个键值对就保...

2018-05-07 16:15:52 130

原创 redis-链表

1、redis源码使用C语言,C中并没有实现链表这种数据结构,所以redis构建了自己的链表实现2、除了链表键之外,发布订阅、慢查询、监视器等功能也用到了链表,redis服务器本身还使用链表来保存多个客户端的状态信息,以及使用链表来构建客户端输出缓冲区3、链表节点结构typedef struct listNode { // 前置节点 struct listNode *prev;...

2018-05-07 14:41:30 141

原创 Linux数据流重定向

在我们日常Linux命令操作中,命令执行的输入一般是键盘输入,输出一般是输出到屏幕,但有时候,我们可能会去读取文件里但数据作为输入,或者将输出保存到文件里(比如日志文件),这个时候就需要用到数据流重定向。所谓数据流重定向,就是:1)将某个命令执行后应该要出现在屏幕上的数据传输到其它地方,例如文件或者诸如打印机之类的设备;2)将原本由键盘输入的数据改由文件内容来代替标准输入(stdin):文件描述符...

2018-05-05 16:05:11 214

原创 redis-简单动态字符串SDS

1、redis自定义了新的字符串机制SDS    Redis没有直接使用C语言传统的字符串表示(以空字符结尾的字符数组),而是自己构建了一种名为简单动态字符串SDS的抽象类型2、简单动态字符串SDS   SDS定义:struct sdshdr { // buf 中已占用空间的长度,不包括末尾‘\0’ int len; // buf 中剩余可用空间的长度 int fr...

2018-04-27 16:40:16 218

原创 《程序员代码面试指南》——字符串中空格替换(C++实现)

题目描述:将字符串中的空格替换为“%20”,要求时间复杂度为O(N),空间复杂度为O(1)思路:《剑指offer》也有一个一样的题目,空间复杂度为O(1)说明不允许用另一个数组来保存新的字符串,时间复杂度为O(N)则可以通过从尾到头遍历来保证,具体代码如下:C++代码实现:#include&lt;iostream&gt;#include&lt;string&gt;using namespace s...

2018-04-21 21:18:59 223

原创 《程序员代码面试指南》——字符串的统计字符串(C++实现)

题目描述:给定一个字符串str,返回str的统计字符串。例如“aaabbadddffc”的统计字符串为“a_3_b_2_a_1_d_3_f_2_c_1”思路:遍历字符串,用一个整形变量记录个数,具体过程见代码C++代码:#include&lt;iostream&gt;#include&lt;string&gt;using namespace std;int main(){    string st...

2018-04-21 20:19:11 423

空空如也

空空如也

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

TA关注的人

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