《Go 并发编程实战》读书笔记
GO 并发编程实战
第 1 章:初始 Go 语言
- 访问控制级别:公开、包级私有之外,还有一种——模块级私有。通过吧名称首字母大写的程序实体放入 internal 代码包实现的。
- 多编程范式:Go 支持函数式编程。函数类型为第一等类型,可以方便地传递和赋值。此外,它还支持面向对象编程,有接口类型与实现类型的概念,但用嵌入替代了继承。
- Go 命令:
- clean。用于清除因执行其他 go 命令而遗留下来的临时目录和文件。
- doc。用于显示Go语言代码包以及程序实体的文档。
- fix。用于修正指定代码包的源码文件中包含的过时语法和代码调用。这使得我们在升级Go语言版本时,可以非常方便地同步升级程序。
- fmt。用于格式化指定代码包中的Go源码文件。实际上,它是通过执行gofmt命令来实现功能的。
- generate。用于识别指定代码包中源码文件中的
go:generate
注释,并执行其携带的任意命令。该命令独立于 Go 语言标准的编译和安装体系。如果你有需要解析的go:generate
注释,就单独运行它。这个命令非常有用,我常用它自动生成或改动 Go 源码文件。 - list。用于显示指定代码包的信息,它可谓是代码包分析的一大便捷工具。利用 go 语言标准库代码包 text/template 中规定的模板语法,你可以非常灵活地控制输出信息。
- tool。用于运行 Go 语言的特殊工具。
- vet。用于检查指定代码包中的 Go 语言源码,并报告发现可疑代码问题。该命令提供了除编译以外的又一个程序检查方法,可用于找到程序中的潜在错误。
- 命令额外标记:
- -a:用于强调重新编译所有涉及的 Go 语言代码包。
- -n:使命令仅打印其执行过程中用到的所有命令,而不真正执行它们。
- -race:用于检测程序中的数据竞争问题。
- -v:用于打印命令执行过程中涉及的代码包。
- -work:用于打印命令执行时生成和使用的临时工作目录的名字,且命令执行完成后不删除它们。
- -x:使命令仅打印其执行过程中用到的所有命令,同时执行它们。
- pprof:用于以交互的方式访问一些性能概要文件。命令将会分析给定的概要文件并根据要求提供高可读性的输出信息。这个工具可以分析的概要文件包括 CPU 概要文件、内存概要文件和程序阻塞概要文件。这些包含 Go 程序运行信息的概要文件,可以通过标准库代码包 runtime 和 runtime/pprof 中的程序来生成。
- trace:用于读取 Go 程序踪迹文件,并以图形化的方式展示出来。它能够让我们深入了解 Go 程序在运行过程中的内部情况。比如,当前进程中堆的大小及使用情况。又比如,程序中的多个 goroutine 是怎样被调度的,以及它们在某个时刻被调度的原因。Go 程序踪迹文件可以通过标准库代码包 runtime/trace 和 net/http/pprof 中的程序来生成。
《Go Web 编程》读书笔记
GO Web 编程
Go 语言介绍
第一章:Go与web应用
HTTP
- HTTP 是一种无状态、由文本构成的请求-响应(request-response)协议,这种协议使用的是客户端-服务器(client-server)计算模型
- CGI 通用网管接口(Common Gateway Interface),允许web服务器与一个独立运行于web服务器进程之外的进程对接
- SSI(server-side includes)服务器端,允许开发者在HTML文件里包含一些指令,衍生出了JSP(Java Server Pages),ASP(Active Server Pages)等Web模板引擎
- http请求
- 请求行(request-line)
- 零个或任意多个请求首部(header)
- 一个空行
- 可选的报文主体(body)
- 请求方法
- GET
- POST
- HEAD
- PUT
- DELETE
- TRACE
- OPTIONS
- CONNECT
- PATCH
如何做数据库选型
常见数据库分类
在微服务设计中,数据库的选型是不可缺少的一环,后台的核心是与数据打交道,在不同的业务场景选择的数据库不一样,好的数据库选型能够解决业务的性能瓶颈,如果数据库选择不恰当,会使得服务的性能上不去,因此我们需要对一些常用的数据库有一些了解,这样才能因地制宜,发挥系统最好的性能。
数据库类型 | 数据库名称 |
---|---|
关系型数据库 | MySQL,Oracle,PostgreSQL |
内存数据库 | Redis,Memcache,Riak |
时序数据库 | Prometheus,InfluxDB,OpenTSDB |
文档型数据库 | MongoDB,CouchDB,RavenDB |
分布式数据库 | TIDB |
图数据库 | Neo4J,InfiniteGraph,OrientDB,Dgraph |
列式存储数据库 | Cassandra,HBase,ClickHouse,Elasticsearch |
文件存储 | EPH,GlusterFS |
考虑角度汇总
Go 包/中间件
casbin
权限管理。
简介
权限管理在几乎每个系统中都是必备的模块。如果项目开发每次都要实现一次权限管理,无疑会浪费开发时间,增加开发成本。因此,casbin库出现了。casbin是一个强大、高效的访问控制库。支持常用的多种访问控制模型,如ACL/RBAC/ABAC等。可以实现灵活的访问权限控制。同时,casbin支持多种编程语言,Go/Java/Node/PHP/Python/.NET/Rust。我们只需要一次学习,多处运用。
结构
权限实际上就是控制谁能对什么资源进行什么操作。casbin 将访问控制模型抽象到一个基于 PERM(Policy,Effect,Request,Matchers) 元模型的配置文件(模型文件)中。因此切换或更新授权机制只需要简单地修改配置文件。
policy 是策略或者说是规则的定义。它定义了具体的规则。
effect 根据对请求运用匹配器得出的所有结果进行汇总,来决定该请求是允许还是拒绝。
request 是对访问请求的抽象,它与 e.Enforce() 函数的参数是一一对应的
matcher 匹配器会将请求与定义的每个 policy 一一匹配,生成多个匹配结果。
PPT 学习笔记
PPT 美化四步法
- 统一字体。微软雅黑(安全性有保证)。
- 突出标题。长短设计,动词短句。
- 巧取颜色。从模板和LOGO里面提取强调色。
- 快速配图。
统一字体
微软雅黑。
- 一级标题字号设置32号及以上。
- 二级标题字号设置24~28。
- 正文字号设置18~20。
- 标题和正文在纵向上需要有一定的错位。TAB
- 填充颜色,字体设置白色的方式,形成颜色的反差,形成层次感。
突出标题
- 长度统一。
- 动词短句。
- 一级大标题可以设置阴影。
巧取颜色
- 注意颜色搭配。eg: 红/黑。
- 正文颜色可以适当灰度处理,突出标题即可。eg: 正文调整为深灰色。
快速配图
- 根据标题查找相关图片,注意图文关联。
- 图片有底色的时候,添加色块来统一底色。
- 培训类PPT,可以配一些微笑人脸进行情绪调动。
- 搜图的时候,要打开想象力,用具体场景进行联想搜图,避免和别人重复。
计算机网络知识体系(面试用)
计算机网络应用层协议有哪些?
应用层协议:
1、远程登录协议(Telnet)
2、文件传输协议(FTP)
3、超文本传输协议(HTTP)
4、域名服务协议(DNS)
5、简单邮件传输协议(SMTP)
6、邮局协议(POP3)
其中,从网络上下载文件时使用的是FTP协议,上网游览网页时使用的是HTTP协议;在网络上访问一台主机时,通常不直接输入IP地址,而是输入域名,用的是DNS服务协议,它会将域名解析为IP地址;通过FoxMail发送电子邮件时,使用SMTP协议,接收电子邮件时就使用POP3协议。
传输层协议:
1、传输控制协议 TCP
2、用户数据报协议 UDP
TCP协议:面向连接的可靠传输协议。利用TCP进行通信时,首先要通过三步握手,以建立通信双方的连接。TCP提供了数据的确认和数据重传的机制,保证发送的数据一定能到达通信的对方。
UDP协议:是无连接的,不可靠的传输协议。采用UDP进行通信时不用建立连接,可以直接向一个IP地址发送数据,但是不能保证对方是否能收到。
网络层协议:
1、网际协议 IP
2、Internet互联网控制报文协议 ICMP
3、Internet组织管理协议 IGMP
4、地址解析协议 ARP
MySQL 架构(面试用)
MySQL的基本架构
Server 层:主要包括连接器、查询缓存、分析器、优化器、执行器等,所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图,函数等,还有一个通用的日志模块 binglog 日志模块。
存储引擎层: 主要负责数据的存储和读取,采用可以替换的插件式架构,支持 InnoDB、MyISAM、Memory 等多个存储引擎,其中 InnoDB 引擎有自有的日志模块 redolog 模块。现在最常用的存储引擎是 InnoDB,它从 MySQL 5.5.5 版本开始就被当做默认存储引擎了。
查询语句执行过程解析
1、客户端发起一个请求时,首先会建立一个连接
2、服务端会检查缓存,如果命中则直接返回,否则继续之后后面步骤
3、服务器端根据收到的sql语句进行解析,然后对其进行词法分析,语法分析以及预处理
4、由优化器生成执行计划
5、调用存储引擎层API来执行查询
6、返回查询到的结果
k8s 学习笔记
python 学习笔记
python 复制操作合集
通过跳转机连接 mysql
场景:本地->跳转机->mysql服务器
分两步:1.通过 sshtunnel 登陆跳转机;2.创建数据库连接。
1 | import pymysql |