字节码

mysql 连接url中useUnicode=true&characterEncoding=UTF-8 的作用

旧街凉风 提交于 2019-12-17 08:43:18
我们在连接mysql数据库的时候一般都会在url后面添加useUnicode=true&characterEncoding=UTF-8 ,但是问什么要添加呢? 添加的作用是:指定字符的编码、解码格式。 例如:mysql数据库用的是gbk编码,而项目数据库用的是utf-8编码。这时候如果添加了useUnicode=true&characterEncoding=UTF-8 ,那么作用有如下两个方面: 1. 存数据时: 数据库在存放项目数据的时候会先用UTF-8格式将数据解码成字节码,然后再将解码后的字节码重新使用GBK编码存放到数据库中。 2.取数据时: 在从数据库中取数据的时候,数据库会先将数据库中的数据按GBK格式解码成字节码,然后再将解码后的字节码重新按UTF-8格式编码数据,最后再将数据返回给客户端。 注意:在xml配置文件中配置数据库utl时,要使用&的转义字符也就是& 例如:<property name="url" value="jdbc:mysql://localhost:3306/email?useUnicode=true&characterEncoding=UTF-8" /> HTML中常用的特殊字符: 最常用的字符实体(Character Entities) 显示结果 说明 Entity Name Entity Number 显示一个空格     < 小于 < <

[JVM] 用Javap分析字节码文件

扶醉桌前 提交于 2019-12-17 04:14:14
Java源文件经过编译器编译会生成 .class文件(字节码),然后才能在JVM上运行。 javap是JDK自带的分析字节码文件的工具,它的用法如下。 F:\IdeaProject\HappyJava\src>javap -help 用法: javap <options> <classes> 其中, 可能的选项包括: -help --help -? 输出此用法消息 -version 版本信息 -v -verbose 输出附加信息 -l 输出行号和本地变量表 -public 仅显示公共类和成员 -protected 显示受保护的/公共类和成员 -package 显示程序包/受保护的/公共类 和成员 (默认) -p -private 显示所有类和成员 -c 对代码进行反汇编 -s 输出内部类型签名 -sysinfo 显示正在处理的类的 系统信息 (路径, 大小, 日期, MD5 散列) -constants 显示最终常量 --module <模块>, -m <模块> 指定包含要反汇编的类的模块 --module-path <路径> 指定查找应用程序模块的位置 --system <jdk> 指定查找系统模块的位置 --class-path <路径> 指定查找用户类文件的位置 -classpath <路径> 指定查找用户类文件的位置 -cp <路径> 指定查找用户类文件的位置

设计模式_代理模式_动态代理

我们两清 提交于 2019-12-17 03:02:10
转自:https://www.ibm.com/developerworks/cn/java/j-lo-proxy-pattern/index.html 动态代理是指在运行时动态生成代理类。即, 代理类的字节码将在运行时生成并载入当前代理的 ClassLoader 。与静态处理类相比,动态类有诸多好处。首先,不需要为真实主题写一个形式上完全一样的封装类,假如主题接口中的方法很多,为每一个接口写一个代理方法也很麻烦。如果接口有变动,则真实主题和代理类都要修改,不利于系统维护;其次,使用一些动态代理的生成方法甚至可以在运行时制定代理类的执行逻辑,从而大大提升系统的灵活性。 动态代理类使用字节码动态生成加载技术,在运行时生成加载类。生成动态代理类的方法很多,如, JDK 自带的动态处理 、 CGLIB 、Javassist 或者 ASM 库。JDK 的动态代理使用简单,它内置在 JDK 中,因此不需要引入第三方 Jar 包,但相对功能比较弱。CGLIB 和 Javassist 都是高级的字节码生成库,总体性能比 JDK 自带的动态代理好,而且功能十分强大。ASM 是低级的字节码生成工具,使用 ASM 已经近乎于在使用 Java bytecode 编程,对开发人员要求最高,当然,也是性能最好的一种动态代理生成工具。但 ASM 的使用很繁琐,而且性能也没有数量级的提升,与 CGLIB

JVM学习笔记(一):Java内存区域

元气小坏坏 提交于 2019-12-16 21:43:27
引子 你所处的环境决定了你能力的上限——或者,你自己成为上限。 最近又复习了一下JVM相关的知识,这里,记录下自己学习时总结的一些笔记,一来加深自己的记忆,二来希望能帮到将要面试的各位。 PS:本文总结自周志明大牛所著的《深入理解Java虚拟机》第二版的第二章,强烈建议学习虚拟机的各位一读!该书没有一句废话,每一句话都是要点! Java 虚拟机运行时数据区 上图就是 Java 虚拟机运行时数据区 的总览,下面将分别介绍。 1、程序计数器 程序计数器(Program Counter Register)是一块较小的内存空间,它 可以看做是当前线程所执行的字节码的行号指示器。 在虚拟机的 概念模型 里, 字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令 。注意,这里仅仅是概念模型,不同的虚拟机可能会通过一些更高效的方式去实现。 在任何一个确定的时刻,一个处理器(对于多核处理器来说是一个内核)都只会执行一条指令。因此,为了线程切换后能恢复到正确的执行位置, 每条线程都需要有一个独立的程序计数器,各条线程之间计数器互不影响,独立存储。 我们称这类内存区域为“线程私有”的内存。上面的图中,线程隔离的数据区,都是 线程私有 的。 需要注意的是, 如果线程执行的是一个Java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址;如果正在执行的是 Native 方法

JDK、JRE、JVM区别

不想你离开。 提交于 2019-12-16 20:52:49
首先是JDK JDK(Java Development Kit) 是 Java 语言的软件开发工具包(SDK)。在JDK的安装目录下有一个jre目录,里面有两个文件夹bin和lib,在这里可以认为bin里的就是jvm,lib中则是jvm工作所需要的类库,而jvm和 lib合起来就称为jre。 然后我们来看JRE JRE(Java Runtime Environment,Java运行环境),包含JVM标准实现及Java核心类库。JRE是Java运行环境,并不是一个开发环境,所以没有包含任何开发工具(如编译器和调试器) 最后JVM也一目了然了 JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。 由上图一目了然: JDK是整个Java的核心,包括了Java运行环境JRE、Java工具和Java基础类库。JRE是运行JAVA程序所必须的环境的集合,包含JVM标准实现及Java核心类库。JVM是整个java实现跨平台的最核心的部分,能够运行以Java语言写的程序。 JVM体系结构与运行原理: Java语言写的源程序通过Java编译器,编译成与平台无关的‘字节码程序’(.class文件,也就是0,1二进制程序),然后在OS之上的Java解释器中解释执行。

Android APK安装过程学习笔记

末鹿安然 提交于 2019-12-16 15:45:15
1.什么是APK   APK,即Android Package,Android安装包。不同平台的安装文件格式都不同,类似于Windows的安装包是二进制的exe格式,Mac的安装包是dmg格式。APK可以再Android上执行安装,APK的本质是一个Zip压缩包,只是后缀被修改为apk,其中打包了源代码编译出的class.dex、一些图片视屏资源文件和一些Native库文件。APK文件与Zip文件最大的一个不同是APK包含签名文件,用于保证安装包安全不被修改。 2.什么是DEX文件和ODEX文件   Java卡平台是由源代码编译出的class文件分别运行在不同平台的虚拟机上,由虚拟机屏蔽了不同平台的差异。但是由于Android系统针对手持设备,对Dalvik虚拟机进行了优化,主要包括:     (1)将原来class文件进行优化,例如将其中的常量冗余信息进行合并,提供虚拟机解析效率;     (2)修改JVM运行时基于栈的数据结构修改为Dalvik基于寄存器的数据结构,数据访问方式更快,运行效率更高。   这种情况下,原来的.class文件就有些不适用了,因此,出现了dex文件格式,它是源代码编译后打包生成的文件。它是APK的一个组成部分。ODEX文件是Dalvik将dex文件中可执行文件class.dex文件解压出来后,存储在本地后生成的

Java se

家住魔仙堡 提交于 2019-12-16 11:38:06
1、 环境 JDK : Java 开发工具包,内部包含了一些开发环境 JRE 。 JRE : Java 运行时环境, java 提供的一些核心类库和 JVM (运行环境)。 JVM : Java 虚拟机,提供 java 运行环境。 包含关系: JDK>JRE>JVM 一般开发的时候,我们只需要从官网下载 JDK 即可, JDK 针对不同的系统平台,如 Windows , Mac , Linux 等。一般在开发或者运行的时候,根据自己的平台针对性下载。 开发的时候必须用 JDK ,运行的时候用 JRE 。 2、Java 的执行过程 A、 程序员编写原文件( .java 结尾) B、 编译器编译原文件( .class 结尾,字节码文件)【编译器在 bin/javaw.exe 】( bin 目录下的 Javac.exe ) C、JVM 运行字节码文件【解释器在 bin/java.exe 】( bin 目录下的 Java.exe ) 备注:一处编译,处处运行(编译成 .class ) 注:配置环境的目的就是跨磁盘运行 3、 命令: Java -version :查看 jdk 的版本 Javac :检查编译器是否可用(将 .java 编译为 .class ) Java :检查解释器是否可用(运行(类名) .class 文件) Java 程序开发三步骤:编写、编译、运行 4、 注释: A、

JavaScript 引擎 V8 执行流程概述

与世无争的帅哥 提交于 2019-12-16 11:12:19
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 本文首发于 vivo互联网技术 微信公众号 链接: https://mp.weixin.qq.com/s/t__Jqzg1rbTlsCHXKMwh6A 作者:赖勇高 本文主要讲解的是V8的技术,是V8的入门篇,主要目的是了解V8的内部机制,希望对前端,快应用,浏览器,以及nodejs同学有些帮助。这里不涉及到如何编写优秀的前端,只是对JS内部引擎技术的讲解。 一、V8来源 V8的名字来源于汽车的“V型8缸发动机”(V8发动机)。V8发动机主要是美国发展起来,因为马力十足而广为人知。V8引擎的命名是Google向用户展示它是一款强力并且高速的JavaScript引擎。 V8未诞生之前,早期主流的JavaScript引擎是JavaScriptCore引擎。JavaScriptCore是主要服务于Webkit浏览器内核,他们都是由苹果公司开发并开源出来。据说Google是不满意JavaScriptCore和Webkit的开发速度和运行速度,Google另起炉灶开发全新的JavaScript引擎和浏览器内核引擎,所以诞生了V8和Chromium两大引擎,到现在已经是最受欢迎的浏览器相关软件。 二、V8的服务对象 V8是依托Chrome发展起来的,后面确不局限于浏览器内核。发展至今V8应用于很多场景

学习记录-java基础部分(一)

假装没事ソ 提交于 2019-12-16 10:35:41
学习记录-java基础部分(一) 参考:GitHub上的知名项目:javaGuide : https://github.com/Snailclimb/JavaGuide/blob/master/docs/java/Java%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86.md 1. 面向对象和面向过程的区别 面向过程 : 面向过程性能比面向对象高。 因为类调用时需要实例化,开销比较大,比较消耗资源,所以当性能是最重要的考量因素的时候,比如单片机、嵌入式开发、Linux/Unix等一般采用面向过程开发。但是, 面向过程没有面向对象易维护、易复用、易扩展。 面向对象 : 面向对象易维护、易复用、易扩展。 因为面向对象有封装、继承、多态性的特性,所以可以设计出低耦合的系统,使系统更加灵活、更加易于维护。但是, 面向对象性能比面向过程低 。 面向过程 :面向过程性能比面向对象高?? 这个并不是根本原因,面向过程也需要分配内存,计算内存偏移量,Java性能差的主要原因并不是因为它是面向对象语言,而是Java是半编译语言,最终的执行代码并不是可以直接被CPU执行的二进制机械码。 而面向过程语言大多都是直接编译成机械码在电脑上执行,并且其它一些面向过程的脚本语言性能也并不一定比Java好。 2. Java 语言有哪些特点? 简单易学; 面向对象(封装,继承,多态);

java和PHP的区别

二次信任 提交于 2019-12-16 10:27:15
java和PHP的区别 本文章纯属自己记录学习的文章,东西都是查看别人的文章总结的,链接如下: PHP编译: https://blog.csdn.net/tracywxh/article/details/41147915 JIT即时编译: https://www.cnblogs.com/jueyoq/p/7900232.html 考点:java特性 分析:答题方向——代码编译,模板引擎,多线程 名词解释: 1)静态语言:就是在编译时就知道数据类型的语言(java,c,c++等),动态语言就是运行时才确定数据类型(js,php) 2)JVM:虚拟机 3)JIT:即时编译 知识扩展: 1)java的程序编译过程 java是一种静态语言,但是比较特殊,需要编译,但是并不是在执行之前就编译为本地机器码。所以java编译机制分为两个时期: javac指令讲java源码变成java字节码的静态编译过程 java字节码被编译为本地机器码的过程,并且因为这个过程是在程序运行时期完成的所以称之为即时编译。 静态编译过程是javac来完成的,而即时编译是通过JVM(虚拟机)来完成的。即时编译机制是被内嵌于 java字节码执行引擎之中,可以算的上是 jvm的一个内存组件。 jvm的执行引擎中 有 一个解释器用来识别字节码指令,并将字节码指令映射为机器指令 调用操作系统来完成程序的运行。 这样来看