Home

String类的intern()方法

平时没有用到过这个方法, 第一次接触到这个方法的时候, 是在知乎上的一个问答, 以及日后也有了解到一些面试官会考这个, 但是看到网上的解答, 都不是太容易理解, 本来一个很简单的概念, 让他们整的神乎其神. 这里来记录一下我的理解. 首先要理解这个概念, 我们必须清楚几个概念. String作为一种引用类型, 如果你要通过new关键字来创建一个String类型, 那么这个类型肯定是会在堆中生成的.针对其他引用类型这个也是一样的. java7及以上的版本将字符串常量池移动到了堆中. (什么, 你不知道字符串常量池? 甚至不知道堆? 那这不是本篇文章要涉及的内容) intern()方法是一个JNI方法, 它的功能是返回在字符串常量池中存在的'引用'.equals(s),...

Read more

JVM虚拟机结构

对于jvm虚拟机也看过不少东西, 不过都没有进行总结过, 就这样记记忘忘, 这样的习惯不是太好, 所以腾出来时间, 根据«Java 虚拟机规范»这本书, 再把这些知识点回顾并整理下来. 虚拟机的数据类型 原始类型(原始值) 数值类型 整数类型 byte类型 short类型 int类型 long类型 char类型 浮点类型 根据IEEE754的标准一样 float类型 double类型 boolean类型 boolean类型会在编译之后被转化为int类型, 1表示true, 0表示false,...

Read more

实现一个简单的Http-Server

极致简单 通过ServerSock代理一个端口号, 在接收到请求的时候, 建立一个Sock实例(TCP连接), 然后往这个sock实例里面根据所采用的应用程报文格式写入数据. 这里我们使用的应用层协议是HTTP. WEBROOT是供外界访问文件的所在目录. PORT端口号 原理很简单, 直接看代码就好了. package com.server.simpleHttpServer; import java.io.*; import java.net.ServerSocket; import java.net.Socket; public class SimpleHttpServer { private final int PORT; private fina...

Read more

初见Jmeter测试

在写了两个简单的HttpServer之后, 这两个分别是单线程和多线程的, 想测试一下,他们的性能差别怎么样. 我们使用的工具是Jmeter. 这个我以前没用过, 这次是第一次用, 使用起来很方便. JMeter官网: https://jmeter.apache.org/ 下载下来解压. 在bin里面打开jmeter.bat就行 (但是需要Java环境) 测试机器的硬件 内存为8G的DDR3 添加线程组 Number Of Threads(users):用户的线程个数 Ramp-up period: 线程启动的速度. 如果10个线程设置100秒, 那么每10秒启动一个线程. Loop Count: 每个线程运行的次数. 如果选择infinite那么将一直运行...

Read more

堆排序

通常我们需要在队列中选取优先级重要的任务进行处理, 或者在有限的空间去淘汰掉一些元素, 再比如, 在定时任务中, 我们使用线程去检查是否触发任务, 一个一个把任务扫面完, 这样效率太低了, 也可以用堆, 只用去判断最近的一个任务是否可以触发. 了解堆排序之前, 我们需要先了解一下堆这种数据结构. 堆其实可以理解是二叉树的一种, 堆的性质如下: 任意节点小于等于(或大于等于)它的所有子节点. 堆是一棵完全二叉树. 什么是完全二叉树? 对于深度为K的二叉树. 所有叶子节点都出现在K层或者K-1层 对于任意节点, “其左子树的节点总是多于右子树的节点” (如果右子树的最大层次为L, 那么左子树的最大层次为L或者L+1 根据堆父...

Read more