- 博客(13)
- 收藏
- 关注
原创 深入剖析Java线程池
调用start()方法:会启动新线程并调用run()方法。直接调用run()方法:会在当前线程中执行,而不会启动新线程。因此,正确的使用方式是调用start()方法来启动线程,确保run()方法在新线程中执行。
2024-10-20 13:38:07
1202
原创 理解Java并发编程之AQS
AQS(全称AbstractQueuedSynchronizer)即队列同步器。它是构建锁或者其他同步组件的基础框 架(如ReentrantLock、ReentrantReadWriteLock、Semaphore等)。它是一个抽象类,运用了模板方法模式,构建锁或同步组件,只需要重写它的一些protect方法。
2024-10-20 13:36:44
765
原创 dynamic-datasource源码分析
当多个数据源时要保证sql能到对应的数据库上,要求我们做到每一个不同数据源的sql都要拿到对应的数据源并获取相应数据库连接。只要你拿着数据源名称来,我根据名称提供给你数据源就好了,所以我们可以在路由类里维护一个Map集合,key为数据源名称,value为数据源。:通过自定义注解加切面,就可以拿到每个sql操作方法的所需数据源的名称,然后再去多数据源集合里取出对应的数据源。当从数据源拿数据库连接,就是调用DataSource接口的getConnection方法,dd实现了此方法。多数据源集合源码分析。
2024-09-23 10:27:58
745
1
原创 day04-链表part2
想法:虚拟节点,链表的增删改都可以用到虚拟节点,2个节点相互交换,需要借助前面一个节点来操作,找到遍历条件,通过画图确定交换逻辑。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
2024-05-30 20:59:18
337
原创 day03-链表part1
想法:添加节点是在给定下标节点的前面插入,所以要用到下标节点的前一个节点指针,删除给定下标节点也要用到前一个节点指针,所以可以用虚拟头节点。示例 1: 输入:head = [1,2,6,3,4,5,6], val = 6 输出:[1,2,3,4,5]想法:虚拟头节点,遍历链表时,先拿出一个变量来存遍历起始指针,然后用这个变量进行遍历,注意找好遍历条件。示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL。题意:删除链表中等于给定值 val 的所有节点。
2024-05-27 10:26:03
289
原创 数组-双指针&滑动窗口
给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的 连续 子数组,并返回其长度。想法:拿个新数组装平方后的值,因为平方后的最大值在数组两边,每次比较两边的平方值,大的放新数组里。拿2个指针从两边往中间走,谁的平方值大,谁就走一格。给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。想法:滑动窗口也是双指针的一种特定形式,连续子数组,联想到滑动窗口,窗口起始和终止指针的移动是关键。
2024-05-24 15:45:00
385
1
原创 day01-链表704&27
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。leetcode704-二分查找。
2024-05-22 19:46:49
324
1
原创 tcp&ip网络编程笔记
socket()函数中第二个参数是指定数据传输方式,根据数据传输方式的不同,基于网络协议的套接字一般分为TCP套接字和UDP套接字 因为 TCP套接字是面向连接的,因此又称基于流 (stream )的套接字 TCP Transmission Control Protocol (传输控制协议)的简写,意为"对数据传输过程的控制" .计算机之间网络数据的传输除了需要硬件部分,软件部分则是由OS提供的套接字(socket,直译为插座,网络连接,就像插口和插座一样,一方插,一方被插)部件实现的。
2024-04-01 18:35:57
824
1
原创 mybatis中mapper实现及事务实现原理
jdk动态代理实现,mapper是操作数据库的代理对象,是从SqlSession中获取,SqlSession是暴露给我们的操作数据库的API库Configuration是全局配置类,在mybatis启动时,会把所有配置信息加载进这个类中,其中也包括mapper接口的代理对象。在mybatis启动时,会扫描mapper接口并通过一个映射注册器类(MapperRegistry)注册mapper接口的代理对象工厂到一个这个类的属性map中。
2024-02-25 16:30:29
1421
原创 mybatis二级缓存执行流程
在mybatis启动时会加载并解析配置文件,其中就会解析二级缓存的可选项配置,由此是否生成二级缓存,下面这段代码就是解析xxxMapper.xml文件中的子标签来生成二级缓存默认的二级缓存对象是PerpetuateCache,并把缓存封装进MapperStatement,所以一个MapperStatement对应一个二级缓存,一个MapperStatement就是存储一个xxxMapper.xml文件中的信息PerpetualCache内部的缓存其实就是个HashMap。
2024-02-25 11:41:23
296
原创 MyBatis学习笔记
执行sqlsession:参数有两个(statementId和参数对象)根据statementId,去Configuration中的MappedStatement集合中查找 对应的MappedStatement对象;取出MappedStatement中的SQL信息;取出MappedStatement中的statementType,用来创建Statement对象;
2024-01-10 21:20:45
1740
原创 Netty学习笔记
Netty提供非阻塞的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。核心架构:可扩展的事件模型统一的通信api,简化了通信编码零拷贝机制与丰富的字节缓冲区传输服务:支持socket以及datagram(数据报)http传输服务In-VM Pipe (管道协议,是jvm的一种进程)http 以及 websocketSSL 安全套接字协议支持Google Protobuf (序列化框架)支持zlib、gzip压缩支持大文件的传输。
2023-11-25 17:59:43
1029
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人