编程范式指的是程序的编写模式,与具体的编程语言关系相对较小。这些范式会告诉你应该在什么时候采用什么样的代码结构。 目前也只有三个编程范式: 它们分别是结构化编程(structured programming
架构整洁之道书摘二
对于每个软件系统,我们都可以通过行为和架构两个维度来体现它的实际价值。软件研发人员应该确保自己的系统在这两个维度上的实际价值都能长时间维持在很高的状态 大部分程序员认为这就是他们的全部工作。他们的工作是
架构整洁之道书摘一
架构是什么 按照Bob大叔的说法,所谓架构就是“用最小的人力成本来满足构建和维护系统需求”的设计行为。 所谓软件架构,就是你希望在项目一开始就能做对,但是却不一定能够做得对的决策的集合。 从人力成本的角度来
mysql中的查询缓存
当查询命中缓存时,立即返回结果。跳过了解析 优化和执行阶段 鸡肋 查询缓存在大部分时候都很鸡肋, 在 5.8 版本已经将查询缓存去掉了 下面几个特性是它鸡肋的证据: 什么时候不会被缓存 查询涉及的相关表数据发生变化时 查询缓
基准测试
基准测试 http_load 可以通过一个输入文件提供多个 URL,Hpttp_load 在这些 URL 中随机选择进行测试。 也可以定制 axtp_1oad,使其按照时间比率进行测试,而不仅仅是测试最大请求处理 下面通过一个简单的例子来
mysql中的字符集
什么是字符集,什么是排序规则 字符集是只从二进制编码到某类字符符号的映射,该字符集的排序规则简称校对, 如 ASCII码,一个字节就可以表示一个英文字母,参照ASCII码表 为什么需要字符集 因为人类无法直接理
最长无重复子串
第一种 设置一个滑动窗口,左下标记 l, 右下标记r r 向右移动,记录每个字符的最后一次出现的位置 m 如果当前字符在 m 中存在,并且重复字符出现的位置在l右侧,让l移动到重复字符的下一个位置,跳过重复的字符 r每次
MySQL外键约束
InnoDB 是MySQL中唯一支持外键约束的内置引擎 缺点 多一次查询 在每次修改数据时,都要在另外一张表执行一次查询操作,如果外键列的选择性很低,会导致存在一个很大但是选择性很低的索引。 比如在一个很大的users表
MySQL Integer类型与INT(11)
1.介绍 Integer类型,即整数类型,MySQL支持的整数类型有TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT。 1.1 空间和范围 每种整数类型所需的存储空间和范围如下: 2. INT(11) 2.1 数
异步任务中的错误传递
并发编程下,如何将goroutine中发生的错误传递给其他程序,从而进行优雅的处理呢, 一种解决方案是,将异步任务中产生的错误写入通道中,在另一个程序中读取该通道,从而实现通信,二次处理错误信息 例子 package main
通道流水线工作模式
一个通道的输出,作为下一个通道的输入,连绵不绝 下面实现了加法 乘法的流水线 // 流水线通道 package main import "fmt" func main() { done := make(chan interface{}) defer close(done) // 数据源 numStream := generate(done, 1, 2, 3, 4, 5) // 乘法 加法 乘法 pipeline := multi(done, add(done, multi(done, numStream, 2), 1), 2) for num := range pipeline { fmt.Println(num) } } // 接收一个中止信
防止goroutine泄露的一般机制
goroutine 泄露 当 goroutine 被永远阻塞,或者只有主 goroutine 终止时,子 goroutine 才会终止, 即子goroutine 没有自行终止的时机 goroutine 便无法释放其所占的内存空间 一般解决方案: 由父goroutine告知子goroutine终止时机 准则: 父
select用法示例
Go中的select和channel配合使用,通过select可以监听多个channel的I/O读写事件,当 IO操作发生时,触发相应的动作。 基本使用 // 常规示例 func example() { done := make(chan interface{}) // 一段时间后发送关闭信号 go func()
Linux搭建samba服务
安装 samba yum install samba 修改配置文件 修改配置文件 vim /etc/samba/smb.conf 添加要共享的目录 [opt] # 被共享目录的别名 path = /home/dccmmtop/opt # 要共享的目录 browseable = yes writable = yes # 可以写入 valid users = dccmmtop # 用户,该用户要有目录的权限 create mode=0777 directory mode=0777 force create mode=0777 force directory mode=0777 添加用户 将用户 dccmmtop 设置为可以
构建docker环境开发Rails
初始化项目 新建 myapp 目录,在下面添加 Dockerfile 文件,如下: Dockerfile FROM ruby:2.5 RUN apt-get update -qq && apt-get install -y nodejs default-mysql-client ADD . /myapp WORKDIR /myapp RUN bundle install EXPOSE 3000 CMD ["bash"] Gemfile 再新建 Gemfile 文件 source 'https://gems.ruby-china.com' # 安装 Rails gem 'rails', '~> 5.1.3' docker-compose.yml version: '3.3' # 使用已经存在的外部网络 networks: default: external: name: dev_network services: web: build: . command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s