自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Mr.Phoebe的专栏

退役后还是一个弱渣

原创 二分的姿势的选取

解的范围为实数精度判断这样做是最基础的方法,但是不是很推荐。会存在浮点误差。left = 0.0, right = 0x3f3f3f3f; while (dcmp(right - left) != 0){ mid = (right + left) / 2.0; if (judge(mid)) right = mid;

2016-11-27 10:12:18 478

原创 ACM竞赛中的逆向思维

在竞赛过程中,尤其是近期训练,遇到了不少一定要用逆向思维才能解决的题目。 为此做一系列的总结。希望能够对大家有所帮助。 同时,我也会做成PPT,供14级训练使用。其中有部分问题摘自于2005年国家集训队唐文斌的《正难则反–浅谈逆向思维在解题中的应用》论文。容斥方面逆向思维在容斥方面的应用相当广泛,也可以说容斥就是逆向思维的一种体现。HDU 5072 Coprime 同色三角形题目大意:给了nn个

2015-10-29 17:02:47 1749 1

原创 Leetcode 851. Loud and Rich 以及一些面试的想法

Leetcode 851. Loud and Rich 以及一些面试的想法Leetcode 851. Loud and Rich 这道题本身没有什么很特殊的地方,但是它引发了我对面试写算法题的一些想法和思考。题意:给你一个拓扑序列richer,给你一个安静值quiet。对于每一个节点,找到拓扑序列严格在这个节点之后的最小的quiet值的节点。(无法排列拓扑关系的,则不是严格在节点之后的)。思路看到题目第一眼,首先想到排一个拓扑序列,再对于每个节点,取拓扑序列后一段的最小值(和最小值代表的节点)。

2020-07-13 03:24:10 69

原创 异步调用future/promise模式(C++版本)

Future/Promise 编程模式如何减少服务器应答时间,如何更强地进行并发。异步调用的Future/Promise1模式就是实现这一目的的手段之一。一个 Future 就是说“将来”你需要某些东西(一般就是一个网络请求的结果),但是你现在就要发起这样的请求,并且这个请求会异步执行。或者换一个说法,你需要在后台执行一个异步请求。C++中的应用C++11创建了线程以后,我们不能直接从th...

2019-07-29 13:30:57 587

原创 未定义行为与求值顺序

未定义行为若违反某些规则,则令整个程序失去意义。定义在计算机程序设计中,未定义行为(undefined behavior)是指执行某种计算机代码所产生的结果,这种代码在当前程序状态下的行为在其所使用的语言标准中没有规定。常见于编译器对源代码存在某些假设,而执行时这些假设不成立的情况。同时语言规范也不要求编译器诊断未定义行为(尽管许多简单情形确实会得到诊断),而且不要求所编译的程序做任何有意...

2019-07-29 11:14:55 242

转载 golang中的io.Reader/Writer

本文整理自Go编程技巧–io.Reader/WriterGo原生的包中有一些核心的interface,其中io.Reader/Writer是比较常用的接口。很多原生的结构都围绕这个系列的接口展开,在实际的开发过程中,你会发现通过这个接口可以在多种不同的io类型之间进行过渡和转化。本文结合实际场景来总结一番。关系图表type Reader interface { Read(p []b...

2019-04-09 05:35:02 6993 1

原创 Goroutine的调度

本文整理自The Go schedulerGoroutine的调度Go语言之所以要自己实现一个调度器有以下两个原因:协程调度。因为系统内核不能再决定协程的切换,那么协程的切换时间点则是由程序内部的调度器决定的。垃圾回收。垃圾回收的必要条件是内存位于一致状态,这就需要暂停所有的线程,如果交给系统去做,那么会暂停所有的线程使其一致。程序自身的调度器知道什么时候内存位于一致状态,那么就没有必要...

2019-04-08 23:52:24 430

转载 文本相似度-bm25算法原理及实现

转载自文本相似度-bm25算法原理及实现原理BM25算法,通常用来作搜索相关性评分。一句话概况其主要思想:对Query进行语素解析,生成语素qiq_iqi​;然后,对于每个搜索结果D,计算每个语素qiq_iqi​与D的相关性得分,最后,将qiq_iqi​相对于D的相关性得分进行加权求和,从而得到Query与D的相关性得分。BM25算法的一般性公式如下:Score(Q,d)=∑inWi⋅R(...

2019-04-08 09:00:27 807

原创 go中的并发

go中的并发从并发模型说起并发目前来看比较主流的就三种:多线程每个线程一次处理一个请求,线程越多可并发处理的请求数就越多在高并发下,多线程的调度开销会比较大。协程无需抢占式的调度,开销小,可以有效的提高线程的并发性,从而避免了线程的缺点的部分基于异步回调的IO模型利用Linux内核的AIO进行异步IO1nginx使用的就是epoll模型,通过事件驱动的方式与异步...

2019-04-05 11:06:47 1277

原创 进程和线程、协程的区别

现在多进程多线程已经是老生常谈了,协程也在最近几年流行起来。python中有协程库gevent,go里面的goroutine也是一个非常棒的协程库。本文主要介绍进程、线程和协程三者之间的区别。概念进程进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,也是基本的执行单元,是操作系统结构的基础。每个进程都有自己的独立内存空间,不同进程通过...

2019-04-04 11:03:40 1749

原创 PageRank算法 -- 从原理到实现

本文整理自博文PageRank算法 – 从原理到实现1. 算法来源这个要从搜索引擎的发展讲起。最早的搜索引擎采用的是 分类目录1的方法,即通过人工进行网页分类并整理出高质量的网站。那时 Yahoo 和国内的 hao123 就是使用的这种方法。后来网页越来越多,人工分类已经不现实了。搜索引擎进入了 文本检索 的时代,即计算用户查询关键词与网页内容的相关程度来返回搜索结果。这种方法突破了数量的限...

2019-04-02 06:37:51 10892 6

原创 布隆过滤器:集合去重

简介布隆过滤器(Bloom Filter)实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。原理当一个元素被加入集合时,通过K个散列函数将这个元素映射成一个位数组中的K个点,把它们置为1。检索时,我们只要看看这些点是不是都是1:如果这些点有任何一个0,则被检元素一定不在;如果都是1,则被检元素很可能在集合中(获得在这个集合中的概率)。Fa...

2019-03-31 08:01:19 722

原创 golang传值和传引用

golang传值和传引用这里不会解释关于指针的情况,如果读者对C语言或者C++的指针比较了解,那么就能更好地理解本文。定义对于代码modify(a);a.modify();如果modify中对于a的修改不会改变传入的a的值,那么就是传值调用;否则,是传引用。传值调用是将传入的变量在内存中复制一份进行操作,所以本质是存储在不同内存地址的不同变量。传引用是将传入变量的内存地址,在函数操...

2019-01-02 09:53:04 2328 1

原创 Twosigma在线笔试 substring

题意给你一个字符串,让你找出这个字符串以元音字母开头(a,e,i,o,u),辅音字母结尾的所有子串,中的字典序最大串和最小串。思路虽然是面试题,但是我觉得这是我见过的最难的面试题暴力解#include<iostream>#include<unordered_set>#include<string>using namespace std;...

2018-09-19 21:08:58 1695

原创 Leetcode 699. Falling Squares

Leetcode 699. Falling Squares很久没有写题解了,主要是leetcode没啥有意思的题目,写来没啥意思。今天这题还算有点意思,可以分析分析。描述给你一个序列表示下落的俄罗斯方块的情况。序列里面含有 NNN 对值 (L,S)(L,S)(L, S),其中LLL表示方块下落的左坐标,SSS表示下落方块的边长,这里下落的方块永远是正方形。其中N≤1000,L≤...

2018-07-16 15:04:24 1066

原创 golang defer的使用

golang defer的使用基本使用在golang当中,defer代码块会在函数调用链表中增加一个函数调用。这个函数调用不是普通的函数调用,而是会在函数正常return之后添加一个函数调用。因此,defer通常用来释放函数内部变量。为了更好的学习defer的行为,我们首先来看下面一段代码:func CopyFile(dstName, srcName string) (wr...

2018-07-08 14:24:05 741

原创 golang fmt格式“占位符”

golang 的fmt 包实现了格式化I/O函数,类似于C的 printf 和 scanf。# 定义示例类型和变量type Human struct { Name string}var people = Human{Name:"sujing"}普通占位符 占位符 说明 举例 输出 %v 相应值的默认格式。 Printf(“%v”...

2018-07-01 09:12:04 2950

转载 理解 go interface 的 5 个关键点

理解 go interface 的 5 个关键点原创: wecatch wecatch 2017-07-23 这篇关于 go 的 interface 的介绍。1、interface 是一种类型type I interface {    Get() int}首先 interface 是一种类型,从它的定...

2018-06-27 14:14:34 6239 2

原创 go 数组(array)、切片(slice)、map

go 数组(array)、切片(slice)、map数组(array)go语言中的数组是固定长度的。使用前必须指定数组长度。go语言中数组是值类型。如果将数组赋值给另一个数组或者方法中参数使用都是复制一份,方法中使用可以使用指针传递地址。var arrayName = [arraySize]dataType{xxx,xxx,xxx....}  //定义全局数组var b ...

2018-06-27 14:11:49 1080

转载 Go语言中函数new与make的使用和区别

大家都知道Go语言中的函数new与函数make一直是新手比较容易混淆的东西,看着相似,但其实不同,不过解释两者之间的不同也非常容易,下面这篇文章主要给大家介绍了关于Go语言中函数new与make区别的相关资料,需要的朋友可以参考下。前言本文主要给大家介绍了Go语言中函数new与make的使用和区别,关于Go语言中new和make是内建的两个函数,主要用来创建分配类型内存。在我们定义生成变量...

2018-06-12 05:09:38 292

转载 使用@property

原文https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001386820062641f3bcc60a4b164f8d91df476445697b9e000在绑定属性时,如果我们直接把属性暴露出去,虽然写起来很简单,但是,没办法检查参数,导致可以把成绩随便改:s = Stud...

2018-06-07 01:19:17 151

转载 Priority Inversion - 优先级翻转

英文: Priority Inversion 中文: 优先级翻转、优先级倒置、优先级逆转 介绍: 即当一个高优先级任务通过信号量机制访问共享资源时,该信号量已被一低优先级任务占有,而这个低优先级任务在访问共享资源时可能又被其它一些中等优先级任务抢先,因此造成高优先级任务被许多具有较低优先级任务阻塞,实时性难以得到保证。什么是优先级反转简单从字面上来说,就是低优先级的任务先于高优...

2018-05-03 22:48:02 426

原创 C++中的make_shared,shared_ptr与weak_ptr

C++中的make_shared,shared_ptr与weak_ptrC++11中引入了智能指针,同时还有一个模板函数std::make_shared可以返回一个指定类型的std::shared_ptr。shared_ptr的基本操作#include <memory>#include <iostream>struct Foo { Foo() ...

2018-04-14 12:45:28 1985

原创 Restful API 设计原则

Restful API 设计原则前言网络应用程序分为前端和后端两个部分。当前的发展趋势,就是前端设备层出不穷(手机、平板、桌面电脑、其他专用设备……),这也就意味着前端的开发代码、开发框架变得多种多样。因此,必须有一种统一的机制,方便不同的前端代码与后端进行通信。这就导致了API构架的流行。REST是目前比较成熟的一套互联网应用程序的API设计理论。 它可以降低开发的复杂度,提...

2018-04-10 05:00:11 4781 1

原创 初识Restful架构

初识Restful架构起源REST这个词,是Roy Thomas Fielding在他2000年的博士论文《Architectural Styles and the Design of Network-based Software Architectures》中提出的。《CHAPTER 5 Representational State Transfer (REST)》是REST的...

2018-04-09 10:42:08 289

原创 Google Code Jam 2018: Qualification Round

资格赛,除了最后一题比较有趣以外,其他都比较简单Saving The Universe Again贪心 一开始想着尽可能将S往前移,但是想了想觉得这样移动好多次,可能才等于后面的S往前移一位的成果。 所以就变成尽可能地将C往末尾移(末尾一段连续的C就不用考虑了),即,每一次移动减少的伤害最大。int T,n;vi a1,a2;int main(){ cin>&...

2018-04-09 00:19:56 1441

原创 HTTP协议与其请求方法

HTTP协议与其请求方法HTTP协议简介HTTP(超文本传输协议,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议,最初的目的是为了提供一种发布和接受HTML页面的方法,即用于从WWW服务器传输超文本到本地浏览器的传输协议。所有的WWW文件都必须遵守这个标准。HTTP连接使用的是“请求—响应”的方式,不仅在请求时需要先建立连接,而且需要客...

2018-04-08 09:44:26 1602

原创 4和7是一个幸运数字

一个比较有趣的面试题题意:仅由4和7组成的十进制数字被称为幸运数字,如,4,7,44,47。那么仅由幸运数字乘积得到的数字为超级幸运数字,如,28 = 4 * 7。现在给你两个数字表示上下限,让你求这段区间内有多少个超级幸运数字。总共有1000组查询,上下限最多到1012101210^{12}。思路:第一想法是容斥搞一下,但是其实非常难,因为除了爆搜很难去构造出仅由幸运数字...

2018-04-04 00:49:34 2925

原创 Java中的自定义注解@interface

Java的注解大家用得都挺多的,现在讲解一下它提供的自定义注解语法。自定义注解使用@interface自定义注解时,自动继承了java.lang.annotation.Annotation接口,由编译程序自动完成其他细节。在定义注解时,不能继承其他的注解或接口。@interface用来声明一个注解,其中的每一个方法实际上是声明了一个配置参数。方法的名称就是参数的名称,返回值类型就是...

2018-03-20 05:03:55 1250

原创 线程的3种实现方式

线程的3种实现方式在引入线程的操作系统中,进程是资源分配的基本单位,线程是独立调度的基本单位。在同一进程中,线程的切换不会引起进程切换。在不同进程中进行线程切换,如从一个进程内的线程切换到另一个进程中的线程时,会引起进程切换。线程分为两种: 名称 描述 用户级线程(User-Level Thread, ULT) 由应用程序所支持的线程实现, 对内核不可见...

2018-03-20 04:55:48 6975

转载 JavaScript关于作用域、作用域链和闭包的理解

作用域先来谈谈变量的作用域 变量的作用域无非就是两种:全局变量和局部变量。 全局作用域: 最外层函数定义的变量拥有全局作用域,即对任何内部函数来说,都是可以访问的:<script> var outerVar = "outer"; function fn(){ console.log(outerVar); } fn();/...

2018-03-10 10:39:53 236

转载 JAVA回调机制(CallBack)详解

原文https://www.cnblogs.com/heshuchao/p/5376298.html序言最近学习java,接触到了回调机制(CallBack)。初识时感觉比较混乱,而且在网上搜索到的相关的讲解,要么一言带过,要么说的比较单纯的像是给CallBack做了一个定义。当然了,我在理解了回调之后,再去看网上的各种讲解,确实没什么问题。但是,对于初学的我来说,缺了一个循序渐进的过...

2018-03-01 07:34:01 189

转载 Java中的抽象类

抽象类的基本概念普通类是一个完善的功能类,可以直接产生实例化对象,并且在普通类中可以包含有构造方法、普通方法、static方法、常量和变量等内容。而抽象类是指在普通类的结构里面增加抽象方法的组成部分。那么什么叫抽象方法呢?在所有的普通方法上面都会有一个“{}”,这个表示方法体,有方法体的方法一定可以被对象直接使用。而抽象方法,是指没有方法体的方法,同时抽象方法还必须使用关键字abstrac...

2018-02-23 01:14:40 309

转载 多线程、同步异步及阻塞和非阻塞

多线程、同步异步及阻塞和非阻塞进程和线程的概念进程:运行中的应用程序称为进程,拥有系统资源(cpu、内存)线程:进程中的一段代码,一个进程中可以有多段代码。本身不拥有资源(共享所在进程的资源);在java中,程序入口被自动创建为主线程,在主线程中可以创建多个子线程。区别:是否占有资源问题创建或撤销一个进程所需要的开销比创建或撤销一个线程所需要的开销大。进程为重量...

2018-02-23 00:38:48 1240

转载 C++内存分配方式详解(堆、栈、自由存储区、全局/静态存储区和常量存储区)

一、数据结构中的栈和堆虽说我们经常把堆栈放在一起称呼,但是不可否认的是,堆栈实际上是两种数据结构:堆和栈。堆和栈都是一种数据项按序排列的数据结构。栈:就像装数据的桶或箱子,它是一种具有后进先出性质的数据结构。堆:一种经过排序的树形数据结构,每个结点都有一个值。通常我们所说的堆的数据结构,是指二叉堆。堆的特点是根结点的值最小(或最大),且根结点的两个子树也是一个堆。由于堆的这个特性,...

2018-02-20 00:20:43 6353 5

原创 Java中可变参数方法

Java中可变参数方法J2SE 1.5中提供了Varargs机制,允许直接定义能和多个实参相匹配的形参。从而,可以用一种更简单的方式,来传递个数可变的实参。Varargs的含义大体说来,“Varargs”是“variable number of arguments”的意思。有时候也被简单的称为“variable arguments”,不过因为这一种叫法没有说明是什么东西可变,所以意义稍...

2018-02-18 09:51:38 9959

原创 Scala中的文件操作

Scala中的文件操作文件读取在Scala中,如果只是简单的读取文件内容,可以有两种方法,第一是使用Java的API,第二种就是使用scala.io.Source模块。读取行import scala.io.Source;object Demo extends App { val filename = "/Users/Phoebe/Documents/haha...

2018-02-18 08:38:40 1120

原创 Scala中的Option

Scala中的Option避免null使用大多数语言都有一个特殊的关键字或者对象来表示一个对象引用的是“无”,在Java,它是null。写Java程序的时候,经常会碰到没有有意义的东西可以返回,我们返回null。在Java 里,null 是一个关键字,不是一个对象,所以对它调用任何方法都是非法的。因此调用方必须检查返回值,不然会有NullPointerException的异常。...

2018-02-13 05:20:36 1960

原创 Spark中的RDD基本操作

Spark中的RDD基本操作前言RDD是spark特有的数据模型,谈到RDD就会提到什么弹性分布式数据集,什么有向无环图。这些知识点在别的地方介绍得非常多,本文就不去讲这些了。在阅读本文时候,大家可以就把RDD当作一个数组,或者一个Scala的collection对象,这样的理解对我们学习RDD的API是非常有帮助的。RDD的创建Spark里的计算都是操作RDD进行,那...

2018-02-11 05:32:59 5516 1

原创 Spark中的cache和persist

Spark中cache和persist的作用以及存储级别前言Spark开发高性能的大数据计算作业并不是那么简单。如果没有对Spark作业进行合理的调优,Spark作业的执行速度可能会很慢,这样就完全体现不出Spark作为一种快速大数据计算引擎的优势来。因此,想要用好Spark,就必须对其进行合理的性能优化。有一些代码开发基本的原则,避免创建重复的RDD,尽可能复用同一个RDD,如下...

2018-02-08 11:51:05 3522

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