首页
统计
关于
Search
1
Sealos3.0离线部署K8s集群
1,308 阅读
2
类的加载
864 阅读
3
Spring Cloud OAuth2.0
857 阅读
4
SpringBoot自动装配原理
747 阅读
5
集合不安全问题
646 阅读
笔记
Java
多线程
注解和反射
JVM
JUC
设计模式
Mybatis
Spring
SpringMVC
SpringBoot
MyBatis-Plus
Elastic Search
微服务
Dubbo
Zookeeper
SpringCloud
Nacos
Sentinel
数据库
MySQL
Oracle
PostgreSQL
Redis
MongoDB
工作流
Activiti7
Camunda
消息队列
RabbitMQ
前端
HTML5
CSS
CSS3
JavaScript
jQuery
Vue2
Vue3
Canvas
Linux
容器
Docker
Containerd
Podman
Kubernetes
Python
FastApi
OpenCV
数据分析
牛牛生活
登录
Search
标签搜索
Java
CSS
mysql
RabbitMQ
JavaScript
Redis
OpenCV
JVM
Mybatis-Plus
Camunda
多线程
CSS3
Python
Canvas
Spring Cloud
注解和反射
Activiti
工作流
SpringBoot
ndarray
蘇阿細
累计撰写
452
篇文章
累计收到
4
条评论
首页
栏目
笔记
Java
多线程
注解和反射
JVM
JUC
设计模式
Mybatis
Spring
SpringMVC
SpringBoot
MyBatis-Plus
Elastic Search
微服务
Dubbo
Zookeeper
SpringCloud
Nacos
Sentinel
数据库
MySQL
Oracle
PostgreSQL
Redis
MongoDB
工作流
Activiti7
Camunda
消息队列
RabbitMQ
前端
HTML5
CSS
CSS3
JavaScript
jQuery
Vue2
Vue3
Canvas
Linux
容器
Docker
Containerd
Podman
Kubernetes
Python
FastApi
OpenCV
数据分析
牛牛生活
页面
统计
关于
搜索到
452
篇与
的结果
2021-09-05
Oracle CONNECT BY PRIOR函数的使用
语法{ SELECT demo01,demo02,demo03 FROM demotable START WITH [condition] CONNECT BY [NOCYCLE] PRIOR [CONDITION] }创建表--建表 CREATE TABLE employee( emp_id NUMBER(18), lead_id NUMBER(18), emp_name VARCHAR2(50), salary NUMBER(10,2), dept_no VARCHAR2(11) ); --插入数据 insert into employee values('1',0,'孙笑川','9999.00','001'); insert into employee values('2',1,'刘波','8888.00','002'); insert into employee values('3',1,'Giao哥','7777.00','003'); insert into employee values('4',2,'卢本伟','6666.00','002'); insert into employee values('5',2,'药水哥','5555.00','002'); insert into employee values('6',3,'伞兵一号','3333.00','003'); insert into employee values('7',3,'老中医','4444.00','003'); commit;查询以emp_id为0开始的节点的所有直属节点--查询以emp_id为0开始的节点的所有直属节点 SELECT emp_id,lead_id,emp_name,prior emp_name as lead_name,salary FROM EMPLOYEE START WITH emp_id=1 CONNECT BY PRIOR emp_id=lead_id;level格式化层级--level格式化层级 SELECT LPAD(' ', LEVEL*2, ' ')||emp_name as name,emp_id,lead_id,salary,level FROM employee START WITH lead_id=0 CONNECT BY PRIOR emp_id=lead_id;查找根节点CONNECT_BY_ROOT--查找根节点CONNECT_BY_ROOT SELECT CONNECT_BY_ROOT emp_name as root,emp_name,lead_id,salary FROM employee START WITH lead_id=0 CONNECT BY PRIOR emp_id=lead_id;标注循环行CONNECT_BY_ISCYCLE--标注循环行CONNECT_BY_ISCYCLE INSERT INTO employee VALUES('3', 7, '老中医1号', '15000.00', '003'); commit; SELECT emp_id,emp_name,lead_id,salary,CONNECT_BY_ISCYCLE FROM employee START WITH lead_id=0 CONNECT BY NOCYCLE PRIOR emp_id=lead_id;判断是否为叶子节点CONNECT_BY_ISLEAF--判断是否为叶子节点CONNECT_BY_ISLEAF SELECT emp_id,emp_name,lead_id,salary,CONNECT_BY_ISLEAF from employee START WITH lead_id=0 CONNECT BY NOCYCLE PRIOR emp_id=lead_id;
2021年09月05日
340 阅读
0 评论
0 点赞
2021-08-23
类的加载
加载将class字节码文件加载到内存中,并将这些静态数据转换为方法区的运行时数据结构,然后生成一个代表这个类的java.lang.Class对象链接将Java类的二进制代码合并到JVM的运行状态之中的过程验证:确保加载的类信息符合JVM规范准备:正式为类变量(static)分配内存并设置类变量默认初始值的阶段,这些内存都将在方法区中进行分配解析:虚拟机常量池内的符号引用(常量名)替换为直接引用(地址)的过程初始化执行类构造器<clinit>()方法的过程,类构造器<clinit>()方法是由编译器自动收集类中所有类变量的赋值动作和静态代码块中的赋值语句产生的。(类构造器构造类的信息,不是构造该类对象的构造器)当初始化一个类的时候,如果发现其父类还没有进行初始化,则需要先触发其父类的初始化虚拟机会保证一个类的<clinit>()方法在多线程环境中被正确加锁和同步
2021年08月23日
864 阅读
0 评论
0 点赞
2021-05-12
关于文档的基本操作
基本操作1、添加数据PUT /test01/user/1 { "name": "孙笑川", "age": 33, "birth": "2021-05-10", "tags": ["抽象","带师兄"] }2、获取数据GET /test01/user/13、更新数据 PUT4、POST 更新(推荐使用)5、搜索简单搜索复杂搜索select(排序,分页,高亮,模糊查询,精准查询)//查询参数体使用json构建 GET test01/user/_search { "query": { "match": { "name": "孙笑川" } } }结果过滤:排序:GET test01/user/_search { "query": { "match": { "name": "孙笑川" } }, "sort": [ { "age": { "order": "asc" } } ] }分页: //from等同于pageNum //size等同于pageSize GET test01/user/_search { "query": { "match": { "name": "孙笑川" } }, "sort": [ { "age": { "order": "asc" } } ], "from": 0, "size": 5 }布尔值多条件查询:must (and) 所有的条件都要匹配 where id = 1 and age = 10should (or) 条件匹配 where id = 1 or age = 10must_not (not)过滤器 filtergt # 大于 gte # 大于等于 lt # 小于 lte # 小于等于匹配多个条件精确查询term 通过倒排索引指定的词条进行精确查询分词term 直接精确查询match 查询时会使用分词器解析(先分析文档,再通过分析的文档进行查询)两个类型 text(会被分词器解析) keyword(不会被分词器解析)PUT test02 { "mappings": { "properties": { "name": { "type": "text" }, "desc": { "type": "keyword" } } } } PUT test02/_doc/1 { "name": "text keyword字段类型测试", "desc": "text keyword字段类型测试 desc" } PUT test02/_doc/2 { "name": "text keyword字段类型测试", "desc": "text keyword字段类型测试 desc02" } GET _analyze { "analyzer": "keyword", "text": "text keyword字段类型测试" } GET _analyze { "analyzer": "standard", "text": "text keyword字段类型测试" } GET test02/_search { "query": { "term": { "name": "测" } } } GET test02/_search { "query": { "term": { "desc": "text keyword字段类型测试 desc" } } } PUT test02/_doc/3 { "t1": "11", "t2": "2021-05-11" } PUT test02/_doc/4 { "t1": "22", "t2": "2021-05-11" } GET test02/_search { "query": { "bool": { "should": [ { "term": { "t1": "11" } }, { "term": { "t1": "22" } } ] } } }多个值匹配的精确查询高亮查询自定义高亮格式
2021年05月12日
285 阅读
0 评论
0 点赞
2021-05-12
关于索引的基本操作
1、创建一个索引PUT /索引名/类型名/文档id2、字段类型字符串:text、keyword数值:long、integer、short、byte、double、float、half float、scaled float日期:date布尔值:boolean二进制:binary3、指定字段的类型4、通过GET请求得到具体的信息5、查看默认的信息注:如果在文档中没有指定具体的字段,es会默认配置字段类型6、扩展通过GET _cat/获取es的信息7、修改PUTPOST8、删除索引DELETE /test 删除索引 DELETE /test/_doc/1 删除具体的文档
2021年05月12日
125 阅读
0 评论
0 点赞
2021-05-12
IK分词器
概述:把一段文字划分为一个个的关键字,我们在搜索时会把自己的信息进行分词,会把数据库中或索引库中的数据进行分词,然后进行匹配操作,默认的中文分词是将一个字看作一个词,如:你好谢谢,“你”,“好”,“谢”,“谢”,这种分词方式显然是不合理的,需要IK中文分词器来解决该问题。IK提供了ik_smart,ik_max_word两种分词算法不同的分词效果ik_smart 最少切分ik_max_word 最细粒度划分Ik分词器增加自己的配置重启es并测试
2021年05月12日
286 阅读
0 评论
0 点赞
2021-05-12
ElasticSearch相关概念
es与关系型数据库对比Relational DBElastic Search数据库(database)索引(indices)表(table)types(类型)(es8.0弃用)行(rows)documents(文档)字段(columns)fieldses(集群)中可以包含多个索引(数据库),每个索引中可以包含多个类型(表),每个类型下又包含多个文档(行),每个文档又包含多个字段(列)。物理设计:es在后台把每个索引划分成多个分片,每份分片可以在集群中的不同服务器间迁移逻辑设计:一个索引类型中包含多个文档,例如:文档1、文档2,当要搜索一篇文档时,大致流程为:索引 ---> 类型 ---> 文档ID(ID不必是整数,实际上是一个字符串)文档es是面向文档的,也就是说索引和搜索数据的最小单位是文档,其包含有几个重要属性:自我包含,一篇文档同时包含字段和对应的值,即key:value层次型的:一个文档中包含自文档(json对象,fastjson进行自动转换)灵活的结构:文档不依赖预先定义的模式,在关系型数据库中,要提前定义字段才能使用,而在es中,可以忽略一个字段或动态的添加一个新的字段在es中,每个字段的类型非常重要,它会保存字段和类型之间的映射及其他的设置,这种映射具体到每个映射的每种类型,这也是为什么在es中,类型有时候也称为映射类型类型类型是文档的逻辑容器(就像关系型数据库,表格是行的容器),类型中对于字段的定义称为映射,比如name映射为字符串类型。先定义好字段,再使用索引es中的索引就是数据库,索引是映射类型的容器,是一个非常大的文档集合,存储映射类型和其他设置,再被存放到各个分片上物理设计:节点和分片如何工作一个集群至少有一个节点,而一个节点就是一个es进程,创建索引时,默认5个分片(primary shard,主分片),每一个主分片会有一个副本(replica shard,复制分片)以上图3个节点的集群为例,可以看出主分片和对应的复制分片都不会在同一个节点内,可以避免级联故障。实际上,一个分片是一个Lucence索引,一个包含倒排索引的文件目录,倒排索引使得es可以在不扫描全部文档的情况下,检索出需要的内容。倒排索引es使用的是倒排索引结构,采用Lucence倒排索引作为底层。这种结构适用于快速全文搜索,一个索引由文档中所有不同的列表构成,对于每一个词,都有一个包含它的文档列表。例1:现在有两个文档,每个文档包含以下内容:# 文档1 Study every day,good good up to forever # 文档2 To forever,study every day, good good up为了创建倒排索引,先要将每个文档拆分成独立的词(或称为词条、tokens),然后创建一个包含所有不重复的词条的排序列表 文档1文档2Study√×To×√every√√forever√√day√√study×√good√√every√√to√×up√√现在试图搜索to forever,只需要查看包含每个词条的文档 文档1文档2to√×forever√√total21两个文档都匹配,但第一个文档比第二个文档匹配度更高,没有别的条件时,返回这两个包含关键字的文档例2:通过博客标签来搜索博客文章现搜索包含python标签的文章,相较于搜索原始数据,现只需要搜索标签这一栏,即可更快的获取文章id
2021年05月12日
145 阅读
0 评论
0 点赞
2021-05-12
Elastic Search
一、概述Elastic Search简称es,是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据,可以使用java开发并使用Lucence作为其核心来实现所有索引和搜索的功能,其目的是通过简单的RESTfull API来隐藏Lucence的复杂性,从而让全文搜索变得简单。二、ELKELK是Elastic Search、Logstash、Kibana的首字母简称,也成为Elastic Stack。其中Elastic Search是一个基于Lucence、分布式、通过Restfull方式进行交互的近实时搜索平台框架;Logstash是ELK的中央数据流引擎,用于从不同目标(文件/数据存储/MQ)收集的不同格式数据,经过过滤后支持输出到不同目的地(文件/MQ/rdis/elasticsearch/Kafka等);Kibana可以将elasticsearch的数据通过友好的页面展示出来。提供实时分析的功能。三、安装1、elasticsearch官网地址:https://www.elastic.co/cn/elasticsearch/# 跨域问题须在/config/elasticsearch.yml配置文件末尾添加 http.cors.enabled: true http.cors.allow-origin: "*"2、Kibana官网地址:https://www.elastic.co/cn/kibana注意:es和kibana的版本必须一致
2021年05月12日
84 阅读
0 评论
0 点赞
2021-05-05
Seata分布式事务原理
1、TM开启分布式事务(TM向TC注册全局事务)2、按业务场景,编排数据库、服务等事务内的资源(RM向TC汇报资源准备状态)3、TM结束分布式事务,事务一阶段结束(TM通知TC提交/回滚)4、TC汇总事务信息,决定最终是提交还是回滚事务5、TC通知所有RM提交/回滚 资源,事务二阶段结束Seata提供了四个模式:AT、TCC、SAGA、XAAT模式两阶段提交协议的演变:一阶段:业务数据和回滚日志记录在同一个本地事务中提交,释放本地锁和连接资源二阶段:提交异步化(能快速完成);回滚通过一阶段的回滚日志进行反向补偿一阶段:在一阶段,seata会拦截“业务SQL”:1、解析SQL语义,找到“业务SQL”要更新的业务数据,在业务数据被更新前,将其保存为before image2、执行“业务SQL”更新业务数据,更新之后将业务数据保存为after image3、最后生成行锁以上操作全部在一个数据库事务内完成,保证了一阶段操作的原子性二阶段:1、成功提交二阶段正常执行的话,只需将一阶段保存的快照数据和行锁删除,即可完成数据清理,因为“业务SQl”在一阶段已经在提交至数据库2、事务回滚二阶段如果出现异常,需要事务回滚,seata就需要回滚一阶段已经执行的“业务SQL”,还原业务数据;回滚方式使用before image还原业务数据,在还原之前需要做校验脏写,对比数据库当前的业务数据和after image数据快照,如果两份数据完全一致,就说明没有脏写,执行还原操作,如果不一致,就需要转人工处理
2021年05月05日
76 阅读
0 评论
0 点赞
1
...
27
28
29
...
57