
java
我是一只代码狗
学习it我总结了五个字,听,问,看,想,敲
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
jwt的结构?
JWT(JSON Web Token)由三部分组成,用点号(.)分隔:1)header头,包含签名算法和令牌类型;2)负载(payload),存储实际传输数据;3)签名,用于验证令牌完整性,防止篡改。这种结构简单高效,header定义加密方式,负载承载业务数据,签名确保安全性,广泛应用于身份认证等场景。转载 2025-07-05 18:48:12 · 27 阅读 · 0 评论 -
你会怎么设计一个订单支付超时取消的场景?
文章摘要: 本文介绍了一个订单超时自动取消的设计方案。系统通过订单表设计(包含状态、版本号等字段)和联合索引优化查询效率。采用死信队列实现30分钟延迟检查未支付订单,配合分布式锁和乐观锁机制(版本号控制)确保并发安全。若取消失败会进行3次重试并发送预警通知,同时设置每小时扫描的定时任务作为MQ故障时的兜底方案,确保未支付订单最终被取消。该方案兼顾了消息队列的实时性和定时任务的可靠性,形成双重保障机制。原创 2025-06-29 17:17:49 · 316 阅读 · 0 评论 -
pom怎么引入另一个项目
本文介绍了两个Maven项目(demo1和demo2)的依赖关系配置过程。首先在demo1非Web项目中执行maven clean清理target目录,再通过maven install将生成的jar包同时部署到本地target目录和本地Maven仓库。然后在demo2项目的pom.xml文件中添加对demo1的依赖引用配置,即可在demo2项目中直接使用demo1的类。整个过程展示了Maven项目间依赖管理的基本使用方法。原创 2025-06-29 16:33:53 · 212 阅读 · 0 评论 -
maven package和maven install的区别?
Maven中package和install命令的区别:package仅将项目打包到target目录,而install不仅打包还会将产物安装到本地仓库供其他项目依赖使用。前者适用于单独项目构建,后者可实现项目间共享。转载 2025-06-29 15:34:25 · 49 阅读 · 0 评论 -
mybatis中,怎么实现 像那种定义是否删除的通用字段,增删改查数据的时候要自动带上这个通用标识字段?在mybatis plus是是怎么实现的?
2.在mybatis-plus可以通过@TableLogic注解,来设置到字段上,自动实现逻辑删除。1.在mybatis可以使用mybatis的拦截器,在sql执行之前进行设置。转载 2025-03-09 20:13:47 · 64 阅读 · 0 评论 -
服务不停机发版如何操作
3.灰度发布(金丝雀发布):在生产环境做一些配置,只允许这些特定的用户才能使用新版本,等测试没问题的时候,才开放所有用户。1.蓝绿部署,部署2套版本,蓝色是正在使用的版本,绿色是新版本,等新版本测试没问题的时候,在从蓝色版本,切换到绿色版本。2.滚动发布,一次只部署一个服务器,等这台服务没有问题的时候,在部署下一台,直到所有的旧版本都替换为新版本。转载 2024-12-14 19:49:05 · 132 阅读 · 0 评论 -
设计一个Java缓存中间件系统,该中间件的缓存写入后,经过指定时间缓存要自动失效。在读取缓存时,如果缓存不存在,需要异步调用 AService.get(K) 接口获取实时数据更新到缓存中。
设计一个Java缓存中间件系统,该中间件的缓存写入后,经过指定时间缓存要自动失效。在读取缓存时,如果缓存不存在,需要异步调用 AService.get(K) 接口获取实时数据更新到缓存中。转载 2024-12-07 22:19:06 · 105 阅读 · 0 评论 -
编写一个java函数,实现获取1000个用户昵称的能力,具体要求如下
2)在Service.get内部,通过调用UserService.getUserMap(List userIds)获取数据,但UserService.getUserMap每次最多只接收50个用户ID,且该接口一次请求耗时100ms。1)提供一个函数Service.get(List userIds),支持传入1000个用户ID,返回用户ID及其对应的昵称。转载 2024-12-07 21:42:42 · 123 阅读 · 0 评论 -
list分批处理
System.out.println("当前是第"+(i/batchSize+1)+"批,数据为:"+sub);//结束索引 取最小的,如果超过了list.size 那么肯定会越界,所以 这里要取小的。//i+10 在正常的情况下 肯定比list.size 小,每次取这一批结尾的位置。//只有在最后一批的时候 才取list.size是最小的,否则i+10 就越界了。//因为i是从0开始的,所以0/10=0 ,如果我们想从1开始,那么就需要加1。//分成11批 每批加10 从i+10 下一个位置开始。转载 2024-12-07 19:17:05 · 115 阅读 · 0 评论 -
Java反射为什么慢?
3.反射创建额外对象,增加内存使用和垃圾回收开销。2.运行时动态解析类,方法,字段,比较耗时。转载 2024-11-23 21:48:44 · 97 阅读 · 0 评论 -
面试官说,你还有什么要问的吗?
5.项目中的是否涉及到审批相关的流程引擎,是那些呢?1.面试官您好,我想问一下,咱们这边做的项目能介绍一下吗?6.当我进入公司后,有没有相关的新手文档,能够让我快速上手。4.是新项目,还是老项目,是内网开发,还是可以外网开发。3.公司使用的框架和技术栈,数据库有那些。2.我进入公司之后,负责哪些方面的内容。原创 2024-09-16 17:41:12 · 323 阅读 · 0 评论 -
面试项目介绍
2.当面试官让你详细介绍项目的时候,在详细介绍每一个功能点,但是要注意时间不要超过10分钟。3.在你介绍项目难点的解决的时候,不要夸大说自己懂底层原理,如果只是使用,不要吹底层。4.要介绍自己的亮点,比如说在上线的时候,和线上遇到了一些故障,这些代码不是你开发的。5.别人也不知道怎么改了,你能很快定位问题,在短时间内解决问题,及时上线和修复bug。1.简短总结项目做的模块,不要紧张,不要说的时间太长。6.在比如说,你这个项目得到了客户的表扬信。原创 2024-09-16 17:23:05 · 193 阅读 · 0 评论 -
线程池是依据什么做优化的
8.如果线程存活时间过长,任务执行完毕,线程继续占用系统资源,导致线程资源浪费,如果线程资源不足,可能会出现死锁或者内存泄漏。9.通过监控工具对线程池进行监控,还可以通过定时任务,打印线程池参数的内容,结合nacos的配置中心,做动态线程池。3.如果是io密集型的,涉及到网络请求,数据库读写,文件处理的,那么核心线程数为cpu的逻辑处理器的数量的2倍。1.根据核心线程数,最大线程数,阻塞队列的容量,线程的存活时间来进行优化线程池。转载 2024-08-10 16:25:01 · 105 阅读 · 0 评论 -
什么是cas,会出现哪些问题?
2.在cas机制中,如果线程不停的尝试cas操作而不成功,会一直进行自旋操作,这会浪费cpu的时间,这就是循环时间长问题,也叫做空等待。1.如果一个值原来是A,另一个线程将他改为B,然后又把他改回A,cas在比较的时候,仍然匹配A,这就是ABA问题。3.一个cas操作只能保证一个共享变量的原子操作,对于多个共享变量的操作需要加锁来保证原子性。1.cas空等待会造成cpu利用率飙高,资源浪费,死循环,访问系统的时候会出现卡顿。,可以通过版本号来解决这个问题,如果一致在更新。3.如果不一致,就不做处理。转载 2024-07-27 20:47:14 · 177 阅读 · 0 评论 -
currentHashMap说下?怎么做到线程安全的?
7.ConcurrentHashMap在1.8的时候,不在使用分段锁,来保证线程安全。6.ConcurrentHashMap在1.8的底层数据结构使用数组+链表+红黑树。8.而是在初始化Node数组的时候,使用cas+volatile来保证线程安全。2.ConcurrentHashMap在1.7的时候使用分段锁来保证线程安全。5.在扩容的时候,只会对当前访问的段进行扩容,而不是整个map,减少扩容开销。4.每次只锁住当前访问的段,而不是锁定整个map ,可以对不同的段并行更新。转载 2024-07-07 15:55:19 · 853 阅读 · 1 评论 -
说下hashmap底层原理?为什么线程不安全?在什么情况下会导致线程不安全?
1.hashmap底层数据结构是数组+链表+红黑树组成2.数组默认的初始容量是16,加载因子是0.753.当元素的数量超过数组长度乘以加载因子的时候,就会触发扩容操作,扩容为原来的2倍。4.当多个key的hashcode一样的时候,会造成哈希冲突,也叫哈希碰撞5.使用链表的下一个位置存储相同的hashcode,这样就解决了哈希冲突6.当链表的长度大于8的时候,会将链表转为红黑树,提高查询效率。转载 2024-06-27 20:37:39 · 151 阅读 · 0 评论 -
什么是对称加密和非对称加密?
非对称加密就是,需要一个公钥和私钥,客户端使用公钥对数据加密,服务器使用私钥解密成明文。对称加密就是,客户端的数据加密,服务器进行解密,使用同一套加密方式。转载 2024-05-23 16:12:45 · 62 阅读 · 0 评论 -
@Data注解遇到的坑
在这里直接更新value,.并没有插入数据,所以 最终插入的是只有1条数据,这就是@Data的坑。当使用了@Data这个注解,发现2个相同的对象内容,打印的hashcode竟然一样。对象自带的hashcode 不一样,计算的hash值也不一样,比较的是地址值,所以在不使用@Data注解的时候,即使对象的内容一样,也会在set插入2条数据。如何hash值一样,并且key一样,就是2个相同的对象内容组成了一个key。我们进入set的添加源码,可以看到,set的底层是map。第一个对象计算的hash值。原创 2024-05-09 22:21:05 · 1327 阅读 · 0 评论 -
map可以插入null吗?
【代码】map可以插入null吗?原创 2024-04-20 18:25:51 · 530 阅读 · 0 评论 -
什么是反射
1.反射就是在程序运行过程中,动态操作类和对象的能力。2.可以创建类的实例,调用类的方法和属性。3.可以动态的生成新的类和代理类。转载 2024-04-03 21:56:09 · 57 阅读 · 0 评论 -
acm编程 二叉树的广度优先遍历
题目描述:有一棵二叉树,每个节点由一个大写字母标识(最多26个节点)。现有两组字母,分别表示后序遍历(左孩子·>右孩子->父节点)和中序遍历(左孩子·>父节点。输入描述:输入为两个字符串,分别是二叉树的后续遍历和中序遍历结果。>右孩子)的结果,请输出层次遍历的结果。输出描述:输出二叉树的层次遍历结果。输入:CBEFDA CBAEDF。转载 2024-03-17 20:13:00 · 112 阅读 · 0 评论 -
acm编程 分割均衡字符串
题目描述:均衡串定义:字符串只包含两种字符,且两种字符的个数相同。给定一个均衡字符串,请给出可分割成新的均衡子串的最大个数。字符串的长度[2,10000]。给定的字符串均为均衡串。约定字符串中只包含大写的"X'和"Y"两种字符。补充说明:分割后的子串,是原字符串的连续子串。输入描述:均衡串:XXYYXY。转载 2024-03-17 18:39:44 · 125 阅读 · 0 评论 -
acm编程 按身高和体重排队
请输出排列后的学生编号。输入描述:两个序列,每个序列由n个正整数组成(0转载 2024-03-17 18:23:31 · 124 阅读 · 0 评论 -
volatile内存屏障是在哪个阶段触发的,汇编还是cpu
volatile的内存屏障,在编译阶段由编译器生成汇编指令,在运行阶段,由cpu解释执行汇编指令。转载 2024-03-04 23:06:31 · 102 阅读 · 0 评论 -
aop和oop的区别
aop是面向切面编程,动态代理,在不改变原有的方法结果上,进行一些增强操作,比如在方法操作之前触发,在方法操作之后触发一些增强操作,可以统一管理日志和事务,代码解耦。oop是面向对象,有三大特性:封装,继承,多态,缺点就是,比如说一些日志,事务操作,会代码重复,使用的类越多,越不利于维护。转载 2024-03-02 18:15:52 · 73 阅读 · 0 评论 -
401和403的区别
是登录之后,没有权限访问这个接口。:是在登录的时候账号密码输入错误。原创 2024-03-02 11:02:36 · 736 阅读 · 0 评论 -
单体项目和微服务的使用场景
单体项目适合业务场景简单,创业团队,项目初期快速开发这些场景。微服务的缺点:部署和管理复杂,数据一致性问题,沟通成本高。单体项目的优点:开发效率高,部署和运维简单,测试简单。微服务适合业务场景复杂,核心业务独立,业务量大的场景。单体项目的缺点:扩展困难,难以维护,部署时间长。微服务的优点: 灵活性强,易于维护,故障隔离。转载 2024-02-29 18:34:44 · 128 阅读 · 0 评论 -
请你画出一个微服务项目架构图
请你画出一个微服务项目架构图原创 2024-02-29 16:38:49 · 594 阅读 · 0 评论 -
Spring Security底层原理
Spring security是一种基于Aop和过滤器的安全框架,可以进行身份认证和授权。也可以自定义过滤器,实现登陆的拦截,比如jwt过滤器,没有携带token就给他拦截。内部采用过滤器链,每个过滤器负责不同的内容。在获取用户信息的时候,可以从安全上下去获取。在登陆之后会把用户信息放入安全上下文里面。并且还提供了异常处理机制。转载 2024-02-26 23:04:51 · 126 阅读 · 0 评论 -
两个String数组合并去重,不能使用集合和自带的排序
【代码】两个String数组合并去重,不能使用集合和自带的排序。原创 2024-02-26 22:06:41 · 601 阅读 · 0 评论 -
HashMap链表达到多长之后就会变慢
缓存命中率是指在进行CPU访问的时候,请求被缓存成功的概率,缓存命中率越高,系统的性能就越好,命中率低会导致程序运行速度变慢。链表的长度超过8之后,增删改查操作的效率会变差,遍历元素的个数增多,缓存命中率降低,从而影响效率。转载 2024-02-26 20:13:12 · 177 阅读 · 0 评论 -
项目中那些地方用到了限流算法?
用户行为限流,比如说登陆尝试,注册尝试,密码重置尝试,防止用户暴力破解账户。资源访问限流,比如商品秒杀,优惠卷领取,防止资源被过渡的消耗。上传下载限流,保护服务器带宽,服务器的存储资源。微服务限流,控制不同服务之前调用的一个频率。数据库限流,保护数据库连接池不会被耗尽。接口限流,防止恶意请求,爬虫。转载 2024-02-25 17:28:24 · 57 阅读 · 0 评论 -
你是怎么带团队的
如果组员不会linux命令,docker,k8s这些,我也会手把手的教学。这样在进行评审的时候,就可以减少一些不必要的操作,避免影响返工。当代码开发完毕之后,会进行代码评审,对一些不符合规范的地方。会让他们去处理,在开发模块之前,会先跟他们沟通好代码规范,当组员一个小时还没想明白,或者无法解决的问题的时候。我会先进行学习,学习之后,在给组员开会议进行培训。如果组员有不明白的业务,我也会先去了解,了解之后。如果组员不会前端,我会教他前端的技术。如果组员不会框架,我会教他框架的技术。原创 2024-02-25 15:19:13 · 609 阅读 · 0 评论 -
红黑树的时间复杂度
红黑树是一种自平衡的二叉搜索树,基于二叉树的特性,比当前节点小的,去左边查询,比当前节点大的去右边查询,所以时间复杂度是O(logn)转载 2024-02-25 14:10:21 · 858 阅读 · 0 评论 -
你们项目中的qps是多少?
TPS: 涉及事物操作,涉及到数据变化,或者多个接口操作,比如首页里面有多个接口显示的统计数,就是1个事物操作。QPS:只查询,不会修改,单个接口为主。转载 2024-02-25 13:17:15 · 1215 阅读 · 0 评论 -
你会怎么设计一个高并发的场景
1.对于频繁读取的数据,可以使用redis缓存,来降低数据库的压力。3.对sql语句加索引,优化sql,分库分表,读写分离。5.如果需要异步处理的场景,可以使用mq消息队列。4.把系统拆分成多个小服务,单独部署。2.使用nginx做负载均衡。转载 2024-02-25 12:14:21 · 91 阅读 · 0 评论 -
在大厂中,为啥你们的项目会拆分的这么细
保证项目的顺利完成,减少风险,提高开发效率。转载 2024-02-25 11:52:10 · 95 阅读 · 0 评论 -
手写Java分页算法
【代码】手写Java分页算法。转载 2024-02-23 22:32:16 · 436 阅读 · 0 评论 -
jdk1.9 与1.8 的区别,新增的性能主要体现在哪些方面
jdk9中String的底层char数组改成了byte字节数组。改进集合工厂方法,stream api和安全性。引入模块化系统和新的http Api。转载 2024-02-22 21:49:54 · 268 阅读 · 0 评论 -
Java的基本数据类型、封装数据类型,引用数据类型的区别
基本数据类型就是int,long,double,float,short,char,boolean,byte。基本数据类型和封装数据类型存储的是值,引用数据类型存储的是引用地址。封装数据类型就是把基本数据类型包装成一个对象,内部提供了很多方法。引用数据类型就是String,类,接口,数组,枚举,集合。基本数据类型和封装数据类型是在栈中,引用数据类型是在堆中。转载 2024-02-22 21:37:20 · 89 阅读 · 0 评论