自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(27)
  • 收藏
  • 关注

原创 声明式事务

Transanctional注解默认只会对RuntimeException、Error进行回滚;

2022-11-14 14:01:31 153

原创 LinkedList源码笔记

增删这些操作基本上就是修改节点中next和pre指针的指向,这也没啥可说的。和arraylist效率差不多,但是linkedlist显然不需要扩容。内部主要就是这三个成员变量 ,本质就是一个双向链表,没啥可说的。没办法,只能顺着索引一个个往下找,所以效率很低。

2022-11-06 09:53:33 112

原创 Java中如何向Integer集合添加String类型数据?

Java中如何向Integer集合添加String类型数据?- bravo1988的回答 - 知乎 https://www.zhihu.com/question/553126951/answer/2672693404。

2022-11-05 08:57:10 186

原创 ArrayList源码学习总结

第三 特别注意,扩容是把原来数组的内容拷贝到一个新数组中去,这个新数组的长度是扩容后的长度;注意,是新建了一个数组,并不是扩大原来数组的长度。第二,新增元素前需要先扩容,扩容机制很简单,如果长度够则使用原来的数组,如果数组长度不够则扩大1.5倍,还不够则直接扩大到所需长度。第一,ArrayList内部实现是Object数组,这算是一个常识了;第四 删除一个元素,如下;可见,源码写的也就这样,并不怎么优雅。第五,增强型for循环会转换成迭代器,或者说是通过迭代器实现的。

2022-10-26 21:41:53 138

原创 Spring 异步任务简明教程

线程池就不多解释了,这里用的是Spring提供的线程池;也可以用java库提供的;异常处理器会捕获异步任务抛出的异常进行处理;当然前提是你得抛出;最后,在controller层调用管理器中的submit方法即可。很简单,interface的代码就省略了。

2022-10-21 09:53:02 732

原创 Java中枚举的简单理解

枚举类型 实际 继承自java.lang.Enum, 实际上就是在类的代码中同时实例化对象。以下代码,创建一个类Color继承自Enum, 并同时实例化两个对象。

2022-10-17 10:26:57 133

原创 实现Callable接口创建线程

实现Callable接口,如下。创建定长线程池,执行任务,如下。

2022-10-12 14:10:51 181

原创 synchronize和volatile关键字

6 synchronize关键字保证了内存可见性,在释放锁时,所有写入都会写回内存,而获得锁后,都会从内存中读取最新数据。5 可重入性:获取锁之后,如果在代码块中需要调用其他代码块,且其他代码块也需要获取相同的锁,则可以直接执行,无需等待。2 在一个类中,在对象方法前加synchronize关键字,执行该方法的代码需要获取当前对象的锁。3 在一个类中,在类方法前加synchronize关键字,执行该方法的代码需要获取类对象的锁。4 在代码块中加synchronize关键字,需要指明要获取哪个对象的锁。

2022-10-12 11:29:52 118

原创 多线程--竞态条件和内存可见性

开启两个线程,对同一个 CountRunnable对象中的i的值进行同时修改,如下。结果应为30,但是每次结果并不相同,多为20-30之间。实现一个Runnble接口,如下。

2022-10-12 11:00:54 92

原创 线程的创建及基本方法

在主函数中创建线程,执行线程的常用基本方法,见下图。实现Runnable接口,见下图。

2022-10-12 10:39:33 59

原创 创建线程的开销

默认一个线程的线程栈大小是1M,别小看这1M的空间,如果每个用户请求都新建线程的话,1024个用户光线程就占用了1个G的内存,如果系统比较大的话,一下子系统资源就不够用了,最后程序就崩溃了。对操作系统来说,创建一个线程的代价是十分昂贵的, 需要给它分配内存、列入调度,同时在线程切换的时候还要执行内存换页,CPU 的缓存被清空,切换回来的时候还要重新从内存中读取信息,破坏了数据的局部性。【创建一个线程默认需要消耗1M的内存,如果每个用户请求都创建一个线程,那么1024个用户就是1G了,并发量一大就扛不住了】

2022-10-12 09:54:12 1883

原创 MySQL优化

有索引不走,如上。

2022-09-12 19:12:02 172

原创 Java静态代理

ProxyService内部有一个RealService成员,该成员的方法提供了正在的服务。RealService是真正提供服务的类/对象。

2022-07-30 16:05:19 134 1

原创 Jedis操作Redis数据库

Jedis的方法基本和Redis的指令一一对应。

2022-07-29 22:34:17 230

原创 JAVA Zip类

JAVAZip类。

2022-07-16 16:01:39 352

原创 JAVA中File Path Files类的使用

JAVA中FilePathFiles类的使用。

2022-07-16 09:36:12 912

原创 java 函数式编程

接口代码实现代码 单个参数可以省略括号。把代码块作为参数,代码块是一个函数式接口的实现 @FunctionalInterface 通知编译器这是一个函数式接口,编译器在编译时会进行检查实例:实现Function接口生成随机定长字符串...

2022-06-24 22:17:18 281

原创 Mybatis 二级缓存

补充:配置文件中,datasource的type类型如果设置成pooled,则是默认使用mybatis自带的连接池。一级缓存和二级缓存,一级缓存默认开启,以会话为单位,会话一旦关闭缓存也就会释放。 开启二级缓存,在mapper文件中设置LFU算法,最近最少使用...

2022-06-05 21:08:55 76

原创 Mybatis SelectKey和UseGeneratedKey的区别

useGeneratedKey只支持支持自增主键的数据库。 oracle只能使用selectKey

2022-06-05 08:58:53 273

原创 java JDBC 连接池

阿里巴巴Druid连接池的配置与使用配置文件:使用:其实,连接池不是什么很高深的概念。web服务器和数据库服务器之间的通信也要经过套接字。如果每次操作数据库时都要新建tcp连接太费时间,而且还要经过数据库用户和权限认证的过程。不如先把连接建好,并为数据库服务器端的套接字创建负责读写它的线程。这样,如果web服务器的某个线程需要和数据库服务器通信,直接向web服务端的一个已建好连接的套接字写东西或读东西就行了,数据库那端的线程会负责处理的。另外,DataSource类的官方描述是物理数据源的工厂,

2022-06-03 16:36:45 136

原创 java JDBC 批处理

如果不使用批处理的话,就要创建n个PreparedStatement对象,每执行一次增删改操作都要向数据库服务器发送一次数据,包括sql语句和参数,数据库收到sql和参数后会解析并执行。如果使用批处理,就只要想数据库服务器一次性发送一次数据,包括一条sql语句个n列参数,数据库服务器也只要解析一次sql语句,会大大提升效率。这里我们也可以看出来,PreparedStatement执行execute相关方法时,才会向套接字内写数据发送给数据库。在这里,我认为,批处理会把sql语句和参数都拼接起来,拼成一

2022-06-03 15:01:38 282

原创 java JDBC 事务

执行一次增删改查的操作前事务是自动开启的,jdbc 默认自动提交,即执行每条sql语句后都会提交一次。可以关闭自动提交,手动控制提交时机。

2022-06-03 13:32:51 321

原创 java JDBC 封装工具类

封装工具类:写入数据: 更新:删除:

2022-06-03 09:59:13 152

原创 java JDBC Sql注入攻击

查询:sql注入攻击和PreparedStatement: 其实本质就是PreparedStatement会对参数中的特殊字符进行转义处理,而不是直接拼接。它使用一个?占位,代表一个参数。在设置参数时,如果参数是字符串,拼接sql语句时会自动为字符串加上引号以此表明这是一个字符串,同时对参数内自带的特殊符号会进行转义处理。...

2022-06-03 08:59:30 295

原创 java JDBC 基础五步骤

web服务器会为每一个客户端连接创建一个线程。当客户请求需要进行对数据库的操作时,就需要建立和数据库服务器的连接。这个连接也是使用TCP/IP协议,因为它也是一种网络传输。这个物理连接在Java中就对应了一个java.sql.Connection接口的实现类的对象。显然,数据库服务器肯定也是多线程的,它应该也会为每一个web服务器线程发起的连接创建一个线程。这样一个Connection对象就对应了一个web服务器线程和一个数据库服务器线程之间的连接。一个数据库服务器线程服务于一个web服务器线程,而一个w

2022-06-02 15:18:49 446

原创 java反射笔记

java虚拟机会在第一次使用一个类时将它加载到内存中,并创建该类的一个Class对象,这个Class对象只会创建一次。显然这个对象中包含了类的字段、构造方法、方法等信息。这是理解反射的关键。Class类是反射的核心类,它主要有以下方法:Class xxxClass = Class.forName(xxx类的完全限定类名); 加载指定类,并返回该类的Class对象的引用xxx xxxInstance = xxxClass.newInstance(); 使用默认构造方法创建该类的一个实例如果我们在程序运行时输入

2022-05-31 21:49:15 99

原创 理解文件IO和套接字

此部分参考《汇编语言》王爽 清华大学出版社以3.5英寸软盘为例:2面 * 80磁道 * 18扇区 * 512字节。对磁盘的访问由磁盘控制器进行,只能以扇区为单位对磁盘进行读写。BIOS提供了对磁盘读写的中断例程,为我们封装了对硬件的复杂操作,我们可以用它对磁盘进行读写。当然如果你熟悉底层硬件,精通如何控制磁盘控制器,你也可以自己写一个程序完成读写操作。中断例程为13h。以下是程序所需的参数:ah 存放13h的功能号(2是读扇区);al 读取的扇区数; ch 磁道号;cl 扇区号;dh 面号;dl 驱动器号;

2022-05-29 16:07:11 235

空空如也

空空如也

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

TA关注的人

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