元戎启行Java后端一面凉经

背景:985本硕,快手实习

  1. 自我介绍

  2. Integer i = new Integer(100);
    Integer j = new Integer(100);
    (i == j) ? false  // 只有valueOf才会使用常量池(-128~127),new Integer会直接创建新对象
    
    String a = "abc";
    String b = "a" + "b" + "c";  // 经过编译器优化成了String str = “abc”
    (a == b) ? true  // 字符串常量池,字面量相同的引用也相同
    
    String c = "abcd";
    String d = a + "d";  // 经过编译器优化成了StringBuilder
    (c == d) ? false

    回答输出结果,为什么?

  3. String b在JVM中具体是怎么创建的?

    栈中创建一个对String类的对象引用变量b,然后通过符号引用去字符串常量池里找有没有”abc”,如果没有,则将”abc”存放进字符串常量池,并令str2指向”abc”,如果已经有”abc” 则直接令b指向“abc”。“abc”存于常量池在 编译期间完成 。
  4. JVM中运行时数据区都包含那些部分?

    新生代内存(Young Generation) (Eden 区、两个 Survivor 区 S0 和 S1)
    老生代(Old Generation)
    永久代\元空间
  5. 堆是干嘛的?方法区是干嘛的?虚拟机栈是干嘛的?

  6. 讲讲堆分为那些部分?每个部分都是啥?

  7. 讲讲垃圾收集?

  8. 一个对象是怎么从新生代流转到老年代的?

  9. survive0区域、survive1区域,具体讲讲?

    大部分情况,对象都会首先在 Eden 区域分配,在一次新生代垃圾回收后,如果对象还存活,则会进入 S0 或者 S1,并且对象的年龄还会加 1(Eden 区->Survivor 区后对象的初始年龄变为 1),当它的年龄增加到一定程度(默认为 15 岁和年龄中位数的最小值),就会被晋升到老年代中。对象晋升到老年代的年龄阈值,可以通过参数 -XX:MaxTenuringThreshold 来设置。
    
    HotSpot实现的复制算法流程如下:
     1. 当Eden区满的时候,会触发第一次Minor gc,把还活着的对象拷贝到Survivor From区;当Eden区再次触发Minor gc的时候,会扫描Eden区和From区域,对两个区域进行垃圾回收,经过这次回收后还存活的对象,则直接复制到To区域,并将Eden和From区域清空。
     2. 当后续Eden又发生Minor gc的时候,会对Eden和To区域进行垃圾回收,存活的对象复制到From区域,并将Eden和To区域清空。
     3. 部分对象会在From和To区域中复制来复制去,如此交换15次(由JVM参数MaxTenuringThreshold决定,这个参数默认是15),最终如果还是存活,就存入到老年代。
  1. Java线程有那些状态,各个状态是怎么流转的

  2. 如果执行sleep方***进入什么状态

  3. 线程同步机制了解嘛?

  4. Lock有那些具体实现?

  5. Synchronize和RetreentLock有什么区别?分别会在什么情况下使用?

  6. 讲讲Synchronize锁升级?

  7. 讲讲CAS的原理?会遇到什么问题?怎么解决?

  8. 线程安全的集合类有那些?

  9. 如果我想要一个线程安全的List,应该怎么做?

  10. 线程池了解嘛?有哪些核心参数?执行流程是什么?

  11. 内存有限,快速找到top10000,怎么办?

  12. 数据量极大,找到一个数在其中是否存在,怎么做?

  13. 布隆过滤器的原理?优缺点?

  14. 如果让你实现布隆过滤器的hash算法,怎么写?

    k(hash算法个数) = -(ln p)/ (ln 2)  p为误检率
  1. Mysql事务讲一讲

  2. Mysql是如何实现事务的四大特性的?

  3. redo log、undo log、bin log都是干啥的?

  4. Innodb的索引的数据结构是什么?

  5. B树和B+树的区别是什么,为什么使用B+树?

  6. 聚簇索引和非聚簇索引的区别是什么?

  7. 非主键索引是聚簇索引吗,怎么实现的?讲讲回表?

  8. select a from database where b = 1 order by c,如果是你该怎么建立索引?为什么这么建立?

  9. tcp、udp有什么区别?有什么优缺点?

  10. tcp比udp效率高?为什么tcp比udp效率高?

总结:面了一个小时八股,我写的答案的都是当时没答出来的......

#元戎启行##面经##23届提前批#
全部评论
元戎的面试是真的有点东西的,不直接考八股,写段代码问你对不对,然后再讲相关的八股原理
1 回复 分享
发布于 2022-07-22 13:36
收藏了
1 回复 分享
发布于 2022-07-20 15:51
面经mark
点赞 回复 分享
发布于 2022-09-26 02:56 浙江
老哥33那里,tcp和udp到底那个效率高,不应该是udp嘛
点赞 回复 分享
发布于 2022-08-22 00:53 广东
大佬,元戎没看到后端职位啊,是软件工程师吗?
点赞 回复 分享
发布于 2022-08-02 14:21
和我问的一半以上都一样感觉
点赞 回复 分享
发布于 2022-08-01 10:07
老哥,,想请教一下第31题那个sql。如何建索引是怎么考虑的呢?
点赞 回复 分享
发布于 2022-07-27 19:08
老哥什么时候投的呀,14号投的现在还是初筛
点赞 回复 分享
发布于 2022-07-25 14:09
这不是基本都答上来了么, 这也挂???
点赞 回复 分享
发布于 2022-07-25 10:23
可内推zoom,内推码见主页
点赞 回复 分享
发布于 2022-07-24 14:17
感谢
点赞 回复 分享
发布于 2022-07-21 17:04

相关推荐

上周组里招人,我面了六个候选人,回来跟同事吃饭的时候聊起一个让我挺感慨的现象。前三个候选人,算法题写得都不错。第一道二分查找,五分钟之内给出解法,边界条件也处理得干净。第二道动态规划,状态转移方程写对了,空间复杂度也优化了一版。我翻他们的简历,力扣刷题量都在300以上。后三个呢,就有点参差不齐了。有的边界条件没处理好,有的直接说这道题没刷过能不能换个思路讲讲。其中有一个女生,我印象特别深——她拿到题之后没有马上写,而是先问我:“面试官,我能先跟你确认一下我对题目的理解吗?”然后她把自己的思路讲了一遍,虽然最后代码写得不是最优解,但整个沟通过程非常顺畅。这个女生的代码不是最优的,但当我问她“如果这里是线上环境,你会怎么设计’的时候,她给我讲了一套完整的方案——异常怎么处理、日志怎么打、怎么平滑发布。她对这是之前在实习的时候踩过的坑。”我在想LeetCode到底在筛选什么?我自己的经历可能有点代表性。我当年校招的时候,也是刷了三百多道题才敢去面试。那时候大家都刷,你不刷就过不了笔试关。后来工作了,前三年基本没再打开过力扣。真正干活的时候,没人让你写反转链表,也没人让你手撕红黑树。更多的是:这个接口为什么慢了、那个服务为什么OOM了、线上数据对不上了得排查一下。所以后来我当面试官,慢慢调整了自己的评判标准。算法题我还会出,但目的变了。我出算法题,不是想看你能不能背出最优解。而是想看你拿到一个陌生问题的时候,是怎么思考的。你会先理清题意吗?你会主动问边界条件吗?你想不出来的时候会怎么办?你写出来的代码,变量命名乱不乱、结构清不清楚?这些才是工作中真正用得到的能力。LeetCode是一个工具,不是目的。它帮你熟悉数据结构和常见算法思路,这没问题。但如果你刷了三百道题,却说不清楚自己的项目解决了什么问题、遇到了什么困难、你是怎么解决的,那这三百道题可能真的白刷了。所以还要不要刷LeetCode?要刷,但别只刷题。刷题的时候,多问自己几个为什么:为什么用这个数据结构?为什么这个解法比那个好?如果换个条件,解法还成立吗?把刷题当成锻炼思维的方式,而不是背答案的任务。毕竟面试官想看到的,从来不是一台背题机器,而是一个能解决问题的人。
牛客51274894...:意思是光刷力扣还不够卷
AI时代还有必要刷lee...
点赞 评论 收藏
分享
评论
11
87
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务