stringbuilder

MyBatis源码解析 - 解析器模块

依然范特西╮ 提交于 2020-03-12 02:43:12
MyBatis源码解析 - 解析器模块 1. 前言 在MyBatis中涉及多个xml文件,解析这些xml文件自然离不开解析器。本文就来分析一下解析器模块。 2. 准备工作 xml常见的解析方式分为以下三种: DOM ( Document Object Model)解析方式 SAX (Simple APIfor XML)解析方式 StAX( Streaming API for XML)解析方式 - JDK 6.0版本开始,JDK开始支持 详细的解析xml学习可以参考 Java解析XML 在这里我们需要重点看下DOM解析,DOM解析主要的好处就是易于编程,可以跟根据需求在树形结构的各个节点之间导航。 3. XPathParser MyBatis 在初始化过程中处理 mybatis-config.xml 以及映射文件时使用的是DOM解析方式,并结合使用XPath解析XML配置文件。DOM会将整个XML文档加载到内存中形成数据结构。 XPathParser类封装了XPath 、Document和EntityResolver 依赖关系如图所示 XPathParser中字段含义和功能如下 private final Document document; //Document 对象 private boolean validation; //是否开启校验 private

java常用类04_StringBuffer类

倖福魔咒の 提交于 2020-03-10 23:41:38
1.StringBuffer类概述 String和StringBuffer都可以用来存储和操作字符串,即包含多个字符的字符串数据。 String类代表不可变的Unicode字符序列 ,是字符串常量。String字符串一旦被初始化后,就不能再被改变其内容了(其原理在String类概述中已经讲述)。对String字符串的操作实际上对其副本(原始拷贝)的操作,原来的字符串一点都没有改变。比如: String str = "hello" ; // 创建了一个字符串 // 实际上原来的"hello"字符串对象已经丢弃了,现在又产生了一个字符串"hello世界" str = str + "世界" ; 如果多次执行这些改变串内容的操作,会导致大量副本字符串对象存留在内存中,从而降低了程序的效率。 StringBuffer类是抽象类AbstractStringBuilder的子类, StringBuffer类代表可变的Unicode字符序列 ,是字符串变量。我们打开AbstractStringBuilder类的源码: 从源码中可以看出,AbstractStringBuilder内部也是一个字符数组,但是这个字符数组没有用final修饰,那么意味着我们可以随时修改,所以我们又称StringBuffer为“可变字符序列”。 因为StringBuffer类是对原字符串本身进行操作的

Tomcat8优化--JVM字节码

我是研究僧i 提交于 2020-03-10 19:52:50
JVM字节码   前面我们通过tomcat本身的参数以及jvm的参数对tomcat做了优化,其实要想将应用程 序跑的更快、效率更高,除了对tomcat容器以及jvm优化外,应用程序代码本身如果写 的效率不高的,那么也是不行的,所以,对于程序本身的优化也就很重要了。   对于程序本身的优化,可以借鉴很多前辈们的经验,但是有些时候,在从源码角度方面 分析的话,不好鉴别出哪个效率高,如对字符串拼接的操作,是直接“+”号拼接效率高还 是使用StringBuilder效率高?   这个时候,就需要通过查看编译好的class文件中字节码,就可以找到答案。   我们都知道,java编写应用,需要先通过javac命令编译成class文件,再通过jvm执行, jvm执行时是需要将class文件中的字节码载入到jvm进行运行的。 1、通过javap命令查看class文件的字节码内容 1.1 创建一个简单的测试类 public class Test1 { public static void main(String[] args) { int a = 2; int b = 5; int c = b-a; System.out.println(c); } } 执行成功target目录下便会生成class文件:    1.2 cmd 使用命令 javap -v Test1.class > Test1.txt

11 个简单的 Java 性能调优技巧

白昼怎懂夜的黑 提交于 2020-03-09 14:30:02
大部分建议是针对Java的。但也有若干建议是与语言无关的,可以应用于所有应用程序和编程语言。在讨论专门针对Java的性能调优技巧之前,让我们先来看看通用技巧。 1.在你知道必要之前不要优化 这可能是最重要的性能调整技巧之一。你应该遵循常见的最佳实践做法并尝试高效地实现用例。但是,这并不意味着在你证明必要之前,你应该更换任何标准库或构建复杂的优化。 在大多数情况下,过早优化不但会占用大量时间,而且会使代码变得难以阅读和维护。更糟糕的是,这些优化通常不会带来任何好处,因为你花费大量时间来优化的是应用程序的非关键部分。 那么,你如何证明你需要优化一些东西呢? 首先,你需要定义应用程序代码的速度得多快,例如,为所有API调用指定最大响应时间,或者指定在特定时间范围内要导入的记录数量。在完成这些之后,你就可以测量应用程序的哪些部分太慢需要改进。然后,接着看第二个技巧。 2.使用分析器查找真正的瓶颈 在你遵循第一个建议并确定了应用程序的某些部分需要改进后,那么从哪里开始呢? 你可以用两种方法来解决问题: 查看你的代码,并从看起来可疑或者你觉得可能会产生问题的部分开始。 或者使用分析器并获取有关代码每个部分的行为和性能的详细信息。 希望不需要我解释为什么应该始终遵循第二种方法的原因。 很明显,基于分析器的方法可以让你更好地理解代码的性能影响,并使你能够专注于最关键的部分。如果你曾使用过分析器

Java String StringBuilder StringBuffer 区别

守給你的承諾、 提交于 2020-03-07 14:00:39
1. 三者区别 速度 StringBuilder > StringBuffer > String StringBuilder 线程是不安全的,StringBuffer、String 线程是安全的 1.1 为什么存在速度快慢 String 为字符串常量,一旦创建控件不可能变更。 而 StringBuilder 和 StringBuffer 均为字符串变量,而不进行创建和回收的操作,所以速度要比String快很多。 1.2 为什么说 StringBuffer 线程是安全的 如果一个StringBuffer对象在字符串缓冲区被多个线程使用时,StringBuffer中很多方法都带有synchronized关键字,所以可以保证线程是安全的, 1.3 为什么说 StringBuilder 线程是不安全的 但 StringBuilder 的append方法中没有synchronized关键字,所以不能保证线程安全。 实际上,StringBuilder 是 StringBuffer 的简化版,在单线程操作中效率更高。 2. 使用说明 2.1 示例 2.1.1 String 示例 字符串自定义 String str = "字符串" ; 2.1.2 StringBuffer 示例 StringBuffer 的创建 /*StringBuffer 的内部实现采用字符数组,默认数组的长度为16

Java中String,StringBuilder和StringBuffer的区别

ぃ、小莉子 提交于 2020-03-06 19:01:44
这三个类的主要区别在两个方面:运算速度(运算性能或执行效率)和线程安全性。 1、运算速度比较(通常情况下):StringBuilder > StringBuffer > String String是final类不能被继承且为字符串常量,而StringBuilder和StringBuffer均为字符串变量。String对象一旦创建便不可更改,而后两者是可更改的,它们只能通过构造函数来建立对象,且对象被建立以后将在内存中分配内存空间,并初始保存一个null,通过append方法向StringBuffer和StringBuilder中赋值。请看如下示例代码: String str = "abc"; System.out.println(str); str = str + "de"; System.out.println(str); 上述代码先创建一个String对象str,并赋值abc给str,然后运行到第三行,JVM会再创建一个新的str对象,并将原有str的值和de加起来再赋值给新的str。而第一个创建的str对象被JVM的垃圾回收机制(GC)回收掉。所以str实际上并没有被更改,即String对象一旦创建就不可更改。所以Java中对String对象进行的操作实际上是一个不断创建并回收对象的过程,因此在运行速度上很慢。

JavaSE基础知识

一世执手 提交于 2020-03-05 22:44:42
Java 面向对象 1. 面向对象都有哪些特性以及你对这些特性的理解 1) 继承 : 继承是从已有类得到继承信息创建新类的过程。提供继承信息的类被称为父类 ( 超类、基类 ); 得到继承信息的类被称为 子类(派生类)。 2) 封装 : 通常认为封装是把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义的接口。 封装就是隐藏一切可隐藏的东西,只向外界提供简单的编程接口。 3) 多态性 : 多态性是指允许不同子类型的对象对同一消息作出不同的响应。 简单的说就是用同样的对象引用调用同样的方法但是做了不同的事情。 多态性分为 编译时的多态性和运行时的多态性 。 方法重载( overload )实现的是编译时的多态性(也称为前绑定) , 而方法重写 ( override )实现的是运行时的多态性(也称为后绑定)。 运行时的多态是面向对象 精髓的东西, 要实现多态需要做两件事: 1. 方法重写(子类继承父类并重写父类中已有的或抽象的方法); 2. 对象造型(用父类型引用引用子类型对象,这样同样的引用调用同样的方法就会根据子类对象的不同而表现出不同的行为)。 4) 抽象 : 抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面。 2. 访问权限修饰符 public、private、protected, 以及不写(默认)时的区别 修饰符 当前类 同 包 子 类 其他包

StringBuilder类

杀马特。学长 韩版系。学妹 提交于 2020-03-05 08:23:07
===================================================================================================================== 2.String与StringBuilder原理对比 ========================================================================================================================= 3.StringBuilder的构造方法和api Demo02StringBuilder.java package com.itheima.demo06StringBuilder; /* StringBuilder的常用方法: public StringBuilder append(...) :添加任意类型数据的字符串形式,并返回当前对象自身。 */ public class Demo02StringBuilder { public static void main(String[] args) { //创建StringBuilder对象 StringBuilder bu = new StringBuilder(); /

C#NET获取CalculateMD5Hash32位

谁都会走 提交于 2020-03-04 23:04:13
1 public string CalculateMD5Hash(string input) 2 { 3 MD5 md5 = MD5.Create(); 4 byte[] inputBytes = System.Text.Encoding.ASCII.GetBytes(input); 5 byte[] hash = md5.ComputeHash(inputBytes); 6 StringBuilder sb = new StringBuilder(); 7 for (int i = 0; i < hash.Length; i++) { sb.Append(hash[i].ToString("X2")); } 8 return sb.ToString(); 9 } 来源: https://www.cnblogs.com/wz2988/p/12416513.html

关于 socket 通信

自古美人都是妖i 提交于 2020-03-04 19:28:11
**WebServer** package com . tools . payhelper ; import android . content . Context ; import android . text . TextUtils ; import android . util . Log ; import com . tools . payhelper . utils . AbSharedUtil ; import com . tools . payhelper . utils . BitmapUtil ; import com . tools . payhelper . utils . DBManager ; import com . tools . payhelper . utils . OrderBean ; import com . tools . payhelper . utils . PayHelperUtils ; import com . tools . payhelper . utils . QrCodeBean ; import fi . iki . elonen . NanoHTTPD ; import fi . iki . elonen . NanoHTTPD . IHTTPSession ; import fi . iki . elonen .