面试八股文-计算机网络篇
面试八股文-计算机网络篇OSI七层模型和TCP/IP四层协议概述OSI七层模型协议 帧结构 各层级之间的作用网络层: 关键协议:IP协议、ICMP协议 主机之间的通信,目的是向上提供简单灵活、无连接的、最大努力的交付的数据报服务,网络层不提供服务质量的承诺 不需要建立连接 每个数据报单独路由 每个数据报有完整的目标地址 不提供可靠的连接 到达终点可能无序 每终点进行差错控制 传输层: 关键协议:TCP协议、UDP协议 主机间进程之间的通信,向应用层提供通信服务,屏蔽下面的核心网的网络细节,使得面向传输层编程就像二个主机之间有一条端到端的逻辑通信信道一样 传输层使用TCP协议的时候,这个逻辑通信信道是可靠的,尽管下面的网络是不可靠的 应用层: 关键协议:HTTP协议、FTP协议、SMTP协议、DNS 定义了运行不同端系统上的应用程序如何互相传递报文 提供了不同应用之间的通信 TCP/IP四层协议 HTTP版本的演进graph LR A(HTTP0.9/1991) B(HTTP1.0/1996) C(HTTP1.1/1997) ...
Go-内存对齐
内存对齐什么是内存对齐 CPU 访问内存时,并不是逐个字节访问,而是以字长(word size)为单位访问,通过内存对齐,减少CPU访问次数,加大CPU访问内存的吞吐量 内存对齐:两个结构体包含的字段类型一致,但是顺序不一致,最终输出的大小也不一样 内存对齐规则成员对齐规则 针对一个基础类型变量,如果 unsafe.AlignOf() 返回的值是 m,那么该变量的地址需要 被m整除 (如果当前地址不能整除,填充空白字节,直至可以整除 整体对齐规则 针对一个结构体,如果 unsafe.AlignOf() 返回值是 m,需要保证该结构体整体内存占用是 m的整数倍,如果当前不是整数倍,需要在后面填充空白字节。 通过内存对齐后,就可以在保证在访问一个变量地址时: 如果该变量占用内存小于字长:保证一次访问就能得到数据; 如果该变量占用内存大于字长:保证第一次内存访问的首地址,是该变量的首地址 空结构体的对齐规则 如果空结构体作为结构体的内置字段:当变量位于结构体的前面和中间时,不会占用内存;当该变量位于结构体的末尾位置时,需要进行内存对齐,内存占用大小和前一个变量的大小保持一...
Go-日志库Zap
Go-日志库Zap什么是zap 快,非常快,这也是 zap 最显著的特点。速度快的原因是 zap 避免使用 interface{} 和反射,并且使用 sync.Pool 减少堆内存分配。在 zap 面前 Logrus 的执行速度只有被吊打的份,你可以在官方 GitHub 仓库中看到 zap 与不同日志库的速度对比。 支持结构化日志记录。这是一个优秀的日志库必备功能。 支持七种日志级别:Debug、Info、Warn、Error、DPanic、Panic、Fatal,其中 DPanic 是指在开发环境下(development)记录日志后会进行 panic。 支持输出调用堆栈。 支持 Hooks 机制。 安装1go get -u go.uber.org/zap 基础使用// suger 模式会稍微比logger 原生慢一点 1234567891011121314151617 logger, _ := zap.NewDevelopment() //logger, _ := zap.NewDevelopment() defer logger....
Git 规范
Git 规范为什么需要git规范遵循 Git Commit 规范可以提高团队协作效率和代码库的可维护性。 通过明确的 Commit 类型和格式,开发者能够更轻松地理解每个提交所带来的更改,并能够快速回溯和回滚代码。 建议团队在项目中制定统一的 Git Commit 规范,并通过培训和代码审查来确保规范的遵循 git规范 约定式(): git commit 合并 type subject feat 新功能(feature) fix 修补bug docs 文档(documentation) style 格式(不影响代码运行的变动) refactor 重构(即不是新增功能,也不是修改bug的代码变动) chore 构建过程或辅助工具的变动 revert 撤销,版本回退 perf 性能优化 test 测试 improvement 改进 build 打包 ci 持续集成
优雅退出注销服务
优雅退出注销服务为什么需要优雅注销服务当往服务中心注册了服务之后,由于调试,可能会重复注册同一个服务。当时之前服务由于健康检查,并不会立即退出注销,这就会多线多个“重复的服务” 整合优雅退出服务12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970package consulimport ( "fmt" "github.com/hashicorp/consul/api")// register.go 工具type Registry struct { Host string Port int}type RegistryClient interface { Register(address string, port int, name string, tags []string, id string) erro...
微服务之配置中心
微服务之配置中心为什么需要配置中心 添加配置项不方便,大量部署实例需要修改配置麻烦 go使用viper能自动生效,不保证其他服务 开发、测试、生产的环境隔离 配置中心技术选型目前主流有spring cloud config、apollo和nacos apollo是协程开源,nacos是阿里开源 Apollo大而全,功能完善。nacos小而全 部署nacos简单 nacos不仅仅支持配置中心和支持服务注册和发现 都支持各种语言,不过apollo是第三方支持,nacos 是官方支持 功能点 apollo nacos 开源时间 2016.5 2018.6 配置实时推送 支持(http长轮询) 支持(http长轮询) 配置回滚 支持 支持 灰度发布 支持 待支持 权限管理 支持 支持 多集群 支持 支持 监听查询 支持 支持 多语言 主流语言 主流语言(官方支持) 通信协议 http http nacos安装12# docker模式 docker run --name nacos-standlone -e MODE=standalo...
微服务之配置中心
负载均衡什么是负载均衡负载均衡是将网络流量分发到多个后台服务的一种机制。通过负载均衡的流量分发,降低了单台服务器的负载,减少了应用的响应时间 负载均衡类型集中式Load balance集中式LB方案,如下图。首先,服务的消费方和提供方不直接耦合,而是在服务消费者和服务提供者之间有一个独立的LB(LB通常是专门的硬件设备如F5,或者基于软件如LVS,HAproxy等实现)。 进程内load balance 可看到引入了第三方:服务注册中心。它做两件事: 维护服务提供方的节点列表,并检测这些节点的健康度。检测的方式是:每个节点部署成功,都通知服务注册中心;然后一直和注册中心保持心跳。 允许服务调用方注册感兴趣的事件,把服务提供方的变化情况推送到服务调用方。 这种方案下,整个load balance的过程是这样的: 服务注册中心维护所有节点的情况。 任何一个节点想要订阅其他服务提供方的节点列表,向服务注册中心注册。 服务注册中心将服务提供方的列表(以长连接的方式)推送到消费方。 消费方接收到消息后,在本地维护一份这个列表,并自己做load balance。 可见...
微服务之注册中心
微服务之注册中心什么是注册中心注册中心的作用一句话概括就是存放和调度服务,实现服务和注册中心,服务和服务之间的相互通信 常见的几种注册中心 名称 优点 缺点 接口 一致性算法 zookeeper 1. 功能强大,不仅仅是服务发现2、提供watch机制,实时获取服务状态3、支持dubbo等框架 1、不支健康检查2、需要在服务中集成sdk,复杂度高3、不支持多数据中心 sdk Paxos consul 1、简单易用,不需要集成sdk2、自带健康检查3、支持多数据中心4、提供web管理界面 1、不能实时获取服务msg变化 http/dns Raft etcd 1、简单易用、不需要集成sdk2、可配置性强 1、没有健康检查2、需要配合第三方工具一起完成服务发现3、不支持多数据中心 http Raft consul的安装和配置Docker安装12# 8500 http端口 8600 dns端口docker run -d -p 8500:8500 -p 8300:8300 -p 8301:8301 -p 8302:8302 -p 8600:8600/udp c...
K8s如何支持公网访问
K8s如何支持公网访问因为k8s默认启动支持内网ip,下面是三种 让k8s支持公网访问的模式 keadm init添加参数12# 未实践kubeadm init --apiserver-advertise-address= 内网ip --apiserver-cert-extra-sans 公网ip --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.19.4 --service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16 重新生成apiserver证书 删除原来的apiserver证书 12cd /etc/kubernetes/pkirm apiserver.* 生成新的apiserver证书 1kubeadm init phase certs apiserver --apiserver-advertise-address 内网ip --apiserver-cert-extra-sans 公网ip --...
Gin中session和cookies
Gin中session和cookiessession什么是session Session是在无状态的HTTP协议下,服务端记录用户状态时用于标识具体用户的机制 它是在服务端保存的用来跟踪用户的状态的数据结构,可以保存在文件、数据库或者集群中 在浏览器关闭后这次的Session就消失了,下次打开就不再拥有这个Session。其实并不是Session消失了,而是Session ID变了 cookie什么是cookie? Cookie是客户端保存用户信息的一种机制,用来记录用户的一些信息 每次HTTP请求时,客户端都会发送相应的Cookie信息到服务端。它的过期时间可以任意设置,如果你不主动清除它,保留 二者对比 Cookie 在客户端(浏览器),Session 在服务器端 Cookie的安全性一般,他人可通过分析存放在本地的Cookie并进行Cookie欺骗。在安全性第一的前提下,选择Session更优。重要交互信息比如权限等就要放在Session中,一般的信息记录放Cookie就好了 单个Cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个Cookie S...




