自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(36)
  • 资源 (1)
  • 收藏
  • 关注

原创 Java面试题035:一文深入了解Docker

Docker是一个基于Go语言开发的开源容器化平台,采用C/S架构。本文介绍了Docker的安装配置(推荐Ubuntu/CentOS7+系统)、镜像构建(使用Dockerfile定义)、常用命令(镜像/容器管理)以及数据迁移备份方法。重点讲解了Dockerfile指令(WORKDIR、COPY、ADD、CMD等)的使用场景,通过两个案例演示了Python环境和Java环境的镜像构建过程。同时提供了容器创建、目录挂载等实用操作指南,并介绍了DockerHub和私有仓库的使用。

2025-07-23 09:08:07 624

原创 Java面试题034:一文深入了解MySQL(6)

MySQL分库分表技术详解 摘要:本文系统介绍了MySQL分库分表技术,主要解决单库单表数据量过大导致的性能瓶颈问题。文章详细阐述了四种分库分表实现形式:垂直分库、垂直分表、水平分库和水平分表,并分析了数值范围(range)和哈希取模(hash)两种分片规则的特点。同时介绍了Mycat和Sharding-Sphere两大主流分库分表中间件,包括其工作原理、应用场景和配置案例。文章还深入讲解了分片键选择、分片算法类型等关键技术点,为大规模数据存储方案设计提供了系统性的技术指导。

2025-07-21 16:41:36 602

原创 Java面试题033:一文深入了解MySQL(5)

本文深入解析了MySQL读写分离和分库分表技术,重点介绍了读写分离的实现方式。主要内容包括:1. 读写分离原理及其适用场景(高并发、资源优化、数据备份等);2.三种实现模式(主从、主主、多级复制)的优缺点比较;3. ProxySQL中间件的详细配置流程,包括监控账号设置、主机分组、路由规则定义等;4. 基于用户、端口和正则表达式等多种路由策略的实现方法。文章通过具体配置示例,展示了如何利用ProxySQL搭建高效MySQL读写分离架构。

2025-07-03 18:25:36 685

原创 Java面试题032:一文深入了解MySQL(4)

MySQL索引深度解析与优化指南 摘要:本文系统讲解了MySQL索引的核心知识,包括B+树索引结构原理、各类索引(主键/唯一/组合/覆盖等)的特点和使用场景,以及索引设计六大原则。重点剖析了索引失效的常见原因(如违反最左前缀、类型转换、负向查询等),并提供了索引使用分析方法(EXPLAIN解读)和优化建议(控制数量、优先组合索引、避免全表扫描等)。通过分析B+树相比其他数据结构的优势,揭示了MySQL选择B+树作为索引实现的内在逻辑,帮助开发者构建高效的数据库查询方案。

2025-07-01 10:19:28 933

原创 Java面试题031:一文深入了解MySQL(3)

MySQL多表查询与优化摘要 本文详细解析了MySQL多表查询的核心概念和优化技巧。主要内容包括:1)连接操作(内连接、左/右外连接)的区别与应用场景;2)UNION与UNION ALL的使用要点及数据合并规则;3)笛卡尔积的产生条件与6种避免方法;4)SQL查询语句11个执行步骤的完整解析;5)COUNT函数的性能对比(count(1)/count(*)/count(列名));6)IN与EXISTS的底层机制及性能差异。通过具体案例演示了查询语句的执行过程,特别强调字段匹配、连接条件和执行顺序对查询结果的

2025-06-29 18:15:02 784

原创 Java面试题030:一文深入了解MySQL(2)

本文介绍了MySQL数据库的核心知识点,包括数据类型、三大范式和数据表操作。在数据类型部分,对比了int和bigint主键的选择原则,分析了FLOAT、DOUBLE和DECIMAL的精度差异,以及CHAR与VARCHAR的适用场景,BLOB和TEXT的存储特点。三大范式部分详细讲解了1NF(原子性)、2NF(完全依赖)和3NF(直接依赖)的设计原则。数据表操作部分涵盖了创建表的三种方法(CREATE TABLE、LIKE复制、SELECT复制),删除表的TRUNCATE和DROP区别,以及五种约束(主键、非

2025-06-28 22:06:06 662

原创 Java面试题029:一文深入了解MySQL(1)

本文介绍了MySQL数据库及其相关知识体系。首先概述了MySQL作为流行开源关系型数据库的特点,包括支持多语言、多系统和大数据量等优势。接着对比分析了关系型数据库(如Oracle、SQL Server)和非关系型数据库(如Redis、MongoDB)的特性差异,指出前者强在事务处理、数据结构化,后者优势在于高扩展性和灵活性。文章详细解析了MySQL的架构设计,包括连接层、服务层(含SQL解析、优化器、缓存)和存储引擎层(支持InnoDB、MyISAM等可插拔引擎)等核心组件。最后说明MySQL 5.5后默认

2025-06-28 12:00:40 740

原创 Java面试题028:一文深入了解缓存Memcached

Redis与Memcached对比分析 Redis和Memcached都是基于内存的键值存储系统,但存在显著差异: 数据结构:Redis支持多种数据结构(list/set/hash等),Memcached仅支持简单键值; 持久化:Redis支持数据持久化,Memcached无此功能; 性能特点:Redis单核处理小数据性能更优,Memcached多核处理大数据能力更强; 内存管理:Memcached采用Slab Allocation机制,有效避免内存碎片但利用率较低;Redis使用简单malloc/free

2025-06-27 09:22:15 408

原创 Java面试题027:一文深入了解数据库Redis(3)

本文详细介绍了Redis的高可用架构与消息队列实现方案。在Redis高可用方面,讲解了主从复制(全量复制和增量复制原理)、哨兵模式(主观/客观下线机制)和集群架构(节点握手与槽分配)。在消息队列方面,展示了基于List(lpush/rpop和阻塞式brpop)和发布订阅模式(pub/sub)的实现方式,并分析了各自的优缺点。文章还提供了Java代码示例,演示了如何通过Jedis实现消息生产者和消费者。需要注意的是,Redis消息队列存在消息丢失风险、无持久化保障等局限性,不适合对可靠性要求高的场景。

2025-06-23 23:38:34 1137

原创 Java面试题026:一文深入了解数据库Redis(2)

Redis提供RDB和AOF两种持久化方式。RDB通过定时快照保存数据,恢复速度快但可能丢失数据;AOF记录所有写命令,数据更完整但文件较大。Redis 4.0引入混合持久化,结合两者的优势。恢复数据时优先加载AOF文件,其次RDB文件。根据需求可选择单独或同时使用两种方式,数据安全性要求高时推荐同时启用。

2025-06-22 11:33:32 681

原创 Java面试题025:一文深入了解数据库Redis(1)

Redis是一种基于键值对(key-value)的NoSQL数据库。支持string(字符串)、hash(哈希)、list(列表)、set(集合)、zset(有序集合)、Bitmaps(位图)、HyperLogGEO(地理信息定位)等多种数据结构,因此Redis可以满足很多应用场景,常用于缓存、消息队列、会话存储等应用场景。

2025-06-21 22:14:24 954

原创 Java面试题024:一文深入了解微服务消息队列RocketMQ

RocketMQ是阿里开源的一款高性能、高吞吐量的消息中间件。支持事务型消息(消息发送和 DB 操作保持两方的最终一致性,RabbitMQ 和 Kafka 不支持)支持结合 RocketMQ 的多个系统之间数据最终一致性(多方事务,二方事务是前提)支持 18 个级别的延迟消息(Kafka 不支持)支持指定次数和时间间隔的失败消息重发(Kafka 不支持,RabbitMQ 需要手动确认)支持 Consumer 端 Tag 过滤,减少不必要的网络传输(即过滤由MQ完成,而不是由消费者完成。

2025-06-19 14:30:34 841

原创 Java面试题023:一文深入了解微服务消息队列kafka

Kafka 是一个高吞吐量、低延迟的分布式消息中间件,由 Apache 软件基金会开发。Kafka 对消息保存时根据 Topic 进行归类,发送消息 者称为 Producer,消息接受者称为 Consumer。Kafka 本质上是一个 MQ(Message Queue),使用消息队列的好处?解耦:允许我们独立修改队列两边的处理过程而互不影响。冗余:有些情况下,我们在处理数据的过程会失败造成数据丢失。

2025-06-17 10:41:17 749

原创 Java面试题022:一文深入了解微服务网关Gateway

Spring Cloud Gateway 是Spring Cloud的一个全新的API网关项目,目的是为了替换掉Zuul1,它基于Spring5.0 + SpringBoot2.0 + WebFlux(基于性能的Reactor模式响应式通信框架Netty,异步阻塞模型)等技术开发,性能高于Zuul。

2025-06-15 12:21:01 989

原创 Java面试题021:一文深入了解微服务之网关Zuul

Spring Cloud Zuul是Netflix开源的一款提供动态路由、监控、弹性、安全等网关服务的框架。它作为一个微服务的入口点,通过路由配置,将不同路径的请求转发到不同的服务,同时,Zuul也支持动态路由配置,能够在运行时根据需要动态更新路由信息,而不影响系统的可用性。使用Zuul,一般在微服务数量较多(多于10个)的时候推荐使用,对服务的管理有严格要求的时候推荐使用,当微服务权限要求严格的时候推荐使用。

2025-06-13 17:53:48 960

原创 Java面试题020:一文深入了解微服务之负载均衡Feign

使用Ribbon+RestTemplate时,利用RestTemplate对http请求的封装处理,形成了一套模板化的调用方法。实际开发中,往往一个接口会被多处调用,通常会针对每个微服务自行封装一些客户端类来包装这些依赖服务的调用。Feign在此基础上做了进一步封装,由他来定义和实现依赖服务接口的定义。我们只需创建一个接口并使用注解的方式来配置它(以前是Dao接口上标注Mapper注解,现在是一个微服务接口上面标注一个Feign注解即可),

2025-06-12 14:50:27 650

原创 Java面试题019:一文深入了解微服务之负载均衡Ribbon

Ribbon是Netflix下的负载均衡项目,它在集群中为各个客户端的通信提供了支持,主要实现中间层应用层析的负载均衡。负载均衡器,可支持插拔式的负载均衡规则。对多种协议提供支持,例如HTTP、TCP、UDP。集成了负载均衡功能的客户端。Spring Cloud将Ribbon的API进行了封装,使用者可以使用封装后的API来实现负载均衡,也可以直接使用Ribbon的原生API。ribbon-core:项目核心,包括负载均衡器接口定义、客户端接口定义、内置的负载均衡实现等API。

2025-06-11 17:33:26 1323

原创 Java面试题018:一文深入了解RPC框架

在整理Ribbon和Feign之前,我们先了解一下RPC。

2025-06-10 16:45:07 433

原创 Java面试题017:一文深入了解微服务之熔断器Sentinel持久化

本节介绍Sentinel 控制台和规则持久化。

2025-06-09 17:21:50 311

原创 Java面试题016:一文深入了解微服务之熔断器Sentinel

 

2025-06-09 14:06:35 1265

原创 Java面试题015:一文深入了解微服务之熔断器Hystrix

Hystrix是由Netflix开源的一个延迟和容错库,用于隔离访问远程系统、服务或者第三方库,防止级联失败,从而提升系统的可用性与容错性。Hystrix主 要通过以下几点实现延迟和容错。(1)包裹请求:使用@HystrixCommand包裹对依赖服务的调用逻辑。(2)跳闸机制:当某服务的错误率超过一定的阈值时,Hystrix可以跳闸,停止请求该服务一段时间。(3)资源隔离:Hystrix为每个依赖都维护了一个小型的线程池(舱壁模式)(或者信号量)。

2025-06-08 13:43:54 563

原创 Java面试题014:一文深入了解微服务之服务注册中心zookeeper

Zookeeper最早起源于雅虎研究院的一个研究小组,雅虎的开发人员就试图开发一个通用的无单点问题的分布式协调框架,以便让开发人员将精力集中在处理业务逻辑上。在立项初期,考虑到之前雅虎内部很多项目都是使用动物的名字来命名的,时任研究院的首席科学家RaghuRamakrishnan开玩笑地说:“在这样下去,我们这儿就变成动物园了!”,动物园管理员-Zookeeper的名字也就由此诞生。

2025-06-08 10:12:37 664

原创 Java面试题013:一文深入了解微服务之服务注册中心Nacos

ORM里面还有Hibernate和Mybatis-plus没介绍,后边再补上。还是先把知识体系的主干先建立起来,从这节开始我们进入微服务结构的整理,微服务的组件比较多,我们尽量都涵盖到,对于一些已经过时或者停更的组件,就简单一带而过,满足面试需要就足够了,把更多的时间放在实用的组件上。

2025-06-07 23:33:03 457

原创 Java面试题012:一文深入了解Mybatis原理2

目前比较流行的MyBatis分页插件是PageHelper,其基于拦截器的原理,在拦截器中实现了分页查询的逻辑,并提供了丰富的配置选项和API,可以方便地实现各种复杂的分页查询需求。预编译之后的 sql 多数情况下可以直接执行,DBMS 不需要再次编译,越复杂的sql,编译的复杂度将越大,预编译阶段可以合并多次操作为一个操作。2.MyBatis可以使用SQL语句中的LIMIT关键字实现简单的分页,但是对于大数据量的分页查询,需要使用更高效的方法。${} 是拼接符,字符串替换,没有预编译处理。

2025-06-07 13:49:37 43

原创 Java面试题011:一文深入了解Mybatis原理

从这节开始,我们先用2-3节的时间把ORM相关的内容整理一下,让大家先对ORM有一个深入的熟悉,方便我们后续的微服务和数据库相关章节的理解学习。1、ORM概念ORM(Object Relational Mapping),对象关系映射,是⼀种为了解决关系型数据库数据与简单Java对象(POJO)的映射关系的技术。简单来说,ORM是通过使⽤描述对象和数据库之间映射的元数据,将程序中的对象⾃动持久化到关系型数据库中。ORM技术特点:1.提高了开发效率。

2025-06-06 21:50:17 44

原创 Java面试题010:一文深入了解Springboot原理

至此,@EnableAutoConfiguration自动配置就是:从classpath中搜寻所有的META-INF/spring.factories配置文件,并将其中org.springframework.boot.autoconfigure.EnableutoConfiguration对应的配置项通过反射(Java Refletion)实例化为对应的标注了@Configuration的JavaConfig形式的IoC容器配置类,然后汇总为一个列表并加载到IoC容器。使用 Maven 打包该项目A。

2025-06-04 15:47:43 316

原创 Java面试题009:一文深入了解Spring MVC原理

HandlerAdapter:处理器适配器,Handler 执行业务方法之前,需要进行一系列的操作,包括表单数据的验证、数据类型的转换、将表单数据封装到 JavaBean 等,这些操作都是由 HandlerApater 来完成,开发者只需将注意力集中业务逻辑的处理理上,DispatcherServlet 通过 HandlerAdapter 执行不同的 Handler。DispatcherServlet:前置控制器,是整个流程控制的核心,控制其他组件的执行,进行统一调度,降低组件之间的耦合性,相当于总指挥。

2025-06-03 21:41:38 44

原创 Java面试题008:一文深入了解Spring原理--AOP和常用注解

AOP(Aspect Oriented Programming),即面向切面编程,可以说是 OOP(ObjectOrientedProgramming,面向对象编程)的补充和完善。OOP引 入封装、继承、多态等概念来建立一种对象层次结构,用于模拟公共行为的一个集合。不过OOP 允许开发者定义纵向的关系,但并不适合定义横向的关系,例如日志功能。

2025-06-03 11:34:22 47

原创 Java面试题007:一文深入了解Spring原理--IOC

这一节出的比较慢,主要是对比了网上大量的文章和源码,网上的文章有很多过时、存在歧义、甚至错误的说法。框架:Spring 实现了简单的组件的配合组成一个复杂的应用(应用对象被声明式地组合,典型地是在一个XML文件里),在IOC和AOP基础上可以整合各种的企业应用的开源框架和优秀的第三方类库。Spring 启动时读取应用程序提供的Bean配置信息,并在Spring容器中生成一份相应的Bean配置注册表,然后根据这张注册表实例化 Bean,装配好 Bean 之间的依赖关系,为上层应用提供准备就绪的运行环境。

2025-06-02 09:17:09 815

原创 Java面试题006:一文深入了解多线程并发---锁机制

java当中的锁是在多线程环境下为保证共享资源健康、线程安全的一种手段。线程操作某个共享资源之前,先对资源加一层锁,保证操作期间没有其他线程访问资源,当操作完成后,再释放锁。锁的大分类,有两种:悲观锁、乐观锁。1、乐观锁乐观锁是一种乐观思想,即认为读多写少,遇到并发写的可能性低,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,使用版本号机制或 CAS 算法。Java没有提供可直接使用的乐观锁。

2025-06-02 09:12:56 611

原创 Java面试题005:一文深入了解多线程并发---线程池

线程池会返回一个 Future 类型的对象,通过这个Future 对象可以判断任务是否执行成功,并且可以通过 Future 的 get() 方法来获取返回值,get() 方法会阻塞当前线程直到任务完成,而使用 get(long timeout,TimeUnit unit) 方法则会阻塞当前线程一段时间后立即返回,这时候有可能任务没有执行完。线程的创建和销毁都需要映射到操作系统,因此其代价是比较高的,如果任务来了才创建线程那么响应时间会变长,出于避免频繁创建、销毁线程以及快速响应的需要,线程池应运而生。

2025-06-01 10:32:05 445

原创 Java面试题004:一文深入了解多线程并发---线程

至于为什么用公众号去写,而不是用CSDN,这个问题其实是我自己的一个习惯使然。平常上下班路上或者在某个场合等待之余,会有刷手机的习惯。公众号的文章就比CSDN要方便了许多,尤其是许多小伙伴去面试的路上或者等待面试的时候,可以拿出手机再看一遍。1、线程进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以启动多个线程。比如在Windows系统中,一个运行的exe就是一个进程。线程是指进程中的一个执行流程,一个进程中可以运行多个线程。

2025-06-01 10:19:56 595

原创 Java面试题003:一文深入了解JAVA集合

欢迎大家关注我的微信公众号:吾城十二楼,文章是从公众号直接复制粘贴过来的,排版不太美观。10、JAVA集合集合相关类和接⼝都在java.util中,主要分为3种:List(列表)、Map(映射)、Set(集)。其中 Collection 是集合 List 、 Set 的⽗接⼝,它主要有两个⼦接⼝:List :存储的元素有序,可重复。Set :存储的元素⽆序,不可重复。Map 是另外的接⼝,是键值对映射结构的集合。1、List。

2025-06-01 10:13:45 605

原创 Java面试题002:一文深入了解JAVA异常的方方面面

class MyException extends Exception { // 创建自定义异常类 String message;// 定义String类型变量 public MyException(String ErrorMessagr) { // 父类方法 message = ErrorMessagr;public String getMessage() { // 覆盖getMessage()方法 return message;}}欢迎关注我的微信公众号:吾城十二楼。

2025-06-01 10:06:09 474

原创 Java面试题001:java基础

最近看着团队里小伙伴找工作很焦虑,现在的市场行情不好,人员饱和程度高,每年不断有新人加入,他们成本低,好培养,相对来说,工作三四年甚至七八年的人,找起工作来就比较吃力。随着央国企开始过紧日子,企业的岗位需求也越来越少,一个中高级岗位会有几百上千人来竞争,面试官的要求越来越挑剔,既要精通还要广泛全面的技术储备。结合这几年带团队做项目和面试与被面试的经历,想整理一份全面深入的面试题,分享给大家的同时,也让自己的知识体系延伸加深。

2025-06-01 09:54:54 909

原创 通过数据泵expdp、impdp方式备份与还原

既然是因为是“默认”的永久表空间不可以删除,我们仅需将默认的永久表空间指定到其他表空间,然后USERS表空间便可以被顺利删除。创建备份逻辑目录,此目录不是真实的目录(单引号里面的内容是备份的目录,可以先查看一下所有的目录:select * from dba_directories;注:remap_schema=WMSDBA:WMSDBA表示把左边的WMSDBA用户的数据,导入到右边的WMSDBA用户里面。创建还原目录(单引号里面的内容是导入的目录,与前面创建的目录相同)1)查询数据库系统的默认永久表空间。

2023-05-24 11:21:06 3043 1

反编译工具

2017-04-27

空空如也

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

TA关注的人

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