自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Zookeeper面试题

zookeeper采用了全局递增的事务id来标识,所有的proposal在提出的时候都会加上一个zxid,zxid是一个64位的数字,高32位是epoch(时期),用来标识Leader的周期,如果有新的Leader产生,epoch会递增,低32位用来自增计数。当新的proposal产生的时候会经历二阶段提交过程,首先会向其他server发送事务请求,当过半的server都能够执行并且执行成功的时候,那么就开始执行。

2023-12-11 17:30:01 170

原创 HashMap常见面试问题

put的第一步是计算hash值,key的hash&key的hash>>>16.其目的就是:让key的高16位不变,低16位与高16位做一个异或,目的就是减少碰撞。

2023-12-11 13:34:10 222

原创 简述dubbo的spi思想

面试官心理分析继续深挖,前面一些基础性的东西问完了,确定你应该都ok,了解dubbo的一些基本东西,那么问个稍微难一点点的问题,就是spi,先问问你什么是spi。然后再问一下dubbo的spi是怎么实现的?其实就是看看你对dubbo的掌握程度如何。面试题剖析spi,简单来说,就是service provider interface,说白了是什么意思呢,比如你有个接口,现在这个接口有3个实现类,那么在系统运行的时候对这个接口到底选择哪个实现类呢?这就需要spi了,需要根据指定的配置或者是默认的配置,去找

2021-09-26 16:50:00 196

原创 Dubbo服务相关面试题

请介绍一下Dubbo服务消费者调用服务提供者的过程?整体流程图通过上面的流程图可以看到,服务消费者通过代理对象Proxy发起远程调用,接着通过网络客户端Client将编码后的请求发送给服务提供方的网络层上,也就是Server。Server在收到请求后,首先要做的事情是对数据包进行解码。然后将解码后的请求发送至分发器Dispatcher,再由分发器将请求派发到指定的线程池上,最后由线程池调用具体的服务。这就是一个远程调用请求的发送与接收过程。执行流程1. 生成动态代理类当调用服务方法的时候,会被I

2021-09-26 14:01:37 147

原创 Neo4j程序访问

Neo4j访问的两种方式嵌入式数据库服务器模式(通过REST的访问)它是由应用程序的性质(neo4j是独立服务器还是和程序在一起),性能,监控和数据安全性来决定架构选择。An embedded database(嵌入式数据库)嵌入式Neo4j数据库是性能的最佳选择。通过指定数据库存储的路径已变成的方式访问嵌入式数据库。我们选择嵌入式数据库处于一下原因:使用Java作为我们项目的编程语言时应用程序是独立的程序追求很高的性能Neo4j Server(服务器模式)Neo4j Serv

2021-09-11 20:02:02 160

原创 Neo4j优化思路

增加服务器内存和调整neo4j配置文件# java heap 初始化dbms.memory.heap.initial_size=1g# java heap最大值,一般不超过可用物理内存的80%dbms.memory.heap.max_size=16g# pagecache大小,官方建议设为(总内存-dbms.memeory.heap.max_size)/2dbms.memory.pagecache.size=2gneo4j刚启动数据是冷的需要预热match(n)optional matc

2021-09-11 19:14:29 550

原创 Neo4j之Admin管理员操作

Neo4j-数据库备份和恢复在对Neo4j数据进行备份、还原、迁移得到操作时,首先要关闭Neo4j./bin/neo4j stop数据备份到文件./bin/neo4j-admin dump --datebase=graph.db --to=/root/qyn.dump还原、迁移之前,关闭neo4j服务。操作同上./bin/neo4j-admin load --form=/root/qyn.dump --database=graph.db --force重启服务./bin/neo4j s

2021-09-11 15:11:11 323 1

原创 Neo4j CQL高级

CQL 函数字符串函数功能描述UPPER它用于将所有字母改为大写字母LOWER它用于将所有字母改为小写字母SUBSTRING它用于获取给定String的字符串REPLACE它用于替换一个字符串的子字符串举例:MATCH (p:Person)RETURN ID(p), LOWER(p.character)聚合函数聚合功能描述COUNT它返回由MATCH命令返回的行数MAX它从MATCH命令返回一组行返回最大值

2021-09-11 15:01:00 139

原创 Neo4j CQL

CQL简介CQL代表Cypher查询语言。像关系型数据库的查询语言SQL,Neo4j使用CQL作为查询语言。Neo4j CQL它是Neo4j图形数据库的查询语言它是一种声明性模式匹配语言它遵循SQL语言它的语言是非常简单且人性化、可读的格式。常用的Neo4j CQL命令、条款如下:No.CQL命令/条作用1CREATE创建创建节点,关系和属性2MATCH匹配检索有关节点,关系和属性数据3RETURN返回返回查询结果4WHERE条件提

2021-09-10 22:17:30 126

原创 MongoDB安全认证

安全认证概述MongoDB默认是没有账号的,可以直接链接,无须身份验证。在实际的项目中的肯定是要权限验证的,否则后果不堪设想。从2016年开始发生了多起MongoDB黑客赎金时间,大部分MongoDB安全问题暴露出来的安全短板其实是用户,首先用户对数据库的安全不重视,其次用户在使用过程中没有养成定期备份的好习惯,最后是企业可能缺乏有经验和技术的专业人员。所以对MongoDB进行安全认证是有必要的。用户相关操作切换到admin数据库对用户进行添加use admin;db.createUser(use

2021-09-01 18:03:28 133

原创 MongoDB分片集群搭建

分片集群搭建过程配置并启动config节点集群config部分的ymlversion: '3'services: # config server配置 mongo_config_server_node_1: image: mongo:latest container_name: mongo_config_server_node_1 ports: - 27010:27017 volumes: - ./config_server/node_

2021-08-31 23:12:23 357

原创 MongoDB复制集搭建

前言最开始使用MongoDB作为NoSQL数据库的时候,使用的是单节点,后面随着业务量增加,引入了集群模式,最初引入的是ReplicaSet。刚开始使用的时候还好,后面却发现了性能上还是有瓶颈,尤其在写数据方面比较的明显。后面深入研究了一下,发现原来真正高性能的是Shared Cluster,因为做了数据分片的缘故,单机的数量量更小,读写性能也就越高。然而我们使用的ReplicaSet只是Master-Slave模式,所有的节点上的数据仍然是一致的,同时因为需要保证一致性,事务是多进程之间同步等待的,因此

2021-08-29 23:19:44 252

原创 MongoDB分片集群

简介分片(Sharding)是MongoDB用来将大型集合水平分割到不同服务器(或者复制集)上所采用的方法。不需要功能强大的大型计算机就可以存储海量的数据,处理高负载。为什么要分片存储容量超出单机磁盘的容量活跃的数据超出单机内存的容量,导致很多请求都要从磁盘读取数据,影响性能。IOPS超出单个MongoDB节点的服务能力,随着数据的增长,单机实例的平静会越来越明显。副本集具有极诶耽数量限制。垂直扩展:增加更多的CPU和存储资源来扩展容量。水平扩展:酱数据集分布在多个服务器上,水平扩展即分

2021-08-28 17:33:25 403

原创 Mongo复制集集群结构原理

简介一个复制集中Primary节点上能够完成读写操作,Secondary节点仅能用于读操作。Primary节点需要记录所有改变数据库状态的操作,这些记录保存在oplog中,这个文件存储在local数据库,各个Secondary节点通过此oplog来复制数据并应用于本地保持本地的数据与主节点的一致。oplog具有幂等性,即无论执行了多少次,其结果始终保持一致,这一点要优于mysql的二进制日志更好用。oplog的组成结构{ "ts": Timestamp(1446011590), "h": Numb

2021-08-27 17:48:24 108

原创 MongoDB存储引擎

存储引擎概述存储引擎是MongoDB的核心组件,负责管理数据如何存储在硬盘和内存上。MongoDB支持的存储轻音有MMAPv1,WiredTiger和InMemory。InMemory表示只将数据存储在内存中,并且只把诊断日志和元数据(meta-data)信息存储在硬盘文件中,由于不需要和磁盘进行IO操作,就可以获取到所需要的数据,InMemroy引擎大幅度降低了查询的延迟(latency)。从MongoDB3.2开始,默认的存储引擎是WiredTiger,3.2之前默认的存储引擎是MMAPv1,Mong

2021-08-21 17:03:26 783

原创 MongoDB架构

MongoDB逻辑结构MongoDB与MySQL中的架构差不多,底层都使用了可插拔的存储引擎以满足不同的用户需求,用户可以根据自己所需要的特性来选择不同存储引擎。在最新版本的MongoDB中使用了WiredTiger作为默认的存储引擎,WiredTiger提供了不同粒度的并发控制和压缩机制,能为不同的应用提供更好的性能和存储率。MongoDB的数据模型内嵌内嵌的方式是指,一个文档嵌入到另外一个文档中,MongoDB中允许一个字段或者数组中的值为一个对象。引用通过引用的方式来存储对象之间的关联,

2021-08-19 21:46:50 89

原创 Java访问MongoDB

maven依赖 <dependency> <groupId>org.mongodb</groupId> <artifactId>mongo-java-driver</artifactId> <version>3.12.10</version> </dependency>添加操作 MongoC

2021-08-19 20:51:07 183

原创 MongoDB应用场景

MongoDB的适用场景网站数据:MongoDB非常适合实时插入,更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性。缓存:由于性能很高,Mongo也适合作为信息存储的缓存层。在系统重启之后,由Mongo搭建的持久化缓存层可以避免下层数据资源过载。大尺寸、低价值的数据:使用传统的关系型数据库存储一些大尺寸低价值数据时比较浪费资源,在此之前,很多程序员往往选择使用传统文件存储的方式。高伸缩性的场景:Mongo非常适合由数十台或数百台服务器组成的数据库,Mongo的线路图中已经包含对MapRed

2021-08-16 22:45:13 3328

原创 MongoDB索引底层实现原理分析

简介MongoDB是文档型的数据库,它使用BSON格式保存数据,比关系型数据库存储更方便,比如之前关系型数据库中处理用户、订单等数据要建立对应的表,还要建立它们之间的关联关系。但是BSON就不一样了,我们可以把一条数据和这条数据对应的数据都存入一个BSON对象中,这种形式更简单,通俗易懂。MySql是关系型数据库,数据的关联性是非常强的,区间访问是常见的一种情况,底层索引组织数据使用B+树,B+树由于数据都存储在叶子节点,并且通过指针串在一起,这样就很容易的进行区间遍历货值全部遍历。MongoDB使用B

2021-08-16 22:16:44 1381

原创 MongoDB索引

什么是MongoDB索引索引是一种单独的、物理的对数据库中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的页的逻辑指针清单。索引的作用相当于图书中的目录,可以根据目录中的页码快速找到所需的内容。索引目标是提高数据库的查询效率,没有索引的话,查询会进行全表扫描(scan every docuemtn in a collection),数据量最大时严重降低了查询效率。默认情况下Mongo在一个集合(collection)创建时,自动的对集合的_id创建了

2021-08-15 19:03:01 302

原创 数据库分片策略

分片概念分片(SHarding)就是用来确定数据在多台存储设备上分布的技术。Shard这个词的意思是“碎片”,如果将一个数据库当做一块大玻璃,将这块玻璃打碎,那么没一小块都成为数据库的碎片(Database Sharding)。将一个数据库打碎成多个的过程就叫做分片,分片是属于横向扩容方案。数据库扩展方案:横向扩展:一个库变成多个库,加机器数量纵向扩展:一个库还是一个库,优化及其性能,加高配CPU或内存在分布式存储系统中,数据需要分散存储在多台设备上,分片就是把数据库横向扩展到多个数据库

2021-08-09 20:42:30 937

原创 分表分库——主键生成策略

在很多小项目中,我们往往直接使用数据库自增特性来生成主键ID,这样确实比较简单。而在分库分表的环境下,数据分布在不同的数据表中,不能再借助数据库自增特性直接生成,否则会造成不同数据表主键重复。下面介绍集中ID生成算法。UUIDUUID是通用唯一标识码(Universally Unique Identifier)的缩写,长度是16个字节,被表示为32个十六进制数字,以‘-’分隔的五组来显示,格式为8-4-4-4-12,共36个字符,例如:be277cf0-9fed-433e-b958-eb82e8c0

2021-08-08 16:41:22 709

原创 分表分库概述

简介互联网系统需要处理大量用户的请求。比如微信日活用户破10亿,海量的用户每天产生海量的数据;美团外卖,每天都是几千万的订单,那这些系统的用户表】订单表、交易流水等表是如何处理的呢?数据只增不减,历史数据又必须留存,非常容易成为性能的瓶颈,而要解决这样的数据库瓶颈问题,"读写分离"和缓存往往都不合适,目前比较普通的方案就是NoSQL/NewSQL或者采用分表分库。使用分表分库时,主要有垂直拆分和水平拆分两种拆分模式,都属于物理空间的拆分。...

2021-08-08 15:43:45 169

原创 CGLIB源码分析

前言SpringAOP在Spring框架中占据了非常重要的位置,所提供的面向切面编程(AOP)是对面向对象编程(OOP)的一种补充。AOP采用横切的的方式,将核心业务与通用逻辑切分开来。可以更好的服用代码以及项目管理。...

2021-07-20 19:24:09 239

原创 SpringAOP源码分析

前言

2021-07-19 18:13:02 87

原创 SpringIOC源码分析

test

2021-07-14 15:55:54 62

原创 Hadoop面试题(一)

1. 集群最主要的瓶颈磁盘IO2. Hadoop运行模式单机版、伪分布式、完全分布式3. Hadoop生态圈的组件并做简要描述Zookeeper:是一个开源的分布式应用程序协调服务,基于Zookeeper可以实现同步服务,配置维护,命名服务。Flume:一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输系统。Hbase:是一个分布式的,面向列的开源数据库,利用Hadoop HDFS作为其存储系统Hive:基于Hadoop的一个数据仓库工具,可以将结构化的数据映射为一张数据库表,并提供

2020-11-10 19:13:13 113 1

原创 Zookeeper介绍

Zookeeper介绍Zookeeper是一个开源的分布式的,为分布式应用提供协调服务的Apache项目。1. 工作机制Zookeeper从设计模式角度来理解:是一个基于观察者模式设计的分布式服务管理框架,它负责存储和管理大家都关心的数据,然后接受观察者的注册,一旦这些数据的状态发生变化,Zookeeper就将负责通知已经在Zookeeper上注册的那些观察者做出相应的反应,从而实现集群中类似Master/Slave管理模式Zookeeper=文件系统(配置文件保存)+通知机制(在ZK注册多个节点的

2020-10-04 13:33:29 73

原创 Linux CPU 性能指标分析

简介在服务端测试,以及生产环境中,通过需要观察CPU的使用情况,以此作为衡量系统性能的重要指标。对于Linux CPU主要的指标有,利用率,运行队列,负载,上下文切换等,对一个合格的程序员来说了解这些指标是必要的。CPU使用率Linux CPU使用率主要是由以下几个维度统计:%usr: 普通进行在用户模式下的执行时间%sys: 进程在内核模式下的执行时间%nice: 被提高优先级的进程在用户模式下的执行时间%idle: 空闲时间%iowait: 等待IO完成的时间%irp: 处理应中断请

2020-09-11 11:04:43 1669

原创 Java8 Lambda表达式简介

Lambda表达式的意义Lambda的一个重要意义就是简化某些匿名内部类的编写(Anonymous Classes)的写法。实际上Lambda表达式不仅仅是匿名内部类的语法糖。JVM内部是通过invokedynamic来实现Lambda表达式的。使得并行代码编写变得简单,充分利用CPU多核。如何创建无参编写,省略借口名和函数名。这得益于javac的类型推断,编译器可以根据上下午的信息推断出参数的类型。带参编写。...

2020-09-07 09:06:11 143

原创 Saas、Paas、IaaS的区别

定义层面SaaS、PaaS、IaaS都是属于云计算服务的范畴,也就是云计算+服务。来自Wiki的解释为: Coud computing is a new form of Internet-based computing that provides shared computer processing resources and data to computers and other devices on demand.云计算就是一种按照需求通过Internet获取计算资源的形态。这些计算资源被包装成为

2020-07-15 10:56:20 208

原创 K8s简述NodePort

前言最近在学习Kubernetes的过程中,由于都是在K8s集群内部进行Docker通信的,就遇到了如何暴露服务给外界访问的问题,生产环境比较好的方案就是借助云服务商使用LoadBalancer的方式,但由于是测试环境就使用了比较简单的NodePort来暴露服务,在实践过程中,也加深了对K8s概念的理解。Service把一组Pods抽象为网络服务,通过K8s你不需要通过修改程序的服务发现机制来管理通信。K8s给每个Pods独立的IP,以及给一组Pods一个DNS并通过负载均衡的方式进行访问。node

2020-07-03 23:30:35 36088 2

原创 最近面试一周收获

前言由于疫情的原因,有不少企业倒闭了。导致今年的招聘岗位也不如往年那么多了,就没有选择裸辞,而是选择在51之后,提交辞职申请的同时开始进行面试。感受起初的面试我还是很自信的,毕竟技术栈这块我还掌握的挺多的。比如:Java,Scala,Python,React,前端和后端以及大数据都有涉及。而且初期也可能是为运气比较好,一般聊项目就花很长时间了,导致技术点上也没有特别深入的问题。但是,后面的几轮高级工程师的面试,还是让我看清了不少。我的技术栈也没有我想象中的那么牢固。而且我在面试过程中发现一些经验以及

2020-05-22 14:18:19 319

原创 ElasticSearch Cluster的一致性问题

前言自以为对ES 架构还是蛮熟悉了,但是在最近的面试过程中聊到了ES架构偏底层的一些东西,结果发现还是没有能够把技术细节和技术原理融会贯通名词解释Cluster: 集群,一个集群包含多个Node,且会有一个Master NodeNode: 节点,一般来说一个及其部署一个NodeShard: 分片,指的是一个Index分成多少份,这些Shards会分散到各个Node上面为什么要使用多个ES Cluster?高可用方面:ElasticSearch拥有许多高可用的特性,例如Replica,例如Da

2020-05-16 16:37:15 243

原创 简述HTTPS工作原理

HTTP的风险HTTP协议是由明文传输的,因此会带来三大风险:被窃听的风险:第三方可以截获查看你请求的内容被篡改的风险:第三方可以修改你请求的内容被冒充的风险:第三方可以伪装成通信方与你通信正是由于HTTP的不完美,才有HTTPS的出现。HTTPS涉及到的概念比较多,比如SSL/TLS,数字证书、数字签名、加密、认证、公钥、私钥等,比较容易混淆。我们先从一次简单的安全通信故事讲起,...

2020-04-10 19:53:24 624

原创 使用Hystrix构建高可靠服务架构

什么是Hystrix在分布式系统中,每个服务都会调用很多其他服务,被调用的哪些服务就是依赖服务,有的时候某些依赖服务出现故障也是很正常的。Hystrix可以让我们在分布式系统中对服务间的调用进行控制,加入一些调用延迟或者依赖故障的容错机制。Hystrix通过将依赖服务进行资源隔离,进而阻止某个依赖服务出现故障时整个系统的所有依赖服务进行蔓延;同时Hystrix还提供故障时的fallback降...

2020-04-08 10:12:20 110

原创 面试题——分布式事务的实现方式

面试题分布式事务了解吗?你们是如何解决分布式事务问题的?面试官心理分析只要你聊到了分布式系统,就一定会问道分布式事务,如果你对分布式事务一无所知的话,那的确很坑爹,至少要知道分布式事务的大致解决方案,每个方案的优缺点。现在的面试,分布式系统成了标配,分布式事务也就成了必问的问题了。每种分布式方案都会带来一些问题,比如TCC方案的网络问题,XA方案的一致性问题。面试题剖析分布式事务的实现...

2020-04-08 09:55:10 1845

原创 MySQL如何进行读写分离?

面试题你们有没有做MySQL读写分离?如何实现MySQL的读写分离?MySQL的主从复制原理是啥?如何解决MySQL主从同步的延时问题?面试官心理分析高并发这个阶段,肯定是要需要做读写分离的,因为大部分互联网的业务都是以浏览为主的,这样的情况,很适合做读写分离。把一个主库挂载多个从库,读取的时候在从库进行,这样就做到了高并发。面试题剖析如何实现MySQL的读写分离?其实很简单,就是基于...

2020-04-03 16:56:57 245

原创 面试题——分库分表之后,id 主键如何处理?

面试题分表分库之后,ID主键该如何处理?面试官心理分析其实这也是分表分库之后,你必然会面对的一个问题,那就是这个id如何生成?因为要是分成多个表之后,每个表都是从1开始累加,那肯定是不对的,需要一个全局唯一的id来支持。所以这就是生产环境中所必须要考虑的问题。面试题剖析基于数据库的实现方案数据库自增id这个就是说你的系统里,每次得到一个id,都是通过往数据库里面写入一条没有什么意义的...

2020-04-03 16:12:59 311 2

原创 面试题——如何设计可以动态扩容缩容的分库分表方案?

面试题如何设计可以动态扩容缩容的分表分库方案?面试官心理分析对于分表分库来说,主要是面对以下问题:选择一个数据库中间件,调研、学习、测试设计一个分表分库的方案,需要分成多少个库,每个库分成多少个表,比如3个库,每个库3个表基于选择好的数据库中间件,以及在测试环境建立好的分表分库环境,然后测试以下能否正常进行分表分库的读写完成从单表单库到分表分库的迁移,双写方案线上系统开始基于分表...

2020-04-03 15:41:12 314

空空如也

空空如也

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

TA关注的人

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