《深入解析Go》笔记
在 GitHub 上找到一本解读 Go 实现细节的好书,名叫《深入解析 Go》。 大致看了一遍,简单做了些笔记。 这本书的代码来自 Go 1.3,所以还有一部分由 C 语言写成。 这份笔记里的代码来自 Go 1.12.5,数据结构全部由 Go 语言实现。 数据结构 string 和 slice 都是引用类型,可能开在栈上,也可能开在堆上; channel 和 map 是引用类型,但一定开在堆上,栈中只有指针。 string 底层结构 src/reflect/value.go 1234type StringHeader struct { Data uintptr Len int} string 是不可变数据结构,任何对 string 的操作都会产生一个新的 string. 因此,需要拼接..
更多Golang 学习记录
这几个月在考虑从 Python 转向 Golang,所以专门学习了 Golang. 这里是 Golang 学习的一些记录。 学习笔记稍后再整理(咕),先列一下我这几个月看过的各种教程吧。 阅读列表 Go by Example Go by Example 是对 Go 基于实践的介绍,包含一系列带有标注说明的示例程序。 真·快速上手必备。 《Go语言四十二章经》 《Go语言四十二章经》详细讲述了Go语言规范与语法细节以及在开发中常见的误区;通过对标准库包和著名第三方包的实际运用,来启发读者深刻理解Go语言的核心思维,仔细琢磨经典代码设计模式,引领读者进入Go语言开发的更高阶段。 讲解详细、信息量超大的 Go 语言教程。 Go Tour 经典的 Golang 官方教程。 上大学的时候啃过..
更多如何成为 IDEA 键盘流
好了,你完全可以丢掉鼠标了。前言常言道:“工欲善其事必先利其器”。如何高效编程,成为 JetBrainsIDE 键盘流呢?当然是熟悉快捷键再加上各种插件啦~ IDEA JetBrainsIDE 有默认的一套快捷键方案,不过在经过长时间的使用后,发现总有些一些快捷键令我难以接受。遂花了一天的时间,将快捷键全部调整了一遍,并深度结合了IdeaVim插件,总结如下:本篇文章适用于任何 JetBrains 公司出品的 IDE ,包括 PhpStorm ,WebStorm ,PyCharm ,RubyMine ,CLion 等。 IDEA 正文快捷键多光标添加或移除光标Ctrl + 左键拖动鼠标选中多行区域Shift + 左键拖动在上方/下方插入光标Ctrl + Alt + 上下键编辑删除行Ctrl + D..
更多用堆找出最小的 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)..
更多