- 博客(43)
- 问答 (1)
- 收藏
- 关注
原创 一文全面了解向量数据库
首先,我们需要理解什么是向量?向量是基于不同特征或属性来描述对象的数据表示。每个向量代表一个单独的数据点,例如一个词或一张图片,由描述其许多特性的值的集合组成。这些变量有时被称为“特征”或“维度”。例如,一张图片可以表示为像素值的向量,整个句子也可以表示为单词嵌入的向量。图像向量,通过深度学习模型提取的图像特征向量,这些特征向量捕捉了图像的重要信息,如颜色、形状、纹理等,可以用于图像识别、检索等任务;
2024-03-16 22:25:32
1755
原创 小文件问题及GlusterFS的瓶颈
为了解决海量小文件的存储问题,必须采用分布式存储,目前分布式存储主要采用两种架构:集中式元数据管理架构和去中心化架构。典型的集中式元数据架构的分布式存储有GFS,HDFS,MooseFs等。其采用的典型架构如下图1所示:图1 集中式元数据架构此架构主要包含3个部分:1)主要用于提供访问分布式存储系统的接口;2)主要用于存放分布式存储系统的命名空间和文件的一些元数据信息。3)主要负责存储文件的具体数据。使用集中式的元数据管理的方式,其主要优点如下:1)
2024-03-10 20:09:03
1109
1
原创 LLM 推理优化
数据并行是一种将大型数据集分割成小块,然后在多个GPU上并行处理的技术。每个GPU处理数据的一个子集,并独立地执行相同的模型计算。最后,将所有GPU的结果汇总以得到最终输出。
2024-03-10 15:54:02
2201
原创 golang waitgroup
WaitGroup可以用于一个 goroutine 等待多个 goroutine 干活完成,也可以多个 goroutine 等待一个 goroutine 干活完成,是一个多对多的关系多个等待一个的典型案例是,这个在后面将微服务可用性的时候还会再讲到,感兴趣可以看看源码Add(n>0)方法应该在启动 goroutine 之前调用,然后在 goroution 内部调用Done方法WaitGroup必须在Wait方法返回之后才能再次使用Done只是Add。
2023-07-16 22:10:43
29995
1
原创 kubeproxy和service dns整体原理
ClusterIP方式访问的入口链;:NodePort方式访问的入口链;KUBE-SVC-*:相当于一个负载均衡器,将数据包平均分发给KUBE-SEP-*链;KUBE-SEP-*:通过DNAT将Service的目的IP和端口,替换为后端Pod的IP和端口,从而将流量转发到后端Pod。:通过对路由到其他节点的数据包进行SNAT,使其能够原路返回。对于NodePort类型的service,如果本节点上没有目的Pod,则本节点起到的是网关的作用,将数据路由到其他节点。在这种情况下,
2023-07-16 20:33:14
1269
原创 Kafka剖析原理
一、为什么需要消息系统 1.解耦: 允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束。2.冗余: 消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险。许多消息队列所采用的"插入-获取-删除"范式中,在把一个消息从队列中删除之前,需要你的处理系统明确的指出该消息已经被处理完毕,从而确保你的数据被安全的保存直到你使用完毕。3.扩展性...
2018-12-27 19:18:56
605
1
原创 Kafka文件存储设计
1引言Kafka中的Message是以topic为基本单位组织的,不同的topic之间是相互独立的。每个topic又可以分成几个不同的partition(每个topic有几个partition是在创建topic时指定的),每个partition存储一部分Message。借用官方的一张图,可以直观地看到topic和partition的关系。partition是以文件的形式存储在文件系统中...
2018-12-27 19:18:12
844
1
转载 JSON Web Token
JSON Web Token(缩写 JWT)是目前最流行的跨域认证解决方案,本文介绍它的原理和用法。一、跨域认证的问题互联网服务离不开用户认证。一般流程是下面这样。1、用户向服务器发送用户名和密码。2、服务器验证通过后,在当前对话(session)里面保存相关数据,比如用户角色、登录时间等等。3、服务器向用户返回一个 session_id,写入用户的 Cookie。4...
2018-12-03 18:28:40
277
原创 初学Git
工作区和暂存区工作区(Working Directory)就是你在电脑里能看到的目录,比如我的learngit文件夹就是一个工作区: 版本库(Repository)工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支maste...
2018-11-20 18:04:40
230
转载 RabbitMQ Exchange类型详解
在上一篇文章中,我们知道了RabbitMQ的消息流程如下:但在具体的使用中,我们还需知道exchange的类型,因为不同的类型对应不同的队列和路由规则。在rabbitmq中,exchange有4个类型:direct,topic,fanout,header。direct exchange此类型的exchange路由规则很简单:exchange在和queue进行binding时...
2018-07-29 14:26:21
542
转载 数据库四范式
为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库,必须满足一定的范式。 在实际开发中最为常见的设计范式有三个:1.第一范式(确保每列保持原子性)第一范式是最基本的范式。如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库表满足了第一范式...
2018-07-09 11:51:46
2321
转载 理解Java中的引用传递和值传递
关于Java传参时是引用传递还是值传递,一直是一个讨论比较多的话题,有论坛说Java中只有值传递,也有些地方说引用传递和值传递都存在,比较容易让人迷惑。关于值传递和引用传递其实需要分情况看待,今天学习和分析一下,着急可以先看最后的结论。1.基本类型和引用类型在内存中的保存Java中数据类型分为两大类,基本类型和对象类型。相应的,变量也有两种类型:基本类型和引用类型。基本类型的变量保存原始值,即它代...
2018-06-14 09:34:32
223
转载 字节码增强和spring AOP 原理
字节码增强技术:AOP技术其实就是字节码增强技术,JVM提供的动态代理追根究底也是字节码增强技术。 应用场景:某一天系统出现OOM,通过工具分析,是莫各类的对象占用了很大空间,但是这个对象被许多程序访问,那么就很难找到,工程的全文匹配也只能找到自己的业务代码调用的地方,深入的反射,三方包调用无法匹配。这个时候AOP就可以帮助完成。两种实现机制:一种是通过创建原始类的一个子类,也就是动态创建的这个类...
2018-06-14 09:05:19
4571
1
原创 spring ioc容器结构初始化步骤以及bean生命周期和三种创建方式
Spring创建对象的三种方式创建对象的三种方式: 1、采用默认的构造函数创建 2、采用静态工厂方法 1、写一个静态工厂方法类 public class HelloWorldFactory { public static HelloWorld getIns...
2018-06-14 09:00:06
2588
转载 java对象锁和类锁
在java编程中,经常需要用到同步,而用得最多的也许是synchronized关键字了,下面看看这个关键字的用法。因为synchronized关键字涉及到锁的概念,所以先来了解一些相关的锁知识。 java的内置锁:每个java对象都可以用做一个实现同步的锁,这些锁成为内置锁。线程进入同步代码块或方法的时候会自动获得该锁,在退出同步代码块或方法时会释放该锁。获得内置锁的唯一途径就是进入这个锁的保护的...
2018-06-13 15:02:18
315
转载 TCP和UDP的9个区别是什么及对应应用层协议
TCP和UDP是两个传输层协议,广泛应用于网络中不同主机之间传输数据。对任何程序员来说,熟悉TCP和UDP的工作方式都是至关重要的。这就是为什么TCP和UDP是一个流行的Java编程面试问题。我曾经在各种不同的Java面试中见过这个问题,尤其是对服务器端Java开发人员的面试。由于FIX(金融信息交换)协议也是一个基于TCP协议,一些投资银行,对冲基金,和交换解决方案提供商也在寻找有良好的TCP...
2018-05-07 09:35:53
10498
转载 聚簇索引概念(Myisam与Innodb索引的区别)
聚集索引:可以帮助把很大的范围,迅速减小范围。但是查找该记录,就要从这个小范围中Scan了。 非聚集索引:把一个很大的范围,转换成一个小的地图。你需要在这个小地图中找你要寻找的信息的位置。然后通过这个位置,再去找你所需要的记录。myisam的主索引和次索引都指向物理行,下面来进行讲解innodb的主键下存储该行的数据,此索引指向对主键的引用myisam的索引存储图如下,可以看出,无论是id还是c...
2018-05-07 09:21:47
2847
转载 TCP的四种定时器
TCP使用四种定时器(Timer,也称为“计时器”):重传计时器:Retransmission Timer坚持计时器:Persistent Timer保活计时器:Keeplive Timer时间等待计时器:Time_Wait Timer。 (1)重传计时器:重传定时器:为了控制丢失的报文段或丢弃的报文段,也就是对报文段确认的等待时间。当TCP发送报文段时,就创建这个特定报文段的重传计时器,可能发生...
2018-05-07 09:18:06
293
转载 Collection与Collections还有Executor vs ExecutorService vs Executors区别
Collection是集合类的上级接口,继承与他有关的接口主要有List和SetCollections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全等操作稍微举个例子:java代码public static void main(String args[]) { //注意List是实现Collection接口的 List lis...
2018-05-07 09:07:55
305
转载 JDK8接口新特性以及接口和抽象类区别
在jdk8之前,interface之中可以定义变量和方法,变量必须是public、static、final的,方法必须是public、abstract的。由于这些修饰符都是默认的,所以在JDK8之前,下面的写法都是等价的。[java] view plain copypublic interface JDK8BeforeInterface { public static final int...
2018-05-07 08:58:15
3950
1
转载 java classload 机制方法
类加载器是 Java 语言的一个创新,也是 Java 语言流行的重要原因之一。它使得 Java 类可以被动态加载到 Java 虚拟机中并执行。类加载器从 JDK 1.0 就出现了,最初是为了满足 Java Applet 的需要而开发出来的。Java Applet 需要从远程下载 Java 类文件到浏览器中并执行。现在类加载器在 Web 容器和 OSGi 中得到了广泛的使用。...
2018-05-07 08:37:23
1695
转载 HTTP,HTTPS详解以及get post区别,状态码
一、什么是HTTP协议 HTTP是hypertext transfer protocol(超文本传输协议)的简写,它是TCP/IP协议的一个应用层协议,用于定义WEB浏览器与WEB服务器之间交换数据的过程。客户端连上web服务器后,若想获得web服务器中的某个web资源,需遵守一定的通讯格式,HTTP协议用于定义客户端与web服务器通迅的格式。二、HTTP协议的版本 HTTP协议的...
2018-03-19 00:00:49
14371
转载 Java并发编程:深入剖析ThreadLocal
想必很多朋友对ThreadLocal并不陌生,今天我们就来一起探讨下ThreadLocal的使用方法和实现原理。首先,本文先谈一下对ThreadLocal的理解,然后根据ThreadLocal类的源码分析了其实现原理和使用需要注意的地方,最后给出了两个应用场景。 以下是本文目录大纲: 一.对ThreadLocal的理解 二.深入解析ThreadLocal类 三.ThreadLocal的应用...
2018-03-14 11:31:53
268
转载 Java IO流学习超详细总结
Java流操作有关的类或接口:Java流类图结构:流的概念和作用流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。IO流的分类根据处理数据类型的不同分为:字符流和字节流根据数据流向不同分为:输入流和输出流字符流和字节流字符流的由来: 因为数据编码的不同,而有了对字符进行高...
2018-03-14 09:18:20
494
转载 堆排序算法
一、堆排序算法的基本特性时间复杂度:O(n*lgn)最坏:O(n*lgn)空间复杂度:O(1)不稳定。堆排序是一种选择排序算法,与关键字的初始排列次序无关,即就是在最好,最坏,一般的情况下排序时间复杂度不变。对包含n个数的输入数组,平均时间为O(nlgn),最坏情况(已经排好序)也是是O(nlgn),最好情况(完全无序)也是O(nlgn)。由于不但时间复杂度少,而且空间复杂度也是最少的,所以是用于...
2018-03-12 22:08:01
476
转载 JVM的内存区域划分
JVM的内存区域划分 学过C语言的朋友都知道C编译器在划分内存区域的时候经常将管理的区域划分为数据段和代码段,数据段包括堆、栈以及静态数据区。那么在Java语言当中,内存又是如何划分的呢? 由于Java程序是交由JVM执行的,所以我们在谈Java内存区域划分的时候事实上是指JVM内存区域划分。在讨论JVM内存区域划分之前,先来看一下Java程序具体执行的过程: ...
2018-03-10 17:24:24
212
原创 JVM——内存管理和垃圾回收
深入JVM内核---JVM内存模型 在上一篇博客中讲GC算法的时候提到了一些关于JVM内存模型.JVM中用heap堆来存储运行时的数据,所有类实例和数组由堆分配内存,JVM启动时创建堆(heap memory),在堆以外的内存叫非堆(non-heap memory)1.堆(Heap space)在JVM的堆内存空间中,从大的层面划分,可以分为新生代(Yo...
2018-03-10 17:16:23
351
转载 Arraylist动态扩容详解
ArrayList 概述ArrayList是基于数组实现的,是一个动态数组,其容量能自动增长。ArrayList不是线程安全的,只能用在单线程环境下。实现了Serializable接口,因此它支持序列化,能够通过序列化传输;实现了RandomAccess接口,支持快速随机访问,实际上就是通过下标序号进行快速访问;实现了Cloneable接口,能被克隆。动态扩容一 初始化首先有三种方式来初始...
2018-03-10 16:38:12
298
转载 ConcurrentHashMap的实现
一、背景:经研究过jkd1.5新特性,其中ConcurrentHashMap就是其中之一,其特点:效率比Hashtable高,并发性比hashmap好。结合了两者的特点。 集合是编程中最常用的数据结构。而谈到并发,几乎总是离不开集合这类高级数据结构的支持。比如两个线程需要同时访问一个中间临界区(Queue),比如常会用缓存作为外部文件的副本(HashMap)。这篇文章主要分析jdk1.5的3种...
2018-03-10 16:23:03
225
转载 java集合类TreeMap和TreeSet及红黑树
看这篇博客前,我觉得很有必要先看下我之前的几篇博客Red-Black Trees(红黑树) (TreeMap底层的实现就是用的红黑树数据结构)探索equals()和hashCode()方法 (TreeMap/TreeSet实现使用到的核心方法)java中的...
2018-03-10 16:21:17
727
转载 hashmap基本原理以及与hashtable,linkedhashmap,treemap区别
原理转HashMap概述HashMap是基于哈希表的Map接口的非同步实现。此实现提供所有可选的映射操作,并允许使用null值和null键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。HashMap的数据结构在Java编程语言中,最基本的结构就是两种,一个是数组,另外一个是模拟指针(引用),所有的数据结构都可以用这两个基本结构来构造的,HashMap也不例外。HashMap实际上是一个“链...
2018-03-10 16:20:24
337
转载 Java多线程之锁优化策略及锁膨胀
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6561264.html 锁的优化策略 编码过程中可采取的锁优化的思路有以下几种: 1:减少锁持有时间 例如:对一个方法加锁,不如对方法中需要同步的几行代码加锁; 2:减小锁粒度 例如:ConcurrentHashMap采取对segment加锁而不是整个m...
2018-03-06 11:26:47
2043
原创 java备忘知识点
float f=3.4;是否正确?答:不正确。3.4是双精度数,将双精度型(double)赋值给浮点型(float)属于下转型(down-casting,也称为窄化)会造成精度损失,因此需要强制类型转换float f =(float)3.4; 或者写成float f =3.4F;。标准规定一个浮点字面常量如果没有后缀的话,它的类型是doublefloat定义方法:需要加f后缀...
2018-03-01 22:17:44
193
转载 java .equals()和==的区别
前几天突然又接触了java的.equals()和==发现有新的收获。首先,让我们来看一下他们的区别。 (1)比较java基本类型: 比较基本类型只能用"==",不能用"equals",这里的"=="比较的是两个基本类型的值 (2)比较包装类:这里拿Integer来举例,Character不能用"=="比较,不知道为什么?public class TestEquals{ pu...
2018-02-27 21:20:40
187
转载 java集合继承关系图
面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式。 数组虽然也可以存储对象,但长度是固定的;集合长度是可变的,数组中可以存储基本数据类型,集合只能存储对象。 集合类的特点:集合只用于存储对象,集合长度是可变的,集合可以存储不同类型的对象。 上述类图中,实线边框的是实现类,比如A...
2018-02-26 15:30:52
1570
3
转载 Java内存分配及变量存储位置实例讲解
Java内存分配与管理是Java的核心技术之一,之前我们曾介绍过Java的内存管理与内存泄露以及Java垃圾回收方面的知识,今天我们再次深入Java核心,详细介绍一下Java在内存分配方面的知识。一般Java在内存分配时会涉及到以下区域: ◆寄存器:我们在程序中无法控制 ◆栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中(new 出来的对象) ◆堆:存放用new产...
2018-02-26 14:21:26
909
转载 总结Spring Set注入方式,注解在set方法上,及对property标签的理解
Spring依赖注入主要的方式:1.Set方法注入;2.构造方法注入;3.接口注入。依赖注入的涵义:通过Spring容器帮我们new指定实例并且将实例注入到需要该对象的类中。依赖注入的另一种说法是“控制反转”,通俗的理解是:平常我们new一个实例,这个实例的控制权是我们程序员,而控制反转是指new实例工作不由我们程序员来做而是交给spring容器来做。平时主要用Set注入方式:假设有一个Sprin...
2018-02-24 20:50:19
7068
转载 struts2标签使用中,什么时候用#,什么时候可以不用#
值栈中的对象的不使用#,非值栈中的对象使用#如果你不理解值栈的作用,简单点理解:当前action,或者处于action链中的action所拥有的属性,并且为该属性提供了getter和setter方法,那么在jsp中就不需要使用#,除此之外需要使用#,那么从这里你就可以知道action的属性如果提供了getter和setter方法,那么这些属性值就会放置到值栈中...
2018-02-20 00:13:00
267
转载 正则表达式详解
另一文连接http://www.jb51.net/tools/zhengze.html#mission正则表达式语法元字符描述\将下一个字符标记符、或一个向后引用、或一个八进制转义符。例如,“\\n”匹配\n。“\n”匹配换行符。序列“\\”匹配“\”而“\(”则匹配“(”。即相当于多种编程语言中都有的“转义字符”的概念。^匹配输入字符串的开始位置。如果设置了RegExp对象的Multiline属...
2018-02-16 22:47:15
239
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人