String类的intern()方法
平时没有用到过这个方法, 第一次接触到这个方法的时候, 是在知乎上的一个问答, 以及日后也有了解到一些面试官会考这个, 但是看到网上的解答, 都不是太容易理解, 本来一个很简单的概念, 让他们整的神乎其神. 这里来记录一下我的理解.
首先要理解这个概念, 我们必须清楚几个概念.
String作为一种引用类型, 如果你要通过new关键字来创建一个String类型, 那么这个类型肯定是会在堆中生成的.针对其他引用类型这个也是一样的.
java7及以上的版本将字符串常量池移动到了堆中. (什么, 你不知道字符串常量池? 甚至不知道堆? 那这不是本篇文章要涉及的内容)
intern()方法是一个JNI方法, 它的功能是返回在字符串常量池中存在的'引用'.equals(s),...
实现一个简单的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...
初见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那么将一直运行...
堆排序
通常我们需要在队列中选取优先级重要的任务进行处理, 或者在有限的空间去淘汰掉一些元素, 再比如, 在定时任务中, 我们使用线程去检查是否触发任务, 一个一个把任务扫面完, 这样效率太低了, 也可以用堆, 只用去判断最近的一个任务是否可以触发.
了解堆排序之前, 我们需要先了解一下堆这种数据结构.
堆其实可以理解是二叉树的一种, 堆的性质如下:
任意节点小于等于(或大于等于)它的所有子节点.
堆是一棵完全二叉树.
什么是完全二叉树?
对于深度为K的二叉树.
所有叶子节点都出现在K层或者K-1层
对于任意节点, “其左子树的节点总是多于右子树的节点” (如果右子树的最大层次为L, 那么左子树的最大层次为L或者L+1
根据堆父...
43 post articles, 9 pages.