概述 以下基于 JDK 1.8 数据结构 HashMap 实际是一种“数组+链表”数据结构。 在put操作中,通过内部定义算法寻止找到数组下标,将数据直接放入此数组元素中,若通过算法得到的该数组元素已经有了元素(俗称hash冲突,链表结构出现的实际意义也就是为了解决hash冲突的问题)。将会把这个数
一、synchronized synchronized的三种应用方式 synchronized作用于实例方法 作用于当前实例加锁,进入同步代码前要获得当前实例的锁 所谓的实例对象锁就是用synchronized修饰实例对象中的实例方法,注意是实例方法不包括静态方法。 synchronized作用于静
一.创建型模式 都是用来创建对象的 Singleton(单例模式) 保证一个类只有一个实例,并且提供一个访问该实例的全局访问点 Factory Method(工厂模式) 简单工厂模式(常用) 用来生产同一等级结构中的任意产品(对于新增产品,需要修改已有代码) 工厂方法模式 用来生产同一等级结构中的固
Get 不带参数的Get请求 // 创建httpClient对象,模拟客户端 CloseableHttpClient httpClient = HttpClients.createDefault(); // 创建httpGet对象,设置地址 HttpGet httpGet = new HttpGet
面向对象设计原则: 开 开闭原则(Open-Closed Principle, OCP) 一个软件实体应当对扩展开发,对修改关闭.说的是,再设计一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展.换言之,应当可以在不必修改源代码的情况下改变这个模块的行为,在保持系统一定稳定性的基础上,对系统
解析URL和文件 public void testUrl() throws Exception { // 解析URL地址,参数是url和超时时间 Document doc = Jsoup.parse(new URL("http://www.baidu.com"), 1000); // 使用标签选择器
VM 参数 -XX:+<option> 表示开启 option 选项 -XX:-<option> 关闭 option 选项 -XX:<option>=<value> 将 option 选项的值设置为 value 比如堆空间大小 -XX:+TeaceClassLoading 用于追踪类的加载信息并打印
类加载 Class Loading 在 Java 代码中,类型的加载、连接与初始化过程都是在程序运行期间完成的 提供了更大的灵活性,增加了更多的可能性 生命周期 以下情况,Java 虚拟机将结束生命周期 执行了 System.exit() 方法 程序正常执行结束 程序在执行过程中遇到了异常或错误而异
类从加载到运行到销毁过程 类加载器过程 1.加载 加载 把二进制形式的 Java 类型读入到 Java 虚拟机中 2.连接过程中的 3 个子过程 验证 对 class 字节码验证 准备 为类变量分配内存,设置默认值。 但是在到达初始化之前,类变量都没有初始化为真正的初始值 解析 解析过程就是在类型的
1.类加载子系统 负责从文件系统或者网络中加载 Class 信息,加载的信息存放在一块称为方法区的内存空间。 2.方法区 就是存放类信息,常量信息,常量池信息,包括字符串字面量和数字常量等 3.Java 堆 在 Java 虚拟机启动的时候建立 Java 堆,它是 Java 程序最主要的内存工作区域,
接口初始化规则 当一个接口在初始化时,并不要求其父接口都完成了初始化 只有在真正使用父接口的时候 (如引用接口中所定义的常量时),才会初始化 public class MyTest5 { public static void main(String[] args) { System.out.prin
编译期常量 当一个常量的值并非编译期间可以确定的,那么其值就不会放到调用类的常量池中 这时在程序运行时,会主动使用这个常量所在的类,显然会导致这个类会被初始化,输出静态代码块中语句 public class MyTest3 { public static void main(String[] arg
双重检查锁定的设想: 多个线程试图在同一时间创建对象,会通过加锁来保证只有一个线程能创建对象 在对象创建好后,执行 getInstance() 方法将不需要获取锁,直接返回已创建好的对象 对于 Instance 类,以下是双重检查锁定代码 public class DoubleCheckedLock
一、理论算法 引用计数法 比较古老经典的垃圾手机算法,核心是在对象被其他所引用时计数器 +1,而当引用失效时则 -1 这种方式有个严重的问题:无法处理循环引用的情况,还有每次进行加减操作比较浪费系统性能。 标记清除法 分为标记和清除两个阶段进行处理内存中的对象 弊端是空间碎片问题,垃圾回收后的空间是
一、Lambda 表达式 Lambda 表达式在Java 语言中引入了一个新的语法元素和操作符。这个操作符为 -> ,该操作符被称为Lambda 操作符或剪头操作符。 它将 Lambda 分为两个部分: 左侧:指定了 Lambda 表达式需要的所有参数 右侧:指定了 Lambda 体,即 Lambd
一、摘要算法 MD5 public static String getmd5(String path) { String pathName = path; String md5 = ""; try { // 读入文件 File file = new File(pathName); FileInput
HTTP 请求发送之后,服务端需要对请求数据进行解析,但是服务端并不知道请求给我的数据是什么,所以需要规定我按照什么规则进行解析,一般服务器都根据Content-Type 字段来明确请求数据是如何编码的,然后对其进行解析。Content-Type 常见的编码方式有:application/x-www
使用 HttpClient 发送 post 请求,但发出去的请求体里的英文正常,中文全是问号,需要设置以下 HttpClient client = HttpClients.createDefault(); // 构造 POST 参数 ArrayList<NameValuePair> postData
注解所属框架 @RequestParam 和 @PathVariable 注解是用于从 request 中接收请求的,两个都可以接收参数,关键点不同的是 @RequestParam 是从 request 里面拿取值,而 @PathVariable 是从一个URI模板里面来填充 所属平台获取url模板
1. 程序计数器 JVM 种的程序计数器(Program Counter Register)中,Register 的命名源于 CPU 的寄存器,寄存器存储指令相关的现场信息。CPU 只有把数据装载到寄存器才能够运行。 这里,并非是广义上所指的物理寄存器,或许将其翻译为 PC 计数器(或指令计数器)更
类加载器子系统作用: 类加载器子系统负责从文件系统或网络中加载 Class 文件,class 文件在文件开头都有特定的文件标识。 Class Loader只负责class文件的加载,至于是否可以运行,则由Execution Engine决定 加载的类信息存放于一块称为方法区的内存空间。除了类的信息外
1. 概述 一个 JVM 实例只存在一个堆内存,堆也是 Java 内存管理的核心区域 Java 堆区在 JVM 启动时被创建,空间大小也就确定了。是 JVM 管理的最大一块内存空间,堆空间大小是可调节的 虚拟机规范规定,堆可以处于物理上不连续的内存空间中,但在逻辑上它应该被视为连续的 所有的线程共享
1. 虚拟机栈概述 由于跨平台性的设计,Java 的指令都是根据栈来设计的。不同平台 CPU 架构不同,所以不能设计为基于寄存器的。 优点是跨平台,指令集小,编译器容易实现,缺点是性能下降,实现同样的功能需要更多的指令。 栈是运行时的单位,而堆是存储的单位。 即栈解决程序的运行问题,即程序如何执行,
1. 运行时数据区 运行时数据区详细 详解 Java虚拟机定义了若干种程序运行期间会使用到的运行时数据区,其中有一些会随着虚拟机的启动而创建,随着虚拟机的退出而销毁。另外一些则是与线程一一对应的,这些与线程对应的数据区域会随着线程的开始和结束而创建和销毁。 灰色的为单独线程私有的,红色的为多个线程共
Copyright © 2005-2024 51CTO.COM 版权所有 京ICP证060544号