- 博客(111)
- 收藏
- 关注
原创 Java面试题大全 (下) --2021版
前言: 接着上篇博客《Java面试题大全 (上) --2021版》写,三、Java异常面试题1. Error 和 Exception 区别是什么?Error 类型的错误通常为虚拟机相关错误,如系统崩溃,内存不足,堆栈溢出等,编译器不会对这类错误进行检测,JAVA 应用程序也不应对这类错误进行捕获,一旦这类错误发生,通常应用程序会被终止,仅靠应用程序本身无法恢复;Exception 类的错误是可以在应用程序中进行捕获并处理的,通常遇到这种错误,应对其进行处理,使应用程序可以继续正常运行..
2021-05-16 16:05:42
206
原创 Java面试题大全 (上) --2021版
结合网上的资料以及自身面试经历,花了很长时间搜集整理出来了这套Java面试题大全,希望对大家有帮助哈~一、Java基础知识面试题1、Java概述①. 何为编程编程就是让计算机为解决某个问题而使用某种程序设计语言编写程序代码,并最终得到结果的过程。为了使计算机能够理解人的意图,人类就必须要将需解决的问题的思路、方法、和手段通过计算机能够理解的形式告诉计算机,使得计算机能够根据人的指令一步一步去工作,完成某种特定的任务。这种人和计算机之间交流的过程就是编程。②. 什么是Java
2021-05-16 15:53:16
299
原创 mysql联合索引的最左前缀匹配原则
目录什么是最左匹配原则?最左匹配原则的原理总结为什么要使用联合索引?使用索引优化查询问题:什么是最左匹配原则?最左匹配原则就是指在联合索引中,如果你的 SQL 语句中用到了联合索引中的最左边的索引,那么这条 SQL 语句就可以利用这个联合索引去进行匹配。例如某表现有索引(a,b,c),现在你有如下语句:select * from t where a=1 and b=1 and c =1; #这样可以利用到定义的索引(a,b,c),用上a,b,cselect.
2021-05-14 20:21:52
837
1
原创 spring的IOC控制反转和DI依赖注入
目录一、 简单说明二、详细说明1.1、IoC是什么1.2、IoC能做什么1.3、IoC和DI一、 简单说明IOC是一种叫做“控制反转”的设计思想。1、较浅的层次——从名字上解析“控制”就是指对 对象的创建、维护、销毁等生命周期的控制,这个过程一般是由我们的程序去主动控制的,如使用new关键字去创建一个对象(创建),在使用过程中保持引用(维护),在失去全部引用后由GC去回收对象(销毁)。“反转”就是指对 对象的创建、维护、销毁等生命周期的控制由程序控制改为由IOC容器控制,
2021-05-12 21:11:38
233
原创 Redis 缓存穿透 、 缓存雪崩 、 缓存击穿的原因和解决方案
目录一、缓存穿透解决方案:1. 缓存空对象2.布隆过滤器拦截二、缓存雪崩解决方案:三、缓存击穿解决方案:1. 分布式互斥锁2.永不过期在生产环境中,会因为很多的原因造成访问请求绕过了缓存,都需要访问数据库持久层,虽然对Redsi缓存服务器不会造成影响,但是数据库的负载就会增大,使缓存的作用降低一、缓存穿透缓存穿透是指查询一个根本不存在的数据,缓存层和持久层都不会命中。在日常工作中出于容错的考虑,如果从持久层查不到数据则不写入缓存层,缓存...
2021-04-24 18:22:27
219
原创 架构师成长之路之数据库选型指南
目录一、前言二、选型维度三、相关资料:一、前言架构师在工作中经常会遇到数据库存储选型的问题,而市面上数据库产品众多,往往会无从下手,甚至有时候从业务开发到上线运维过程中会多次更换底层数据库,给整个研发中心带来不必要的额外工作。结合业务场景做数据库存储选型的时候,可以综合以下几个维度去考虑:二、选型维度1、业务是否需要保证ACID事务? 事务具有4个特征,分别是原子性、一致性、隔离性和持久性。 YES:主流的关系型数据库:MySQL...
2020-12-29 17:33:03
4810
12
原创 Java对list进行分页,实现物理分页
今天,工作上,由于业务的一些特殊性,需要拿到数据后在java代码中进行分页。写了一个工具类,记录如下:import java.util.ArrayList;import java.util.List; import org.apache.commons.collections.CollectionUtils; /** * java内存分页工具类 */public class JavaMemoryPageUtil { /** * 获取分页数据 * @p...
2020-11-19 15:05:50
1200
2
原创 IaaS、SaaS 和 PaaS 的区别
一、前言 从小型企业到全球企业,云都是一个非常热门的话题,它是一个非常广泛的概念,涵盖了很多在线领域。 无论是应用程序还是基础架构部署,当开始考虑将业务转移到云时,了解各种云服务的差异和优势比以往任何时候都更加重要。 通常有三种云服务模型:SaaS(软件即服务),PaaS(平台即服务)和IaaS(基础架构即服务)。 每个都有自己的好处和差异。为了能作出最佳选择,有必要了解SaaS,PaaS和IaaS之间的差异。举个例子: 如果你是一个网站站长,想要建立...
2020-10-09 14:59:31
6482
原创 图文详解 RESTful
一、什么是RESTful ? RESTFUL是一种网络应用程序的设计风格和开发方式,基于HTTP,可以使用XML格式定义或JSON格式定义。 而REST全称是Representational State Transfer,中文意思是表述性状态转移。REST 指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是 RESTful。二、 RESTful特点RESTFUL特点包括:每一个URI代表1种资源; 客户端使用GET、POST、PUT...
2020-09-04 11:22:17
2416
原创 OpenStack的基本概念与架构详解
一、什么是openstack OpenStack是一个开源的云计算管理平台项目,是一系列软件开源项目的组合。由NASA(美国国家航空航天局)和Rackspace合作研发并发起,以Apache许可证(Apache软件基金会发布的一个自由软件许可证)授权的开源代码项目。 OpenStack为私有云和公有云提供可扩展的弹性的云计算服务。项目目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。 OpenStack是一个云操作系统,可控制整个数据中心...
2020-09-03 17:21:40
3890
1
原创 用实际案例详解SQL注入的原理和如何防范注入攻击
SQL注入简介 SQL注入是网站存在最多也是最简单的漏洞,主要原因是程序员在开发用户和数据库交互的系统时没有对用户输入的字符串进行过滤、转义、限制或处理不严谨,导致攻击者可以通过输入精心构造的字符串去非法获取到数据库中的数据。本文以免费开源数据库MySQL为例,看懂本文需要了解基本SQL语句。SQL注入原理 一般用户登录用的SQL语句为:SELECT * FROM user WHERE username='admin' AND password='passwd',此处...
2020-08-30 16:16:45
2562
原创 消息队列RabbitMQ的常见面试题
1、使用RabbitMQ有什么好处?解耦,系统A在代码中直接调用系统B和系统C的代码,如果将来D系统接入,系统A还需要修改代码,过于麻烦! 异步,将消息写入消息队列,非必要的业务逻辑以异步的方式运行,加快响应速度。 削峰,并发量大的时候,所有的请求直接怼到数据库,造成数据库连接异常。2、RabbitMQ 中的 broker 是指什么?cluster 又是指什么?broker 是指一个或多个 erlang node 的逻辑分组,且 node 上运行着 RabbitMQ 应用程序。clust.
2020-08-24 17:50:56
673
原创 Nacos如何实现Raft算法与Raft协议原理详解
前言 大名鼎鼎的Paxos算法可能不少人都听说过,几乎垄断了一致性算法领域,在Raft协议诞生之前,Paxos几乎成了一致性协议的代名词。但是对于大多数人来说,Paxos算法太难以理解了,而且难以实现。因此斯坦福大学的两位教授Diego Ongaro和John Ousterhout决定设计一种更容易理解的一致性算法,最终在论文"In search of an Understandable Consensus Algorithm"中提出了Raft算法! Raft 适用于数据一致...
2020-08-13 17:45:21
3148
2
原创 Eureka底层原理与Eureka获取服务实例慢的原因及相关调优
Eureka的基本概念 Register——服务注册 当Eureka Client向Eureka Server注册时,Eureka Client提供自身的元数据,比如IP地址、端口、运行状况指标的Url、主页地址等信息。 Renew——服务续约 Eureka Client 在默认的情况下会每隔30秒发送一次心跳来进 行服务续约。通过服务续约来告知Eureka Server该Eureka Client仍然可用,没有出现故障。正常情况下,如果Eureka Server在90秒内没有收到Eur
2020-08-08 17:14:44
997
原创 Spring Cloud和SOFAStack结合产生Spring-Cloud-Antfin
| 概念Spring Cloud 是 Spring 社区开源的一套微服务开发框架,帮助开发人员快速构建分布式应用,Spring Cloud 的官网介绍如下:Spring Cloud provides tools for developers to quickly build some of the common patterns in distributed systems (e.g. configuration management, service discovery, circuit brea
2020-08-03 17:09:03
1945
1
原创 详解蚂蚁开源框架SOFA
前言SOFA解决:分布式下的服务和组件管理以及调用繁琐的问题SOFA结构图1.Sofa是什么SOFA 源自于 Service Oriented Fabric Architecture,即面向服务的架构。随着 SOFA 的开源,目前 SOFA 的新解释:Scalable Open Financial ArchitectureSOFA 是蚂蚁金服自主研发的金融级分布式中间件,包含了构建金融级云原生架构所需的各个组件,包括微服务研发框架,RPC 框架,服务注册中心,分布式定时任务,.
2020-08-02 16:15:08
15168
原创 ProtoBuf 原理详解
前言之前在网络通信和通用数据交换等应用场景中经常使用的技术是 JSON 或 XML,而在最近的开发中接触到了 Google 的 ProtoBuf。在查阅相关资料学习 ProtoBuf 以及研读其源码之后,发现其在效率、兼容性等方面非常出色。在以后的项目技术选型中,尤其是网络通信、通用数据交换等场景应该会优先选择 ProtoBuf。自己在学习 ProtoBuf 的过程中翻译了官方的主要文档,一来当然是在学习 ProtoBuf,二来是培养阅读英文文档的能力,三来是因为 Google 的文档?不存在的
2020-08-02 14:01:14
2878
1
原创 什么是XSS攻击?如何制作XSS攻击?如何防御XSS攻击?
什么是XSS攻击? https://baike.baidu.com/item/XSS%E6%94%BB%E5%87%BB/954065?fr=aladdin如何制作XSS攻击?如何防御XSS攻击? https://zhuanlan.zhihu.com/p/26177815前端如何防止XSS攻击? https://tech.meituan.com/2018/09/27/fe-security.html...
2020-07-30 19:34:20
464
原创 mysql InnoDB数据存储引擎 的B+树索引原理
一、InnoDB原理在 InnoDB 中,每个索引其实都是一颗 B+ 树,主键索引也称作聚簇索引,其他非主键索引称作二级索引,每个表中每一行的记录值都完整的保存在主键索引的叶子节点上,二级索引的叶子节点保存的是主键的值。每个表至少都有一个主键索引,而且表中所有的数据行都是存放在主键索引这个 B+ 树的叶子节点上的。如果你给表的其他字段加了索引的话,这个索引就是二级索引了,二级索引也是 B+ 树。二级索引和主键索引的不同之处在于其叶子节点上保存的值不一样,表中所有字段的值都被完整的保存在主键索引的
2020-07-24 18:24:41
572
原创 详细说明 elasticsearch 之分词器配置 (IK+pinyin插件)
系统:windows 10elasticsearch版本:5.6.9es分词的选择使用es是考虑服务的性能调优,通过读写分离的方式降低频繁访问数据库的压力,至于分词的选择考虑主要是根据目前比较流行的分词模式,根据参考文档自己搭建测试。es配置目录结构在此先贴出es下plugins的目录结构,避免安装时一脸茫然(出自本人配置目录,可根据自身需要进行调整):es插件目录结构: ik压缩包内文件列表: pinyin压缩包内文件目录:IK 分词器IK...
2020-07-22 18:01:16
1719
4
原创 从底层原理深度剖析volatile关键字
本篇文章从底层原理层面深度剖析volatile关键字是如何实现内存可见性的,同时引入了Java内存模型、指令重排序以及内存屏障等知识点作为原理分析的知识支撑。一、简述Java内存模型Java内存模型分为主内存和线程工作内存两大类。主内存:多个线程共享的内存。如下图所示,方法区和堆属于主内存区域。线程工作内存:每个线程独享的内存。如下图所示,虚拟机栈、本地方法栈、程序计数器属于线程独享的工作内存。Java内存模型规定:所有变量都需要存储在主内存中,线程工作内存保存了变量在主内存中...
2020-07-21 20:52:25
360
1
原创 图文详解ThreadLocal原理
目录一、示例:二、ThreadLocal实现原理 set()方法:get()方法:三、ThreadLocal使用场景:一、示例:ThreadLocal称为线程本地变量,其为变量在每个线程中都创建了一个副本,每个线程都访问和修改本线程中变量的副本。 应用示例:ThreadLocal<SimpleDateFormat> t1=new ThreadLocal<>();可以看出,为每个线程分配一个变量副本的工作并不是由Th...
2020-07-21 20:23:16
406
原创 ElasticSearch 面试总结
0.什么是ES?es是一个基于Lucene的高扩展、开源的全文检索和分析引擎,它可以准实时地快速存储、搜索、分析海量的数据。1.为什么要使用到ES?因为在我们商城中的数据,将来会非常多,所以采用以往的模糊查询,模糊查询前置配置,会放弃索引,导致商品查询是全表扫面,在百万级别的数据库中,效率非常低下,而我们使用ES做一个全文索引,我们将经常查询的商品的某些字段,比如说商品名,描述、价格还有id这些字段我们放入我们索引库里,可以提高查询速度。2.Elasticsearch是如何实现Master选
2020-07-16 17:51:42
1496
2
原创 sql中左连接 、右连接、内连接和全外连接的区别
基本定义: left join (左连接):返回包括左表中的所有记录和右表中连接条件相等的记录。 right join (右连接):返回包括右表中的所有记录和左表中连接条件相等的记录。 inner join (等值连接或者叫内连接):只返回两个表中连接条件相等的记录。 full join (全外连接):返回左右表中所有的记录和左右表中连接条件相等的记录。举个例子: A表 id name 1 小王 2 小李 3 小
2020-07-03 20:40:25
1271
原创 如何解决Redis 和MySQL的数据不一致
1. MySQL持久化数据,Redis只读数据redis在启动之后,从数据库加载数据。读请求:不要求强一致性的读请求,走redis,要求强一致性的直接从mysql读取。写请求:数据首先都写到数据库,之后更新redis(先写redis再写mysql,如果写入失败事务回滚会造成redis中存在脏数据)。2.MySQL和Redis处理不同的请求数据类型MySQL处理实时...
2020-04-21 19:03:31
1490
1
原创 数据库索引失效的几种情况
一、什么是索引?索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。如果想按特定职员的姓来查找他或她,则与在表中搜索所有的行相比,索引有助于更快地获取信息。索引的一个主要目的就是加快检索表中数据,亦即能协助信息搜索者尽快的找到符合限制条件的记录ID的辅助数据结构。二、索引失效的几种情况 1.如果条件中有多个字段使用or,即使其...
2020-04-20 15:48:08
4232
原创 图文详解Spring AOP
一、什么是AOP首先先给出一段比较专业的术语(来自百度):在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使...
2020-04-17 21:08:12
537
原创 TCP的三次握手与四次挥手详解及面试题
TCP请求报文结构图名词解释 序列号seq:占4个字节,用来标记数据段的顺序,TCP把连接中发送的所有数据字节都编上一个序号,第一个字节的编号由本地随机产生;给字节编上序号后,就给每一个报文段指派一个序号;序列号seq就是这个报文段中的第一个字节的数据编号。 确认号ack:占4个字节,期待收到对方下一个报文段的第一个数据字节的序号;序列号表示报文段携带数据的第一个字...
2020-04-17 20:08:24
409
原创 学习笔记:JVM内存结构、垃圾回收器种类、垃圾回收算法、内存分配与回收策略、Java 内存模型与线程、虚拟机类加载机制与类加载器
1. Java 内存区域与内存溢出异常1.1 运行时数据区域根据《Java 虚拟机规范(Java SE 7 版)》规定,Java 虚拟机所管理的内存如下图所示。1.1.1 程序计数器内存空间小,线程私有。字节码解释器工作时就是通过改变程序计数器的值来选取下一条需要执行指令的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖计数器完成。如果线程正在执...
2020-04-10 16:20:06
314
原创 JVM面试题及答案-图文详解
类加载器 就是根据指定全限定名称将class文件加载到JVM内存,转为Class对象。启动类加载器(Bootstrap ClassLoader):由C++语言实现(针对HotSpot),负责将存放在\lib目录或-Xbootclasspath参数指定的路径中的类库加载到内存中。其他类加载器:由Java语言实现,继承自抽象类ClassLoader。
2020-04-09 21:10:50
607
1
原创 图文详解spring的4种事务特性,5种隔离级别,7种传播行为
什么是事务:事务是指逻辑上的一组操作,组成这组操作的各个逻辑单元,要么一起成功,要么一起失败。事务特性(4种):原子性 (atomicity):强调事务的不可分割,要么一起成功,要么一起失败。 一致性 (consistency):事务的执行时,前后数据的完整性保持一致。 隔离性 (isolation):一个事务执行的过程中,不应该受到其他事务的干扰。 持久性(dur...
2020-04-09 14:53:50
559
1
原创 全面分析Hashmap在JDK1.7和JDK1.8有哪些区别
一、HashmapJDK1.7和JDK1.8有哪些区别?(1)头插与尾插: JDK1.7用的是头插法,而JDK1.8及之后使用的都是尾插法,那么他们为什么要这样做呢?因为JDK1.7是用单链表进行的纵向延伸,当采用头插法时会容易出现逆序且环形链表死循环问题。但是在JDK1.8之后是因为加入了红黑树使用尾插法,能够避免出现逆序且链表死循环的问题。(2)扩容后数据存储位置...
2020-03-12 18:59:32
1121
1
原创 详解Elasticsearch和Lucene的底层数据的结构、多维度阐述ES查询快、FST的数据结构原理
首先思考几个问题:为什么ES的搜索功能是 近实时 的? 为什么ES对文档的 CRUD (创建-读取-更新-删除) 操作是 实时 的?一、ES与Lucene的内部结构下面通过几张图,介绍ES与Lucene的内部结构。图1,ES的集群图2,ES的节点Node,一个Node相当于一个ES服务端。图3,ElasticSearch的inde...
2020-03-11 17:14:17
5297
2
原创 Elasticsearch与传统关系型数据库mysql的区别
小刘最近在做搜索相关的事,但一直很苦恼。他之前在用数据库,如MySQL,来做搜索的业务,如知识库管理、问答和文档搜索等。在这过程中,他发现数据库并不能很好的满足他的需求。1.响应时间MySQL背景:小刘在做测试时,发现当数据库中的文档数仅仅上万条时,关键词查询就比较慢了。如果一旦到企业级的数据,响应速度就会更加不可接受。原因:在数据库做模糊查询时,如LIKE语句,它会遍历整张表,...
2020-03-09 18:16:34
3192
原创 ElasticSearch倒排索引、分词的详解和使用建议
一、倒排索引(Inverted Index)ElasticSearch引擎把文档数据写入到倒排索引(Inverted Index)的数据结构中,倒排索引建立的是分词(Term)和文档(Document)之间的映射关系,在倒排索引中,数据是面向词(Term)而不是面向文档的。一个倒排索引由文档中所有不重复词的列表构成,对于其中每个词,有一个包含它的文档列表。举个例子:对以下三个文档...
2020-03-09 17:52:32
1146
原创 Spring Bean的生命周期与源码分析
Spring Bean的生命周期是Spring面试热点问题。这个问题即考察对Spring的微观了解,又考察对Spring的宏观认识,想要答好并不容易!本文希望能够从源码角度入手,帮助面试者彻底搞定Spring Bean的生命周期。一、四个阶段Spring Bean的生命周期只有这四个阶段。把这四个阶段和每个阶段对应的扩展点糅合在一起虽然没有问题,但是这样非常凌乱,难以记忆。要彻底搞清楚Sp...
2020-02-20 15:36:13
272
原创 Redis分布式锁的实现原理和案例
随着业务越来越复杂,应用服务都会朝着分布式、集群方向部署,而分布式CAP原则告诉我们,Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可得兼。 很多场景中,需要使用分布式事务、分布式锁等技术来保证数据最终一致性。有的时候,我们需要保证某一方法同一时刻只能被一个线程执行。在单机...
2020-02-17 23:59:38
1925
原创 Redis Cluster集群模式的原理与搭建
Redis 3.0之后,redis节点之间通过去中心化的方式,提供了完整的sharding分片、replication主从复制(复制机制仍使用原有机制,并且具备感知主备的能力)、failover故障容错的解决方案,该方案称为Redis Cluster。即:将proxy代理/sentinel哨兵的工作融合到了普通Redis节点里,下面将介绍Redis Cluster这种模式下,水平...
2020-02-15 00:30:15
1087
原创 使用JestClient(HTTP通信)连接elasticsearch-5.x对数据进行分组聚合
原本数据存放在mysql中,项目需求是从mysql中查出来数据推送给前端;但是随着数据量增大,我们的查询语句也复杂,性能会明显下降。所以就考虑干脆存放到elasticsearch中,查询计算都方便;elasticsearch5.x在连接集群方面对tcp支持不如http性能好,推荐使用http的方式,直接打消使用TransportClient(TCP通信)客户端的念头。因为不想使用ht...
2020-02-10 17:44:33
1078
原创 图文详解线程池ThreadPoolExecutor的实现原理
1. 为什么要使用线程池在实际使用中,线程是很占用系统资源的,如果对线程管理不善很容易导致系统问题。因此,在大多数并发框架中都会使用线程池来管理线程,使用线程池管理线程主要有如下好处:降低资源消耗。通过复用已存在的线程和降低线程关闭的次数来尽可能降低系统性能损耗; 提升系统响应速度。通过复用线程,省去创建线程的过程,因此整体上提升了系统的响应速度; 提高线程的可管理性。线程是稀缺资源,...
2020-02-04 16:48:54
883
2
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅