- 博客(215)
- 资源 (6)
- 收藏
- 关注
原创 English-英语音标
音标体系国际音标:不是针对英语的DJ音标(使用最多):有国际衍生而来KK音标(台湾使用)音标分类通过声带振动浊音:声带振动发出的音清音:声带未振动发出的音通过气流是否在空腔在收到阻碍元音:未受到阻碍辅音:受到阻碍DJ音标
2023-07-04 01:10:44
315
原创 Go内存
内存泄漏内存泄漏(Memory Leak)是指程序中已动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。内存泄漏分析工具:net/http/pprofpprof是Go的性能分析工具。在程序运行过程中,提供程序运行时的可视化信息:CPU、堆内存、goroutine栈运行情况等。一、字符串截取func main() { var str0 = "12345678901234567890" str1 := str0[:10]}只要
2022-02-28 12:58:43
1474
原创 GC垃圾回收机制
经典GC算法引用计数每个对象保存自己被引用的数量。当引用数量为 0 时,将其回收。(可以立刻回收)缺点存在循环引用无法释放问题: 多个对象互相引用延伸循环引用解决方法:强弱引用「若 A 强引用了 B,那 B 引用 A 时就需使用弱引用,当判断是否为无用对象时仅考虑强引用计数是否为 0,不关心弱引用计数的数量」根集合:栈上的引用、全局变量常量、程序的元数据等等标记-清扫(为解决上面的循环引用问题)内存到达某个阈值或者固定时间长度会执行垃圾回收程序。STW(不然mark和用户程序并发
2022-02-27 22:56:36
334
原创 回溯算法(排序剪枝 减少复杂度)
回溯算法实际是一种暴力穷举法穷举过程类似于遍历一颗多叉树适合算法:往往是列出所有可能(而动态规划往往是求最优解)框架(注:切片result虽然在函数间传递 但它底层被共用了 所以要copy )枚举三步走做选择(符合条件则加入最终值)下一层决策树backtrace()删除选择/ 全局变量作为最终结果var res [][]int// 回溯函数(递归函数)func backtrace(nums []int,result []int) { / 判断当前是否符合目标 / 如果符
2022-01-23 23:47:38
489
原创 常见算法总结
数组遍历用不到下标就用for(int i:array),别太土啊大哥!数组copy只记这个就行了System.arraycopy(stones,0,stones,0,length);以二维数组第二个元素从大到小排序:Arrays.sort(boxTypes, (x, y) -> (y[1] - x[1]));
2022-01-10 17:40:11
235
1
原创 Git之merge、rebase、revert、reset的使用
Gitmerge:等同于一次commit(E)git checkout feature //切换当前分支为featuregit merge master冲突判断规则:以两个分支最近的共同祖先commit(B)为起点,两个分支对同一个文件修改则会发生冲突。注意选用:Squash commits when merge request is accepted 压缩commit后合并,不然C、D也会被commit到master分支中。rebase:变基:改变当前分支的起点git checout
2021-12-31 17:19:32
2866
原创 Gin框架快速开始
Gin框架特点Gin是一个golang的微框架适合追求性能的小型服务快速:基于httprouter ,基于Radix树的路由,小内存占用,没有反射支持中间件:c.Abort()、c.Next()Gin可以使用中间件 catch 发生在 HTTP 请求中的 panic 并 recover 它很好的解析json...
2021-12-28 20:02:46
567
原创 Go网络编程☞RPC
RPC的意思是远程过程调用(Remote Procedure Call),人话:RPC允许跨机器、跨语言调用计算机程序方法。
2021-12-22 15:28:41
167
原创 Kafka工作流程
生产过程保证分区有序,不能保证Topic有序offset就想当与该条消息在该队列中的唯一ID,而每个消费者会记录自己消费到的offset!一个问题:同一个消息怎么能让N个消费者消费?每个消息记录自己被消费的次数,当被消费N次后就删除该消息,开始消费下一个消息。每个消费者会定时拿着自己的offset去消费,如果当前消息ID为自己的offset,那么就返回空消息。Kafka是怎样存消息的呢?【文件????】消息丢失问题ACK消息确认机制数据一致性问题消费方式消费者主动拉去【没
2021-12-12 17:15:34
1426
1
原创 操作系统IO过程与零拷贝
南桥中的DMA控制器是个什么东西?我们曾经在硬件基础知识中讲过:CPU直接从磁盘/网卡中读/写取数据到内核(操作系统)缓冲区【磁盘高速缓存(PageCache)】会降低CPU效率,而这个工作CPU会交给南桥中的DMA控制器完成的。当我们要将磁盘中的文件发送到互联网时,操作系统是怎么做的?我的程序很简单:两个系统调用:syscall.Read(fd int, p []byte)syscall.Write(fd int, p []byte)但这两个系统调用背后发生的事情却不简单:– 两个
2021-12-12 17:10:11
592
原创 Kafka架构概述
消息队列限流削峰异步解藕数据收集消息队列的模式一、点对点模式二、发布/订阅模式发布订阅模式其实分为两种方式:发布:即推送,消息队列主动将消息推送给消费者(缺点:消费者处理不来,导致推送失败)订阅:即拉去,消费者主动去消息队列中拉去数据(缺点:需要消费者不断轮询消息队列)Kafkakafka是基于发布订阅者模式的消息队列。【订阅者模式,消费者主动拉去!】基本架构Producer:消息生产者Broker:节点,就是一台台机器Topic:消息分类,同一种消息发送到同一个T
2021-12-11 22:52:03
928
1
原创 GORM进阶
关联【Belongs To / Has One / Has Many / Many To Many】创建user时,不仅会在user表中插入数据,而且会在car表中插入对应的数据!条件:User表必须有Car的外键【所以不常用(不建议使用物理外建,而是逻辑外键)】type User struct { ID int64 `gorm:"column:id"` Account string `gorm:"column:account"` Pwd string `gorm:"colu
2021-11-17 15:50:48
748
原创 知识回顾顾
mysql只有char(n),varchar(n):n指最大的字节数而int、bigint、tinyint等存储大小都是固定的,后面的括号只是最大显示宽度。时间为什么不用 timestamp ? :timestamp只能用到2038年,所以时间我们常用 datetime,或者bigint代替【bigint存储从seconds elapsed since January 1, 1970 UTC】使用自增整数作为主键,有防止页分裂等特点(所以ID是主键,给account建立唯一索引!)CREATE
2021-11-17 13:56:11
757
原创 GORM快速开始
ORMORM:对象关系映射(Object Relational Mapping),将数据库中的表映射成程序中的对象!(它的作用是在关系型数据库和对象之间作一个映射,这样,我们在具体的操作数据库的时候,就不需要再去和复杂的SQL语句打交道,只要像平时操作对象一样操作它就可以了 )...
2021-11-12 19:59:52
814
原创 RBAC权限控制开发
问题根据用户的权限,前端页面应展示不同的内容,如菜单资源、按钮资源等实现将页面资源存储到数据库中,根据用户查询到对应的资源显示到前端页面。需要将数据库表分为两类:1、业务表:用户基本信息等2、页面资源表:菜单信息表等RBAC人话:数据库表权限控制设置思想定义:基于角色的访问权限控制(Role-Based Access Control)。权限与角色相关联,用户通过成为适当的角色而得到这些角色的控制权限,极大的简化了项目权限管理。概念理解用户:现实中访问系统的用户用户类型:用户在现实中的
2021-10-21 20:13:25
154
原创 注册登录策略
token登录策略【token+redis】用户登录产生token存储到redis:key:token value:用户信息返回token给客户端客户端存储到Local Storage 或Session Storage里每次请求将token携带到header中(Authorization:token)从header中获取token,从redis中查询用户信息,并验证是否存在或者是否过期(中间件middleware做)...
2021-10-20 15:26:53
269
原创 实习技能GET
一、连接内网、开通账号二、Mac开发环境使用英文名gort认值:IOS和Linux系统几乎相同开发环境全部在用户家目录下配置!(/Users/gort/)macbook中的命令解释外壳shells:cat /etc/shells/bin/bash/bin/csh/bin/ksh/bin/sh/bin/tcsh/bin/zshmac中有多种shell,我们在Linux系统中常见的是bash,但是在mac中我们默认使用zsh。zsh更为强大,并且包含bash。Linux有
2021-10-13 20:30:40
354
转载 Go线程模型
线程模型由操作系统调度,在CPU运行的是内核级线程(KSE,Kernel Scheduling Entity)注意点:用户级线程切换在用户态用户程序直接进行内核级线程由操作系统进行切换一、用户级线程模型(python)用户线程与内核线程KSE是多对一(N : 1)的映射模型特性:线程的创建、销毁以及多线程之间的协调等操作等都由线程库来负责而无须借助系统调用来实现一个进程中所有创建的线程都只和同一个KSE在运行时动态绑定优点:由于线程调度是在用户层面完成的,也就是相较于内核调度
2021-09-20 13:06:07
500
原创 Go面向对象编程思想
对象结构体就是对象显示声明对象的方法三大特性小写就是封装(小写同一包;大写任意包)继承就是结构体嵌套结构体的继承不具有多态功能,只有接口有多态功能:只是接口名和结构体指针之间是多态情况!也就是:&Chinese{} 可以直接转换为 Human !!!设计模式五大原则举例一个方法的动作应该是单一的!不同对象(结构体)共有的同类方法应该提取为接口进行实现!...
2021-09-14 16:34:08
151
原创 Go网络编程☞WebSocket
WebSocket?WebSocket是基于TCP的应用层协议,用于在C/S架构的应用中实现双向通信。注意:WebSocket协议在建立连接时需要使用HTTP协议【WebSocket协议是基于HTTP协议实现的】WebSocket与Http的区别?1、通信方式不同WebSocket是双向通信模式;HTTP协议的“请求-响应”模式交互。WebSocket客户端与服务器之间只有在握手阶段是使用HTTP协议的“请求-响应”模式交互,而一旦连接建立之后的通信则使用双向模式交互,不论是客户端还是服务端都
2021-09-13 14:58:41
190
原创 Go网络编程☞HTTP
HTTP?HTTP是我们很熟悉的一种应用层协议HTTP开发服务处理器:Handler就是接受和响应http请求的:(要想能够接受处理http请求就得实现这个接口方法!)type Handler interface { ServeHTTP(ResponseWriter, *Request)}路由【项目开发建议:第三方httprouter路由代替默认路由】有个Handler是专门做路由器的:(接受所有请求,并根据请求URL将请求转发给具体的Handler)路由器可以自定义,但基本都填nil
2021-09-12 18:42:32
178
原创 Http深入理解
tcp之前我们已经深入掌握了tcp的工作原理:tcp握手、tcp长连接(保活计时器)、tcp分手、以及其用来传输信息的报文!socket套接字就是四元组:源IP:源端口号+目IP:目端口号我们知道,tcp是用套接字建立的一个个独立的连接!每个tcp连接的数据都由对应套接字的缓冲区接受!HTTP与TCPhttp是应用层协议,tcp是传输层协议!http底层是用tcp实现可靠的!http的长短连接实质就是tcp的长短连接HTTP1.0 与 HTTP1.1区别1、长连接http1.0是
2021-09-05 13:09:13
192
原创 分布式事务
分布式事务的解决方案强一致性:一、两阶段提交(2PC)引进一个事务协调者准备阶段:每个节点执行自己的任务,并返回执行结果!提交阶段:如果全部成功,则全部执行事务提交;否则全部执行事务回滚!【如果失败,则不断尝试提交或回滚!】存在的问题?同步阻塞:等所有事务执行结果后才能提交或回滚单点问题:协调者如果中途故障,则参与者可能会一直阻塞数据不一致:协调者如果中途故障二、三阶段提交(3PC)和2PC类似,只是准备阶段只是询问参与者是否可以执行事务,然后预提交阶段和提交阶段分别是执
2021-09-04 10:48:10
90
原创 MQ消息队列
作用RecoketMQ主题实际就是消息类型!生产者可以生产多种类型的消息,不同类型的消息放入对应的主题,一个主题可由一个或多个消费者消费!(消费者只能消费一个主题)主题中有多个队列,会将消息细分:Broker就是一个个节点!NameServer就是整个消息队列的路由器!注意:NameServer也是集群部署的!Broker启动时会将自己的信息轮询注册到每个NameServer中!客户端对Name Server的选择?先随机,失败则轮询!工作流程生产者节点获取一个Name
2021-09-03 21:56:03
350
原创 Go进阶原理杂记
切片原理Pointer 是指向一个数组的指针,len 代表当前切片的长度,cap 是当前切片的容量。(cap 总是大于等于 len 的)map原理buckets存储散列表指针!懒迁移:扩容时map并不会立即把新数据做迁移,而是当访问原来旧bucket的数据的时候,才把旧数据做迁移channel原理环形队列+互斥锁回想:上面三种是特殊数据类型,常使用make()函数创建!syync.Map互斥锁 + 原子类// 封装的线程安全的maptype Map st..
2021-08-27 15:29:52
231
原创 Go网络编程☞简介
目标:开发一个能够支持http请求、app请求!具有tcp聊天、udp播放视频功能的统一后端!http开发过程知识点服务处理器:Handler就是接受和响应http请求的:(要想能够接受处理http请求就得实现这个接口方法!)type Handler interface { ServeHTTP(ResponseWriter, *Request)}有个Handler是专门做路由器的:(接受所有请求,并根据请求URL将请求转发给具体的Handler)路由器可以自定义,但基本都填nil,就是默
2021-08-26 15:33:18
181
原创 Go连接数据库
官方:README案例:连接多个数据库dbconfig.go:数据库配置文件【因为同一个包下所有数据都是互通的,所以统一管理连接配置!注意:驱动名必须是相应的数据库】package dbimport ( "database/sql" _ "github.com/go-sql-driver/mysql" //注册驱动器)var err error// 主数据库配置(写数据库)var wdb *sql.DBconst ( wDriverName = "mysql" //驱动名必
2021-08-20 14:03:35
3127
2
原创 Context上下文
Context的产生原因控制 子goroutine 的结束!context.go结构注意点:Context是一个开放的接口!context.go源码中对Context接口有四种实现,但这四种实现不对外开放!但context.go源码对外提供六种方法对四种实现的创建!Context接口Deadline()【定时取消】:返回代表此上下文完成的工作应取消的时间。未设置截止日期时ok==false。Done()【是否被取消】:返回一个通道,当这个goroutine的context被can
2021-08-20 14:03:10
242
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人