- 博客(267)
- 收藏
- 关注
原创 ES入门篇
文章目录1、ES是什么2、ES基本结构2.1、结构图2.2、基本概念2.3、和关系型数据库概念类比3、ES原理3.1、Node节点管理3.1.1、多节点集群方案3.1.2、协调节点3.1.3、节点故障转移3.2、shard分片原理3.2.1、文本可被搜索:分词器+倒排索引3.2.2、动态更新索引3.2.3、保证近实时的搜索3.2.4、持久化变更3.2.5、段合并3.3、ES并发控制原理3.4、原理小结1、ES是什么一个分布式实时文档存储,每个字段可以被索引和搜索一个分布式实时分析搜索引擎能胜任上百
2022-03-22 23:30:18 3541
原创 Elasticsearch/Lucene写入部分解析
文章目录1、ElasticSearch和Lucene1.1、elasticsearch1.2、Lucene2、ElasticSearch和Lucene数据模型关系ElasticSearch Index和Lucene Index关系3、Lucene Index的数据模型3.1、Segment3.2、Document3.3、Field3.4、Termindex的Commit Point与时间的相关性4、Lucene写入流程分析4.1、整体写入流程4.2、IndexWriter类4.2.1、AddDocument
2022-03-19 11:01:07 530
原创 Redis的IO多路复用及epoll
1、前序Redis是一个性能很好的缓存数据库但实际上它是一个单线程的,主要是其采用IO多路复用来保证在有多个连接的时候系统也有很高的吞吐量。Redis中为什么要使用IO多路复用???首先是redis是单线程的所有的操作都是按照顺序去线性执行的,但是因为读和写操作需要等待用户输入和输出(这些操作都是阻塞的),因此IO操作一般是不能直接返回的,这样的话就会导致某个文件的IO阻塞导致整个进程无法给其他的客户提供服务,IO多路复用恰巧就是为了解决该问题。Redis的多路复用采用的是epoll实现的,但是也提
2020-12-07 16:23:58 404
原创 Redis——发布订阅、分布式锁
文章目录1、Redis发布订阅(1)、使用方法(2)、工作原理2、Redis实现分布式锁(1)、单机锁(2)、分布式锁<1>、电商促销<2>、数据库乐观锁<3>、数据库悲观锁<4>、基于Redis实现分布式锁<5>、Redis高可用分布式锁1、Redis发布订阅Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。Redis 客户端可以订阅任意数量的频道(1)、使用方法订阅频道
2020-12-07 16:23:37 632
原创 Redis(基础)——Redis集群架构与数据存储
文章目录1、简介2、Redis集群架构2.1、Replication+Sentinel2.2、Proxy+Replication+Sentinel2.3、Redis Cluster3、Redis数据存储3.1、jemalloc3.2、redisObject3.3、SDS4、五种数据类型和内部编码4.1、string4.2、hash4.3、set4.4、zset1、简介Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符
2020-12-07 16:22:49 271
原创 SpringBoot——Quartz定时任务
1、特点是一个很强大的开源调度框架,有如下特点:强大的调度功能,比如支持丰富的调度方法,可满足各种常规和特殊的需求灵活的应用方式,如自持任务和调度的多种组合方式,支持调度数据的多种存储方式分布式和集群能力是Spring的默认调度框架,可和Spring集成实现灵活可配置的调度功能quartz调度核心元素:Scheduler:任务调度器,是实际执行任务调度的控制器,在Spring中通过ScheduleFactoryBean封装起来Trigger:触发器,用于定义任务调度的时间规则,有Sim
2020-12-07 16:20:27 183
原创 深入理解JIT
文章目录1、简介2、HotSpot编译寄存器和主存3、初级调优:客户模式或服务器模式4、中级编译器调优4.1、优化代码缓存4.2、编译阈值4.3、检查编译过程5、高级编译器调优编译线程1、简介即时编译器,使用即时编译器可加速Java程序执行速度。Java代码执行时候是边解释边执行,执行速度比可执行二进制字节码慢。JIT会将翻译后的机器码保存起来以备下次使用.JIT默认是启用的,JVM读入.class文件解释后发给JIT编译器,JIT编译器将字节码翻译成本机机器代码.JIT工作原理:2、HotSp
2020-06-27 21:17:25 816
原创 MySQL实现高可用——MHA
文章目录一、简介二、MHA服务1.服务角色2.提供的工具3.工作原理一、简介MHA(Master HA)是一款开源的 MySQL 的高可用程序,它为 MySQL 主从复制架构提供了 automating master failover 功能。MHA 在监控到 master 节点故障时,会提升其中拥有最新数据的 slave 节点成为新的master 节点,在此期间,MHA 会通过于其它从节点获取额外信息来避免一致性方面的问题。MHA 还提供了 master 节点的在线切换功能,即按需切换 master/s
2020-06-25 20:57:51 253
原创 分治算法详解
前面已经介绍过MapReduce框架,MapReduce就是用的分治算法MapReduce如何让数据完成一次旅行如何理解分治算法分治算法核心是:分而治之,就是将原问题划分成n个规模较小,并且和原问题相似的子问题,递归的去解决这些问题,然后将结果合并,最后得到原问题的答案。当然,分治算法和昨天说到的贪心算法本质是差不多的,都是一种处理问题的思想,并非编程的框架。从实际上来说,分治算法一般都适...
2020-06-25 16:40:04 1112
原创 DataSketches HLL Sketch module
上图是官网的介绍,翻译后的意思是此模块提供Apache Druid聚合器为不同的计数基于HLL sketch来自datasketches数据库。摄入的时候这个聚合器创建HLL sketch对象存储在Druid的segments中。在查询的时候sketches被读取并且被合并到一起。最后默认情况下,你可以收到提交给sketch的不同值的估计值。此外,还可以使用post聚合器在同一行中生成sketch列的联合。可以对任何标识符的列使用HLL sketch聚合器。它将返回列的估计基数。要是想要使用此聚合器..
2020-06-16 20:42:34 1148
原创 EventLoopGroup源码及其父类
1、特殊的EventExecutorGroup,允许注册处理后的通道以便在事件循环期间进行选择。EventLoopGroupnext()方法:返回下一个要使用的EventLoopregister(Channel):使用EventLoop注册一个Channel,注册完成后返回的ChannelFuture将会得到通知register(ChannelPromise):使用ChannelFutur...
2020-06-06 22:44:56 239
原创 Apache Thrift介绍
文章目录1、简介2、Thrift IDL2.1、基本类型2.2、结构体struct2.3、容器Container2.4、枚举enum2.5、常量定义2.6、类型定义2.7、异常Exception2.8、服务定义类型Service2.9、名字空间NameSpace2.10、注释Comment2.11、include1、简介thrift官网Apache Thrift软件框架用于可伸缩的跨语言服务...
2020-05-05 13:26:19 1175 2
原创 疏漏总结(八)
1、密集索引和稀疏索引的区别密集索引文件中的搜索码都对应一个索引值稀疏索引文件中只会为某些索引码的某些值建立索引项2、意向锁3、Redis集群Redis有三种集群,分别是主从复制,哨兵模式,集群模式详情见此篇文章,Pipeline及主从同步模式和哨兵模式4、DNS解析的流程5、TCP三次握手过程是否传输数据6、Spring中的设计模式7、Spring Bean生命周期8、...
2020-04-19 20:44:40 480
原创 剑指Offer(SQL)——密集索引和稀疏索引
密集索引和稀疏索引的区别:密集索引文件中的每个搜索码值都对应一个索引值稀疏索引文件中只为索引码的某些值建立索引项接下来以MySQL为例说明:在mysql中有两种搜索引擎:MyISAM和InnoDBMyISAM引擎:不管是主键索引,唯一键索引还是普通索引,其索引都属于稀疏索引。InnoDB引擎:若一个主键被定义,该主键则作为密集索引若没有主键被定义,该表的第一个唯一非空索引...
2020-04-18 22:02:55 283
原创 疏漏总结(七)
文章目录1、Spring框架事务传播行为2、G1垃圾收集器三色标记法3、Resource和Autowired区别4、用户态和内核态5、JDK12中G1的新功能1、Spring框架事务传播行为Spring的传播行为确定了客户端和被调用端的事务边界,简单来说就是多个具有事务控制的Service的相互调用时所形成的复杂的事务边界控制。Spring定义了7种传播行为:REQUIRED:默认事务传播...
2020-04-18 22:02:11 396
原创 疏漏总结(六)
1、Java快速失败和安全失败1、快速失败:两个线程A读一个集合内容B去更新相同集合的内容会报ConcurrentModificationException的错误。原因是:集合框架内部针对每个元素偶个modCount如果元素值改变,modCount会改变,如使用hashNext()/next()遍历到modCount改变的元素(每次迭代会比较是否为自己心仪的modConut)就会报错。2、安...
2020-04-17 22:16:09 219
原创 疏漏总结(五)
文章目录1、线程池的最大核心线程数的意义2、线程池的状态3、http 1.1版本新特性4、何时需要rehash5、Full GC触发条件6、何种场景需要自定义类加载器7、分段和分页区别8、最左前缀原则9、G11、线程池的最大核心线程数的意义提交一个新的任务到线程池中首先线程池会判断基本线程池(corePoolSize)是否已满?没满的话会创建一个工作线程来执行任务。满了进入下个流程;其次线...
2020-03-30 21:49:46 361
原创 疏漏总结(四)
文章目录yield和join跨域的流程分布式事务MVCC和可重复读Cookie和Sessionsubmit原理MyBatis缓存机制yield和joinThread.yield()作用是暂停当前的正在执行的线程去执行其他的线程。yield()做的是让当前运行线程回到可运行状态,允许相同优先级的线程后的运行的机会。使用其的目的是使相同优先级的线程之间能够适当的轮转执行。但是实际情况是yield...
2020-03-27 12:44:14 410
原创 疏漏总结(三)
TCP如何解决粘包tcp是基于流的协议,是没有边界的,本身也是不具有包的,粘包是应用层协议的问题,tcp只能保证每条数据按照顺序发送而不能控制粘包。metaspaceJDK8开始将类的元数据放在本地内存中这个部分叫做MetaSpace元空间。这个区域在JDK7之前属于永久代,元空间和永久代都是存储class的相关信息包括class对象的Method,实际上元空间和永久代都是之前说的方法区的实...
2020-03-24 10:37:32 254
原创 京东后端开发面经
部门是做信息安全的,经历两面时间相隔比较长。感觉整体面试不是特别的难。一面(50min)1、自我介绍2、介绍一下简历上的项目(问了整体架构和实现的功能以及表的设计,Redis存储的东西,ES如何进行使用的以及RabbitMQ使用到去实现哪些功能模块)3、MyBatis的${}和#{}区别,以及SQL注入4、计算机网络中A类、B类、C类、D类地址中的私有地址以及对应的子网掩码5、Spa...
2020-03-20 20:42:40 994
原创 疏漏总结(二)——volatile
volatile是面试中常常被问到的,现在来总结一下volatile的关键地方。volatile是如何实现禁止指令重排的???先来说一下什么是指令重排:int m = 1;int n = 1;JVM中的顺序可能是先执行初始化n,再初始化m,这个就叫做指令重排。为何JVM要进行指令重排?指令重排就初衷就是在代码不改变执行的结果的情况下改变代码执行的顺序,这个执行层面是操作系统级别的,...
2020-03-19 22:50:29 192
原创 疏漏总结(一)
线程池大小如何设置对于计算密集型的任务,一个有Ncpu个处理器的系统通常通过使用一个Ncpu+1个线程池来获得最优的利用率。对于包含了IO和其他阻塞操作的任务,不是所有的线程都会在所有的时间被调度,因此需要一个更大的池。2*NcpuNthreads = Ncpu x Ucpu x (1 + W/C)其中,Ncpu = CPU核心数Ucpu = CPU使用率,0~1W/C = 等待时间与...
2020-03-19 22:16:25 243
原创 字节跳动后端开发面经
本人双非,投完简历后以为被挂了没想到最后收到面试邀请。一面1、首先是自我介绍2、简历上的项目,用的技术栈,解决了什么问题,数据库表是如何进行设计的等等。。。3、算法题:反转链表合并多个数组n1、反转链表2、合并多个有序数组3、N皇后还有个多线程的编程题:创建五个线程然后有序的输出1到5,输出后就结束(总体来说还是蛮简单的)。...
2020-03-18 21:41:55 3263
原创 摩尔投票算法
什么是摩尔投票算法?摩尔投票算法是一种使用线性时间和常数空间查找大部分元素序列的算法。它以1981年出版的Robert S. Boyer和J Strother Moore的名字命名,并且是流式算法的典型例子。最简单的形式就是,查找输入中重复出现超过一半以上(n/2)的元素。如果序列中没有这种元素,算法不能检测到正确结果,将输出其中的一个元素之一。如果不能保证输入数据中有占有一半以上的元素,需要...
2020-02-11 18:33:17 214
原创 剑指Offer(网络)——TCP和UDP的区别
前两篇文章讲解了TCP协议。接下来来介绍一下UDP,从UDP协议的报文结构开始说起相对于TCP,UDP报文结构简单了很多:源端口、目标端口、数据包长度和奇偶校验值和用户数据组成。结构简单,少了很多TCP具有的功能,其中有:不支持错误重传;不支持滑动窗口。UDP特点:面向无连接;不维护连接状态,支持同时向多个客户端传输相同的信息;数据包报头只有8个字节,额外的开销比较小;吞...
2020-02-05 20:31:47 227
原创 剑指Offer(网络)——TCP四次挥手
挥手指的就是终止连接,TCP四次挥手流程图如下:客户端或者服务端触发close,假设客户端触发close数据传输完毕之后,双方才可以释放连接;最开始客户端和服务端都处于Established状态,假设客户端主动关闭;首先客户端发送连接释放报文并停止发送数据,该数据报报头中携带的flag为FIN=1,seq=u,u指的是刚才连接状态下传送过来的最后一条信息的最后一个序号加上1,此时客户端...
2020-02-05 18:48:40 272
原创 剑指Offer(网络)——TCP三次握手
简单来介绍一下传输控制协议TCP:TCP协议是面向连接的、可靠的、基于字节流的传输层通信协议;当数据传输的时候,应用层向TCP发送数据流,然后TCP会将应用层的数据流分割成报文段并发送给目标节点的TCP层;TCP为了保证不丢包就给每一个包一个序号(Sequence Number),同时序号也保证对方接受数据的时候顺序是一定的;当对方收到数据的时候回复一个ACK去确认,如果在合理的时延之内...
2020-02-05 12:38:12 317
原创 剑指Offer(Spring)——AOP
AOP——面向切面编程软件有一个重要的概念:关注点分离:不同的问题交给不同的部分去解决。AOP是一种关注点分离的技术,写Web时需要写缓存、业务逻辑、日志、出错处理等等东西都要放在一起,为了将业务各个功能分离开切面就出现了,当业务功能代码和切面代码分开之后架构就会变得高内聚低耦合。如果模块化之后虽然模块本身的成本降低了,但是接口的开发的成本又升高了我们为了保证业务的完整性就需要使用切面将业务...
2020-02-04 13:27:00 334
原创 剑指Offer(Spring)——IOC容器
容器内部的运行的原理:Spring启动的时候读取应用程度提供的bean配置并在Spring容器中生成一份相应的bean配置注册表,然后根据这张注册宝去是实例化bean,装配好bean之间的依赖关系后为上层提供准备就绪的运行环境,Spring提供一个配置文件描述bean和bean之间的依赖关系,利于Java的反射功能实例化bean,并在建立bean之间的依赖关系。Spring IOC支持的功能...
2020-02-03 23:55:27 336
原创 剑指Offer(Spring)——IOC原理
IOC(Inversion of Control):控制反转,是Spring最核心部分也是任意组件的基本,是一种思想,可以使你从繁琐的对象嵌套中解锁出来更进一步突出面向对象,在这之前先来了解一下依赖注入(Dependency Inversion)。举个依赖注入的例子:设计行李箱:可以发现这四个是互相依赖的关系,他们是逐步依赖的关系,如果底层修改全局都得修改,通过代码来直观的观察一下:如果...
2020-02-03 21:16:27 400
原创 剑指Offer(类库)——Java的IO机制
本文主要介绍一下BIO、NIO、AIOBlock-IO:基于字节流的InputStream和OutputStream,基于字符流的Reader和Writer,同时也包括Socket那些java.net包下的类等。BIO的属性是同步阻塞的,优点就是写起来简单缺点是效率太低。NonBlock-IO:在JDK4中引入了NIO,它是一种构建多路复用的,同步非阻塞的IO操作提供了Selector、C...
2020-02-02 01:03:01 210
原创 剑指Offer(类库)——HashMap、HashTable、ConcurrentHashMap(下)
HashTableHashTable是线程安全的,那么HashTable做了什么操作才实现了HashMap没做到的线程安全呢???写个简单的demo:进入synchronizedMap内部看一下:声明了一个mutex修饰对象的成员,使用互斥锁包围起来保证了内容互斥,串行化访问以此来保证线程安全。HashTable也是一样的和HashMap实现逻辑没有什么区别,是用同样的去加锁而已:...
2020-02-01 22:27:39 163
原创 剑指Offer(类库)——HashMap、HashTable、ConcurrentHashMap(上)
Map是由一对对的key-value组成的,key要求是唯一的,value不要求。通过看源码可以得出:key自带去重功能是Set类型的,value是Collection接口可存放任意集合。来看一下Map的实现类:HashMap、HashTable、ConcurrentHashMap之间的区别?HashMapJDK8之前HashMap是由数组+链表组成的,数组查找快增删慢,链表增删快查...
2020-02-01 21:12:27 266
原创 剑指Offer(类库)——Java集合框架
学习编程数据结构和算法是必备的知识,C语言尤其能够体现这些数据结构所附带的特点,Java比C在使用起来更加简单,是因为已经将其封装到了集合框架中。数据结构考点如下:数组和链表的区别链表的反转、链表环路检测,双向链表、循环链表队列、栈的应用二叉树的遍历红黑树的旋转算法的考点:内部排序(递归、冒泡、快排、选择、插入)外部排序(应该掌握如何利用有限的内存配合海量的外部存储来处理...
2020-01-31 22:35:11 191
原创 剑指Offer(类库)——Java异常体系
Java异常处理机制中主要回答了三个问题:What:异常类型回答了什么被抛出;Where:异常堆栈跟踪回答了在哪抛出;Why:异常信息回答了为什么被抛出。下面来说一下经常会被问到的问题:Exception和Error的区别Java异常体系结构如下:Error:一般是指JVM相关的问题,比如说系统崩溃,就是说程序无法处理的系统错误如堆栈溢出、内存泄漏,编译器无法检测到。Error是...
2020-01-31 20:16:46 212
原创 剑指Offer(锁)——Java线程池
在Web开发中服务器需要接受并处理请求,因此会为一个请求分配一个线程去处理,如果并发的请求数量很大但是请求的时间很短,那么就会频繁的创建和销毁线程,造成CPU的隐患,这样会降低系统的效率。为了解决上述问题,可以利用Executors创建不同的线程池满足不同场景的需求目前提供了五种创建线程池的方法:newFixedThreadPool(int nThreads):指定工作线程数量的线程池;n...
2020-01-31 14:00:52 239
原创 剑指Offer(锁)——CAS
CAS是一种高效实现线程安全性的方法:支持原子性的更新操作,适用于计数器,序列发生器等场景;属于乐观锁机制,号称lock-free(无锁),但是实际上还是存在底层锁的;CAS操作失败时候由开发者决定是继续尝试还是执行别的操作。CAS操作思想:包含三个操作数——内存位置(V)、预期原值(A)、新值(B)比较时候由内存位置和预期原值去进行对比,如果是相同的就会将内存位置的值更新为新值否...
2020-01-31 12:29:00 244
原创 剑指Offer(锁)——JMM的内存模型
Java内存模型(Java Memory Model, 简称JMM)本身是一种抽象的概念并不是真实存在的,描述的是一种规则或规范,通过这组规范定义了程序中各个变量(包括实例字段,静态字段和构成数组对象的元素)的访问方式。简单说明一下:线程内的变量都是存储在栈中的,这些变量被称作线程的私有变量,是存在线程的工作内存中;JMM要求所有变量的信息,需要放进主内存,线程之间是通过主内存区进行通信...
2020-01-31 00:56:37 279
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人