Dev's Logging

Welcome to my blog !


Struct vs. Class In Swift Explained – LearnAppMaking

Published at June 25, 2019 ·  1 min read

swift 同时有 struct 和 class 两种类型,在 Python 中只有 class,在 Golang 中只有 struct ,而swift 似乎是把两种语言一种类似的类型均融合了。相同之处是,struct 和 class 均可以定义属性和方法,均有 init 以进行状态的初始化。不同的是,class 可以继承,也可以定义 deinitialized 实现在 class 销毁时调用某个函数 Struct vs. Class In Swift Explained – LearnAppMaking...

How to Access a Remote Server Using a Jump Host

Published at June 19, 2019 ·  1 min read

通过配置 ssh config ,实现在本地快捷通过跳板机登陆目标服务器,与配置 ssh proxy 较为类似 How to Access a Remote Server Using a Jump Host...

Linux Signal及Golang中的信号处理

Published at June 12, 2019 ·  1 min read

Linux 和 Golang 中的信号处理问题,在 Linux 中,则是操作系统中用来进程间通讯的一种方式,一个信号就是一个异步的通知,发送给某个进程,或者同进程的某个线程,当信号发送给某个进程时,操作系统会中断该进程的正常流程,并进入相应的信号处理函数执行操作,完成后再回到中断的地方继续执行。几个常见命令为,SIGINT 导致进程结束,SIGTSTP 导致进程挂起,SIGQUIT 导致进程结束 和 Dump core。在 Golang 中,则是通过 os/signal 和 syscall 捕捉到相应的信号量 Linux Signal及Golang中的信号处理...

How to configure docker to use proxy

Published at May 30, 2019 ·  1 min read

如何为 docker 设置使用 proxy,除了设置环境变量外,还需要在 /etc/systemd/system/docker.service.d 中创建 http-proxy.conf 的文件,并在其中添加代理,完成后需要通过 systemctl 重启 docker 服务。 How to configure docker to use proxy...

Double Shipping

Published at May 25, 2019 ·  1 min read

多次反复的宣传,作者作为 GitHub 早期员工,提到一些 GitHub 在上线一些新功能时多次宣传的套路,比如花了大量时间为现场只有几百人准备的演讲,真正的用户却只有很小的一部分,但是当把这部分演讲稿整理成文字发布成博客时,经过一段时间的积累后,将会被成千上万的人阅读,演讲就是演讲,要多种形式的宣传将其影响力扩大。此外在产品发布时同样适用,第一次作为一个完整或全新的产品发布,之后则需要将其中的某个新功能作为一个点进行发布,并引用第一次的宣传文章,需要通过这种方式不断的加深用户对产品的印象。 Double Shipping...

yarn 需要像 npm 一样配置代理么?

Published at May 14, 2019 ·  1 min read

在本地用 Yarn 创建某项目时,发现在 yarn install 过程中耗时非常长,根据以往加速 git clone 的经验,直接想到的是 yarn 仓库可能需要加速,于是参照链接进行如下配置,速度瞬间能达到当前贷款的满速,验证没问题。针对 https 特别注意需要用 https-proxy。 yarn config set proxy http://ip:port yarn config set https-proxy http://ip:port yarn 需要像 npm 一样配置代理么?...

HTTP API 认证授权术 | | 酷 壳 - CoolShell

Published at May 10, 2019 ·  1 min read

详细完整的 http API 认证授权的介绍,因为 http 是无状态,则需要客户端与服务端配合完整用户的认证与授权工作,常见的非别有 http basic, digest access, app secrete key + hmac, jwt json web tokens, oauth 1.0, oauth 2.0 HTTP API 认证授权术 | | 酷 壳 - CoolShell...

Difference Between BFS and DFS (with Comparison Chart) - Tech Differences

Published at May 5, 2019 ·  1 min read

dfs 和 bfs 的区别,两者复杂度较为接近,而需要的存储则大不相同。bfs 采用 queue 存储访问过的节点,适合于 wide and short tree。 dfs 则需要 stack 存储访问过的节点,或者递归的方式访问,存储较为高效。 Difference Between BFS and DFS (with Comparison Chart) - Tech Differences...

MySQL 索引设计概要

Published at April 30, 2019 ·  1 min read

如何正确高效的设计索引,由于 hdd 的特性,随即访问数据是非常耗时的,对于数据库,无论是读取一行还是多行数据,都会将该行或多行所在的页面全部加载进来,然后再读取对应的数据记录。在 mysql 中,页的大小一般为 16 kb,也可能是 8kb,32 kb 或者其他值。数据库等待一个页从磁盘读取到缓存池所需要的成本巨大,需要消耗 10ms 左右的时间,如果顺序读取则会非常快,达到 40MB/s。如果一个页面的大小为 4kb,那么 1s 的时间就可以读取 10000 个页,读取一个页面所花费的平均时间就是 0.1 ms,相比随即读取的 10ms 已经降低了两个数量级,甚至比内存中读取数据还要快。数据库索引设计与优化中,分为宽索引与窄索引,每一个在索引中匹配到的记录行最终都需要执行另外的随即读取从聚集索引中获得剩余的数据,如果结果集非常大,那么就会导致随机读取的次数过多进而影响性能。 MySQL 索引设计概要...

为什么使用 B-Tree(B+Tree)

Published at April 29, 2019 ·  1 min read

由于机械磁盘的特性,磁盘的存取速度比主存慢很多,往往是其的 几百分分之一,因此为了提高效率及减少磁盘 I/O,往往每次读取都会预读,即使读取一个字节,也需要从此往后读取一定长度的数据放入内存,预读的长度一般为页(page)的整数倍。而 B Tree 之所以高效,根据 B-Tree 的定义,可知检索一次最多需要访问 h 个节点,一次检索最多需要 h-1 次 I/O,渐进复杂度为 O(h) = O(logdN)。一般实际应用中,出度 d 是非常大的数字,通常超过 100, 因此 h 非常小(通常不超过3),所以 B-Tree 作为索引结构效率非常高 为什么使用 B-Tree(B+Tree)...

Tags

abcs accept acid activemq affinity algorithm allocation android array async aws b+tree b-tree backoff benchmark best-practices bfs big-o bigquery bind bitcount blog break broker bubble buffer cache cap cert cgroups channel citus class classmethod cluster concurrency config consumer container cookie cors crawler cronjob csrf ctr data-science data-structure database datadog dataflow datascience decorator dfs distributed django dns docker double-shipping drf elastic-search enumerate epoll extra facebook-pixel flask flutter forward-proxy freelance frp garbage-collector gc gcp generator get gil git golang goroutine graphql ha handbook haproxy hash hash-slot hashring hashtable hpa http http-auth http-proxy index innodb instagram intergration interview ios javascript jinja2 jobboard jwt k8s kafka kibana kqueue label lambda layer4 layer7 lean levels.io linked-list linux list listen loadbalancer logs long-tail lru marketing master matplotlib memory merge metaclass metaprogramming metrics metrics-server microservices mitm model mq myisam mysql namespace nat netflix network-extension nginx nodejs nomad nosql npm oodesign optimization orm pandas parallelism parkinglot patroni permission pg pipeline pixelme post postgresql postresql prefetch_related prerender process proxy proxycommand put pvm python queue rabbitmq rbac rebase redis redis-cluster replication resource rest restfulapi retargeting retry reverse-proxy rocketmq saas scaleable security select seo serverless service session set shadosocks shadowsocks shard sharding shell shopify sigint signal sigterm slack slave slow-query sns socket source-code spa sql sqlalchemy sqs ssh ssl-pinning stack startup state stateful stateless staticmethod string struct swift switch syscall system-design systemctl tcp tcp-proxy thread tmpreaper token traefik trustkit tunning type typeform udp variable vc vpn vuejs web-development where yarn zset 削峰 宽索引 异步 窄索引 解耦 跨域 跳板机


Archives

2019 (129)