Java
文章平均质量分 68
秃狼
三无程序猿
展开
-
面经学习(越亮传奇实习)
的实习项目主要就是做C端的在线教育项目,并且呢,它采用的基于alibaba那套落地的微服务方案。可能也是因为我是实现生的源固,我没有负责黄金链路,从用户登录到用户下单再到用户观看视频的整个流程,我主要负责的就是负责辅助模块的开发。那我给您介绍一下我记得比较清楚的难点吧。原创 2024-07-19 15:51:59 · 505 阅读 · 0 评论 -
面经学习(厦门安全狗实习)
我的实习项目主要就是做C端的在线教育项目,并且呢,它采用的基于alibaba那套落地的微服务方案。可能也是因为我是实现生的源固,我没有负责黄金链路,从用户登录到用户下单再到用户观看视频的整个流程,我主要负责的就是负责辅助模块的开发。那我给您介绍一下我记得比较清楚的难点吧。原创 2024-07-19 14:42:27 · 766 阅读 · 0 评论 -
面经学习(杭州实在智能实习)
当发现B中需要依赖A,此时将使用A的ObjectFactory生成A的代理对象,并将A的代理对象存放到二级缓存中,将A注入到B中,将完整的B存放到一级缓存中,此时回溯,将完整的B注入到A中,最终解决三级缓存的问题。Spring的实现方式主要就是使用Aop的来实现的,使用环绕通知,在执行方法的时候,开启事务,并对执行的方法使用Try/catch,如果捕获异常的话就进行回滚,如果执行完方法后就进行提交。解决这个问题的主要方案就是:增加我们的消费者个数,加快消费者的消费速度,对我们消息队列进行扩容。原创 2024-07-18 23:35:55 · 712 阅读 · 0 评论 -
Java实习手册(小白也看得懂)
距离俺发布的学习路线已经六个月了,那我给小伙伴的学习周期是四五个月左右,我相信大多的小伙伴已经学习的差不多了。正好赶上暑期实习的阶段,在暑期找到实习就成为暑期的头等大事。实习经验在校招的起到决定性的作用,所以我们需要认真准备。原创 2024-07-05 22:46:10 · 1554 阅读 · 7 评论 -
物流项目实习话术(家政,二手回收项目通用)
我的实习项目呢,他是基于微服务框架体系的物流项目中,主要负责人,货,车三者之间的调度关系。主要的黄金链路就是用户下单 -> 快递员揽收->通过一系列的调度完成商品运单的运输->再到快递员派送商品->用户签收的整个流程。主要的模块主要就是调度模块,通过调度模块来异步的调度其他模块,包括运单模块,订单模块,路线规划模块等等。这个模块是物流微服务中最重要的就是调度微服务。其中主要就是包含订单转运单,运单合并,计算运力,司机出入库,快递员派件等流程。那我就按执行流程给您介绍一下调度微服务模块,您看行吗?订单转运单。原创 2024-05-01 17:39:19 · 1116 阅读 · 0 评论 -
在线影院项目话术(0.7w精选)
这个电影院项目不同于常见的基于会员限制用户观看范围的在线影院项目,主要就是按需购买片源来进行观看,用户就不会因高额的会员费而劝退。项目的主要实现就是:微服务的五大主键,数据库使用mysql,redis,中间件使用rabbitmq,xxl-job,工具使用skywalk和jenkins。项目的主要功能就是 片源的观看及购买及一些辅助用户的功能包括:签到积分,热门电源排行,优惠劵模块。简单的来说,用户登录并按规则下单->用户观看片源的整个流程。原创 2024-03-25 16:29:34 · 797 阅读 · 0 评论 -
在线教育项目话术(1W字精选)
我们考虑到此模块可能会存在高并发的场景,所以在原先涉及大量的DB操作旧方案上通过redis的数据结构和定时任务来优化。(面试官感兴趣就介绍优化方案)原创 2024-03-20 15:32:52 · 907 阅读 · 0 评论 -
Redis的BitMap的使用
Redis的Bitmap不是一个独立的数据结构类型,而是基于字符串(String)类型实现的一种功能 ,存储的是二进制的文件,布隆过滤器就是基于BitMap实现的。原创 2024-03-06 16:53:12 · 420 阅读 · 0 评论 -
DelayQueue使用手册
DelayQueue是Java中的一个并发容器,它实现了Delayed接口,用于存储具有延迟时间的元素。DelayQueue内部使用PriorityQueue来存储元素,并根据元素的延迟时间进行排序。延迟时间指的是元素需要在指定的延迟时间之后才能被取出。目前主流的延迟对应的方案为:使用mq的延迟队列。而DalayQueue是java自带的延迟队列,我们可以根据需求去选择。使用创建一个队列元素去实现 Delayed 接口。@Data//携带的数据//延迟时间//元素在队列中的剩余时间。原创 2024-02-29 16:17:00 · 260 阅读 · 0 评论 -
前后端项目统一返回类型(配置即用)
此模板并非定死,可以根据前端的规则进行相应属性名的修改,及根据业务的实际情况添加或修改其中的属性。原创 2024-01-03 23:33:40 · 531 阅读 · 0 评论 -
jwt工具类(配置即用)
主要使用就是生成和解析的方法,我们可以在此方法上实现方法增强的相关操作。原创 2024-01-03 23:27:42 · 567 阅读 · 0 评论 -
网盘项目话术(0.5w字精选)
该项目主要就是对文件的操作,file表,file_share表。file表主要字段:id,用户id,父级目录id,文件的地址,文件的封面图片地址,创建和修改时间。file_share表主要字段:id,文件id,用户id,有效类型,创建和失效时间(用于定时任务)。基于RDAB的五张表:用户信息表,角色表,权限表,用户角色关联表(多对多关系),角色权限关联表(多对多关系)。基础设置表:id,邮箱标题,邮箱内容前缀,默认初始化空间大小。单点登录->双token三认证(迭代方案)原创 2023-12-28 21:59:28 · 1239 阅读 · 0 评论 -
物流项目话术(1.5w字精选)
用户在【用户端】下单后,生成订单系统会根据订单生成【取件任务】,快递员上门取件后成功后生成【运单】用户对订单进行支付,会产生【交易单】快件开始运输,会经历起始营业部、分拣中心、转运中心、分拣中心、终点营业部之间的转运运输,在此期间会有多个【运输任务】到达终点网点后,系统会生成【派件任务】,快递员进行派件作业最后,用户将进行签收或拒收操作原创 2023-12-19 22:42:57 · 1834 阅读 · 0 评论 -
线程池基础参数和执行流程
3.如果阻塞队列满了,就判断线程的总数是否大于核心线程的总数,如果大于,创建救急线程去执行任务。(当救急线程和核心线程处于空闲的时候就会去执行堵塞队列中的方法)DiscardOldestPolicy:丢掉在堵塞队列中存储最久的任务,将新的任务存储到队列中。1.在新的任务进来后,先判断核心线程是否已满,如果没满,直接创建个核心线程去执行任务。2.如果核心线程满了,就判断阻塞队列是否已满,如果没有满,直接存储到阻塞队列中。5.BlockingQueue:阻塞线程,存储哪些没有被核心线程执行的任务。原创 2023-12-07 11:29:07 · 534 阅读 · 0 评论 -
Synchronized关键字的底层原理
类是轻量级锁,但是在做锁的重入的时候不会使用CAS指令,而是直接判断thread的id是否相同,相同就表示没有竞争。2.如果锁记录中的MarkWord的值为null,说明这是一次锁重入操作,直接将锁记录中的指向对象的地址设置为null。3.如果锁记录中的MarkWord的值不为null,我们就通过CAS指令将锁对象中的MarkWord恢复成无锁状态。重量级锁主要使用在线程竞争的时候,且重量级锁涉及进程的上下文切换,效率比较低下,实现的,在对象的对象头中存储了MarkWord存储的就是Monitor的地址。原创 2023-12-04 12:02:14 · 554 阅读 · 1 评论 -
MVCC详解(小白也看得懂)
MVCC:多版本并发控制。原创 2023-12-02 16:38:18 · 481 阅读 · 0 评论 -
HashMap源码解析
4.在链表的插入中,我们通过循环找到链表的尾部,并创建一个节点,如果个数大于等于8则直接将链表转换为红黑树,插入值的链表中存在key相同的值则直接进行覆盖。3.如果存在的key的值和传入的key的值相同的话就直接进行覆盖。如果不相同并且节点是红黑树的时候就做红黑树的插入。反之则做链表的插入。1.判断判断HashMap中数组的长度是否为0,如果为0就使用resize方法进行扩容,且第一次扩容的大小为16。put方法需要返回对一个的hash值和key和value。默认的容量就是16,装载因子为0.75。原创 2023-11-29 15:11:06 · 451 阅读 · 0 评论 -
ArrayList的源码解析
3.参数构造 (传入一个集合): 将集合转为数组类型并判断其长度,如果长度小于0则直接报错,反之,判断集合的类型是否为ArryList类型,如果是则直接赋值,反之,调用Array.copyof方法得到对应的ArrayList进行赋值。2.参数构造(初始化长度):如果长度大于0直接创建一个对应长度的Object数组,如果长度为0则直接返回{}。当第一次添加数据的时候,此时ArrayList中的值为为{},扩容的长度就是10。如果新的容量大于当前的容量就进行扩容,反之则不扩容。1.无参构造:直接返回一个{}。原创 2023-11-27 21:14:51 · 498 阅读 · 0 评论 -
Java八股文(急速版)
单个redis节点的并发能力是有限的,所以为了提高并发能力,我们需要搭建redis集群,就比如:主从复制。主从复制的流程主从复制主要分为:全量同步和增量同步。全量同步:在salve请求数据同步的时候会携带application Id和offset,如果master判断出applid和自己的不一样,就认为slave是第一次进行同步,所以会进行全量同步。原创 2023-11-20 23:29:34 · 553 阅读 · 0 评论 -
gittee启动器
很多小伙伴反馈不是使用gitee,不会寻找好的项目,在拿到一个项目不知道从哪里入手。鼠鼠我呀就是宠粉,中嘞,老乡。整!!!原创 2023-11-18 22:15:29 · 688 阅读 · 0 评论 -
2024最新Java八股文(完整版)
单个redis节点的并发能力是有限的,所以为了提高并发能力,我们需要搭建redis集群,就比如:主从复制。主从复制的流程主从复制主要分为:全量同步和增量同步。全量同步:在salve请求数据同步的时候会携带application Id和offset,如果master判断出applid和自己的不一样,就认为slave是第一次进行同步,所以会进行全量同步。原创 2023-11-10 15:39:09 · 2814 阅读 · 0 评论 -
java八股文(基础篇)
由于一个集合同时被多个线程操作就可能出现fail-事件。fail-fast产生的原因线程A在对当前的集合进行遍历,此过程中线程B对集合进行修改操作,当在此过程中线程A再次访问集合是就会报ConcurrentModifactionException异常,产生fail-fast事件。解决fail-fast的方法尽量使用java.util.concurrent包中的类,减少使用java.util中的类。fail-fast的底层实现的概述。原创 2023-10-30 22:09:35 · 518 阅读 · 0 评论 -
分布式日志和链路追踪
可以在allMessage中显示字段。这里添加了level字段。原创 2023-10-26 10:06:44 · 1671 阅读 · 0 评论 -
美团Leaf使用
在复杂分布式系统中,往往需要对大量的数据和消息进行唯一标识。如在美团点评的金融、支付、餐饮、酒店、猫眼电影等产品的系统中,数据日渐增长,对数据分库分表后需要有一个唯一ID来标识一条数据或消息,数据库的自增ID显然不能满足需求;特别一点的如订单、骑手、优惠券也都需要有唯一ID做标识。此时一个能够生成全局唯一ID的系统是非常必要的。美团Leaf就是用于生成对应公式的Id的工具。为什么我们要使用美图Leaf?UUID性能非常高:本地生成,没有网络消耗。性能非常高:本地生成,没有网络消耗。原创 2023-10-13 15:46:34 · 638 阅读 · 0 评论 -
Java流式编程的使用
使用流式编程的步骤就是: 设置数据源, 设置数据处理的方式,设置收集结果的方式。原创 2023-09-21 13:41:53 · 418 阅读 · 0 评论 -
ffmpeg安装
FFmpeg是一个开源的音视频处理库,它提供了一系列的工具和API,可以用于处理音视频文件。你可以使用FFmpeg的命令行工具来执行各种音视频处理操作,比如转码、剪辑、合并等。FFmpeg的命令格式通常是:ffmpeg [全局选项] {[输入文件选项] -i 输入文件} ... {[输出文件选项] 输出文件} ... [1] [2] [3]。你可以根据具体的需求和参数来使用FFmpeg进行音视频处理。原创 2023-07-31 21:18:03 · 1218 阅读 · 0 评论 -
mysql表主键自增过大问题
最近在做项目时,发现我创建的每一个表的主键设置自增,在插入数据数据时会出现自增值过大的问题。原创 2023-07-16 21:06:03 · 2053 阅读 · 1 评论 -
springboot3嵌入式容器源码解析
不同于使用springmvc,在我们使用springboot时无需配置tomcat就可以直接使用,这就说明springboot已经在我们启动项目时将tomcat配置好了,接下来我们就来看看springboot底层是怎么实现的。原创 2023-06-11 22:06:29 · 1469 阅读 · 0 评论 -
springboot3错误处理机制源码分析
在springboot启动时会自动装配默认的错误处理机制ErrorMvcAutoConfiguration原创 2023-06-10 23:03:41 · 604 阅读 · 0 评论 -
Spring事务深度学习
Spring 框架对 JDBC 进行封装,使用 JdbcTemplate 方便实现对数据库操作。原创 2023-05-14 13:02:22 · 245 阅读 · 0 评论 -
AOP深度学习
AOP(Aspect Oriented Programming)是一种设计思想,是软件设计领域中的面向切面编程,它是面向对象编程的一种补充和完善,它以通过预编译方式和运行期动态代理方式实现,在不修改源代码的情况下,给程序动态统一添加额外功能的一种技术。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。原创 2023-05-12 09:52:59 · 511 阅读 · 0 评论 -
Spring IoC 深度学习
IoC 是 Inversion of Control 的简写,译为“控制反转”,它不是一门技术,而是一种设计思想,是一个重要的面向对象编程法则,能够指导我们如何设计出松耦合、更优良的程序。原创 2023-05-08 23:41:53 · 539 阅读 · 0 评论 -
springCloud 初探
分布式系统是若干个独立计算机的集合,这些计算机的集合,这些计算机对于用户来说就像单个相关系统。分布式系统是由一组通过网络进行通信,为了完成共同的任务而协调工作的计算机节点组成的系统。分布式系统的出现是为了用廉价的,普通的机器完成单个计算机无法完成的计算,存储任务。其目的是:利用更多的机器,处理更多的数据。定义: RPC是指远程过程调用,是一种进程间的通信方式,它是一种技术的思想,而不是规范。它允许程序调用另一个地址空间的过程或函数,而不是程序显式编码这个远程调用的细节。即程序员无论是调用本地还是远程的函数,原创 2022-06-14 11:37:00 · 533 阅读 · 2 评论 -
Java注解使用手册
1.@voerride 重构2.@deprecated 不推荐使用3.@SupperssWarnings 抑制警告,用于识别程序中的错误。4.@Target(value = .....) 用于描述注解的使用范围(即:被修饰的注解可以用的范围),标记可以使用的地方,可以放在类或方法或属性上。5.@Retention(value = .....) 表示需要在什么级别保存该注释的生命周期,表示我们的注解在什么地方有效。(runtime > class > sources)6.@Do原创 2021-10-11 14:33:52 · 178 阅读 · 0 评论 -
常用的设计模式
设计模式都会遵循OOP原则,从而提高代码的效率。OOP原则为下图:单例模式 参考我的上一期博客:JAVA 单例模式详解_Ostkakah的博客-CSDN博客工厂模式 工厂模式分为简单工厂模式和工厂方法模式。 简单工厂模式:只有一个工厂,这个工厂负责造所有的东西,用户只负责告诉工厂要造什么东西。public class catFactory { //简单工厂模式 public static car getCar(String nam...原创 2021-09-29 10:03:15 · 167 阅读 · 0 评论 -
JAVA 单例模式详解
1.饿汉式 在初始化的时候就实例了一个对象。特点:只会创建一次,所以用不用就是用户的事了,所以对应的缺点也就来了,因为一个类中可能存在多个属性,并且该类在后续的代码中没用被使用过,就会造成内存上的浪费。案例代码public class Hungry { private byte[] data1 = new byte[1024 * 1024]; private byte[] data2 = new byte[1024 * 1024]; private byte[] ...原创 2021-09-27 16:16:18 · 191 阅读 · 0 评论 -
二叉树的最近公共祖先
题目 输入一颗以root为根节点的二叉树和该二叉树上的两个结点p和请计算出这两个结点的最近公共祖先思路分析 直接套用二叉树的遍历框架,这里就不写了。 一道二叉树的此类问题我们要考虑三个问题,分别是:这个函数是个什么的,这个函数参数中的变量是什么, 得到的函数的递归结果我们应该干什么。 //class TreeNode{// int val;// TreeNode left;// TreeNode right;//}TreeNode l...原创 2021-09-23 20:36:37 · 95 阅读 · 0 评论 -
计算特殊树结点的方案
普通树的结点计算 我们可以通过前中后三种遍历方式来计算结点的个数, 由于比较简单在这里我就不展示代码了。满二叉树的结点计算 由满二叉树的性质我们可以知道该树的每一层结点都是满的,且左子树的深度和右子树的深度都是相等的,所以我们可以通过不断的向左或右遍历就可以求出该树的高度,又以为二叉树的结点的个数是成2的倍数增长,最终就可以求出的该二叉树的结点个数。代码为下:public int bTreeNode(TreeNode root){ int count = 0; ...原创 2021-09-12 16:19:26 · 112 阅读 · 0 评论 -
每日一道算法题(10)--目标和
题目给你一个整数数组 nums 和一个整数 target 。向数组中的每个整数前添加'+' 或 '-' ,然后串联起所有整数,可以构造一个 表达式 :例如,nums = [2, 1] ,可以在 2 之前添加 '+' ,在 1 之前添加 '-' ,然后串联起来得到表达式 "+2-1" 。返回可以通过上述方法构造的、运算结果等于 target 的不同 表达式 的数目。示例 1:输入:nums = [1,1,1,1,1], target = 3输出:5解释:一共有 5 种方法让最终.原创 2021-08-26 13:01:21 · 606 阅读 · 1 评论 -
每日一道算法题(9)--打家劫舍III
题目LeetCode :337思路分析思路基本上就与打家劫舍差不多,要注意的是因为是二叉树的形式,所以每次可以同时打劫两个房间(左和右),选择上还是分为打劫当前房间或不打劫当前房间,最终求出最大值。代码展示class Solution { Map<TreeNode, Integer> map = new HashMap<>(); public int rob(TreeNode root) { if(root == null)原创 2021-08-19 18:55:15 · 99 阅读 · 0 评论