- 博客(17)
- 收藏
- 关注
原创 java-redis面试题
本质上是一个Key-Value类型的内存数据库,单个Value的最大限制是1GB。其具有内存存储、单线程模式、持久化支持、分布式部署、高性能、高可用等特点。将Redis的内存中的数据定期保存到磁盘上,以防止数据在Redis进程异常退出或服务器断电等情况下丢失。将Redis的所有写操作追加到AOF文件的未尾,从而记录了Redis服务器运行期间所有修改操作的详细记录。当Redis重新启动时,可以通过AOF文件来恢复数据。(如果redis刚执行了写操作,但还未写入AOF文件就宕机了,那可能导致该操作内容丢失)
2026-01-26 21:36:02
398
原创 java-分布式面试题(事务+锁+消息队列+zookeeper+dubbo+nginx+es)
单个服务的单一数据库事务通过代码控制 实现 事务问题通过 本地消息表(其实类似于一个协调者) 和 MQ 实现最终一致性【rabbitMQ也支持事务,但是性能差】rocketMQ支持事务,通过其半消息实现。(rabbitMQ、kafka不支持事务)分布式事务框架是一个基于Lucene构建的分布式、开源、RESTful 搜索引擎。常用于实时搜索、日志分析、数据分析等场景。1.什么是zookeeperZooKeeper是一个开放源码的分布式协调服务,它是集群的管理者,用来解决分布式系统中的。
2026-01-23 21:24:45
789
原创 java-seata基础教学
建议JDK1.8的宝子们 直接下载1.4.2或者以下的版本,以上的版本大多支持更高的JDK版本,导致启动成功后闪退。3.TM结束分布式事务,通知TC提交/回滚分布式事务,事务一阶段结束。其包含TC/TM/RM三大组件,工作流程分为二阶段(加载阶段+提交/回滚阶段)】的配置,注意(格式为propeties、配置信息中的事务分组、变更配置信息中的数据库信息)5.TC通知所有RM提交/回滚资源,事务二阶段结束。2.执行sql,更新业务数据。1.解析SQL并找到要更新的业务数据,在业务数据被更新前,将其保存成“
2026-01-22 19:46:19
675
原创 java - mysql面试题
一、事务的基本要素(ACID):原子性(Atomicity):事务中的所有操作,要么全部做完,要么全部不做。一致性(Consistency):事务开始前和结束后,数据库的完整性约束没有被破坏。(A向B转账,不可能A扣了钱,B却没收到。隔离性(Isolation):同一时间,只允许一个事务请求同一数据。(A正在从一张银行卡中取钱,在A取钱的过程结束前,B不能向这张卡转账。持久性(Durability):事务完成后,事务对数据库的所有更新将被保存到数据库,不能回滚。
2026-01-09 21:46:34
956
原创 java-场景面试题
进行处理,可以是可以,但是对于热点商品数据存在风险,因为update会加行级锁,高并发场景下可能拖垮数据库,虽然我们可以通过拆分库存(999个库存分到3个库,每个库就333库存)、合并sql(多个update合并成一个,减少行级锁)、update变成insert(不再update,而是insert一条记录,然后去异步计算库存)的方法减轻数据库负担,但是不建议。结合1和2,拉取多条消息,先全部入库,然后进行多线程处理(结果入库),然后直接提交kafka(不用等所有线程处理完,直接异步提交即可)。
2026-01-08 22:34:30
799
原创 java-线上问题排查
监控中有一条sql,其where含有索引字段,但是仍然为慢sql,通过查询执行计划得知,因为创建的是联合索引,而它不符合联合索引的最左原则匹配原则导致sql实质未走索引。而后分析相关sql发现,cpu飙升原因是因为锁等待导致(定时任务拉取风控系统的相关数据,我们通过某一维度查库并入库整合,但是因为存在批量的用户恶意刷单、刷风控导致当前用户下数据较多,且存在并发情况,导致update同一用户数据时发生锁等待情况(InnoDB会在update的时候自动给行记录加锁,以防止其他线程同时更新该行记录。
2025-12-23 20:21:38
718
原创 java-设计模式面试篇
是常见问题的可重用解决方案模板,可提高代码的可重用性、可维护性、可扩展性。单例模式是一种创建型设计模式,它确保一个类只有一个实例,并只提供一个全局访问点来获取该实例。实现思想:私有静态变量、构造函数是private、提供一个方法可以初始化单例对象且仅能初始化一个、线程安全策略模式是一种行为设计模式,它允许在运行时根据不同情况选择算法的不同实现。不同情况选择不同策略,新增策略时也符合开闭原则、单一原则等。
2025-12-17 23:26:55
905
原创 java-Docker基础教学
Docker 是一个开源的应用容器引擎,是C/S架构(客户端-服务端),基于 Go 语言开发。Docker 是一个容器化平台,用于将应用程序及其所有依赖项打包到一个标准化的、轻量级的、可移植的容器中。容器可以在任何环境中(开发、测试、生产)一致地运行。(即一次封装,到处运行cp本地文件系统(OS操作系统|宿主机)和容器之间进行文件或者文件夹拷贝exec登录一个容器,使用命令行操作正在运行的容器。images镜像的集合查询。ps容器列表pull下载镜像restart。
2025-12-15 23:15:31
579
原创 java-SpringCloud从0-1基础教学
spring提供的一种包含多种便捷访问远程Http服务的方法,也属于Restful方式,即HTTP+JSON。Eureka是服务注册中心,采用了CS的设计架构。(检测服务心跳,便于监控和运维)客户端负载均衡工具,主要功能是提供客户端的软件负载均衡算法和服务调用。(nginx是服务端负载均衡,ribbon是本地负载均衡)简单来说Ribbon=负载均衡+RestTemplate调用Feign是一个声明式的web服务客户端,便于服务调用(也是http+json),
2025-12-14 15:09:06
935
原创 java-springboot基础
作用:其最主要作用就是帮助开发人员快速的构建庞大的spring项目,并且尽可能的减少一切xml配置,做到开箱即用。特点:自动配置、起步依赖二、创建springboot项目1.创建maven项目2.添加依赖--添加父工程坐标--><parent></parent>--JDK版本-->--添加web启动器 web项目需要-->--引入spring‐boot‐starter;所有starter的基本配置--></project>
2025-10-29 19:41:32
1915
原创 java-jvm面试题
启动类加载器(Bootstrap) C++语言扩展类加载器(Extension) Java语言应用程序类加载器(AppClassLoader)也叫系统类加载器 Java语言用户自定义加载器共享区间 ,被每个线程所共享接口:native 修饰本地方法栈:记录本地方法库:实现又叫栈内存,其生命周期与线程一致!即栈随着线程的创建而创建,随着线程的结束而释放(栈内存中不存在垃圾回收问题!
2025-09-30 19:30:17
1309
原创 八股 - java并发
提前创建好一批线程,然后保存在线程池中,当有任务需要执行的时候,从线程池中选一个线程来执行任务。这样可以避免频繁创建和销毁线程的开销。(Java中的线程池都继承自ExecutorService这个接口,具体的实现上有两种线程池,分别加ThreadPoolExetutor和通过为每一个线程创建一份共享变量的副本来保证各个线程之间的变量的访问和修改互相不影响(即变量在线程内共享的,线程间互斥)。主要用于解决并发问题/在线程间传递数据。重要的关键字,主要用来加锁即同步锁,以此实现同步方法/同步代码块。
2025-09-25 14:45:24
1645
原创 八股-java集合
原因:线程1先进性扩容,桶2中有A->B元素,将A重新计算分配到了其他桶,此时还未对B进行计算分配,线程2开始了扩容,此时线程2不知道线程1对A进行了什么操作,看到的是桶2只有B->null的元素,于是对B进行扩容操作,重新分配桶,线程2扩容结束后线程1继续进行对B未完成的扩容操作,线程1并不知道B已经分配了,于是重新进行计算分配,因为头插入法导致后来B插入到了A之前,也就是B指向了A B->A,而此时对于之前的旧操作A仍然指向B,于是形成死循环B->A->B,无法get到值而且死循环会导致CPU爆满。
2025-09-12 15:21:46
783
原创 八股-java基础
例如传入一个int数-2147483648,取它的绝对值,Math.abs(-2147483648),得到的结果还是-2147483648而不是2147483648,因为他已经超过了int的取值范围,所以会对(2147483647)的二进制编码(01111111 11111111 11111111 11111111)+1,最终得到的就是-2147483648。当创建的字符串包含2字节的元素,则用utf-16表示并存放于byte[]中,和char[]其实一样,只不过换了容器而已。
2025-09-08 16:43:56
712
原创 Lambda表达式 及 Stream流
3.如果方法体中只有一句代码,所在的大括号以及;可以省略,若有return 则可可以省略。2.如果重写方法的参数只有一个,所在的小括号可以省略(无参数的话不可省略())检测函数式接口:在接口上面,@FunctionalInterface。函数式接口:接口中必须有且只能有一个抽象方法。学习期建议先写成匿名内部类,再转换成Lambda。->:将参数传递到方法体中。():重写方法的参数位置。{}:重写方法的方法体。b.必须有函数式接口做方法参数传递。定义格式:()->{}1.重写方法的参数类型可以省略。
2024-10-18 18:03:13
360
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅