面经集合

https://www.nowcoder.com/discuss/363312?type=2&order=1&pos=6&page=1

 

在浏览器地址栏输入一个URL后回车,背后会进行哪些技术步骤?

第一步是浏览器对用户输入的网址做初步的格式化检查:

用http还是https?默认是http。

第二步,查找DNS。比如zhihu.com,DNS负责把zhihu.com转化为IP地址。怎么找?DNS能自己查询到的,绝不麻烦别人。先查找自己内存当中的DNS cache,然后再找本地硬盘里的host文件,然后再找DNS服务器。

第三步,建立TCP连接。

客户端:“你好,在家不,有你快递。”

服务端:“在的,是顺丰快递吧,单号12345。”

客户端:“对的。”

第四步、发送HTTP请求

第五步、服务器处理请求

第六步、返回响应结果

在HTTP里,有请求就会有响应,哪怕是错误信息。

第七步、关闭TCP连接

为了避免服务器与客户端双方的资源占用和损耗,当双方没有请求或响应传递时,任意一方都可以发起关闭请求。与创建TCP连接的3次握手类似,关闭TCP连接,需要4次握手。

客户端:“兄弟,我这边没数据要传了,咱关闭连接吧。”

服务端:“收到,我看看我这边有木有数据了。”

服务端:“兄弟,我这边也没数据要传你了,咱可以关闭连接了。”

客户端:“好嘞。”

发送方如何知道接收方究竟有没有收到呢?

继续深度思考,整个握手协议是为了让发送方确保接收方收到信息,那么上图下半部分最后一个步骤ack N+1发送出去后,发送方(客户端)如何知道接收方(服务端)究竟有没有收到呢?握手协议的设计魅力就体现出来了,这里涉及一个2MSL的概念。发送方(客户端)的逻辑是这样思考的,给接收方一个时间,在这个时间段内,假如接收方收不到信息,则接收方肯定会不断发送Fin N信号过来。换言之,如果接收方收到发送方(客户端)的确认信息,则在这个时间段内,发送方(客户端)不会收到接收方重复发过来的Fin N信号。而这个所谓的时间段,就被定义为两倍的MSL(Maximum Segment Lifetime)。

 

 

 

 

内存溢出

方法区:

存储已被虚拟机加载的类(class)信息 ,如常量静态变量

堆区:

你可以认为堆就是存放的对象的实例,

(1) 堆溢出
当对象数量达到最大堆的容量限制后就会报这个异常ava.lang.OutOfMemoryError: Java heap space,而且是很常见内存溢出异常情况(java中别的可能不多,但是对象肯定多,万物皆对象)

出现这种情况先分析是内存泄漏还是内存溢出,这两个还是有本质区
别的

内存泄漏:通俗点讲就是原本应该死掉的对象竟然还活着,在占用着内存
内存溢出:里面的对象必须存在,但是堆的最大容量不够放下他们

堆内存溢出 :就要检查某些存在的对象是否生命周期过于长,持有状态时间过长,减少这些来腾出堆的空间

(2) 

对于这两个如果出现内存溢出会有两种错误:

StackOverflowError:线程请求的栈的深度大于虚拟机规定的深度(单线程容易触发)
OutOfMemoryError:栈动态扩展,如果扩展时无法申请到足够的内存时抛出(多线程容易触发)

经过实验发现,用单线程栈帕太大(减少栈的深度)或者虚拟机栈容量不够报的都是StackOverflowError,但是多线程的情况下如果荣国栈的容量不够就会报OutOfMemoryError

解决办法:“减少内存”

对于栈的深度虚拟机默认的是1000~2000,对于正常的方法调用完全够了,
对于多线程导致的内存溢出,在不能减少线程或者更换64位虚拟机的情况下可以通过减少最大堆的容量(腾内存空间),减少栈的容量(因为一个线程一个栈,是私有的,所以可以减少每个私有栈的容量大小来创建更多的栈)

 

多线程安全,线程池相关问题

https://www.cnblogs.com/zyxiaohuihui/p/9096882.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值