美文网首页
面试流水(一)

面试流水(一)

作者: 红烧鸡翅膀_我喜欢吃 | 来源:发表于2020-02-21 16:36 被阅读0次

    一、==和equals的区别

    1、==可以用于值比较和对象比较,后者只能用于对象比较

    2、对象进行比较时:二者都是比较引用地址,但实际开发中比较引用地址一般没有什么卵用,所以会重写。==不能重写,equals可以重新,一般会重写这个方法用来比较两个对象的值是否相等。

    3、String,Date这种是系统重写过的,比较值。

    4、5个特性

    (1)自反性:x.equals(x)必须返回true。

    (2)对称性:x.equals(y)与y.equals(x)的返回值必须相等。

    (3)传递性:x.equals(y)为true,y.equals(z)也为true,那么x.equals(z)必须为true。

    (4)一致性:如果对象x和y在equals()中使用的信息都没有改变,那么x.equals(y)值始终不变。

    (5)非null:x不是null,y为null,则x.equals(y)必须为false。

    5、要判断两对象是否相等,必须通过equals方法,equals相等,hashcode一定相等

    二、hashcode方法

    1、public native int hashCode();Object本身的方法,本地方法,实际返回内存地址

    2、在JVM中,加载的对象在内存中包括三部分:对象头、实例数据、填充。其中,对象头包括指向对象所属类型的指针和MarkWord,而MarkWord中除了包含对象的GC分代年龄信息、加锁状态信息外,还包括了对象的hashcode;对象实例数据是对象真正存储的有效信息;填充部分仅起到占位符的作用, 原因是HotSpot要求对象起始地址必须是8字节的整数倍。

    内存中的对象=对象头+实例数据+填充位(补充到8字节的整数倍)

    对象头=对象类型的指针(指向元数据去的类数据)+MarkWord

    MarkWord=GC分代年龄信息+加锁状态信息+HASHCODE

    3、String的实现

    选用31质数来减少哈希冲突,且31较小(11111)

    31计算方便,左移5为减1(2^5-1)

    三、hashmap头插和尾插?

    jdk1.8之前是插入头部的,在jdk1.8中是插入尾部的

    https://www.jianshu.com/p/0df1f25139e4

    四、线上问题查询

    1、CPU很高

    可以用top命令找pid

    a.可能是频繁的GC

    b.可能是循环计算

    2、OOM

    发生OOM问题一般服务都会crash,业务日志会有OutOfMemoryError。OOM一般都是出现了内存泄露,须要查看OOM时候的jvm堆的快照,结合MAT,能够对dump文件进行分析。查找出发生OOM的原因.

    dump内存方法

    a、假设配置了-XX:+HeapDumpOnOutOfMemoryError, 在发生OOM的时候会在-XX:HeapDumpPath生成堆的dump文件。

    b、手动 jmap ----------- jmap -dump:format=b,file=file_name pid

    3、线程block、线程数暴涨

    jstack -l pid |wc -l

    jstack -l pid |grep "BLOCKED"|wc -l

    jstack -l pid |grep "Waiting on condition"|wc -l

    线程block问题通常是等待io、等待网络、等待监视器锁等造成,可能会导致请求超时、造成造成线程数暴涨导致系统502等。

    假设出现这样的问题,主要是关注jstack 出来的BLOCKED、Waiting on condition、Waiting on monitor entry等状态信息。

    参考 https://www.cnblogs.com/mfmdaoyou/p/7349117.html

    五、事务相关

    可重复读的问题

    A事务执行先读操作1,读到X=1,B事务更新X=2,A依然读取之前的版本,这时候A设置X=3,其实A是没法设置的,因为B还未提交未释放行锁,所以问法有问题。

    六、数据库

    mysql底层数据结构、es底层数据结构(term),mysql引擎类型,二者区别(支持事务方面、存储方面、范围查询方面、全文搜索方面(myisam支持))

    七、算法

    1、快排,复杂度(log2 n~n^2)如何避免出现n^2(随机找一个数,不找第一个)

    2、找一个数组(n个)中第K大的值,复杂度kn

    3、插入排序,复杂度O (n^2),发扑克。

    八、其他

    1、hbase与mysql区别

    a、hbase天然分布式,mysq适合l单点撑

    ------------------------------------------------

    相关文章

      网友评论

          本文标题:面试流水(一)

          本文链接:https://www.haomeiwen.com/subject/gcoqqhtx.html