自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

之乎者也·的博客

机车带我穿梭于城市间,代码带我遨游于数字世界;在机车的轰鸣声中,我写出了最动人的代码。

  • 博客(1484)
  • 收藏
  • 关注

原创 JAVA面试题分享五百六十七:Token在大模型中的作用

单独创建一个后台线程或定时任务,定时扫描本地消息表中状态为待发送的消息,并将这些消息发送到消息队列。通过本地消息表(也称为可靠消息表)实现分布式事务是一种常见的做法,用于保证在分布式环境中消息的可靠传递和事务的一致性。如果本地事务失败,回滚本地事务和消息表的记录。在数据库中创建一个本地消息表,用于存储待发送的消息以及消息的发送状态和相关信息。• 生产方和消费方定时扫描本地消息表,把还没处理完成的消息或者失败的消息再发送一遍。:在业务逻辑中,当需要发送消息时,首先将消息插入到本地消息表中,设置状态为待发送。

2024-02-22 20:02:47 1075

原创 JAVA面试题分享五百六十六:SpringBoot Starter,自定义全局加解密组件

在之前金融系统开发中,需要对接多个第三方的服务且数据安全性要求比较高;在接口评审阶段需要双方在数据传输的时候进行接口加解密;起初在第一个服务对接的时候,将相关的加解密操作写到工具类中;随着后续服务的增多,代码的侵入越来越严重。

2024-02-22 20:00:25 909

原创 JAVA面试题分享五百六十五:为啥Redis用哈希槽,不用一致性哈希?

虚拟节点可以理解为逻辑节点,不是物理节点。假设在hash环上,引入 32 个虚拟 reids节点。如何找到物理节点呢?办法是增加一次映射:虚拟节点到物理节点的映射。假设加上一层 32 个虚拟 redis节点到 4个 redis 物理节点映射。一种非常简单的map参考映射方案假设物理节点 redis 3被移除,那么,把redis 3负责的逻辑节点,二次分配到其他三个物理节点就行了无论如何,通过虚拟节点,就会大大减少了 一致性hash 算法的数据倾斜/数据不平衡。

2024-02-22 19:56:15 1218

原创 JAVA面试题分享五百六十四:Spring事务失效的九种常见场景

Spring事务管理是保证应用数据一致性和完整性的重要组成部分,但在实际开发中需要注意避免事务失效的情况。本文详细讨论了九种常见的导致Spring事务失效的场景,包括不是通过Spring容器管理的Bean调用事务方法、异常未被正确捕获或处理、方法内部调用导致的事务失效等。开发者应当牢记这些场景,并在开发过程中注意避免出现事务失效的情况,以确保数据的一致性和完整性。

2024-02-22 16:37:59 533 1

原创 JAVA面试题分享五百六十三:如何通过本地消息表实现分布式事务

单独创建一个后台线程或定时任务,定时扫描本地消息表中状态为待发送的消息,并将这些消息发送到消息队列。通过本地消息表(也称为可靠消息表)实现分布式事务是一种常见的做法,用于保证在分布式环境中消息的可靠传递和事务的一致性。如果本地事务失败,回滚本地事务和消息表的记录。在数据库中创建一个本地消息表,用于存储待发送的消息以及消息的发送状态和相关信息。• 生产方和消费方定时扫描本地消息表,把还没处理完成的消息或者失败的消息再发送一遍。:在业务逻辑中,当需要发送消息时,首先将消息插入到本地消息表中,设置状态为待发送。

2024-02-22 15:28:09 465

原创 JAVA面试题分享五百六十三:如何防止短信盗刷和短信轰炸?

短信盗刷和短信轰炸的概念如下:短信盗刷是指使用某种技术手段,伪造大量手机号调用业务系统,盗取并发送大量短信的问题。这样会导致短信系统欠费,不能正常发送短信,同时也给业务系统方,带来了一定的经济损失和不必要的麻烦。短信轰炸是指攻击者利用某种技术手段,连续、大量地向目标手机号码发送短信,以达到骚扰、干扰或消耗目标用户的时间、流量与精力的目的。这种行为可能会对受害者造成骚扰、通信中断和手机电量消耗过快等问题。

2024-02-21 21:07:13 989

原创 JAVA面试题分享五百六十二:你真的会用@Transactional吗?

今天跟大家讲一讲 @Transactional,这个注解相信大家应该都用过,它能保证方法内多个数据库操作要么同时成功、要么同时失败。使用 @Transactional 注解时需要注意许多的细节,虽然它看起来简单,但不知道底层原理的话,用起来往往达不到我们想要的效果。事务分为编程式事务和声明式事务两种。编程式事务指在代码中手动的管理事务的提交、回滚等操作,代码侵入性比较强。

2024-02-21 20:58:07 911

原创 JAVA面试题分享五百六十一:微信小程序消息推送:Spring Boot WebSocket实现指南

WebSocket是一种在单个TCP连接上进行全双工通信的协议,它允许服务器主动向客户端推送数据。相较于传统的HTTP请求,WebSocket在实时性和效率上有明显的优势,适用于需要快速、实时通信的场景。

2024-02-21 15:27:04 900

原创 JAVA面试题分享五百六十:开源流程引擎三巨头:activiti、flowable、camunda,最推荐使用哪个?

Osworkflow是一个轻量化的流程引擎,基于状态机机制,数据库表很少,Osworkflow提供的工作流构成元素有:步骤(step)、条件(conditions)、循环(loops)、分支(spilts)、合并(joins)等,但不支持会签、跳转、退回、加签等这些操作,需要自己扩展开发,有一定难度,如果流程比较简单,Camunda不仅带有引擎,还带有非常强大的工具,用于建模,任务管理,操作监控和用户管理,所有这些都是开源的。camunda继续每一个API都有批处理的影子,flowable几乎没有。

2024-02-21 12:38:13 1531

原创 JAVA面试题分享五百五十九:SSO 单点登录和 OAuth2.0 的区别和理解

授权码(authorization code)方式,指的是第三方应用先申请一个授权码,然后再用该码获取令牌。这种方式是最常用的流程,安全性也最高,它适用于那些有后端的 Web 应用。授权码通过前端传送,令牌则是储存在后端,而且所有与资源服务器的通信都在后端完成。这样的前后端分离,可以避免令牌泄漏。

2024-02-21 12:01:01 885

原创 JAVA面试题分享五百五十八:Feign 第一次调用为什么会很慢?

首先要了解 Feign 是如何进行远程调用的,这里面包括,注册中心、负载均衡、FeignClient 之间的关系,微服务通过不论是 eureka、nacos 也好注册到服务端,Feign 是靠 Ribbon 做负载的,而 Ribbon 需要拿到注册中心的服务列表,将服务进行负载缓存到本地,然后 FeignClient 客户端在进行调用,大概就是这么一个过程。WeightedResponseTimeRule(权重比策略,优先选择权重比高的服务,也就是服务响应时间比较短的,响应时间越长权重比越低)

2024-02-20 23:08:37 887

原创 JAVA面试题分享五百五十七:Redis大key多key拆分方案

使用bitmap或布隆过滤器的场景,往往是数据量极大的情况,在这种情况下,Bitmap和布隆过滤器使用空间也比较大,比如用于公司userid匹配的布隆过滤器,就需要512MB的大小,这对redis来说是绝对的大value了。一:key 本身就有很强的相关性,比如多个key 代表一个对象,每个key是对象的一个属性,这种可直接按照特定对象的特征来设置一个新Key——Hash结构, 原先的key则作为这个新Hash 的field。这样算出三个key 的桶分别是 1 , 2, 2。

2024-02-20 23:00:23 913

原创 JAVA面试题分享五百五十六:接口优化的常见方案实战总结

批量思想:批量操作数据库,这个很好理解,我们在循环插入场景的接口中,可以在批处理执行完成后一次性插入或更新数据库,避免多次IO。我相信很多接口的效率问题不是一朝一夕形成的,在需求迭代的过程中,为了需求快速上线,采取直接累加代码的方式去实现功能,这样会造成以上这些接口性能问题。变换思路,更高一级思考问题,站在接口设计者的角度去开发需求,会避免很多这样的问题,也是降本增效的一种行之有效的方式。

2024-02-20 22:37:08 856

原创 JAVA面试题分享五百五十五:揭秘数组和链表的不同

数据结构是组织和存储数据的方式,直接影响着程序性能、内存利用和资源管理等关键方面。数据结构提供了各种方法来组织和存储数据,包括数组、链表、栈、队列、树和图等。许多算法的设计和优化都与数据结构密不可分。合适的数据结构能够更有效地利用内存资源,减少资源浪费并提高程序性能。在软件工程和系统设计中,数据结构是构建复杂系统和解决实际问题的基础。数组和链表是两种常见的数据结构,本文旨在深入探讨数组和链表的区别,揭秘它们的异同点。

2024-02-20 18:10:56 923

原创 JAVA面试题分享五百五十四:实际工作中哪里用到了自定义注解?

目录1.实现自定义注解① 添加 Spring AOP 依赖② 创建自定义注解③ 编写 AOP 拦截(自定义注解)的逻辑代码④ 使用自定义注解2.实际工作中的自定义注解3.如何实现自定义幂等性注解?① 创建自定义幂等性注解② 创建拦截器③ 配置拦截器④ 使用自定义注解小结下面我们先使用 AOP 的方式来实现一个打印日志的自定义注解,它的实现步骤如下:添加 Spring AOP 依赖。创建自定义注解。编写 AOP 拦截(自定义注解)的逻辑代码。使用自定义注解。具体实现如下。在 pom.xml 中添加如下依赖:

2024-02-20 11:11:44 778

原创 JAVA面试题分享五百五十三:SpringBoot 实现动态切换数据源

定义一个动态数据源类实现,通过方法与上述实现的ThreadLocal类中的get方法进行关联,实现动态切换数据源。/*** @description: 实现动态数据源,根据AbstractRoutingDataSource路由到不同数据源中**/@Override上述代码中,还实现了一个动态数据源类的构造方法,主要是为了设置默认数据源,以及以Map保存的各种目标数据源。其中Map的key是设置的数据源名称,value则是对应的数据源(DataSource)。/****/

2024-02-19 14:55:41 902

原创 JAVA面试题分享五百五十二:一个ThreadLocal被问出了花

ThreadLocal英文翻译过来就是:线程本地量,它其实是一种线程的隔离机制,保障了多线程环境下对于共享变量访问的安全性。看到上面的定义之后,那么问题就来了,ThreadLocal是如何解决共享变量访问的安全性的呢?其实ThreadLocal为变量在每个线程中都创建了一个副本,那么每个线程可以访问自己内部的副本变量。由于副本都归属于各自的线程,所以就不存在多线程共享的问题了。便于理解,我们看一下下图。

2024-02-19 11:28:52 899

原创 JAVA面试题分享五百五十一:线程池使用不当的五个坑

本文给大家介绍了线程池使用不当的五个坑,分别是线程池中异常消失、线程池决绝策略设置错误、重复创建线程池导致内存溢出、使用同一个线程池执行不同类型的任务、使用 ThreadLocal 和线程池的不兼容问题,以及它们的问题原因和解决方法。希望这些内容对大家有帮助。

2024-02-19 10:46:41 957

原创 JAVA面试题分享五百五十:12306场景设计、Redis缓存设计、MyBatis两级缓存

用户发出抢票请求,在本地进行扣减库存操作如果本地库存不足,返回用户友好提示,可以稍后重试,如果所有机器上的库存都不足的话,可以直接返回用户已售罄的提示如果本地库存充足,在本地扣减库存之后,再向 Redis 中发送网络请求,进行库存扣减(这里 Redis 的作用就是统一管理所有机器上的库存数量)扣减库存之后,再发送 MQ 消息,异步的生成订单,之后等待用户支付即可。

2024-02-19 09:46:54 1556

原创 JAVA面试题分享五百四十九:JUC中的AQS底层详细超详解,剖析AQS设计中所需要考虑的各种问题

/ cas方法如果state上限只有1,那么就是独占模式Exclusive,例如 ReentrantLock如果state上限大于1,那就是共享模式Share,例如 Semaphore、CountDownLatch、ReadWriteLock,CyclicBarrier对外暴露的getter/setter方法,是走不了CAS的。而且setter/getter没有被synchronized修饰。所以必须要volatile,保证可见性。

2024-02-19 09:30:14 899 1

原创 JAVA面试题分享五百四十八:SQL都有哪些类型?你怎么回答?

SQL可以大致分为四大类:DDL、DML、DCL和TCL,每一类都在数据库管理中提供独特的功能。DDL(数据定义语言):这种类型侧重于定义和修改数据库对象的结构。关键命令包括CREATE(用于创建新表或数据库)、ALTER(用于修改现有对象)和DROP(用于删除对象)。DML(数据操作语言):DML用于处理数据库中的实际数据。它包括INSERT(添加新数据)、UPDATE(修改现有数据)、DELETE(删除数据)和SELECT(查询和检索数据)等命令。DCL(数据控制语言):DCL管理对数据库的访问。

2024-02-18 21:43:33 834

原创 JAVA面试题分享五百四十七:Spring Cloud Config核心功能和原理解析

随着技术的发展,配置项管理变得越来越简单,尽管如今它只限于管理业务属性或者配置初始化参数等等,但是当年它可肩负着Spring IOC的光荣使命,风光无限。想当年刚入行的时候还是的天下,那时远没有如今这些丰富的开源组件,一个标准的 Java 程序员就是靠 SSH 这三把刷子打天下,正所谓学好数理化,走遍天下都不怕,但那时候的配置管理是一件让人头疼的事情。早先SSH的配置管理可以说是相当复杂,每个项目的 XML 配置文件大大小小几十个。如果有过Struts1的使用经验就能理解这种痛苦,创建一个Form。

2024-02-18 21:40:33 779

原创 JAVA面试题分享五百四十六:什么是接口的幂等性,如何保证接口的幂等性?

幂等是一个数学与计算机学概念,在数学中某一元运算为幂等时,其作用在任一元素两次后会和其作用一次的结果相同。在计算机中编程中,一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。幂等函数或幂等方法是指可以使用相同参数重复执行,并能获得相同结果的函数。这些函数不会影响系统状态,也不用担心重复执行会对系统造成改变。所谓接口幂等性,就是一次和多次请求某一个资源对于资源本身应该具有同样的结果。接口的「幂等性(Idempotence)」是指一个操作在执行一次和多次执行时,其结果是一样的。

2024-02-18 21:36:23 861

原创 JAVA面试题分享五百四十五:大公司如何做 APP:背后的开发流程和技术

所谓他山之石,可以攻玉。在这篇文章中,我只是选取了几个自己印象深刻的技术点,零零碎碎地写了很多,比较散。对于有这方面需求的人,会有借鉴意义。

2024-02-18 21:27:48 789

原创 JAVA面试题分享五百四十四:实现一个简单实用的并发同步模型

日常开发后端接口时,总是会遇到一些和业务关联性不是很大却又很耗时的操作,由于功能的重要性和体量远达不到要上消息中间件的情况,这时候我们就可以实现一个简单的生产者消费者模型来实现异步消费。就以笔者这篇文章为例,通过。本文整体结构如下,通过笔者的代码示例,你会对生产者消费者这种并发同步的设计模式的开发模型和使用场景有着更进一步的理解。因为消费者的执行逻辑需要提交到线程池中让池中的线程进行处理,所以我们这里封装了一个消费的。完成消费者的封装之后,我们采用线程池的方式创建线程来执行消费者的逻辑,可以看到笔者采用。

2024-02-18 21:21:33 845

原创 JAVA面试题分享五百四十三:开发一款 SDK 需要注意哪些问题

上面这类错误相信遇到的应该不少,Java 有一套自己的 JDK 判断准则,Kotlin 也有,Kotlin metadata 的版本来自 KGP 版本,也即意味着,当你的 SDK 使用高版本的 KGP 编译时,业务方要么编译不过,要么被迫升级 KGP 版本,这会使业务方因为升级 Kotlin 而带来其他业务的不稳定性。SDK 提供抽象接口,业务方依赖接口调用,这么做的好处是,业务方面向接口调用使用简单,还能避免使用不稳定的内部实现,并且,内部实现可以进行混淆。

2024-02-18 20:13:15 920

原创 JAVA面试题分享五百四十二:如何向SpringBoot注入数据?

Value 适用于简单的属性注入,

2024-02-18 19:52:38 750

原创 JAVA面试题分享五百四十一:Spring获取Bean的方式有哪些?热加载、热部署的三种方式?

个人最常用的是利用IDEA自带热加载,虽然有局限只能在已有的方法内才生效,但是好在够快!怎么抉择?新增接口或者明确需要添加很多新方法,以及需要时不时新建Mybatis的xml时,用springboot-devtools。

2024-02-18 19:28:06 840

原创 JAVA面试题分享五百四十:SpringBoot中的静态资源如何处理?

webjars我们也可以在(properties或yaml)配置文件中自定义静态资源的URL访问路径和本地存放目录。#自定义静态资源的URL访问路径#自定义静态资源的本地存放目录一旦自己定义了静态资源的访问路径或本地存放目录,默认配置的访问路径或本地存放目录就会失效了!我们一般不自定义静态资源的访问路径和本地存放目录,而是使用默认的配置。

2024-02-18 19:19:39 867

原创 JAVA面试题分享五百三十九:用Spring AOP解决分布式锁问题:保障数据一致性,提升系统可靠性!

Spring AOP是Spring框架的一个重要组成部分,它通过在程序运行时动态地将代码切入到类的方法中,实现了横切关注点的模块化。利用AOP,我们能够在不改变原有代码的情况下,通过切入点和通知来实现诸如日志记录、性能监控等横切关注点。

2024-02-18 15:21:22 817

原创 JAVA面试题分享五百三十八:SQL技巧:表关联及优化

在步入主题之前我们先了解一下数据库的“实体”和“关系”。在数据库中,我们经常听到“”和“”的概念,这分别来自于实体-关系模型(ER模型)的两个基本要素。为了帮助大家更好地理解它们,将详细地介绍“实体”和“关系”。

2024-02-18 14:47:46 924

原创 JAVA面试题分享五百三十七:如何处理SQL中的NULL值

当我们需要查询某个字段值为NULL的数据时,我们不能使用普通的等号(=)运算符,而应该使用特定的IS NULL条件。需要注意的是,对于其他聚合函数,如SUM()、 MAX()、MIN(),、COUNT()和 AVG(),它们会忽略掉NULL值,这意味着NULL值不会被计入统计结果。但需要注意,由于Oracle的特性,默认情况下,如果一个字段包含空字符串,Oracle可能会将其视为NULL。可以看到,对于id为5和6的记录,它们的工资都为NULL,因此,GROUP BY会将它们视为相同,并归入同一组。

2024-02-18 13:11:40 330

原创 JAVA面试题分享五百三十六:如何获取一条SQL语句中涉及的表名

在数据库操作和SQL查询的开发过程中,有时候我们为了动态生成查询、进行权限控制、进行查询优化或者其他一些与数据库交互相关、数据库监控等的需求,需要从SQL语句中提取表名。本文分别使用正则表达式和使用SQL解析库的方式来获取。当然实际使用中需要进行优化,本次只是做初步的获取操作。

2024-02-18 12:48:11 543

原创 JAVA面试题分享五百三十五:块存储、文件存储、对象存储的区别与联系

以往像FAT32这种文件系统,是直接将一份文件的数据与metadata一起存储的,存储过程先将文件按照文件系统的最小块大小来打散(如4M的文件,假设文件系统要求一个块4K,那么就将文件打散成为1000个小块),再写进硬盘里面,过程中没有区分数据/metadata的。上面讲的大家或多或少都有所了解,但底层的RADOS的细节可能会忽略,RADOS也是个标准对象存储,里面也有MDS的元数据管理和OSD的数据存储,而OSD本身是可以基于一个本地文件系统的,比如XFS/EXT4/Brtfs。所以不利于文件共享。

2024-02-18 11:18:55 848

原创 JAVA面试题分享五百三十四:微服务集成中的3个常见缺陷,以及如何避免它们

在本文中,我介绍了三个常见的陷阱,我看到客户在整合微服务时踩到了:低估了远程通信的复杂性,忽略了异步性的挑战,忘记了商业交易。通过重试,超时和补偿活动的状态模式引入处理这些情况的功能可以降低微服务基础架构的整体复杂性并增强其弹性。它还有助于:将重要的故障处理和事务行为封装在它所属的位置:在服务本身的上下文中。将故障或超时处理的工作量减少到更小的范围,从而降低整体复杂性。简化服务API,只发布对客户真正重要的故障。改善客户体验,客户可能是其他服务,内部员工,甚至是客户。

2024-02-18 10:46:03 911

原创 JAVA面试题分享五百三十三:Spring 框架实现 AOP 的 3 种方法

(1)保持子项目包下的接口及其接口实现类不变。文件与文件参见方式一。(2)在子项目的java目录下新建一个包,并在该包下新建一个DiyAspect类,用于自定义切面。//自定义切面//通知1System.out.println("---------方法执行前---------");//通知2System.out.println("---------方法执行后---------");(3)在子项目resource目录下的配置文件中注册bean,并配置AOP。

2024-02-17 12:23:40 921

原创 JAVA面试题分享五百三十二:count(*) count(id) count(1)

使用 `COUNT(1)` 时会比使用 `COUNT(*)` 效率更高,因为它不需要扫描整个表的所有列。- `COUNT(*)`:`COUNT(*)` 是一种特殊的语法,它返回结果集中的行数,不考虑任何列的值。- `COUNT(*)`:`COUNT(*)` 是一种特殊的语法,它会扫描整个表的所有行,不考虑任何列的值。根据函数解释可以知道,count(*),count(1),count(主键id)都表示满足条件的总行数,而count(字段)表示满足条件的总行数里面参数 “字段” 不为NULL的总个数。

2024-02-17 11:19:15 920

原创 JAVA面试题分享五百三十一:使用双异步后,从 191s 优化到 2s

CPU密集型,线程池大小设置为N,也就是和cpu的线程数相同,可以尽可能地避免线程间上下文切换,但在实际开发中,一般会设置为N+1,为了防止意外情况出现线程阻塞,如果出现阻塞,多出来的线程会继续执行任务,保证CPU的利用效率。在使用@Async时,如果不指定线程池的名称,也就是不自定义线程池,@Async是有默认线程池的,使用的是Spring默认的线程池SimpleAsyncTaskExecutor。也不能太少,如果太少,超过了150个线程,就会造成线程阻塞,也会变慢;

2024-02-17 10:18:47 842

原创 JAVA面试题分享五百三十:Springboot接口能用两个@RequestBody修饰入参吗?

Springboot可以用多个@RequestBody吗?且看网上的文章是怎么说的:实际是不是这样呢,听人家说100句,不如自己动手做一次。

2024-02-17 10:07:53 626

原创 JAVA面试题分享五百二十九:Spring Boot 接收数组参数

Spring 还会自动地把传递的字符串参数,转换为 Controller 方法声明的类型。特别是在一些需要对数组参数去重的场景,推荐使用。为了更加直观的感受,这次使用 Postman 发起请求,对于数组类型的。甚至可以在中括号中指定参数在数组中的索引,也就是下标。如下,最后一个参数传递了一个。定义一个简单的 Controller,它接收一个。,目的是为了保证集合中的参数顺序和传递的顺序一样。属性不再是一个普通的字符串数组。至于其他各种类型的参数,你都可以试一试!作为参数的时候,默认使用的实现是。

2024-02-17 10:02:35 339

双检索单例模式的实现案例

单例模式的特点:从系统启动到终止,整个过程只会产生一个实例。因为单例提供了唯一实例的全局访问方法,所以它可以优化共享资源的访问,避免对象的频繁创建和销毁,从而可以提高性能。单例模式常见的应用场景如下:Windows任务管理器、数据库连接池、Java中的Runtime、Spring中Bean的默认生命周期等。

2023-12-04

懒汉式单例模式的实现案例

单例模式的特点:从系统启动到终止,整个过程只会产生一个实例。因为单例提供了唯一实例的全局访问方法,所以它可以优化共享资源的访问,避免对象的频繁创建和销毁,从而可以提高性能。单例模式常见的应用场景如下:Windows任务管理器、数据库连接池、Java中的Runtime、Spring中Bean的默认生命周期等。

2023-12-04

饿汉式单例模式的实现案例

单例模式的特点:从系统启动到终止,整个过程只会产生一个实例。因为单例提供了唯一实例的全局访问方法,所以它可以优化共享资源的访问,避免对象的频繁创建和销毁,从而可以提高性能。单例模式常见的应用场景如下:Windows任务管理器、数据库连接池、Java中的Runtime、Spring中Bean的默认生命周期等。

2023-12-04

vue面试题分享如何获取dom?

如何获取dom? 为什么使用key? v-if和v-for的优先级?

2023-11-30

插入排序:主函数中先定义了一个待排序的数组 arr,然后调用 insertionSort 函数进行排序,并打印出排序后的结果

插入排序

2023-11-30

空空如也

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

TA关注的人

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