java实习基础面试总结(几乎每个面试官都会问的基础!)

一、spring mvc工作原理

1.Tomcat在启动时加载解析web.xml,找到spring mvc的前端总控制器DispatcherServlet,并且通过DispatcherServlet来加载相关的配置文件信息。

2.DispatcherServlet接收到客户端请求,找到对应HandlerMapping,根据映射规则,找到对应的处理器(Handler)。

3.调用相应处理器中的处理方法,处理该请求后,会返回一个ModelAndView。

4.DispatcherServlet根据得到的ModelAndView中的视图对象,找到一个合适的ViewResolver(视图解析器),根据视图解析器的配置,DispatcherServlet将要显示的数据传给对应的视图,最后显示给用户。

二、get和post区别

1、GET请求在URL中传送的参数是有长度限制的,而POST没有。
2、GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
3、GET参数通过URL传递,POST放在Request body中。
4、GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
5、GET产生的URL地址可以被记录,而POST不可以。
6、GET在浏览器回退时是无害的,而POST会再次提交请求。

三、java中堆与栈的理解

这里有超详细的解释
堆和栈都是java内存的一种
1、堆内存
用于存储java中的对象和数组,当我们new一个对象或者创建一个数组的时候,就会在堆内存中开辟一段空间给它,用于存放。
特点:先进先出,动态分配内存大小,存取速度较慢。堆的空间远远大于栈的。
2、栈内存
用于存储基本类型的变量和对象的引用变量
特点:后进先出,存取速度比堆快,但其大小及生存期是确定的,缺乏灵活性,栈的空间远远小于堆。

四、三次握手与四次挥手

这里有超详细的解释
1、三次握手
A>B:SYN(请求连接报文段位码)=1,seq(序列号)=x
B>A:SYN=1,ACK(标志位)=1,seq=y,ack(确认序号)=x+1
A>B:ACK=1,seq=x+1,ack=y+1
为什么是三次握手而不是两次:
客户端发出去的第一个连接请求由于某些原因在网络节点中滞留了导致延迟,直到连接释放的某个时间点才到达服务端,这是一个早已失效的报文,但是此时服务端仍然认为这是客户端的建立连接请求第一次握手,于是服务端回应了客户端,第二次握手。
如果只有两次握手,那么到这里,连接就建立了,但是此时客户端并没有任何数据要发送,而服务端还在傻傻的等候佳音,造成很大的资源浪费。所以需要第三次握手,只有客户端再次回应一下,就可以避免这种情况。

五、String

java有八种基本的数据类型,String本身就是一个类而不是基本数据类型,String的变量名是对String类的引用。
我们在使用诸如String str = “abc”;的格式定义类时,总是想当然地认为,我们创建了String类的对象str。担心陷阱!对象可能并没有被创建!唯一可以肯定的是,指向 String类的引用被创建了。至于这个引用到底是否指向了一个新的对象,必须根据上下文来考虑,除非你通过new()方法来显式地创建一个新的对象。因此,更为准确的说法是,我们创建了一个指向String类的对象的引用变量str,这个对象引用变量指向了某个值为"abc"的String类。

六、重写与重载

重写:返回值类型与参数列表都不能变。
重载:返回值类型可变可不变,参数列表必须变化。

七、抽象类(abstract\extends)与接口(interface\implements)

如果你想拥有一些方法,并且这些方法有默认实现,那么就使用抽象类。
如果你想实现多继承,那么就是用接口,java不支持多继承,但是可以实现多个接口。
1、抽象类可以对方法进行实现,也就是可以包含普通方法,接口只能含有抽象方法。
2、一个类只能继承一个抽象类,而一个类却可以实现多个接口。
3、抽象类可以有构造函数,接口不可以有构造函数。

八、spring mvc的单例模式
(翻遍全网作出的精辟总结!)

spring mvc是默认单例多线程模式,每次请求都会创建一个新的线程,这些线程共享controller类的唯一实例即对象,因而最好不要在controller中定义成员变量,即使要定义也将之设置为只读,否则会出现问题,比如一个线程修改了某个成员变量,其他线程在请求时会拿到修改后的结果,这显然是不合理的。

spring mvc使用单例模式的优点:性能优越,不用每次请求都new一个对象。

九、java中的集合

两个相互独立的根接口:collection与map

collection接口有两个子接口,就是Set和List。Set中不能包含重复的元素。List是一个有序的集合,可以包含重复的元素,提供了按索引访问的方式。
list接口有两个实现方法,ArrayList与LinkedList,ArrayList是基于数组的,LikedList是基于链表的,在内存中ArrayList是有序存放的,Linkedlist是无序存放的。在执行插入删除等操作时,Linkedlist一般要优于ArrayList,因为,ArrayList需要移动插入点和删除点之后的很多元素的位置,而LinkedList只需要改变相应的指针的指向。
set接口有hashset和treeset两种实现,hashset是基于hashmap的实现,treeset是基于treemap的实现。
map包含了key-value键值对,map不能包含重复的key,但可以包含相同的value。
map接口下有hashmap和treemap两种实现,其中treemap是基于二叉树的实现,当需要插入删除元素时,hashmap更优越,当需要遍历key时,treemap更优越。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值