2021届Java开发求职-------面试实战之阿里实习

介绍

网上完整的少(都是一面二面) 我就挑一些吧

1、 synchronized和lock的区别

synchronized是java中的一个关键字,也就是说是java内置的一个特性;Lock是一个java接口,通过这个接口可以实现同步,使用Lock时,用户必须手动进行锁的释放,否则容易出现死锁。ReentranLock是Lock的唯一实现类,它扩展了锁的功能,分为公平锁和非公平锁,本人文章:Java多线程相关

2、 spring bean加载

bean的生命周期:
1.bean对象的实例化

2.封装属性,也就是设置properties中的属性值

3.如果bean实现了BeanNameAware,则执行setBeanName方法,也就是bean中的id值

4.如果实现BeanFactoryAware或者ApplicationContextAware ,需要设置setBeanFactory或者上下文对象setApplicationContext

5.如果存在类实现BeanPostProcessor后处理bean,执行postProcessBeforeInitialization,可以在初始化之前执行一些方法

6.如果bean实现了InitializingBean,则执行afterPropertiesSet,执行属性设置之后的操作

7.调用执行指定的初始化方法

8.如果存在类实现BeanPostProcessor则执行postProcessAfterInitialization,执行初始化之后的操作

9.执行自身的业务方法

10.如果bean实现了DisposableBean,则执行spring的的销毁方法

11.调用执行自定义的销毁方法。

3、 介绍一下nio

本人文章,非阻塞式IO介绍
我觉得面试考这个应该只是问下了解不了解

4、 双亲委派机制

JVM类加载

5、 两个String类如何区分

每一个类都是由这个类本身和其被加载的类加载器决定

6、 Retrantlock aqs底层

锁是面向使用者的,定义了用户调用的接口,隐藏了实现细节;
AQS是锁的实现者,屏蔽了同步状态管理,线程的排队,等待唤醒的底层操作。
锁是面向使用者,AQS是锁的具体实现者
背后复杂的线程排队,线程阻塞/唤醒,如何保证线程安全,都由AQS为我们完成了

7、 反射的原理

https://blog.csdn.net/weixin_42724467/article/details/84311385 这篇文章写得不错

8.hashmap如何解决散列冲突

链表法和开放寻址法:链表法就是将相同hash值的对象组织成一个链表放在hash值对应的槽位;开放地址法是通过一个探测算法,当某个槽位已经被占据的情况下继续查找下一个可以使用的槽位

9.hashmap扩容的时候,链表尾部的节点怎么处理的?(hashmap扩容过程)

美团技术团队HashMap 这个写的比较好

10.Spring IOC的原理

SpingIOC原理

11.设计模式

。。

12.行转列。写一个sql,表里有3行数据,如何查询出这些数据并以一行的形式展现出来?比如一个字段,第一行a,第二行b,查询出来是一行结果第一列a,第二列b(不会……)

在这里插入图片描述

//case when语句使用
select country, sum(case when type='A' then money end) as A,  
sum(case when type='B' then money end) as B,  
sum(case when type='C' then money end) as C  
from table1  
group by country  
13.那换一个简单一点的吧,a和b两个表,查出a表有b表没有的数据行。
select * from a where id not in(select id from b)

第一种 使用not in,目测效率比较低

select a.* from a left join b on a.id=b.id where isnull(b.xxx)

左外链接查询

14、数据库的事务隔离知道吗?

mysql数据库四种隔离级别:读未提交,读已提交,可重复读,串行化

15、数据库的索引的数据结构。

B+树,这里估计会问原因是什么,答磁盘IO吞吐量和B+树和B树区别

16、网络输入一个域名会发生什么?

这个本人文章有比较全的:输入一个域名会发生什么

17、滑动窗口是拿来干嘛的,具体是怎样的?

流量控制:: TCP 连接的每一方都有固定大小的缓冲空间,TCP的接收端只允许发送端发送接收端缓冲区能接纳的数据。当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失。TCP 使用的流量控制协议是可变大小的滑动窗口协议

18.try 里面return了finally还会执行吗?执行顺序是?

会执行的,在方法return动作之前,return语句执行之后,若finally中再有return语句,则此方法以finally的return作为最终返回,若finally中无return语句,则此方法以try的return作为最终返回。

19.HashMap底层,多线程操作导致死循环问题

HashMap死循环 jdk1.7

20.如果HashCode一样,equal不一样怎么办

转化为hash冲突问题如何解决:rehash,开放定址,拉链法(hashmap),建立公共溢出区

21.ConcurrentHashMap底层 讲了JDK1.7 和 JDK1.8之后的

老遇到hashmap我都烦了,找时间整理下hashmap的

22.ClassLoader 讲了双亲委派机制,类加载可以用来干啥

类加载器的作用是将.java文件编码成.class文件,通过在方法区生成一个class对象来调用它

23.char int float long double几个字节

char 16位2个字节
byte 8位1个字节
short 16位2个字节
int 32位4个字节
long 64位8个字节
float 32位 4个字节
double 64位8个字节

24.守护线程

守护线程是一种特殊的线程,就和它的名字一样,它是系统的守护者,在后台默默完成一些系统性的服务,比如垃圾回收线程,JIT线程就可以理解为守护线程。
与守护线程相对的是用户线程,用户线程可以认为是系统的工作线程,它会完成这个程序要完成的业务员操作。如果用户线程全部结束,则意味着这个程序无事可做。守护线程要守护的对象已经不存在了,那么整个应用程序就应该结束。因此,当一个Java应用内只有守护线程时,Java虚拟机自然退出。

25.线程 sleep和wait的区别,sleep的时候CPU在干啥

sleep不释放锁,wait释放锁,sleep时会让出CPU时间片

26.Volatile的作用,底层实现

保证可见性,不保证原子性
底层原理:汇编语句 lock
修改volatile变量时会强制将修改后的值刷新的主内存
lock前缀指令其实就相当于一个内存屏障。内存屏障是一组处理指令,用来实现对内存操作的顺序限制。volatile的底层就是通过内存屏障来实现的

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值