阿里巴巴农村淘宝暑假实习一面凉经

版权声明:转载请点赞,当然附上原文链接也很不错 https://blog.csdn.net/m0_37961948/article/details/88854013

 为什么选择SpringBoot,而不是用SSM呢?

没答出来,只是回答了集成度更高,一紧张都忘了说SpringBoot对其他框架管理起来很方便。

自己总结的答案

Spring经过多年的发展之后,已经变得很笨重,配置很是繁琐。

SpringBoot优点:

1. 配置容易:将Java程序员从繁琐的配置中释放出来。

2. 启动容易:因为其内置了servlet容器,降低了对环境的要求,只要机器有Java运行环境,就可以将其发布。

3. 成本更小:因为很多的配置都使用了SpringBoot默认的配置,可以减少程序员的维护成本,加快项目的开发进度。

启动类在哪?

我很清楚在哪,但是没有给面试官描述清楚,好气呀,自己语言表达能力怎么这么差??

必须在所有类的父包中。

 SpringBoot如何启动?

远古以前了解过,之后慢慢的忘完了,被问到的时候,只说了扯淡的什么通过main启动,然后启动内置servlet,然后就没了。

你了解Redis吗?

不太了解。

简单介绍一下TCP。

我对三次握手有些了解,对于四次挥手就不太行.

三次握手:

第一次握手:当我的电脑想要访问某一台服务器时,客户机先给服务器端发送一个特殊的TCP报文,这个报文的首部SYN比特被置为 1,客户机随机生成一个号码作为client_isn,放入报文中。客户端进入SYN_SENT状态。

第二次握手:服务器收到客户机的TCP包后,将自己的LISTEN 状态改为SYN_RECD状态,然后生成一个TCP报文,首部SYN比特被置为1,将seq 置为 刚生成一个自己的初识序号server_isn,将ACK 置为 client_isn + 1,发送给客户端。发送的这个报文又被成为SYN ACK 包.

第三次握手:客户机收到SYN_ACK包后,立刻生成一个报文,因为此时连接已经建立,所以SYN比特位置为0,将ACK = server_isn+ 1 发送这个TCP报文,然后客户机状态由 SYN_WAIT 状态改为 ESTABLISHED 状态。

最后: 当服务器收到客户机发送的确认的确认时,将自身状态由SYN_RECD改为ESTABLISHED 状态。

四次挥手:

理论上来说,服务器和客户机都可以主动结束,但一般情况下都是客户机主动申请断开。

第一二次挥手:客户机状态改变为FIN_WAIT_1 ,之后发送一个首部FIN比特为 1 的TCP报文;

                    服务器受到后变为CLOSE_WAIT状态。服务器接收并发还一个ACK报文。

第三四次挥手:服务器不管客户机受到ACK状态与否,都会发送一个首部FIN比特为 1 的TCP报文,服务器状态由CLOSE_WAIT转变为LAST_ACK,客户机接收到服务器的FIN包后会将自身状态改为TIME_WAIT,然后发送一个ACK包给服务器,如果处于TIME_WAIT的客户机又再次收到了服务器的FIN包,那么将重发一个ACK包。以确保TCP连接被正确释放,避免资源的浪费。

了解HashMap吗,介绍一下,线程安全吗?

HashMap 的底层是链表数组,初始容量是16,16的原因是HashMap使用的Hash法是&运算,所以2的幂次方更适合,当某个链表的长度大于8时,那么其将从一个链表变成一棵红黑树,因为此时可能是因为Hash算法效果过差。扩容时先申请二倍大小的数组,之后对原链表数组中的每个值进行reHash操作,重新分布。线程不安全,线程安全的是HashTable和ConcurrentHashMap。

那 HashMap 在高并发的情况下会发生什么情况?

这个我一点都不会233.

HashMap在1.7和之前的版本中,在高并发情况下,链表中可能会有环。

数组和链表的区别。

您问的是ArrayList吗?

数组。

数组的存取很快,但是容量不可变,而链表新增和删除都很快,但是查询很慢,即使在在LinkedList中,理论最快也需要O(n/2)的时间(双向,并且有头尾节点)。

数组的容量可变吗?

数组的容量是不可变的。

嗯?不可变吗?

您问的是数组还是ArrayList?

数组。

数组的容量一旦申请之后就不能再改变了。

那怎么才能可变?

使用类似于ArrayList的方式,对数组进行封装。

介绍一下归并排序.

我有些紧张,说成了快排,F**K。

描述快排:

可以提前打乱数组吗?

可以。

首先,随机打乱数组,因为如果不随机打乱数组,那么最差情况(逆序)下时间复杂度为O(n^2);

然后将第一位作为哨兵,比其小的放在其前面,比其大的放在其后面。

之后对哨兵分隔开来的两个数组重复上述上面分割的过程。

是分而治之吗?

是的。

实际上面试官问我的是归并,不是快排,所以应该这样说:

首先,得出low=0,high = arr.length - 1; 求出中位数mid = (low+high) / 2,

分别以low,mid和mid , high作为新数组进行分而治之,重复上面的步骤直到 low > high。

最后依次两两有序数组进行有序合并。

重载和重写的区别。

刚开始直接迷了,重载是发生在内部,不对重写是发生在内部,不对,请问那个是Override?

重写。

那重写就是子类的方法覆盖了父类的方法,重载是类内部进行重定向。

重载的条件是什么?

重载的要求是:在一个类中,并且参数类型和参数列表顺序不同的同名方法,与返回值无关。

你最近在看什么书?

顺口说了几个《剑指Offer》,《Java编程思想》,《Java核心技术卷1,2》,《Head First 设计模式》等等。

那你介绍一下装饰者模式吧。

忘光了,被自己菜哭了。

那你举个简单的例子吧。

吭哧了半天,也没坑出来。

那介绍一下JVM内存模型,介绍一下GC回收机制.

暂时还没学到。

阿里的面试官人真的好,不打断人,看我什么不会了就换个方向问一个简单的问题。

5555,被自己菜哭了。

猜你喜欢

转载自blog.csdn.net/m0_37961948/article/details/88854013