最新年份2022四月java高级面试题(含答案)简直牛×

489 篇文章 72 订阅
42 篇文章 1 订阅

本人是底层 211 本科,刚毕业,⽆科研经历,但是有些项⽬经历。

在国内监控行业某头部企业做过一段时间的实习。

想着投下字节,可以积累⼀下⾯试经验和为金三银四面招做准备。投了简历之后,过了一段时

间,HR 就打电话跟我约时间,

说明一下,我投的是北京 office。

以下就是一个面试的全部过程,分享出来给感兴趣的朋友们一看。

一面:

阿里巴巴面试答案文末可以领取!

1. 触发新生代GC,如果存活对象总量大于survivor区容量,咋办

2. 如果任务很多,线程池的阻塞队列会撑爆内存的哪个区域

3. 栈在堆上吗

4. GC root有哪些

5. 实例变量可以是GC root吗

6. 了解哪些GC算法,介绍一下

7. 给个场景,问怎么设置JVM参数

8. 问了很多SQL调优,各种语句能不能命中索引,能命中哪些,怎么优化

9. MySQL的一张表里有三个字段ABC,A的种类有1000种,B有1W种,C有10W种,ABC的联合索引怎么设置,怎么使用

10. Mybatis # 和 $ 的区别

11. Mybatis接口里的方法和XML里的SQL名可以不一样吗,不一样怎么办

12. Mybatis是如何完成SQL和接口里的方法的映射的(我回答了怎么配置),那你知道它是怎么实现的吗

13. 介绍下Spring的 IOC和AOP

14. 服务器给客户端发送IO流的过程

15. IO和NIO了解多少

16. 线程都有哪些状态,怎么转换的

17. Notify和notifyAll的区别

18. 介绍线程池,不同线程池区别在哪,你平时怎么使用线程池的

19. MySQL索引的数据结构

20. B+树了解多少

21. Cookie和SessionId说一下

22. 锁是怎么实现的

23. Synchronized同步块和synchronized方法,分别锁的是什么

24. 单例模式,饿汉和懒汉分别存在的问题

25. Volatile是怎么实现可见性的

26. 介绍下JMM

27. Happen before了解吗

28. A happen before B,意味着A一定在B之前执行吗

29. 你做过的最难的项目中,最难的任务是什么,怎么解决的

二面:

1. 看过哪些源码

2. Java都有哪些map,分别怎么实现的,具体讲

3. 除了LinkedHashMap,你还知道哪些有序map

4. ConcurrentHashMap讲一讲

5. 为什么要有线程池

6. 线程池有哪几类?有什么区别?有哪些参数?拒绝策略有哪些

7. 阻塞队列都有哪几种,有什么区别

8. Java的反射怎么理解

9. Spring的IOC和AOP怎么理解

10. Spring项目启动的时候会加载哪些资源,顺序是怎么样的

11. 浏览器输入一个URL,会发生什么,整个过程说一下

12. Http讲一讲,请求有哪些内容,响应有哪些内容

三面(leader面):

1. MySQL的高可用了解多少,高性能了解多少

2. 淘宝有1000T的数据,单机存不下,怎么办?有没有办法只访问一次服务器?一致性Hash懂多少

3. MySQL和redis有啥区别

4. MySQL数据备份怎么做

5. Redis底层原理会多少

6. Redis为啥比MySQL快

7. Redis RDB可能会丢失数据,怎么办

8. Redis AOF不也要把日志写到磁盘么,那和MySQL的IO有啥区别,凭啥Redis就快

9. Redis主从复制怎么做

10. 分布式缓存懂多少

11. 还知道其他NoSQL么

12. Java和C的优缺点说一下

13. 有没有用C写过底层

14. Java的G1回收器详细讲一讲

15. G1什么时候会stop the world

16. Linux操作系统有应用过吗

17. 对分布式和中间件掌握多少

18. 详细介绍下你的项目

四面:

1. 数据库索引常用的数据结构

2. Juc源码看过吗?锁的实现原理是什么

3. CAS能深入的说一下吗

4. 建造者模式说一下

5. 谈一谈笔试的心得(笔试分高)

6. 看过哪些书籍

7. 平时怎么学习的

五面(交叉面):

1. 介绍下项目,项目的来源,是自己一个人做的么

2. 登录验证怎么做的

3. 讲一讲ThreadLocal

4. ThreadLocal怎么避免线程污染

5. 点赞怎么实现的

6. Redis持久化方式

7. MySQL存储引擎区别

8. Myisam在只读场景下,为什么一般比InnoDB快

9. Mybatis怎么使用

10. Mybatis # 和 $ 的区别

11. Spring中BeanFactory和ApplicationContext的区别

12. Spring中bean的作用域有哪些,有什么区别

13. 说出一个原型作用域的具体应用场景

14. 学习过哪些设计模式,用过哪些设计模式

15. 生产者消费者模式讲一讲

16. 怎么实现阻塞队列

17. 学过Linux吗

18. 在Linux下,怎么查找一个目录下的所有文件,要求输出顺序按照文件的创建时间排序

19. 给你一堆学生的信息,包括学号和姓名,让你找出学号最靠前的10个人的姓名

20. PriorityQueue怎么实现的

21. 怎么求根号3(我说了二分法,用2的平方,1.5的平方,1.75的平方依次和3比较,缩小区间,直到达到精度要求)

22. 你这种求法太慢了,可以优化吗(我问:您是想问数值分析的知识么?面试官说:是的,你没学过数值分析么?)

23. 斐波那契数列,求第n项的值(答了递归和DP两种方式)

24. 如果数列长度100W,你的DP矩阵不是很大么?怎么优化?(答:用两个变量a,b记录前两个值,temp = a, a = b, b = a + temp,依次递推)

25. 一个时钟有时针分针和秒针,三针重合的最短时间间隔是多少?(完全没思路,只知道一小时内肯定不行,因为走得速度不一样,一圈内速度快的和速度慢的撞不上)

Spring全家桶(实战系列)

java SE

1.流程控制

程序本质是指令集合,程序设计过程可以简化为编写一系列指令的过程。

程序设计的三种基本结构分别为:顺序结构、选择结构、循环结构。这三种结构通过组合、嵌套,可以实现所有复杂的程序流程控制。

1.1顺序结构

解释:顺序结构就是按照解决问题一步步写出程序执行,当没有别的控制语句时,程序会按照从上到下逐行执行,这样的结构就称之为顺序结构。

int num =10;
System.out.println("我是第一行");
System.out.println("num:"+num);
System.out.println("我是第三行");
//运行结果
我是第一行
num:10
我是第三行

1.2选择结构

解释:当顺序结构无法满足程序决定运行那些步骤需求的时候,往往进一步的使用选择结构,而选择结构在Java语句中由if和switch语句来实现,分别代表条件分支语句和多分支语句。

1.2.1条件分支语句

解释:条件分支语句是根据条件表达式的真假来决定程序的走向。

书写格式1为:

if(条件表达式){

//执行代码块

}

书写格式2:

if(条件表达式){

//执行代码块1

}else{

//执行代码块2

}

书写格式3:

//嵌套格式

if(条件表达式1){

//执行代码块1

}else if(条件表达式2){

//执行代码块2

}else{

//执行代码块3

}

三种书写格式示例:

//格式1
int num=59;
if (num<60) {
System.out.println("不及格");
}
System.out.println("考核结束");
//格式2
int num1=59;
if (num1 >60) {
System.out.println("及格");
}else {
System.out.println("不及格");
}
System.out.println("考核结束");
//格式3
int num2=90;
if (num2==90) {
System.out.println("为直角");
}else if (num2>90) {
System.out.println("为钝角");
}else if (num2>180){
System.out.println("为周角");
}else if (num2==180){
System.out.println("为平角");
}else{
System.out.println("为锐角");
}

注意:

  • 条件表达式的结果必须时Boolean类型,当条件表达式结果为true时,执行if后的代码块。
  • 条件分支结构在嵌套使用的时候注意每一层条件判断的作用域。
  • 当有多个if时,else与离它最近的if相匹配。(就近原则)。
  • else if可以无限嵌套使用。
  • if else后面的花括号必须成对出现。
  • 在不执行break、continue的情况下,一个代码块做为一个整体逐步执行。
  • 1.2.2多分支语句
  • 理解:switch分支语句是根据表达式的值做出判断,决定执行哪一行的代码块。

运行流程:

switch分支语句先进行对条件表达式的值就行判断,然后根据switch后面的case值进行匹配从而决定执行那一块的代码块。如果没有任何与case值想匹配的话则执行default后面的语句。

正确的命名格式:

switch(表达式){

case 值1:

//执行代码块;

break;

case 值2:

//执行代码块;

break;

.......

default:

//执行代码块;

break;

}

特点:

  • switch表达式中可以使用,字节型(byte)、短整型(short)、整形(int)、字符串(String)、字符型(char),枚举。
  • 在jdk1.7后才添加了字符串。
  • default是可选的,如果没有的话,且没有case的常量值与switch语句中表达式值相匹配的话,switch不做任何操作。
  • case的穿透性:如果匹配的case或者default没有对应的break的话,程序会一直往下执行 知道遇到break或者放在switch语句最后的default的时候才会停止。
  • case后面的值不可以重复。

1.3循环结构

理解:

循环结构就是循环执行同一块代码的结构称之为:循环结构。循环结构分为两种有限循环和无限循环,常用的三种语句分别是while、for、do/while。

while命名格式:

while(条件表达式){

//循环体语句;

}

for命名格式:

for(初始化表达式;条件判断表达式;条件控制表达式){

//循环体语句;

}

do/while命名格式:

do{

//循环体语句;

}while(条件表达式);

运行机制:

先进行初始化表达式-->条件判断表达式-->为true执行循环体语句反之结束循环--

-->条件控制表达式-->条件判断表达式(直到为false的时候跳出循环)。

区别:

  • do/while和while前者无论条件判断语句是否成立都会先执行一次循环体语句,后者条件判断语句不成立时一句循环体语句都不会执行。
  • while和for区别:
  • 条件控制语句所控制的自增变量,因为归属for循环的语法结构中,在for循环结束后,就不能再次被访问到了
  • 条件控制语句所控制的自增变量,对于 while 循环来说不归属其语法结构中,在 while 循环结束
  • 后,该变量还可以继续使用

两种无限循环:

for(;;){
//循环体语句;
}
while(true){
//循环体语句;
}

1.3.1break和continue

break表示跳出循环体,continue表示跳出当前本次循环。

跳出循环还可以是条件判断语句为false的时候也会终止循环。

可以使用在选择结构和循环结构。

1.4随机数(Random)

理解:

会随机生成一些相同数据类型的不同的数值,而且还有可能会重复生成。

命名格式:

//导包
import java.util.Random;
public class 类名{
public static void main (String[]args){
//建厂或创建对象
Random 名称= new Random();
//产生随机数
数据类型 变量名 = 名称.next数据类型 (随机数的范围);//切记包左不包右
}
}

java Web

数据库

java Boot

数据结构与算法

JVM

中间件

@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringbootAmqpApplicationTests {

    @Autowired
    AmqpAdmin amqpAdmin;

    @Test
    public void create() {
        //创建交换器
        Exchange exchange = new DirectExchange("amqpAdmin.exchange");
        amqpAdmin.declareExchange(exchange);
        //创建队列:第二个参数表示是否持久化
        amqpAdmin.declareQueue(new Queue("amqpAdmin.queue", true));
        //创建绑定:参数(名称,绑定目的地,交换器,路由键,参数)
        Binding binding = new Binding("amqpadmin.queue", Binding.DestinationType.QUEUE, "amqpadmin.exchange", "amqp.haha", null);
        amqpAdmin.declareBinding(binding);
    }
}

计算机网络

总结

太多我就不全部罗列出来了 小编编写不易,请用你的小手给我 点赞+转发+关注 小信封回复暗号【444】即可领取完整java面试题与答案资料。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值