03 2022 档案
摘要:采用分支来保护远程仓库 Git实现版本管理 首先了解git的特点: 每一次commit都会串成一条时间线,时间线就是一条分支(主分支(master)) HEAD指向master,master指向提交,以此确定当前分支的提交点 具体形式如图: Git的分支管理 每一次提交代码,master分支都会向前
阅读全文
摘要:对分支进行管理 为什么需要分支管理? 在实际开发过程中master分支应该是最稳定的。不能再上面干活。所以通常会开辟一个dev分支。每个人在在dev分支下建立自己的开发分支。 概括: 个人开发分支 >指向dev分支 >指向master分支 普通的Git合并方式 Git会用Fast forward模式
阅读全文
摘要:需要一个远程备份 必须得相信: 一个人可以走得很快。但是一群人才能走得更远。当我们有一个很好的idea并且已经为之做出了什么的时候。它不应该只存在于自己的脑子或者是自己的计算机内。它需要让更多的人知道。同时也应该让想了解它的人有机会和渠道了解它。 把项目托管到远程仓库 在一个完整的项目最初应该把它完
阅读全文
摘要:Git管理的是修改而非资源本身 Git为什么被称为最好的分布式项目管理系统 Git跟踪并管理的是修改,而非文件。 场景举例: 创建文件read.txt >添加到暂存区git add read.txt >此时在对read.txt文件进行修改 >直接commit 此时查看暂存区状态: git statu
阅读全文
摘要:一切从安装软件开始 如何在计算机当中安装软件Git 下载地址 从安装到使用的流程: 官网下载Git >在Git的客户端生命计算机身份(根据参数不同可以控制所有的Git仓库都可以是同不同的配置) Git客户端设置: 给计算机打上标识: git config --global user.name "自己
阅读全文
摘要:What is Git? 定义 Git是目前世界上最先进的分布式版本控制系统(没有之一)。 特点 分布式存储 记录了在主分支上的每一次更改 记录了一个项目周期的整条流程线 集中式和分布式的区别 集中式版本控制系统 特点: 版本库集中存放在中央服务器 工作流程: 从中央服务器取得最新版本 >干活 >完
阅读全文
摘要:2022/03/29 Mac布置项目环境进行包管理 部署环境debugapi 使用在线编译器进行环境部署 >在线编译器remix 配置git >拉取两个需要测试的项目 通过本地git生成ssh密钥 使用本地的ssh公钥配置到github上 打开github 进入Settings -- SSH and
阅读全文
摘要:2022/03/28 HomeBrew使用说明 如何高效快捷的使用Mac的包管理工具 基础命令: 查看安装过的包 brew list --versions 查看包是否需要更新 brew outdated 更新服务器端的包目录 brew update 更新包 brew upgrade <package
阅读全文
摘要:2022/03/28 Mac环境配置踩坑记录 今日事务 问题 jdk路径 卸载插件 >安装idea的版本 安装node.js导致的版本不兼容项目问题 安装homebrew需要设置的一些东西 一、jdk安装路径 二、卸载idea 步骤: application中移除到废纸篓 依次清除下面目录下的内容
阅读全文
摘要:3.24 Go之反射规则 静态类型语言 package mainimport "fmt"/*探讨Go的规则 */func main() { // 声明一个类型 type MyInt int // 声明一个int类型变量和一个MyInt类型变量 var a int var b MyInt //
阅读全文
摘要:3.23 Go之反射 什么是反射 反射是指在程序编译期将变量的信息整合到可执行文件中,给程序提供接口访问反射信息.可以在程序运行期获取类型的反射信息,并且有能力修改它们 反射流行时间: 在java出现之后流行起来 反射的缺点 反射功能强大但是代码可读性不理想 需要反射的原因 程序在编译时,变量被转换
阅读全文
摘要:3.22 Go之CSP:通信顺序进程 Go的并发模型 多线程共享内存 >java或c++等语言中的多线程开发 CSP(Communicating sequential processes) >两个独立并发实体通过channel进行通信的并发模型 值得注意的是: Go并没有完全实现CSP仅仅只是实现了
阅读全文
摘要:3.22 Go之聊天服务器 项目结构 服务端 一个主goroutine-->监听端口,每一个链接创建一个新的handleConn的goroutine 一个广播(broadcaster)goroutine >使用select对消息进行响应 一个(handleConn)goroutine >用户连接处理
阅读全文
摘要:3.21 Go之锁(一) 锁的几种描述 死锁 活锁 饥饿锁 锁的种类 互斥锁 读写互斥锁 读写锁 读锁 写锁 死锁 死锁的概念 两个或者两个以上的进程(或线程),因争夺资源而互相等待. 特点: 这些进程(或线程)都无法推进下去. 此时系统处于死锁的状态或者系统产生了死锁. 这些进程(或线程)称为死锁
阅读全文
摘要:3.21 Go之锁(二) 锁的种类 互斥锁(sync.Mutex) 读写互斥锁(sync.RWMutex) Go提供的函数 go的sync包下提供了两种类型: sync.Mutex sync.RWMutex Mutex Mutex的概念 最简单的锁定 特点: 当一个goroutine获得Mutex后
阅读全文
摘要:3.22 Go之等待组 等待组的作用 进行多个任务的同步,保证在并发环境中完成指定数量的任务 等待组的结构特点以及可使用的函数 等待组属于sync.WaitGroup类型.每个等待组内部维护一个技术,该计数初始默认值为零 等待组的函数: 方法名功能 (wg * WaitGroup) Add(delt
阅读全文
摘要:3.21 Go之多核并行化 并发和并行的概念 首先了解什么是并发什么是并行 Go当中实现多核多线程并发 注意: 注意区分什么是goroutine在并发和并行章节已经提到了. 获取当前操作系统CPU的核心数: 示例代码: package mainimport ( "fmt" "runtime")/
阅读全文
摘要:3.12 Go之并发打印(借助通道实现) 使用无缓冲通道实现并发打印数字 示例代码: package mainimport "fmt"/*Go之并发打印结果 *//* 定义一个打印函数 */func printer(c chan int) { // 无限循环等待数据 for { // 从chan
阅读全文
摘要:3.12 Go之通道关闭后继续使用 概念 通道是一个引用,会被垃圾回收机制回收,也可以主动关闭 关闭通道的函数 函数: close() 被关闭的通道的特点: 被关闭的通道不会被置为nil 给被关闭的通道发送数据会触发panic 向已关闭的通道发送数据会发生阻塞 package mainimport
阅读全文
摘要:3.11 Go之RPC(模拟远程调用过程) 什么是RPC框架? RPC是指Remote Procedure Call远程过程调用 作用: 简化进程间通信的过程 RPC的作用 装通信过程,让远程的数据收发通信过程看起来就像本地的函数调用一样。 Go之RPC示例 特点: 使用channel代替Socke
阅读全文
摘要:3.11 Go之使用通道响应计时器事件 通道响应计时器应用场景 由于go中的goroutine的设计,定时任务可以再goroutine中通过同步的方式进行也可以通过异步回调完成 同步进行 异步回调 延迟回调 使用time包下的time.AfterFunc函数提供了该条件。传入一个时间再传入一个函数那
阅读全文
摘要:3.10 Go之缓冲通道 缓冲通道种类 无缓冲通道 带缓冲通道 什么是无缓冲(Unbuffered Channel)通道? 指在接收前没有能力保存任何值的通道 >一进一出(只能进一个值) 特点: 要求发送goroutine和接收goroutine同时准备好,才能完成发送和接收操作 理解: 可以理解为
阅读全文
摘要:3.11 Go之通道多路复用 >同时处理接收和发送多个通道的数据 什么是通道多路复用? 同时处理接收和发送多个通道的数据 表示在一个信道上传输多路信号或数据流的过程和技术 举例: 电话是一个典型的多路复用设备,在一条线路上可以同时接收或发送数据 多通道操作的两个处理办法 使用for循环进行通道处理遍
阅读全文
摘要:3.9 Go之单向通道 什么是单向通道 channel本身支持读写操作,单向通道顾名思义是指一个通道只能读或者只能写 注意: 如果一个通道只能读或者只能写将毫无意义。所以单向channel的概念只是对channel的一种使用限制 单向通道的声明格式 关键点: <指向哪儿数据往哪儿流 var 通道实例
阅读全文
摘要:3.10 Go之channel超时机制 什么是超时? 所谓的超时可以理解为token过期,需要重新操作 Go中的channel超时机制 为了防止channel被其他goroutine竞争,所以需要设置一个超时处理器 处理办法: 使用select来处理超时 Go中select的使用方法以及和switc
阅读全文
摘要:3.8 Go之通道(chan) 什么是通道? goroutine的通信管道 如何李姐通道 首先不要混淆goroutine和channel之间的关系 goroutine是并发的结构体 channel是每个结构体通信的桥梁 channel的特点: channel是一个通信机制,每个channel都有一个
阅读全文
摘要:3.8 Go之并发和并行 并发和并行 并发(concurrency) 并发是指: 把任务在不同时间点交给处理器进行处理。同一时间点,任务并不会同时运行。 核心概念: 同时管理很多事情 并行的关键: 事情可能只做了一半就被暂停去做别的事情了 并行(parallelism) 并行是指: 把每一个任务分配
阅读全文
摘要:3.2 Go之语言竞争状态 什么是竞争状态? 两个或者多个goroutine在没有相互同步的情况下,访问某个共享的资源,如同时对该资源进行读写时就会处于相互竞争的状态。这就是并发中的资源竞争。 资源竞争示例 package mainimport ( "fmt" "runtime" "sync")
阅读全文
摘要:3.2 Go之语言并发通信 并发编程的难点 并发编程的难度在于协调,协调就需要交流,并发单元间的通信是最大的问题 常见的并发通信模型 共享数据 消息 共享数据 概念: 多个并发单元分别保存对同一个数据的引用,实现对该数据的共享。实际工程中主要是指共享内存。 C语言共享内存示例: /* 头文件宏引入
阅读全文