首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

数据结构:哈希表在 Facebook 和 Pinterest 中的应用

虽然哈希表无法对存储在自身的数据进行排序,但是它的插入和删除操作的均摊时间复杂度都属于均摊  O(1) (Amortized O(1))。...当然了,在现实中,其实哈希算法都已经设计得非常好了,造成哈希碰撞的情况是少数的,大部分时间,它的时间复杂度还是 O(1)。...那么下面我们就来一起看看它们是如何被应用在 Facebook 和 Pinterest 中的,进而了解哈希表这种数据结构的实战应用。...哈希表在 Facebook 中的应用 Facebook 会把每个用户发布过的文字和视频、去过的地方、点过的赞、喜欢的东西等内容都保存下来,想要在一台机器上存储如此海量数据是完全不可能的,所以 Facebook...哈希表在 Pinterest 中的应用 在 Pinterest 的应用里,每个用户都可以发布一个叫 Pin 的东西,Pin 可以是自己原创的一些想法,也可以是物品,还可以是图片视频等,不同的 Pin 可以被归类到一个

1.9K80

Git 系列教程(6)- 查看 commit 提交历史

可以获取到的信息 不传入任何参数的默认情况下,git log 会按时间先后顺序列出所有的提交,最近的更新排在最上面 会列出每个提交的 SHA-1 校验和、作者的名字和电子邮件地址、提交时间以及提交说明...--pretty=oneline 将每个提交放在一行显示,在浏览大量的提交时非常有用 ?...git log --pretty=format 常用的选项 列出了 format 接受的常用格式占位符的写法及其代表的意义 选项 说明 %H 提交的完整哈希值 %h 提交的简写哈希值 %T 树的完整哈希值...--name-status 显示新增、修改、删除的文件清单。 --abbrev-commit 仅显示 SHA-1 校验和所有 40 个字符中的前几个字符。...-- 仅显示某些文件或目录的历史提交,-- 文件名/目录名 --no-merges 不显示合并提交的历史记录 来看一个实际的例子,如果要在 Git 源码库中查看 Junio Hamano 在 2008

1.9K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Git实战

    ] 直接文件删除 git rm [文件名] 后悔药 还原到最近的版本,废弃本地做的修改(当前文件修改没有进行add操作的时候) git checkout -- [文件名] 取消已经暂存的文件...】 git merge [bill] 关于代码的比较 # 显示暂存区和工作区的差异 git diff git diff [filename] # 显示暂存区和上一个commit的差异【文件名】 git...检查文件中每一行代码是谁提交的记录 git blame -L [起始行数],[文件名] 创建分支 #以当前节点作为分支的开始起点 git branch [分支名] #以SHA1作为分支开始起点 git...*表示当前分支 在–之后的是记录分支的提交信息 像*+ [tmp] 远程2就表示该提交存在于两个分支中 显示某分支中某文件内容 git show [分支名]:[文件名] 显示某个节点某文件的内容...-2 则仅显示最近的两次更新 ​ 例如:git log -p -2 –name-only 仅在提交信息后显示已修改的文件清单 –name-status 显示新增、修改、删除的文件清单 –

    87010

    数据结构:哈希函数在 GitHub 和比特币中的应用

    所以这一讲我们一起来看看哈希函数是如何被应用在 GitHub 中的,以及再看看链表和哈希函数在比特币中是怎么应用的。...而当这个数据文件里面的任何一点内容被修改之后,通过哈希函数所产生的哈希值也就不一样了,从而我们就可以判定这个数据文件是被修改过的文件。在很多地方,我们也会称这样的哈希值为检验和(Checksum)。...简单地说,Git 采用了 SHA-1 算法来对每一个文件对象都进行了一次哈希值运算,所以每一个提交的文件都会有自己的一个哈希值。在 Git 里面要找到一个文件对象其实是通过哈希值来寻找的。...Linux 和 Git 之父 Linus 也对于 SHA-1 被攻破发表了一些自己的看法,下面我也附上了他本人亲自回复的一封邮件,感兴趣的话可以自行来查看这封邮件的内容。...比特币是由一个网名为“中本聪”的人所提出的,在 2009 年诞生的一个虚拟加密货币,它的本质思想是以区块链为基础而搭建起来的一个去中心化的记账系统。

    2.3K70

    Git Branch 和 Tag 在开发中的常见场景及应用

    Git Branch 和 Tag 在开发中的常见场景及应用Git 是一个强大的版本控制系统,能够帮助开发团队管理和跟踪代码的变化。...以下是一些常见的开发场景,以及如何使用 Git 的 branch 和 tag 功能来处理这些场景。1. 功能新增在开发新功能时,通常会创建一个新的分支来进行开发。...在当前版本中合并之前版本的某个功能有时需要将之前版本中的某个功能合并到当前版本中,通常这是因为该功能被误删除或者需要在当前版本中重新启用。...git push origin v1.0.0查看所有 tag: 使用 git tag 命令查看所有 tag。 git tag6. 处理紧急修复在开发过程中,可能会遇到需要紧急修复的情况。...创建开发环境的分支为了让开发团队能够在不同的环境下进行开发、测试和部署,通常会创建多个环境分支,如开发分支(develop)、测试分支(testing)等。

    42310

    Git 常用命令清单笔记

    tags HEAD #查看本地版本信息 日志log git config format.pretty oneline #显示历史记录时,每个提交的信息只显示一行 git config color.ui...true #彩色的 git 输出 git log #查看最近的提交日志 git log --pretty=oneline #单行显示提交日志 git log --graph --pretty=oneline...> HEAD --pretty=format:%s 只显示commit 选项 说明 %H 提交对象(commit)的完整哈希字串 %h 提交对象的简短哈希字串 %T 树对象(tree)的完整哈希字串 %...查看某个文件历史 git log --pretty=oneline 文件名 # 列出文件的所有改动历史 git show c178bf49 # 某次的改动的修改记录 git log -p...c178bf49 # 某次的改动的修改记录 git blame 文件名 # 显示文件的每一行是在那个版本最后修改。

    76430

    GitHub入门与实践

    初始化 在本地新建一个和远程仓库同名字的本地仓库,进行初始化 git init # 生成.git目录 ?...添加和提交 将上面的两个动作同时进行的语句 git commit -am "添加和提交同时进行" 查看日志 输入q即可退出 git log ? 只看一行信息 ?...显示分支列表 git branch # 分支名列表显示,同时显示现在所处的分支 git branch -a # 同时显示远程仓库和本地仓库的分支信息 ?...在实际的开发中,往往会创建多个特性分支,保留一个随时可以发布软件的稳定分支。稳定分支通常由master分支担当。 基于特定主题的作业在特定分支中进行,主题完成后再和master分支合并 ?...rebase -i HEAD~2 # 压缩最近的两个历史记录 git log --graph # 树形查看提交日志 ---- 推动到远程仓库 添加远程仓库-add Git是分散性版本管理系统。

    55510

    git常用操作,都在这里了(一)

    /pythonTools.git 加入暂存区 对代码进行编辑和修改提交使用 git add 文件名加入"暂存区" 查看日志 使用git log 查看提交日志 参数--pretty=short只显示提交日志第一行...git log -p 文件名 显示提交之前之后文件的变化 --graph 图形化显示使用 查看状态 git status查看当前状态 提交 使用 git commit -m "record message..." 将暂存区中的文件提交并记录提交记录 , 如果需要详细记录提交信息 不输入-m 会进入编辑提交信息编辑器一般第一行简要概括更改内容 第二行空行第三行详细描述更改内容 如果想中止提交可直接退出编辑器便会中止提交...feature-A先切换到master分支在合并 此时会打开编辑器录入合并信息 之后合并成功恢复历史 查看每次提交哈希值 git reflog查看当前仓库执行过的操作会有各个版本的哈希值 回退版本 使用... # 在两个分支之间比较 git diff --staged # 比较暂存区和版本库差异 复位中软模式、硬模式、混合模式的区别 git reset --hard硬模式代表index

    1.1K120

    Git 实战

    log git reflog #常用 git log --greph #图形显示,更直观 git log --pretty=oneline #漂亮一行显示 git log --oneline #简洁显示...,就能找回 git reset --hard 指针位置 1.3.8 文件差异比较 git diff 文件名 git diff 哈希值 文件名 #和历史中的一个版本比较 git diff #不带文件名...,则比较多个文件 2.2 分支管理 hot_fix master feature_x feature_y 2.2.1 什么是分支管理 在版本控制中,使用推进多个任务 2.2.2 分支的好处 同时并行推进多个功能开发...rebase rebase和merge区别 git rebase -i 索引号 git rebase -i HEAD~3 #合并最近三条记录 说明:在vim编辑里面改成s 1.7 beyond compare...1.2.3 Forking 工作流 在 GitFlow 基础上, 充分利用了 Git 的 Fork 和 pull request 的功能以达到代码审核的目的。 安全可靠地管理大团队的开发者

    60520

    Git 原理入门

    压缩后的二进制文件,称为一个 Git 对象,保存在.git/objects目录。 这个命令还会计算当前内容的 SHA1 哈希值(长度40的字符串),作为该对象的文件名。...,目录名是哈希值的前2个字符,该子目录下面有一个文件,文件名是哈希值的后38个字符。...git update-index命令用于在暂存区记录一个发生变动的文件。...author ruanyf 1538889134 +0800 committer ruanyf 1538889134 +0800 first commit 上面代码中,输出结果的第一行是本次快照对应的目录树对象...原来git log命令只显示当前分支的变动,虽然我们前面已经提交了快照,但是还没有记录这个快照属于哪个分支。 所谓分支(branch)就是指向某个快照的指针,分支名就是指针名。

    71230

    20分钟教你搞懂Git!

    基本命令git add和git commit到底在干什么? 在这篇文章中,我将用一个例子来解释Git的运行过程,帮助你理解Git的工作原理。 ? 初始化 让我们创建一个项目的目录,然后进入该目录。...该压缩文件叫做Git对象,保存在.git/objects目录中。 我们可以通过这个命令根据对象的文件名获取当前内容,并计算成SHA1 哈希(长度为40的字符串)。...在这个子目录下有一个文件,文件名是上述哈希值中其余的38个字符。 让我们再来看看文件内容。...,而第二行和第三行是有关作者和提交者的信息,最后一行内容是提交的描述。...每个分支的指针都是一个文本文件,存储在.git/refs/heads/目录中。文件的内容是它指向的快照的二进制文件名(哈希值)。 更新分支 下面我们将演示如何更新分支。首先,修改test.txt。

    42120

    git log 命令

    前言 ---- git log 命令主要用于查看提交记录 日常开发中,我们会经常使用 git log 查看提交记录,配合 git status 确认当前代码是不是最新的 git log 有很多的参数选项...只显示 commit id 和备注信息 git log --pretty=oneline 更为简洁的提交历史列表,只显示 commit id 的前 7 位和备注信息 git log --oneline...查看某个人的提交记录 (等号和空格都行) git log --author liang git log --author=liang 查看最近 n 次的提交记录 # 查看最近1次提交记录 git log... 查看变动的文件名,用于查看哪些文件发生了改变 git log --name-only 查看文件变动状态,会显示 增加、修改 等对应的字母标识 git log --name-status...显示哪些文件发生了改变,以及对应的新增行数、减少行数和变动文件数 git log --stat 根据备注信息模糊查询提交记录 git log --grep 提交记录左侧显示虚线作为分割区域

    50740

    Git常用命令和常见问题

    // 查看状态 git add 文件名 // 将某个文件存入暂存区 git add b c //把b和c存入暂存区 git...HEAD // 工作区与仓库中最后一次提交版本的差别 git diff 版本哈希值 版本哈希值 // 查看这2个版本哈希之间的区别 或者 git diff HEAD~数字...查看前2次变更 git show HEAD 或 git show 哈希值 或者git show tag(标签名) //都可以查看最近一次提交的详细信息 7.git忽视文件 在仓库根目录创建一个 .gitignore...ls 文件夹名 // 查看对应文件夹中的内容 ls -l // 拉出最近git提交记录以及对应修改的文件名 ls -l -a // 拉出最近git提交记录以及对应修改的文件名,隐藏的文件也会显示...解决4: 在新生成密钥之后,在.ssh文件夹(之前的文章有提到过)中少了一个known_hosts文件,本来密钥文件应该是三个,现在是两个,便报了这样的错误,此时选择yes回车之后,便可,同时生成了缺少了的

    62330

    一、玩转Git三剑客-Git基础

    Git的优点 最优的存储能力 非凡的性能 开源 很容易做备份 支持离线操作 很容易定制工作流程 git的安装 参考官方安装git 在终端输入git --version可以看到git的版本信息,以此代表安装成功...## global对当前用户所有仓库有效 git config --system ## system对系统所有登录的用户有效 显示config的配置,加--list git config --list...查看git log 只看变更列表 git log --oneline ? 之查看最近的几次commit git log -n2 --oneline ? n2表示所有分支最近两个。...tags标签或里程碑 objects文件夹 文件夹的名称与该文件夹内文件名拼成一个哈希值,表示一个树。 其内容为文件变动信息。 commit、tree和blob三个对象之间的关系 ?...树中的文件为blob,文件夹则为另一个树,在这个文件夹中同理。叶子节点到文件。 git的设计,只要文件内容相同,就是一个东西。

    92720

    git版本控制

    如果只想查看最近的几次提交记录,可以使用-(n)选项,比如-2选项只会显示最近的两次提交: $ git log -2commit ccf42476e007db608813193659a5b4a0d3241df3Author...,比如--pretty=oneline会让每条提交信息在一行显示,此外还有short、full和fuller可以用: $ git log -3 --pretty=oneline ccf42476e007db608813193659a5b4a0d3241df3...git log常用的输出限制选项: 选项 说明 -(n) 仅显示最近的 n 条提交 --since, --after 仅显示指定时间之后的提交 --until, --before 仅显示指定时间之前的提交...上面的例子中,在checkout后,README.md文件恢复成了在修改之前(上次提交时)的样子,并且工作目录是干净的。...所以上例中的git reset --hard HEAD^将工作目录和暂存区全部重置到前一次提交,并且将HEAD指向前一次提交,后面的命令结果显示确实是这样。

    90130

    史上最干货的Git命令整理,一文胜千言

    Git分支和SVN的分支不同:分支在SVN中一点不特别,就是版本库中的另外的一个目录。 Git没有一个全局的版本号,而SVN有:目前为止这是跟SVN相比GIT缺少的最大的一个特征。...Git的内容完整性要优于SVN:Git的内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。...之后的所有变动,每个commit占据一行 git log [tag] HEAD --grep feature 显示某个commit之后的所有变动,其"提交说明"必须符合搜索条件 1.git log --...显示当前分支的最近几次提交 A:本地新增的文件(服务器上没有) C:文件的一个新拷贝 D:本地删除的文件(服务器上还在) M:红色为修改过未被添加进暂存区的,绿色为已经添加进暂存区的 R:文件名被修改...之后的所有变动,每个commit占据一行 git log [tag] HEAD --grep feature 显示某个commit之后的所有变动,其"提交说明"必须符合搜索条件 1.git log -

    62020

    这 10 几个 Git 命令高级用法!个个惊艳!

    ---- 导航 —— 跳到之前的分支 git checkout - 查看历史 # 每个提交在一行内显示 git log --oneline # 在所有提交日志中搜索包含「homepage」的提交...git fetch origin git checkout master git reset --hard origin/master 查看我的分支和 master 的不同 git diff master...提交 比方说我想要 rebase 最近 3 个提交: - git rebase -i HEAD~3 - 保留第一行的 pick,剩余提交替换为 squash 或 s - 清理提交日志并保存(vi 编辑器中键入...--autosquash # 保存并退出文件(VI 中输入 `:wq`) rebase 的时候在每个提交上执行命令 如果特性很多,一个分支里可能有多个提交。...# 在最近 3 个提交上运行 `npm test` 命令 git rebase HEAD~3 --exec "npm test" ?

    1.2K10
    领券