今早刚解决完编程测试题,今天下午就接到了电面的电话,面的是Java岗,面试官很温柔,QAQ看得出他尽量想帮我,可惜我还没怎么复习清楚,所以简直是惨不忍睹,估计是一轮跪了,说起来这是第一回面试,就此做个总结。
【3.6查结果:reject】意料之中,准备的太不充分了,可惜大厂,继续修炼吧。
0.开场来段自我介绍
当时太紧张了,建议准备一份腹稿背诵吧。(想起来完全不知道自己说了个啥玩意儿)
1.客户端与服务器端如何通信?
项目做了个远程桌面软件,然后问我这个问题,我卡了点壳,如果没胡言乱语,应该算勉强答出来了-虽然似乎不太完整。
应用程序做服务器的话,Socket编程。
(1)服务器端先占用一个端口,创建服务器对象。
ServerSocket server=new ServerSocket(int Port);
然后服务器端开始进行等待。
Socket socket=server.accept();
accept()是堵塞的,服务器端的程序暂时运行到这,将不会继续运行下去,要等待客户端的连接。
(2)应用程序是客户端的时候,先用【服务器端】的IP,以及与服务器端相同端口号,创建socket。
Socket client=new Socket(String IP,int Port);
这个时候,服务器端的accept()接触拥塞,成功声明到了socket,继续向下执行。
(3)建立两个端的socket对象的输入输出流的获取。
(4)用读写操作进行服务器和客户端之间的通信。
但是我还有Java web方向的职位申请,所以这里还有以web为客户端和服务器端的通信。
简单来讲,web服务器和客户端之前的通信,就是“浏览器向服务器发送请求,服务器接收到请求之后进行相关处理,最后将结果返回给浏览器”
详解参考1 详解参考2
2.TCP三次握手(ISO模型传输层协议)
鉴于问了上面那个问题,这个就随之而来了(摊手),问我项目连接的协议是哪个?TCP。
明明之前做选择题都看了一遍了,果然是个一紧张脑海空白的人,简直被自己蠢哭。
第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。
附加问题:TCP和UDP协议的差别是什么?
TCP |
UDP |
面向连接
面向非连接
传输可靠
传输不可靠
传输大量数据
传输少量数据
速度慢
速度快
附加问题2:为什么TCP要采用三次握手?(答错了T T)
三次握手的最主要目的是保证连接是【双工】的,可靠更多的是通过重传机制来保证的。
为了保证服务端能收接受到客户端的信息并能做出正确的应答而进行前两次(第一次和第二次)握手。
为了保证客户端能够接收到服务端的信息并能做出正确的应答而进行后两次(第二次和第三次)握手。
3.问我项目还有没有可以优化的地方?如何提高吞吐量?
大概回答了一下线程池,NIO技术。(老是把这玩意记成NOI的我)
追加NIO问题:NIO有什么机制比普通的IO要优秀的地方?
(我正好打开了相关网页…..)
Java NIO提供了与标准IO不同的IO工作方式:
Channels and Buffers(通道和缓冲区):标准的IO基于字节流和字符流进行操作的,而NIO是基于通道(Channel)和缓冲区(Buffer)进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中。
Asynchronous IO(异步IO):Java NIO可以让你异步的使用IO,例如:当线程从通道读取数据到缓冲区时,线程还是可以进行其他事情。当数据被写入到缓冲区时,线程可以继续处理它。从缓冲区写入通道也类似。
Selectors(选择器):Java NIO引入了选择器的概念,选择器用于监听多个通道的事件(比如:连接打开,数据到达)。因此,单个的线程可以监听多个数据通道。
我记得最清楚的就是,它不堵塞了。
相关详解
4.java有哪些令你印象深刻的语法,或者异常,或JVM有什么你觉得很有趣的机制?
聊回了java,这个问题让我很懵比,因为要求是详述,我发现我没有什么可以详述的地方,这个确实是积累不够,GG。
我提了个空指针异常,但是后来话题被语无伦次的我带跑了。
5.java对象的生命周期(垃圾回收机制)
我大概答了个创建之后,它怎么被销毁的地方就没有答清楚了,我只记得java有垃圾回收机制,具体就….
相关详解
6.你对大数据感兴趣的话,那么据你的了解,认为它一般应用在哪些方面呢?
这个纯粹自己作死,阿里有三道开放题,我可能是脑抽了。但是我确实稍稍了解一点点,所以就拿着那一点做文章了:大数据分析更贴近客户的需求。
例如,视频推荐你喜欢的那一方面,股票根据你的评论和观察推荐给适合你的。
追加:你认为菜鸟网络对大数据的应用在哪里?
我忘记是我问他还是他问我了。
7.你可以问我些问题?(开放)
我基本就算垂死挣扎了,问了些感兴趣的地方。面试官小哥也很认真的回答我了。
例:刚才的大数据, 你们一般做物流的话,具体来应用是什么?(有点类似网络路由找最短路径那样,替物流公司寻找最合适的路径。)
例:有什么推荐的书适合继续深入学习:他跟我说,多看基础,暂时不用想深入到哪,你还是个本科生(心酸围笑)
总结:准备真的很不充分!超级不充分!虽然看在我是话唠的份上还是给我扯了39min,不过没抱什么把握能过了。本科生没什么项目只能聊基础,结果发现基础也很差,所以GG的悲伤故事。概括来说就是这么多,回首一看,问题都很简单,渣渣还是积累太少。很感谢面试官那么温柔,在拼命帮我找闪光点了,过程后半段还是很愉快的。