240 发简信
IP属地:山东
  • 魔都啊,我也要准备离开了。
    工作努力,待人真诚,孑然一身,落寞立场,为何这样?

    别了魔都

    还记得那年怀揣着老父亲从亲戚手里借来的两百路费把我送上了上海的列车,那是我第一次离开学校去那么远的地方,翻开从亲戚那边抄来的那个陌生地址,一个人站了24小时,终于到达了我后来...

  • 120
    正确、安全地停止SpringBoot应用服务

    引言 Spring Boot,作为Spring框架对“约定优先于配置(Convention Over Configuration)”理念的最佳实践的产物,它能帮助我们很快捷的...

  • SpringBoot 统一异常处理

    一、什么是异常处理 异常(exception) 是程序运行过程中发生的事件, 该事件可以中断程序指令的正常执行流程.1当Java程序运行时出现问题时,系统会自动检测到该错误,...

  • 120
    Swagger UI初识

    新项目使用Swagger UI自动生成接口文档,不需要频繁更新接口文档,保证接口文档与代码的一致,值得学习。本文记录swaggerUi与springboot整合的步骤。 依赖...

  • oracle可重复执行脚本

    之前的一次项目上线,使用CTAS的方式进行扩表,涉及到表的删除。由于自动化部署工具的问题,数据库脚本执行了两次。导致数据库表被删除(万幸有备份)。抛开自动化部署工具的问题,这...

  • 120
    volatile实现

    volatile关键字有两方面的作用,一是保证共享变量可见性,二是禁止指令重排。 一、内存可见性 站在一个java程序员的角度,内存可见性应该从两个方面去理解,多核CPU的缓...

  • 写的很好。
    解答下你的疑问:以map中某个位置的链表中的key1、key2为例,在扩容后key1、key2的hash与newcap-1的按位取与就可能不一样了,也就是这两个不见得会碰撞了,所以需要对其分成不同的链表中,而结果只有两个要吗是原来的位置要吗是原来位置+oldcap,而最简单的判别方法就是与oldcap按位取与计算是否为零,为零位置不变,不为零的会移动位置。

  • Oracle千万级数据更新

    需求 有t1,t2两张表,通过A字段关联,现在需要在t1表新增字段B,将t2表中的字段C更新到t1表新增的字段B中。t1表数据一千二百万,t2表数据七百万。 常规方法 直接使...

  • 120
    一文解决内存屏障

    内存屏障是硬件之上、操作系统或JVM之下,对并发作出的最后一层支持。再向下是是硬件提供的支持;向上是操作系统或JVM对内存屏障作出的各种封装。内存屏障是一种标准,各厂商可能采...

  • volatile浅析

    volatile可以理解为轻量级的synchronized,因为多线程并发访问volatile变量时,不会引起线程上下文的切换。如果一个共享变量(类的成员变量、类的静态成员变...

  • 120
    Java偏向锁状态转移原理

    为什么需要偏向锁 当多个处理器同时处理的时候,通常需要处理互斥的问题。 一般的解决方式都会包含acquire和release这个两种操作,操作保证,一个线程在acquire执...

  • 你真的懂wait、notify和notifyAll吗

    生产者消费者模型是我们学习多线程知识的一个经典案例,一个典型的生产者消费者模型如下: 这段代码很容易引申出来两个问题:一个是wait()方法外面为什么是while循环而不是i...

  • 120
    浅谈偏向锁、轻量级锁、重量级锁

    为了换取性能,JVM在内置锁上做了非常多的优化,膨胀式的锁分配策略就是其一。理解偏向锁、轻量级锁、重量级锁的要解决的基本问题,几种锁的分配和膨胀过程,有助于编写并优化基于锁的...

  • 120
    Reactor模式理解(二)

    Java I/O模型 同步 vs. 异步 同步I/O每个请求必须逐个地被处理,一个请求的处理会导致整个流程的暂时等待,这些事件无法并发地执行。用户线程发起I/O请求后需要等待...