- 博客(40)
- 收藏
- 关注
原创 ArrayList和LinkedList的循环删除问题
ArrayList底层是数组实现的,如果把某个元素删除之后,数组会进行重组,这个时候数组的长度会发生变化,如果还根据for循环i++的下标访问会出现问题。默认是空数组,在添加元素时,会判断这个大小跟10的关系,如果小于10,数组大小直接为10。读者若直接复制代码,执行时,需从三个方法中选一个,另外两个注释掉。此后,发现数组满了之后,会扩大为原来的1.5倍。即:原数组大小+原数组大小的一半。
2022-10-23 17:19:25 759
原创 类加载机制和类加载过程
顶层的启动类加载器如果能够完成类的加载任务,就会成功加载,倘若父类加载器无法完成任务,子类加载器才会尝试自己去加载,这就是双亲委派模式。
2022-10-07 21:44:29 581
原创 一条sql语句在MySQL的执行流程
这是因为最开始 MySQL 并没与 InnoDB 引擎( InnoDB 引擎是其他公司以插件形式插入 MySQL 的) ,MySQL 自带的引擎是 MyISAM,但是我们知道 redo log 是 InnoDB 引擎特有的,其他存储引擎都没有,这就导致会没有 crash-safe 的能力(crash-safe 的能力即使数据库发生异常重启,之前提交的记录都不会丢失),binlog 日志只能用来归档。,主要就是判断你输入的 sql 是否正确,是否符合 MySQL 的语法。(归档日志),InnoDB自带的。
2022-10-07 21:41:55 1043
原创 两个栈实现一个队列
的时候,先把stack1的元素放入stack2,添加完之后,把所有元素放回stack1。每次添加都是在stack2最外层添加,到了stack1,自然到了最内层。核心思想,把stack2当成添加时的。的时候,直接从stack1出。
2022-10-07 21:41:18 158
原创 两个队列实现一个栈
在queue2添加元素之后,把queue1的元素添加到queue2,此时queue2的输出相当于栈,让queue1 = 让queue2 ,让q2=原来的q1,即空。
2022-10-07 21:40:48 255
原创 JVM运行时数据区等部分概念
(int a = 32) a存于哪里,如果是局部变量(在方法里面)是在虚拟栈中的,如果是对象中定义的是堆中。好处:reference中存储的是稳定句柄地。通过栈上的reference数据来操作。- 然后 将一些信息存放到对象头。Java有一个自动垃圾收集机制。内存分配完成之后 初始化 0。C++需要手动式释放掉。好处:快,节省一次定位。
2022-10-07 21:40:17 73
原创 面向对象总结
面向对象面向对象的三大特征在 Java 中有两种形式可以实现多态:继承(多个子类对同一方法的重写)和接口(实现接口并覆盖接口中同一方法)。面向对象的分析:OOA面向对象的设计:OOD面向对象的编程:OOP面向过程1、步骤清晰简单,第一步做什么,第二步做什么。。。。。。2、适用于一些较为简单的问题面向对象1、适用于问题复杂的情况2、解决问题要有分类思想,先对问题进行分析,需要分哪些类,然后再考虑某个具体分类3、面向对象的三大特征类和对象的关系对象是具体的,世界的万物都可以看做对象;类是抽象概念
2022-10-07 21:39:45 241
原创 Java强软弱虚引用的使用场景
特点:1. 当内存空间不足,JVM宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足的问题。特点:创建缓存的时候,创建的对象放进缓存中,当内存不足时,JVM就会回收早先创建的对象。特点:在垃圾回收时,一旦发现弱引用对象,无论内存是否不足,都会进行回收。使用场景:该变量不希望被垃圾回收器回收。1.防止内存泄漏,保证内存被JVM回收。特点:任何时候都可能被垃圾回收器回收。使用场景:跟踪对象被GC回收的活动。使用场景:图片、网页缓存之类。
2022-09-13 00:54:10 214
原创 java7 HashMap在多线程下put导致死循环问题
切换时间片执行线程1,线程1执行完毕后执行线程2,此时他的e2和next2两个变量还都是指向原来的值,但是HashMap已经改变,但是线程2并不知道。4、 把e的指针指向新建的数组的对应位置,这个位置是根据hash值计算出来的。indexFor方法。执行到这里时,恰巧进行了堵塞,这样会有e2指向1,next2指向2。6、重复1-5的操作,直到e为null,跳出while循环。5、把值赋过去,然后变换e的值,进行下一次循环。此时已经成环,究其原因,是头插法导致。2、进行while循环,即。
2022-09-13 00:39:40 306
原创 泛型的类型擦除
泛型是一种程序设计手段。使用泛型机制写的程序代码要比随意使用Object变量,再进行强制类型转换具有更高的安全性和可读性。泛型如果没有限定类型,在编译时会使用Object类型;类型安全监测机制,用\或其他类型进行限定,编译器可以很方便的进行类型识别;可读性强,一眼可以看出代码操作的数据类型。
2022-09-04 23:17:17 297
原创 抽象类与接口的联系与区别
来继承抽象类,如果子类不是抽象类,他需要把抽象类中所有抽象方法实现,如果子类是抽象类,可以先不实现。来实现接口,他需要把接口中声明的所有方法实现;5、不能构造接口的对象,但能声明接口的变量,new的时候可以用引用了接口的类对象。5、其他方面,抽象类像一个正常的类一样,可以有具体的数据、具体的方法。3、java8之前不能在接口中实现方法,现在可以实现简单的一些方法。1、接口不是类,而是对类的一组需求描述;2、有抽象方法的类必须声明为抽象类;3、抽象类可以没有抽象方法;7、接口中所有方法都是抽象的。
2022-09-02 22:54:22 196
原创 java类加载的执行顺序
类加载是首先对类进行编译,即生成.class文件。与此同时会执行第一梯队。第二梯队:非静态变量、非静态构造块。第一梯队:静态变量、静态构造块。执行是就是二、三、四梯队的执行。如果有父类,对应的先执行父类。...
2022-08-31 19:52:49 533
原创 java 重写equals方法为什么需要同时重写hashCode方法
a.equals(b) 为真,但是两者的hashcode如果不相同的话,在集合中的判断就会出现问题。将a、b同时加入散列存储结构map、set时,就可能出现数据结构中存在两个值相等的对象的情况,从而导致混淆。
2022-08-31 11:29:28 122
原创 从源码分析128陷阱产生的原因
首先要了解什么是128陷阱128陷阱指的是2个integer对象直接用==判定,在某个范围内可以判true,而超出这个范围则为false在创建Integer类型时,如果值在某个特定的范围内,则会使用缓存数组内的值,这个时候两个数字大小的Integer就会相等,即地址相同;如果创建两个超出这个范围的Integer,则会分别创建两个对象,值相同,但是地址不相同,会返回false。...
2022-08-31 10:49:01 100
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人