夜光下丶
码龄5年
求更新 关注
提问 私信
  • 博客:242,654
    社区:1
    242,655
    总访问量
  • 84
    原创
  • 238
    粉丝
  • 17
    关注
IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:广东省
加入CSDN时间: 2019-12-20

个人简介:新人初学,请多指教!

博客简介:

weixin_46058921的博客

查看详细资料
个人成就
  • 获得463次点赞
  • 内容获得16次评论
  • 获得1,120次收藏
  • 代码片获得1,879次分享
  • 原力等级
    原力等级
    5
    原力分
    1,162
    本月获得
    2
创作历程
  • 18篇
    2024年
  • 22篇
    2023年
  • 24篇
    2022年
  • 20篇
    2021年
成就勋章
TA的专栏
  • Java
    42篇
  • 多线程
    8篇
  • MySQL
    14篇
  • 深入Spring
    5篇
  • Spring
    15篇
  • mybatis
    11篇
  • 工具类
    5篇
  • Git
    1篇
  • JavaScript
    1篇
  • JVM
    1篇
  • 设计模式
    3篇

TA关注的专栏 1

TA关注的收藏夹 0

TA关注的社区 1

TA参与的活动 1

  • 最近
  • 文章
  • 专栏
  • 代码仓
  • 资源
  • 收藏
  • 关注/订阅/互动
更多
  • 最近

  • 文章

  • 专栏

  • 代码仓

  • 资源

  • 收藏

  • 关注/订阅/互动

  • 社区

  • 帖子

  • 问答

  • 课程

  • 视频

搜索 取消

Redis

如果我们需要记录某一用户在一年中每天是否有登录我们的系统这一需求该如何完成呢?如果使用KV存储,每个用户需要记录365个,当用户量上亿时,这所需要的存储空间是惊人的Redis 为我们提供了位图这一数据结构,每个用户每天的登录记录只占据一位,365天就是365位,仅仅需要46字节就可存储,极大地节约了存储空间位图数据结构其实并不是一个全新的玩意,我们可以简单的认为就是个数组,只是里面的内容只能为0或1而已(二进制位数组)
原创
发布博客 2024.11.04 ·
1114 阅读 ·
16 点赞 ·
0 评论 ·
11 收藏

Spring源码分析之 Autowired注解

在容器启动,为对象赋值的时候,遇到@Autowired注解,会用后置处理器 AutowiredAnnotationBeanPostProcessor,来创建属性的实例,然后再利用反射机制,将实例化好的属性,赋值给对象上。
原创
发布博客 2024.10.30 ·
1113 阅读 ·
29 点赞 ·
0 评论 ·
12 收藏

Spring Bean创建流程

这些自定义的对象销毁逻辑,在对象实例初始化完成,并注册了相关的回调接口后,并不会马上执行。函数会先获取所有需要构建的Bean名称,通过bean的RootBeanDefinition判断该bean是否为可构建的类型,很明显可构建的Bean不能是抽象类,不能是接口,也不能是懒加载的bean。大家总是会错误的理解Bean的“实例化”和“初始化”过程,总会以为初始化就是对象执行构造函数生成对象实例的过程,其实不然,在初始化阶段实际对象已经实例化出来了,初始化阶段进行的是依赖的注入和执行一些用户自定义的初始化逻辑。
原创
发布博客 2024.10.29 ·
802 阅读 ·
16 点赞 ·
1 评论 ·
24 收藏

Spring beanFactoryPostProcessor

基本上parser内部解析的重点方法都分析完了,总结一下,parser都干了什么?parser作为一个解析器,根据传入的配置类解析出多个对象配置类实际上是一个树形结构,他的子节点包含@ComponentScan扫描到的配置类,@Import引入的普通类等而spring中这个树结构的根节点一般就是用户定义的主启动类parser通过递归解析完成整个树的解析(解析成多个ConfigurationClass对象),并把解析结果存入parser内部属性。
原创
发布博客 2024.10.28 ·
781 阅读 ·
22 点赞 ·
0 评论 ·
30 收藏

Spring 启动流程分析

Bean: Spring作为一个IoC容器,最重要的当然是Bean咯BeanFactory: 生产与管理Bean的工厂BeanDefinition: Bean的定义,也就是我们方案中的Class,Spring对它进行了封装BeanDefinitionRegistry: 类似于Bean与BeanFactory的关系,BeanDefinitionRegistry用于管理BeanDefinitionBeanDefinitionRegistryPostProcessor: 用于在解析配置类时的处理器,类似于我们方案
原创
发布博客 2024.10.28 ·
1144 阅读 ·
15 点赞 ·
0 评论 ·
25 收藏

动态代理实现原理

动态代理工作的基本模式就是将自己的方法功能的实现交给 InvocationHandler角色,外界对Proxy角色中的每一个方法的调用,Proxy角色都会交给InvocationHandler来处理,而InvocationHandler则调用具体对象角色的方法。在触发(invoke)真实角色的方法之前或者之后做一些额外的业务。那么,为了构造出具有通用性和简单性的代理类,可以将所有的触发真实角色动作交给一个触发的管理器,让这个管理器统一地管理触发。问题:调用目标是写死的,如果被代理类中有多个方法。
原创
发布博客 2024.10.24 ·
286 阅读 ·
3 点赞 ·
0 评论 ·
5 收藏

MySQL 索引

官方定义: 一种帮助MySQL提高查询效率的数据结构一般来说索引本身也很大,不可能全部存储在内存中,因此索引往往是存储在磁盘上的文件中的(可能存储在单独的索引文件中,也可能和数据一起存储在数据文件中)我们通常所说的索引,包括聚集索引、覆盖索引、组合索引、前缀索引、唯一索引等,没有特别说明,默认都是使用B+树结构组织(多路搜索树,并不一定是二叉的)的索引存储引擎层实现的,而不是在服务器层实现的,所以不同存储引擎具有不同的索引类型和实现。
原创
发布博客 2024.10.23 ·
1304 阅读 ·
21 点赞 ·
0 评论 ·
24 收藏

InnoDB引擎

当我们在一个事务中,执行多个增删改的操作时,InnoDB引擎会先操作缓冲池中的数据,如果缓冲区没有对应的数据,会通过后台线程将磁盘中的数据加载出来,存放在缓冲区中,然后将缓冲池中的数据修改,修改后的数据页我们称为脏页。重做日志,是用来实现事务的持久性。这时问题来了,假设在某一次从内存刷新到磁盘的过程中,一个「页」刷了一半,突然操作系统或者 MySQL 进程奔溃了,这时候,内存里的页数据被清除了,而磁盘里的页数据,刷了一半,处于一个中间状态,不尴不尬,可以说是一个「不完整」,甚至是「坏掉的」的页。
原创
发布博客 2024.10.23 ·
679 阅读 ·
7 点赞 ·
0 评论 ·
28 收藏

MySQL 存储结构

多个页可以不在物理结构上相连,只通过双向链表相关联即可。每个数据页中的记录会按照主键值从小到大的顺序组成一个单向链表,每个数据页都会为存储在它里边的记录生成一个页目录。通过主键查找某条记录时可以在页目录中使用二分法快速定位到对应的槽,然后再遍历该槽对应分组中的记录即可。
原创
发布博客 2024.10.23 ·
1331 阅读 ·
17 点赞 ·
0 评论 ·
13 收藏

AQS原理分析

AQS 通过提供 state 及 FIFO 队列的管理,为我们提供了一套通用的实现锁的底层方法,基本上定义一个锁,都是转为在其内部定义 AQS 的子类,调用 AQS 的底层方法来实现的,由于 AQS 在底层已经为了定义好了这些获取 state 及 FIFO 队列的管理工作,我们要实现一个锁就比较简单了,我们可以基于 AQS 来实现一个非可重入的互斥锁,如下所示@Override@Override@Override。
原创
发布博客 2024.10.19 ·
763 阅读 ·
11 点赞 ·
0 评论 ·
23 收藏

Unsafe

Unsafe是位于sun.misc包下的一个类,主要提供一些用于执行低级别、不安全操作的方法,如直接访问系统内存资源、自主管理内存资源等,这些方法在提升 Java 运行效率、增强 Java 语言底层资源操作能力方面起到了很大的作用。但由于Unsafe类使 Java 语言拥有了类似 C 语言指针一样操作内存空间的能力,这无疑也增加了程序发生相关指针问题的风险。在程序中过度、不正确使用Unsafe类会使得程序出错的概率变大,使得 Java 这种安全的语言变得不再“安全”,因此对Unsafe的使用一定要慎重。
原创
发布博客 2024.10.19 ·
1119 阅读 ·
24 点赞 ·
0 评论 ·
26 收藏

计算机网络 - IP

如上图中的蓝色部分。IGMP 报文向路由器申请加入和退出组播组,默认情况下路由器是不会转发组播包到连接中的主机,除非主机通过 IGMP 加入到组播组,主机申请加入到组播组时,路由器就会记录 IGMP 路由器表,路由器后续就会转发该组播地址的数据包了。IGMP 报文采用 IP 封装,IP 头部的协议号为 2,而且 TTL 字段值通常 为 1,因为 IGMP 是工作在主机与连接的路由器之间。
原创
发布博客 2024.10.18 ·
713 阅读 ·
9 点赞 ·
0 评论 ·
17 收藏

进程、线程和缓存一致性原理

当 A 号 CPU 核心要修改 Cache 中 i 变量的值,发现数据对应的 Cache Line 的状态是共享状态,则要向所有的其他 CPU 核心广播一个请求,要求先把其他核心的 Cache 中对应的 Cache Line 标记为「无效」状态,然后 A 号 CPU 核心才更新 Cache 里面的数据,同时标记 Cache Line 为「已修改」状态,此时 Cache 中的数据就与内存不一致了。而「已失效」状态,表示的是这个 Cache Block 里的数据已经失效了,不可以读取该状态的数据。
原创
发布博客 2024.10.18 ·
760 阅读 ·
17 点赞 ·
0 评论 ·
24 收藏

CAS介绍

CAS(Compare And Swap 比较并且替换)是乐观锁的一种实现方式,是一种轻量级锁,JUC 中很多工具类的实现就是基于 CAS 的。
原创
发布博客 2024.10.18 ·
992 阅读 ·
27 点赞 ·
0 评论 ·
17 收藏

Java Memory Model

特性volatile关键字synchronized关键字Lock接口Atomic变量原子性无法保障可以保障可以保障可以保障可见性可以保障可以保障可以保障可以保障有序性一定程度可以保障可以保障无法保障。
原创
发布博客 2024.10.18 ·
1070 阅读 ·
15 点赞 ·
0 评论 ·
25 收藏

ThreadLocal

ThreadLocal 类用来提供线程内部的局部变量,这种变量在多线程环境下访问(通过 get 和 set 方法访问)时能保证各个线程的变量相对独立于其他线程内的变量,分配在堆内的TLAB中ThreadLocal 实例通常来说都是类型的,属于一个线程的本地变量,用于关联线程和线程上下文。每个线程都会在 ThreadLocal 中保存一份该线程独有的数据,所以是线程安全的。
原创
发布博客 2024.10.18 ·
819 阅读 ·
12 点赞 ·
0 评论 ·
25 收藏

CLH介绍

在并发编程中,锁是一种常用的保证线程安全的方法。Java 中常用的锁主要有两类,一种是 Synchronized 修饰的锁,被称为 Java 内置锁或监视器锁。另一种就是在 J2SE 1.5版本之后的 java.util.concurrent包(下称JUC包)中的各类同步器,包括 ReentrantLock(可重入锁),ReentrantReadWriteLock(可重入读写锁),Semaphore(信号量),CountDownLatch 等。
原创
发布博客 2024.10.18 ·
892 阅读 ·
16 点赞 ·
0 评论 ·
8 收藏

LockSupport

LockSupport.park()休眠线程,LockSupport.unpark()唤醒线程,两个方法配合使用。也可以通过LockSupport.parkNanos()指定休眠时间后,自动唤醒。LockSupport.park()不会释放monitor锁。线程被打断,LockSupport.park()不会抛出异常,也不会吞噬掉interrupt的状态,调用者可以获取interrupt状态,自行进行判断,线程是由于什么原因被唤醒了。
原创
发布博客 2024.10.18 ·
1061 阅读 ·
15 点赞 ·
0 评论 ·
12 收藏

动态规划(Dynamic Programming)

是运筹学的一种最优化方法,只不过在计算机问题上应用比较多。
原创
发布博客 2023.12.17 ·
231 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

SpringBoot 集成 Kafka 配置

*** 自定义分区器*/@Override@Override@Override/***/@Component@Overrideif (value.toString().contains("二")){return 2;}else if (value.toString().contains("一")){return 1;
原创
发布博客 2023.07.09 ·
3686 阅读 ·
0 点赞 ·
0 评论 ·
5 收藏
加载更多