包含标签 tips 的文章

Around Alias

Ruby 中的环绕别名 (around Alias) 带来的一系列 Google 先来看一段代码,体验一下什么是环绕别名 (around Alias) : class String alias :old_length :length def length "Length of'#{self}'is: #{old_length}" end end "abc".length #=> "Length of'abc'is: 3" 后面去 RubyChina 学习发现这是一种 Alias method chain pattern, 在 Rails3 中使用非常广泛,在 Rails5 上面被 prepend 替代了。在 Ruby 2.0 出来之前,Alias method chain pattern 这种做法在 Rails3 ActiveSupport 提供了 alias_method_chain 来辅助实现。 归根结底: 通过环绕别名,既修改了自己的逻辑,又不需要调用者更改自己的代码 什么是 alias_method_chain 很多人都很迷茫,不知道这个方法怎么用,所以栈爆网有这么一个问题: Ruby on Rails: alias_method_chain, what exactly does it do? when would you use alias_method_chain and why?……

阅读全文

new 与 make 的差别

Go语言中new和make是内建的两个函数,主要用来创建分配类型内存 new(T) 返回的是 T 的指针 这是 new 函数的注释: // The new built-in function allocates memory. The first argument is a type, // not a value, and the value returned is a pointer to a newly // allocated zero value of that type. func new(Type) *Type new(T) 为一个 T 类型新值分配空间并将此空间初始化为 T 的零值,返回的是新值的地址,也就是 T 类型的指针 *T,该指针指向 T 的新分配的零值 对于有哪些零值可以看看 之前的博客 里面有基础类型的零值 make make 函数的注释: The make built-in function allocates and initializes an object of type slice, map, or chan (only).……

阅读全文

DNS 域名系统

DNS (Domain Name System)的作用,就是根据域名查出 IP 地址,是把 www.example.com 等域名转换成 IP 地址。 域名系统是分层次的,一些 DNS 服务器位于顶层。当查询(域名) IP 时,路由或 ISP 提供连接 DNS 服务器的信息。较底层的 DNS 服务器缓存映射,它可能会因为 DNS 传播延时而失效。DNS 结果可以缓存在浏览器或操作系统中一段时间,时间长短取决于 存活时间 TTL。 CloudFlare 等平台提供管理 DNS 的功能。某些 DNS 服务通过集中方式来路由流量: 加权轮询调度 防止流量进入维护中的服务器 在不同大小集群间负载均衡 A/B 测试 基于延迟路由 基于地理位置路由 一些缺陷: 虽说缓存可以减轻 DNS 延迟,但连接 DNS 服务器还是带来了轻微的延迟 虽然它们通常由政府,网络服务提供商和大公司管理,但 DNS 服务管理仍是复杂的 DNS 服务最近遭受 DDoS 攻击,阻止不知道 Twitter IP 地址的用户访问 Twitter 延伸阅读: DNS 架构 DNS wiki 关于 DNS 的文章 查询过程 虽然只需要返回一个 IP 地址,但是 DNS 的查询过程非常复杂,分成多个步骤。……

阅读全文

Linux 常用命令 find

查找指定文件名的文件(不区分大小写) find -iname [filename] 对找到的文件执行某个命令 find -iname [filename] -exec md5sum {} \; 查找目录下的所有空文件 find [dir] -empty 按照文件权限来查找文件 find [dir] -perm [mode] –print 按照文件的更改时间来查找文件, -n表示文件更改时间距现在n天以内,+n表示文件更改时间距现在n天以前 find [dir] -mtime -5 –print 查找更改时间比文件file1新但比文件file2旧的文件 find [dir] -newer file1 ! file2 根据类型查找 -type find [dir] -type d –print b - 块设备文件 d - 目录 c - 字符设备文件 p - 管道文件 l - 符号链接文件 f - 普通文件 忽略某个目录……

阅读全文

Linux 常用命令 grep

在文件中查找字符串(不区分大小写) grep -i [word] [file] 在一个文件夹中递归查询包含指定字符串的文件 grep -r [word] [file / path] 从文件中读取关键词进行搜索 cat [file] | grep -f [word] 从文件中读取关键词进行搜索 且显示行号 cat [file] | grep -nf [word] 从多个文件中查找关键词 grep [word] [file1] [file2] 显示包含 a 或者 b 字符的内容行 cat [file] |grep -E "a|b" grep 不显示本身进程 ps aux | grep [word] | grep -v "grep" 使用 ^ 符号输出所有以某指定模式开头的行 grep ^docker [file] 使用 $ 符号输出所有以指定模式结尾的行……

阅读全文

常见英文符号

asterisk (*) plus sign (+) minus sign (-) forward slash (/) backslash (\) percent symbol (%) exclamation point symbol (!) underscore (_) equal sign (=) decimal points (.) semicolon (;) increment (++) operators decrement (--) operators ( ) Parenthesis { } Braces [ ] Brackets , Comma ; Semicolon ' Quote @ At + plus 加号;正号 - minus 减号;负号 ± plus or minus 正负号 × is multiplied by 乘号 ÷ is divided by 除号 = is equal to 等于号 ≠ is not equal to 不等于号 ≡ is equivalent to 全等于号 ≌ is equal to or approximately equal to 等于或约等于号 ≈ is approximately equal to 约等于号 < is less than 小于号 > is more than 大于号 ≮ is not less than 不小于号 ≯ is not more than 不大于号 ≤ is less than or equal to 小于或等于号 ≥ is more than or equal to 大于或等于号 % per cent 百分之… ‰ per mill 千分之… ∞ infinity 无限大号 ∝ varies as 与…成比例 √ (square) root 平方根 ∵ since; because 因为 ∴ hence 所以 ∷ equals, as (proportion) 等于,成比例 ∠ angle 角 ⌒ semicircle 半圆 ⊙ circle 圆 ○ circumference 圆周 π pi 圆周率 △ triangle 三角形 ⊥ perpendicular to 垂直于 ∪ union of 并,合集 ∩ intersection of 交,通集 ∫ the integral of …的积分 ∑ (sigma) summation of 总和 ° degree 度 ′ minute 分 〃 second 秒 ℃ Celsius system 摄氏度 { open brace, open curly 左花括号 } close brace, close curly 右花括号 ( open parenthesis, open paren 左圆括号 ) close parenthesis, close paren 右圆括号 () brakets/ parentheses 括号 [ open bracket 左方括号 ] close bracket 右方括号 [] square brackets 方括号 .……

阅读全文

Git 常用命令

基本设置 设置你自己的昵称与 email git config --global user.name "zhaolion" git config --global user.email "zhaoliangsyn@gmail.com" git config --global push.default simple 配置你的编缉器 git config --global core.editor emacs Git 使用你的系统的缺省编辑器,这通常可能是 vi 或者 vim 配置你的比较工具 git config --global merge.tool vimdiff Git 可以使用 kdiff3, tkdiff, meld, xxdiff, emerge, vimdiff, gvimdiff, ecmerge, 和 opendiff 作为有效的合并工具。你也可以设置一个客户化的工具 检查你的配置 git config --list 编辑 Git 配置文件 git config -e [--global] 获取帮助……

阅读全文

Docker 常用命令

下面是一些比较常用的 Docker 命令 镜像类基本命令 安装镜像 docker pull ${IMAGE} 显示已经安装镜像的详细内容 docker images --no-trunc 构建镜像 docker build --rm=true . 删除指定镜像 docker rmi ${IMAGE_ID} 删除未使用的镜像 docker rmi $(docker images --quiet --filter &quot;dangling=true&quot;) 删除所有没有标签的镜像 docker rmi $(docker images | grep “^” | awk “{print $3}”) 删除所有的镜像 docker rmi $(docker images) 构建自己的镜像 docker build -t <镜像名> <Dockerfile 路径> 导出镜像 docker save docker.io/tomcat:7.0.77-jre7 >/root/mytomcat7.tar.gz 导入镜像 docker load < /root/mytomcat7.……

阅读全文

如何写好 golang 代码的一些 tips

如何写好 golang 代码的一些 tips 1. 首先需要知道的概念 不要像其他语言一样写 Go, Go 不是 Java/Python/Ruby/PHP,Go 的程序思维很古典也很超前 保持简洁,避免过度工程化 学会阅读源码 interface 很重要,很多问题都可以用 interface 解决 保持函数精炼,变量名长度合适 (在不丢失意义的情况下,尽量短小) 用更小的单元实现代码功能,然后 ** 组合 ** 慎重使用全局变量 (尤其是跨 package 使用,变量作用域上容易踩坑,可以参考 vs6IeAu5U5n) 2. 函数声明的 tips 函数声明首先是函数名字要具有自解释性,需要能够解释清楚大致提供的功能,而不是模糊的 common/util。 其次具体的功能解释,这个要说到代码注释了,这里就不赘述了。 除了函数声明外,还有函数的形参定义。这里以一个例子来说一下扩展性好的函数的参数应该如何定义 (见 2.1)。 2.1 普通函数 假设我们需要一个简单的 server,我们可以像下面这样定义,addr 表示 server 启动在哪个端口上。 func NewServer(addr string) 第一期的需求很简单,就上面这些足够满足了。项目上线跑了一段时间发现,由于连接没有设置超时,很多连接一直得不到释放(异常情况),严重影响服务器性能。 好,那第二期我们加个 timeout。 func NewServer(addr string, timeout time.Duration) 这个时候尴尬的情况出现了,调用你代码的所有人都需要改动代码。而且这只是一个改动,之后如果要支持 tls,那么又得改动一次。 2.2 不定参数 解决上面的窘境的一种方法是使用不定参数。 比如我要实现一个整数加法。 func Add(list .……

阅读全文