面试
文章平均质量分 89
spring_root
学海无涯
展开
-
基于Redis实现分布式锁
对于单机多线程来说,在 Java 中,我们通常使用类、关键字这类 JDK 自带的本地锁来控制一个JVM进程内的多个线程对本地共享资源的访问。下面是我对本地锁画的一张示意图。从图中可以看出,这些线程访问共享资源是互斥的,同一时刻只有一个线程可以获取到本地锁访问共享资源。分布式系统下,不同的服务/客户端通常运行在独立的 JVM 进程上。如果多个 JVM 进程共享同一份资源的话,使用本地锁就没办法实现资源的互斥访问了。于是,分布式锁就诞生了。举个例子:系统的订单服务一共部署了 3 份,都对外提供服务。原创 2023-10-31 17:35:25 · 158 阅读 · 0 评论 -
Java 中的 7 种重试机制
如果是基于 Spring 的项目,使用 Spring Retry 的注解方式已经可以解决大部分问题如果项目没有使用 Spring 相关框架,则适合使用 Google guava-retrying:自成体系,使用起来更加灵活强大。原创 2023-08-04 21:30:00 · 696 阅读 · 0 评论 -
非常实用的12条 SQL 优化方案
非常实用原创 2022-06-15 16:46:03 · 396 阅读 · 0 评论 -
玩转Java8 Stream,代码效率飞升
概述Stream原创 2022-05-31 20:36:26 · 341 阅读 · 0 评论 -
MySQL的自增 ID 用完了,怎么办?
最近看到这样的一个面试题。MySQL的自增 ID 用完了,怎么办?以下是这个面试题的解决方案。如果你用过或了解过MySQL,那你一定知道自增主键了。每个自增id都是定义了初始值,然后按照指定步长增长(默认步长是1)。虽然,自然数是没有上限的,但是我们在设计表结构的时候,通常都会指定字段长度,那么,这时候id就有上限了。既然有上限,就总有被用完的时候,如果id用完了,怎么办呢?今天就一起来学习下吧。自增id说到自增id,相信你的第一反应一定是在设计表结构的时候自定义一个自增id字段,那么就有一原创 2022-05-31 09:10:46 · 1961 阅读 · 4 评论 -
索引失效的场景
不知道你在实际工作中,有没有遇到过下面的这两种情况:1.在某个字段上加了索引,但实际上并没有生效。2.有时候生效了,有时候没有生效。原创 2022-04-12 15:28:31 · 628 阅读 · 0 评论 -
Java中的 BigDecimal如何使用
目录一、BigDecimal概述二、BigDecimal常用构造函数2.1、常用构造函数2.2、使用问题分析三、BigDecimal常用方法详解3.1、常用方法3.2、BigDecimal大小比较四、BigDecimal格式化五、BigDecimal常见异常5.1、除法的时候出现异常六、BigDecimal总结6.1、总结6.2、工具类推荐一、BigDecimal概述Java在java.math包中提供的API类BigDecimal,用来对超过原创 2022-04-12 14:20:29 · 1063 阅读 · 0 评论 -
教你如何优雅地处理重复请求(并发请求)
对于一些用户请求,在某些情况下是可能重复发送的,如果是查询类操作并无大碍,但其中有些是涉及写入操作的,一旦重复了,可能会导致很严重的后果,例如交易的接口如果重复请求可能会重复下单。重复的场景有可能是: 黑客拦截了请求,重放 前端/客户端因为某些原因请求重复发送了,或者用户在很短的时间内重复点击了。 网关重发 …. 本文讨论的是如果在服务端优雅地统一处理这种情况,如何禁止用户重复点击等客户端操作不在本文的讨论范畴。利用唯一请求编号去重你可能会想到的是,只原创 2022-03-22 20:44:06 · 666 阅读 · 0 评论 -
重温Git命令
git对于大家应该都不太陌生,熟练使用git已经成为程序员的一项基本技能,尽管在工作中有诸如Sourcetree这样牛X的客户端工具,使得合并代码变的很方便。但找工作面试和一些需彰显个人实力的场景,仍然需要我们掌握足够多的git命令。下边我们整理了45个日常用git合代码的经典操作场景,基本覆盖了工作中的需求。我刚才提交了什么?如果你用git commit -a提交了一次变化(changes),而你又不确定到底这次提交了哪些内容。你就可以用下面的命令显示当前HEAD上的最近一次的提交(c...原创 2022-03-22 20:07:40 · 336 阅读 · 0 评论 -
23 种设计模式的通俗解释,虽然有点污,但是秒懂
01 工厂方法 02 建造者模式 03 抽象工厂 04 原型模式 05 单态模式 06 适配器模式 07 桥梁模式 08 合成模式 09 装饰模式 10 门面模式 11 享元模式 12 代理模式 13 责任链模式 14 命令模式 15 解释器模式 16 迭代模式 17 调停者模式 18 备忘录模式 19 观察者模式 ..原创 2022-03-18 13:40:41 · 106 阅读 · 0 评论 -
Redis 面试题/知识点总结!(2021 最新版)
本文是开源项目 JavaGuide 其中的一篇文章。项目地址:https://github.com/Snailclimb/JavaGuide另外,这篇文章之前发过,不过,我最近对其进行了重构完善并且修复了很多小问题。所以,在公号再同步一下!内容很硬!强烈建议小伙伴们花 15分钟左右阅读一遍!1. 简单介绍一下 Redis 呗!简单来说Redis 就是一个使用 C 语言开发的数据库,不过与传统数据库不同的是Redis 的数据是存在内存中的,也就是它是内存数据库,所以读写速度非常快,因此...原创 2021-08-01 13:49:00 · 417 阅读 · 0 评论 -
@Autowire和@Resource注解使用的正确姿势,别再用错的了!!
介绍今天使用Idea写代码的时候,看到之前的项目中显示有warning的提示,去看了下,是如下代码?@AutowireprivateJdbcTemplatejdbcTemplate;提示的警告信息Field injection is not recommended Inspection info: Spring Team recommends: "Always use constructor based dependency injection in your beans. Al..原创 2021-01-25 17:40:31 · 340 阅读 · 0 评论 -
Java 反射是什么?
目录一.概念二.常用方法三.典型例题四.Method类五.数组的反射六.结束语一.概念反射就是把Java的各种成分映射成相应的Java类。Class类的构造方法是private,由JVM创建。反射是java语言的一个特性,它允程序在运行时(注意不是编译的时候)来进行自我检查并且对内部的成员进行操作。例如它允许一个java的类获取他所有的成员变量和方法并且显示出来。Java 的这一能力在实际应用中也许用得不是很多,但是在其它的程序设计语言中根本就不存在这一特性。例如,原创 2021-01-25 17:31:13 · 87 阅读 · 0 评论 -
5种IO模型、阻塞IO和非阻塞IO、同步IO和异步IO
本文是在《UNIX网络编程 卷1:套接字联网API》6.2节"I/O 模型 "的基础上,即UNIX/LINUX环境下的网络 IO环境下的理解,它里面给出的例子是读取(接收)网络UDP数据。下面简单写写自己对这些IO模型的理解。1、IOIO (Input/Output,输入/输出)即数据的读取(接收)或写入(发送)操作,通常用户进程中的一个完整IO分为两阶段:用户进程空间<-->内核空间、内核空间<-->设备空间(磁盘、网络等)。IO有内存IO、网络IO和磁盘IO三种,通常原创 2020-08-20 11:02:14 · 212 阅读 · 0 评论 -
还在用AOP做操作日志吗?!
前言用户在操作我们系统的过程中,针对一些重要的业务数据进行增删改查的时候,我们希望记录一下用户的操作行为,以便发生问题时能及时的找到依据,这种日志就是业务系统的操作日志。本篇我们来探讨下常见操作日志的实现方案和可行性常见的操作日志类型用户登录日志 重要数据查询日志 (但电商可能不重要的数据也做埋点,比如在淘宝上你搜索什么商品,即使不买,一段时间内首页也会给你推荐类似的东西) 重要数据变更日志 (如密码变更,权限变更,数据修改等) 数据删除日志 ......总结来说,就是重要的增删改原创 2020-05-12 16:48:22 · 670 阅读 · 0 评论 -
彻底消灭if-else,你需要这8种方案!
代码中如果 if-else 比较多,阅读起来比较困难,维护起来也比较困难,很容易出 Bug,接下来,本文将介绍优化 if-else 代码的八种方案。优化方案 1:提前 return,去除不必要的 else如果 if-else 代码块包含 return 语句,可以考虑通过提前 return,把多余 else 干掉,使代码更加优雅。优化前:if(condition...原创 2020-03-10 18:44:02 · 1173 阅读 · 1 评论 -
Spring Boot 最最最常用的注解梳理
一、注解(annotations)列表@SpringBootApplication:包含了@ComponentScan、@Configuration和@EnableAutoConfiguration注解。其中@ComponentScan让spring Boot扫描到Configuration类并把它加入到程序上下文。@Configuration等同于spring的XML配置文件;使用J...原创 2020-03-04 17:23:24 · 200 阅读 · 0 评论 -
Spring Cloud 面试题(2020最新版)
为什么需要学习Spring Cloud不论是商业应用还是用户应用,在业务初期都很简单,我们通常会把它实现为单体结构的应用。但是,随着业务逐渐发展,产品思想会变得越来越复杂,单体结构的应用也会越来越复杂。这就会给应用带来如下的几个问题:代码结构混乱:业务复杂,导致代码量很大,管理会越来越困难。同时,这也会给业务的快速迭代带来巨大挑战; 开发效率变低:开发人员同时开发一套代码,很难避免...原创 2020-02-28 14:19:10 · 1833 阅读 · 0 评论 -
SpringBoot缓存应用实践
缓存是最直接有效提升系统性能的手段之一。个人认为用好用对缓存是优秀程序员的必备基本素质。本文结合实际开发经验,从简单概念原理和代码入手,一步一步搭建一个简单的二级缓存系统。一、通用缓存接口1、缓存基础算法FIFO(First In First Out),先进先出,和OS里的FIFO思路相同,如果一个数据最先进入缓存中,当缓存满的时候,应当把最先进入缓存的数据给移除掉。 LFU(L...原创 2020-02-25 11:20:43 · 274 阅读 · 0 评论 -
Spring Boot RabbitMQ - 交换器
1fanout exchange发送到该交换器的所有消息,会被路由到其绑定的所有队列。不处理路由键。你只需要简单的将队列绑定到交换机上。一个发送到交换机的消息都会被转发到与该交换机绑定的所有队列上。很像子网广播,每台子网内的主机都获得了一份复制的消息。Fanout交换机转发消息是最快的。如图所示,所有发送到fanout exchange的消息都会路由到QUEUE-1和Q...原创 2020-02-25 11:15:24 · 431 阅读 · 0 评论 -
SpringBoot中异步请求和异步调用
一、SpringBoot中异步请求的使用1、异步请求与同步请求特点:可以先释放容器分配给请求的线程与相关资源,减轻系统负担,释放了容器所分配线程的请求,其响应将被延后,可以在耗时处理完成(例如长时间的运算)时再对客户端进行响应。一句话:增加了服务器对客户端请求的吞吐量(实际生产上我们用的比较少,如果并发请求量很大的情况下,我们会通过nginx把请求负载到集群服务的各个节点上...原创 2020-02-25 11:11:06 · 221 阅读 · 0 评论 -
17 个方面,综合对比 Kafka、RabbitMQ、RocketMQ、ActiveMQ
本文将从,Kafka、RabbitMQ、ZeroMQ、RocketMQ、ActiveMQ 17 个方面综合对比作为消息队列使用时的差异。一、资料文档Kafka:中。有kafka作者自己写的书,网上资料也有一些。rabbitmq:多。有一些不错的书,网上资料多。zeromq:少。没有专门写zeromq的书,网上的资料多是一些代码的实现和简单介绍。rocketmq:少。没有专门写rocketm...原创 2020-02-25 11:04:46 · 184 阅读 · 0 评论 -
IO 多路复用是什么意思?
假设你是一个机场的空管, 你需要管理到你机场的所有的航线, 包括进港,出港, 有些航班需要放到停机坪等待,有些航班需要去登机口接乘客。你会怎么做?最简单的做法,就是你去招一大批空管员,然后每人盯一架飞机, 从进港,接客,排位,出港,航线监控,直至交接给下一个空港,全程监控。那么问题就来了:很快你就发现空管塔里面聚集起来一大票的空管员,交通稍微繁忙一点,新的空管员就已经挤不进来了。...原创 2020-02-24 10:37:30 · 261 阅读 · 0 评论 -
NoSuchMethodError 的发生原因和解决办法
当应用程序试图调用类(静态或实例)的指定方法,而该类已不再具有该方法的定义时,就会抛出 java.lang.NoSuchMethodError 错误。简单地说,就是同一个 Class 有多个版本的实现,并且在运行时调用了缺少方法的那个版本。本文总结了 NoSuchMethodError 常见原因及其解决方法,如有遗漏或错误,欢迎补充指正。运行时抛出 NoSuchMethodError 的...原创 2019-11-08 09:04:25 · 2006 阅读 · 0 评论 -
SpringBoot 这样调优,让你的项目飞起来!
作为一名工程师,项目调优这事,是必须得熟练掌握的事情。在SpringBoot项目中,调优主要通过配置文件和配置JVM的参数的方式进行。修改配置文件关于修改配置文件application.properties。SpringBoot项目详细的配置文件修改文档https://docs.spring.io/spring-boot/docs/current/reference/html...原创 2019-11-05 08:55:01 · 174 阅读 · 0 评论 -
详解TCP
TCP 三次握手和四次挥手过程对于面试是必考的一个,其中有些小细节也更受到面试官的青睐。对于这部分的掌握我将会以动画的形式呈现给每个人,这样将复杂的知识简单化,理解起来也容易了很多,尤其对于一个初学者来说。TCP 三次握手思维导图如下:TCP 是什么TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠...原创 2019-10-25 10:59:34 · 2804 阅读 · 1 评论 -
SpringBoot注解梳理
一、注解(annotations)列表@SpringBootApplication:包含了@ComponentScan、@Configuration和@EnableAutoConfiguration注解。其中@ComponentScan让spring Boot扫描到Configuration类并把它加入到程序上下文。@Configuration等同于spring的XML配置文件;使用Ja...原创 2019-10-15 15:00:48 · 120 阅读 · 0 评论 -
java知识-面试大全
java基础知识-面试(一)java基础知识-面试(二)java基础知识-面试(三)java基础知识-面试(四)基础知识整理之Java基础知识点梳理(详细)超详细的java基础知识学习(java SE、javaEE)笔记 核心重点!我有面试宝典 《[经验分享] Spring Boot面试题总结》Java 知音 《Spring Boot 面试题精华》祖大帅 《一个面试...原创 2019-09-17 16:45:14 · 313 阅读 · 0 评论 -
Linux经典面试题总结
1绝对路径用什么符号表示?当前目录、上层目录用什么表示?主目录用什么表示? 切换目录用什么命令?绝对路径:如/etc/init.d当前目录和上层目录:./ ../主目录:~/切换目录:cd2 怎么查看当前进程?怎么执行退出?怎么查看当前路径?查看当前进程:ps执行退出:exit查看当前路径:pwd3 怎么清屏?怎么退出当前命令?怎么执行睡眠?怎么查看当前用户 id?...原创 2019-09-19 13:44:34 · 1150 阅读 · 0 评论