面试
追光的人(陈聪)
这个作者很懒,什么都没留下…
展开
-
mybatis的缓存基础
所有缓存的基础:1.什么是缓存缓存是一个容器,用来存放我们想要的数据2.缓存的思想但用户第一次查询的时候,缓存这个容器中还没有数据,此时去查询数据库查询数据库得到的结果,一方面返回给应用程序,另一方面放到缓存中(容器中)但用户第二次访问的时候,此时容器中已经有了数据此时直接从容器中获取数据即可,不需要查询数据库了。3.缓存的开发步骤if(查看缓存中有没有){直接从缓存中取出}else{//查询数据库,返回数据,把数据存放到缓存中}4.缓存的好处:①快速原创 2021-05-26 23:05:22 · 95 阅读 · 0 评论 -
复习-arrary和arraylist的对比以及arraylist的遍历中删除的原理
1.空间大小array是不可变的,必须事先控制其大小。arraylist是可扩容数组,每次扩大容量的0.5倍。2.存放内容array只能存放相同类型的元素,但存放对象可以是基本类型或者对象类型arraylist可以存放不同类型的元素(object),但存放对象只能是对象类型,而且如果加上<>的话,就是指定类型了。3.使用方法arraylist在array的基础上增加了例如addall(),removeall(),iterator()等常用方法。注意:我们经常需要在遍历元素原创 2021-04-28 14:39:18 · 250 阅读 · 0 评论 -
复习-jvm内存分配(1)
1.首先,jvm内存大致有三块,分别是栈(stack),堆和方法区。2..class文件在运行期间被类加载器加载到jvm的时候,是被加载到了方法区里,此时是一个一个的代码片段。3.jvm访问方法区的代码片段,就是去进入到一个又一个的方法里面去(从上到下)。4.每进入到一个方法里,都会给该方法在stack里分配对应的空间,空间里面存放局部变量和要用到数据。5.stack是先进后出的,进栈也叫做压栈(push),出栈也叫做pop,栈帧永远指向最顶部的方法栈,并且最顶部的方法栈拥有优先活跃权。.原创 2021-04-27 23:13:03 · 96 阅读 · 0 评论 -
hashmap浅析-扩容
补充部分:扩容涉及到扩容之后元素的整理问题,jdk8为了减少hashmpa冲突,使用了hash值和n进行&的操作,这么一来,同一个链表上的所有数据其实可以被划分为2类,一类是&操作之后为0的数据,保留在原位置,一类是&操作之后为1的数据,串起来放到新数组新位置上。步骤1:首先判断是否为初次扩容,如果是,退出。如果不是,进入循环,循环遍历次数为数组中元素的个数步骤2:(先把该节点赋值给e)判断数组中的当前节点是否为空,为空则进行下一轮循环步骤3:如果不为空,则赋值为空,等待原创 2021-04-05 17:56:50 · 158 阅读 · 0 评论 -
hashmap浅析-get方法
步骤1:首先对传入值keya进行hash运算,依然是高位和地位进行^运算,得到的hash值和n-1进行&运算,最终得到索引值步骤2:首先判断该数组是否为空,是否长度为0,当前索引位置的第一个元素是否为null,满足任意一个条件返回null,结束步骤3:将传入值keya的hash值与当前索引位第一个元素的hash值进行比较,一样则继续比较是否为相同引用,或者equals是否相等,若相等,返回其value,结束。步骤4:不相等的话,会出现两种可能性,如果当前索引位置后面还有元素,则可能在后面原创 2021-04-05 15:28:01 · 1739 阅读 · 2 评论 -
hashmap7源码浅析及与hashmap8的比较
一:首先分析jdk7的源码实现1.构造方法:①有参构造,会去寻找最近的2的次幂 ②无参构造,会直接生成一个长度为16的数组2.put方法:步骤1:调用hash算法(hashcode经过多次位运算)得到hash值并与n-1进行&,得到索引位置步骤2:如果索引位置上的元素为空,添加成功,如果索引位置上的值不为空,比较key1和当前位置上存在的一个或多个元素的hash值是否一致:①如果都不相同,进行头插法,直接插在数组中,也就是插在其他对象前面。...原创 2021-04-05 11:58:41 · 280 阅读 · 0 评论 -
hashmap8底层源码剖析1--构造以及put
以下内容第一遍全按照记忆来,会有一些不太全的地方。1.首先构造有两种:①带参数构造,如hashmap(10),此时底层会将输入的参数进行多次位运算(转换成后几位全是1的,比如111,1111),扩容的时候就在二进制转化为10进制的时候再加上1即可。也就是说,会就近返回一个2的次幂,这个才是数组的大小。比如说传入10,会返回16,传入15也是16,传入17会返回32。以此类推。 ②无参构造,内部什么也不做,仅仅只是定义一个负载因子,这个因子等...原创 2021-04-04 23:44:19 · 224 阅读 · 0 评论 -
关于Stringbuffer的需要注意的几点
1.StringBuffer或者StringBuilder 创建的时候,如果是无参构造(),会直接在底层创建一个长度为16的char类型数组;如果是有参构造(string),会在参数的基础上加上16。推荐使用(int)构造,会直接生成一个确定容量的数组,避免多次扩容。2.利用length()方法得到的是count值,也就是数组中保存的元素的值。3.如果扩容的话,StringBuffer是在原有的基础上*2+2,全部都通过copyof拷贝到新数组中。以下是B站 上硅谷视频截图,我就不打字了。.原创 2021-03-28 23:12:35 · 428 阅读 · 0 评论