首页 > 笔经面经 > 2021Java后端实习春招面试高频考点

2021Java后端实习春招面试高频考点

头像
MOMENTUMxx
编辑于 2021-05-10 20:22:23 APP内打开
赞 10 | 收藏 143 | 回复0 | 浏览3437

Java后端面经

项目要考虑:做了啥?/有哪些贡献?有哪些难点?怎么解决/实现的?为什么选这个技术不用其他?/跟其他技术对比的优劣势?达到了什么指标?

阿里新零售供应链一面凉经

(针对项目

第一个项目

1、秒杀系统是怎么设计和实现的?

2、为什么用redis?(原理)

3、rabbitmq原理,怎么实现你写的功能?

第二个项目

1、介绍一下做了什么

2、为什么要用字典树,字典树的优缺点?

(数据库)

1、数据库在设计一张表时要考虑什么?

2、索引是什么?怎么实现的?B树和B+树的区别?索引必须是主键吗?(主键索引/聚簇索引和非主键索引/非聚簇索引)主键必须有吗?索引一定生效吗?(要答索引失效的几个情况)

3、mysql的数据类型

算法

1、交换左右子树

2、翻转链表

(jvm)

1、讲讲内存分区,每个分区是干什么的?

2、CMS、G1垃圾收集器的特点

(数据结构)

1、ArrayList和LinkedList的区别和使用场景,Linkedlist插入元素的两种方式(头插、尾插、中间插)

2、hashMap底层?红黑树特点?跟二叉树区别?hashMap怎么解决哈希冲突?

自己谈谈还有什么了解的?

阿里云网络一面凉经

对云了解多少?

(针对项目

1、为什么用redis不用mysql/Map?/redis和mysql有哪些区别?

2、rabbitmq怎么控制并发的?

3、feign用在什么地方?

4、gateway用来做什么?怎么做的?

5、你用到了压测和性能监控,是怎么提升系统性能的?(业务和非业务)

3、锁/分布式锁/Linux原生锁解决的是什么问题?
(操作系统)

1、进程和线程的区别?(要答出内存角度)进程之间能否相互通信?线程呢?

(数据结构)

1、知道哪些数据结构?

2、HashMap底层是什么?展开后回答红黑树的原理、特点,红黑树怎么查找一个元素?

算法

1、数组二分查找

2、两数之和

阿里云数据库一面(通过)

(面试官介绍部门业务)

(针对项目

1、Nacos的原理?怎么实现服务发现注册和配置的?

每个服务都会有一个nacos client,它用来和nacos server打交道 用来具体的服务注册 查询等操作,服务提供者在启动的时候会向nacos server注册自己,服务消费者在启动的时候订阅nacos server上的服务提供者。

2、秒杀业务进行时多个服务器争抢同一资源,此时redis的leader怎么去选?有一个服务器宕机释放不了锁怎么办?redisson怎么保证锁的释放?

3、服务之间通信用到RPC了吗?怎么保证接口幂等性?

用到了基于http的feign,SpringCloud对feign已经有了比较好的封装,还了解基于私有tcp协议的dubbo(阿里的)

如果不使用rpc框架,那么调用服务走http需要配置请求head、body,然后才能发起请求。获得响应体后,还需解析等操作,十分繁琐。Feign是一个http请求调用的轻量级框架,以Java接口注解的方式调用Http请求。Feign通过处理注解,将请求模板化,当实际调用的时候,传入参数,根据参数再应用到请求上,进而转化成真正的请求,封装了http调用流程。

(Java并发)

1、Synchronized和Lock的区别?

2、怎么实现多个线程都执行完再做一个操作?用JUC的哪个类?

3、线程池的使用?各个参数怎么用?达到线程池最大允许容量再进阻塞队列还是先进阻塞队列再达到线程池最大容量?

先进阻塞队列再达到线程池最大容量

4、线程有哪几种状态?(六种)Synchronized在多线程时每个线程是什么状态?

新生、运行、阻塞、等待、超时等待、终止

获得锁的线程阻塞,其他线程等待

(jvm)

1、内存分区?各个分区放的是什么?

2、java堆的结构,垃圾回收过程?

3、minorGC和MajorGC分别发生在什么时候?

minorGC:

1)Eden区满了 2)新创建对象的大小大于Eden所剩余空间

majorGC:

1)每次晋升到老年代的对象平均大小超过了老年代剩余空间

2)minorGC后存活的对象超过了老年代剩余空间

4、发现有许多对象都没有引用链向GCRoots,这时候该怎么办?

5、怎么对java堆此时的状态进行分析?

(数据结构)

1、HashMap底层?线程安全吗?不安全用什么?ConcurrentHashMap的实现原理

算法题

1、topK个元素,用快排的复杂度是多少?

时间复杂度期望为 O(n),最坏情况下的时间复杂度为 O(n2);

空间复杂度为递归调用的期望深度 O(logn)

(反问环节)

1、觉得我表现怎么样?

2、实习生怎么培养?有没有人带?

3、HC有多少?转正率?

阿里云智能云网络一面(负载均衡、组网)(通过)

(自我介绍)

(Java基础)

1、创建一个对象后会发生什么?如A a = new A();

从内存、构造方法考虑...

(JVM)

1、描述minorGC和majorGC/fullGC的过程?

(数据结构)

1、HashMap底层原理?元素达到阈值后会做什么?怎样能让扩容时间短?为什么HashMap的长度都是2的幂次?

让扩容时间变短的方法是取余操作变成与操作,参考https://blog.csdn.net/fightee/article/details/106272982

HashMap长度是2的幂次的原因是在取余操作中如果除数是2的幂次则等价于与其除数减一的与操作,而与操作运算的性能更高

(数据库)

1、MySQL的索引是什么?怎么实现的(有哪几类)?说一下什么是B+树?

2、MySQL的join是什么?left join和right join有什么区别?查出来的结果分别是什么?

(网络)

1、输入一个网址后干了什么?从七层模型考虑?从时序考虑先发什么后发什么?

https://blog.csdn.net/kongmin_123/article/details/82555936

(并发)

1、Java中有哪些锁?Synchronized的底层原理?Lock锁又分为哪几种?

Synchronized的底层原理参考https://cloud.tencent.com/developer/article/1465413

2、一个线程写,多个线程读,应该用什么锁?

写线程用写锁(独占锁、排他锁),读线程用读锁(共享锁)

3、线程池解决了什么问题?

算法

1、链表中的节点k个一组翻转

蚂蚁金服聊天

(并发)

1、死锁产生的条件?描述一下什么情况会产生死锁?

互斥、不剥夺、循环等待、请求和保持

2、进程和线程的区别?各自的通信方式?

(计算机网络)

1、描述一下TCP的三次握手?为什么不二次、四次?

(Java基础)

1、AOP原理?IOC原理?

总结:要加强408专业课的学习,进一步扎实Java基础!

阿里云通信一面(通过)

(自我介绍,实验室做什么的)

(操作系统)

1、什么是中断?中断触发过程?

2、寄存器是做什么的?PC指针寄存器(程序计数器)是做什么的?

寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和地址。

作用:1)可将寄存器内的数据执行算术及逻辑运算2)寻址3)可以用来读写数据到电脑的周边设备。

3、进程和线程在内存占用上的区别?线程有无独立堆栈?

进程有独立的内存空间,多个线程共享相同的内存空间

线程有独立的栈,没有独立的堆,堆通常与进程相关,每一个线程有自己的栈,访问共同的堆

4、堆和栈的区别?

1)栈由系统自动分配,而堆是人为申请开辟;

2)栈获得的空间较小,而堆获得的空间较大;

3)栈由系统自动分配,速度较快,而堆一般速度比较慢;

4)栈是连续的空间,而堆是不连续的空间。

5、什么是实时操作系统?Linux是实时的吗?windows呢?

指当外界事件或数据产生时,能够接受并以足够快的速度予以处理。

Linux和windows都不是实时

(JVM)

1、JVM是做什么的?

JVM是java字节码执行的引擎,还能优化java字节码,使之转化成效率更高的机器指令。

2、Java垃圾回收为什么要引入分代?

(Java基础)

1、Java是解释性还是编译性语言?

既是解释性语言(需要由编译器编译为.class字节码文件),又是解释性语言(需要由JVM读一行执行一行,由解释器解释为操作系统能执行的命令)

Java的编译器是javac.exe,解释器是java.exe

参考https://blog.csdn.net/qzc70919700/article/details/72515022

2、为什么说Java是跨平台的?

java对多种操作系统有不同的JVM

3、为什么引入Hash?好处是什么?

简称散列算法,是将一个大文件映射成一个小串字符。与指纹一样,就是以较短的信息来保证文件的唯一性的标志,这种标志与文件的每一个字节都相关,而且难以找到逆向规律。

好处:(1) 在庞大的数据库中,由于哈希值更为短小,被找到更为容易,因此,哈希使数据的存储与查询速度更快。

(2) 哈希能对信息进行加密处理,使得数据传播更为安全。

4、能不能有一个类叫做String?能的话创建对象的时候用哪个?系统的还是自定义的?

可以,优先使用自定义的,需要加上包名来进行区分

5、AOP的原理?什么是动态代理?怎么实现?

动态代理参考:https://zhuanlan.zhihu.com/p/50777496

6、反射的原理?

(数据结构)

1、HashMap底层实现?线程安全吗?不安全用什么?jdk1.8对ConcurrentHashMap在线程安全上做的优化?

2、堆和栈的区别?

(计算机网络)

1、TCP三次握手为了什么?

2、TCP/IP的五层是什么?

物理层、数据链路层、网络层、传输层、应用层

3、什么是TCP的滑动窗口?

https://blog.csdn.net/yao5hed/article/details/81046945

4、常见的传输层协议?应用层协议?

传输层:TCP、UDP

应用层:HTTP、HTTPS

5、TCP和UDP的比较?

(数据库)

1、数据库的索引是什么?为什么引入索引查找变快?

2、数据库连接池解决什么问题?用的什么协议?为什么?

资源复用,提高响应速度,便于管理

TCP,因为TCP是面向连接的可靠传输

3、事务的隔离级别?脏度是怎么产生的?

项目

1、分布式系统下redis集群某一台机器挂了或者整个集群挂了怎么办?

(其他)

1、怎么再大量文本里面匹配一个字符串?百度怎么做到输入一个关键词查出含关键词的相关内容?

2、什么是ES的倒排索引表?

3、读过什么开源项目源码

(不足)

1、研究生期间的工作?别人听不懂不怕,得体现你没白读

算法

1、两数之和

阿里云通信二面(通过)

(java基础)

1、final修饰的方法可以重写吗?static呢?

(框架)

1、springboot的启动加载过程和自动配置流程?

(计算机网络)

1、HTTP请求的过程?

(JVM)

1、fullGC发生在什么时候?fullGC的过程?

项目

1、为什么要用RabbitMQ?

2、怎么实现商品不会超扣?

3、远程调用服务超时怎么办?

4、如何保证商品只上架一次?分布式锁锁的是什么?

(并发)

1、Java中的多线程是如何实现的?

2、自己实现一个线程池需要考虑什么?

腾讯PCG一面凉经

(计算机网络)

1、发送一个网址后发生了什么?

2、DNS解析用的是什么协议?

3、TCP的拥塞控制怎么实现的?滑动窗口怎么解决问题的?

4、TCP的四次挥手过程是怎么样的?

(操作系统)

1、进程间通信的几种方式有什么?分别适用什么场景?

2、socket怎么实现的?client端和server端分别是怎样创建socket的?

3、进程、线程、协程的区别是什么?

(Linux)

1、Linux的启动过程?

2、有用过dump抓包的命令吗?

3、说几种Linux的常见命令,查看网络状态用什么命令?

(数据库)

1、常见的数据库引擎有哪几种?都有什么特性?(主要说Innodb)该怎么选型?

(数据结构)

1、HashMap在JDK1.8为什么要将链表换成红黑树?原因除了查找效率高之外还有什么?

2、HashMap什么条件下要扩容?扩容要进行什么操作?容量扩大为原来的多少?

3、1.8下的ConcurrentHashMap怎么实现的?Synchronized锁的是什么?是整个数据结构吗还是锁的是数组或链表中的一个?

4、JDK1.8下锁的几种状态是什么?(无锁、偏向锁、轻量级锁、重量级锁)

腾讯PCG微视一面凉经

(Java基础)

1、Java的异常体系是怎样的?

2、重载和重写是什么?Java的方法分派是什么?

(数据结构)

1、ArrayList和LinkedList的区别?ArrayList的初始长度?

2、HashMap和HashTable的区别?哪个可以为空?(key或value)

3、ConcurrentHashMap的实现原理JDK1.7和JDK1.8分别是什么?

4、HashMap的链表变成红黑树的阈值是多少?(8)红黑树退化成链表的阈值是多少?(6)

(并发)

1、volatile的特点?是线程安全的吗?

2、ThreadLocal的原理?

3、java线程池的原理?submit一个task以后进行什么操作?

4、Java中有哪几种锁?synchronized和Lock的区别?

5、Lock的底层原理AQS是什么?

(操作系统)

1、Thread中interrupt()interrupted()和isInterrupted()的区别

(JVM)

1、JVM的内存分区?

2、有哪几种引用?GC时的生命周期是怎样的?

3、GC算法有哪些?

4、垃圾收集器有哪些?讲讲CMS的原理?要进行几次stop the world?

5、类加载机制?

(数据库)

1、事务的隔离级别?分别解决了什么问题?

2、spring事务中的传播行为?

3、Mysql的引擎有哪几种?各自的使用场景?

4、Mysql索引用的是什么数据结构?有哪些优点?

5、Mysql在一条语句执行很慢的时候如何调优?

(框架)

1、spring的AOP的原理是什么?

2、Mybatis中的#和$分别是什么意思?实际用的是哪个?(#)

3、Mybatis中的xml如何关联到实际的sql执行语句?

4、什么是Mybatis的一级缓存和二级缓存?

5、ServiceA中methodA调用ServiceB中methodB,有一条sql执行失败了,那么ServiceA中methodA还能继续往下执行吗?还是回滚呢?

算法

1、从上到下打印二叉树每一层最右端的节点

美团到店事业群二面通过

1、docker是什么?有哪些功能?和虚拟机有什么区别?进程隔离机制是怎样的?

2、git什么情况会发生冲突?

3、spring的bean的作用域?生命周期?可见范围?

4、linux权限管理基于什么?

5、TCP如何保证通信过程的可靠?

6、电脑版微信登录时的二维码包含哪些信息?

7、Serializable的serialVersionUID是做什么的?

8、代码重复判断怎么实现?(提交的两份代码相似度太高)

diff逐行/逐字比较

9、重构代码要从哪些方面来考虑?(面向对象角度)

面向接口编程、单一职责:一个类只做一件事、高内聚低耦合

10、explain怎么分析执行计划?

11、负载均衡如何实现?

小米直播一面通过

1、HashMap扩容后元素的位置变化?

由于数组的容量是以2的幂次方扩容的,那么一个Entity在扩容时,新的位置要么在原位置,要么在原长度+原位置的位置

2、锁升级/降级过程?(无锁、轻量级锁、重量级锁)

3、redis如何保证锁的释放?(A加锁过程中B进来加锁,A业务完成后,怎么保证释放的锁是A而不是B?)

加上id,谁加锁谁释放,做校验

4、AOP切面的使用场景?

5、Innodb非聚簇索引为啥不存地址?(考虑MyIASM和Innodb存储的区别)

6、filter、selvlet、litenser的原理及产生作用的顺序?

7、新生代为什么8:1:1?

8、各种垃圾收集算法的实现方式和优缺点?

9、输入字符OSI七层怎么走?

10、各种排序的使用场景?

11、数据链路层和物理层的协议?

字节跳动教育K12一面凉经

1、SSL/TLS怎么加密?

2、mysql可重复读的实现原理?

使用一种叫MVCC的控制方式 ,即Mutil-Version Concurrency Control,多版本并发控制,类似于乐观锁的一种实现方式,为每行数据存储一个版本号,当数据被修改时,版本号加1

3、有一个抛硬币的函数,得到正面1的概率是60%,得到反面的概率是40%,用这个函数实现一个函数,使得得到正面和反面的概率都是50%,可以对原始函数多次调用

//10和01的概率相等,都是5/26
public int newCoin() {
    //10当作1(硬币朝上)
    if (coin() == 1 && coin() == 0) {
        return 1;
    } else if (coin() == 0 && coin() == 1) {
        //01当作0(硬币朝下)
        return 0;
    } else {
        //其他情况舍弃
        return newCoin();
    }
}

4、给一个链表奇数节点升序,偶数节点降序,将这个链表变成整体有序的

微软C+AI初面

1、二叉搜索树给定一个target,找到小于等于target的最大值floor和大于等于target的最小值ceiling(target不一定存在于二叉搜索树)

class Solution {
    private int floor = 0, ceiling = 0;

    public int[] findFloorAndCeiling(TreeNode root, int target) {
        if (root == null) {
            return new int[2];
        }
        findHelper(root, target);
        return new int[]{floor, ceiling};
    }

    private void findHelper(TreeNode root, int target) {
        if (root == null) {
            return;
        }
        if (root.val == target) {
            floor = root.val;
            ceiling = root.val;
        } else if (root.val > target) {
            ceiling = root.val;
            findHelper(root.left, target);
        } else {
            floor = root.val;
            findHelper(root.right, target);
        }
    }
}

2、腐烂的橘子

3、最长有效括号

更多模拟面试

0条回帖

回帖
加载中...
话题 回帖

推荐话题

相关热帖

笔经面经近期热帖

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

近期精华帖

热门推荐