源码阅读 - filezilla(1)
项目依赖库:
bison
gmp
gnutls
help2man
nettle
sqlite
texinfo
zlib
wxWidgets: https://www.wxwidgets.org/
libfilezilla
编译顺序
先编译->libfilezilla/libfilezilla.sln
再编译->filezilla/src/FileZilla.sln
启动流程
先调用CFileZilla的构造函数
再调用CFileZilaApp::OnInit 方法
程序退出时,调用CFileZilaApp::OnExit方法
通过SSH协议连接Linux机器流程Filezilla.exe 编译时依赖
主程序 FileZilla,exe 可执行程序
fzshellext,FileZilla用于扩展Windows Shell右键菜单的模块,dll模块,动态加载
engine,FileZilla的核心逻辑
commonui,公共的ui逻辑,静态库
pugixml,轻量级的xml解析库
依赖库的加载Windows平台(PE Portable E ...
面经 - 设计一个兑奖系统的测试用例
功能性测试用例正常兑奖流程测试用例名称成功兑奖
前置条件用户已登录系统,且账户中有足够的积分或金额用于兑奖。
测试步骤
用户选择要兑换的奖品
系统显示兑奖详情,包括所需积分或金额、奖品信息等
用户确认兑奖操作
系统扣除相应的积分或金额
系统将奖品发放给用户,并显示兑奖成功信息
预期结果对讲成功,用户账户中的积分或金额减少对应数量,奖品状态更新为已发放,用户可在个人中心的奖品列表中查看已兑换的奖品。
异常兑奖流程测试用例名称积分或金额不足兑奖
前置条件用户已登录系统,但账户中的积分或金额不足与兑换所选奖品。
测试步骤
用户选择兑换的奖品,此时奖品库存显示为1个
在用户确认兑奖操作前,其他用户兑走了该奖品,导致库存不足。
用户进行兑奖操作。
预期结果系统提示用户奖品库存不足,无法完成兑奖操作,用户账户中的积分或金额不变
性能测试用例高并发兑奖测试用例名称大量用户同时兑奖
前置条件模拟多个用户同时登录系统,却账号中都有足够的积分或金额用于兑奖。
测试步骤
在同一时间点,大量用户同时选择兑换同一款热门奖品
观察系统在高并发情况下的响应时间、吞吐量、错误率等指标。
预期结果系统能够稳定运行 ...
面经 - HNSW算法
定义HNSW(Hierarchical Navigable Small World)是一种高效的相似性搜索算法,融合了图论思想和分层结构,主要用于处理大规模高维向量的快速近似最近邻搜索。
工作原理图结构每个节点代表一个高维向量,节点之间通过有向边相连,边表示两个向量之间的相似性。
分层结构包含多层图结构,高层图稀疏,用于快速定位搜索范围;低层图密集,用于精确查找最近邻。
搜索过程从高层的某个起始节点开始,根据边的连接和权重,逐步向目标区域移动。在每层图中找到局部最优的节点后,进入下一层继续搜素。最终在最低层找到与查询向量最相似的节点。
优点高效性:能够在高维空间中快速找到近似最近邻,时间复杂度接近对数级别,大幅降低了搜索耗时,对大规模数据集的处理的表现出色。高召回率:通过分层图结构和优化的搜索策略,有效提高了搜索的准确性和召回率,确保返回结果与目标的高相似性。灵活性:可根据实际需求调整参数,如图的层数、每个结点的连接数等,以平衡搜索效率和准确性。
缺点实现复杂性:相比简单索引方法,HNSW的实现较为复杂,需要深入理解其原理和参数设置。内存占用:构建多层图时,需存储大量节点和边信息,会增 ...
面经 - LSH树的索引和KD树的索引
基于LSH的索引定义局部性哈希是一种用于处理高维数据的降维方法,基于LSH的索引是一种利用LSH技术构建的索引结构,可将高维向量映射到低维哈希码。
工作原理散列函数:设计一组散列函数,是的相似的数据对象更可能被映射到相同的哈希码。哈希表构造:将数据对象通过散列函数映射到哈希表的桶中。查询处理:在查询时,将查询对象通过相同的散列函数映射到对应的桶中。
优点高效性:在高维空间中,LSH能够快速的将相似的数据点聚集在一起,从而减少搜索范围,提高查询效率。可扩展性:是和处理大规模数据集,能够在合理的时间内完成索引构建和查询操作。
缺点:哈希函数设计:设计合适的散列函数对于特定的数据分布和相似性度量较为复杂。存储开销:需要存储哈希表和多个散列函数的参数,可能会增加存储需求。
适用场景:高维数据相似性搜索:如图像检索、文本相似性计算等。大规模数据集的近似最近邻搜索:在需要快速得到近似结果的场景下,LSH可以提供高效的解决方案。
基于KD树的索引定义:KD树是一种与组织k维数据点的空间分割树,基于KD树的索引是一种利用KD树结构来加速多维数据搜索的索引方法。它通过递归地将数据空间划分为超矩形区域,每 ...
面经 - Qdrant数据库
数据库类型向量数据库:Qdrant主要用于存储和检索大量的向量数据。云原生数据库:它支持分布式集群架构,便于在云环境中进行扩展和管理。多模态数据库:支持多种数据类型,如文本、图像、语音、视频等,能够满足不同应用场景下的多模态数据存储和检索需求。
技术架构数据存储与索引:Qdrant采用搞笑的数据存储和索引机制,支持多种索引类型,如基于LSH的索引、基于KD树的索引、基于哈希的索引等,以实现快速的向量搜索。API接口:提供RESTful和gRPC API,方便用户通过不同的编程语言和客户端进行操作。扩展性:Qdrant支持水平扩展,可以通过增加节点来提高系统的处理能力和存储容量。
主要特点高效搜索:使用自定义HNSW算法进行看要素准确的搜索,能够处理多种搜索条件和过滤器的组合。灵活性:支持多种距离度量方式,如余弦相似度、欧几里得距离、点积等,用户可以根据具体的应用场景选择合适的距离度量。易用性:提供通用的API规划和多种语言的客户端库,易于集成到现有的应用系统中。高可用性与容错性:通过分布式架构和数据副本机制,确保数据的高可用性和容错性,即使部分节点出现故障,系统仍然能够正常运行。
应用 ...
面经 - dns端口相关
DNS服务端口是53号端口
基本功能域名解析53端口是DNS协议的默认端口,当用户在浏览器中输入一个域名时,浏览器会向本地DNS服务器发送请求,该请求通过53端口进行传输,DNS服务器收到请求后,会将域名对应的IP地址返回给用户,从而实现域名到IP地址的转换,使用户能够通过简单易记的域名访问网站。
网络地址转换在某些网络环境中,53号端口还用于网络地址转换(NAT),帮助企业或组织内部的多台计算机共享一个公网IP地址访问互联网。
使用协议UDP协议通常用于快速、小规模的DNS查询请求,其无连接特性使得传输速度较快,能快速地将域名解析请求发送到DNS服务器,并获取返回的结果。TCP协议适用于DNS区域传输,如主从DNS服务器之间地数据同步,以及大型响应地传输等,因为TCP协议可以保证数据传输的可靠性,确保数据的完整性和准确性。
安全风险及防护安全风险由于53端口的重要性和广泛使用,容易成为黑客攻击的目标,常见的攻击方式包括DNS欺骗、DNS劫持、DDoS攻击等。比如攻击者可通过伪造地DNS回应,将用户的域名解析请求指向错误地IP地址,从而窃取用户信息或传播恶意软件;还可能利用DNS协议地 ...
面经 - Hpack头部压缩算法
Hpack是HTTP/2中的一种头部压缩算法。
背景和目的在HTTP/1.1中,请求和响应的头部信息通常是纯文本形式,并且会包含很多重复信息,如重复的Cookie字段、User-Agent字段等。随着Web应用的发展,头部信息和大小不断增加,这会导致网络传输效率降低。HPack算法旨在解决这个问题,通过压缩头部信息来减少数据传输量,从而提高网络传输效率,特别是在传输大量头部信息的情况下效果明显。
工作原理静态表和动态表HPack使用静态表和动态表来实现压缩。静态表是预先定义好的,包含了常见的HTTP头字段名称和一些对应的常见值,例如”host””content - type”等字段名称以及对应的常见值,如”text/html”等常见内容类型。动态表实在通信过程中由发送方和接收方共同维护的,它可以存储新出现的头部字段名称和值的组合,以便后续可以引用它们。例如,当一个头部字段的名称和值在进后台表中存在时,可以直接用静态表中的索引来表示这个头部字段。如果一个头部字段是新的,没有在静态表中出现过,那么会将其添加到动态表中,并且之后可以通过动态表的索引来引用它。
索 ...
美的-实习总结
第一次线下实习第一次实习经历的技术栈和收获后续展望
面经 - 帧DMA的传输
帧DMA(Frame Direct Memory Access)是一种DMA(Direct Memory Access)传输方式,它将数据组织成帧(Frame)进行传输。帧可以看作是一个数据块,通常用于处理连续的数据流,如音频或视频数据。
工作原理帧DMA的工作原理可以分为以下几个步骤:
帧定义在帧DMA中,数据被组织成帧,每帧包含一定数量的数据单元。帧的大小可以通过传输计数寄存器的高16为(帧计数域)和低16位(单元计数域)来定义。
寄存器配置在使用帧DMA进行数据传输之前,需要配置一系列的寄存器,包括主控寄存器、副控寄存器、传输计数寄存器、源地址寄存器和目标地址寄存器等。
地址调整帧DMA支持两种地址调整调整方式:基本调整和全局索引寄存器调整。基本调整通过控制域设置传输地址的递增、递减或保持不变。全局索引寄存器调整则根据传输的数据元素是否为当前帧的最后一个来进行地址调整。
数据传输DMA控制器负责对每个通道的读写传输进行地址计算,并根据配置的寄存器参数进行数据传输。当完成一帧数据的传输后,DMA控制器会根据全局索引寄存器的设置调整地址,准备下一帧数据的传输。
应用场景帧DMA广泛应 ...
