实习:
- 简单介绍了下工作,大概5分多钟,没有深入问
Java基础:
1. String str = "123"会创造几个对象
2. Java内存区域有哪些
3. 详细说一下各个区域的作用(答得一般,语言没组织好)
4. JVM的配置参数有自己设置过吗,知道哪些
5. 如果我设置了Xmx为1G,但是实际看Java进程用了1.3G,你觉得多出来的0.3G可能来自哪些部分
6. 还有哪些可能,可以结合你之前说过的Java内存区域来说下(我猜的是Native方法占用,不知道对不对)
7. 如果我自己写一个String类,然后new一个String,你觉得new出来的对象是什么?能自己重写String吗,为什么?如果我用了一个框架,比如Springboot里的一个包下的一个类,我能重写一个名字跟他一模一样的吗,Java怎么知道到底用的是哪个类
8. 那你知道Java的类加载过程吗,说一下过程(这里意识到面试官可能在提示我,于是就说上个问题可能跟双亲委派机制有关)
9. 那你介绍一下双亲委派机制吧,并说说可能跟刚刚那个问题有什么关系
10. 你是如何去学习JVM的,你还知道JVM的哪些知识
11. 你知道哪几个垃圾收集器呢,挑一个你最熟悉的给我介绍一下吧
12. 你项目或实习过程中有用到过哪些Collection,你看过其中哪些源码
13. 你介绍一下ConcurrentHashMap吧,以JDK8为例,你说说为什么它线程安全,它是如何实现的
14. 为什么既要用synchronized又要用CAS,哪些地方用了CAS
15. 那为什么要用synchronized呢?
16. 锁升级过程说一下
做题:
1. 手写单例模式,先介绍一下单例模式,用懒汉式需要考虑什么问题。写完后问为什么要用DCL,为什么要用volatile,为什么要用synchronized,为什么要锁住类的.class
2. 两个字符串都由数字组成,如何判断一个字符串(自身、排序结果)是另一个字符串的一部分(子串)
比如:a = "213", b = "012345",则a的排序(123)是b的一部分,返回true
感受:
场景题好难,很多答案说出去我自己心里都没底,不过面试官人还是很好的(就是没开摄像头),给了很多引导,如果没过也只能说明我太菜了。