b站golang后端开发一面
go和其他语言的对比
Golang(也称为Go语言)是一种静态类型、编译型语言,由Google开发,以其简洁、高效和强大的并发处理能力著称。
Golang的设计哲学强调简洁明了。与Python类似,Go语法简洁,易于学习和编写。但与Python等动态类型语言不同,Go是静态类型语言,这意味着在编译时就能捕捉到更多的错误,从而提高代码的稳定性和可维护性。
Golang的一个显著特点是其对并发的原生支持。通过goroutine和channel,Golang使得并发编程变得简单而强大。相比之下,如Java和Python等语言在处理并发时通常需要更复杂的线程和锁机制。
java vs go
参考:https://cloud.tencent.com/developer/article/2118891
面向对象
Java是面向对象的语言,有完整的继承体系,方便的实现多态的机制,能灵活的构造可重用性和易维护性的代码,并且通过OOP能简洁的实现反射机制。这些特性非常符合构造复杂的项目,但由于复杂性同时也导致编码的成本提升。比如Java的反射实现就很简单,他只需要获取类中的信息就可以。
而Go不是面向对象的,它没有传统意义上的继承或反射,构建系统通过组合和嵌入结构体的方式来实现,也就是所说的鸭子类型,多态也是通过接口来实现的,Go 没有类的概念,并且结构体只包含了已声明的字段。因此,我们需要借助“reflection”包来获得所需的信息。由于 Go 中没有结构体的构造函数,所以很多原始类型必须单独处理,并且需要考虑到指针。在 Go 中,我们可以进行指针传递或值传递。Go 的结构体可以将函数作为字段。所有这些都让 Go 的反射变得更加复杂。除此之外,虽然整体上灵活度不如Java,但是它易于编写和维护。
并发性
Go 具有强大的并发模型,其设计基于两级线程模型改进的GMP模型,这样能大大减少并发切换线程的性能开销,而且这些模型统一封装到语言级别的调度层,只需通过关键字 go就可以开启协成,提高了易用性。
Java语言上没有协程的概念,Java的线程模型依然用的内核级线程模型,多线程开发依然需要复杂的实现,而且实现方式有很多种而不用拖着一个像,你需要了解每种实现方式的优缺点才能写出高性能的代码,除了这些还需要了解各种锁,来保障你写的线程是安全的。
垃圾回收
Go 的主要功能之一是垃圾收集,尽管 Java 也有垃圾收集,但它并没有Go的那么快,虽然随着G1和ZGC的出现缩短了与Go的差距,但显然Go更擅长管理内存。它不包含引用链接,而是包含指针,而且Go的垃圾收集器经过大量优化以防止STW。整体上Go的垃圾收集方法更精细。
异常: Go 不使用异常,而是使用错误(error)来表示诸如文件结束之类的事件,并使用运行时恐慌(panic)来表示运行时错误,例如尝试索引数组越界。
泛型: Java的泛型通过类型擦除来实现,使一些代码更清晰,但是不支持泛型数组,并且具有上限和下限的类型通配符等,这让编码变得很复杂。而Go泛型没有Java的复杂,它有一些内置的泛型数据类型,比如,切片和map等,使用起来比较方便清晰易懂。
跨平台性
众所周知,Java是JVM平台的语言,一处编译处处运行,这个是Java引以为傲的优点,但它的运行时环境必须在JVM上,这就导致了Java运行时的臃肿,浪费了一部分资源。
而Go通过编译成可执行文件巧妙的解决了这个问题,虽然它不是跨平台性语言,但它在编码器层面依然可以实现一套代码编译出不同平台的执行文件,可以直接在各个平台上运行,而不用拖着一个像JVM一样的运行时环境。
Go的优点
代码简洁性
静态类型可编译成机器码直接运行
天生多核并行
垃圾收集
跨平台且不依赖运行时环境
简洁的泛型
内置安全性
缺点
有限的库支持
泛型不够完善
灵活度没Java高(这个可算优点也可算缺点)
Java的优点
优秀的文档
优秀的三方库
多线程
灵活性高
平台独立性
完善的语言特性
垃圾回收
JVM
缺点
垃圾回收效果不佳
大量冗余的陈旧实现导致性能不佳
代码的复杂性
复杂的继承机制
c++ vs go
语言简洁性
Go:设计上更简洁和清晰。它消除了包括类和继承在内的许多复杂特性,以简化编程模型。
C/C++:C++特别是,提供了更复杂的特性,如类继承、模板等,这使得语言功能更强大,但也增加了复杂性。
并发编程
Go:内建对并发的支持,通过Goroutines和Channels来简化并发和并行编程。
C/C++:并发编程依赖于线程和锁,通常更复杂且容易出错。
内存管理
Go:自动垃圾收集。
C/C++:手动内存管理,虽然C++11引入了智能指针来简化内存管理。
标准库
Go:拥有一个全面的标准库,尤其在网络编程和并发处理方面表现出色。
C/C++:标准库相对基础,尤其是C语言,需要依赖第三方库进行高级操作。
错误处理
Go:使用返回值来处理错误。
C/C++:C++支持异常处理,C语言依赖于错误码。
编译速度
Go:编译速度快,有利于快速开发。
C/C++:编译速度较慢,尤其是复杂项目。
应用程序二进制大小
Go:生成的二进制文件相对较大。
C/C++:可以生成更小的二进制文件。
python vs go
Python
动态类型语言:Python是动态类型语言,这意味着变量类型在运行时由解释器决定。
语法简洁:Python的语法设计简洁,易于阅读和学习。
广泛的应用领域:Python适用于Web开发、数据分析、人工智能、科学计算、自动化脚本等多种场景。
丰富的第三方库:Python拥有庞大的第三方库生态系统,如Django、Flask、Pandas、NumPy等。
Python的优势
易学易用:Python的语法简洁,适合初学者快速入门。
丰富的库和框架:Python的第三方库和框架丰富,可以快速开发应用。
跨平台:Python支持多种操作系统,开发的应用可以运行在多种平台上。
Python的劣势
运行效率:由于Python是解释型语言,运行效率可能不如编译型语言。
内存管理:Python的内存管理由解释器自动完成,可能不如程序员手动管理内存高效。
Go
静态类型语言:Go是静态类型语言,这意味着变量类型在编译时确定。
并发模型:Go内置了goroutines和channels,使得并发编程变得简单。
编译型语言:Go是编译型语言,编译后的程序运行效率较高。
适用于系统编程:Go适用于构建系统、网络服务器、分布式系统等。
Go的优势
并发性能:Go的并发性能优越,适合开发需要处理大量并发请求的应用。
编译型语言:Go是编译型语言,运行效率高。
跨平台:Go支持多种操作系统,开发的应用可以运行在多种平台上。
Go的劣势
生态系统相对年轻:相比Python,Go的生态系统相对年轻,某些领域的库和框架可能不如Python丰富。
go语言的并发模型
参考自:https://zhuanlan.zhihu.com/p/77206570
在操作系统提供的内核线程之上,Go搭建了一个特有的两级线程模型。goroutine机制实现了M : N的线程模型,goroutine机制是协程(coroutine)的一种实现,golang内置的调度器,可以让多核CPU中每个CPU执行一个协程。
Go语言中支撑整个scheduler实现的主要有4个重要结构,分别是M、G、P、Sched, 前三个定义在runtime.h中,Sched定义在proc.c中。
- Sched结构就是调度器,它维护有存储M和G的队列以及调度器的一些状态信息等。
- M结构是Machine,系统线程,它由操作系统管理的,goroutine就是跑在M之上的;M是一个很大的结构,里面维护小对象内存cache(mcache)、当前执行的goroutine、随机数发生器等等非常多的信息。
- P结构是Processor,处理器,它的主要用途就是用来执行goroutine的,它维护了一个goroutine队列,即runqueue。Processor是让我们从N:1调度到M:N调度的重要部分。
- G是goroutine实现的核心结构,它包含了栈,指令指针,以及其他对调度goroutine很重要的信息,例如其阻塞的channel。
在单核处理器的场景下,所有goroutine运行在同一个M系统线程中,每一个M系统线程维护一个Processor,任何时刻,一个Processor中只有一个goroutine,其他goroutine在runqueue中等待。一个goroutine运行完自己的时间片后,让出上下文,回到runqueue中。 多核处理器的场景下,为了运行goroutines,每个M系统线程会持有一个Processor。
当正在运行的goroutine阻塞的时候,例如进行系统调用,会再创建一个系统线程(M1),当前的M线程放弃了它的Processor,P转到新的线程中去运行。
当其中一个Processor的runqueue为空,没有goroutine可以调度。它会从另外一个上下文偷取一半的goroutine。
系统加入了P,让P去管理G对象,M要想运行G必须先与一个P绑定,然后才能运行该P管理的G。这样带来的好处是,我们可以在P对象中预先申请一些系统资源(本地资源),G需要的时候先向自己的本地P申请(无需锁保护),如果不够用或没有再向全局申请,而且从全局拿的时候会多拿一部分,以供后面高效的使用。
所以可以说Go语言原生支持并发。自己实现的调度器负责将并发任务分配到不同的内核线程上运行,然后内核调度器接管内核线程在CPU上的执行与调度。
陷入内核态具体发生了什么?什么情况下会陷入内核态?为什么要陷入内核态?弊端是什么?如何避免陷入内核态?
1. 陷入内核态具体发生了什么?
当程序从用户态(用户空间)陷入内核态(内核空间)时,CPU 会切换到特权模式,执行内核代码。具体过程如下:
触发机制:通过软中断(如 syscall 指令)、硬件中断(如时钟中断)或异常(如除零错误)。
上下文切换:CPU 保存用户态的执行现场(寄存器、程序计数器等),切换到内核栈。
执行内核代码:内核根据触发原因(如系统调用号)处理请求(如读写文件、分配内存)。
返回用户态:处理完成后,恢复用户态上下文,继续执行用户程序。
2. 什么情况下会陷入内核态?
常见的触发场景包括:
系统调用:用户程序主动请求内核服务(如 open()、write())。
硬件中断:外设事件(如磁盘 I/O 完成、网络包到达)。
异常处理:程序错误(如段错误、缺页异常)。
调度切换:进程/线程切换由内核调度器触发。
资源访问:用户程序尝试执行特权指令(如修改页表)。
3. 为什么要陷入内核态?
特权隔离:用户程序无权直接操作硬件或关键资源(如内存管理、设备驱动),必须通过内核保障安全。
统一抽象:内核提供标准接口(如文件系统、网络协议栈),简化用户程序开发。
系统稳定性:通过内核态集中管理资源,避免用户程序直接竞争或破坏系统状态。
4. 弊端是什么?
**性能开销:**上下文切换、内核/用户态数据拷贝(如 read()/write())会导致延迟。
缓存失效:切换时 CPU 缓存(如 TLB)可能被刷新,降低后续执行效率。
复杂性:频繁陷入内核可能增加代码调试和维护难度。
安全风险:内核代码的漏洞可能被利用(如提权攻击)。
5. 如何避免陷入内核态?
减少系统调用:
合并多次操作(如批量读写)。
使用**内存映射文件(mmap)**替代 read()/write()。
用户态解决方案:
用户态网络协议栈(如 DPDK、XDP)直接处理网络包。
用户态线程库(如协程)减少线程切换开销。
异步 I/O:
使用 epoll、io_uring 等异步接口减少阻塞。
内核旁路(Kernel Bypass):
通过 RDMA、SR-IOV 等技术绕过内核直接访问硬件。
优化内核路径:
使用 eBPF 在内核中运行安全的自定义逻辑,避免上下文切换。
总结
内核态是操作系统安全与资源管理的核心机制,但过度陷入会带来性能损失。通过减少系统调用、使用用户态方案或异步 I/O 等技术,可以在保证安全的前提下提升性能。
go垃圾回收机制?对比java cpp,有什么独特的地方?
写屏障解决什么问题?没有写屏障会导致什么问题?
写屏障 是在垃圾回收过程中使用的一种机制,用来处理并发情况下的新对象创建和对象引用的改变。写屏障可以帮助保持三色标记算法的正确性。
当程序对某个对象的引用发生变更时,写屏障会记录这种变更并确保被引用的对象状态被正确更新(例如,将被引用的白色对象立即变成灰色)。
写屏障确保在垃圾回收进行时,即使有新的对象被创建或对象之间的引用发生变化,垃圾回收器也能够正确地标记这些对象。
如果没有写屏障,垃圾回收器可能无法正确跟踪新修改的指针,这可能导致某些对象被错误地标记为可回收,即使它们仍在使用中。
讲讲你对channel的理解,原理是什么?
chan 是 Go 语言中的一种用于 Goroutine 之间通信的原语,它提供了 Goroutine 之间的同步和数据传递机制。chan 的底层实现涉及队列、锁、信号量以及 Goroutine 的调度等内容。以下是 chan 的底层原理的详细解释:
1. 基本结构
chan 数据结构:在 Go 语言的源码中,chan 的数据结构被定义为一个 hchan 结构体,主要包含以下内容:
buf:缓冲区指针,用于存储通道内的数据(仅当缓冲区大小大于 0 时存在)。
qcount:通道中当前的元素数量。
dataqsiz:缓冲区大小,即通道的容量。
sendx:发送索引,指示下一个值应写入缓冲区的位置。
recvx:接收索引,指示下一个值应从缓冲区中读取的位置。
recvq:一个等待接收数据的 Goroutine 队列(FIFO)。
sendq:一个等待发送数据的 Goroutine 队列(FIFO)。
lock:互斥锁,用于保护 chan 的并发访问。
2. 发送(Send)操作
当一个 Goroutine 执行发送操作时:
检查通道状态:如果通道已关闭,发送操作会引发 panic。
尝试直接发送:如果通道有可用的缓冲区空间,数据直接写入缓冲区。
等待接收:如果通道没有缓冲区空间,且没有等待接收的 Goroutine,当前发送 Goroutine 将被阻塞,并排队等待接收者。
唤醒接收者:如果有等待接收的 Goroutine,发送操作会直接将数据发送给接收者,并唤醒接收者。
3. 接收(Receive)操作
当一个 Goroutine 执行接收操作时:
检查通道状态:如果通道已关闭且缓冲区为空,接收操作会立即返回一个零值和一个标识通道已关闭的标志。
尝试直接接收:如果通道中有数据可供接收,数据直接从缓冲区中读取。
等待发送者:如果缓冲区为空且没有等待发送的 Goroutine,当前接收 Goroutine 将被阻塞,并排队等待发送者。
唤醒发送者:如果有等待发送的 Goroutine,接收操作会直接从发送者那里获取数据,并唤醒发送者。
4. 缓冲通道 vs. 非缓冲通道
非缓冲通道:没有缓冲区,发送和接收操作必须完全同步。发送者必须等待接收者,反之亦然。
缓冲通道:具有缓冲区,发送操作可以在缓冲区未满时立即完成,而无需等待接收者;同样,接收操作可以在缓冲区非空时立即完成,而无需等待发送者。
5. 阻塞与唤醒机制
当一个 Goroutine 在 chan 上被阻塞时,它会被放入相应的 sendq 或 recvq 队列中。
队列是一个 FIFO 队列,确保按照顺序唤醒等待的 Goroutine。
通过 select 语句,可以在多个通道上等待,并以非确定性的方式选择一个可用的通道进行操作。
6. 关闭通道
关闭通道是由 close() 函数完成的。关闭通道后,所有阻塞的接收操作将立即返回一个零值和一个 ok == false 的标志。
关闭通道后,不能再向该通道发送数据,试图发送数据将导致 panic。
7. 性能优化
Go 运行时对 chan 的操作进行了多种优化,例如:
无锁快路径:在没有竞争的情况下,发送和接收操作可以在无锁的快路径上执行,以减少锁争用带来的性能开销。
批量处理:在某些情况下,chan 会尝试批量移动数据以提高性能。
chan 是 Go 语言并发模型的核心部分,它通过通道和 Goroutine 实现了 CSP(Communicating Sequential Processes)模型。理解 chan 的底层实现有助于编写高效并发程序并更好地调试和优化 Go 代码。
多个协程访问同一个map,要加锁吗?为什么channel不用?
需要加锁
数据竞争:如果一个协程正在写入 map,而另一个协程试图读取或写入同一个 map,可能会导致数据结构的破坏,产生不可预测的结果。
不安全的并发:在没有加锁的情况下,Go 的 map 可能会在某些操作中崩溃,抛出运行时错误(如 “concurrent map writes”)。
与 map 不同,Go 的 channel 是设计为在并发环境中安全的,因此不需要显式的加锁。
内置的同步机制:channel 提供了一种内置的同步机制,确保在发送和接收数据时的安全性。
阻塞特性:当一个协程试图从一个空的 channel 中接收数据时,它会被阻塞,直到另一个协程发送数据。同样,当一个协程试图向一个满的 channel 中发送数据时,它也会被阻塞,直到有空间可用。
避免数据竞争:由于 channel 通过阻塞机制保证了对数据的安全访问,开发者无需担心数据竞争的问题。
mysql为什么需要索引?举个例子讲讲根据索引找到记录的过程?
联合索引a,b,c,使用a,c会用到索引吗?
幻读是怎么产生的?为了解决幻读用了什么手段?
redis为什么快?
参考:https://zhuanlan.zhihu.com/p/160157573
讲讲redis主从复制?主从复制之间有差距怎么解决?
讲讲redis哨兵机制?
kafka适合什么场景?为什么适合?
日志收集和分析:Kafka可以作为一个高性能的日志收集和分析平台,接收来自各种系统和应用程序的日志数据,并进行实时处理和分析。
实时数据流处理:Kafka可以处理各种实时数据流,如网站点击流、传感器数据等,并进行实时分析和处理。
消息队列和事件驱动架构:Kafka可以作为一个消息队列或事件驱动架构的核心组件,实现系统之间的解耦和异步通信。
大数据实时处理:Kafka可以与Hadoop等大数据处理工具结合使用,实现实时数据处理和分析。
分布式系统监控和告警:Kafka可以接收来自分布式系统的监控数据和告警信息,并进行实时处理和通知。
手撕 链表插入排序
https://leetcode.cn/problems/insertion-sort-list/description/
/*** Definition for singly-linked list.* type ListNode struct {* Val int* Next *ListNode* }*/
func insertionSortList(head *ListNode) *ListNode {ans := &ListNode{}ans.Next = headq := headfor q!=nil&&q.Next!=nil{qq := ansfor qq!=q &&qq.Next!=nil &&qq.Next.Val<=q.Next.Val{qq = qq.Next}if qq == q{q = q.Nextcontinue}tmp := qq.Nexttmp2 := q.Next.Nextqq.Next = q.Nextqq.Next.Next = tmpq.Next = tmp2}return ans.Next
}
相关文章:
b站golang后端开发一面
go和其他语言的对比 Golang(也称为Go语言)是一种静态类型、编译型语言,由Google开发,以其简洁、高效和强大的并发处理能力著称。 Golang的设计哲学强调简洁明了。与Python类似,Go语法简洁,易于学习和编写。…...
Vue3 SSR Serverless架构革命:弹性计算与量子加速
一、全维度Serverless SSR架构 1.1 蜂巢式弹性调度系统 1.2 冷启动时间优化表 优化策略Node.js冷启(ms)Deno冷启(ms)Bun冷启(ms)裸启动1800960420预编译二进制650380210内存快照预热22016090WASM实例池15011075量子状态预载453832 二、边缘渲染协议升级 2.1 流式SSR响应协议…...
深度大脑:AI大模型的设计与运行原理
AI大模型的设计与运行原理涉及多个复杂环节,以下是系统化的总结,结合核心要点与补充细节: 一、AI大模型的设计 1. 深度神经网络架构 Transformer:取代RNN/CNN,解决长程依赖问题。核心组件: 自注意力机制…...
Python网络编程从入门到精通:Socket核心技术+TCP/UDP实战详解
引言 网络编程是构建现代分布式系统的核心能力,而Socket作为通信的基石,其重要性不言而喻。本文将从零开始,通过清晰的代码示例、原理剖析和对比分析,带你彻底掌握Python中的Socket编程技术,涵盖TCP可靠连接、UDP高效…...
使用CMake生成Opencv对应库文件
opencv环境配置:版本3.4/3.2(OpenCV-3.4.3) CMake:3.12.1 D:\OpenCv\opencv\build\x64\vc16\bin路径添加至环境变量中 CMake环境配置: D:\Install_QT\bin路径添加至环境变量中(path中即可) QT5环境变量配置:…...
MySQL 数据库备份和恢复全指南
MySQL 是一款常用的开源数据库系统,在日常运维中,数据备份和恢复是系统管理的重要一环。本文将细致介绍 MySQL 两大备份方案—— mysqldump 和 XtraBackup,包括备份方式、恢复步骤、定时脚本、远程备份和常见问题处理方案。 一、mysqldump 备…...
关于我的服务器
最近我买了台腾讯云服务器,然后新手小白只会用宝塔。。。 安装完之后默认的端口是8888,打开面板就会提示我有风险。然后 我改了端口之后,怎么都打不开。 于是 学到了几句命令可以使用: //查看端口是否已经修改成功 cat www/se…...
spring面试题
1,如何理解spring boot中的starter Starter是一种简化依赖管理和自动配置的核心机制,能快速集成特定功能模块,无需手动配置复杂依赖和xml文件。 依赖简化:将某个功能模块所需的所有依赖打包成一个“一站式”依赖,开发…...
python setup.py学习
Python-setup进阶打包命令 Python-setup进阶打包命令_python setup-CSDN博客 packages 需要处理的包目录(包含__init__.py的文件夹),这里通常使用 find_packages(),它默认在和setup.py同一目录下搜索各个含有 __init__.py的包。…...
最简单的使用SDL2 播放原始音频数据程序
author: hjjdebug date: 2025年 04月 15日 星期二 14:02:05 CST description: 最简单的使用SDL2 播放原始音频数据程序 文章目录 1.最简单的播放音频的程序是什么样子的?2. 怎样用SDL 来编写音频播放器代码?2.1 SDL播放音频核心代码:混音函数2.2 先看看音频播放的可能的两种框…...
利用IDEA开发Spark-SQL
创建子模块Spark-SQL,并添加依赖 创建Spark-SQL的测试代码: 运行结果: 自定义函数: UDF: UDAF(自定义聚合函数) 强类型的 Dataset 和弱类型的 DataFrame 都提供了相关的聚合函数, …...
随身Wi-Fi能跑PCDN?
随身WiFi可以用于运行PCDN(点对点内容分发网络),但存在技术限制和潜在风险,需谨慎操作。 可行性分析 技术基础 随身WiFi本质是便携式无线路由器,具备网络接入和分发能力,理论上可配置为PCDN节点。 部分用户…...
Google-A2A协议全面解析:一文掌握Agent-to-Agent协议的核心与应用
前言: 在当今人工智能技术飞速发展的时代,智能体(Agent)已悄然融入我们生活的各个角落。无论是个人智能助手,还是企业的自动化工具,各类AI代理的应用愈发广泛。但目前这些智能体之间大多处于孤立状态&…...
jmeter压测工具出现乱码
然后 prev.setDataEncoding(“utf-8”)...
大模型训练显存压缩实战:ZeRO-3 vs 梯度累积 vs 量化混合策略
一、显存瓶颈的本质与挑战 大模型训练面临的核心矛盾是模型参数量指数级增长与GPU显存容量线性提升之间的鸿沟。以175B参数模型为例,其显存消耗主要来自三个方面: 参数存储:FP32精度下需700GB显存梯度缓存:反向传播产生的…...
WPS JS宏编程教程(从基础到进阶)-- 第七部分:JS对象在WPS中的应用
目录 第7章 JS对象在WPS中的应用7-1 对象创建的几种方法从零理解对象:数据收纳盒两种基础创建方式代码解析表 7-2 对象属性的查、改、增、删像操作Excel单元格一样管理属性1. 点操作符(静态键名)2. 中括号操作符(动态键名…...
网络编程(UDP)
server:服务器 # import socket # # 传递udp协议参数 # sk socket.socket(typesocket.SOCK_DGRAM) # # # 绑定ip及端口 # sk.bind(("127.0.0.1",8080)) # # print("等待客户端发送消息") # # # 直接发送 # msg,addr sk.recvfrom(1024) # # print(msg.d…...
深入讲解 CSS 选择器权重及实战
1. 权重计算规则详解 CSS 选择器的优先级由 三元组 (x, y, z) 决定,比较规则如下: 选择器类型权重值 (x, y, z)示例ID 选择器x 1#header → (1,0,0)类/伪类/属性y 1.active, :hover元素/伪元素z 1div, ::before 比较规则:从左到右逐级比…...
Mysql的查询
1.Mysql的基本查询 语法:select*from 表名;代表查询所有数据的所有列 SELECT * FROM classinfo; SELECT * FROM studentinfo; select 字段1,字段2.....from 表名;查询数据的指定字段 查询studentinfo表的学生姓名和年龄 SELECT stuname,age FROM stu…...
RaabitMQ 快速入门
🎉欢迎大家观看AUGENSTERN_dc的文章(o゜▽゜)o☆✨✨ 🎉感谢各位读者在百忙之中抽出时间来垂阅我的文章,我会尽我所能向的大家分享我的知识和经验📖 🎉希望我们在一篇篇的文章中能够共同进步!!&…...
LLM: 探索LLM视觉缺陷
文章目录 前言一、Constructing MMVP Benchmarks1、CLIP-blind pair 二、MMVP-VLM bench1、Model size influence2、correlation between CLIP MLLMs 三、Mixture of Features1、Additive MoF Experiment2、Interleaved MoF Experiment 总结 前言 在使用多模态大模型时候是否会…...
常用的 SQL 语句分类整理
以下是常用的 SQL 语句分类整理,覆盖数据查询、操作、表管理和高级功能,适用于大多数关系型数据库(如 MySQL、PostgreSQL、SQL Server): 目录 一、数据查询(DQL) 1. 基础查…...
Go之defer关键字:优雅的资源管理与执行控制
在Go语言中,defer关键字是处理资源释放、错误恢复和代码逻辑清理的利器。它看似简单,却隐藏着许多设计哲学和底层机制。本文将深入剖析defer的执行原理、使用场景和常见陷阱,助你掌握这一关键特性。 一、defer基础:延迟执行的本质…...
T1结构像+RS-fMRI影像处理完整过程记录(数据下载+Matlab工具箱+数据处理)
最近需要仿真研究T1结构像RS-fMRI影像融合处理输出目标坐标的可行性。就此机会记录下来。 为了完成处理,首先需要有数据,然后需要准备对应的处理平台和工具箱。那么正文开始~ (1)下载满足要求的开源数据 去OpenNEURO https://open…...
Flowable进阶-网关、事件和服务
网关 并行网关 并行网关允许将流程拆分为多个分支,也可以将多个分支汇集到一起。并行网关的功能是基于流入流出的顺序流。fork分支:用于任务的开始。并行后所有外出的顺序流,为每个顺序流都创建一个并发分支。 join汇聚:用于任务…...
【三维重建与生成】GenFusion:SVD统一重建和生成
标题:《GenFusion: Closing the Loop between Reconstruction and Generation via Videos》 来源:西湖大学;慕尼黑工业大学;上海科技大学;香港大学;图宾根大学 项目主页:https://genfusion.sibowu.com 文章…...
常见的爬虫算法
1.base64加密 base64是什么 Base64编码,是由64个字符组成编码集:26个大写字母AZ,26个小写字母az,10个数字0~9,符号“”与符号“/”。Base64编码的基本思路是将原始数据的三个字节拆分转化为四个字节,然后…...
有序二叉树各种操作实现(数据结构C语言多文件编写)
1.先创建tree.h声明文件( Linux 命令:touch tree.h)。编写函数声明如下(打开文件 Linux 操作命令:vim tree.h): //树的头文件位置 #ifndef __TREE_H__ #define __TREE_H__ //节点 typedef struct node{int data;//数据struct node* left;//记录左侧子节…...
Nacos-Controller 2.0:使用 Nacos 高效管理你的 K8s 配置
作者:濯光、翼严 Kubernetes 配置管理的局限 目前,在 Kubernetes 集群中,配置管理主要通过 ConfigMap 和 Secret 来实现。这两种资源允许用户将配置信息通过环境变量或者文件等方式,注入到 Pod 中。尽管 Kubernetes 提供了这些强…...
特殊文件以及日志——特殊文件
一、特殊文件 必要性:可以用于存储多个用户的:用户名、密码。这些有关系的数据都可以用特殊文件来存储,然后作为信息进行传输。 1. 属性文件.properties(键值对) (1)特点: 都只能…...
Spark-SQL核心编程语言
利用IDEA开发spark-SQL 创建spark-SQL测试代码 自定义函数UDF 自定义聚合函数UDAF 强类型的 Dataset 和弱类型的 DataFrame 都提供了相关的聚合函数, 如 count(), countDistinct(),avg(),max(),min()。除此之外&…...
jdk 安装
oracle官网 : Java Archive | Oracle 中国 export JAVA_HOME/Users/xxxxx/app/services/x86jdk/jdk1.8.0_431.jdk/Contents/Home export PATH$JAVA_HOME/bin:$PATH 华为镜像网站:Index of java-local/jdk...
Missashe考研日记-day21
Missashe考研日记-day21 1 专业课408 学习时间:4h学习内容: 今天先把昨天学的内容的课后习题做了,整整75道啊,然后学了OS第二章关于CPU调度部分的内容,这第二章太重要了,以至于每一小节的内容都比较多&am…...
双重路由引入的环路,选路次优的产生以及解决方法
描述 在R2,R3上双向引入ospf,以及rip,R5修改静态的优先级为180,在ospf中引入该静态路由 路由分析 选路次优问题 R5引入了静态路由,优先级是150 R2->R5->100.1.1.0,优先级是150 R3->R4->100.1.1.0,优先级是150 R3->R4->R5->100.1.1.0,优先级是150 R2-…...
环境变量概念以及获取环境变量(linux下解析)
目录 1 基本概念 2 常见的环境变量 3 查看环境变量方法 4 和环境变量相关的命令 5 环境变量的组织方式 6 通过代码如何获取环境变量 6.1 命令行参数 6.2 环境变量 7 通过系统调用获取或设置环境变量 1 基本概念 环境变量(environmentvariables)⼀般是指在操作系统中用来指…...
删除win11电脑上的阿尔巴尼亚输入法SQI
删除电脑自带的阿尔巴尼亚输入法 这个输入法在系统中并不显示,但是有时候会出现在右下角显示,删除这个输入法的流程如下,暂时没发现反复! 第一步:打开注册表: winR打开运行,输入 regedit 第二…...
目标检测与分割:深度学习在视觉中的应用
🔍 PART 1:目标检测(Object Detection) 1️⃣ 什么是目标检测? 目标检测是计算机视觉中的一个任务,目标是让模型“在图像中找到物体”,并且判断: 它是什么类别(classif…...
npm和npx的作用和区别
npx 和 npm 是 Node.js 生态系统中两个常用的工具,它们有不同的作用和使用场景。 1. npm(Node Package Manager) 作用: npm 是 Node.js 的包管理工具,主要用于: 安装、卸载、更新项目依赖(包&a…...
OpenCV 图形API(36)图像滤波-----形态学操作函数morphologyEx()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 执行高级形态学变换。 该函数可以使用腐蚀和膨胀作为基本操作来执行高级形态学变换。 任何操作都可以原地进行。在处理多通道图像时,…...
Python入门到精通6:CSS网页美化入门1
CSS(层叠样式表)是网页设计的核心语言之一,它让我们的网页从单调的结构变得生动美观。今天,我将带大家快速了解CSS的基础知识,包括基本概念、引入方式、选择器、字体与文本样式以及调试工具的使用。 1. CSS基本概念 …...
【深入C++多态:基于消息解析器的设计、实现与剖析】
深入C多态:基于消息解析器的设计、实现与剖析 前言多态代码示例代码结构C多态的核心知识点多态的底层机制深入剖析多态的设计模式总结 前言 在C面向对象编程中,多态(Polymorphism)是实现灵活性和扩展性的核心特性,允许…...
Dockerfile 文件常见命令及其作用
Dockerfile 文件包含一系列命令语句,用于定义 Docker 镜像的内容、配置和构建过程。以下是一些常见的命令及其作用: FROM:指定基础镜像,后续的操作都将基于该镜像进行。例如,FROM python:3.9-slim-buster 表示使用 Pyt…...
Redis--持久化
一、持久化 Redis支持RDB和AOF两种持久化机制持久化功能有效地避免因进程退出造成数据丢失问题, 当下次重启时利用之前持久化的文件即可实现数据恢复。 二、RDB RDB 持久化是把当前进程数据⽣成快照保存到硬盘的过程,触发 RDB 持久化过程分为手动触发和…...
Markdown学习
Typora下载 Typora教程 标题 井号加空格——回车即可形成标题,几级标题几个井号。 字体 斜体——前后各一个*,回车 粗体——前后各两个*,回车 既斜体又粗体——前后各三个*,回车 删除线——前后各两个~(波浪号…...
Vulhub-DarkHole靶机通关攻略
下载链接:https://www.vulnhub.com/entry/darkhole-1,724/ 扫描ip arp-scan -l扫描端口 nmap 192.168.112.144 -p-扫描目录 dirsearch -u http://192.168.112.144/有一个登录页面,还有一个upload目录,但是还没有找到上传点 先注册一个用…...
UniRig ,清华联合 VAST 开源的通用自动骨骼绑定框架
UniRig是清华大学计算机系与VAST联合开发的前沿自动骨骼绑定框架,专为处理复杂且多样化的3D模型而设计。基于强大的自回归模型和骨骼点交叉注意力机制,UniRig能够生成高质量的骨骼结构和精确的蒙皮权重,大幅提升动画制作的效率和质量。 UniR…...
深入解析 sklearn 中的 LabelEncoder:功能、使用场景与注意事项
标题:深入解析 sklearn 中的 LabelEncoder:功能、使用场景与注意事项 摘要: LabelEncoder 是 sklearn 中用于类别标签编码的重要工具,能够将离散的类别型标签转换为模型可识别的数值格式。本文详细解析 LabelEncoder 的核心功能…...
红帽Linux网页访问问题
配置网络,手动配置 搭建yum仓库红帽Linux网页访问问题 下载httpd 网页访问问题:首先看httpd的状态---selinux的工作模式(强制)---上下文类型(semanage-fcontext)---selinux端口有没有放行semanage port ---防火墙有没有active---…...
Muduo库代码剖析 : EventLoop
本文初发于 “天目中云的小站”,同步转载于此 EventLoop 详解 EventLoop类似于Reactor模型中的反应堆(Reactor)和事件分发器(Demultiplex)的合并, 其目的在于高效的接收事件, 并正确分配给对应的事件处理器. EventLoop中有两类关键的子控件 : Channel 和 Poller. C…...
Python网络爬虫设计(一)
目录 一、网络爬虫 1、基本的爬虫 2、获取URL 3、查找网页源码关键字 4、代码实现 二、requests库 1、requests的优势和劣势 2、获取网页的其他库 (1)selenium库 (2)pyppeteer库 三、pyppeteer库 1、pyppeteer库的来历…...