- 博客(60)
- 收藏
- 关注
原创 elasticsearch搜索关键字高亮显示
使用 elasticsearch 时,有一个很常见的需求是,能在页面上将搜索出的结果中属于关键字的文字,进行高亮显示。elasticsearch 对这个做了一定的支持,它能查询结果的基础上,额外返回需要高亮显示关键字的整个文本,至于具体你想怎么用它,需要根据业务自行实现。http 请求体方式在查询的时候,增加参数highlight,pre_tags,post_tags。highlight 中添加需要进行高亮展示关键字的字段。GET /data_collect/_search{ ...
2022-04-29 14:40:22
4671
原创 elasticsearch基本原理学习记录
Elasticsearch 是一个搜索引擎,我们用它来存储海量数据,并且在非常短的时间内查询到我们想要的信息。基本角色集群架构JVM配置
2022-04-08 10:23:24
1666
原创 elasticsearch IK分词器的安装、使用与扩展
ES 的默认分词器(standard)不支持中文分词,满足不了平时的需求,所以需要用能够支持中文分词的 IK 分词器。而且 IK 分词器也是支持英文分词的。本文介绍下IK分词器的安装、基本使用方法;专有名词、同义词的使用;英文驼峰分词的实现。下载与安装中文IK分词器下载地址:https://github.com/medcl/elasticsearch-analysis-ik/releases选择一个版本下载,然后解压。 在 elasticsearch 的 plugins 目录中新建文件夹
2022-04-01 17:26:29
6583
原创 springboot集成elasticsearch
本文简单记录下springboot集成elasticsearch7.x的方法引入maven依赖这里放弃了使用spring-boot-starter-data-elasticsearch(这个可能会受springboot版本和elasticsearch版本影响),而是直接使用rest-high-level-client。<dependency> <groupId>org.elasticsearch</groupId> <artifactId>e
2022-03-31 16:22:08
4105
原创 mybatis二级缓存架构原理
一级缓存与springboot集成时一级缓存不生效原因以及解决方案如何解决这个问题?要知道如何解决这个问题,二级缓存为什么mybatis默认不开启二级缓存?不推荐使用。...
2022-03-17 12:07:41
3587
3
原创 通过shardingsphere实现mysql数据库的读写分离
上一篇文件通过docker部署了mysql主从数据库:docker方式部署mysql主从架构_修理男爵的博客-优快云博客本文介绍下java代码中如何连接并使用mysql主从数据库,实现读写分离。mybatis-plus 持久层框架 sharding-jdbc shardingsphere核心三套件之一,定位为在客户端使用的插件。 可以实现读写分离,分库分表等功能。 shardingsphere简介shardingsphere核心三套件
2022-03-10 13:23:47
910
原创 docker方式部署mysql主从架构
本文通过docker来部署mysql一主一从(M-S)架构。拉取镜像直接去dockerhub上找一个最新的mysql5.7版本的镜像,然后拉取下来docker pull mysql:5.7.37在宿主机上创建好目录mkdir -p /usr/local/mysql/master/datamkdir -p /usr/local/mysql/master/confmkdir -p /usr/local/mysql/slave/datamkdir -p /usr/local/mys
2022-03-08 19:34:39
1587
6
原创 dubbo原理与核心功能
Dubbo 是一款微服务开发框架,它提供了【RPC通信】与【微服务治理】两大关键能力。Dubbo 可以实现负载均衡、流量调度等服务治理等功能。RPC远程过程调用dubbo接口调用基本原理基本原理服务注册服务提供者(provider)在启动时,会往注册中心(registry)进行注册。服务订阅&通知服务消费者(consumer)启动时,会自动去注册中心获取所有已注册的服务信息,并缓存在本地。当服务提供者发生改变时,注册中心会通知消费者。服务调用D
2022-03-02 20:47:14
2888
原创 Netty线程模型与核心功能
netty线程模型netty 是对 NIO 的一种封装,特点是异步非阻塞,这点和 NIO 不同。服务端代码实现public class NettyServer { public static void main(String[] args) { // 1、定义server启动类 ServerBootstrap serverBootstrap = new ServerBootstrap(); // 2、定义工作组: boss负责处理客
2022-02-28 20:20:00
1803
原创 并发编程之Executor线程池原理与源码解读
线程池就是一个线程缓存。为什么要使用线程池?在web开发中,服务器需要接受并处理请求,所以会为一个请求来分配一个线程来进行处理。如果每次请求都新创建一个线程的话,实现起来非常简便,但是存在一个问题:如果并发的请求数量非常多,但每个线程执行的时间很短,这样就会频繁的创建和销毁线程,如此一来会大大降低系统的效率。可能出现服务器在为每个请求创建新线程和销毁线程上花费的时间和消耗的系统资源要比处理实际的用户请求的时间和资源更多。因为线程的创建和销毁是非常消耗时间和系统资源的!为了解决这个问题,引入了
2022-02-15 20:49:52
263
原创 kubeflow 1.2.0安装
自定义安装显然,不可能如此简单就安装成功,在国内很多镜像或文件下载不了kfctl_k8s_istio.v1.2.0.yaml 中最后这个manifests-1.2.0.tar.gz,在我服务器上就访问不了这时需要手动下载下来,放到自己的 ftp 服务器上。然后修改kfctl_k8s_istio.v1.2.0.yaml 中的 uri 为自己的 ftp 上此文件的地址,否在无法 build 成功。修改完之后,就可以开始 build 了:kfctl build -V -f ...
2022-01-26 10:23:57
5114
原创 并发编程之AQS详解
Java并发编程核心在于java.util.concurrent包(简称juc)。这整个包的作者都是:doug lea什么是AQSAQS 是 AbstractQueuedSynchronizer 的简称。AbstractQueuedSynchronizer 是一个抽象类。在 juc 中,常用的那些类(例如ReentrantLock、CountDownLatch、Semaphore),内部都维护了一个Sync对象(同步器),而 Sync 就是继承了 AbstractQueuedSynchron
2022-01-25 17:22:13
511
原创 并发编程之synchronized关键字
本文介绍下java并发编程中常用的锁与synchronized关键字。同步器多线程编程中,有可能会出现多个线程同时访问同一个共享、可变资源的情况,这个资源我们称之其为临界资源。这种资源可能是:对象、变量、文件等。共享:资源可以由多个线程同时访问 可变:资源可以在其生命周期内被修改由于线程执行的过程是不可控的,所以需要采用同步机制来协同对对象可变状态的访问。那么怎么解决线程并发安全问题呢? 实际上,所有的并发模式在解决线程安全问题时,采用的方案都是序列化访问临界资源。即在同一时刻,只能有.
2022-01-19 19:47:37
439
原创 并发编程之volatile关键字
volatile作用并发编程三大特性:可见性、有序性。原子性volatile关键字保证可见性与有序性,但是不能保证原子性,要保证原子性需要借助synchronized、Lock锁机制。可见性:保证被volatile修饰的共享变量对所有线程总数可见的,也就是当一个线程修改了一个被volatile修饰共享变量的值,新值总是可以被其他线程立即得知 有序性:禁止指令重排序优化volatile缓存可见性实现原理从两个方面来解释:1)JMM内存交互层面volatile修饰的变量的read..
2022-01-11 18:44:56
660
原创 并发编程之JMM(Java内存模型)
什么是JMMJMM 即 Java内存模型(Java Memory Model),一种抽象的概念,并不真实存在。JMM与JVM内存区域模型的区别JMM与JVM内存区域的划分是不同的概念层次。JMM与硬件内存架构的关系实际上,多线程的执行最终都会映射到硬件处理器上进行执行,但Java内存模型和硬件内存架构并不完全一致。硬件内存:分为寄存器、CPU缓存、主内存 JMM:分为工作内存(线程私有数据区域)和主内存(堆内存)也就是说:JMM对内存的划分对硬件内存并没有任何影响,因为JMM..
2022-01-11 09:45:04
1351
1
原创 并发编程之MESI缓存一致性协议
MESI缓存一致性协议,用于解决多线程环境下的缓存一致性问题。缓存一致性问题在多处理器系统中,每个处理器都有自己的高速缓存,而它们又共享同一主内存。当多个处理器的运算任务都涉及同一块主内存区域时,将可能导致各自的缓存数据不一致的情况,如果真的发生这种情况,那同步回主内存时以谁的缓存数据为准呢?!这个就是缓存一致性问题。为了解决一致性的问题,需要各个处理器访问缓存时都遵循一些协议,在读写时要根据协议来进行操作。主要使用的协议是:MESI缓存一致性协议。缓存行(Cache line)CPU缓
2022-01-10 22:28:09
723
原创 通过阿里云容器镜像服务下载谷歌gcr.io镜像
容器镜像服务创建个人实例要使用阿里云的容器镜像服务,首先需要创建一个【个人实例】,这个比较简单。创建命名空间创建命名空间,这个就更简单了绑定代码源我绑定的是Gibhub,这里只需要选择Github账号就行了设置访问凭证(密码)设置一个用于登录镜像仓库的密码创建镜像仓库前面的步骤准备好之后,可以创建镜像仓库了点击下一步进入代码源界面,选择一个自己的代码仓库,记得勾选【海外机器构建】例如我的仓库:GitHub - xujingyissa/k..
2022-01-10 14:54:53
2415
原创 并发编程之什么是线程
什么是线程现代操作系统在运行一个程序时,会为其创建一个【进程】。例如,启动一个Java程序,操作系统就会创建一个Java进程。现代操作系统调度CPU的最小单元是线程,也叫轻量级进程(Light Weight Process)。在一个进程里可以创建多个线程,这些线程都拥有各自的计数器、堆栈和局部变量等属性,并且能够访问共享的内存变量。处理器在这些线程上高速切换,让使用者感觉到这些线程在同时执行。线程的实现可以分为两类:用户级线程(User-Level Thread) 内核线线程(Kernel..
2022-01-07 09:10:57
152
原创 并发编程之现代计算机理论模型与工作原理
现代计算机模型是基于-冯诺依曼计算机模型冯诺依曼计算机模型模型图计算机在运行时,先从内存中取出第一条指令,通过控制器的译码,按指令的要求,从存储器中取出数据进行指定的运算和逻辑操作等加工,然后再按地址把结果送到内存中去。接下来,再取出第二条指令,在控制器的指挥下完成规定操作。依此进行下去,直至遇到停止指令。程序与数据一样存储,按程序编排的顺序,一步一步地取出指令,自动地完成指令规定的操作,是计算机最基本的工作模型。这一原理最初是由美籍匈牙利数学家冯.诺依曼于1945年提出来的,故称为冯.
2021-12-28 09:54:46
394
原创 JVM垃圾回收算法与垃圾收集器
垃圾回收算法是内存回收的方法论,而垃圾收集器是内存回收的具体实现。垃圾回收算法主要包含4 种垃圾回收算法标记-清除算法分为【标记】和【清除】两个阶段:首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象。"标记-清除算法"是最基础的收集算法,效率也很高,但是会带来两个明显的问题:效率问题 空间问题(标记清除后会产生大量不连续的碎片)复制算法为了解决效率问题,“复制”收集算法出现了。它将内存分为大小相同的两块,每次使用其中的一块。当这一块的内存使...
2021-12-23 11:51:35
383
原创 Java虚拟机之内存结构
JVM内存模型(运行时数据区)程序计数器 (线程私有)Program Counter Register并非广义上所指的物理寄存器,而是对物理PC寄存器的一种抽象模拟。用来存储执行下一条要执行的指令的地址,也就是将要执行的指令代码, 由执行引擎读取下一条指令。是一块很小的内存空间,小到可以忽略不计线程私有,生命周期也和线程保持一致任何时间,一个线程只有一个方法在执行,叫做当前方法。程序计数器会存储当前线程执行的方法的JVM指令地址;或者如果执行的是native方法,则是未指定值..
2021-12-20 21:51:10
393
原创 JVM判断对象是否可以被回收
引用计数法给对象中添加一个引用计数器每当有一个地方引用它,计数器就加1; 当引用失效,计数器就减1; 任何时候计数器为0的对象就是不可能再被使用的。这个方法实现简单,效率高,但是目前主流的虚拟机中并没有选择这个算法来管理内存,其最主要的原因是它很难解决对象之间相互循环引用的问题。GC Roots介绍可达性分析算法前,首先需要了解下 GC Roots。哪些对象可以作为 GC Roots?可达性分析算法可达性分析算法可以解决循环引用的问题。基本思想:通过一系列的称为
2021-12-20 17:10:25
294
原创 JVM内存分配与回收机制
Minor GC 和 Full GCMinor GC(Young GC):指发生新生代的的垃圾收集动作,Minor GC 非常频繁,回收速度一般也比较快。 Full GC(Major GC):一般会回收老年代,年轻代,方法区的垃圾, Full GC的 速度一般会比 Minor GC 的慢10倍以上。对象优先在Eden区分配大多数情况下,对象在新生代中 Eden 区分配。当 Eden 区没有足够空间进行分配时,虚拟机将发起一次 Minor GC。先看一个示例:jvm参数设置:...
2021-12-16 17:02:06
1000
原创 Java虚拟机之类装载子系统
java虚拟机组成Java虚拟机由三部分组成:运行时数据区,类装载子系统,字节码执行引擎。类装载子系统负责把一个类(.class)加载到运行时数据区中;类加载机制一般自己写的类,是在使用到时(new xxx()),才会加载到内存中去。类加载指的是:将字节码文件(.class),加载到jvm运行时数据区。加载 ->验证 ->准备 ->解析->初始化加载通过一个类的【全限定名】获取定义此类的【二进制字节流】 将这个二进制字节流所代表的...
2021-12-14 15:48:31
937
1
原创 通过kubernetes部署netron服务并在启动时指定模型文件
ingress方式部署nginx.ingress.kubernetes.io/ssl-redirect: "false"
2021-12-13 15:49:07
1367
原创 java同时监听多个目录的变化
有的时候,可能需要在后台监听服务器上某个目录的变化。比如,往某个目录上传一些文件,后台监听到这些新增的文件后,做一些处理。apache commons-io 包中的 FileAlterationListenerAdaptor 就是用来实现这个监听功能的。springboot工程启动时开启监听要实现监听功能,那么在工程启动时,就要开启监听。这可以通过实现 ApplicationRunner 接口,并重新它的 run() 方法来实现。/** * ApplicationRunner 是一个
2021-12-08 10:32:09
1532
原创 java+vue+websocket实现实时获取kubernetes pod日志并展示
dfghnfd场景现在有这样一个场景:用户会在平台上创建任务跑算法训练,启动任务后,后台会通过kubernetes来创建一个容器跑训练任务。需要在页面上能实时展示训练任务的日志。由于日志是不断在产生的,而页面上也需要实时自动刷新最新日志,所以需要使用到 websocket。如图所示,目的是要实时获取这个pod的日志并在页面上展示,且能自动刷新日志。jobName:train-new-testpodName:train-new-test-zsn9hfabric8 kubernete
2021-12-07 13:51:22
5320
8
原创 Mysql 锁与事务隔离级别简单介绍
当前读 & 快照读 当前读 读取的是记录的最新版本,读取时还要保证其他并发事务不能修改当前记录,会对读取的记录进行加锁; select lock in share mode (共享锁)、select for update、update、insert、delete (排他锁); 快照读 不加锁的 select 操作就是快照读,即不加锁的非阻塞读; 快照读的实现是基于多版本并发控制,即 MVCC ,可以认为 MVCC 是行锁的一个变种,但它在很多情况下,避免了加锁操作,降
2021-12-06 09:54:47
352
原创 Mysql索引优化学习记录
初始化数据CREATE TABLE `employees` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(24) NOT NULL DEFAULT '' COMMENT '姓名', `age` int(11) NOT NULL DEFAULT '0' COMMENT '年龄', `position` varchar(20) NOT NULL DEFAULT '' COMMENT '职位', `hire_time` ti...
2021-12-01 19:15:00
828
原创 Mysql索引原理
索引是帮助mysql高效获取数据的排好序的数据结构。二叉树、红黑树、Hash表、B树等都可以作为索引。红黑树:插入慢,自旋;数据量大时,高度高不可控,搜索慢Mysql的索引使用B+树来实现。B树我们希望在大数据量的时候,依然只需要访问很少次数就能查找到想要的元素每个节点存储更多的元素,对红黑树进行横向扩容,就形成了B树缺点:一个节点的data数据量可能很大,innodb引擎,data里存储的是其他列的数据,占用的存储空间就比较大,Mysql推荐一个大节点总容量固定是16.
2021-11-30 16:32:34
1125
原创 Mysql Explain工具
explain关键字可以模拟优化器执行SQL语句,分析你的查询语句。idid列值越大,执行的优先级越高!如果相同,则从小到下依次执行。select_typesimple 简单查询,不包含子查询和union primary 复杂查询中最外层的select subquery 子查询(不在from子句中) derived 包含在from子句中的子查询。Mysql会将结果放在一个临时表中,也称为派生表 union 在union中第二个和随后的s.
2021-11-24 09:02:32
179
原创 Prometheus监控kubernetes中容器的性能指标并展示
涉及工具名称 作用 kubernetes 容器编排 docker 容器 prometheus 监控 node_exporter grafana 展示指标
2021-11-16 10:45:16
3959
1
原创 Spring Security + JWT 实现认证和授权
数据库表Spring SecurityJWTJwtToken@Datapublic class JwtToken { private String token; private String username; private Long expireTime;}JwtTokenProvider@Slf4j@Componentpublic class JwtTokenProvider { public JwtToken cre..
2021-11-10 10:45:03
2109
1
原创 HashMap底层原理及源码解析
底层数据结构jdk1.8中,HashMap 使用了 数组 + (链表 or 红黑树) 的结构。数组的优势是随机读取和修改效率高。缺点是插入和删除效率低。 链表的优势是插入和删除效率高,容易扩展 。缺点是随机读取和修改效率低。HashMap 结合了数组和链表的优点,查询、修改、插入、删除的效率都很高!插入原理 调用key的hashcode()得到hash值,然后将hash值转换成数组下标。数组中的元素是一个单向链表(jdk1.8中,当链表中的数据达到8个,会自动转化为红黑树) ..
2021-11-04 11:39:13
327
原创 Prometheus将数据远端存储至elasticsearch
为什么要使用远端存储Prometheus 默认使用本地存储,也就是tsdb 时序数据库来存储数据。本地存储有两个关键参数:storage.tsdb.path : 数据保存路径 storage.tsdb.retention : 数据保留时间本地存储操作简单,且 prometheus 的数据压缩能力很强,可以很大地节省磁盘空间。但是依然会受到单节点存储的限制,无法持久化海量的metrics数据。为了解决这个问题,prometheus 提供了远程读写的接口,让用户自己选择合适的远端存储。本.
2021-09-27 15:30:59
3254
原创 springboot集成kafka
springboot 集成 kafka 的方法非常简单,直接上代码。引入maven依赖<dependency> <groupId>org.springframework.kafka</groupId> <artifactId>spring-kafka</artifactId></dependency>引入此包后,通过 springboot 的自动装配机制,KafkaAutoConfiguration 类会
2021-09-26 09:46:21
393
原创 Kubernetes存储之Volume, PV, PVC讲解
本文讲解 Kuberketes 中的存储相关的Volume,Persistent Volume(PV),以及 PersistentVolumeClaim(PVC) 的概念和用法。Volume(存储卷)Volume 是定义在 Pod 上的,它是 Pod 中多个容器共享的目录,被一个 Pod 中多个容器股灾到具体的文件目录下。Kubernetes 中 Volume 的生命周期与 Pod 的生命周期相同,跟容器的生命周期不想关,当容器终止或重启时,Volume 中的数据不会丢失。这点跟 Docker.
2021-09-18 17:18:41
1554
原创 NIO模型讲解
BIO模型同步阻塞,一个客户端连接对应一个处理线程。缺点代码会阻塞线程数太多应用场景适用于连接数目比较小且固定的架构NIO模型同步非阻塞,一个线程可以处理多个请求连接。多路复用器selectorI/O多路复用底层使用的 linux的 api (select、poll、epoll)来实现。三大核心组件:Channel(通道)、Buffer(缓冲区)、Selector(选择器)channel类似于流...
2021-09-18 15:55:40
2806
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人