从两道题来认识“事务的传播行为” 前言我们今天来学习关于事务的传播行为的知识。题目一题目如下:某个复杂的计算逻辑,由若干个子流程处理 + 主流程处理共同完成。业务要求是 :1)子流程处理互相独立,即其中一个发生错误事务回滚,不影响其他子流程的处理;2)主流程处理失败,事务回滚时,所有的子流程也要跟着回滚。思考鄙人苦苦思索良久,绞尽脑汁,穷尽我以前所学知识,憋出了如下的答案:class A { @Transactional public void methodA() {
Lucene应用实战(四)——Lucene搜索的两种方式 前言本文我们来对Lucene具体如何进行数据的搜索,进行详细的介绍。环境准备我们直接使用在 Lucene应用实战(二)——Field域的使用及索引库的维护 中的应用代码案例。因为索引和存储两者是分开的,对于某一个字段我们可以建立索引,但是不存储,我们依然可以对此字段进行搜索,但是因为我们没有存储,所以我们搜索出来的结果中不显示此字段的内容。本文为了结果的展示明显,我们将“desc“属性进行索引并且存储。搜索结果TopDocs类Lucene搜索结果可通过TopDocs遍历,TopDocs类提供了
Lucene应用实战(三)——分词器的使用 前言前面几篇文章我们对Lucene中索引的创建等相关知识进行了初步的学习。接下来思考一个问题,我们创建的索引,是不是符合我们搜索要求的索引呢?平日里我们搜索东西的时候,输入某个关键词,有时候能搜出来,有时候搜别的关键词就搜不出来。用户输入的关键词和我们存储的索引之间会有一个匹配的过程,如果能匹配的上,那么就返回相应结果。索引创建是很关键的一环,而分词又是索引创建的核心,直接影响到索引的质量。接下来我们来从分词入手,详细拆解索引创建过程中分词的流程。分词的相关概念分词器:采集到的数据会存储到D
Lucene应用实战(二)——Field域的使用及索引库的维护 Field域的使用及索引库的维护前言在前面我们对Lucene的使用进行了简单的demo实战,本文我们详细来说明下Lucene中的Field域的使用及索引库维护的相关操作。Fileld域的使用简介Lucene存储对象是以Document为存储单元,对象中相关的属性值则存放到Field中。Field是文档中的域,包括Field名和Field值两部分,一个文档可以包括多个Field,Document只是Field的一个承载体,Field值即为要索引的内容,也是要搜索的内容。Field有三大属性:
Lucene应用实战(一)——索引创建与搜索 Lucene简介Lucene是非常优秀的成熟的开源的免费的纯java语言的全文索引检索工具包。Lucene是一个高性能、可伸缩的信息搜索(IR)库。 Information Retrieval (IR) library.它可以为你的应用程序添加索引和搜索能力。Lucene是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎。由Apache软件基金会支持和提供,Lucene提供了一个简单却强大的应用程序接口,能够做全文索引和搜索。
痛苦的根源 我痛苦的根源在于在用学生的思维来生活和工作,学生时做题考试是有标准答案的,但是人生没有标准答案,可以这样活,也可以那样活,最重要的是要想明白自己到底想要的是什么,然后去做选择,这是属于我自己的选择,与他人无关,至于别人所吹捧的别的什么东西,那也是别人的,与我无关。...
面试官:MySQL中的锁你能说出来几种? 前言面试官:MySQL中的锁很多,你能说出来几种?要是你能完整的回答出来,那就不用往下看了,如果有疑惑,就继续看喽。锁分类在 MySQL中锁有很多不同的分类。从操作粒度看从操作的粒度可分为表级锁、行级锁和页级锁。表级锁:每次操作锁住整张表。锁定粒度大,发生锁冲突的概率最高,并发度最低。应用在MyISAM、InnoDB、BDB 等存储引擎中。行级锁:每次操作锁住一行数据。锁定粒度最小,发生锁冲突的概率最低,并发度最高。应用在InnoDB 存储引擎中。页级锁:每次锁定相邻的一组
深入Redis底层数据结构,看这篇文章就够了 Redis的value的常见几种数据类型,有string字符串类型、list列表类型、set集合类型、sortedset(zset)有序集合类型、hash类型等。本篇我们来深入研究下这些数据结构的底层实现,从而对Redis有更深层次的认识。
面试官:来说一说缓存雪崩、缓存穿透、缓存击穿的区别?我整个人都懵了 前言本文我们整理总结下Redis使用过程中一些常见的问题,并研究如何解决。缓存穿透一般的缓存系统,都是按照key去缓存查询,如果不存在对应的value,就应该去后端系统查找(比如DB)。简介缓存穿透是指在高并发下查询key不存在的数据,会穿过缓存查询数据库。导致数据库压力过大而宕机 。解决方案解决方案:对查询结果为空的情况也进行缓存,缓存时间(ttl)设置短一点,或者该key对应的数据insert了之后清理缓存。存在的问题:缓存太多空值占用了更多的空间使用布隆过滤器。在缓存之前
大厂面试题:说一说Redis的过期淘汰策略 前言我们经常用redis来当缓存使用,既然是缓存,就有过期时间,否则就有可能数据更新不及时,造成脏数据的现象,本文我们来学习下redis的过期淘汰策略。Redis的性能Redis有两种使用场景,一种是作为DB(数据库)使用,一种是当做缓存使用。关于Redis的性能,我们来看一下官方数据:读:110000次/s写:81000次/s长期使用,key会不断增加,Redis作为缓存使用,物理内存也会满。如果物理内存满了之后,内存就需要与硬盘交换(swap) ,就是需要我们常说的虚拟内存 ,频繁IO
学会了伪共享问题解决方案,又能涨薪了 前言学习的过程中遇到了一个名词——“伪共享”,出于对知识的兴趣,上网查阅了一些博文,研究了“伪共享”的问题,写此文章总结记录。要很好的理解伪共享问题,我们要先从CPU的缓存开始说起。CPU缓存架构CPU 是计算机的心脏,所有运算和程序最终都要由它来执行。主内存(RAM)是数据存放的地方,CPU 和主内存之间有好几级缓存,因为即使直接访问主内存也是非常慢的。如果对一块数据做相同的运算多次,那么在执行运算的时候把它加载到离 CPU 很近的地方就有意义了,比如一个循环计数,你不想每次循环都跑到主内存