自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(145)
  • 收藏
  • 关注

原创 30 张图解 HTTP 常见的面试题

在面试过程中,HTTP 被提问的概率还是比较高的我搜集了 5 大类 HTTP 面试常问的题目,同时这 5 大类题跟 HTTP 的发展和演变关联性是比较大的,通过问答 + 图解的形式由浅入深的方式帮助大家进一步的学习和理解 HTTP 协议。

2023-12-10 17:06:52 1320 1

原创 20道计算机网络面试题

XSS 即(Cross Site Scripting)中文名称为:跨站脚本攻击。XSS的重点不在于跨站点,而在于脚本的执行。XSS的原理是:恶意攻击者在web页面中会插入一些恶意的script代码。当用户浏览该页面的时候,那么嵌入到web页面中script代码会执行,因此会达到恶意攻击用户的目的。XSS攻击最主要有如下分类:反射型、存储型、及 DOM-based型。反射性和DOM-baseed型可以归类为非持久性XSS攻击。存储型可以归类为持久性XSS攻击。

2023-12-10 16:01:56 1052

原创 SpringBoot 自动装配原理详解

我们现在提到自动装配的时候,一般会和 Spring Boot 联系在一起。但是,实际上 Spring Framework 早就实现了这个功能。Spring Boot 只是在其基础上,通过 SPI 的方式,做了进一步优化。SpringBoot 定义了一套接口规范,这套规范规定:SpringBoot 在启动时会扫描外部引用 jar包中的META-INF/spring.factories文件,将文件中配置的类型信息加载到 Spring 容器(此处涉及到 JVM。

2023-12-09 22:08:06 926

原创 InnoDB存储引擎对MVCC的实现

因为在 RC 级别下,重新生成 Read View,这时事务 101 已经提交,102 并未提交,所以此时 Read View 中活跃的事务 m_ids:[102] ,m_low_limit_id为:104,m_up_limit_id为:102,m_creator_trx_id为:103。快照读取是基于事务开始时数据库中的状态创建的,因此事务不会读取其他事务尚未提交的修改。不同事务或者相同事务的对同一记录行的修改,会使该记录行的 undo log 成为一条链表,链首就是最新的记录,链尾就是最早的旧记录。

2023-12-09 18:36:03 1289

原创 最透彻HTTPS

HTTPS 的出发点是解决HTTP明文传输时信息被篡改和监听的问题。为了兼顾性能和安全性,使用了非对称加密+对称加密的方案。为了保证公钥传输中不被篡改,又使用了非对称加密的数字签名功能,借助CA机构和系统根证书的机制保证了HTTPS证书的公信力。

2023-11-28 17:25:39 889

原创 在Mysql中,什么是回表,什么是覆盖索引,索引下推?

通俗的讲就是,如果索引的列在select所需获得的列中(因为在 mysql 中索引是根据索引列的值进行排序的,所以索引节点中存在该列中的部分值)或者根据一次索引查询就能获得记录就不需要回表,如果 select 所需获得列中有大量的非索引列,索引就需要到表中找到相应的列的信息,这就叫回表。InnoDB聚集索引的叶子节点存储行记录,因此, InnoDB必须要有,且只有一个聚集索引:(1)如果表定义了主键,则PK就是聚集索引;

2023-11-28 14:26:37 1193

原创 MySQL三大日志(binlog、redo log和undo log)详解

MySQL InnoDB 引擎使用redo log(重做日志) 保证事务的持久性,使用undo log(回滚日志) 来保证事务的原子性。MySQL数据库的数据备份、主备、主主、主从都离不开binlog,需要依靠binlog来同步数据,保证数据一致性。

2023-11-28 13:28:51 1280

原创 【Elasticsearch核心技术与实战】学习笔记

自己学习的脑图笔记,也方便大家复习和理解。

2023-11-26 21:24:48 415

原创 MySQL执行计划分析

执行计划 是指一条 SQL 语句在经过MySQL 查询优化器的优化会后,具体的执行方式。执行计划通常用于 SQL 性能分析、优化等场景。通过EXPLAIN的结果,可以了解到如数据表的查询顺序、数据查询操作的操作类型、哪些索引可以被命中、哪些索引实际会命中、每个数据表有多少行记录被查询等信息。

2023-11-26 13:02:49 990

原创 MySQL索引详解

索引是一种用于快速查询和检索数据的数据结构,其本质可以看成是一种排序好的数据结构。索引的作用就相当于书的目录。打个比方: 我们在查字典的时候,如果没有目录,那我们就只能一页一页的去找我们需要查的那个字,速度很慢。如果有目录了,我们只需要先去目录里查找字的位置,然后直接翻到那一页就行了。索引底层数据结构存在很多种类型,常见的索引结构有: B 树, B+树 和 Hash、红黑树。在 MySQL 中,无论是 Innodb 还是 MyIsam,都使用了 B+树作为索引结构。

2023-11-25 20:25:37 933

原创 Mysql面试题总结

索引是一种数据结构,是数据库管理系统中一个排序的数据结构,以协助快速查询数据库表中数据。索引的实现通常使用B+树或hash表。更通俗的说,索引就相当于目录。为了方便查找书中的内容,通过对内容建立索引形成目录。聚簇索引:将数据与索引放到了一块,索引结构的叶子节点存储了行数据,找到索引也就找到了数据非聚簇索引:将数据与索引分开存储,索引结构的叶子节点存储的是行数据的地址聚簇索引的优点数据访问更快。聚族索引将索引和数据保存在同一个B+树中,因此从聚族索引中获取数据通常比非聚族索引中查找更快。

2023-11-23 16:14:15 378

原创 Redis—跳跃表

跳跃表(skiplist)是一种随机化的数据结构,由 William Pugh 在论文《Skip lists: a probabilistic alternative to balanced trees》中提出,是一种可以与平衡树媲美的层次化链表结构——查找、删除、添加等操作都可以在对数期望时间下完成,以下是一个典型的跳跃表例子:有一个叫做 有序列表 zset 的数据结构,它类似于 Java 中的 SortedSet 和 HashMap 的结合体,一方面它是一个 set 保证了内部 value 的唯一性,

2023-11-22 09:48:29 154

原创 Redis持久化机制详解

Redis 可以通过创建快照来获得存储在内存里面的数据在 某个时间点 上的副本。Redis 创建快照之后,可以对快照进行备份,可以将快照复制到其他服务器从而创建具有相同数据的服务器副本(Redis 主从结构,主要用来提高 Redis 性能),还可以将快照留在原地以便重启服务器的时候使用。save 900 1 #在900秒(15分钟)之后,如果至少有1个key发生变化,Redis就会自动触发bgsave命令创建快照。

2023-11-21 23:47:26 83

原创 Redis 5 种基本数据类型详解

String 是 Redis 中最简单同时也是最常用的一个数据类型。String 是一种二进制安全的数据类型,可以用来存储任何类型的数据比如字符串、整数、浮点数、图片(图片的 base64 编码或者解码或者图片的路径)、序列化后的对象。虽然 Redis 是用 C 语言写的,但是 Redis 并没有使用 C 的字符串表示,而是自己构建了一种 简单动态字符串(Simple Dynamic String,SDS)。

2023-11-21 22:19:28 256

原创 分布式锁介绍

锁是一个比较通用的解决方案,更准确点来说是悲观锁。Redisson 中的分布式锁自带自动续期机制,使用起来非常简单,原理也比较简单,其提供了一个专门用来监控和续期锁的 Watch Dog( 看门狗),如果操作共享资源的线程还未执行完成的话,Watch Dog 会不断地延长锁的过期时间,进而保证锁不会因为超时而被释放。所谓可重入锁指的是在一个线程中可以多次获取同一把锁,比如一个线程在执行一个带锁的方法,该方法中又调用了另一个需要相同锁的方法,则该线程可以直接执行调用的方法即可重入 ,而无需重新获得锁。

2023-11-21 15:55:09 48

原创 【设计模式】观察者模式

/观察者的接口,用来存放观察者共有方法// 观察者方法// 具体观察者// 具体观察者的属性System.out.println("收到消息,myState值改为:"+state);//定义主题,以及定义观察者数组,并实现增、删及通知操作。//观察者的存储集合,不推荐ArrayList,线程不安全, private Vector < Observer > list = new Vector < >();

2023-10-23 16:46:32 304

原创 【设计模式】策略模式

定义了一系列的算法 或 逻辑 或 相同意义的操作,并将每一个算法、逻辑、操作封装起来,而且使它们还可以相互替换。(其实策略模式Java中用的非常非常广泛)我觉得主要是为了 简化 if…else 所带来的复杂和难以维护。

2023-10-23 16:37:45 68

原创 【设计模式】原型模式

原型设计模式简单来说就是克隆原型表明了有一个样板实例,这个原型是可定制的。原型模式多用于创建复杂的或者构造耗时的实例,因为这种情况下,复制一个已经存在的实例可使程序运行更高效。

2023-10-23 15:28:16 280

原创 【设计模式】外观模式

外观模式:也叫门面模式,隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。它向现有的系统添加一个接口,用这一个接口来隐藏实际的系统的复杂性。使用外观模式,他外部看起来就是一个接口,其实他的内部有很多复杂的接口已经被实现。

2023-10-23 15:18:29 43

原创 【设计模式】模板方法模式

模板方法模式:定义一个操作中的算法骨架(父类),而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构来重定义该算法的。

2023-10-23 15:08:01 330

原创 【设计模式】建造者模式

建造者模式:是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的方式进行创建。工厂类模式是提供的是创建单个类的产品而建造者模式则是将各种产品集中起来进行管理,用来具有不同的属性的产品。

2023-10-23 15:03:35 572

原创 【设计模式】代理模式

通过代理控制对象的访问,可以在这个对象调用方法之前、调用方法之后去处理/添加新的功能。(也就是AOP的实现)代理在原有代码乃至原业务流程都不修改的情况下,直接在业务流程中切入新代码,增加新功能,这也和Spring的(面向切面编程)很相似。

2023-10-23 14:00:06 387

原创 【设计模式】工厂模式

它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。实现了创建者和调用者分离,工厂模式分为简单工厂、工厂方法、抽象工厂模式。

2023-10-23 12:02:47 604

原创 【设计模式】单例模式

保证一个类只有一个实例,并且提供一个访问该全局访问点。

2023-10-23 11:43:18 281

原创 【设计模式】概括

设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。

2023-10-23 11:27:43 144

原创 【Java-LangChain:使用 ChatGPT API 搭建系统-11】用 ChatGPT API 构建系统 总结篇

本课程详细介绍了 LLM 工作原理,包括分词器(tokenizer)的细节、评估用户输入的质量和安全性的方法、使用思维链作为 Prompt、通过链式 Prompt 分割任务以及返回用户前检查输出等。此外,课程也涉及到如何构建负责任的系统,以保证模型提供合理且相关的反馈。本课程还介绍了评估系统的长期性能,以监控和改进表现的方法。

2023-10-03 10:51:15 531

原创 【Java-LangChain:使用 ChatGPT API 搭建系统-10】评估(下)-当不存在一个简单的正确答案时

在上一章中,了解了如何评估 LLM 模型在 有明确正确答案 的情况下的输出,我们可以编写一个函数来判断 LLM 输出是否正确地分类并列出产品。然而,如果 LLM 用于生成文本,而不仅仅是分类问题的答案呢?接下来,我们将探讨如何评估这种类型的 LLM 输出的方法。

2023-10-03 10:50:37 701

原创 【Java-LangChain:使用 ChatGPT API 搭建系统-9】评估(上)-存在一个简单的正确答案时

在之前的章节中,我们展示了如何使用 LLM 构建应用程序,包括评估输入、处理输入以及在向用户显示输出之前进行最终输出检查。构建这样的系统后,如何知道它的工作情况?甚至在部署后并让用户使用它时,如何跟踪它的运行情况,发现任何缺陷,并持续改进系统的答案质量?在本章中,我们想与您分享一些最佳实践,用于评估 LLM 的输出。构建基于 LLM 的应用程序与传统的监督学习应用程序有所不同。由于可以快速构建基于 LLM 的应用程序,因此评估方法通常不从测试集开始。相反,通常会逐渐建立一组测试示例。

2023-10-03 10:50:01 432

原创 【Java-LangChain:使用 ChatGPT API 搭建系统-8】搭建一个带评估的端到端问答系统

在本章中,我们将搭建一个带评估的端到端问答系统,这个系统综合了之前多节课的内容,并加入了评估过程。检查输入,确认其是否能通过审核 API 的审核。如果通过了审核,我们将查找产品列表。如果找到了产品,我们将尝试查找它们的相关信息。我们使用模型回答用户提出的问题。我们将通过审核 API 对生成的答案进行审核。如果没有被标记为有害的,我们将把答案返回给用户。

2023-10-03 10:49:23 506 2

原创 【Java-LangChain:使用 ChatGPT API 搭建系统-7】检查结果

在本章中,我们将重点如何检查系统生成的输出。在向用户展示输出之前,检查输出的质量、相关性和安全性对于确保提供的回应非常重要,无论是在自动化流程中还是其他场景中。我们将学习如何使用审查 API 来评估输出,并探讨如何使用额外的 Prompt 来提升模型在展示输出之前的质量评估。

2023-10-03 10:48:49 136

原创 【Java-LangChain:使用 ChatGPT API 搭建系统-6】处理输入-链式 Prompt Chaining Prompts

在本章中,我们将学习如何通过将复杂任务拆分为一系列简单的子任务来链接多个 Prompt。您可能会想,为什么要将任务拆分为多个 Prompt,而不是像我们在上一个视频中学习的那样,使用思维链推理一次性完成呢?我们已经证明了语言模型非常擅长遵循复杂的指令,特别是像 GPT-4 这样的高级模型。那么让我们用两个比喻来解释为什么我们要这样做,来比较思维链推理和链式 Prompt。将任务拆分为多个 Prompt 的第一个比喻是一次性烹饪复杂菜肴与分阶段烹饪的区别。

2023-10-03 10:48:09 950

原创 【Java-LangChain:使用 ChatGPT API 搭建系统-5】处理输入-思维链推理

在本章中,我们将专注于处理输入,即通过一系列步骤生成有用地输出。有时,模型在回答特定问题之前需要进行详细地推理。如果您参加过我们之前的课程,您将看到许多这样的例子。有时,模型可能会因为过于匆忙得出结论而在推理过程中出错。因此,我们可以重新构思查询,要求模型在给出最终答案之前提供一系列相关的推理步骤,这样它就可以更长时间、更深入地思考问题。通常,我们称这种要求模型逐步推理问题的策略为思维链推理。

2023-10-03 10:47:28 489

原创 【Java-LangChain:使用 ChatGPT API 搭建系统-4】评估输入-分类

如果您正在构建一个允许用户输入信息的系统,首先要确保人们在负责任地使用系统,以及他们没有试图以某种方式滥用系统,这是非常重要的。在本章中,我们将介绍几种策略来实现这一目标。我们将学习如何使用 OpenAI 的 Moderation API 来进行内容审查,以及如何使用不同的 Prompt 来检测 Prompt 注入(Prompt injections)。

2023-10-03 10:46:52 1855 2

原创 【Java-LangChain:使用 ChatGPT API 搭建系统-3】评估输入-分类

在本章中,我们将重点讨论评估输入任务,这对于确保系统的质量和安全性至关重要。对于需要处理不同情况下的许多独立指令集的任务,首先对查询类型进行分类,并以此为基础确定要使用哪些指令,具有诸多益处。这可以通过定义固定的类别和 hard-coding 与处理给定类别任务相关的指令来实现。例如,在构建客户服务助手时,首先对查询类型进行分类,然后根据该分类确定要使用哪些指令,这一点可能非常重要。举个具体的例子,如果用户要求关闭其帐户,那么二级指令可能是添加有关如何关闭账户的额外说明;

2023-10-03 10:46:15 537

原创 【Java-LangChain:使用 ChatGPT API 搭建系统-2】语言模型,提问范式与 Token

在本章中,我们将和您分享大型语言模型(LLM)的工作原理、训练方式以及分词器(tokenizer)等细节对 LLM 输出的影响。我们还将介绍 LLM 的提问范式(chat format),这是一种指定系统消息(system message)和用户消息(user message)的方式,让您了解如何利用这种能力。

2023-10-03 10:44:18 1612

原创 【Java-LangChain:使用 ChatGPT API 搭建系统-1】简介

本课程以构建客服助手为例,使用不同的 Prompt 链式调用语言模型,具体的 Prompt 选择将取决于上一次调用的输出结果,有时还需要从外部来源查找信息。欢迎来到课程《使用 ChatGPT API 搭建系统》 , 旨在指导开发者如何基于 ChatGPT 搭建完整的智能问答系统。使用 ChatGPT 不仅仅是一个单一的 Prompt 或单一的模型调用,本课程将分享使用 LLM 构建复杂应用的最佳实践。本课程将围绕该主题,逐步了解应用程序内部的构建步骤,并分享在长期视角下系统评估和持续改进方面的最佳实践。

2023-10-03 10:43:15 578

原创 【Java-LangChain:面向开发者的提示工程-8】聊天机器人

使用一个大型语言模型的一个令人兴奋的事情是,我们可以用它来构建一个定制的聊天机器人 (Chatbot) ,只需要很少的工作量。在这一节中,我们将探索如何利用聊天的方式,与个性化(或专门针对特定任务或行为的)聊天机器人进行扩展对话。像 ChatGPT 这样的聊天模型实际上是组装成以一系列消息作为输入,并返回一个模型生成的消息作为输出的。这种聊天格式原本的设计目标是简便多轮对话,但我们通过之前的学习可以知道,它对于不会涉及任何对话的单轮任务也同样有用。

2023-10-02 19:04:23 479

原创 【Java-LangChain:面向开发者的提示工程-7】文本扩展

扩展是将短文本(例如一组说明或主题列表)输入到大型语言模型中,让模型生成更长的文本(例如基于某个主题的电子邮件或论文)。这种应用是一把双刃剑,好处例如将大型语言模型用作头脑风暴的伙伴;但也存在问题,例如某人可能会使用它来生成大量垃圾邮件。因此,当你使用大型语言模型的这些功能时,请仅以负责任 (responsible) 和有益于人们 (helps people) 的方式使用它们。在本章中,你将学会如何基于 OpenAI API 生成针对每位客户评价优化的客服电子邮件。

2023-10-02 19:03:49 136

原创 【Java-LangChain:面向开发者的提示工程-6】文本转换

LLM非常擅长将输入转换成不同的格式,典型应用包括多语种文本翻译、拼写及语法纠正、语气调整、格式转换等。本章节将介绍如何使用编程的方式,调用API接口来实现“文本转换”功能。

2023-10-02 19:02:41 195

原创 【Java-LangChain:面向开发者的提示工程-5】推断

推断任务可以看作是模型接收文本作为输入,并执行某种分析的过程。其中涉及提取标签、提取实体、理解文本情感等等。如果你想要从一段文本中提取正面或负面情感,在传统的机器学习工作流程中,需要收集标签数据集、训练模型、确定如何在云端部署模型并进行推断。这样做可能效果还不错,但是执行全流程需要很多工作。而且对于每个任务,如情感分析、提取实体等等,都需要训练和部署单独的模型。LLM 的一个非常好的特点是,对于许多这样的任务,你只需要编写一个 Prompt 即可开始产出结果,而不需要进行大量的工作。

2023-10-02 19:02:03 152

【Elasticsearch核心技术与实战】学习笔记脑图

【Elasticsearch核心技术与实战】学习笔记脑图 极客时间上的课程,完整的学习脑图,方便大家复习

2023-11-26

Elastic 认证专家考试(ECE),复习大纲包含模拟试题(最新8.1)

Elastic 认证专家考试(ECE)版本号升级为 8.1 版本,内容: 集群 索引 分片(Shards) 分词器(Text Analysis) 映射(Mappings) 检索(DSL) 模板类(Template) 聚合查询(Aggregations) 脚本查询(Scripting) 集群安全(Security) 评分和排序(Score&nbsp;and&nbsp;Sorted) 管道(Pipeline) 数据(Data)

2023-01-24

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除