自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 JumpConsistentHash,一种快速、简单、内存占用最少的一致性hash算法

JumpConsistentHash提出了一种崭新的思路来解决这类问题,如果理解了原理那很容易看出想要增加或者删除node需要在末尾进行操作,这是和传统的实现不一样的地方。但笔者认为这个不是什么很大的缺点,它优秀的复杂度和实现完全可以覆盖掉这个缺点。笔者最近刚好要搭一套分布式缓存服务,最后直接拿这个上手非常好用。如果还想了解更多细节,比如benchmark之类的建议看原文。

2023-04-23 16:39:55 625 2

原创 C++ hashmap的使用建议

C++ hashmap使用建议

2022-10-18 00:12:17 3033

原创 如何使用cpu SIMD指令集优化代码

首先看机器支持指令集。linux:cat /proc/cpuinfo |grep flagscat /proc/cpuinfo |grep flags对于向量操作,主要是以下三种指令集,MMX,SSE,AVX,按时间排序。使用内置函数。gcc编译g++ -o test test.cc -mavx2 --std=c++11部分指令需要内存地址对齐才行,我们默认都对齐32位avx......

2022-05-29 22:22:52 2053

原创 Lua在直播特征平台中的一次实践

本人今年年初开始换了一份工作,然后这一年来都在适应着工作节奏,比较累,放假的时候提不下心去学习。等今年工作告一段落后,明年就算工作节奏如此我也要逼迫自己把之前预定的东西给看完,这篇文章就是今年的唯一贡献了。1.什么是特征平台在推荐系统的场景里大致可分为召回-粗排-精排-混排这4个阶段,这四个阶段我们都需要通过user和feed的特征去做不同的策略。其中在混排这个阶段对工程同学的负担尤为严重,混排需要决定哪些feed先出,还有最经典的两种操作:打散和强插。此时若工程同学一一去实现算法同学的策略是不现实

2021-11-27 20:30:58 556

原创 Raft论文简述

目的根据论文的实现来看,我认为Raft和Paxos这些一致性算法是为了解决分布式里状态机同步的问题。最典型的应用分布式里的容错,你的所有server都需要有备份,如果是有带状态的server,那么master和secondary之间的数据如何保持一致性就是一个难题,而这些算法就是为了解决这个问题的。前言这里稍微提一下,一般来说同步状态机,有以下两种方案。1.State Machine。将完整的状态同步。2.Replicated Machine。假设没有外因的情况下,对一样的状态机输.

2021-01-16 21:17:45 676 1

原创 Google File System总结

此文章完全基于作者本人对论文的理解,可能会哪里理解得不到位,仅供参考。目的GFS诞生是为了如何设计一个高效的顺序读写的分布式文件系统。需要解决的问题需要解决的问题都是分布式要解决的惯例了。性能,容错,复制和一致性。性能利用复数台机器的资源来完成工作,性能就可以有显著提高。所以自然就会想到把数据分片,分成复数片段后分布在不同的机子上,就可以做到同时从不同的机子上读取数据了。容错但是一旦你同时运行了成百上千台机器,那么就会将本来很小的错误给放大,本来概率很低的错误就可..

2020-12-17 16:56:52 493

原创 MIT6.824 Lab 1: MapReduce

mit的分布式实验。第一个实验就是实现google MapReduce论文的简单版本,基于课程要求,我的代码就不公开了(本身也不会go,边写边查资料的,临时磨枪上阵,代码写得太烂)。直接我的思路。流程分为两个部分,master和worker。master:3个协程,(注意go的协程是可以在不同的线程的,所以写共享数据的时候要上锁)1.RPC服务器。提供两个rpc接口GetTask和markTaskFinish,用于获取任务和标记任务完成。2.任务状态检查,检查所有任务是否完.

2020-11-22 19:32:29 370

原创 CS:APP malloc lab 记录

Introduction在本lab中,您将为C程序编写一个动态存储分配器,即您自己的malloc,free和realloc例程版本。 鼓励您创造性地探索设计空间并实现正确,高效和快速的分配器。 How to Work on the Lab您的动态存储分配器将包含以下四个函数,这些函数在mm.h中声明,并在mm.c中定义。我们为您提供的mm.c文件实现了我们可以想到的最简单但仍在功能上正确的malloc程序包。 以此为起点,修改这些函数(并可能定义其他私有静态函数),以使它们遵循...

2020-08-10 19:19:46 2287

原创 CS:APP shell lab 记录

Introduction任务目的是使您更加熟悉过程控制和信号通知的概念。 为此,您需要编写一个简单的Unix Shell程序来支持作业控制。Hand Out Instructions首先将文件shlab-handout.tar复制到计划在其中进行保护的受保护目录(实验室目录)。 然后执行以下操作:1.输入命令tar xvf shlab-handout.tar展开tarfile。2.输入命令make进行编译并链接一些测试例程查看tsh.c(tiny shell)文件,您将看..

2020-07-26 20:08:52 486

原创 毕业一年,回顾一下自己与刚毕业的变化

总结不知不觉已经过了一年,对比了一下去年,感觉应该稍微比之前强了辣么一丢丢?(大概吧)。出来工作才知道,在学校是多么舒服,现在工作每天基本都在拧螺丝,平时想学点什么只能尽快地把自己的业务需求搞完弄出点时间出来看看别的东西。我后悔我在大学本科的时候没有把基础学得更扎实。现在毕业了,我越是看基础,越是觉得我当初有多无知。。。根本是个无底洞。我时常在想我读个研究生会怎样,经过多次思考得出结论是:跟现在可能不会有太大区别,只是出来找工作可能会好找一点。果然有一些事是失去了才知道珍惜,希望自己今后能坚持学习吧

2020-07-01 15:42:54 779 2

原创 MIT6.828-OS lab5:Spawn and Shell 记录

Introduction在这次lab中,您将实现spawn,这是一个加载和运行磁盘可执行文件的库调用。 然后,您将充实kernel和库操作系统,以在控制台上运行Shell。Getting Started照以往的lab一样,创建分支,然后merge。本部分lab的主要新组件是文件系统环境,位于新的fs目录中。 扫描此目录中的所有文件,以了解所有新内容。 另外,在user和lib目录中还有一些与文件系统相关的新的源文件。合并新的lab5代码后,您应该再次运行lab4的pingpong,p

2020-06-29 20:56:21 423

原创 CS:APP cachelab 记录

Overview本lab将帮助您了解缓存对C程序性能的影响。 lab由两部分组成。 在第一部分中,您将编写一个小的C程序(大约200-300行),该程序模拟高速缓存的行为。 在第二部分中,您将优化一个小型矩阵转置函数,其目标是最大程度地减少高速缓存未命中的次数。Reference Trace Files讲义目录的traces子目录包含参考跟踪文件的集合,我们将使用它们来评估您在A部分中编写的缓存模拟器的正确性。跟踪文件由名为valgrind的Linux程序生成。 例如,输入在命令行.

2020-05-13 09:40:38 1112

原创 MIT6.828-OS lab4:Preemptive Multitasking 记录

Introduction在这个lab,您将在多个同时活动的用户态environment中实现抢占式多任务处理。在partA中,您将为JOS添加多处理器支持,实现循环调度,并添加基本的environment管理系统调用(创建和销毁environment以及分配/映射内存的调用)。在partB中,您将实现一个类似Unix的fork(),它允许用户态environment创建其自身的副本。...

2020-04-20 22:20:27 983

原创 CS:APP archlab 记录

Introduction在本lab中,您将学习流水线Y86处理器的设计和实现,同时优化它和基准程序以最大化性能。 允许您保留对基准程序的任何语义转换,或者对流水线处理器进行增强,或者两者。 完成lab后,您将对影响程序性能的代码和硬件之间的交互的理解有很大的提升。 lab分为三个part,每个part都有自己的练习。 在part A中,您将编写一些简单的Y86程序并熟悉Y86工具。 在part...

2020-04-12 10:57:38 1832

原创 MIT6.828-OS lab3:User Environments 记录

Introduction在本实验中,您将实现运行受保护的用户模式环境environment(即“进程process”)所需的基本内核功能。您将增强JOS内核,以设置数据结构来跟踪用户环境,创建单个用户环境,将程序映像加载到其中并开始运行。您还将使JOS内核能够处理用户环境发出的任何系统调用,并处理它引起的任何其他异常。Note:在本实验中,environment和process这两个术语是...

2020-04-02 16:08:06 1440

原创 CS:APP buflab 记录

Introduction这项任务将帮助您对IA-32调用约定和堆栈组织有详细的了解。 它涉及对lab目录中的可执行文件bufbomb施加一系列缓冲区溢出攻击。Logistics像往常一样,这是一个单独的项目。我们使用gcc的-m32标志生成了实验,因此,即使主机是x86-64系统,编译器生成的所有代码也都遵循IA-32规则。 这足以使您确信编译器可以使用所需的任何调用约定,只要它...

2020-03-30 09:37:57 422

原创 MIT6.828-OS lab2:Memory Management 记录

这一章主要讲内存分配。introduction在这个实验中,你将会为你的操作系统写内存管理代码。内存管理有两个部件。为了kernel能够分配并且释放内存,第一个部件是kernel的物理内存分配器allocator。你的allocator将以4096B为操作单位,称为页。您的任务将是维护数据结构,该数据结构记录哪些物理页是空闲的,哪些是已分配的,以及多少进程正在共享每个分配的页。 ...

2020-03-16 16:14:57 635

原创 CS:APP bomblab 记录

任务就是把bomb这个可执行文件里的炸弹拆掉,他有6组数据,你需要输入6次来拆除这个炸弹。简化流程你可以新建一个文件叫psol.txt,然后通过下面的执行命令./bomb psol.txt即可把psol.txt里的数字自动输入到bomb里。理论上直接重定向输入流<也是可以的吧。Hint1.学会用gdb。2.objdump -t可以打印可执行文件的符号表...

2020-03-11 10:54:19 569

原创 CS:APP datalab 记录

CS:APP这本书真的可以说是计算机的内容 给你从头讲到尾了,虽然每个领域方面的深度不够,但是已经足够了,因为每一个领域都不是这么简单就能够说完的,这本书能把这么多东西讲得很清楚真的不容易,所以看完建议挑战一下lab。要求:不允许使用条件语句和循环语句,只允许使用8个运算符:! ˜ & ˆ | + >来完成,某些题目会额外限制运算符数量,最大只能使用8位整数。...

2020-02-29 13:03:49 582

原创 一个简单的nosql数据库vDB的实现

github地址:https://github.com/viktorika/vDB.git参考资料这份代码是参考APUE写的,采用的结构跟书里是一模一样,不一样的只是代码风格以及部分细节上的区别,所以本文下面所说的实现则是解释一下APUE是怎么做的。数据库文件类型首先得讲讲这个数据库会生成两个文件。1.索引文件.idx2.数据文件.dat数据库文件存储结构再来讲讲里...

2020-02-23 15:50:24 686

原创 MIT6.828-OS lab1:Booting a PC 记录

回归初心,从基础开始再搞起。环境配置不多说,都是泪,千万别用64位系统搞这个东西,搞到最后我都搞不定。32位直接10分钟搞定了。基本如下。1.先安装依赖库libsdl1.2-devlibtool-binlibglib2.0-devlibz-devlibpixman-1-dev2.把官方6.828的qemu clone下来然后执行下面命令安装...

2020-01-02 10:30:02 713

原创 skiplist的简单实现

#pragma once#include <cstdlib>#include <cstdio>#include <ctime>template<typename Key, class Comparator>class SkipList {public: explicit SkipList(Comparator cmp); ~Sk...

2019-10-15 20:44:22 178

转载 google编程规范笔记

准备现在开始陆续抽空看一下书和一些感兴趣的源码,现在在抽空看google的leveldb,只看了一点,但是也觉得google的代码写的非常优美,决定先去看看google的编程规范是怎么说的,效仿一下。源地址:https://zh-google-styleguide.readthedocs.io/en/latest/google-cpp-styleguide/1. 头文件通常每一个.cc...

2019-03-18 22:41:29 726

原创 python总结

模块的导入用import和from,以及reload调用import相当于做了一次赋值语句。reload是一个方法,重载一个模块,不会重载该模块导入的其他模块。不可变对象:数字,字符串,元组,不可变集合可变对象:列表,字典,可变集合列表解析:例子:M=[[1,2,3],[4,5,6],[7,8,9]]col2=[row[1] for row in M]...

2019-02-19 15:33:22 155

原创 Direct3D 实现一个汽车小游戏

github:https://github.com/viktorika/a-car-game-written-in-direct3d这个是我花了几天入门看了Direct3D的官方教程和另外一本&lt;Dx11游戏编程入门&gt;后做的一个简单的项目,为了加深我对direct3D的认识。因为只是入门,所以用的接口基本都是windows sdk的dx12接口,只有加载贴图的时候被微软文档告知已...

2019-01-23 13:12:13 2586

原创 DirectX学习 Tutorial 7

在上一个教程中,我们为项目引入了照明。 现在我们将通过向我们的立方体添加纹理来构建它。 此外,我们将介绍常量缓冲区的概念,并解释如何使用缓冲区通过最小化带宽使用来加速处理。本教程的目的是修改中心立方体以将纹理映射到其上。纹理映射纹理映射是指2D图像在3D几何体上的投影。 我们可以把它想象成包装礼物,将装饰纸放在一个平淡无奇的盒子上。 为此,我们必须指定几何体表面上的点如何与2D图像对应...

2019-01-14 15:28:00 278

原创 DirectX学习 Tutorial 6

在之前的教程中,世界看起来很无聊,因为所有对象都以相同的方式点亮。 本教程将介绍简单照明的概念及其应用方法。 使用的技术将是平行光。本教程的结果将修改前面的示例以包含光源。 该光源将附在轨道上的立方体上。 可以在中心立方体上看到光的影响。在本教程中,将介绍最基本的光的类型:平行光。无论距离光线的距离如何,平行光都具有均匀的强度。当光照射到表面时,通过光在表面上的入射角计算反射的光量。当光直...

2019-01-14 14:24:45 171

原创 DirectX学习 Tutorial 5

在上一个教程中,我们从对象空间到屏幕渲染了一个立方体。 在本教程中,我们将扩展转换的概念并演示可以通过这些转换实现的简单动画。本教程的结果将是围绕另一个轨道运行的对象。 展示转换以及如何将它们组合以实现期望的效果是有用的。 在我们介绍新概念时,未来的教程将在此基础上构建。在3D图形中,变换通常用于对顶点和矢量进行操作。 它还用于将它们在一个空间中转换为另一个空间。 通过与矩阵相乘来执行变换...

2019-01-14 11:13:37 242

原创 DirectX学习 Tutorial 4

这章深入了解3d位置和转换的细节。首先考虑坐标系,在计算机图形学中,3D空间最常用于笛卡尔坐标系。该坐标系分为两种:左手坐标系和右手坐标系。详情请查资料。现在我们已经讨论过坐标系,考虑3D空间。 点在不同的空间中具有不同的坐标。 作为一维中的一个例子,假设我们有一个标尺,我们在标尺的5英寸标记处注意到点P。 现在,如果我们将标尺向右移动1英寸,则相同的点位于4英寸标记处。 通过移动标尺,参...

2019-01-13 20:06:06 291

原创 DirectX学习 Tutorial 3

这章着重解释上一章的工作原理。在教程2中,当我们调用VSSetShader()和PSSetShader()时,我们实际上将着色器绑定到管道中的一个阶段。 然后,当我们调用Draw时,我们开始处理传递到图形管道的顶点数据。着色器位于图形管道的不同阶段。它们是由GPU执行的短程序,它接收某些输入数据,处理该数据,然后将结果输出到管道的下一阶段。支持3种着色器:顶点着色器,几何着色器和像素着色器...

2019-01-13 13:44:32 269

原创 DirectX学习 Tutorial 2

这个例子是展示如何渲染个三角形。首先提到了一个概念顶点缓冲区,顾名思义专门用来存储顶点的缓冲区,要表示一个三角形则需要存储三个顶点。顶点有很多属性,如法线,颜色等等。顶点的布局取决于它的属性如何放在内存里,顶点通常由一个struct表示。struct SimpleVertex{ XMFLOAT3 Pos; // Position};现在我们可以用这个结构来表示顶点。...

2019-01-13 10:48:00 272

原创 DirectX学习 Tutorial 1

由于内容有点多,而且本人是0基础学习这个,所以写博客来帮助记忆。首先官方给的第一个例子提到了三个东西:device(设备):创建资源immediate context(直接上下文):应用程序使用直接上下文在缓冲区进行渲染swap chain(交换链):获取设备呈现的缓冲区,在屏幕上呈现内容首先创建一个交换链,具体的参数信息看文档。 DXGI_SWAP_CHAIN_D...

2019-01-12 20:13:08 333

转载 系统调用和库函数区别+用户态和内核态的转换

系统调用是系统提供给程序来操作硬件的一个接口。运行在内核态,一般来说可移植性不高,因为不同的操作系统有不同的系统调用。库函数运行在用户态,虽然实现上也用到了系统调用,但是一般来说库函数都会通过缓冲等机制减少系统调用的次数,从而达到速度上的提高,而且它是与系统无关的,可移植性较高。 一般来说从用户态切换到内核态有三种方式:一.是中断进入内核二.是异常进入内核三.是系统调用进入内核...

2018-07-18 21:49:47 2081

转载 检查内存泄露的工具--valgrind

今天面试的时候问了一下怎么检查内存泄露,然后我就有点懵,现在开发基本都用智能指针了,以前用的时候也很少碰见内存泄露的问题,基本都是瞎调试.只依稀记得有这么一个工具可以用来检测内存泄露,实际没用过,只好今天来学习一波.首先你得安装,安装直接sudo apt get install就好了.转载:https://blog.csdn.net/destina/article/details/619844...

2018-07-18 18:46:02 1722

原创 gdb调试命令

由于面试原因我特意总结一下gdb的用法,以免下次吃亏.参数:f xxx 导入文件b number  设断点r 运行n 执行一行s 进入函数内部执行一小行l 显示代码si ni:汇编层用的调试命令,用法和上面的n和s一样info break 显示断点info threads 显示当前所有的线程信息thread num...

2018-07-18 16:40:58 303

原创 c++ Webserver的实现

这是为了掌握c++11的一些新特性和网络编程的知识而做的一个项目.github:https://github.com/viktorika/Webserver模型:参考muduo部分代码,采用Reactor模型+EPOLL(ET)非阻塞IO模式.外加线程池提高服务器的并发性能.主线程accept,其他线程读-解析-写.Reactor模型运行过程事件循环loop-&gt;封装E...

2018-07-05 16:23:39 17780 1

原创 git学习

git config --global user.name   xxx    #设置git用户名git config --global user.email    xxx   #设置git邮箱git init  xxx    #初始化git仓库git add xxx   #更新即将被commit的文件git commit -m   xxx     #提交并且告诉别人message。...

2018-06-06 22:08:32 121

原创 今日头条面试记录

只问了我一道题,如何求第k大并且不能改变原数组顺序。。太久没做题,脑子不太好使,面试官很nice,给了我提示,但是我还是没当场想出来。。。后来我想了下,好像是记录最大值和最小值,然后二分答案转换为判断问题,复杂度O(nlogn),额如果这个不是正解的话,感觉我也想不出其他解法了,记录一下自己失败经历吧。。。。最后感谢老朋友的内推,是我自己不争气。#include &lt;cstdio&gt;...

2018-06-05 15:42:53 478

原创 Shell脚本学习

1.基本语法及变量的使用方法。shell脚本第一行:#!/bin/bash                      #用作shell命令的完全路径:显示后期命令以哪种shell来执行命令除了上述外以#开头的皆为注释shell进程创建时一般以.sh结尾创建步骤:第一步:创建一个包含命令和控制结构的shell文件。第二步:修改这个文件的权限使它可以执行。使用chmod u...

2018-06-03 16:57:06 522

原创 迭代器失效问题

对于序列式容器(vector)之类的,调用erase之后会产生迭代器失效问题,但是这时候erase方法会返回一个可用的迭代器指向下一个元素。所以处理方法是it=x.erase(it);这样就好了。对于关联容器(list,map,set)之类的,因为删除一个节点不会对其他节点产生影响,所以直接x.erase(it++)即可。...

2018-05-21 20:24:19 318

空空如也

空空如也

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

TA关注的人

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