自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

tensory的博客

大数据、算法、Java技术爱好者

  • 博客(108)
  • 资源 (6)
  • 问答 (1)
  • 收藏
  • 关注

原创 [设计与架构]Java当中的SPI(Service Provider Interface)设计思想(由双亲委派引出的问题)

导言在看双亲委派机制的时候,有人提到SPI的概念,于是学习了一番。SPI,即Service Provider Interface,服务提供者的接口。这个SPI接口是由服务端提供和调用的,这个接口定义了一些规范,但不提供具体的接口功能,功能由客户端决定,客户端根据需要实现这个接口,并进行配置,将接口的实现实例和配置打包部署在服务端,服务端不会直接调用接口的实现实例,而是 调用SPI接口,其产生的行为取决于配置文件。SPI设计思想如下图所示:SPI接口一般由客户端和服务端共同确定(更多是服务端根据不同客

2021-01-11 23:38:02 489

原创 [面试Java]线程同步之Java多线程实现多窗口售票程序

导言线程同步是Java高并发的核心内容之一,线程同步目的是保证多线程以安全的方式按照一定的次序执行以满足对互斥资源的请求,从而协作完成某项任务,其重点是保证线程安全。所谓线程安全,是多线程操纵共享数据的时候,对共享数据的操作不会出现丢失修改、脏数据等问题,或出现由于不满足可见性、原子性、有序性而产生的问题。例如,线程A让计数器counter的值加1的同时线程B让计数器加1,这就造成了丢失修改,与我们原本的目的向背驰:多线程对共享数据——计数器变量counter的修改应该排队进行。这里先统一讨论丢失修改

2021-01-02 21:17:54 1306 1

原创 [面试Java]线程安全的单例模式之饿汉和懒汉实现

导言单例模式是最常用的一种设计模式,常用于获取公共对象的代码中。例如:mysql数据库连接池文件系统HDFS的连接FileSystem对象Spark的上下文对象SparkContext全局的计数器全局的日志对象Logger用户不希望创建多个对象,而是当一个对象创建之后不再创建,其他线程如果需要直接获取不需要重复创建,也希望通过这个单例对象共享数据,因此单例模式,在计算机编程中,是比较常用的一种设计模式。然而,单例模式常常出现在多线程并发的场景中,写出一个线程安全、效率高、开销小的单例模式,

2021-01-01 22:46:36 707 1

原创 [面试算法]Python实现用队列对二叉树进行广度优先遍历(Breadth First Search, BFS)

导言曾经遇到过一道面试题,面试题如下:如果要用代码扫描出某个目录下的所有文件夹和所有文件,要求一层一层输出,怎么做?这道题,当时电话面试的时候思考了一会,想到无论是Linux目录结构,还是Windows单个磁盘的目录结构,都可以看做是一棵树。Linux当中还有tree这样的命令输出目录树,还能限定深度。目录树是一颗多叉树,类似二叉树,肯定可以用二叉树的方法去做。思考了一会,便进行了回答:目录的结构是一颗树,是一颗多叉树,树当中的每个节点代表着一个文件夹或具体文件,如果是文件,一定是叶子节点;如

2020-12-31 17:41:15 480

原创 [面试算法]Python根据前序+中序或后序+中序还原二叉树

导言在上一篇博客《[面试算法]Python实现二叉树三种遍历的递归与非递归形式》当中,我们详细讲述了二叉树深度优先遍历的各种办法。一道常见的面试题是,如何根据三种遍历的结果,还原出二叉树或进行二叉树重建?还是拿是上一篇博客的二叉树举例,二叉树的示意图及其三种遍历的结果都贴在下面:首先,根据某一种遍历的结果可以还原出二叉树吗?比如,仅仅有前序遍历的结果信息,我们知道A是二叉树的根节点,但是除此之外,就不知道了,比如下面这棵二叉树,其前序遍历的结果,和上面的二叉树前序遍历结果是一样的:因此,仅仅根据前

2020-12-31 13:14:21 1331

原创 [面试算法]Python实现二叉树三种遍历的递归与非递归形式

二叉树及其数据结构定义二叉树是计算机当中最重要的数据结构之一,其应用非常广泛,例如数据库的索引使用的B+树是一种特殊的二叉树,堆排序所使用的堆是一种特殊的二叉树,Java当中HashMap使用的红黑树是一种特殊的二叉树。可见,二叉树在计算机当中有着重要地位。二叉树的遍历是二叉树的基本操作,也是不仅是面试的常考考点,也是程序员用来锻炼思维的小把戏。二叉树的定义是递归的,即满足如下条件的树是二叉树:一棵树当中的每个节点,最多有2棵子树;如果一个节点有子树,那么子树必须是二叉树。我们可以看到,二叉树

2020-12-29 15:00:49 853

原创 [面试算法]中缀表达式转后缀表达式Python

后缀表达式的特点是:操作数在前面,后面紧跟着操作符。a+b转换成后缀表达式就是ab+。解决优先级问题。a+bc。\的 优先级比+高,因此在后缀表达式中,*应该比第一个+更先出现。因此,这个中缀表达式将是 abc+括号的作用。一对括号内部的是一个合法的表达式,是一个结果,因此可以将一对括号看做一个操作数。中缀表达式转后缀过程中,括号内的表达式,一旦遇到右括号,必须触发计算,不能继续等待。遇到括号,就得将括号内的这一部分表达式转化为后缀表达式。就像(a+b)*c的后缀表达式为ab+c*。总结以下规则如.

2020-11-11 16:07:12 1803 1

原创 排序算法的稳定性探究

结论排序算法的稳定性与具体的实现有关,一个不稳定的排序算法,通过额外的时间或空间,可以转变为稳定的;一个稳定的排序算法,也可以转变为不稳定的。这与大多数课本的说法有所不同,课本对每种算法的稳定性都给出了肯定唯一的答案,其实都隐含了各自的前提条件。下面举例说明这个问题,排序是从小到大排序。冒泡排序的稳定性冒泡排序,每次都从第0个元素开始遍历,比较当前元素arr[i]和下一个元素arr[i+1],如果arr[i]>arr[i+1],那么交换二者,i增加1,继续类似的比较。冒泡排序过程中,存在相邻

2020-09-08 17:22:35 167

原创 面试题-链表

什么是链表?链表是一种物理上非连续的逻辑存储结构,每个节点有指针域和数据域,指针域存储该节点逻辑上的下一个节点,数据域存储该节点的数据。给定单链表的头指针,如何判断是否有环?方法一:从头遍历,将每个遍历的节点存储到一个集合中,方法二:使用两个指针从头开始遍历,在一个循环中移动两个指针,指针1每次移动一步,指针2每次移动两步,每次比较两个指针指向的节点是否相同,如果指针2无法再向前移动,说明达到最后一个元素,链 表没有环。否则,一定会出现指针2和指针1相遇的情况,如果出现两个指针指向节点相同,说明链

2020-09-08 16:08:09 159

原创 深度优先搜索-全排列问题

# arr为元素数组,n为元素个数,vis为目标存储数组def perm(arr, n, vis): if len(vis) == n: global tot tot += 1 print(vis) # return # 剪枝,如果没有,那么会再得到解之后,继续下面的循环,当然了,下面的循环每一次循环if语句都是False,然后结束。所以这个剪枝,可以解决n!*n次循环。 for i in range(n):

2020-09-08 16:04:54 176

原创 深度优先搜索-组合问题

def com(arr, n, k, vis, cur): # cur表示剩下可选的元素范围为cur~n if len(vis) == k: print(vis) return # 剪枝1 if n-cur + len(vis) < k: # 剪枝2 return for i in range(cur, n): # 关键点1,从剩下可选范围内增加元素 vis.append(arr[i])

2020-09-08 16:02:50 305

原创 不连通图的深度优先遍历

# G是一个字典,G={'A':['B', 'C']}表示A分别于B和C有一条边相连接def f(G, nodes, src): # 图的深度优先搜索,没有必要判断边界,因为它不是一个搜索多种方案的问题,而是遍历的问题,同时对于非联通图,你根本不知道什么时候可以结束递归,所以无法确定边界应该是什么。 def dfs(G, nodes, src, vis): vis.append(src) neigs = G[src] for neig in

2020-09-08 15:59:55 1760

原创 迪克斯特拉算法原理与Python实现

原理找到距离源点src距离最近的点,这个最短距离就是该点的最短距离对这个点的邻居节点做松弛操作:检测这个点是否可以作为它的邻居的最短路径上面的点,如果可以则更新实现def f(G, nodes, src): dist = {} MAX_INT = 99999999999 node_pre = {} for node in nodes: dist[node] = MAX_INT node_pre[node] = src dis

2020-09-05 10:50:23 433

原创 HDFS学习总结----面试必须掌握

为什么要用HDFS一台服务器存不下数据,需要多台服务器。多台服务器上的数据需要一个系统来组织和管理。tip:HDFS、NTFS是不同的文件管理系统HDFS的定义HDFS是一个分布式的文件系统,通过目录树来定位文件HDS的使用场景一次写入,多次读出,不支持文件的修改,并且数据读取慢适合做数据分析的存储优点高容错自动保存多个副本,当节点数足够的时候,会自动保持副本份数。如10个节点,3个副本,一台挂掉,那么这台节点上的数据会被转存到其他节点,保证副本份数。适合做大数据,

2020-07-22 20:54:17 769

原创 [工具]git常用命令和知识点

git常见面试题配置个人的用户名和电子邮箱对一个文件进行修改,然后推送需要哪几个步骤?git add git commit git push这三个步骤缺一不可,add是对修改的add,不是将文件加入到git版本库中。git管理的是修改,不是文件。新建一个文件也是一次版本库的修改。如何克隆远程代码git clone [远程仓库地址]如何查看本地所有的分支?如何查看远程的所有分支?git branchgit branch -a如何查看所有的提交记录git log

2020-07-22 20:50:00 367

原创 git忽略文件

在项目开发中,长期不变的大文件或依赖文件,占用空间大,拖慢了项目版本管理效率,如push到云上的时候巨慢,Github也不能存大文件,尽管有在GitLFS的辅助下,Github允许上传大文件,但在Github下载源码的都知道,Github下载巨慢,上传更加耗时,而且大文件也有容量限制。可以配置.gitignore来忽略这些冗余的文件。进入GitCMD客户端,在项目根目录下,创建.gitigno...

2019-12-05 10:58:43 375

原创 social network社交网络资料汇总

social network资料汇总网络结构无标度网络(BA)度的分布服从幂律分布(二八法则)Python NetworkX库https://www.jianshu.com/p/e543dc63454f社区发现https://blog.csdn.net/u010159842/article/details/80505831https://blog.csdn.net/qq_31852...

2019-05-20 16:59:11 951

原创 nohup命令和screen命令

问题我们用远程终端连接远程主机的时候,有的程序要执行长达几小时甚至几天。例如晚上10点半,我在远程终端上启动一个spark程序,有一些结果重定向到标准输出,这个程序要运行10小时。第二天早上一看,远程终端断开了,一看程序运行结果,只运行了3小时就中断了。原因远程终端启动的程序,在远程终端断开会话的时候,程序也会终止。解决办法1:nohup您可以执行如下命令nohup [您本来要执行的命...

2019-04-12 20:42:38 1308

转载 IEEE会议排名(转载)

转自:https://www.cnblogs.com/yymn/p/4638182.html不知道谁整理的,我就下了个word。所以就标注不了,引用的哪的了。Rank 1:SIGCOMM: ACM Conf on Comm Architectures, Protocols & AppsINFOCOM: Annual Joint Conf IEEE Comp & Comm...

2019-04-12 18:39:10 6926

原创 Linux的三种时间:atime, mtime, ctime

Linux的三种时间:atime, mtime, ctime含义查看的命令何时更新参考含义atime使用vim, vi, cat, more, less等命令查看文件的最新时间,ls除外。mtime修改文件/目录内容的最新时间。修改文件内容,mtime改变。ctime修改文件的权限、属主、属组等属性的最新时间,即修改文件元数据的时间。查看的命令*stat filename* ...

2019-03-30 15:23:47 940

转载 Intellij IDEA开发环境搭建,scala配置及打包,jar包在spark中的运行

Intellij IDEA开发环境搭建,scala配置及打包,jar包在spark中的运行

2018-12-14 12:04:02 343

原创 Linux关闭防火墙

ufw命令 sudo ufw disable

2018-09-14 20:43:30 892

转载 ssh相关命令

参考https://blog.csdn.net/java_dotar_01/article/details/76942563 1.查看ssh服务的状态输入以下命令:sudo service sshd status如果出现Loaded: error (Reason: No such file or directory)提示的话,说名没有安装ssh服务,按照第二步:安装...

2018-09-14 18:57:29 352

原创 Celery: 分布式任务队列框架

Celery是一种分布式消息队列处理框架,由Python编写而成。该框架是一个典型的生产者-消费者模型。一、一些术语与概念下面,了解几个关键术语,并对应到生产者-消费者模型中的一些概念。broker,存放消息队列的容器,Celery本身不提供这个容器,一般由RabbitMQ、redis等第三方消息队列机制提供。tasks,一般写在一个脚本中,作用相当于生产者,用于产生消息。wo...

2018-09-04 10:55:02 983

原创 Spark Streaming: 实时流式数据处理机制(1)

一、基本原理Spark Streaming是一种实时流式数据处理机制,用于实时处理实时产生的数据流,具有高吞吐量、容错等特点。Spark Streaming构架如下图:数据源可以是本地数据、HDFS、TCP socket、Kafka和Flume等等,Spark Streaming从数据源接收数据流,根据时间片将数据流分割成多个批,分批处理,并将处理结果输出到文件系统、数据库或屏幕。...

2018-08-29 17:34:23 5476

原创 Hexo+github博客搭建与自定义域名

我的Hexo博客新址:http://www.tensory.online/ 下面是搭建的各个步骤:1.博客搭建部分https://blog.csdn.net/Waterkong/article/details/787087142.Yelee主题介绍http://moxfive.coding.me/yelee/3.修改自己的域名https://www.jiansh...

2018-08-02 15:16:14 1098

原创 数据挖掘十大算法(九):朴素贝叶斯原理、实例与Python实现

一、条件概率的定义与贝叶斯公式二、朴素贝叶斯分类算法朴素贝叶斯是一种有监督的分类算法,可以进行二分类,或者多分类。一个数据集实例如下图所示:现在有一个新的样本,X = (年龄:<=30, 收入:中, 是否学生:是, 信誉:中),目标是利用朴素贝叶斯分类来进行分类。假设类别为C(c1=是 或 c2=否),那么我们的目标是求出P(c1|X)和P(c2|X),比较谁更大,那么...

2018-07-27 15:45:49 11832 16

原创 并查集原理及Python实现,朋友圈个数问题

背景问题:给定一些好友的关系,求这些好友关系中,存在多少个朋友圈?例如给定好友关系为:[0,1], [0, 4], [1, 2], [1, 3], [5, 6], [6, 7], [7, 5], [8, 9]。在这些朋友关系中,存在3个朋友圈,分别是【0,1,2,3,4】,【5,6,7】,【8,9】如下图所示:这个问题,抽象一下,就是:求一个图的连通子图的个数,即连通度是多少。...

2018-07-20 19:54:27 7649 11

原创 数据挖掘十大算法(三):SVM支持向量机[初步]

支持向量机(Support Vector Machine, SVM)算法,是一种用于二分类的分类算法,当然也可以用于回归,文本仅讲述支持向量分类器(Support Vector Classifier, SVC)。根据数据集的不同,SVM可以分为三类:线性可分SVM、线性不可分SVM和非线性SVM。一、什么是SVM如下图所示,是一个训练集(二维平面上的点集),其中黑色为正例,红色点为负例,这是他们的...

2018-07-16 13:53:43 1498

原创 数据挖掘十大算法(二):K-means聚类算法原理与实现

参考:1.机器学习-KMeans聚类 K值以及初始类簇中心点的选取2.K-Means算法的研究分析及改进一、K-means算法原理K-means算法是最常用的一种聚类算法。算法的输入为一个样本集(或者称为点集),通过该算法可以将样本进行聚类,具有相似特征的样本聚为一类。针对每个点,计算这个点距离所有中心点最近的那个中心点,然后将这个点归为这个中心点代表的簇。一次迭代结束之后,针对每个簇类,重新计算...

2018-07-12 19:17:50 69516 8

原创 数据挖掘十大算法(一):决策树分类C4.5算法

一、决策树分类的思想如下图所示,为一个待训练的数据集/训练集,表示一个人具备年龄、收入、是否学生、信誉这4个属性,待训练的目标是这个人是否购买计算机。其中年龄、收入、是否学生、信誉被称作描述属性,是否购买计算机称作类别属性,即分为什么类别。为了理解什么叫决策树,我们直接跳到结果(利用上述数据集,得到的决策树),决策树如下图:这个决策树的含义,类似于一个程序判断框图,输入一个人的属性值4元组:(年龄...

2018-07-11 09:51:26 4672

原创 Python高级技巧: To Be More Pythonic!

1. zip()函数if __name__ == '__main__': L1 = [1, 2, 3, 4] L2 = ['a', 'b', 'c', 'd'] for z in zip(L1, L2): # zip关键字将两个list对应起来,组成类似于(key, value)的tuple print(z) L1 = [1, 2, ...

2018-07-07 16:19:39 1568 1

原创 数据挖掘十大算法(六):PageRank算法原理与Python实现

参考.PageRank算法--从原理到实现 零. PageRank算法简介PageRank算法,即网页排名算法,由Google创始人Larry Page在斯坦福上学的时候提出来的。该算法用于对网页进行排名,排名高的网页表示该网页被访问的概率高。该算法的主要思想有两点:a. 如果多个网页指向某个网页A,则网页A的排名较高。b. 如果排名高A的网页指向某个网页B,则网页B的...

2018-07-06 09:59:28 31282 21

原创 常用PySpark API(二): partitionBy, cache, mapValues, sortBy的简单用法

0. PairRDD的意思PairRDD就是元素为键值对的List转化过来的RDD对象,例如rdd_1就是一般的非pairRDD,rdd_2为pairRDD,这只是一种叫法

2018-07-04 14:40:14 10303

原创 常用PySpark API(一): parallelize, collect, map, reduce等API的简单用法

参考:1. https://www.cnblogs.com/sharpxiajun/p/5506822.html2. https://blog.csdn.net/wc781708249/article/details/782281170. RDD数据类型RDD(Resilient Distributed DataSet)是一种弹性分布式数据集,是Spark的核心,其可以有由稳定存储中的数据通过转换...

2018-07-03 16:12:56 27239 6

原创 最长公共连续子串(Longest Common Substring)

上一篇博客,介绍了最长公共子序列(Longest Common Sequence, LCS),本文介绍最长公共连续子串。与序列不同,子串要求字符是连续的,而子序列可以不连续。下面同样用LCS表示最长公共连续子串。首先分析一下,如果暴力求解法的时间复杂度,两个字符串A和B长度分别为x和y,则字符串的子串个数分别为n1 = x + (x-1) + ... + 1 = x(x-1) / 2n2 = y ...

2018-04-08 21:03:15 16988 8

原创 最长公共子序列(LCS)

一、概念1.给定字符串str = "ABCDADNENXY"    子序列:从str中任意去掉若干个(含0个)字符,剩下的就是这个str的子序列,如ABC, ABXY, DADXY等,中间不必连续.    子串:和子序列不同,子串必须是连续的,如ABCD,ENXY,CDADNE都是子串,而AXY不是,因为中间断开了,把连续.    子串必定是子序列,子序列不一定是子串.2.最长公共子序列(Long...

2018-04-04 16:42:37 23657 3

原创 【HDOJ_1029】Ignatius and the Princess IV

题目:http://acm.hdu.edu.cn/showproblem.php?pid=1029大意是,有一个数列,有N个数,N为奇数,有一个数出现的次数&gt;=(N+1)/2,现在要求出这个特殊的数来.思路:思路1.遍历并记录每个数出现的次数,找到次数&gt;=(N+1)/2对应的那个数即可,记录次数的时候有点类似桶排序.思路2.对这个数列进行排序,由于它出现的次数&gt;=(N+1)/2,...

2018-04-02 11:30:25 190

原创 【hdoj_1003】Max Sum

題目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1003题目大意,给定一个数组,a[0], a[1], ..., a[n-1]需要求它的一个连续子序列,使得这个连续子序列的和最大.一、暴力求解方法O(n^3)直观的解法是,遍历所有的连续子序列,取和最大的那个.唯一决定一个连续子序列的指标为序列起始、结束索引,分别设置为i和j则,要求a[i],...,a...

2018-04-01 14:04:18 2983 2

转载 Linux+Sublime 开发C/C++ 中无法读取cin/scanf 的解决办法

https://www.cnblogs.com/xxdfly/p/4692622.htmlUbuntu下用Sublime,加上一些文件配置,可以编译并且运行C++,但可能会有cin无法读入的问题,这个链接可以解决.

2018-03-31 21:57:34 1472

张量分解-CP分解

张量分解-CP分解,一种经典的张量分解的方法。网页截图

2018-10-10

A new method for reconstruction of cross-sections using Tucker decomposition

A new method for reconstruction of cross-sections using Tucker decomposition

2018-10-10

算法导论(中文版本)

算法导论(中文版本)《算法导论》原书名——Introduction to Algorithms,是2006年机械工业出版社出版出版的图书,作者是Thomas H.Cormen、Charles E.Leiserson等。

2018-10-10

Everyting搜索软件

Everything是一种快捷的搜索工具,在windows系统上运行,速度极快,可以代替windows资源管理器的搜索功能。

2018-09-18

统计学习方法-李航

《统计学习方法》是2012年清华大学出版社出版的图书,作者是李航。本书全面系统地介绍了统计学习的主要方法,适用于高等院校文本数据挖掘、信息检索及自然语言处理等专业的大学生、研究生,也可供从事计算机应用相关专业的研发人员参考。

2018-09-18

MFC类库详解

2016-11-01

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

TA关注的人

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