自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

彬的博客

简单分享技术

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

原创 nvm报错:Error retrieving “http://npm.taobao.org/mirrors/node/index.json“: HTTP Status 404

nvm报错:Error retrieving "http://npm.taobao.org/mirrors/node/index.json": HTTP Status 404。

2024-04-26 20:35:53 381

原创 Java集合常见面试题

● Array.asList转换list之后,如果修改了数组的内容,list会受影响,因为它的底层使用的Arrays类中的一个内部类ArrayList来构造的集合,在这个集合的构造器中,把我们传入的这个集合进行了包装而已,最终指向的都是同一个内存地址。● list用了toArray转数组后,如果修改了list内容,数组不会影响,当调用了toArray以后,在底层是它是进行了数组的拷贝,跟原来的元素没啥关系了,所以即使list修改之后,数组也不受影响。● List转数组,使用List的toArray方法。

2024-04-19 17:13:16 1012

原创 合并区间详解

先排序,设置一个新数组,将原数组遍历的第一位添加到新数组,之后不断的将遍历原数组后的起始位置和新数组的终止位置进行比较,大于,则添加到新数组,不大于,则合并到新数组。第二个变量表示新的数组的长度,如果新数组的长度超过原数组的长度,保留数组元素的默认基本类型的值。第一个变量表示原来的数组对象。

2024-04-18 22:31:11 170

原创 JVM常见面试题

JVM指的是Java虚拟机,本质上是一个运行在计算机上的程序,他的职责是运行Java字节码文件,作用是为了支持跨平台特性JVM的功能有三项:第一是解释执行字节码指令;第二是管理内存中对象的分配,完成自动的垃圾回收;第三是优化热点代码提升执行效率JVM组成分为类加载子系统、运行时数据区、执行引擎、本地方接口这四部分常用的JVM是Oracle提供的Hotspot虚拟机,也可以选择GraalVM、龙井、OpenJ9等虚拟机。

2024-04-16 19:45:00 827

原创 JVM中都有哪些引用类型

● 终结器引用:终结器引用指的是在对象需要被回收时,终结器引用会关联对象并放置在Finalizer类中的引用队列中,在稍后由一条由FinalizerThread线程从队列中获取对象,然后执行对象的finalize方法,在对象第二次被回收时,该对象才真正的被回收。直接内存中为了及时知道直接内存对象不再使用,从而回收内存,使用了虚引用来实现。● 软引用:软引用相对于强引用是一种比较弱的引用关系,如果一个对象只有软引用关联到它,当程序内存不足时,就会将软引用中的数据进行回收。软引用主要在缓存框架中使用。

2024-04-15 20:08:35 559

原创 如何判断堆上的对象没有被引用

可达性分析算法指的是如果从某个到GC Root对象是可达的,对象就不可被回收。最常见的是GC Root对象会引用栈上的局部变量和静态变量导致对象不可回收。可达性分析将对象分为两类:垃圾回收的根对象(GC Root)和普通对象。引用计数法会为每个对象维护一个引用计数器,当对象被引用时加1,取消引用时减1,存在循环引用问题所以Java没有使用这种方法。● 系统类加载器加载的java.lang.Class对象,引用类的静态变量。● 监视器对象,用来保存同步锁synchronized关键字持有的对象。

2024-04-15 20:07:47 107

原创 删除有序数组中的重复项Ⅱ

给你一个有序数组 nums ,请你原地删除重复出现的元素,使得出现次数超过两次的元素只出现两次,返回删除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1)额外空间的条件下完成。

2024-04-14 22:04:15 123

原创 删除有序数组中的重复项Ⅰ

给你一个非严格递增排列的数组 nums ,请你原地删除重复出现的元素,使每个元素只出现一次,返回删除后数组的新长度。元素的相对顺序应该保持一致。然后返回 nums 中唯一元素的个数。

2024-04-14 22:02:22 201

原创 常见的垃圾回收器(下)

ZGC 是一种可扩展的低延迟垃圾回收器。ZGC 在垃圾回收过程中,STW的时间不会超过一毫秒,适合需要低延迟的应用。支持几百兆到16TB 的堆大小,堆大小对STW的时间基本没有影响。Shenandoah 是由Red Hat开发的一款低延迟的垃圾收集器,Shenandoah 并发执行大部分 GC 工作,包括并发的整理,堆大小对STW的时间基本没有影响。参数1: -XX:+UseG1GC 打开G1的开关,JDK9之后默认不需要打开。对比较大的堆如超过6G的堆回收时,延迟可控。JDK8之前还不够成熟。

2024-04-13 18:07:11 333

原创 常见的垃圾回收器(上)

1、CMS使用了标记-清除算法,在垃圾收集结束之后会出现大量的内存碎片,CMS会在Full GC时进行碎片的整理。CMS垃圾回收器关注的是系统的暂停时间,允许用户线程和垃圾回收线程在某些步骤中同时执行,减少了用户线程的等待时间。PS+PO是JDK8默认的垃圾回收器,多线程并行回收,关注的是系统的吞吐量。ParNew垃圾回收器本质上是对Serial在多CPU下的优化,使用多线程进行垃圾回收。2.、无法处理在并发清理过程中产生的“浮动垃圾”,不能做到完全的垃圾回收。为了提高吞吐量,虚拟机会动态调整堆的参数。

2024-04-13 18:02:56 272

原创 常见的垃圾回收算法

● 吞吐量高,复制算法只需要遍历一次存活对象复制到To空间即可,比标记-整理算法少了一次遍历的过程,因而性能较好,但是不如标记-清除算法,因为标记清除算法不需要进行对象的移动。随着对象在Eden区越来越多,如果Eden区满,新创建的对象已经无法放入,就会触发年轻代的GC,称为Minor GC或者Young GC。当老年代中空间不足,无法放入新的对象时,先尝试minor gc如果还是不足,就会触发Full GC,Full GC会对整个堆进行垃圾回收。分代回收时,创建出来的对象,首先会被放入Eden伊甸园区。

2024-04-13 17:56:08 1248

原创 MySQL事务、主从、分库分表常见面试题

● redo log保证了事务的持久化,undo log保证了事务的原子性和一致性。● undo log:记录的是逻辑日志,当事务回滚时,通过逆操作恢复原来的数据。● redo log:记录的是数据页的物理变化,服务宕机可用来同步数据。大多当单表1000万数据或超过20G的时候,就需要用到分库分表。MySQL主从复制的核心就是二进制日志binlog。如何解决:对事务进行隔离。默认隔离级别:可重复读。

2024-04-10 13:10:02 146

原创 MySQL优化常见面试题

● 索引是帮助MySQL高效获取数据的数据结构(有序)● 提高数据检索的效率,降低数据库的IO成本(不需要全表扫描)● 通过索引列对数据进行排序,降低数据排序的成本,降低了CPU的消耗● 聚簇索引(聚集索引):数据与索引放到一块,B+树的叶子节点保存了整行数据,有且只有一个● 非聚簇索引(二级索引):数据与索引分开存储,B+树的叶子节点保存对应的主键,可以有多个通过二级索引找多对应的主键值,到聚簇索引中查找整行数据,这个过程就是回表覆盖索引是指查询使用了索引,返回的列,必须在索引中全部被找到。

2024-04-10 13:06:51 842

原创 String、StringBuffer、StringBuilder的区别

可变性、安全、性能三个方面

2024-04-06 10:13:26 399

原创 加@Transactional注解的方法之间调用,事务是否生效的问题

不同类之间的方法调用,如类A的方法a()调用类B的方法b(),这种情况事务是正常起作用的。只要方法a()或b()配置了事务,运行中就会开启事务,产生代理。若两个方法都配置了事务,两个事务具体以何种方式传播,取决于设置的事务传播特性

2024-04-06 10:10:10 234

原创 String类有哪些常见的方法

○ lastIndexOf(int ch) 或 lastIndexOf(String str) 方法:返回指定字符或子字符串在此字符串中最右边出现的索引位置,若未找到则返回 -1。○ indexOf(int ch) 或 indexOf(String str) 方法:返回指定字符或子字符串在此字符串中第一次出现的索引位置,若未找到则返回 -1。○ startsWith(String prefix) 和 endsWith(String suffix) 方法:检查此字符串是否以指定前缀或后缀开头或结尾。

2024-04-05 15:21:33 237

原创 &&和&的区别

总结来说:● && 是逻辑短路与运算符,用于条件判断,提高效率并避免潜在问题。● & 可以既作为逻辑与运算符(此时两个操作数必须是布尔类型),又作为按位与运算符(此时两个操作数通常是整数类型)。在布尔上下文中,它不具备短路功能,总是计算两边的表达式

2024-04-05 15:19:24 585

原创 Redis缓存常见面试题

缓存穿透:查询一个不存在的数据,MySQL查询不到数据也不会直接写入缓存,就会导致每次请求都查数据库解决方案一:缓存空数据当查询到一个不存在的数据,返回缓存空数据,但是当数据真正有的时候,缓存中还是空数据,就会导致数据不一致解决方案二:布隆过滤器位图的思路:通过hash运算三次得到三个对应的值,如果三个值都为1即存在,如果其中一个不为1即不存在,存在一定的误判率,但完全可以接受。

2024-04-03 22:51:30 843

原创 Redis分布式锁常见面试题

在redisson的分布式锁中,提供了一个WatchDog(看门狗),一个线程获取锁成功以后,WatchDog会给持有锁的线程续期(默认是每隔10秒续期一次)不能解决,但是可以使用redisson提供的红锁来解决,但是这样的话,性能就太低了,如果业务中非要保证数据的强一致性,建议采用zookeeper实现的分布式锁。可以重入,多个锁重入需要判断是否是当前线程,在redis中进行存储的时候使用的hash结构,来存储线程信息和重入的次数。● 先按照自己简历上的业务进行描述分布式锁使用的场景。

2024-04-03 22:49:12 277

原创 Mybatis常见面试题

● 二级缓存是基于namespace和mapper的作用域起作用的,不是依赖于SQL session,默认是采用PerpetualCache,HashMap存储。● 一级缓存:基于PerpetualCache的HashMap本地缓存,其存储作用域为Session,当Session进行flush或close之后,该Session中的所有Cache就将清空,默认打开一级缓存。● 延迟加载的意思是:在需要用到数据时才进行加载,不需要用到数据时就不加载数据。5:Mybatis的二级缓存什么时候会清理缓存中的数据。

2024-03-31 22:48:32 131

原创 SpringBoot常见注解有哪些

● @SpringBootConfiguration: 组合了- @Configuration注解,实现配置文件的功能;● @EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项。● @ComponentScan:Spring组件扫描。

2024-03-31 14:27:32 577

原创 SpringBoot自动配置原理

面试题:SpringBoot自动配置原理

2024-03-31 14:26:52 118

原创 SpringMVC常见面试题

包含SpringMVC常见面试题

2024-03-30 22:53:30 547

原创 Spring常见面试题

本篇文章涵盖Spring常见面试题

2024-03-29 09:58:17 1071 1

原创 逆向工程生成微服务基本crud

注意:生成后文件有很多依赖,这些依赖大部分都在renren-fast中,可以新建一个Module作为common配置将renren-fast中的配置粘贴,然后将common引入其他各个微服务模块即可

2024-02-06 11:48:11 745

原创 如何创建一个微服务项目(maven聚合)

1.创建一个仓库(推荐gitee)2.clone到本地3.打开项目4.创建module,将模块分别创建5.复制其中一个pom.xml文件到总目录下6.在总pom.xml文件中进行maven聚合7.在总的.gitgnore文件中添加不想推送到远程仓库的文件8.进行commit和push

2024-02-06 11:30:59 1223

原创 Redis集群优化

集群虽然具备高可用特性,能实现自动故障修复,但是如果使用不当,也会存在一些问题集群完整性问题集群带宽问题数据倾泻问题客户端性能问题命令的集群兼容性问题Lua和事务问题。

2024-01-18 09:43:58 656

原创 Redis服务端优化(持久化配置、慢查询、命令及安全配置、内存配置)

Redis服务端优化(持久化配置、慢查询、命令及安全配置、内存配置)

2024-01-18 09:36:35 908

原创 redis批处理优化

一个命令在网络传输的时间往往是远大于在redis中执行命令的时间的,如果每条命令都要逐条经历网络传输,耗时将会大大增加,我们不妨将命令多量少次的传输给redis,这样就大大减少了因为网络传输时间,大大提高的效率。这里spring已经给我们封装好了批处理的方法。

2024-01-17 11:23:28 630

原创 Redis键值设计

键值设计,BigKey常见问题优化和解决,如何选择恰当的数据类型

2024-01-17 10:28:38 503

原创 通过Canal实现缓存同步

缓存数据同步的常见方式有三种设置有效期同步双写异步通知

2024-01-16 17:49:28 332

原创 安装Canal

开启mysql的主从同步机制,让Canal来模拟salve。

2024-01-16 17:43:22 391

原创 多级缓存(nginx本地缓存、JVM进程缓存、redis缓存)

这种负载均衡算法是通过对id值进行hash运算然后进行对tomcat服务器数量取余来判断访问哪台tomcat服务器,这样就保证了同一个id访问同一个tomcat服务器。这个时候存在一个问题,集群的负载均衡算法是轮询,会导致tomcat进程缓存产生浪费,举个例子。封装完函数之后,我们对nginx.conf进行修改(请求进来之后会去寻找item.lua)上面的item.lua文件中需要进行拼接数据,我们需要JSON结果处理。当我们修改nginx.conf发送请求为集群的时候,如下图。item.lua文件内容。

2024-01-16 13:40:42 1819

原创 Redis分片集群

可以在slave节点上执行cluster failover命令,对应的master节点会自动宕机,实现无感知的数据迁移。集群中有多个Master,每个master保存不同的数据。客户端请求可以访问集群任意节点,最终都会被转发到正确节点。master宕机后,从节点自动升级为主节点。在pom文件中引入redis的starter依赖。每个master都可以有多个slave节点。主从和哨兵可以解决高可用、高并发读的问题。手动的Failover支持三种不同的模式。在配置文件中指定分片集群的相关信息。

2024-01-05 09:29:08 506

原创 Redis哨兵

为了解决master节点宕机问题,选举salve节点为新的master节点。

2023-12-29 22:42:49 402

原创 Redis主从

repl_baklog大小有上限,写满后会覆盖最早的数据。如果slave断开时间过久,导致尚未备份的数据被覆盖,则无法基于log做增量同步,只能再次全量同步。单节点Redis的并发能力是有上限的,要进一步提高Redis的并发能力,就需要搭建主从集群,实现读写分离。从节点最开始也是master,所以第一次主从的Replication id肯定是不一样的。:在5.0以后新增命令replicaof,与salveof效果一致。修改配置文件(永久生效)

2023-12-29 22:40:23 387

原创 redis持久化

RDB默认停机的时候进行保存,写入磁盘Redis内部有触发RDB的机制,在redis.conf文件中

2023-12-28 21:23:13 372

原创 Java8新特性总结

流(Stream)是数据渠道,用于操作数据源(集合、数组等)所生成的元素序列Stream 自己不会存储元素Stream 不会改变源对象。相反,他们会返回一个持有结果的新StreamStream 操作是延迟执行的。这意味着他们会等到需要结果的时候才执行Stream操作的三个步骤创建Stream:一个数据源(集合、数组等),获取一个流中间操作:一个中间操作链,对数据源的数据进行处理终止操作:一个终止操作,执行中间操作链,并产生结果。

2023-12-28 17:40:45 998

原创 位图(BitMap)思路实现签到相关功能

.问题描述:当要实现用户签到功能的时候,相信大多数人会想到拿一张表进行用户签到信息,但是这种做法有一个很大的缺点:消耗内存大。我们可以换一种方式来实现:通过BitMap来进行实现

2023-12-26 10:36:24 952

原创 项目中关于地理坐标/位置相关需求的实现思路

问题场景:用户需要查询附近的商铺、KTV等,商铺和KTV属于不同类型,用户会选择一种类型。问题解析:* 可能用户不会开启定位功能,所以我们只需要根据类型查询* 需要进行分页返回

2023-12-25 21:53:53 333

空空如也

空空如也

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

TA关注的人

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