这是遇到的一个面试题。
本来我就不太明白,再加上找工作第一次面试的紧张,也没答出来,然后就整理了一下。希望下次能记住。
第一步:域名解析
Internet上的计算机是通过ip地址来定位的,比如某ip地址:192.568.1.xxx,一串数字,也不好记住。所以又发明了域名来代替IP地址,域名和ip地址是一一对应的,域名地址放在DNS服务器中。当用户发起请求时,DNS服务器把请求的地址转化为IP地址。
第二步:TCP三次握手
浏览器拿到ip地址后,会向web服务器发起TCP的连接请求。
在连接前的三次握手,客户端和服务端点对点通信,确认双方都在线,是可靠的。连接成功后,形成传输数据通道。
第三步:发起http请求
http就是就是计算机网络进行通信的协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。
第四步:服务器收到请求,并响应http请求
如果并发访问量非常大,那么一台服务器是吃不消的,一般会有若干台服务器组成一个集群,然后通过配合反向代理实现负载均衡。
第五步:浏览器解析html代码**
浏览器开始解析html代码,并请求包括css,js等资源。浏览器在解析HTML文档时,会把HTML解析为一种称为文档对象模型(Document Object Model)的对象集合,简称DOM,DOM的结构是树状的。
第六步:断开TCP连接**
TCP四次挥手
在么
在。你在么
在
四次挥手,确认没有资源继续传输,客户端和服务端进入关闭状态。
第七步:浏览器对页面进行渲染呈现给用户**
然后还有一个算法题。
输入[2,1,4,6,5,7] 9
输出[2,7] [4,5]
我也没有系统练过算法题,我这水平,上来就是慌。然后就是两层循环,结果人家一看你这时间复杂度是多少?我给你这个题是让你暴力遍历的么?你在想想。然后我就想想,他就看着我,我越想越慌,就放弃了。下来在网上搜了一下,类似的用map集合来做。要先判断,在把数组中的数放入集合,否则如果把9换成10,数组里面只有一个5,也会输出[5,5]
public Map<Integer,Integer> twoSum(int[] nums, int target) {
Map<Integer, Integer> hashtable = new HashMap<Integer, Integer>();
Map<Integer,Integer> map = new HashMap<>();
for (int i = 0; i < nums.length; ++i) {
//containsKey方法,判断hashtable中有没有另一个数与此数和为9
if (hashtable.containsKey(target - nums[i])) {
map.put(nums[i], target - nums[i]);
}
//把数组中的数放入hashtable中
hashtable.put(nums[i], i);
}
return map;
}
public static void main(String[] args) {
Map<Integer, Integer> map = new ZiJie().twoSum(new int[] {2,1,4,6,5,7}, 9);
for(Map.Entry<Integer, Integer> entry : map.entrySet()) {
System.out.println("[" + entry.getValue() + "," + entry.getKey() + "]");
}
}
才疏学浅,多谢指教。
参考文献,尚硅谷课件,百度,csdn,牛客网