自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(82)
  • 资源 (8)
  • 收藏
  • 关注

原创 golang调优

go tool pprof -http=":8082" prof.cpu.123go tool trace trace.out

2020-04-15 17:42:17 382

原创 vim支持python3

vim支持python3git clone https://github.com/vim/vim.gitcd vim./configure --enable-python3interp=yes打开./src/auto/config.log 看看里面有没有啥错误,有啥错误解决啥,make -j2make install注意:python3-dev 一定要安装...

2019-01-17 16:03:05 1488

原创 面试杂项3

编程题 给了一个链表,第1个结点标号为1,把链表中标号在M到N区间的部分反转 (我写的很慢,面试官看不下去了,让我只说思路) 我的思路是两个指针,计算出M-N的距离,然后一起出发。 将这段区域中的链表反转,然后再添到原来的链表里面。 **编程题 在一个字符串中,找出最长的无重复字符的子串 (这个问题还是有难度的,我碰巧想到了用hash,但没想到完整解法,用hash的解法复杂度在O(N^2)

2016-06-30 22:51:41 2522

原创 面试杂项2

操作系统fork fork()函数调用成功后,将为子进程申请PCB和用户内存空间.子进程是父进程的副本.在用户空间将复制父进程用户空间所有数据(代码段、数据段、BBS、堆、栈),复制父进程内核空间PCB中的绝大多数信息.子进程从父进程继承下例属性:有效用户、组号、进程组号、环境变量、对文件的执行时关闭标志、信号处理方式设置、信号屏蔽集合、当前工作目录、根目录、文件模式掩码、文件大小限制和打开

2016-06-30 22:50:43 377

原创 面试杂项

explicit是干什么用的? 可以阻止不应该允许的经过转换构造函数进行的隐式转换的发生。 内存溢出有那些因素? 内存不够 new与malloc的区别,delet和free的区别? 1. new/delete是C++里才有的,而new/delete会调用构造析构函数。 2. new/delete通常来说是操作符,就是”+”,”-“一样。 3. new/dele

2016-06-30 22:48:25 438

原创 c++对象内存布局(虚表和虚指针)

参考文章: http://blog.csdn.net/haoel/article/details/3081385 http://www.cnblogs.com/kekec/archive/2013/01/27/2822872.html 虚函数表中虚函数在虚表中出现的位置是按照类中成员申明顺序,然后子类在前,父类在后的方式。 以下所有的函数均为虚函数。 普通继承: 虚表指针存在于子类的头部

2016-06-22 11:47:01 1194

原创 稀疏矩阵的设计问题

稀疏存储 设计一个结构存取稀疏矩阵 (面试官最后告诉我了一个极度压缩的存法,相同行或列存偏差?) 稀疏存储有以下 几个方法, 参考文章:稀疏矩阵的几种存取方法 方法1:用三个一维向量存。 方法2:用列和行偏移量的方式来存。 方法3:对于那种值在对角线上面的情况,可以存储的是对角线上面的元素+偏移量的方式来存。 方法4: 方法5:

2016-06-21 09:34:10 789

原创 大数据处理问题

topK问题topK算法就是给出一堆数,在里面找出最大、最常出现的等一系列问题。 topK算法(常考) 方法1:K大小的数组存topK 维护一个K大小的排序数组,每次都和最后一个元素比较,如果比最后一个元素大的话,那么就把这个元素插入到排序数组中。因为元素的每个移动的次数可能是K,时间复杂度O(N*K) 方法2:K大小的堆存topK 维护一个K大小的小顶堆,每次都和堆最上面的元素作比较,如

2016-06-21 09:24:47 621

原创 Hyper如何同时支持OLAP和OLTP业务

背景在OLAP环境下,数据的更新操作一般是通过定时调用ETL程序来定期将数据导入到内存仓库里面。这样带来的问题就是数据不是实时的,不够”新鲜“。Hyper如何维持数据的新鲜Hyper是一个同时支持OLTP和OLAP型的全内存数据库。Hyper的设计目标:能够在1s之内处理成百上千次的OLTP型的事务操作,达到像VoltDB或者TimesTen一样的处理效率。OLAP能够处理up-to-dat

2016-06-20 17:49:53 1029

原创 Oracle select case when 语法

假如目前我们有一张表 SQL> select * from a ; ONE TWO 1 1 1 2 3 9 2 3此时,我们要将表中ONE为1,2,3的,在统计结果中显示成为A,B,C,TWO中也作相应处理,同时,显示出ONE列内容,那么: SQL> select

2016-06-18 11:49:38 2597

原创 暴雪hash来作整数的hash

暴雪hash来作整数的hash我们常常在项目中会用到探测一个数组B中是不是有数组A中的数据。 方案1:将B中的数据放到一个位图中,然后用A中的数据探测。 缺点:如果B中的数据比较稀疏,比如[1,2,900,800]等,位图开销大,因为要为没有出现的数也需要有一个bit来标识。 方案2:将B中的数据存到一个hash表中,然后用A中的数据作探测。 暴雪hash的原理见我之前转载的文章暴雪hash

2016-06-16 17:06:52 622

转载 暴雪hash

暴雪的hash转载自:http://www.biaodianfu.com/blizzard-hash.html暴雪公司的魔兽、星际等游戏都一样一个非常大的MPQ文件,该文件存储了游戏中的大部分数据,想要把这些文字找出来,简单的办法是从数组头开始,一个个字符串读过去,比较每一个,直到找到对应的内容。Blizzard的天才和牛人们当然不会这样做,他们用了更聪明的方法: 用某种算法,把一个字符串压缩成一个

2016-06-13 23:32:22 582

转载 对于客户端和服务器bind问题

原文:http://www.cnblogs.com/hnrainll/archive/2011/08/20/2147383.html客户和服务器通过调用函数bind时可以指定IP地址或端口号,可以都指定,也可以都不指定,根据期望的结果,对sin_addr和sin_port,或sin6_addr和sin6_port应置为什么值,下面做了总结:l 客户端1. T

2016-06-08 15:36:08 2408

原创 动态规划-背包问题降维以及衍生的硬币问题

任何动态规划核心就是划分子问题,然后就是状态转移方程。中间求出来的子问题的解需要存储起来。0-1 背包问题:0-1 背包问题解决的是物品只能够选择1次要不就不选,在背包能够装得下的前提下面,能够保证装的价值最大:状态转移方程 f[i][j] = max{ f[i-1][j] , f[i-1][j - wi] +vi }; 0≤j - wi≤j用二维的空间来表示是比较简单的一维表

2016-06-08 11:20:23 747

原创 shared_ptr 实现

自己实现了一个菜得抠脚的shared_ptr ,自己存草稿看看吧templatestruct Type{ typedef T type;};class SPCountBase{ public : int used_count_; void AddOne(){ used_count_++; cout<<"add "<< used_count_<<endl;

2016-06-01 15:30:51 701 1

原创 List 的选择排序

/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode *in

2016-05-31 20:28:01 521

原创 对链表进行排序

对链表进行排序:参考的思路是来自于这位“哥们 ”https://leetcode.com/discuss/92326/share-my-c-concise-solutions-easy-to-understand/** * Definition for singly-linked list. * struct ListNode { * int val; *

2016-05-31 14:41:32 755

原创 (四)Hyper如何将数据整合以及取数据

Hyper中取数据流程如上图:其中,在取数据的时候会将数据横切,分批次输出,这样做的好处是考虑到内存的cache。还有,为什么Hyper没有将数据直接取出到consumer中呢?我觉得这个和DataBlock数据组织有关系,因为DataBoloc是按照列存储的,那应该是按照列取数据。对于hot区域,为了给上层暴露一个统一的接口,应该也是以这种方式来取数据:将数据先缓存在一个vector中,

2016-05-24 10:37:33 584

原创 (三)Hyper压缩策略的选择以及JIT

hyper的DataBlock中采用了三种压缩策略。signle value 压缩:这种事当在一个block中列的值为单值的时候才用的。排序字典压缩:一般而言,string会用这种压缩方式,这样方便于做比较操作,比如等号,大于等等截断压缩:这个压缩算法是只存了数据相对于min只的偏移量,这个压缩算法不会用在string和double 上面数据会在交给消费者前被解压。感觉JIT会

2016-05-24 09:27:22 309

原创 (二)Hyper如何对DataBlock中的数据进行索引

上图中展示了一个4byte的列的索引在hyper中的PSMA怎么工作的。按照Hyper的索引方式,lookuptable的有4byte*2^8= 2^1024个entry。其中,重要的的就是,如何将min和max之间的数据用这1024个entry表示。那么entry的计算方式是:其中,r是byteofdelta中除开第一个非0 的byte后剩余的byte数量。我们现在来验证可行性,假设

2016-05-23 21:39:48 273

原创 (一)Hyper的数据管理概述

Hyper是一个单机的数据库,不过现在有人把它分布式化了,性能还很好。http://www.vldb.org/pvldb/vol9/p228-roediger.pdfHyper将数据分为了冷数据和热数据,冷数据就是经常读不常写的,热数据就是经常写的不经常读的。本文主要讲的是Hyper对冷数据的管理。为了能够支持对热数据的快速访问,热的数据如果要压缩必须是轻量级的压缩。在hype

2016-05-23 14:26:55 921 1

原创 (一)stl源码剖析学习,遗留问题在3.7

本章节只是总结下第一章中出现的一些支离破碎的知识点。当一个类重载了(),它就变成了一个仿函数。关于空间适配器,http://www.cnblogs.com/luxiaoxun/archive/2012/08/10/2631812.html。给出new:分配空间,并调用构造函数,operator new,分配空间,不调用构造函数,但是可以被重载,placement new,重载的operat

2016-05-16 21:10:39 263

原创 待续(四)spark学习系列

这章节主要延续的(三)中的shuffle模块提供的shuffle read。在spark 中,shuffle read是提供给shuffle的后继用来读取shuffle数据的。当需要读取远程数据的时候,1.每次只会开最多5个线程进行读取2.每次请求的数量不会超过maxmbinflight,默认是45M/5,这样的好处是,限制数据的读取量,当一个节成为了网络拥塞节点后,在它上面读取数据的

2016-05-16 00:02:58 284

原创 待续。。。。。

http://www.zhihu.com/question/26568496http://dongxicheng.org/framework-on-yarn/apache-spark-shuffle-details/

2016-05-15 16:38:59 264

原创 倒排索引

转自 wiki百科:比如说,现在有这些文章以及文章中含有的单词 以英文为例,下面是要被索引的文本:文本0   - "it is what it is"文本1    - "what is it"文本2    - "it is a banana"我们就能得到下面的反向文件索引: "a":      {2} "banana": {2} "is":     {0, 1,

2016-05-13 17:30:19 401 1

原创 weak_ptr和shared_ptr,以及什么时候用weak_ptr

参考文章https://cloud.github.com/downloads/chenshuo/documents/CppPractice.pdf值语义 (value sematics) 指的是对象的拷贝与原对象无关,就像拷贝 int 一样。 C++ 的内置类型 (bool/int/double/char) 都是值语义,标准库里的 complex、vector、string 等等类型也都是值语

2016-05-13 11:50:19 929

原创 const_cast 如何实现的

在c++里面,类型之间的转换是要检查的,但是指针之间的类型的转换并不检查原来的类型,例如下面的代码:(const_cast实现的原理)int main(){ const int constant = 21; int* modifier = (int*)(&constant); *modifier = 22; cout<<constant<<endl; cout<< *modifi

2016-05-11 15:27:01 1576

转载 需要手写的算法之---------------归并排序

这里只是给出二路归并归并的思想是,将要排序的区间里面的数据分成两个部分,然后分别对他们进行二路归并,最小的粒度是当两个区间的数据都是只有一个,或者有一个没有的时候。具体的代码如下:http://blog.csdn.net/morewindows/article/details/6678165/

2016-05-08 15:57:11 514

原创 最长子序列问题(时间复杂度O(nlog(n))

问题:10 , 9 , 8 , 1, 2, 5 ,3,最长子序列是 1, 2, 5。最长子序列长度是3。思路:用一个数组表示当前的最长的子序列,在接下来新增加的元素中,找到这个子序列中某个可以被新的值替换的位置,这个位置要满足被新的值替换后,依然保证数组中保存的是最长的子序列,并且在此基础上可以有更多的值并入这个数组code:class Solution { public:

2016-05-07 21:06:27 444

原创 N个加油站问题

问题:城市的环形路有n个加油站,第i个加油站的油量用gas[i]来表示,你有如下的一辆车:它的油缸是无限量的,初始是空的它从第i个加油站到第i+1个加油站消耗油量为cost[i]现在你可以从任意加油站开始,路过加油站可以不断的加油,问是否能够走完环形路。如果可以返回开始加油站的编号,如果不可以返回-1。https://leetcode.com/problems/ga

2016-05-07 13:41:17 1291

原创 感觉略炫酷的将正在运行的程序切换到后台运行

首先,你需要一个正在运行的程序a.out然后获取到这个进程的进程号(ps -al )然后 gdb -p 进程号在gdb 里面调用close( 方法很多,比如 p (int) close(1) ; 比如 call close(1) )然后呢,因为刚才关闭了文件描述符1,我们新创建一个文件 调用 call creat("a.out.txt" , 0600),这个文件描述符其实又是1 ,

2016-05-06 11:49:35 476

原创 (三)Spark学习系列

本章节讲一讲spark的Shuffle模块shuffle模块作用是将若干node节点上面的数据重新分割,再划分到不同的节点中。就想是把牌收集到了一起,洗一下,重新再发给牌友一样。那么这里面的关键问题是:1、单个节点的数据量大,如果有的数据需要集中处理怎么办2、为了节约带宽,可能需要将数据压缩以后再传3、需要通过网络传输,序列化和反序列化也是个问题。对于单个task说,tas

2016-04-29 15:07:01 343

原创 需要手写的排序算法---希尔排序

void Shell(int array[] , int n){ for(int gap = n/2 ; gap > 0 ; gap /= 2){ for(int i = 0 ; i < gap ; i++ ){ for(int j = i + gap ; j < n ; j+=gap){ //利用插入排序,将每个分组中的元素放到指定的地方 int tmp = array

2016-04-29 10:40:05 320

原创 (二)Spark学习系列

(一)讲到了stage划分好了,这一章我开始学习任务是如何下发并且执行的。在spark计算出了哪些partition是需要重新计算的后,便开始各个partition生成计算的task,然后封装成为taskset,然后提交给taskscheduler。一个taskset里面存的是一组逻辑 完全相同的task。每个taskscheduler对应了一个 schedulerBackend,sche

2016-04-28 18:00:51 237

原创 需要手写的算法之-----堆排序算法

void HeapCore(vector &vec ,size_t size, size_t end){ size_t i = end ; size_t j = i ; bool flag = false; do{ flag = false; if(i * 2 vec[i *2]){ j = i*2; } if(i *2 + 1 vec[i *2] ) {

2016-04-28 11:48:45 1484

翻译 统计1到N之间所有数字中1的个数

本文中的code和思想来自于https://leetcode.com/discuss/44281/4-lines-o-log-n-c-java-python ,感谢作者code如下:int countDigitOne(int n) { int ones = 0; for (long long m = 1; m <= n; m *= 10) { int a =

2016-04-27 10:47:26 3789

原创 《effectivec++》不在构造和析构过程中调用virtual函数

class Base{public: Base() { Foo(); } virtual ~Base(){} virtual void Foo() { std::cout << 1 << std::endl; } };class Derive : public Base{public: Derive(int v) :val_

2016-04-26 15:14:47 275

原创 关于子类调用基类的构造函数的各种问题

基类写了默认的构造函数,子类未明确调用 :(√) :这个情况,子类就可以默认调用到默认的构造函数基类写了的默认构造函数,子类明确调用 :(√) :这个情况,子类就可以默认调用到默认的构造函数基类没有写默认的构造函数,子类明确调用 : (√) : 这个情况,系统会给基类生成一个默认的构造函数,这样,子类就可以默认调用基类没有写默认的构造函数,子类未明确调用 : (√):这个情况,系统会给

2016-04-26 14:25:37 1229

原创 extern "C" c++如何实现函数的重载

待续

2016-04-26 14:17:39 469

原创 最小编辑距离

问题:Given two words word1 and word2, find the minimum number of steps required to convert word1 to word2. (each operation is counted as 1 step.)You have the following 3 operations permitted on a wo

2016-04-26 11:22:31 250

vim配置插件-diwuge

vim配置插件

2017-08-27

vim配置插件-dierge

vim配置插件

2017-08-27

vim配置插件-disige

vim配置插件

2017-08-27

vim配置插件-第三个

vim配置插件

2017-08-27

vim配置插件

vim配置插件

2017-08-27

SFF-8472协议中文

一共20多页,基本上完全覆盖英文正文。用于初学者看英文版的参照。

2013-07-16

俄罗斯方块C

俄罗斯方块、c语言

2013-06-15

zigbee/api接口

cc2431的,做定位系统的可以用得上大的瓦房

2011-10-15

空空如也

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

TA关注的人

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