极客996

极客996

  • 8文章
  • 1评论
  • 224文章浏览
英特耐雄纳尔终会实现!

String到底是在堆中还是在方法区中?

个人理解,不当之处请指正 String s="a"

String s1="a"

s==s1   //true 为什么a==b? 使用""符号创建的字符串对象时jvm会在方法区的常量池中查找是否存在字符串a,没有就在方法区中的常量池中开辟一块空间存放字符串a并将引用s指向该地址,有的话则将引用直接指向该地址。 也可以总结出==比较的应该是引用指向的地址的值,而不是引用本身。 String s="a"

String s1 = new String("s");

s == s1 //false
 为什么a == b 为false 使用new 创建对象的实例在堆中,也就是说引用指向的是堆的地址。要注意的是括号里的"s",实际这里已经完成了上面所说的动作(在常量池中存放了一份),并在这之后又在堆中创建了一份。 String s="a"

String s1 = new String("s");

s == s1.intern() //true
 inter()方法的作用 inter()是一个本地方法,无法从源码中看出他的作用,所以查了一下资料,总结了一下jvm会从常量池中找到是否存在与该对象值相等的值,没有则在常量池中创建有则拿到该值引用地址返回。

Rick  2020-09-17 阅读全文

String到底是在堆中还是在方法区中?

个人理解,不当之处请指正 String s="a"

String s1="a"

s==s1   //true 为什么a==b? 使用""符号创建的字符串对象时jvm会在方法区的常量池中查找是否存在字符串a,没有就在方法区中的常量池中开辟一块空间存放字符串a并将引用s指向该地址,有的话则将引用直接指向该地址。 也可以总结出==比较的应该是引用指向的地址的值,而不是引用本身。 String s="a"

String s1 = new String("s");

s == s1 //false
 为什么a == b 为false 使用new 创建对象的实例在堆中,也就是说引用指向的是堆的地址。要注意的是括号里的"s",实际这里已经完成了上面所说的动作(在常量池中存放了一份),并在这之后又在堆中创建了一份。 String s="a"

String s1 = new String("s");

s == s1.intern() //true
 inter()方法的作用 inter()是一个本地方法,无法从源码中看出他的作用,所以查了一下资料,总结了一下jvm会从常量池中找到是否存在与该引用指向值相等的值,没有则在常量池中创建有则拿到该值引用地址返回。

Rick  2020-09-17 阅读全文

为什么 HashMap中的hashTabel的长度要设置成2^n?

总结:因为HashMap中查找位置采用的取模运算,而使用位运算进行取模效率更高,所以为什么HashMap的初始长度位16(2^4),每次扩容为原先的2倍(2^(n+1))。 为什么可以使用位运算(&)来实现取模运算(%)呢?这实现的原理如下: X % 2^n = X & (2^(n – 1)) 2^n表示2的n次方,也就是说,一个数对2^n取模 == 一个数和(2^(n – 1))做按位与运算 。 假设n为3,则2^3 = 8,表示成2进制就是1000。2^3 -1 = 7 ,即0111。 此时X & (2^(3 – 1)) 就相当于取X的2进制的最后三位数。 从2进制角度来看,X / 8相当于 X >> 3,即把X右移3位,此时得到了X / 8的商,而被移掉的部分(后三位),则是X % 8,也就是余数。 举个例子(不得不佩服前辈们的逻辑思维能力): 6 % 8 = 6 ,6 & 7 = 6 10 % 8 = 2 ,10 & 7 = 2

Rick  2020-09-16 阅读全文
小白图解TCP建立连接(三次握手)到关闭连接全过程(四次挥手)

小白图解TCP建立连接(三次握手)到关闭连接全过程(四次挥手)

在分析之前先介绍一下需要用到的工具,有助于加深理解 Postman :一种开发人员经常会使用到的测试工具,常用于测试自己写的API接口是否能够正常请求与响应。当然作用不仅于此,对于我这种CURD接口编写员目前作用确实仅此而已(逃 Wireshark(来自百度百科): (前称Ethereal)是一个网络封包分析软件。网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料。Wireshark使用WinPCAP作为接口,直接与网卡进行数据报文交换。 在过去,网络封包分析软件是非常昂贵的,或是专门属于盈利用的软件。Ethereal的出现改变了这一切。在GNUGPL通用许可证的保障范围底下,使用者可以以免费的代价取得软件与其源代码,并拥有针对其源代码修改及客制化的权利。Ethereal是全世界最广泛的网络封包分析软件之一。 在分析每次交互的过程中会出现以下几种标识需要了解,不然不知道每次交互的作用是什么 ,后面步骤序号算法可能会省略,可以理解为协议之间的约定 SYN 表示建立连接 FIN 表示关闭连接 ACK 表示响应,1为是,0为否 PSH 表示有 DATA数据传输 RST 表示连接重置。 还需要论述一下seq、ack表示什么意思,应该以什么样的角度去理解这两个序列号。 sequence number:表示的是我方(发送方)这边,这个packet的数据部分的第一位应该在整个data stream中所在的位置。(注意这里使用的是“应该”。因为对于没有数据的传输,如ACK,虽然它有一个seq,但是这次传输在整个data stream中是不占位置的。所以下一个实际有数据的传输,会依旧从上一次发送ACK的数据包的seq开始) acknowledge number:表示的是期望对方(接收方)的下一次sequence number是多少。 注意,SYN/FIN的传输虽然没有data,但是会让下一次传输的packet seq增加一,但是,ACK的传输,不会让下一次的传输packet加一。 测试 1. 由于wireshark无法抓取到以太网本地请求的数据包,所以先要去Nmap(一个很强大的网络安全分析工具网站,里面的很多工具值得玩玩)下载Npcap(数据包嗅探库),下载安装完后将会出现一个名为 Adapter for loopback traffic capture的接口,选错该接口就可以捕获本地发送的请求,如下图: 2. 在本地启动了一个Web项目编写一个简单的测试接口,这里我用的服务端 8080 端口的接口 /test,Postman(客户端)使用的是本地的54416 端口,下面是使用Get请求发送请求产生的数据包,已经使用过滤器再次 Postman请求示例 wireshark捕获该次Get请求的数据包 结合经典的TCP三次握手示例图一一对比每次请求(后面标注的序号) 1.第一次握手,客户端 54416 请求(SYN)服务端 8080 建立连接,发送报文SYN=1(可以在传输层Transmission Control Protocol的Flags中看到),seq=0(|X),TCP客户端进程进入了 SYN-SENT(同步已发送状态)状态。TCP规定: SYN报文段(SYN=1的报文段)不能携带数据,但需要消耗掉一个序号 2.第二次握手,服务端 8080 响应(ACK)客户端54416 确认建立连接,发送报文 seq=0(|y,随机生成),ack=1(期望 54416 报文中 seq+1),这个报文也不能携带数据,但是同样要消耗一个序号 3.第三次握手,客户端发送确认报文,ACK=1,ack=y+1,seq=x+1(第一次握手的序号+1)。TCP规定:ACK报文段可以携带数据,但是如果不携带数据则不消耗序号 4.当服务器收到客户端的确认后也进入ESTABLISHED状态,此后双方就可以开始通信了,客户端发送HTTP Get请求到服务端 5.服务端确认收到请求后响应Http请求,本次请求状态码为 200(成功) 结合经典的四次挥手示例图一一对比每次请求(后面标注的序号) n:客户端不断询问服务端是否保持连接 n+1(服务端: 我想关闭我对你的连接,希望你按照我的要求回答我): 服务端发送FIN标识请求关闭连接(发起方可以是客户端,也可以是服务器端),发送报文 FIN=1,seq=119, ack=320。客户端进入FIN-WAIT-1(终止等待1)状态,TCP规定:FIN报文段即使不携带数据,也要消耗一个序号。 n+2(客户端: 收到,准备中....):客户端收到了服务端响发送的FIN报文段,像服务器回一个ACK=320,seq=120的报文段 , 服务端进入了CLOSE-WAIT(关闭等待)状态。 n+3(客户端: 我已经做好关闭准备,希望你按照我的要求回复我):客户端像服务端发送FIN标识请求关闭连接(双向关闭),此时客户端进入进入FIN-WAIT-2(终止等待2)状态, n+4(服务端:收到,你可以关闭了): 服务端发送确认响应后,客户端将会立即关闭该次连接进入CLOSED(关闭)状态, 而服务端等待2MSL没得到回复后,则证明客户端已经关闭,那么也就进入关闭状态。

Rick  40  2020-09-05 阅读全文
SSR免费节点———不定时更新

SSR免费节点———不定时更新

ssr://MTk0LjE1Ni4xMjAuMTAyOjg4ODY6YXV0aF9jaGFpbl9hOm5vbmU6cGxhaW46ZDNkM0xtWnlaV1Z6Y3k1aVpYTjAvP29iZnNwYXJhbT0mcHJvdG9wYXJhbT0mcmVtYXJrcz01Ny03NWFLWjVZV2FNemMyTGpnNTVMLUU1NzJYNXBhdiZncm91cD01TC1FNTcyWDVwYXY= ssr://OTUuMTc5LjIzMi4xNDg6MjAxOTpvcmlnaW46YWVzLTI1Ni1jZmI6cGxhaW46VEdsbVpTRnpRWGRsYzI5dFpRPT0vP29iZnNwYXJhbT0mcHJvdG9wYXJhbT0mcmVtYXJrcz01Ny03NWFLWjVZV2FNalkxTGpjMTZJdXg1WnU5Jmdyb3VwPTZJdXg1WnU5 ssr://OTQuMTAyLjU3LjE2MzoxMTcwODpvcmlnaW46YWVzLTI1Ni1jZmI6aHR0cF9zaW1wbGU6YzBWelkxQkNhVUZFT1Vza0prQTNPUT09Lz9vYmZzcGFyYW09JnByb3RvcGFyYW09JnJlbWFya3M9NTctNzVhS1o1WVdhTWpRMExqazA2STIzNVlXdyZncm91cD02STIzNVlXdw==

Rick  104  2020-09-04 阅读全文

极客996

  • 8文章
  • 1评论
  • 224文章浏览
音乐推荐
热门文章
SSR免费节点———不定时更新
2020-09-04   104
且看且行,人微言轻。
2020-09-04   41
小白图解TCP建立连接(三次握手)到关闭连接全过程(四次挥手)
2020-09-05   40
堆区和非堆区
2020-09-15   11
为什么 HashMap中的hashTabel的长度要设置成2^n?
2020-09-16   9
Google广告