- 博客(26)
- 资源 (1)
- 收藏
- 关注
原创 软考高级系统架构师选择题整理
在需求分析阶段,公司分析人员整理出一些相关的系统需求,其中“登陆用户的密码,30天需要修改一次,而且不能使用最近5次的密码,以提高系统的安全性”属于 ( ) ,“要求采用国有自主知识产权的数据库”属于 ( ) ,“在凭证录入时对往来款项进行详细的信息录入”属于 ( ) ,“用户在凭证录入界面录入信息后,点击保存按钮后,客户认为一般能在3秒钟内保存到数据库中” 属于( )。假设关系模式R(U,F),属性集U={A,B,C},函数依赖集F={A→B,B→C}。D 构件抽象、可替代性、类型安全性、事务管理。
2025-02-10 13:18:16
193
原创 go为什么高效
Go运行时的自适应调度机制是指调度器会根据系统当前的负载情况和硬件资源的状况,动态地调整Processor的数量以及Goroutine的调度策略,以达到最佳的性能。这种自适应性使得Go语言的并发程序能够在各种不同的硬件环境和负载下保持良好的性能。线程饥饿是指某个Goroutine长时间得不到执行机会,而其他Goroutine却不断被执行的情况。这会导致系统性能下降,甚至出现死锁。正是由于这些特点,GMP模型使得Go语言在并发编程领域具有显著的优势,能够轻松地编写出高效、可靠的并发程序。
2024-10-12 17:18:48
852
原创 go的GMP模型
Go语言的并发编程模型,核心是GMP模型。这个模型由Goroutine、Machine和Processor三个部分组成,共同实现了Go语言高效的并发执行。
2024-10-12 16:47:43
203
原创 工厂模式,策略工厂模式,简单工厂模式,抽象工厂模式,有啥区别,分别适用于什么场景
工厂模式是一个更广泛的概念,包括简单工厂模式、工厂方法模式和抽象工厂模式。简单工厂模式适用于简单的对象创建场景,策略工厂模式适用于动态选择算法的场景,抽象工厂模式适用于创建一组相关对象的场景。简单工厂模式适用于只有一个工厂类,根据传入参数的不同来创建不同的产品对象的场景。工厂模式允许一个类在运行时创建另一个类的对象。工厂模式适用于创建对象的过程比较复杂,可能会有多个具体工厂类来创建不同的产品对象的场景。抽象工厂模式是一种创建型设计模式,它提供一个接口,用于创建相关或依赖对象的家族,而不需要指定具体类。
2024-10-11 14:20:39
495
原创 gin框架代码层设计
结构体封装了 HTTP 请求和响应的上下文,并提供了许多实用的方法来处理请求。中间件是在请求处理过程中执行的函数,可以在请求到达最终处理器之前或之后进行操作。结构体是 Gin 框架的核心,包含路由和中间件配置。结构体用于路由分组和中间件管理。
2024-06-25 15:10:24
328
原创 CPU的局部性
分支局部性(Branch Locality):分支语句(如if、switch)中的条件跳转会导致程序执行路径的改变。空间局部性(Spatial Locality):访问某个内存位置的数据后,很可能在近期访问相邻的内存位置。时间局部性(Temporal Locality):访问某个内存位置的数据后,很可能在近期再次访问相同的内存位置。通过充分利用局部性,可以提高程序的性能和效率,减少访问内存的开销,加快计算速度。数据局部性(Data Locality):指在一段时间内,程序更倾向于访问某个特定集合的数据。
2024-03-12 10:00:44
475
原创 go mutex实现分析
mutex有两个成员,state和sema。其中state表示当前互斥锁的状态,而sema是用于控制锁状态的信号量。有两个要实现的接口,加锁和解锁。state是一个32位的值,第一位是加锁标记,第二位是唤醒标记,第三位是饥饿标记,之后的位数用来记录等待队列的数量。mutexWoken互斥锁有两种操作模式:普通模式和饥饿模式。在普通模式下,等待者按照先进先出(FIFO)的顺序排队,但是被唤醒的等待者不拥有互斥锁,而是与新到达的 goroutine 竞争互斥锁的所有权。
2024-02-20 11:23:10
950
原创 go context 实现分析
/ Deadline 返回在此上下文中代表工作应该被取消的时间。当没有设置截止时间时,Deadline 返回 ok==false。连续调用 Deadline 返回相同的结果。// Done 返回一个通道,在此上下文中代表工作应该被取消时会关闭。如果此上下文永远不会被取消,Done 可能返回 nil。连续调用 Done 返回相同的值。// Done 通道的关闭可能是异步的,在取消函数返回后发生。//// WithCancel 会在调用 cancel 时将 Done 关闭;
2024-02-07 16:42:44
470
原创 给定一个数字n和一个数字数组arr,返回小于n的最大数,arr中的值可以重复使用
给定一个数字n和一个数字数组arr,返回小于n的最大数,arr中的值可以重复使用。
2024-01-24 20:48:25
538
原创 go GOMAXPROCS(1)测试
GOMAXPROCS:设置最大的可同时使用的 CPU 核数。因为设置了一个CPU,多以执行 的顺序是确定的。CPU的亲缘性会选择切换少的来执行。那为什么会先输出3呢,
2024-01-17 23:27:45
481
原创 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
129
原创 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
142
原创 无缓存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
377
原创 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
823
原创 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
502
原创 linux 创建用户和用户组
groupadd work 创建用户组useradd work -g work 创建用户同时指定用户组passwd work 修改用户密码,需要连续输入liang b
2021-06-17 15:40:35
1228
原创 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
203
原创 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
789
原创 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
81
原创 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
94
原创 用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
649
原创 sklearn 线性回归简单实现
一个使用sklearn实现线性回归的简单实例,主要包括数据准备,以及预测部分。数据准备def loadDataSet(filename): file=open(filename,'r') dataMat=[] labelMat=[] filelines=file.readlines() #读取文件 for line in filelines: ...
2018-04-12 15:58:07
567
转载 ML神器:sklearn的快速使用
ML神器:sklearn的快速使用 传统的机器学习任务从开始到建模的一般流程是:获取数据 -> 数据预处理 -> 训练建模 -> 模型评估 -> 预测,分类。本文我们将依据传统机器学习的流程,看看在每一步流程中都有哪些常用的函数以及它们的用法是怎么样的。希望你看完这篇文章可以最为快速的开始你的学习任务。1. 获取数据1.1 导入sklearn数据集 sklearn中包含...
2018-04-12 15:24:50
216
原创 斐波那契数列(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
2628
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人