- 博客(80)
- 资源 (7)
- 收藏
- 关注
原创 Golang的语言特性与鸭子类型
上述是对于的最有名的阐述。意思是对于事物类型的判断, 不取决于事物本身预设的标签(label), 而取决于判断者判断时需要用到的条件, 如果事物拥有符合条件的属性,那么在判断者眼中它就是那种类型。当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。在鸭子类型中,关注点在于对象的行为,能做什么;而不是关注对象所属的类型。例如,在不使用鸭子类型的语言中,我们可以编写一个函数,它接受一个类型为“鸭子”的对象,并调用它的“走”和“叫”方法。
2024-11-24 17:38:45
1067
原创 不注册访问 Claude3 大模型
随着Claude3大模型的出世,大模型霸主地位已经发生易位,但是国内使用Claude3官网 无论是注册都不容易,本篇文章主要介绍如何不通过Claude3 官网实现Claude3 大模型的使用,
2024-03-08 20:29:10
1931
原创 Viper反序列化解析字段不成功问题
name、NAME、NaMe 等等,如果名称不一致没有指定 tagName ,则默认为 mapstructure,这也是为什么带下划线或者名称不一致的字段不加 mapstructure标签无法解析的原因。默认情况下,mapstructure 使用结构体中字段的名称做这个映射,不区分大小写,比如 Name 字段可以映射到。mapstructure 用于将通用的map[string]interface{}解码到对应的 Go 结构体中。通过mapstructure映射名称。
2024-03-08 20:26:15
527
原创 Golang对比Java、python为什么要保留指针
Go 的指针一方面提供了引用语义,另一方面像 C 语言一样给了开发者灵活管理内存的能力。参考链接:樊冰心:https://www.zhihu.com/question/399589293/answer/2242103027。
2024-01-14 10:55:29
1171
原创 面试常见的场景设计题
所谓海量数据处理,就是指数据量太大,无法在较短时间内迅速解决,或者无法一次性装入内存。针对时间,可以采用巧妙的算法搭配合适的数据结构,如Hashmapbit-map堆数据库倒排索引/Trie树;针对空间,大而化小,分而治之(hash映射),把规模大化为规模小的,各个击破。海量数据分而治之/hash映射 + hash统计 + 堆/快速/归并排序;Trie树/Bloom filter/Bitmap数据库/倒排索引(问题实例:文档检索系统,查询那些文件包含了某单词,比如常见的学术论文的关键字搜索。
2024-01-14 10:42:56
1891
1
原创 gRPC vs HTTP
在HTTP/2协议中**,HTTP消息被分解独立的帧(Frame),交错发送,帧是最小的数据单位。然而当你的watcher成千上万的时,即使集群空负载,大量轮询也会产生一定的QPS,server端会消耗大量的socket、内存等资源,导致etcd的扩展性、稳定性无法满足Kubernetes等业务场景诉求。在etcd v3中,为了解决etcd v2的以上缺陷,使用的是基于HTTP/2的gRPC协议,双向流的Watch API设计,实现了连接多路复用。HTTP/2 不是 gRPC 独占的。
2024-01-14 10:39:59
1535
原创 05.neuvector网络学习与管控实现
dp侧收到ctrl_add_tap_port数据后,执行路径如下dp_ctrl_handler->dp_ctrl_add_tap_port->dp_data_add_tap->dp_alloc_context->dp_open_socket(创建AF_PACKET的socket并绑定容器的网络接口eth0)->dp_ring_v1(通过setsockopt创建的接收的环形缓冲区-)
2024-01-13 20:58:13
1373
2
原创 03.neuvector之组的划分逻辑
NeuVector 会自动从正在运行的应用程序中创建组。这些组以前缀‘nv‘开头。您也可以使用 CRD 或 REST API 手动添加它们,并且可以在任何模式下创建、发现、监视或保护。网络和响应规则需要这些组定义。对于自动创建的组(以“nv”开头的“学习”组) ,NeuVector 将学习网络和处理规则,并在发现模式下添加它们。自定义组不会自动学习和填充规则。注意: nv组开始时默认为进程/文件保护启用零漂移。
2024-01-13 20:50:14
1073
原创 02.neuvector之Enforcer容器功能介绍
Enforcer容器在neuvector中主要负责网络与DLP/WAF的规则策略的实现以及网络数据的采集上报;以DaemonSet的方式运行,主要有三个进程monitor、agent、dp;monitor:负责监控其他进程是否正常运行以及资源消耗等;agent:负责与controller容器进行交互,通过grpc与consul实现数据上报与策略下发,其中进程与文件的策略学习与防护由agent做,网络相关具体实现由dp进程实现;dp:负责网络的数据采集上报,网络拦截告警等相关功能;
2024-01-13 20:48:19
532
原创 PostgreSQL对比Mysql
需要根据具体的应用需求和业务场景来选择适合的数据库。PostgreSQL的灵活性、性能和可靠性使其适用于各种不同类型的应用场景。无论是开发Web应用、处理地理空间数据,还是进行数据分析和构建企业级应用,PostgreSQL都提供了强大的功能和支持[
2023-12-02 16:58:44
545
原创 04.PostgreSQL是如何实现隔离级别的?
PostgreSQL 是支持事务的,事务的四大特性是原子性、一致性、隔离性、持久性,我们这次主要讲了隔离性。当多个事务并发执行的时候,会引发脏读、不可重复读、幻读这些问题,那为了避免这些问题,SQL 提出了四种隔离级别,分别是读未提交、读已提交、可重复读、串行化,从左往右隔离级别顺序递增,隔离级别越高,意味着性能越差,PostgreSQL 引擎的默认隔离级别是读已提交。**在PostgreSQL里,你可以请求四种可能的事务隔离级别中的任意一种。
2023-12-02 16:57:52
497
原创 03.PostgreSQL常用索引与优化
name text如果没有索引,数据库需要扫描整个表才能找到相应的数据。利用EXPLAINParallel Seq Scan 表示并行顺序扫描,执行消耗了 12 s;由于表中有包含大量数据,而查询只返回一行数据,显然这种方法效率很低。关于执行计划的更多信息,可以参考这篇文章。此时,如果在 id 列上存在索引,则可以通过索引快速找到匹配的结果。创建索引需要消耗一定的时间。Index Scan 表示索引扫描,执行消耗了 20 ms;
2023-12-02 16:57:20
450
原创 02.PostgreSQL 查询处理期间发生了什么?
解析器(Parser)解析器根据SQL语句生成一颗语法解析树(parse tree)。分析器(Analyzer)分析器对语法解析树进行语义分析,生成一颗查询树(query tree)。重写器(Rewriter)重写器按照规则系统中存在的规则,对查询树进行改写。计划器(Planner)计划器基于查询树,生成一颗执行效率最高的计划树(plan tree)。执行器(Executor)执行器按照计划树中的顺序访问表和索引,执行相应查询。
2023-12-02 16:56:40
407
原创 Kubernetes集群架构与组件介绍
主要负责所在节点上的Pod资源对象的管理,例如Pod资源对象的创建、修改、监控、删除、驱逐及Pod生命周期管理等。的组件, 该组件公开了 Kubernetes API,API Server 是整个系统的核心组件之一,它是 Kubernetes API 的前端。总之,API Server 是 Kubernetes 系统中非常重要的组件之一,它为整个系统提供了一个统一的入口和管理接口,使得 Kubernetes 的各个组件可以相互协作,从而实现对 Kubernetes 集群的管理和监控等操作。
2023-06-01 22:03:48
866
原创 linux中etc目录下hosts与resolv.conf文件作用
总的来说,和/etc/hosts文件都是非常重要的配置文件,它们可以帮助操作系统正确地解析域名和IP地址的对应关系,从而保证网络连接的正常运行。
2023-06-01 22:03:09
6011
原创 client-go架构与原理介绍
下面对图中每个组件进行简单介绍:client-go 组件:Reflector: 定义在/tools/cache 包内的 Reflector 类型中的 reflector 监视 Kubernetes API 以获取指定的资源类型 (Kind)。完成此操作的函数是 ListAndWatch。监视可以用于内建资源,也可以用于自定义资源。
2023-06-01 22:01:23
2137
原创 Golang通道阻塞情况与通道无阻塞实现
如果通道已满,并且没有协程在读取通道中的数据,那么任何试图将数据写入通道的协程都会被阻塞,直到有空间可用为止。如果通道为空,并且没有协程在等待从通道中读取数据,那么任何试图从通道中读取数据的协程都会被阻塞,直到有数据可用为止。使用select的default语句,在channel不可读写时,即可返回使用select+定时器,在超时时间内,channel不可读写,则返回。
2023-06-01 21:56:41
1684
原创 Golang内存泄露场景与定位方式
循环引用:如果两个或多个对象相互引用,且没有其他对象引用它们,那么它们就会被垃圾回收机制误认为是仍在使用的对象,导致内存泄漏。全局变量:在Golang中,全局变量的生命周期与程序的生命周期相同。如果一个全局变量被创建后一直存在于内存中,那么它所占用的内存就无法被回收,可能会导致内存泄漏。未关闭的文件句柄:如果程序打开了文件句柄但没有关闭它们,那么这些文件句柄所占用的内存就无法被回收,可能会导致内存泄漏。大量的临时对象。
2023-06-01 21:42:10
3952
原创 云原生场景下的容器网络隔离技术
本文从传统网络隔离与云原生网络隔离两个角度出发,分析了现有的网络隔离技术的特点,讨论了云原生场景下网络隔离技术需要满足的特点。首先我们通过分析传统隔离得出,在面对复杂的云原生应用场景时,为了更好保护我们的业务容器安全,我们需要一些新的隔离技术去实现网络隔离。然后,我们通过介绍目前云原生网络隔离的两种实现方案,得出一个理想的容器网络隔离技术需要满足哪些特点。最后,希望通过本篇文章的分享,你能有所收获。
2023-03-24 23:57:52
665
原创 应用层协议:DNS协议
网域名称系统(英语:Domain Name System,缩写:DNS)是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS 协议运行在 UDP 之上,DNS使用TCP和UDP端口53[1]。在网络世界,也是这样的。你肯定记得住网站的名称,但是很难记住网站的 IP 地址,因而也需要一个地址簿,就是 DNS 服务器,它是一个由分层的 DNS 服务器(DNS server)实现的分布式数据库;它还是一个使得主机能够查询分布式数据库的应用层协议。DNS 最早的设
2023-03-24 23:48:50
856
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人