封装, 抽象, 继承, 多态 是面向对象编程语言的四大特性. 而它们又分别承担什么职责呢. 实际编程中起什么作用呢. 封装 (Encapsulation) 封装也称信息隐藏或者数据访问保护. 通过对变量, 函数或类进行设置访问权限.控制它们的对外访问限制.从而保护它们不被随便修改. 作用 封装如同一把智能锁 隐藏信息 保护数据 提高易用性 防止恶意修改 抽象 (Abstraction) 抽象是指如何隐藏方法的具体实现, 让调用者只关心方法提供了哪些功能, 并不需要知道这些功能是如何实现的. 抽象并不需要非得依靠接口类或抽象类这些特殊语法机制来支持. 如类的方法是通过编程语言中的"函数"这一语法机制来实现的, 通过函数包裹具体的实现逻辑, 这本身就是一种抽象. 调用者在使用函数时,只需要了解函数命名, 注释或者文档, 不需要研究函数内部具体实现. 直接就可以使用. 作用 抽象无处不在 简化复杂逻辑 隐藏具体实现 Tip: 抽象是一个非常通用的设计思想, 并不单单用在面向对象编程中, 也可以用来指导架构设计等 继承 (Inheritance) 继承是用来表示类之间的is-a关系. 继承分两种模式: 单继承 一个子类只继承一个父类 多继承 一个子类可以继承多个父类 作用 继承并非一剂良药, 请勿过度使用. 更加推荐"多用组全少用继承"的思想. 代码复用 多态 (Polymorphism) 多态是指子类可以替换父类. 实现多态特性 继承+方法重写 接口类语法 duck-typing 只有一些动态语言才支持, 如python, javascript 作用 多态会72变 提高扩展性 提高复用性 Tip: 多态也是很多设计模式,设计原则,编程技巧的代码实现基础, 如策略模式, 基于接口而非实现编程, 依赖倒置原则, 里式替换原则, 利用多态去掉冗长的if-else语句等等.
学习之前先罗列一下学习框架地图. 方便今后的学习. 三种编程范式 面向过程 面向对象(最主流) 函数式编程(如go语言) 面向对象7大知识点 面向对象的四大特性: 封装, 抽象, 继承, 多态 面向对象编程与面向过程编程的区别和联系 面向对象分析, 面向对象设计, 面向对象编程 接口与抽象的区别以及各自的应用场景 基于接口而非实现编程的设计思想 多用组合少用继承的设计思想 面向过程的贫血模型和面向对象的充血模型. 设计原则 SRP 单一职责原则 OCP 开闭原则 LSP 里式替换原则 ISP 接口隔离原则 DIP 依赖倒置原则 其它原则 DRY 原则 Don’t repeat yourself 不要重复自己 出现两次或多次的重复代码就需要提取出来 KISS 原则 Keep It Simple, Stupid 保持简单, 愚蠢 KISS原则使代码简单、清晰、易于理解 编程语言是为人类所理解的 保证你的方法尽量很小; 每个方法都不应该超过40-50行代码 每个方法应该只解决一个小问题,而不是实现很复杂的功能 YAGNI 原则 You aren’t gonna need it 你不会需要它 这是“极限编程”提倡的原则,指的是你自以为有用的功能,实际上都是用不到的。 LOD 原则 迪米特法则(Law of Demeter)又叫作最少知识原则 不和陌生人说话 迪米特法则的初衷在于降低类之间的耦合 门面模式(Facade)和中介模式(Mediator),都是迪米特法则应用的例子 设计模式 经典设计模式有23种.
评价常用词汇 描述代码质量所有常用词汇 最常用的评价标准 评价属于主观, 主观的准确度与工程师自身经验有极大的关系. 接下来我们从以下几个维度评价代码, 也是更为常见的维度. 其中可维护性, 可读性, 可扩展性最重要的三个评价标准 1. 可维护性 (maintainability) 易维护的代码是指在不破坏原有的代码设计, 不引入新的Bug的情况下, 能够快速地修改或者添加代码. 不易维护的代码是指修改或者添加代码需要冒着极大的引入新Bug的风险,并且需要花费大量很长的时间才能完成 2. 可读性 (readability) 软件设计大师 Martin Fowler 金句: “Any fool can write code that a computer can understand. Good programmers write code that humans can understand.” 任何傻瓜都会编写计算机能理解的代码, 好的程序员能够编写人能够理的代码 代码的可读性是评价代码质量最重要的指标之一 我们编写代码的时候, 时刻要考虑到代码是否易读, 易理解. 除此之外, 代码的可读性在非常大程度上影响代码的可维护性. 以下为评介一段代码的可读性的几个维护 编码是否规范 命名是否达意 注释是否详尽 函数是否长短合适 模块划分是否清晰 是否符合高内聚合低耦合 Tip: Code review 是一个很好的测验代码的可读性手段. 3. 可扩展性 (extensibility) 可扩展性也是一个评价代码质量非常重要的标准 它表示我们的代码应对未来需求变化的能力. 易扩展是指在不修改或少量修改原有的代码情况下, 通过扩展方式添加新的功能代码. 不易扩展是指添加一个功能而大动干戈, 改动大量的原始代码.
命令行对 markdown 生成目录结构, 主要解决 markdown 不自动生成目录的困扰. 即[TOC]不支持. 工具源码 https://github.com/ekalinin/github-markdown-toc.go 下载安装 $ wget https://github.com/ekalinin/github-markdown-toc.go/releases/download/1.1.0/gh-md-toc.linux.amd64.tgz $ tar xzvf gh-md-toc.linux.amd64.tgz gh-md-toc $ ./gh-md-toc --version 1.1.0 mac brew install github-markdown-toc 使用方式 gh-md-toc README.md * [音乐开关,true/false](#音乐开关truefalse) * [只支持163的音乐,在生成外链播放器获取ID](#只支持163的音乐在生成外链播放器获取id) * [是否自动播放 1是,0否](#是否自动播放-1是0否) * [weight: 1](#weight-1) * [description: ""](#description-) * [镜像介绍](#镜像介绍) * [获取镜像](#获取镜像) * [查看镜像](#查看镜像) * [查找镜像](#查找镜像) * [删除镜像](#删除镜像) * [清理镜像](#清理镜像) * [创建镜像](#创建镜像) * [基本已有镜像](#基本已有镜像) * [基于Dockefile创建](#基于dockefile创建) * [导入与导出镜像](#导入与导出镜像) * [导出镜像](#导出镜像) * [导入镜像](#导入镜像) * [上传镜像](#上传镜像)
复现 package main import "errors" func main() { TestErr("go", "golang") } func TestErr(t, p string) (s string, err error) { switch t { case "go": err := check(p) if err != nil { // 返回参数里的 err 作用域是整个函数,即外层作用域 // check 返回的 err 作用域是 switch 范围.即内层作用域. // return 操作,不指明是将内层作用域 返回给外层作用域, 这样在 go 里是不允许的. return } } return } func check(s string) error { if s == "hello" { return nil } return errors.
背景: 在 windows 上安装了 vmware linux . 在 linux 上开启一个服务对外提供8080端口, 而在 windows 上无法访问到. 解决思路 使用 netstat -nplt 查看端口上 tcp, 还是 tcp6 查看是否只绑定在 ipv6 上 sysctl net.ipv6.bindv6only 查看ipv4 上可以转发数据 : sysctl net.ipv4.ip_forward 查看防火墙是否禁用端口. 第一步: 查看端口 netstat -nplt -> # netstat -nplt Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1001/sshd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1156/master tcp6 0 0 :::8080 :::* LISTEN 28187/output/bin/go 可以看出 8080端口只出现在 tcp6 上.
镜像是 Docker 三大核心概念中最重要的 Docker 三大核心: 镜像 容器 仓库 1. 镜像介绍 Docker 运行容器前需要本地存在对应的镜像, 如果镜像不存在, Docker 会尝试远程仓库里拉取. 默认为 Docker Hub 仓库.用户也可以自定义镜像仓库. 1.1. 获取镜像 docker pull ubuntu:18.04 如果不指定TAG标签, 则拉取 latest标签, 如上面使用tag: 18.04 镜像文件一般由若干层(layer)组成, 每一层由唯一的ID标记 : 63ca9dsd732a1 (实际完整ID包括 256比特, 64个十六进制字符组成) 当不同镜像包括相同的层, 本地仅存储一份内容. 减少存储空间. 以上ubuntu:18.04 相当于 docker pull registry.hub.docker.com/ubuntu:18.04. 默认注册服务器为 Docker Hub. 有时需要代理服务来加速Docker镜像获取过程. 可能在docker 服务启时配置中增加--registry-mirror=proxy_URL, 如国内: https://registry.docker-cn.com 1.2. 查看镜像 列出本地镜像 docker images -> # docker images REPOSITORY TAG IMAGE ID CREATED SIZE mysql latest ab2f358b8612 5 days ago 545MB redis 5.

Git 简明命令

基本概念 Workspace:工作区 Index / Stage:暂存区 Repository:仓库区(或本地仓库) Remote:远程仓库 初使化 新建仓库 git init 配置 # 显示全部配置 git config --list # 编辑配置 git config -e [--global] # 设置用户和邮箱 git config [--global] user.name "百里" git config [--global] user.email "freeit@126.com" 拉取 克隆仓库 git clone git@github.com:yezihack/barry.git 克隆指定分支 -b 指定分支名 git clone -b master git@github.com:yezihack/barry.git 分支 查看本地分支 git branch 查看所有远程分支 git branch -r 查看所有分支 git branch -a 创建并切换分支 git checkout -b dev 新建一个分支 git branch dev 切换分支 git checkout dev 合并分支 # 当前分支master, 要将dev分支合并到master分支 git checkout master git merge dev 删除分支 git branch -d dev
绿色安装包的概念来自于 win 的概念, 也就是说无需安装即可使用软件. 即为绿色安装包. 在 linux 为了方便, 我们也需要制作绿色安装包, 方便相同系统之间的 copy. 即高效又好用. 何乐不为. 你将了解到 LD_LIBRARY_PATH 的概念 ldd 是什么东西 如何制作绿色安装包 安装 mediainfo 在 CentOS7 192.168.1. 100 机器上操作. yum -y install mediainfo 制作ldd打包脚本 本脚本用于将 mediainfo 所依赖的动态库或依赖文件都复制出来 文件名:pack.sh #!/bin/bash set +x # 需要打包的命令全路径 file_path=$1 # 需要复制的目录 target_dir=$2 # check file path if [ ! -f $file_path ];then echo "$file_path is not file" exit 0 fi # 判断目录是否为空 if [ -z $target_dir ]; then echo "target_dir is null" exit 0 fi # 目录不存在,自动创建 if [ !