【写在前面】前几个星期报了阿里巴巴的实习,结果今天突然一个电话打过来,本来还在图书馆学习,最后被强开面试了一波,下面把面试题记录下来吧,以后遇到面试题也都往里面加。另外,我报的实习方向是Java工程师,Web方向的,经过这一次的面试,我发现网络中的知识占很多,操作系统也有小部分,所以建议大家回去复习一下。
1、自我介绍
这个是一定会问的问题,提前想好自己的介绍,突出精通的地方以及自己的成就。
2、请说明一下TCP协议中三次握手、四次挥手的过程?
(问到这个,我是相当的蒙蔽,也是答的最差的一道题,毕竟网络课都过去一年了,差不多忘记了,所以奉劝大家回去复习下网络,面试中太常见)
(缩减了一些,便于口头表达)
在TCP/IP中,采用三次握手来建立一次连接。
第二次握手:服务器收到syn包,同时自己也发送一个SYN+ACK包,向客户端确认
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,两者可以进行数据交换了,完成三次握手。
TCP连接的释放就是俗称的四次挥手,它和三次握手是正反面的应用
过程:
- A的应用进程先向其TCP发出连接释放报文段,并停止再发送数据,主动关闭TCP连接,进入终止等待1状态,等待B的确认。
- B收到连接释放报文段后即发出确认报文段,B进入关闭等待状态,此时的TCP处于半关闭状态,A到B的连接释放。
- A收到B的确认后,进入终止等待2状态,等待B发出的连接释放报文段。
B没有要向A发出的数据,B发出连接释放报文段,B进入LAST-ACK(最后确认)状态,等待A的确认。 - A收到B的连接释放报文段后,对此发出确认报文段,最后终止连接
也可以看看别人讲的三次握手四次挥手
https://blog.youkuaiyun.com/qq_39521554/article/details/79717895
3、网络协议有哪七大层?路由器工作在哪一层?
从下到上:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。
路由器在网络层工作
4、传输层的作用是什么?
实现端到端的数据传输,实现差错控制和流量控制,纠错的功能,同时向会话层提供通信服务的可靠性,避免报文的出错、丢失、延迟时间紊乱、重复、乱序等差错。
5、线程与进程的区别?(这个还比较好答,我偷一下懒,下面一个问题就把我问住了)
https://www.cnblogs.com/renzhuang/articles/6733461.html
6、线程共享哪些资源?
内存、堆、地址空间,(栈是线程独自占有的)
https://www.cnblogs.com/baoendemao/p/3804677.html
7、java中进程通信的方式有哪些?(这个真的偏)
(1) 管道(PIPE)
(2) 命名管道(FIFO)
(3) 信号灯(Semphore)
(4) 消息队列(MessageQueue)
(5) 共享内存(SharedMemory)
(6) Socket(当然也有Socket)
https://blog.youkuaiyun.com/huzhigenlaohu/article/details/52488947
8、简述一下线程池?
所谓线程池,就是将多个线程放在一个池子里面(所谓池化技术),然后需要线程的时候不是创建一个线程,而是从线程池里面获取一个可用的线程,然后执行我们的任务。线程池的关键在于它为我们管理了多个线程,我们不需要关心如何创建线程,我们只需要关系我们的核心业务,然后需要线程来执行任务的时候从线程池中获取线程。任务执行完之后线程不会被销毁,而是会被重新放到池子里面,等待机会去执行任务。
https://www.cnblogs.com/exe19/p/5359885.html
9、java反射机制原理?
在JAVA中,只要给定类的名字,就可以通过反射机制来获取类的所有信息,可以动态的创建对象和编译
JAVA语言编译之后会生成一个.class文件,反射就是通过字节码文件找到某一个类、类中的方法以及属性等。
反射的实现主要借助以下四个类:
Class:类的对象
Constructor:类的构造方法
Field:类中的属性对象
Method:类中的方法对象
10、SQL中的索引是什么?
有两种索引:聚集索引(clustered index,也称聚类索引、簇集索引)和非聚集索引
聚集索引存储记录是物理上连续存在,而非聚集索引是逻辑上的连续,物理存储并不连续。
下面举两个简单的例子:
图书馆的例子:一个图书馆那么多书,怎么管理呢?建立一个字母开头的目录,例如:a开头的书,在第一排,b开头的在第二排,这样在找什么书就好说了,这个就是一个聚集索引,可是很多人借书找某某作者的,不知道书名怎么办?图书管理员在写一个目录,某某作者的书分别在第几排,第几排,这就是一个非聚集索引
字典的例子:字典前面的目录,可以按照拼音和部首去查询,我们想查询一个字,只需要根据拼音或者部首去查询,就可以快速的定位到这个汉字了,这个就是索引的好处,拼音查询法就是聚集索引,部首查询就是一个非聚集索引.
https://www.cnblogs.com/hyd1213126/p/5828937.html
11、HTTP常见的状态码
https://blog.youkuaiyun.com/qq_36528114/article/details/80091881
https://www.cnblogs.com/lgp2000/p/6874554.html
12、排序算法有哪些?
冒泡排序、快速排序、归并排序、选择排序等
12、快速排序的原理?
通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,采用二分的思想。
--------------------------------------------------------------------------------------
剩下的就是一些轻松的问题了,比如,大学中最骄傲的事是什么,最困难的经历是什么,目前你在学习什么,之后有什么打算,关于实习,你还有什么问题没有,当问到这些问题,基本上面试就快结束了,这些问题不难,但是大家还是提前想好吧,以上就是这次面试的问题,以后的面试题再往上面加。
--------------------------------------------------------------------------------------
下面是继续添加的面试题:
一:名词解释:
EJB:用通俗话说,EJB就是:"把你编写的软件中那些需要执行制定的任务的类,不放到客户端软件上了,而是给他打成包放到一个服务器上了"。EJB 就是将那些"类"放到一个服务器上,用C/S 形式的软件客户端对服务器上的"类"进行调用
JDNI:(Java Naming & Directory Interface)JAVA命名目录服务。主要提供的功能是:提供一个目录系统,让其它各地的应用程序在其上面留下自己的索引,从而满足快速查找和定位分布式应用程序的功能
JMS:(Java Message Service)JAVA消息服务。主要实现各个应用程序之间的通讯。包括点对点和广播。
JAF:(Java Action FrameWork)JAVA安全认证框架。提供一些安全控制方面的框架。让开发者通过各种部署和自定义实现自己的个性安全控制策略。
二、AWT和swing的区别:
AWT(Abstract Window Toolkit):抽象窗口工具包,早期编写图形界面应用程序的包。
Swing :为解决 AWT 存在的问题而新开发的图形界面包。Swing是对AWT的改良和扩展。
AWT 是基于本地方法的C/C++程序,其运行速度比较快;Swing是基于AWT的Java程序,其运行速度比较慢。
AWT的控件在不同的平台可能表现不同,而Swing在所有平台表现一致。
附录:J2EE常见名词
1.web容器:给处于其中的应用程序组件(JSP,SERVLET)提供一个环境,使JSP,SERVLET直接和容器中的环境变量接接口互,不必关注其它系统问题。主要有WEB服务器来实现。例如:TOMCAT,WEBLOGIC,WEBSPHERE等。该容器提供的接口严格遵守J2EE规范中的WEB APPLICATION 标准。我们把遵守以上标准的WEB服务器就叫做J2EE中的WEB容器。
2.Web container:实现J2EE体系结构中Web组件协议的容器。这个协议规定了一个Web组件运行时的环境,包括安全,一致性,生命周期管理,事务,配置和其它的服务。一个提供和JSP和J2EE平台APIs界面相同服务的容器。一个Web container 由Web服务器或者J2EE服务器提供。
3.EJB容器:Enterprise java bean 容器。更具有行业领域特色。他提供给运行在其中的组件EJB各种管理功能。只要满足J2EE规范的EJB放入该容器,马上就会被容器进行高效率的管理。并且可以通过现成的接口来获得系统级别的服务。例如邮件服务、事务管理。一个实现了J2EE体系结构中EJB组件规范的容器。 这个规范指定了一个Enterprise bean的运行时环境,包括安全,一致性,生命周期,事务, 配置,和其他的服务。
4.JNDI:(Java Naming & Directory Interface)JAVA命名目录服务。主要提供的功能是:提供一个目录系统,让其它各地的应用程序在其上面留下自己的索引,从而满足快速查找和定位分布式应用程序的功能。
5.JMS:(Java Message Service)JAVA消息服务。主要实现各个应用程序之间的通讯。包括点对点和广播。
6.JTA:(Java Transaction API)JAVA事务服务。提供各种分布式事务服务。应用程序只需调用其提供的接口即可。
7.JAF:(Java Action FrameWork)JAVA安全认证框架。提供一些安全控制方面的框架。让开发者通过各种部署和自定义实现自己的个性安全控制策略。
8.RMI/IIOP:(Remote Method Invocation /internet对象请求中介协议)他们主要用于通过远程调用服务。例如,远程有一台计算机上运行一个程序,它提供股票分析服务,我们可以在本地计算机上实现对其直接调用。当然这是要通过一定的规范才能在异构的系统之间进行通信。RMI是JAVA特有的。RMI-IIOP出现以前,只有RMI和CORBA两种选择来进行分布式程序设计。RMI-IIOP综合了RMI和CORBA的优点,克服了他们的缺点,使得程序员能更方便的编写分布式程序设计,实现分布式计算。首先,RMI-IIOP综合了RMI的简单性和CORBA的多语言性(兼容性),其次RMI-IIOP克服了RMI只能用于Java的缺点和CORBA的复杂性(可以不用掌握IDL)。