- 博客(29)
- 收藏
- 关注
原创 记录一次goframe框架多个复杂where条件实现
goframe框架中gorm如何实现where (a like %d% or b like %d%) and c,其中d是可变参数。使用fmt.Sprintf("%%%s%%",d)
2025-07-10 08:56:17
174
原创 golang excel导出时需要显示刷新
"github.com/xuri/excelize/v2"包导出excel文件时在调用WriteTo函数前需要显式关闭流写入器。,否则会造成excel文件使用excel打开时出现问题,但是用wps打开文件就没有此问题。
2025-06-19 19:24:58
204
原创 记录一次wkhtmltopdf生成pdf造成oom问题
有个生成pdf的接口,到处pdf为空;docker环境必现,但是本地环境无法复现。查看资料后显示wkhtmltopdf创建pdf会造成高内存分配。1、代码增加各处错误判断,发现docker环境调用接口出现。2、查看docker系统日志。优化pdf参数,问题得到解决。
2025-05-27 11:41:42
435
原创 golang传输大文件遇到r.ParseMultipartForm failed: unexpected EOF错误记录
客户端使用"mime/multipart"包,
2025-05-15 10:48:46
445
原创 matlab无法展示图片
bash# 启动MATLAB时添加参数这会禁用硬件加速,改用CPU软件渲染(兼容性最好,但性能较低)这表明:MATLAB 无法通过 X11 协议初始化 OpenGL 渲染可能原因:显卡驱动问题/X11配置问题/远程桌面限制。
2025-04-22 18:07:20
254
原创 记录一下从腾讯大模型lke获取token的过程
登陆腾讯云-首页-开发者工具-API Explorer-导航栏API Explorer-对话端相关接口-获取ws token。左侧各种语言代码示例-golang如下。
2025-03-06 09:53:05
297
原创 windows下PostgresSQL安装启动使用
首先要创建超级用户postgres(有好多文章没有创建用户,直接使用psql -U postgres -d postgres访问是无法访问的)我安装的版本17.x目录下没有log文件,所有启动的时候不需要加-l ../log(加了还会报无法启动的错误)这里需要手动添加一个ALL APPLICATION PACKAGES用户,并允许所有权限。官网下载PostgresSQL包,一路next安装。安装之后检查是否安装成功。
2025-01-16 11:53:00
763
原创 redis-5种数据类型底层数据结构
2、其他情况使用跳表,跳表底层是hash表和跳表,hash表存储key value,跳表存储有序双端链表。每个节点有层级和元素,层级节点有一个指向下级节点和下个节点的指针,用于快速查找数据。string类型底层数据结构是动态数组,动态数组扩容规则:当新申请数据小于1m时,扩容至2倍新数据长度+1;从最大层开始查找数据,当前节点值小于查找元素时,查找同层下个节点,如果下个节点指向null,向下跨度查找下一层节点,如果查到数据返回数据否则返回null。当value值是大于39字节的字符串,内部编码是row。
2024-11-28 18:42:02
1645
原创 初学java-spring boot框架
2、setting--Build,Execution,Deployment--Build Tools--Maven--设置路径、设置setting文件路径。注意点:博主在配置环境的时候老是遇到从远程仓库拉取依赖项失败,后面重新改了setting文件后就好了,记录下遇到的错误。mirror:设置镜像地址,一般使用阿里云的meaven镜像(下图是根据b站学习视频配置的)1、点击idea菜单栏-setting。设置profile:设置jdk1.8。3、jdk23(1.8以上)接下来就可以创建项目啦~
2024-11-26 17:28:57
475
原创 MySQL中binlog和undolog、redolog
存储引擎层的日志是undolog和redolog,undolog用于保证事物原子性,redolog用于保证事物持久性,主要用于数据库宕机重启后数据恢复,当server层调用存储引擎接口修改数据时,操作记录会先写入redolog,在特定时间把redolog中的数据写入磁盘,redolog大小固定,当写满后,需要等待存储引擎将redolog中的日志持久化到磁盘并擦除对应数据后才能继续写。binlog有大小限制,当一个binlog写满后会继续写下一个binlog,不会发生日志覆盖。
2024-11-11 10:42:21
144
原创 golang-csp模型
channel主要分有缓存channel和无缓存channel,有缓存channel用于异步处理数据,当缓存中无数据,消费者阻塞,当缓存满了之后,生产者阻塞。2、channel 管道,先进先出,用于goroutines间数据通信和同步,并发安全的数据结构,使用channel可以避免共享内存空间带来的加锁的开销,以及出现死锁的情况和数据竞态问题(使用go run trace 来检查死锁)。golang中csp模型,通信顺序处理,通过goroutines和channels完成通过通信共享数据。
2024-11-09 17:48:46
222
1
原创 操作系统虚拟内存和物理内存
操作系统将虚拟内存和物理内存划分成页(4kb) ,32位的计算机虚拟内存为4GB,会划分成1mb页,每个页表项使用4个字节,需要4mb的内存空间存储页表,每个进程都有一个页表,所有进程的页表占用空间很大。将所有的页表项每1024个分一页,会分成1024个二级页表,此时一级页表只需要存储1kb项,共占用4kb,由于部分虚拟内存没有使用到,所以二级页表可以根据使用加载到内存,大大减小内存占用。物理内存是操作系统实际拥有的硬件资源 虚拟内存和物理内存通过页表映射对应关系,页表存储在内存。
2024-11-09 17:46:06
245
原创 golang-gmp调度模型
g即goroutine,是协程的抽像,创建调度都是用户态模式,体量较轻。p即processer是调度器,p相当于g的cpu,相当于m的执行代理,只有p绑定m后,才能执行p队列中的g。m即machion,是线程的抽象,通过p实现和g的动态结合。调度主要是发生在g0和g的切换,g通过系统调用,将执行权交给g0,g0查找可执行g,将执行权限交给g。
2024-11-09 17:40:44
232
原创 https中ssl/tls
https中ssl/tls中涉及到的加密http是以明文方式传输数据的,在传输过程中会经过路由器等多节点,可能会被中间人攻击盗取数据,篡改数据和伪造数据。为了解决中间人攻击需要在传输时对数据加密。
2024-11-09 17:34:55
222
原创 golang-数据结构sync.map
golang中sync.map 适用于读多、删多、更新多、写少的场景,当写场景多时,退化成互斥锁+map。
2024-11-09 17:33:03
378
原创 golang-垃圾回收
混合写屏障(插入写屏障和删除写屏障)只发生在堆内,强三色不变是黑色对象不可直接引用白色,弱三色不变是任何引用白色对象的黑色节点必定是经过灰色节点才能引用白色。插入写屏障,当堆上对象引用栈上白色对象,需要启动插入写屏障,将白色对象置灰。删除写屏障,当堆上对象删除对白色对象的引用,需要将白色对象置灰。golang中gc方式是三色标记法和混合写屏障,三色是当前节点所有可达节点全部扫描后,将当前节点置黑色,当前扫描的节点置灰色,当前节点未扫描时,置白色。2、申请内存时触发(如果申请内存达到阈值时触发),
2024-11-09 17:22:09
232
原创 golang多级内存模型
golang内存模型,每个调度器p维护一个mcache,mcache中维护了0-67个mspanclass和微小对象tiny,当申请对象小于16kb时,用微型对象分配器分配,否则mcache从对应大小的spanclass中申请,在mcache中申请内存不需要加锁,如果没有空闲的内存,就从下一级mcentrl中申请。mcentrl维护了68个,对应0-67中大小的spanclass,需要在对应大小的spanclass上加锁,实现细锁化,如果mcentrl中没有空闲内存,继续到下一级mheap中申请。
2024-11-09 17:17:19
177
原创 redis单线程为啥能支持高并发操作
4、redis持久化类型,aof和rdb rdb是基于内存fork一个子线程来将内存数据写入到rdb文件,aof是每条操作日志都写入日志 redishash一致性 将物理节点虚拟成虚拟节点,落在hash环中,能够保证数据均匀落在物理节点中。当扩容缩容时,只需要移动较少数据,通过读aof日志,将日志反写到redis,完成补录数据。3、支持多种数据类型list,string,set,sort set hash,bitmap。1、使用nio多路复用。2、redis支持pipline,管道,发布订阅等异步方式。
2024-11-09 17:06:24
221
原创 IO/NIO多路复用
io多路复用技术:select-pool-epoolselect只支持1024个fd,fd每次需要重新创建和销毁,fd会在用户态和内核态切换,内核需要轮询查看fd是否就绪,就绪后复制给用户,用户态需要重新遍历查看就绪并处理。pool使用结构体代替bitmap,解决了1024大小限制,但频繁的内核态和用户态切换并未解决。使用epool_create(初始化红黑树),epool_ctl(增删改fd),epool_wait(双端链表),当有fd需要增删改时,直接维护在红黑树中,内核态监听到fd就绪时,将就绪fd放
2024-11-09 17:04:07
251
原创 golang基础知识-map
golang种map底层是hashmap。非线程安全型map,不能并发读写,如果有多协程并发读写会发生fatal error,直接导致程序崩溃,无法被defer-recover捕获。hashmap主要包含元素个数count,桶数组长度B(2^B),指向桶数组初始位置指针,预留的溢出桶。
2024-11-09 16:59:03
240
原创 golang知识
主要有以下方法: 给redis增加过期时间,读redis读不到,读数据库,将数据库数据回写redis,给redis增加过期时间。这两种方法在写多读少的场景下,频繁更新redis,会造成性能问题,同时并发写操作,会出现脏写问题。写数据库,删redis。kfk模块知识,topic,partation,组的概念,生产存储消费消息的过程。) make通常用来给slice,map,channel申请内存空间,返回的是初始化的对象本身,make申请内存空间时还可以接受ken,cap参数,预设内存大小。
2024-11-09 16:36:16
546
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人