过渡内容

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


Java的虚拟机的面试内容主要包括三部分:GC、类加载机制,以及内存。

  一个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区,很明显这两部分对象所占有的内存是不连续的,也就导致了内存碎片化。

 
 
jstack简单使用,定位死循环、线程阻塞、死锁等问题:https://www.cnblogs.com/chenpi/p/5377445.html
 CMS收集器和G1收集器优缺点  https://www.cnblogs.com/aspirant/p/8663897.html
 
hashmap 计算下标值的,时间复杂度是多少,最坏的时间复杂度是多少  在扩容的时候时间复杂度是O(n)的,你有什么方式去优化这个时间复杂度吗
CMS重新标记时标记什么,为什么这么标记,标记待回收垃圾和标记保留对象的区别是什么,哪个更好一些
concurrenthashmap怎么实现的,get数据的时候需要加锁吗。:https://juejin.im/entry/5b98b89bf265da0abd35034c
可重入锁的原理
设计模式几个原则:https://www.jianshu.com/p/6ef653f2892a
 

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

 给你一个User,包含id,name,parentId。然后给你一个List<User>,要求将它转换成一棵树的结构。只有一个跟节点,parentId=-1  https://blog.csdn.net/xinzi11243094/article/details/80890222
进程通信:
编写两个线程,一个线程打印1~25,另一个线程打印字母A~Z,打印顺序为12A34B56C……5152Z,要求使用线程间的通信。  https://blog.csdn.net/u011514810/article/details/77131296
 
登录注册模块:
Redis存储验证码,存储登录凭证用户信息。
 
服务器接收到app发送的用户名和密码后,验证用户名和密码是否正确。如果验证正确,生成一个随机的不重复的token字符串,在redis中维护一个映视表,建立token字符串和用户信息的对应关系表,服务器把token字符串返回给app,app把这个token字符串保存起来,作为登录的验证, 当需要验证用户身份的操作时,必须要把token字符串传给服务器验证身份,当服务器接收到这个api请求,知道要验证用户身份的,于是,就把参数中token的值"daf32da456hfdh"取出来,在(1)中建立的token字符串和用户信息的对应关系表查找,如果发现没这个token值的,则返回验证失败的信息。如果发现有这个token值,则获取这个用户的信息,进行相关的更新操作。 当用户退出登录时,需要通过调用api,让服务器把这个用户对于的token字符串删除.
 
 
数据库索引:

索引的分类

  • 聚集索引
  • 非聚集索引
  • 哈希索引
  • B+-树索引(二分查找)
 

数据库分库分表,垂直切分和水平切分 https://www.i3geek.com/archives/1108

 

9. 一张表有很多字段, 热门的就那几个字段, 如何设计, 如果热门和不热门字段都需要, 如何设计

 

10. 索引是干什么的, 商城订单有一个state列,只有少数几种状态,适合当索引吗

 

java线程安全;https://www.cnblogs.com/cxhfuujust/p/11201970.html

 

 Redis keys   

KEYS pattern

查找所有符合给定模式 pattern 的 key 。

 keys的模糊匹配功能很方便也很强大,但是开发中使用keys的模糊匹配却发现redis的CPU使用率极高。那怎么解决这种类似的keys模糊匹配问题呢?其中常见的方法就是设置一个set,将需要使用的keys存储在set中。
利用Redis在缓存中实时统计文章阅读热度的topk:利用zset,https://blog.csdn.net/wangh92/article/details/80052607   https://my.oschina.net/jockchou/blog/478780
 
 
 

内存碎片: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)可以对它的客户隐藏一个对象的具体信息。因此,当使用代理模式的时候,我们常常在一个代理类中创建一个对象的实例。并且,当我们使用装饰器模 式的时候,我们通常的做法是将原始对象作为一个参数传给装饰者的构造器。

posted @ 2019-07-29 10:09  从让帝到the_rang  阅读(306)  评论(0编辑  收藏  举报