- 博客(19)
- 收藏
- 关注
原创 Servle线程是安全的吗?
在Servlet容器中,一个Servlet实例只会被初始化一次,如果多个用户同时请求访问同一个URL,那么用户访问的是同一个Servlet实例。而每次用户访问Servlet时,服务器都会为每个用户创建一个独立的线程,每个线程都有它自己的堆栈空间。这样,当两个或多个线程同时访问同一个Servlet时,可能会发生多个线程同时访问同一资源的情况,数据可能会变得不一致。Servlet不是线程安全的,servlet是单实例多线程的,当多个线程同时访问同一个方法,是不能保证共享变量的线程安全性的。
2023-02-17 23:07:06 390
原创 mysql的事务与事务隔离级别
不可重复读:不可重复读是指在对于数据库中的某个数据,一个事务范围内多次查询却返回了不同的数据值,这是由于在查询间隔,被另一个事务修改并提交了。例如事务T1在读取某一数据,而事务T2立马修改了这个数据并且提交事务给数据库,事务T1再次读取该数据就得到了不同的结果,发送了不可重复读。脏读:脏读是指在一个事务处理过程中读取了另一个未提交的事务中的数据。当一个事务正在多次修改某个数据,而在这个事务中这多次的修改都还未提交,这时一个并发的事务来访问该数据,就会造成两个事务得到的数据不一致。解决问题:脏写、脏读。
2022-11-19 15:57:23 154
原创 Set集合不重复原理
set集合存入元素时,首先会根据hashcode方法计算出该元素的hash值,如果已经存在该hash值,则会调用eaqul方法,判断两个元素是否相同,相同则不存;如果hash值相同,元素不相同,则会形成链表直接把元素挂在已经存在的元素下边;//Set集合实现去重,底层调用的是HashMap中的put()方法,而put方法调用的是HashMap中的putVal()方法。如果该位置是null,表示为空,可以创建新的节点,存储元素。//hash()方法是计算元素的哈希值,它底层是hashCode()方法。
2022-11-06 19:02:42 745
原创 迭代器的实现原理
在调用Iterator的next()方法之前,迭代器的索引位于第一个元素之前,不指向任何元素,当第一次调用迭代器的next()方法之后,迭代器的索引会向后移动一位,指向第一个元素并且将该元素返回,当再次调用next() 方法时,迭代器的索引会指向第二个元素并将该元素返回,以此类推,直到hasNext()方法返回false,表示到达了集合的末尾,停止对元素的遍历。注意:在通过next()方法获取元素的时候,必须保证要获取的元素存在,否则,会抛出NoSuchElementException异常。
2022-10-31 11:38:41 172
原创 为什么计算机中大部分小数是不精确的
因为是正数所以三码合一,两者二进制加起来是0000.0100.........后面是无限的小数部分,得到的值转为十进制也是无限小数,近似值。这个题的运算结果加起来明显是0.3,那为什么在计算机中运算出来是这样一个数呢?计算机在底层运算时是用二进制进行的运算的,因为计算机底层只能识别0和1.那么0.1和0.2这两个十进制的数需要先转换为二进制,然后在进行运算;所以说大部分小数在计算机中是不精确的。结果为0.00011100。整数转整数 小数转小数。
2022-10-15 10:20:32 182
原创 javascript中获取DOM的节点的方法
使用方法:element.getElementsByClassName("classNames");使用方法:document.getElementById("domId");使用方法:document.getElementsByName("domName");5、获取html的方法(document.documentElement)document.body是专门获取body这个标签的;7、通过选择器获取一个元素(querySelector)6、获取body的方法(document.body)
2022-10-09 18:31:22 254
原创 JavaScript数组的创建以及常用用法
定义new Array()时,里面写一个参数,如new Array(5) 那么这个数组的初始长度为5.在JavaScript中,除了new Array()定义数组外,还可以使用[]来定义数组。pop()方法:用来删除数组最后一个元素,并将删除后的元素返回。shift()方法:用于删除数组第一个元素,并返回删除后的数组。indexof()方法可返回数组中指定元素的位置。unshift()方法: 用于向数组开头添加元素。push()方法:用于向数组尾部添加元素,concat():方法用于数组之间的拼接。
2022-09-23 17:33:22 375
原创 简述CSS中margin折叠问题
当我们设置模块(2)margin-top为50px时,会发现两个模块同时移动了,但这个显然不是我要的效果,我想要只是移动模块(2),那么我们需要加一个display: inline-block;这张图我们可以看出序号1和序号2的距离差不多, 但依照我们写的代码两个模块之间的距离应该是200px,但图下显然不够,所以我们就说这里发生了折叠;解决这个问题有一个方法也挺简单的,就是修改一下两个模块中任意一个的margin为200px就可以了。css中的margin折叠问题发生在盒子模型中,那盒子模型又是什么呢?
2022-09-17 22:16:08 138
原创 线程池-四种拒绝策略总结
每过来一个任务会启动一个线程去执行,当核心线程数用完后,会把新来的任务存入阻塞队列中,阻塞队列存满后,会再启动超过核心线程数量到最大线程数量之间的线程,当线程的数量达到最大线程数量,再来任务就启动拒绝策略。corePoolSize - 核心线程数,也即最小的线程数。
2022-08-21 00:10:33 593
原创 简述哈希表
也就是说, 它通过把关键码 - 值映射到表中一个位置来访问记录, 以加快查找的速度。这个映射的函数叫做散列函数,存放记录的数组叫做散列表。什么类型的数组:java.util.HashMap$Node类型的数组。* 同一索引值下元素个数>8,并且数组长度>=64.a.同一索引值下元素个数>8,并且数组长度...
2022-08-14 23:25:03 90
原创 java 继承关系下构造方法的访问特点
若父类中的无参数构造方法被注释掉,测试demo调用不到父类中的无参构造方法,就会报错。可以用super(age:20)调用有参构造方法。在继承关系下,子类构造方法中如果没有显示的写super(),则默认赠送一个super(),如果写了就不再赠送;若父类中没有无参构造方法,只有有参构造方法 通过super关键字去显示的调用父类的带参构造方法;this(参数) 用于调用本类其他的构造方法,但不能调用自己(递归)。super()必须写在构造方法里的第一个语句;super.父类成员方法()...
2022-08-03 23:59:25 84
原创 为什么四个字节的float表示的范围比八个字节的long要广
float4个字节的空间存储为32位符号位0表示正数,1表示负数八位指数位00000000~11111111(二进制)所以可得指数位范围是0~225,指数全是“1”时或“0”时有特殊用途,所以去掉最大值11111111和最小值00000000,剩下的范围1~254,两边同时-127(因为有可能为正数也有可能为负数),结果位-126和127,所以float范围就是-2^127~2^127;...
2022-07-29 23:35:31 237
原创 MySql的DDL和DML和DQL的基本语法
DDL语句操作数据库表1.createdatabase库名;//创建数据库2.showdatabases//查看数据库3.dropdatabase库名//删除数据库4.use库名//选择数据库5.createtable表名(字段名1字段类型,字段名2字段类型...);//创建表注意字段名最后一行不加逗号;6.//显示当前数据库中所有的数据表showcolumnsfrom表名;//查询某张表表结构desc表名。...
2022-07-22 23:59:57 233
原创 IO流的分类
输入流只能从中读取数据,而不能向其写入数据,由InputStream和Reader作为基类。字节流操作的数据单元是8位字节,由InputStream和OutputStream作为基类。处理流用于对一个已存在的流进行连接或封装,通过封装后的流来实现数据读/写功能。节点流可以从向一个特定的IO设备(如磁盘、网络)读/写数据的流。字节流和字符流的用法几乎完全一样,区别在于字节流和字符流所操作的数据单元不同。字符流操作的数据单元是16为的字符,由Reader和Writer作为基类。...
2022-07-17 19:10:30 566
原创 迭代器的实现原理
import java.util.ArrayList;import java.util.Iterator;public class T { public static void main(String[] args) { //定义集合,添加数据 ArrayList list = new ArrayList(); list.add(100); list.add(200); ...
2022-07-03 19:28:44 100
原创 为什么大部分浮点数在计算机中是不准确的
1.浮点数转化为二进制数;整数转整数,小数转小数,示例如下;整数部分为二进制;小数部分后转为二进制的方法则是乘以2,看结果是否是1点几,如果是1则对应的二进制位是1;如果结果是零的话则对应的二进制位写零;举例说明:1.3转为二进制:整数部分1转为二进制是0001;小数部分是:0 1 0 0 1 1
2022-06-19 01:32:28 230
原创 计算机中有符号整数的取值范围
整数部分分为四类: 所占字节 取值范围 byte 1 (一个字节是八个位,最前面有一个是符号位)-2^7——2^7-1 -128~127 short 2 (16位)
2022-06-09 20:47:18 555 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人