自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(21)
  • 资源 (1)
  • 收藏
  • 关注

原创 CPU的局部性

分支局部性(Branch Locality):分支语句(如if、switch)中的条件跳转会导致程序执行路径的改变。空间局部性(Spatial Locality):访问某个内存位置的数据后,很可能在近期访问相邻的内存位置。时间局部性(Temporal Locality):访问某个内存位置的数据后,很可能在近期再次访问相同的内存位置。通过充分利用局部性,可以提高程序的性能和效率,减少访问内存的开销,加快计算速度。数据局部性(Data Locality):指在一段时间内,程序更倾向于访问某个特定集合的数据。

2024-03-12 10:00:44 351

原创 go mutex实现分析

mutex有两个成员,state和sema。其中state表示当前互斥锁的状态,而sema是用于控制锁状态的信号量。有两个要实现的接口,加锁和解锁。state是一个32位的值,第一位是加锁标记,第二位是唤醒标记,第三位是饥饿标记,之后的位数用来记录等待队列的数量。mutexWoken互斥锁有两种操作模式:普通模式和饥饿模式。在普通模式下,等待者按照先进先出(FIFO)的顺序排队,但是被唤醒的等待者不拥有互斥锁,而是与新到达的 goroutine 竞争互斥锁的所有权。

2024-02-20 11:23:10 873

原创 go context 实现分析

/ Deadline 返回在此上下文中代表工作应该被取消的时间。当没有设置截止时间时,Deadline 返回 ok==false。连续调用 Deadline 返回相同的结果。// Done 返回一个通道,在此上下文中代表工作应该被取消时会关闭。如果此上下文永远不会被取消,Done 可能返回 nil。连续调用 Done 返回相同的值。// Done 通道的关闭可能是异步的,在取消函数返回后发生。//// WithCancel 会在调用 cancel 时将 Done 关闭;

2024-02-07 16:42:44 363

原创 给定一个数字n和一个数字数组arr,返回小于n的最大数,arr中的值可以重复使用

给定一个数字n和一个数字数组arr,返回小于n的最大数,arr中的值可以重复使用。

2024-01-24 20:48:25 389

原创 go GOMAXPROCS(1)测试

GOMAXPROCS:设置最大的可同时使用的 CPU 核数。因为设置了一个CPU,多以执行 的顺序是确定的。CPU的亲缘性会选择切换少的来执行。那为什么会先输出3呢,

2024-01-17 23:27:45 398

原创 golang 传值还是传引用

传值:数组传引用:切片举例:func test(){ a:=[]int{1,2,2} b:=[...]int{1,2,2} func(a []int) { a[0]=3 }(a) func(b [3]int){ b[0]=4 }(b) fmt.Println(a) fmt.Println(b)}执行结果是:[3 2 2][1 2 2]原因分析:数组在go里边是值传递的,在作为参数的时候是会整个复制的slice传递的是一个包含长度和指针的结构体

2023-06-06 22:14:50 70

原创 redis 的5 种数据结构

redis的5种格式的基本命令和实现

2023-06-06 22:10:44 49 1

原创 读写锁,表锁,行级锁,事务,ACID

读写锁,表锁,行级锁,事务,ACID的一些概念

2022-10-18 22:15:44 189

原创 go defer和return的执行顺序

func deferReturn (){ i:=1 j:=func(n *int)int{ defer func() { *n=*n+1 }() return *n }(&i) println("i",i) println("j",j)}执行结果=== RUN Test_deferReturni 2j 1执行顺序1、defer压栈2、返回值到内存区3、赋值给j4、执行defer所以j还是1i变成了2...

2021-12-09 20:27:19 94

原创 无缓存channel不被消费导致阻塞

创建一个没有缓存的channel,如果不去消费他,会在写入的时候导致无法写入,一致被阻塞// NoCacheChan 测试没有缓存的channel在不被消费的情况下能不能正常推出func NoCacheChan() { c:=make(chan int) go func() { start:=time.Now().Unix() c<-1 println("channel done") println(time.Now().Unix()-start) close(c

2021-12-09 10:39:51 298

原创 go nil是否可以传给channel

测试代码,将一个空值赋值给channelfunc ChanNil(){ a:=make (chan map[int]int,1) a<-nil close(a) b:=<-a if b==nil{ println("nil") }else { _,ok:=b[1] println("ok",ok) }}将一个map赋值给channelfunc ChanNil(){ a:=make (chan map[int]int,1) a<-map[int

2021-12-07 14:42:12 681

原创 go 两个channel同时range

定义两个channel,同时用for进行遍历,前一个会阻塞后一个吗是的func Chan() { c1 := make(chan int) c2 := make(chan int) go func() { for i := 0; i < 5; i++ { time.Sleep(2 * time.Second) c1 <- i } close(c1) }() go func() { for i := 0; i < 5; i++ { tim

2021-11-29 14:52:24 442

原创 linux 创建用户和用户组

groupadd work 创建用户组useradd work -g work 创建用户同时指定用户组passwd work 修改用户密码,需要连续输入liang b

2021-06-17 15:40:35 1097

原创 go 函数 切片参数append是引用吗

import "fmt"func test() { var arr=[]string{"12","23","34"} fmt.Printf("arr %+v,arr cap %d\n",arr,cap(arr)) arrNew:=slice(arr) fmt.Printf("new %+v,arrNew cap %d\n",arrNew,cap(arrNew)) arrNew[0]="90" fmt.Printf("arr %+v,arr cap %d\n",arr,cap(arr)) .

2021-06-11 12:27:00 160

原创 incr超时问题

incr是否会导致超时redis incr是否会使过期失效redis incr是否会使过期失效redis里边在重新set一个变量的时候,如果原来这个变量上带有超时的属性,就会在这次set的时候失效,127.0.0.1:6379> ttl testset(integer) 987127.0.0.1:6379> set testset 20OK127.0.0.1:6379> ttl testset(integer) -1incr不会失效,在计算的时候会保留原来的超时时间1

2021-03-01 15:05:18 657

原创 golang select

使用case支持的条件是channel的状态,必须是写入或者读channel如果是非阻塞读写channel可以使用default, select { case i := <-a: println(i) default: println("default") }如果是阻塞的不需要default select { case i := <-a: println(i) }如果有多个执行条件,且channel同时发...

2021-01-27 16:12:00 50

原创 iota golang

iota 在定义常量的时候可以实现自增例如:const( a = iota b c d)println(a,b,c,d)执行结果:0 1 2 3也可以用来做一些运算例如: const( a = 2+3*iota b c d ) println(a,b,c,d)结果2 5 8 11通过“-"可以实现跳过一些值 const( a = iota b _ _ c _ d ) prin.

2021-01-26 14:04:09 57

原创 用impl实现type XXX interface {}

impl介绍implgenerates method stubs for implementing an interface.//impl用于实现生成接口的方法。安装准备工作:先检查可能遇到的问题是不是都解决了安装命令go get -u github.com/josharian/impl可能遇到的问题1、packagegolang.org/x/tools/imports: unrecognized import path "golang.org/x/tools/impo..

2020-05-14 16:55:03 539

原创 sklearn 线性回归简单实现

一个使用sklearn实现线性回归的简单实例,主要包括数据准备,以及预测部分。数据准备def loadDataSet(filename):    file=open(filename,'r')    dataMat=[]    labelMat=[]    filelines=file.readlines()    #读取文件    for line in filelines:   ...

2018-04-12 15:58:07 514

转载 ML神器:sklearn的快速使用

ML神器:sklearn的快速使用  传统的机器学习任务从开始到建模的一般流程是:获取数据 -&gt; 数据预处理 -&gt; 训练建模 -&gt; 模型评估 -&gt; 预测,分类。本文我们将依据传统机器学习的流程,看看在每一步流程中都有哪些常用的函数以及它们的用法是怎么样的。希望你看完这篇文章可以最为快速的开始你的学习任务。1. 获取数据1.1 导入sklearn数据集  sklearn中包含...

2018-04-12 15:24:50 181

原创 斐波那契数列(Fibonacci sequence)的前200项

斐波那契数列(Fibonacci sequence)的前200项计算和输出#includelong  m[201][5];int main(){int n;int i,j,d=0;for(i=0;ifor(j=0;jm[i][j]=0;}}m[0][0]=m[1][0]=1;for(i=2;ifor(j=0;jm[i][j]=m[

2016-05-14 19:54:58 2514

violent python 中的源代码和用到的样例文件

violent python 中的源代码和用到的样例文件

2017-08-10

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除