阿里巴巴农村淘宝暑假实习一面凉经
作者:互联网
为什么选择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,被自己菜哭了。
标签:暑假,ACK,客户机,SYN,TCP,凉经,数组,实习,报文 来源: https://blog.csdn.net/m0_37961948/article/details/88854013