问1: qq用的是tcp还是udp?
答:
QQ作为一款快速高效的聊天工具当然时TCP和UDP都需要用到的。类似于图像、声音等对可靠性要求没有那么高的业务可以用UDP,他们不需要准确存储对准确性无要求但要求速度快。 类似于文本、程序、文件等要求可靠的数据最好就用TCP,但会牺牲一些速度。
现在的IP侦探在你仅仅跟对方发送聊天消息的时候是无法获取到IP的。大家都知道,UDP 协议是不可靠协议,它只管发送,不管对方是否收到的,但它的传输很高效。但是,作为聊天软件,怎么可以采用这样的不可靠方式来传输消息呢?于是,腾讯采用了上层协议来保证可靠传输:如果客户端使用UDP协议发出消息后,服务器收到该包,需要使用UDP协议发回一个应答包。如此来保证消息可以无遗漏传输。之所以会发生在客户端明明看到“消息发送失败”但对方又收到了这个消息的情况,就是因为客户端发出的消息服务器已经收到并转发成功,但客户端由于网络原因没有收到服务器的应答包引起的
原文:https://blog.youkuaiyun.com/pmt123456/article/details/55216555
问2: 浏览器输入一个地址回车之后都发生了啥?
答:
首先,DNS解析(域名解析),DNS实际上是一个域名和IP对应的数据库。
在进行DNS解析时,会经历以下步骤:
查询浏览器缓存(浏览器会缓存之前拿到的DNS 2-30分钟时间),如果没有找到,检查系统缓存,检查hosts文件,这个文件保存了一些以前访问过的网站的域名和IP的数据。它就像是一个本地的数据库。如果找到就可以直接获取目标主机的IP地址了。没有找到的话,需要检查路由器缓存,路由器有自己的DNS缓存,可能就包括了这在查询的内容;如果没有,要查询ISP DNS 缓存:ISP服务商DNS缓存(本地服务器缓存)那里可能有相关的内容,如果还不行的话,需要,递归查询:从根域名服务器到顶级域名服务器再到极限域名服务器依次搜索哦对应目标域名的IP。也就是一层层往上查找的过程。找到了对应机器的IP地址。
然后,接下来就是向该IP地址定位的HTTP服务器发起TCP连接
这里会经历TCP连接的三次握手:
第一次握手:客户端向服务器端发送请求(SYN=1) 等待服务器确认;
第二次握手:服务器收到请求并确认,回复一个指令(SYN=1,ACK=1);
第三次握手:客户端收到服务器的回复指令并返回确认(ACK=1)。
然后,通过三次握手,建立了客户端和服务器之间的连接,现在可以请求和传输数据了。比如要通过get请求访问“http://www.dydh.org/”。
然后,浏览器渲染页面。浏览器通过得到的HTML和MIME文件,通过MIME文件,浏览器知道要用页面渲染引擎来处理HTML文件。
问3: 简述JVM内存结构。(注意区分JVM内存结构和Java内存模型的区别)
答:
JVM内存结构主要有三大块:堆内存、方法区和栈。堆内存是JVM中最大的一块由年轻代和老年代组成,而年轻代内存又被分成三部分,Eden空间、From Survivor空间、To Survivor空间,默认情况下年轻代按照8:1:1的比例来分配;
图片来源于https://www.cnblogs.com/ityouknow/p/5610232.html
接下来可以简述一下堆和栈的区别
问4: 简述Java内存模型。
参考
https://www.cnblogs.com/nexiyi/p/java_memory_model_and_thread.html
问5: 谈谈Spring中的IOC和AOP概念。
参考
https://blog.youkuaiyun.com/eson_15/article/details/51090040
这里可能涉及多线程方面的知识,如violate关键字等
https://blog.youkuaiyun.com/strivenoend/article/details/80440884