过渡内容
B+树索引和哈希索引都有什么优缺点:https://blog.csdn.net/timchen525/article/details/77691190 https://www.cnblogs.com/heiming/p/5865101.html
B树和B+树的区别:https://www.cnblogs.com/ivictor/p/5849061.html https://blog.csdn.net/login_sonata/article/details/75268075
聚簇索引和非聚簇索引的区别 https://wangxinchun.iteye.com/blog/2373650
HashMap里面实现一个静态内部类Entry,其重要的属性有 key , value, next,从属性key,value我们就能很明显的看出来Entry就是HashMap键值对实现的一个基础bean,我们上面说到HashMap的基础就是一个线性数组。把HashMap的put源码,get源码理一遍
Exception与error的差别 Exception的分类 NullpointerException属于什么.运行时异常与一般异常的区别 .try-catch-finally中return https://www.jianshu.com/p/e8bbee3c1c4a https://blog.csdn.net/huhui_cs/article/details/38817791 https://blog.csdn.net/u012112647/article/details/51798897 https://blog.csdn.net/ns_code/article/details/17485221
IO流分类:IO流中用到了很多设计模式:https://my.oschina.net/gao0516/blog/136103
问了一个数据量过大,会导致JVM堆栈过深,怎么办:https://www.cnblogs.com/200911/p/3965108.html
一个GC部分简单的连环炮。
面试官可以先问你什么时候一个对象会被GC?
接着继续问你为什么要在这种时候对象才会被GC?
接着继续问你GC策略都有哪些分类?
你如果说出来了,继续问你这些策略分别都有什么优劣势?都适用于什么场景?
你继续说出来了以后,给你举个实际的场景,让你选择一个GC策略?
你如果选出来了,继续问你,为什么要选择这个策略?
下面是关于类加载机制的简单连环炮。
首先肯定是先问你Java的类加载器都有哪些?
回答了这些以后,可能会问你每个类加载器都加载哪些类?
说完以后,可能会问你这些类加载之间的父子关系是怎样的?
你在回答的时候可能会提到双亲委派模型,那么可以继续问你什么是双亲委派模型?
你解释完了以后,可能会继续问你,为什么Java的类加载器要使用双亲委派模型?
你回答完以后,可能会继续问你如何自定义自己的类加载器,自己的类加载器和Java自带的类加载器关系如何处理?
再来一个关于内存的连环炮。
首先肯定就是问你JVM内存分为哪几部分,这些部分分别都存储哪些数据?
然后继续问你一个对象从创建到销毁都是怎么在这些部分里存活和转移的?
接着可能会问你,内存的哪些部分会参与GC的回收?
完事以后,可能还会问你Java的内存模型是怎么设计的?
你回答了以后,还会继续问你为什么要这么设计?
问完以后,还可能会让你结合内存模型的设计谈谈volatile关键字的作用?
你在谈的时候,肯定会提到可见性,那么接着可见性这三个字,还可以继续问你并发的内容。
为什么要设置两个Survivor区
设置两个Survivor区最大的好处就是解决了碎片化,下面我们来分析一下。
为什么一个Survivor区不行?第一部分中,我们知道了必须设置Survivor区。假设现在只有一个survivor区,我们来模拟一下流程:
刚刚新建的对象在Eden中,一旦Eden满了,触发一次Minor GC,Eden中的存活对象就会被移动到Survivor区。这样继续循环下去,下一次Eden满了的时候,问题来了,此时进行Minor GC,Eden和Survivor各有一些存活对象,如果此时把Eden区的存活对象硬放到Survivor区,很明显这两部分对象所占有的内存是不连续的,也就导致了内存碎片化。
hashset实现的原理:https://wiki.jikexueyuan.com/project/java-collection/hashset.html
读写锁 https://blog.csdn.net/Li_Ning_/article/details/52294343
https://michaelyang1988-hotmail-com.iteye.com/blog/1874671
索引的分类
- 聚集索引
- 非聚集索引
- 哈希索引
- B+-树索引(二分查找)
数据库分库分表,垂直切分和水平切分 https://www.i3geek.com/archives/1108
java线程安全;https://www.cnblogs.com/cxhfuujust/p/11201970.html
KEYS pattern
查找所有符合给定模式 pattern
的 key
。
内存碎片:https://blog.csdn.net/tong5956/article/details/74937178 https://blog.csdn.net/bit_x/article/details/5655278
【同一进程间的线程共享的资源有】
a. 堆 由于堆是在进程空间中开辟出来的,所以它是理所当然地被共享的;因此new出来的都是共享的(16位平台上分全局堆和局部堆,局部堆是独享的)
b. 全局变量 它是与具体某一函数无关的,所以也与特定线程无关;因此也是共享的
c. 静态变量 虽然对于局部变量来说,它在代码中是“放”在某一函数中的,但是其存放位置和全局变量一样,存于堆中开辟的.bss和.data段,是共享的
d. 文件等公用资源 这个是共享的,使用这些公共资源的线程必须同步。Win32 提供了几种同步资源的方式,包括信号、临界区、事件和互斥体。
【独享的资源有】
a. 栈 栈是独享的
b. 寄存器 这个可能会误解,因为电脑的寄存器是物理的,每个线程去取值难道不一样吗?其实线程里存放的是副本,包括程序计数器PC
关系型与非关系型数据库的优缺点 https://blog.csdn.net/G_Q_L/article/details/77946483
给定一个int数组A,数组中元素互不重复,给定一个数x,求所有求和能得到x的数字组合,组合中的元素来自A,可重复使用。
作者:菜鸟也需要offer
链接:https://www.nowcoder.com/discuss/206411
来源:牛客网
public ArrayList<ArrayList<Integer> res = new ArrayList<>();
public ArrayList<ArrayList<Integer>> sum(int[] A,int x)
{
Arrays.sort(A);
if(A==null||A.lenght==0)
return res;
ArrayList<Integer> list = new ArrayList<>();
bk(A,X,0,list);
return res;
}
public void bk(int[] A,int X,int k, ArrayList<Integer> list)
{
if(X=0)
{
res.add(list);
return;
}
if(X<0)
{
return;
}
for(int i=k;i<A.lenght;i++)
{
list.add(A[i]);
bk(A,X-A[i],i,list);
list.remove(list.size()-1);
}
}
最少交换次数来组合所有的 1:https://blog.csdn.net/hy971216/article/details/99294989
如何统计controller层所有方法的调用时间:Spring AOP 实现监控方法执行的时间(统计service中方法执行的时间)
linux查找文件命令:find
内存屏障,happen-before https://blog.csdn.net/kuangzhanshatian/article/details/81738599
wait方法底层原理:https://www.jianshu.com/p/f4454164c017
内部类可以引用他包含类的成员吗:一个内部类对象可以访问创建它的外部类对象的内容,内部类如果不是static的,那么它可以访问创建它的外部类对象的所有属性内部类如果是sattic的,即为nested class,那么它只可以访问创建它的外部类对象的所有static属性一般普通类只有public或package的访问修饰,而内部类可以实现static,protected,private等访问修饰。当从外部类继承的时候,内部类是不会被覆盖的,它们是完全独立的实体,每个都在自己的命名空间内,如果从内部类中明确地继承,就可以覆盖原来内部类的方法。
java多线程龟兔赛跑:https://blog.csdn.net/renl123470/article/details/52344422
动态代理,可是在印象中代理模式一直都是控制访问什么的,怎么又动态增加行为了,动态增加行为不是装饰器模式吗?实际上,在装饰器模式和代理模式之间还是有很多差别的。装饰器模式关注于在一个对象上动态的添加方法,然而代理模式关注于控制对对象的访问。换句话 说,用代理模式,代理类(proxy class)可以对它的客户隐藏一个对象的具体信息。因此,当使用代理模式的时候,我们常常在一个代理类中创建一个对象的实例。并且,当我们使用装饰器模 式的时候,我们通常的做法是将原始对象作为一个参数传给装饰者的构造器。