自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

wwwwwww31311的博客

csdn认证博客专家

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

原创 2025大纲

参考sql如下,说一下六种加索引的方法(无索引,只对name加索引,只对city加索引,对name和city加索引,对name,city以及select的字段加索引,对city和name字段加索引)重载(方法名同,参数个数,不同类型参数顺序不同、返回值类型权限无关)与重写(2同2小1大,说明底层原因,结合模板方法模式、jvm角度分析),向上转型与向下转型,重载的典型案例如下。缺字段导致索引失效、范围查询导致索引失效的原理是什么?从堆内存的角度分析下,对象创建的流程,如果是创建一个比总内存还大的大对象呢?

2024-12-03 10:31:25 736

原创 IDEA中maven更新pom文件后使其生效(自动 + 手动)

以上是正常情况,但大家或多或少都会遇到过idea抽风的场景,这基本都是因为你笔记本配置不够,或者长时间未重启导致运行卡顿了,这种情况下可以先重启,如果还不行,那就用最后的杀招Invalitate cache …如果懒得每次手动Reload,那么可以在这个地方选择Any change,即任何对pom文件的修改都会哦。pom文件更新后默认是不生效的,需要手动刷新maven,即点击Reload Project,,这样的话刷新会很慢,因为会对整个项目Reload Project。

2024-11-08 08:44:04 494

原创 开发规范 - mac系统1小时装机极速装机开发环境

jdk不用单配配置,在idea中,选择一个语言环境(jdk8/jdk11/jdk17…),然后默认下载jdk这样,一个hello word就能跑起来了。

2024-10-14 16:25:26 508

原创 依赖传递与依赖冲突(附解决方法)

Maven 在对项目进行编译、测试和运行时,会分别使用三套不同的 classpath。Maven 项目构建时,在不同阶段引入到 classpath 中的依赖时不同的我们使用idea跑项目当中src/main/java目录下的代码实际上就是运行的当前项目target/classes目录下的字节码文件。我们使用idea跑项目当中src/test/java目录下的代码实际上就是运行的当前项目target/test-classes目录下的字节码文件。

2024-10-11 14:30:32 443

原创 投资 -风口/政策大事记

基本面如此差的情况下,股市大涨无疑使得股市是国营赌场本质暴漏无疑,但赌场终归也是有人赚钱的,把握入场时机尤为重要当前股市估值低的时候(2700左右)刺激性政策(美联储降息为契机,推出TSLF互换便利,降低存量房贷利率,提前召开政治会议,倡导经济复苏,降准降息…)导致了连涨伴随大涨的时候,结合政策解读,9.24日当天可以考虑逐步跟风买入了这个时候可以拿出资产的1.5%(1.2万)赌一把梭哈,赌的就是刺激性政策会点燃市场情绪风险角度来看。

2024-10-07 22:34:44 194

原创 缓存穿透,缓存击穿,缓存雪崩(原理 + 标准代码)

key对应的数据在数据源并不存在,每次针对此key的请求从缓存获取不到,请求都会到数据源,从而可能压垮数据源。比如用一个不存在的用户id获取用户信息,不论缓存还是数据库都没有,若黑客利用此漏洞进行攻击可能压垮数据库。

2024-09-10 09:29:55 405

原创 Callable详解

Callable类似于Runnable,如果你的某个实例的方法想要被线程执行,也可以通过实现Callable接口的call方法。

2024-08-26 16:40:37 233

原创 JAVA Future类详解

在编程中,Java中的"Future"是一个接口,代表是作为主线程开辟的一个分支任务,处理耗时的业务,并且可以可以为主线程最终返回异步计算的结果。此外,它提供了检查计算是否完成,等待其完成,以及检索计算结果的方法。作为Future接口的核心实现类,结构如下。

2024-08-25 15:12:06 248

原创 Runnable

如果你的某个实例的方法想要被线程执行,那么可以通过实现Runnable接口,重写Runnable的run方法,这个方法是个无入参无返回值的方法,然后将你这个实例作为Thread的构造器参数去执行。

2024-08-25 12:25:06 279

原创 线程池详解(建议收藏)

线程池(Thread Pool)是一种基于池化技术的多线程处理形式,用于管理线程的创建和生命周期,以及提供一个用于并行执行任务的线程队列。线程池的主要目的是减少在创建和销毁线程时所花费的开销和资源,提高程序性能,同时也提供了对并发执行任务的更好管理,例如控制线程数量。

2024-08-24 17:39:43 5364

原创 java对象创建的过程

这包括初始化声明的字段和执行构造方法中的所有语句。在此过程中,可能会调用父类的构造方法,以确保整个继承层次结构中的每个类都得到正确的初始化。在内存中分配对象所需的内存空间。具体的内存分配方式有很多种,包括堆上的对象分配、栈上的对象分配等,在主流的Java虚拟机中,大部分对象的内存分配发生在堆上。内存分配后,JVM将分配给对象的内存空间初始化为零值。创建对象的过程,属于类的主动使用,在加载、连接类完毕后,还会触发类的初始化过程。JVM设置对象头信息,包括类的元数据信息、对象的哈希码、对象的GC分代年龄等。

2024-08-21 17:36:39 439

原创 类加载的过程与触发时机

所谓加载,简而言之就是将 Java 类的字节码文件加载到机器内存中,(一个Java文件从编码完成到最终执行,一般主要包括两个过程:编译和运行,其中编译就是把我们写好的java文件,通过javac命令编译成字节码,也就是我们常说的.class文件,编译过程中会对java代码做语法层面校验,有问题的话会编译失败并抛出编译期错误,然后运行则是把编译声称的.class文件交给Java虚拟机(JVM)执行。

2024-08-21 15:37:45 1221

原创 CAS原理

不是线程安全的。i++实际上是一个复合操作,包括三个步骤:读取i的值,对i加1,将新值写回内存。如果多个线程同时执行这个操作,就可能导致线程安全问题。例如,两个线程同时读取了i的值,然后各自增加1,然后将新值写回内存,这样实际上i只增加了1,而不是2,这就是所谓的线程冲突。为了保证线程安全,可以使用同步机制(如互斥锁)来保护i++操作。

2024-08-19 08:23:13 233

原创 Spring容器启动的过程(超详细,建议收藏)

大体流程如下。

2024-08-12 08:40:39 1332

原创 mysql表设计

status 状态 java代码中用一个枚举类,比如我的请假表还处于草稿状态,可以是新建态,提交后处于待审批状态,审批完成则是成功态,审批拒绝就是拒绝态。start_time 开始时间 dateTime类型。end_time 起始时间 dateTime类型。employee_id 外键,和员工信息表想管理。type 请假类型,对应一个枚举类,病假,事假。create_time 请假记录的创建时间。如果让你设计一个请假表,如何设计?approve_id 外键。

2024-07-23 16:32:02 218

原创 git区域与对象

2 git write -tree是生成暂存区的对象tree同时提交到版本库中(存储到objects下),我们可以不断的向暂存区进行增删改直到自己满意再进行提交,git对象代表文件的一次次版本,tree对象代表项目的一次次版本,这就是暂存区的作用,因为objects本来就有一个关于test.txt的git对象,后来又接收了一个从缓存区提交上来的test.txt的tree对象,所以有两个对象类型;②将本地文件的内容做快照并保存到Git 的对象库,实际上就是一个包含文件索引的目录树,像是一个虚拟的工作区。

2024-03-13 14:17:13 1117

原创 redis中setnx命令的底层原理是什么

该命令的含义是set if not exists,Redis是单线程的,所有的命令都是串行执行的。而且Redis的SETNX操作是原子的,即使有大量的线程同时发送SETNX命令,Redis也会一个接一个地执行这些命令。锁的超时问题,setnx用作锁的时候,必须要设置一个过期时间,防止这个锁无法及时释放造成死锁,且要注意setnx和expired必须是原子性的,如果不能保证原子性,那可能由于线程调度问题expired没有生效,依然会有死锁风险,过期时间设置也要结合实际线上情况,太短会出现问题。

2024-03-13 14:03:43 1206

原创 过滤器中捕获报错 Broken pipe

因为接口执行时间过长,已经超过三十秒,所以服务器段和客户浏览器端的连接因为超时的原因就断开了,而且我还特意去找前端同事去确认了下,发现确实是和浏览器有关,也就是接口请求超过一定时间,浏览器会主动关闭这个连接,不同的浏览器的连接最大保持时间不同,常见的谷歌浏览器应该是可以保持30秒,所以接口将数据返回给前端的时候,会在服务器tomcat/undertow进行网络通信将返回值响应回前端时层抛出Broken pipe异常,而后被过滤器层捕获并打印报错。这个错误通常出现在网络通信中,这个错误的常见原因有。

2023-12-02 08:53:01 1063

原创 java: 警告: 源发行版 17 需要目标发行版 17

这个大家很熟悉,是maven项目中指定jdk编译版本的,现在主流框架用的都是springboot,也就是说我们自己的项目maven的父依赖都是这个,点进去查看spring-boot-starter-parent的pom文件。因为我此时设置的jdk版本是1.8,但我在pom文件中指定的maven编译版本java.version是17,不一致,所以报的这个错,解决方案就是在idea中选择jdk17版本。本地jdk开发环境,可以在idea中的project structrue中设置jdk的开发版本。

2023-12-02 07:58:09 993

原创 Spring注册bean的方式

解决:ImportSelector,springboot的自动装配能力就是基于此,通过扫描spring.factories自动装配文件,该文件下全是常用的配置类,通过扫描这些配置类,引入这些组件实现自动装配,同时通过@Condition等一系列条件注解实现按条件装配。痛点:如果一个项目需要引入几十个或几百个配置类,配置依然会很麻烦,且直接Import容易引入大量无关的类。痛点,可以引入第三方jar包中的组件,但如果第三方中有几十几百个个要用的组件呢,手动配置会很麻烦。下有五种,痛点与解决。

2023-11-29 11:18:29 1121

原创 ClassNotFoundException与NoClassDefFoundError

查资料发现是springcloud的依赖版本和springboot的依赖版本不兼容,顺藤摸瓜找到springcloud jar包中调用org.springframework.boot.context.properties.ConfigurationPropertiesBean的位置上,发现果然,当前项目中所引入的springbootboot jar包版本并没有这个类。所以明显是当前springboot版本不适配springcloud,调整版本即解决报错。

2023-10-01 12:58:24 352

原创 An attempt was made to call the method xxx.jedis but it does not exist

在公司项目中做配置迁移的时候,服务启动时报错报错信息这种问题一看就是maven引入第三方依赖相关问题,该问题导致这个springboot服务启动报错,其实这种报错还是看上去比较舒服的,这个报错提示是非常到位,咱们试着理解下这个报错提示。

2023-10-01 12:18:06 631

原创 Postman返回了一个html页面

调用公司的测试环境接口,从浏览器控制台接口处cCopy as cURL(cmd),获取完整的请求内容,然后导入postman发起请求。2、问题定位到Postman,验证方法时把完整请求体给同事,同事的电脑是可以跑通的,于是把问题确实是Postman抽风导致的…1、请求体的HEADER中的标识浏览器信息的相关字段,于是把浏览器升级到最新,再从中Copy as URL,还是同样的报错。postman可能在转义请求内容时可能出了问题,导致公司网关处理时请求体时不适配,换一个api工具即恢复正常。

2023-08-20 11:19:12 6576 3

原创 There is no getter for property named ‘xxx‘ in ‘class java.lang.String

后续的版本,应该是mybatis 3.5或3.6以上的版本中,不必再强制对mapper接口入参加@Param注解了,但个人觉得最好还是加上,这样代码更规范一些。我这里用的mybatis-spring-boot-starter的2.1.3版本,那么这个依赖中包含的3.4.6的mybatis依赖。而这一版本中,mapper层中的接口入参,必须要遵守规范,通过@Param注解对入参做一个标识,如下。如果没有@Param注解,就会报该错误。检查mybatis相关依赖。

2023-06-03 21:44:50 195

原创 springboot 启动后,调用接口时报错404问题汇总(层层推进、超全面)

看到这条日志才能判定项目是启动成功的。

2023-05-16 14:15:49 14750 3

原创 class path resource [db.properties] cannot be opened because it does not exist

但还要注意,resources中的文件可能不会一起被生成到target,我们可以手动复制到target,这样就不会影响本地开发了,resource下的文件,是直接存放到target文件夹下的。也就是默认情况下会顺手输出到默认的SpringWang的out文件夹下,推荐这里修改下,使其输出到各个子maven的target文件夹下面,如下。首先看你项目中编译后的项目生成的位置,这个默认情况下会输出到公共文件夹SpringWang的out文件下,如下。然后再看各个子项目的默认的字节码文件输出地址。

2023-04-22 13:33:54 1146

原创 找不到org.apache.commons.pool.impl.GenericObjectPool.Config的解决方法

经测试commons-pool1.5x版本会报这个问题,但点开commons-pool1.5x版本依赖包也是能看到这个类的,类中确实包含内部类Config。有点超出我的理解,解决方案是使用1.6或更高级的commons-pool版本。后续等我搞明白后会再次更新。

2023-04-11 10:49:06 680

原创 一个案例彻底搞明白多态(向上与向下转型)

【代码】一个案例彻底搞明白多态(向上与向下转型)

2023-03-30 10:09:59 112

原创 mysql索引与sql优化面试题(建议收藏)

备注:一开始粗心了,有效接待字段搞错了,导致数据对不上(把sessionHumanValidRecep和sessionHumanSelfValidRecep搞混了),追代码中字段sessionHumanValidRecep​,,看看有没有字段或者后续的查询,弄了半天发现是字段选错了...

2023-03-26 22:35:39 626

原创 一百字讲明白instanceOf关键字

instanceof 是 Java 的保留关键字,它的作用是测试它左边的对象是否是它右边的类的实例,返回 boolean 的数据类型,需要注意的是,该关键字用的是它左边对象的实际类型去判断的,而不是用的它的引用类型,例如对象obj的引用类型是A,但它的实际类型是D。

2023-03-15 08:58:59 129

原创 java泛型(360°无死角讲解)

java泛型

2022-10-07 08:01:27 575

原创 git撤销操作(git后悔药)

1、撤销工作目录vim a.txt #修改工作目录文件git status #此时会提醒Changes not staged for commitgit checkout -- a.txt #执行完这条命令,发现原理是把这个文件恢复到暂存区注意,经过测试发现其原理是把当前文件恢复同步成暂存区的样子2、 撤销暂存区的修改vim a.txtgit add a.txt............

2022-08-14 13:53:52 1324

原创 BeanUtils.copyProperties的用法(超详细,建议收藏)

用法org.springframework.beans.BeanUtils,它提供了对java反射和自省API的包装。它里面还有很多工具类,这里我们介绍一下copyProperties。我们如果有两个具有很多相同属性的JavaBean对象a和b,想把a中的属性赋值到b,比如接口中将接收到的前端请求参数封装为reqVo,dan@Datapublic class User { private String id; private String name; private Stri

2022-05-25 08:29:51 56016 2

原创 JAVA构造器、静态上下文的执行时机与代码执行顺序详解

java代码执行顺序详解5,1,10,6,9,3,2,9,87,9,3,2,9,87,1、类加载时机,一个类要创建实例前要先加载并初始化这个类mian方法运行时会先加载并初始main方法所在的类2、如果这个类有父类,那么要先加载并初始这个类的父类3、一个类的初始化就是执行clinit方法clinit方法由静态代码块、静态变量、静态方法组成clinit方法只执行一次clinit方法按顺序执行,也就是静态的代码块、变量、方法这三者谁在代码中位置靠前谁先执行也就是如果仅初始化类,不进行

2022-05-11 21:06:20 2214

原创 push操作前,git commit与git pull(fetch+merge)的先后顺序问题详解

1、流程对比pull->commit->push #在本地修改与远程代码无冲突的情况下,优先使用commit->pull->push #在本地修改与远程代码有冲突的情况下,优先使用2、怎么去确定是否有冲突呢?一般我们在合作开发一个项目的过程中,都会有分工有时会两个人同时修改一个类,那你俩就大概率会在这个类里面产生冲突;有时整个类都是你自己在开发。如果都是自己在开发的类自然无论如何都没有冲突,但也有特殊情况,比如你在test分支上修改了User.java然后push到远

2022-04-30 13:15:59 2453

原创 @Repository详解

不多废话,直接看源码@Target({ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Documented@Componentpublic @interface Repository { @AliasFor( annotation = Component.class ) String value() default "";}分析如下@Component代表@Repository可以把一个类

2022-04-21 09:13:03 12585 4

原创 HashMap由浅入深(jdk8)

基础结构JDK 1.8 之前是由“数组+链表”组成,JDK 1.8,底层是由“数组+链表+红黑树”组成/*表在第一次使用时初始化(懒汉模式),并根据需要调整大小。当分配时,长度总是2的幂我们还允许一些操作的长度为0,以允许当前不需要的引导机制;这是hashmap的主体结构*/transient Node<K,V>[] table;transient int size;/*HashMap的基本数据结构,链表,数组中存储的是链表的地址*/static class Node&l

2022-04-19 17:11:07 427

原创 深入理解Java main方法

在Java中,main()方法是Java应用程序的入口方法,也就是说,程序在运行的时候,第一个执行的方法就是main()方法,这个方法和其他的方法有很大的不同,例如方法的名字必须是main方法必须是public static void 类型的方法必须接收一个字符串数组的参数。案例// Java中的main()方法详解public class HelloWorld { public static void main(String args[]) { System.out

2022-04-15 07:53:16 2325

原创 Java中==和equals、equals和hashCode的关系详解

==运算符在java中==是运算符,用于比较两个变量是否相等基本数据类型,也称原始数据类型。byte,short,char,int,long,float,double,boolean, 他们之间的比较,应用双等号(==),比较的是他们的值。复合数据类型(类) ,当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址,所以,除非是同一个new出来的对象他们的比较后的才能得到为true的结果,否则比较后结果均为falseequals(java.lang.Obejct)官网文档指示其他对象

2022-04-05 16:43:24 1429

原创 git远程仓库

github创建一个远程仓库echo "# sobot-chat" >> README.mdgit initgit add README.mdgit commit -m "first commit"git branch -M main #更改分支名#添加一个新的远程 Git 仓库,这一步不需要做验证,提交时需要进行权限验证,同时指定一个你可以轻松引用的简写,这里是origingit remote add origin https://github.com/wang692/

2022-02-11 09:26:33 782

空空如也

空空如也

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

TA关注的人

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