自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Linn的博客

无需多言,加倍努力

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

原创 Mybatis批处理踩坑,纠正网上的一些错误写法

这篇文章会一步一步带你从一个新手的角度慢慢揭开批处理的神秘面纱,对于初次写Mybatis批处理的同学可能会有很大的帮助,建议收藏点赞~

2022-03-24 16:04:15 1967 2

原创 Mybatis调试经常需要输出SQL语句,但你知道是怎么输出的嘛?

本文通过从实战如何输出Mybatis的SQL日志,讲述了Mybatis的日志机制是如何使用适配器模式,将各个第三方日志框架接口转换为框架内部自定义的日志接口。看完本文你就知道其中的奥秘了~

2021-12-08 16:02:52 10845 2

原创 理解进程和线程并分析JVM线程是哪种线程

本文通过从操作系统的角度,从浅入深的学习了进程和线程让基础薄弱的读者也能读懂,并将所学应用到实际,看完本文后你是否知道了日常开发中天天打交道的JVM中的线程是什么内核态线程还是用户态线程?

2021-12-08 15:56:06 995 1

原创 怎么使用Netty解码自定义通信协议

这篇文章讲述了网络协议的基本要素以及如何使用Netty框架实现自定义通信协议。Netty提供了丰富的编解码抽象基类,通过继承抽象编码类和实现相应的方法,可以方便地扩展实现自定义协议。

2023-07-16 14:57:55 403

原创 详解SpringBoot外部化配置

Profile 本质上代表一种用于组织配置信息的维度,在不同场景下可以代表不同的含义。例如,如果 Profile 代表的是一种状态,我们可以使用 open、halfopen、close 等值来分别代表全开、半开和关闭等。再比如系统需要设置一系列的模板,每个模板中保存着一系列配置项。

2023-05-05 14:21:59 1602

原创 服务调用/通信-OpenFeign最佳实践

Spring Cloud OpenFeign 它是 Spring 官方推出的一种声明式服务调用与负载均衡组件。它底层基于 Netflix Feign,Netflix Feign 是 Netflix 设计的开源的声明式 WebService 客户端,用于简化服务间通信。Spring Cloud openfeign 对 Feign 进行了增强,使其支持 Spring MVC 注解,另外还整合了 Ribbon 和 Nacos,从而使得 Feign 的使用更加方便。

2023-03-21 09:42:14 896

原创 结合对称加密、非对称加密浅析HTTPS协议

一般而言,我们不会直接对数据本身直接计算数字签名,为什么呢?因为数字签名属于非对称加密,非对称加密依赖于复杂的数学运算,包括大数乘法、大数模等等,耗时比较久。所以一般做法是先将原数据进行 Hash 运算,得到的 Hash 值就叫做「摘要」。摘要是对原文的证明,防止原文被篡改,从原文到摘要是一个不可逆的过程,也就是无法从摘要反推出原文,同时达到保密的作用。极少概率碰撞:不同的内容极大概率(绝大多数接近 100%)会生成不同的摘要。

2022-11-10 11:45:35 1358

原创 Mybatis为什么查询结果为空时返回值为NULL或空集合?

你是否在学习Mybatis的时候跟我有一样的疑问,什么情况下返回null,什么时候是空集合?本文简单概述了Mybatis的简单映射流程,并通过对查询结果为空时的返回值进行思考补充。

2022-06-16 11:40:48 3788 1

原创 Spring大事务/长事务导致connection closed

这篇文章从真实的案例结合Spring框架、Mybatis框架、druid连接池去分析问题的所在,讲解了大事务的弊端,以及事务中是什么时候获取的数据库连接,为什么连接会被突然关闭,建议收藏点赞~

2022-04-24 16:35:43 1310 1

原创 一文带你聊聊MYSQL的锁和MVCC

本文通过LBCC(单版本控制-锁)的概念切入,分析了全局锁、表锁、行锁、页锁、死锁、两阶段锁等概念,还分析了MVCC(多版本并发控制),比较了两者的区别以及适用场景。

2021-10-07 15:31:53 1210 1

原创 聊聊Java中常见的锁概念(建议收藏)

????哈喽,好久不见,这次给大家带来的也是实实在在的干货哦,面试必备啊 另外,如果你觉得内容对你有帮助的话,不如给个赞,鼓励一下更新????。锁分类根据分类标准我们把锁分为以下 7 大类别,分别是:偏向锁/轻量级锁/重量级锁;可重入锁/非可重入锁;共享锁/独占锁;公平锁/非公平锁;悲观锁/乐观锁;自旋锁/非自旋锁;可中断锁/不可中断锁。对于 Java 中的锁而言,一把锁也有可能同时占有多个标准,符合多种分类,比如 ReentrantLock 既是可中断锁,又是可重入锁。偏向锁

2021-08-26 11:20:48 1472 1

原创 深入理解Spring的依赖查找和依赖注入【建议收藏】

如果你觉得内容对你有帮助的话,不如给个赞,鼓励一下更新????。本文内容来自《小马哥讲Spring核心编程思想》,看完之后总结的笔记,适合闲暇时候看看依赖注入的模式和类型依赖注入的模式手动模式 - 配置或者编程的方式,提前安排注入规则XML 资源配置元信息Java 注解配置元信息,比如@Autowired、@ResourceAPI 配置元信息自动模式 - 实现方提供依赖自动关联的方式,按照內建的注入规则Autowiring(自动绑定)依赖注入的类型依赖注入类型配

2021-06-26 19:43:58 934 3

原创 ScheduledThreadPoolExecutor周期定时任务异常处理踩坑的问题!!

问题原因在公司写项目的时候,有一个周期定时任务的需求,就想着阿里巴巴开发手册里不是说不能用Executors去创建线程池,因为存在如下问题:FixedThreadPool和SingleThreadPool:允许的请求队列长度为 Integer.MAX_VALUE,可能会堆积大量的请求,从而导致 OOM。CachedThreadPool:允许的创建线程数量为 Integer.MAX_VALUE,可能会创建大量的线程,从而导致 OOM。然后就没用Executors.newScheduledThrea

2021-04-10 14:56:52 3808 3

原创 谈谈Mybatis的SqlSession和一级缓存为什么失效?

如果你觉得内容对你有帮助的话,不如给个赞,鼓励一下更新????。本文如有改动,最新版本请移步:谈谈Mybatis的SqlSession和一级缓存为什么失效?SqlSession解读SqlSession是什么?SqlSession是Mybatis 中定义的,用来表示与关系数据库的一次会话,会话定义了各种具体的操作,查询、数据更新(包含保存、更新、删除)操作。而这些操作都在与数据库建立会话的基础上进行的。SqlSession 可以看作是对Connection 更加高级的抽象,从其方法上更加可以看出

2021-02-23 16:07:14 1056 1

原创 Linux常用命令操作【入门级】

## 绝对路径目标文件的绝对路径(Absolute path),也叫作完全路径(full path),是从/开始,接下来每一层都是一级子目录,直到定位到目标文件为止。## 文件种类Linux目录下的七种文件:普通文件、目录文件、可执行文件、管道文件、Socket文件、软链接文件、硬链接文件。文件权限中的第一个字符代表的是文件类型- 普通文件的第一个字符为“-”- 目录文件的第一个字符为“d”- 字符设备文件的第一个字符为“c”- 块设备文件的第一个字符为“b”-

2021-02-21 10:45:26 2352 7

原创 2021最实用的IDEA自定义方法注释和类注释模板

2021最实用的IDEA自定义方法注释和类注释模板,闲话少说,直接上干货自定义方法注释和类注释<font color=red>注意:</font >上图中的第四处,Shorten FQ names可以不勾选,它的作用主要就是缩短返回值类型的全类名,比如java.lang.String会变成String,但是如果是泛型的话会出现一点点小问题。Groovy脚本自定义参数注释找了网上很多博客都没有找到满意的,所以干脆自己写了一段Groovy代码,自给自足,哈哈。expression文本如下

2021-01-03 17:20:39 1087 3

原创 操作系统-进程和线程的学习总结

操作系统的设计,可以归结为三点:- 以多进程形式,允许多个任务同时运行;- 以多线程形式,允许单个任务分成不同的部分运行;- 提供协调机制,一方面防止进程之间和线程之间产生冲突,另一方面允许进程之间和线程之间共享资源。进程和线程的区别:进程是程序在执行过程中分配和管理资源的基本单位,线程是CPU调度和分派的基本单位进程和线程上下文切换区别Java中创建的线程是用户级还是内核级用户态线程和内核态线程进程间的通信方式线程间的通信方式创建进程的开销比线程大在了哪里?

2020-12-18 10:11:22 1037 1

原创 源码解读 | Mybatis和Spring是怎么整合的

前言注意:阅读本文需要有一定的Spring和SpringBoot基础先上一个Mybatis-Spring官网链接,打开一个SSM整合的案例项目一起食用本文,效果更佳哦。官网上说的很清楚,要和 Spring 一起使用 MyBatis,需要在 Spring 应用上下文中定义至少两样东西:一个SqlSessionFactory 和至少一个数据映射器类。在 MyBatis-Spring 中,使用 SqlSessionFactoryBean来创建 SqlSessionFactory。<bean i

2020-11-19 10:43:28 210 4

原创 浅析Mybatis和连接池组件的关系

什么是连接池对于一个简单的数据库应用,由于对于数据库的访问不是很频繁。这时可以简单地在需要访问数据库时,就新创建一个连接,用完后就关闭它,这样做也不会带来什么明显的性能上的开销。但是对于一个复杂的数据库应用,情况就完全不同了。频繁的建立、关闭连接,会极大的减低系统的性能,因为对于连接的使用成了系统性能的瓶颈。**连接复用:** 通过建立一个数据库连接池以及一套连接使用管理策略,使得一个数据库连接可以得到高效、安全的复用,避免了数据库连接频繁建立、关闭的开销。对于共享资源,有一个很著名的设计模式:**

2020-11-02 10:39:33 1344 1

原创 Java实习生面试复习(十四):Redis基础知识汇总

Redis为什么这么快呢?Redis如何保存这些数据类型?五大基础数据类型bit 位图HyperLogLog布隆过滤器Redis 的多线程部分只是用来处理网络数据的读写和协议解析,执行命令仍然是单线程。RDB快照持久化、AOF增量持久化内存淘汰机制

2020-10-23 10:33:51 381 6

原创 Git入门和常用命令详解

1. 拉取远程仓库到本地: `git clone` 地址 [重命名]1. 查看提交历史: `git log` 1. 查看工作目录当前状态: `git status` 1. 暂存文件/开始追踪文件: `git add` 文件路径 1. add 后加个“.”,全部暂存 1. add 添加的是文件改动,而不是文件名5. 提交文件到本地仓库: `git commit` 5. 本地提交发布到中央仓库: `git push` 5. 保存密码: `git config credential.h

2020-09-26 11:21:44 160

原创 Java实习生面试复习(十三):Java对象的创建、内存布局、访问

对象的创建- 检查类的加载 - 虚拟机遇到 `new` 指令时,会先检查在常量池中能不能定位到一个类的符号引用,检查是否已经被加载,解析和初始化过。- 分配内存 - 指针碰撞 - 空闲列表- 初始化零值 - 内存分配完毕后,虚拟机需要将分配到的内存空间全部初始化为零值- 设置对象头 - 虚拟机要对对象进行必要的设置,比如类的元数据信息,对象的哈希码,对象的GC分代年龄等信息> 在上面工作完成之后,从虚拟机的视角来看,一个新的对象已经产生,但从程序角度来看,对象创建才开

2020-09-08 15:59:48 172

原创 微信公众平台开发,自定义菜单和消息处理及其工具类封装

微信公众平台开发,自定义菜单和消息处理及其工具类封装今天是一篇实在的实战文章哦,最近做了一个公众号平台开发,里面碰到了**自定义菜单开发、自动回复消息处理**,水平有限,自己动了动小脑子做了一些简单封装,然后记录一下????## 消息处理如果你正在看[微信开放文档]那么你应该知道微信发送的消息有多种类型,那么我们对多种类型做封装呢,并且省去那些繁杂的if

2020-08-23 12:58:10 517

原创 Java实习生面试复习(十二):JVM内存结构/运行时数据区

## 2020/10/14 更新部分内容> 如果你觉得内容对你有帮助的话,不如给个赞,鼓励一下更新????。加油啊!新的一天,新的开始????## JVM运行时数据区> 从某一角度来说,Java 虚拟机的内存结构 == 运行时数据区,在《Java 虚拟机规范》中用的是【运行时数据区】术语的,并没有内存结构这么一说法。内存结构只是听着更加贴切,更加形象。> JVM(Java Virtual Machine,Java 虚拟机)顾名思义就是用来执行 Java 程序的“虚拟主机”,实际的工作是将

2020-07-11 20:46:51 380 1

原创 Spring+SpringMVC+Mybatis知识点复习【SSM框架复习笔记】

Spring+SpringMVC+Mybatis复习【SSM框架复习笔记】Spring核心特性SpringMVC特性Mybatis复习

2020-06-14 22:03:45 1179

原创 idea配置Jrebel,学会项目热部署

idea配置Jrebel,学会项目热部署Jrebel 安装

2020-06-14 21:58:25 461

原创 Java实习生面试复习(十一):什么是CAS?

说到CAS,我们就得提起通常所说的并发包也就是 java.util.concurrent(JUC)及其子包,它集中了 Java 并发的各种基础工具类,具体主要包括几个方面:* 提供了比 synchronized 更加高级的各种同步结构 CountDownLatch、Semaphore 等,可以实现更加丰富的多线程操作,比如 Semaphore 作为资源控制器,可以限制同时进行工作的线程数量。* 各种线程安全的容器,比如面试常问到的 ConcurrentHashMap或者通过类似快照机制,实现线程安全的动

2020-06-08 14:42:34 293

原创 Linux的I/O 模式之多路复用

IO多路复用和Reactor线程模型IO和NIO的区别复用的概念多路复用IO概念理解IO复用I/O的含义同步与异步阻塞与非阻塞NIO的同步与非阻塞Reactor的三种实现Redis的多路复用同步与异步,关心的是消息通信的机制。也就是调用者和被调用者之间,消息是如何进行通知的。如果是调用者主动等待调用的结果,那么就是同步。如果是被调用者主动去通知调用者,就是异步。<br />从上面的描述中,我们可以看到。同步还是异步,主要是看的消息通知的方式,一个是调用者主动等待,一个是调用者被通知。

2020-06-01 10:20:08 1817

原创 Java实习生面试复习(十):线程池ThreadPoolExecutor学习

程池是什么,好处是啥?线程池是为了避免线程频繁的创建和销毁带来的性能消耗,而建立的一种池化技术,它是把已创建的线程放入“池”中,当有任务来临时就可以重用已有的线程,无需等待创建的过程,这样就可以有效提高程序的响应速度。通过线程池复用线程有以下几点优点:* 减少资源创建 => 减少内存开销,创建线程占用内存* 降低系统开销 => 创建线程需要时间,会延迟处理的请求* 提高稳定稳定性 => 避免无限创建线程引起的OutOfMemoryError【简称OOM】**在阿里巴巴的《Java 开发手册》中

2020-05-07 11:35:18 326

原创 Java实习生面试复习(九):聊聊动态代理

> 代理是一种常用的设计模式,其目的就是为其他对象提供一个代理以控制对某个对象的访问。主要有静态代理和动态代理,静态代理这里就不赘述了。> 动态代理是程序在运行期间动态构建代理对象和动态调用代理方法的一种机制。**如何实现动态代理?JDK Proxy 和 CGLib 有什么区别?**但动态代理不止有反射一种实现方式,例如,动态代理很出名的CGLib,CGLib就是基于ASM(一个Java字节码操作框架)而非反射实现的。简单来说,动态代理是一种行为方式,而**反射或ASM只是它的一种实现手段**而已。

2020-05-01 20:32:10 843 4

原创 Java实习生面试复习(八):volatile的学习

volatile也是多线程这块经常问到的基础问题,以volatile关键字作为一个小的切入点,往往可以一问到底,把Java内存模型(JMM),Java并发编程的一些特性都牵扯出来,我们这篇文章就来学习一下volitile关键字吧!多线程之volatile说起volatile,肯定少不了Java内存模型,**Java内存模型(Java Memory Model,JMM)是Java虚拟机规范定义的,用来屏蔽掉java程序在各种不同的硬件和操作系统对内存的访问的差异,这样就可以实现Java程序在各种不

2020-04-03 14:26:29 1528

原创 Java实习生面试复习(七):synchronized和ReentrantLock的学习

Synchronized 和 ReentrantLock它们有什么区别?**Synchronized属于独占式悲观锁,是通过JVM 层面实现的。** synchronized 只允许同一时刻只有一个线程操作资源。在Java中每个对象都隐式包含一个monitor (监视器)对象,加锁的过程其实就是竞争monitor的过程,当线程进入字节码monitorenter指令之后,线程将持有monitor对象,执行monitorexit时释放monitor对象,当其他线程没有拿到monitor对象时,则需要阻塞等待

2020-03-28 16:33:16 508 3

原创 Java实习生面试复习(六):MySQL索引

作为一个后端程序员,数据库也是天天打交道的,我们都知道表结构设计只是设计数据库最初环节之一,另外还有最为重要的一个环节—索引设计,只有正确设计索引,业务才能达到上线的初步标准~,看完这篇文章,至少让你对MySQL的索引有一个简单的认识。

2020-03-25 11:14:08 1196

原创 Java实习生面试复习(五):Thread线程学习

线程(Thread)是并发编程的基础,也是程序执行的最小单元,它依托进程而存在。一个进程中可以包含多个线程,多线程可以共享一块内存空间和一组系统资源,因此线程之间的切换更加节省资源、更加轻量化。六种状态分别为:* **NEW**,新建状态,线程被创建出来,**但尚未启动时的线程状态**;* **RUNNABLE**,就绪状态,表示可以运行的线程状态,它可能正在运行,或者是在排队等待操作系统给它分配 CPU 资源; * 比如Thread.start方法就是将线程从NEW状态 转换成 RUNNABLE

2020-03-22 16:53:21 857 1

原创 Java实习生面试复习(四):LinkedList

我是一名很普通的大三学生。我会坚持写博客,输出知识的同时巩固自己的基础,记录自己的成长和锻炼自己,奥利给!!LinkedList 适用于集合元素先入先出和先入后出的场景,在队列中被频繁使用。下面我们就来简单了解一下它,并看看它跟常用的ArrayList的区别。LinkedList结构分析LinkedList 底层数据结构是一个双向链表,整体结构...

2020-03-19 10:34:19 1545

原创 Java实习生面试复习(三):ArrayList

我是一名很普通的大三学生。我会坚持写博客,输出知识的同时巩固自己的基础,记录自己的成长和锻炼自己,奥利给!!ArrayList 我们几乎每天都会使用到,本文就一起来看看同样是面试高频问到的ArrayList和LinkedList的相关知识吧。ArrayList分析底层结构分析其实ArrayList是很简单...

2020-03-17 17:47:18 1299

原创 Java实习生面试复习(二):HashMap

HashMap基本是我们在日常使用中频率特别高的一个数据结构类型了,同时也是面试经常问到的,围绕着HashMap能展开一系列问题,本文不对源码做过深的讨论,因为我觉得实习生应该还不需要了解的那么透彻。

2020-03-15 11:18:49 3842 9

原创 Java实习生面试复习(一):String类型

String 是如何实现的?它有哪些重要的方法?为什么String要用final修饰的,它的好处在哪?String 和 StringBuilder、StringBuffer 的区别String 类型在 JVM(Java 虚拟机)中是如何存储的? == 和 equals 的区别

2020-03-12 16:52:55 736 1

原创 Spring IOC 复习和理解

前面部分知识点为摘抄,后面部分是自己读后的笔记SpringIOC和DIIOC:Inversion Of Control,即控制反转,是一种设计思想。在传统的 Java SE 程序设计中,我们直接在对象内部通过 new 的方式来创建对象,是程序主动创建依赖对象;而在Spring程序设计中,IOC 是有专门的容器去控制对象。所谓控制就是对象的创建、初始化、销毁。创建对象:原来是 new 一个...

2020-02-24 15:23:46 454

原创 Java的JVM和并发学习

### 1.1 JVM内存结构对于JVM内存结构这块,原内容是基于1.7版本的,现在基于1.8版本做了大幅度改动,放到了[Java实习生面试复习(十二):JVM内存结构/运行时数据区](https://blog.csdn.net/qq_39809458/article/details/106742727)中做了一个总结。------### 2.1 垃圾回收器与内存分配策略**概述:**> 程序计数器、虚拟机栈、本地方法栈3个区域随线程生灭(因为是线程私有),栈中的栈帧随着方法的进入和退出而

2020-01-16 14:37:00 571

空空如也

空空如也

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

TA关注的人

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