用堆找出最小的 N 个数
不知道为啥,突然想水一篇很水的算法文章。 今天整理 MySQL 的笔记,看到了这样一句话: MySQL 在执行 ORDER BY x LIMIT n 这类语句,且 LIMIT 的数量有限时(比如只需要 3 条数据),MySQL 会尽量通过堆来构建优先队列,减少排序所需的时间。 这是堆的一个经典应用:从海量数据中找出最大(小)的 n 个数。 之前只用堆写过堆排,没有用堆处理过在线算法,所以就写了写。 用一句话概括这个算法:要找最小的数,就要构建大顶堆。 在处理数据时,我们会构建一个大顶堆 H,那么 H[0] 的值也就是当前数据中最小的 N 个数中的最大值,也就是第 N 小的数。 当处理新的数时,如果这个数小于堆顶的数,那么就把它变成堆顶,然后再对堆进行维护,以保证有序。 此算法的时间复杂度为 O(Ml..
更多服务器初始化
记一下服务器的初始配置。前言前些日子,入手了一台服务器,特此记录一下它的初始配置。正文注:本人主机为 CentOS 7 x64 系统,以下内容均基于此环境。安全设置请查考 肉鸡是怎样炼成的字符集修改123456cd /etc/sysconfig/sudo vi i18nLANG="zh_CN.utf8"source /etc/sysconfig/i18n设置 DNS123vi /etc/resolv.confnameserver 114.114.114.114nameserver 8.8.8.8配置 Yum 源123456cd /etc/yum.repos.d/sudo mv CentOS-Base.repo CentOS-Base.repo_baksudo wget -O /etc/yum.repos..
更多肉鸡是怎样炼成的
你的服务器正在被攻击!前言安全是一个服务器最基本的必备条件,在创建了服务器之后,你首先要做的事情就是将服务器加固。由于服务器就相当于一台拥有独立 IP 的、直接暴露于互联网之上的电脑,这在为你带来便利的同时也直接让你的服务器与危险画上了等号,密码穷举、DDOS 攻击、各种各样你想到的、想不到的攻击方法都在等着你。说不定你的服务器正在被攻击!正文注:本人主机为 CentOS 7 x64 系统,以下内容均基于此环境。查看攻击情况查看登录失败的日志1sudo lastb统计尝试暴力破解机器密码的 IP1sudo grep "Failed password for invalid" /var/log/secure | awk '{print $13}' | sort | uniq -c | sort -nr | ..
更多微服务架构下的数据迁移指南
在扇贝,除了 CRUD 以外,做的最多的事情大概也就是数据迁移了,以至于后来简单的数据迁移工作都变成了一种搬砖。今天动笔写一写在扇贝做数据迁移的方法,以及一些需要关注的点。 0. 为什么要做数据迁移? 出于架构调整 / 业务调整,我们需要把某个微服务中的数据交给另外一个微服务去管理。 因为每个服务通常会有自己的数据库,而且只会连接到自己的数据库,所以我们在让新的服务接管数据之前,就要保证全部或部分数据已经要在新的数据库中了,这样业务才能够平滑过渡并切换。 1. 怎么做数据迁移? 1.1 静态数据迁移 把数据从 A 服务迁移到 B 服务中,所需的步骤: 把 A 里的数据都取出来 把数据塞进 B 里面 没有了!就这么简单,比“把大象放进冰箱”还少一步~🌝 所以本文到此结束,靴靴你浪费宝贵的一分钟..
更多《从 0 开始学微服务》阅读笔记
前一阵子购买了胡忠想老师的《从 0 开始学微服务》极客时间专栏,二月份看完以后做了一些笔记。 服务化拆分 根据我的实际项目经验,一旦单体应用同时进行开发的人员超过 10 人,就会遇到上面的问题,这个时候就该考虑进行服务化拆分了。 服务化拆分的两种姿势: 纵向拆分:按业务维度拆分,关联比较密切的几个业务业务适合拆成微服务;功能相对独立的业务拆成微服务; 横向拆分:从公共且独立功能维度拆分。标准是是否有公共的服务被多个其它服务调用,且依赖的资源独立不与其他业务耦合。 微服务架构 初探微服务架构 微服务架构下,服务调用主要依赖下面几个基本组件: 服务描述 注册中心 服务框架 服务监控 服务追踪 服务治理 服务描述——如何发布和引用微服务 常用的服务描述方式包括 RESTful API、XM..
更多基于以太坊却不上链的抽奖服务,是不是有一点可疑。
前言本文是随笔,记录了一次基于以太坊的抽奖服务的方案讨论。从常规的智能合约的实现方案,到最终改用不上链的实现,主要是分享一下思路,包含了一点不看也没事的技术细节,以及一点区块链相关的内容。因为抽奖主题的区块链开发入门文章已经泛滥了,所以文章尽可能避免变成教程。背景之前一位做论坛的同学说他们那个论坛经常会做一些活动,抽奖什么的。如何让用户能感受到公平公正,让大家信任。之前一个的办法是在指定时间录视频,并且边上放个北京时间,表示这个是准时开奖没有作弊。这个和澳门最大线上赌场异曲同工,边上搞台电视放新闻的直播,令人信服。但是总一直这样也不行,我们可是搞技术的,而且这种方式扩展性太弱。于是他们想做一个公正公开可信任,简单易用易理解的抽奖系统,选定的方案是区块链。我听了觉得很有意思,而且公正公开不可变,区块链太合适..
更多瞎玩IPv6——在公网搭建文件管理器
IPv6 是个好东西,希望人人都有一个。 IPV6 IPv6 是啥? 新一代的 IP 协议,解决了 IPv4 地址枯竭的问题。具体可以见 Wikipedia. IPv6 的 IP 长度为 128 位,总量非常非常多,不用担心用不完,所以接入 IPv6 的客户端都会分到一段 IP,比如 240e:1c:ce8:fd00::/64,然后客户端又可以把这段 IP 继续分段,下发到下面的所有子网中。 不过需要注意的是,虽然客户端会分到一段 IP 的所有权,不过客户端本身还是会有至少一个确定的 IP,以确定自己的位置。 其实发现 ISP 分给自己 2^64 个 IP 地址的时候还是感觉很奢侈…😂 IPv6 跟我有什么关系? 感谢去年工信部发布了《工业和信息化部关于贯彻落实〈推进互联网协议第六版(IPv6)..
更多NTP 简介
昨天遇到了一个神奇的问题,最后发现是服务器的 ntpd 没开导致本地时间没有同步😂 正好了解一下 NTP. NTP 协议 NTP 协议用于在网络之中通过分组交换进行时钟同步。基于 UDP,使用 123 端口。 协议实现 客户端和服务器间会通过修改版的 Marzullo 算法 完成时间同步。 在传递时间时,服务器会给出 64 位的时间戳,浮点精度为 32 位。这个时间戳每 2^32 秒会翻转一次,理论分辨率为 2^-32 秒。时间戳以 1900 年 1 月 1 日作为开始时间。 NTP 时间源会进行分层,通过阶层 n 同步的服务器将运行在阶层 n+1. 分层机制用来防止循环请求。阶层 0 的服务器与高精度计时设备(如原子钟)相连,也成为基准时钟。 使用 NTP 同步 Linux 系统时间 ntp..
更多免费使用 nuaa.portal 上网
背景学校赐予我的 nuaa.portal 账号在一个月之前就到期了,这一个月内,虽然对我的生活没有太大的影响,但是还是感受到了某些不便(总觉得某些东西有了更好,没有却不能拉倒)。前些天跟创新区内的同学讨论了本校的ipv6部署情况,突然就有兴致来折腾一下。没错,免费上网还是有可能的。前提概要学校的 nuaa.portal 公共无线网,Windows 电脑只要连接上,就能获取一个 ipv4 内网地址和一个 ipv6 地址。如果没有在指定 Web 页面上认证,则无法使用 ipv4 连接互联网。但是可以通过 ipv6 联网。学校默认不分配 ipv6 的 DNS 服务器。学校教学办公区有线宽带,经直接拨号,同样可以获得一个 ipv4 内网地址和一个 ipv6 地址,均可以访问互联网。一步步的尝试直接用 ipv6 上..
更多《流畅的 Python》阅读笔记
去年就想看《流畅的 Python》这本书,今年终于看完了。 《流畅的 Python》是一本深入讲解 Python 语言的书,非常值得一读。去年看到同事在看,就一直想看,陆陆续续看了很久没什么进度,这个月一努力,把这本书看完了。 这次脑洞一开,觉得既然学的是 Python,那我为什么不用 Python 做笔记呢?于是就选用了 Jupyter Notebook 来做笔记载体。一个文档里既可以写 Markdown,又可以运行 Python 代码,简直完美。 所以,这本书的笔记就这么写出来了。内容不算少,所以烦请移步我的 GitHub Repo.
更多