
面试笔记
面试问题记录
十一*
用双手编写未来
展开
-
进程和线程的区别
进程是指运行中的程序,比如我们使用QQ,就启动了一个进程,操作系统就会为该进程分配内存空间。当我们使用迅雷,又启动了一个进程,操作系统将为迅雷分配新的内存空间。进程是程序的一次执行过程,它有自己独立的生命周期,它会在启动程序时产生,运行程序时存在,关闭程序时消亡。原创 2023-03-11 12:51:07 · 90 阅读 · 0 评论 -
静态变量和实例变量的区别
在语法定义上的区别:静态变量前要加static关键字,而实例变量前则不加。原创 2023-03-11 12:46:22 · 207 阅读 · 0 评论 -
ArrayList和LinkedList区别
3,另外Araylist和LlinkedList都实现了list接口,但是LinkedList还额外实现了Deque接口,所以LinkedList还可以当做队列来使用。2,由于底层数据结构不同,他们所适用的场景也不同,ArrayList更适合随机查找,Linkedlist更适合删除和添加,查询、添加、删除的时间复杂度不同。1,首先,他们的底层数据结构不同,ArrayList底层是基于数组实现的,LinkedList底层是基于链表实现的。原创 2023-02-17 23:17:08 · 151 阅读 · 0 评论 -
B树和B+树的区别,为什么Mysql使用B+树
Mysql索引使用的是B+树,因为索引是用来加快查询的,而B+树通过对数据进行排序所以是可以提高查询速度的,然后通过一个节点中可以存储多个元素,从而可以使得B+树的高度不会太高,在Mysql中一个Innodb页就是一个B+树节点,一个Innodb页默认16kb,所以一般情况下一颗两层的B+树可以存2000万行左右的数据,然后通过利用B+树叶子节点存储了所有数据并且进行了排序,并且叶子节点之间有指针,可以很好的支持全表扫描,范围查找等SQL语句。2.一个节点了可以存多个元素,多个元素也排序了。原创 2023-02-10 10:02:40 · 210 阅读 · 0 评论 -
Redis和Mysql如何保证数据一致
再次查询的时候在将数据添加到毁存中,这种方案能解决1方案的问题,但是在高并发下性能较低,而且仍然会出现数据不一致的问题,比如线程1删除了Redis缓存数据,正在更新Mysql,此时另外一个查询再查询,那么就会把Mysql中老数据又查到Redis中。步骤是:先删除Redis缓存数据,再更新Mysql,延迟几百毫秒再删除Redis缓存数据,这样就算在更新Mysq时,有其他线程读了Mysql,把老数据读到了。Redis中,那么也会被删除掉,从而把数据保持一致。如果更新Redis失败,可能仍然不一致。原创 2023-02-10 09:54:07 · 164 阅读 · 0 评论 -
JDK、JRE、JVM之间的区别
我们写Java代码,用txt就可以写,但是写出来的Java代码,想要运行,需要先编译成字节码,那就需要编译器,而JDK中就包含了编译器javac,编译之后的字节码,想要运行,就需要一个可以执行字节码的程序,这个程序就是JVM (Java虚拟机),专门用来执行Java字节码的。另外,JVM在执行Java字节码时,需要把字节码解释为机器指令,而不同操作系统的机器指令是有可能不一样的,所以就导致不同操作系统上的JVM是不一样的,所以我们在安装JDK时需要选择操作系统。JDK中包含了JRE,JRE中包含了JVM.原创 2023-02-10 09:48:10 · 860 阅读 · 0 评论 -
Thread和Runnable的区别
Thread和Runnable的实质是继承关系,没有可比性。无论使用Runnable还是Thread,都会new Thread,然后执行run方法。原创 2023-02-10 00:39:39 · 141 阅读 · 0 评论 -
说说对线程安全的理解
堆是进程和线程共有的空间,分全局堆和局部堆。全局堆就是所有没有分配的空间,局部堆就是用户分配的空间。堆在操作系统对进程初始化的时候分配,运行过程中也可以向系统要额外的堆,但是用完了要还给操作系统,要不然就是内存泄漏。栈是每个线程独有的,保存其运行状态和局部自动变量的。栈在线程开始的时候初始化,每个线程的栈互相独立,因此,栈是线程安全的。为了保证安全,每个进程只能访问分配给自己的内存空间,而不能访问别的进程的,这是由操作系统保障的。在每个进程的内存空间中都会有一块特殊的公共区域,通常称为堆(内存)。原创 2023-02-10 00:29:11 · 461 阅读 · 0 评论 -
线程的生命周期,线程有哪些状态详解
创建,就绪,运行、阳塞和死亡状态。原创 2023-02-09 21:33:49 · 563 阅读 · 0 评论 -
sleep()、wait()、 join()、 yield()的区别
sleep是 Thread类的静态本地方法,wait则是 Object类的本地方法。2、 sleep方法不会释放lock,但是wait会释放,而且会加入到等待队列中。原创 2023-02-10 00:12:50 · 627 阅读 · 0 评论 -
String、StringBuffer、StringBuilder的区别
是可以存储和操作字符串,即包含多个字符的字符串数据。对于StringBuffer而言,本身是一个具体的操作类,所以不能像String那样采用直接赋值的方式进行对象实例化,必须通过构造方法完成。中的内容是可以改变的,并且StringBuffer是线程安全的,使用了关键字是一个可变的字符序列;在 StringBuilder 上的主要操作是 append 和 insert 方法.StringBuilder类可以用于在无需创建一个新的字符串对象情况下修改字符串。原创 2022-12-26 19:13:58 · 656 阅读 · 0 评论 -
equals()与hashcode()之间的关系
被用来检测两个对象是否相等,即两个对象的内容是否相等;equals 方法(是String类从它的超类Object中继承的)==用于比较引用和比较基本数据类型时具有不同的功能:比较基本数据类型,如果两个值相同,则结果为true;而在比较引用时,如果引用指向内存中的同一对象,结果为true。哈希码(HashCode)通过hash函数得来的,并不是完全唯一的,它是一种算法。原创 2022-12-26 18:23:44 · 1991 阅读 · 0 评论