字节码

mysql数据库URL解析

你说的曾经没有我的故事 提交于 2019-12-05 02:47:59
以举例的形式对常见配置进行解析。 比如: datasource.url =   jdbc:mysql://localhost:3306/emp?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull localhost:数据库所在服务器的IP 3306:数据库的端口号 emp:数据库的名字,databasename useUnicode:是否使用Unicode字符集characterEncoding:当useUnicode设置为true时,指定字符编码。 说明一:mysql数据库用的是gbk编码,而你项目的mysql数据库需要的是utf-8编码,所以在url后面添加?useUnicode=true&characterEncoding=utf-8",表示 (1)数据库在存放项目数据的时候会先用UTF-8格式将数据解码成字节码,然后再将解码后的字节码重新使用GBK编码存放到数据库中; (2)从数据库中取数据的时候,数据库会先将数据库中的数据按GBK格式解码成字节码,然后再将解码后的字节码重新按UTF-8格式编码数据,最后再将数据返回给客户端。 说明二:JAVA连接MySQL数据库,在操作各项值均为0(或者有0不正确的数据?)的timestamp等(日期为0000-00-00。。。。

APM系统SkyWalking介绍

这一生的挚爱 提交于 2019-12-05 01:04:01
公司最近在构建服务化平台,需要上线APM系统,本篇文章简单的介绍SkyWalking APM APM全称Application Performance Management应用性能管理,目的是通过各种探针采集数据,收集关键指标,同时搭配数据呈现以实现对应用程序性能管理和故障管理的系统化解决方案 Zabbix、Premetheus、open-falcon等监控系统主要关注服务器硬件指标与系统服务运行状态等,而APM系统则更重视 程序内部执行过程 指标和 服务之间链路调用 情况的监控,APM更有利于深入代码找到请求响应“慢”的根本问题,与Zabbix之类的监控是互补关系 目前市面上开源的APM系统主要有CAT、Zipkin、Pinpoint、SkyWalking,大都是参考Google的 Dapper 实现的 CAT: 是由国内美团点评开源的,基于Java语言开发,目前提供Java、C/C++、Node.js、Python、Go等语言的客户端,监控数据会全量统计,国内很多公司在用,例如美团点评、携程、拼多多等,CAT跟下边要介绍的Zipkin都需要在应用程序中埋点,对代码侵入性强,我们倾向于选择对代码无侵入的产品,所以淘汰了CAT Zipkin: 由Twitter公司开发并开源,Java语言实现,侵入性相对于CAT要低一点,需要对web.xml之类的配置文件做修改,但依然对代码有侵入

JVM,JDK,JRE

徘徊边缘 提交于 2019-12-05 00:53:20
JVM,JDK,JRE 什么是JVM Java 虚拟机。 这个名词 由Java和虚拟机前后两部分组成 。 它有和其他虚拟机 共性 :JVM是通过软件模拟的计算机系统。 它也有自己的 特性 :JVM使用软件模拟的指令集是Java字节码, 通过字节码这个中间层做到屏蔽对系统的依赖 。 追问:什么是字节码?字节码的好处? 字节码是Java虚拟机的指令,是具有一个字节长度的数字。 好处: 和解释性语言相比 解决了传统解释性语言执行效率低的问题,同时保留了语言可移植性的特点。所以Java程序高效且 无需重新编译 便可在多种不同操作系统上运行。 原因是:对于一般的代码,JVM将字节码 解释执行,屏蔽对系统的依赖 ;对于热点的代码,会通过 JIT动态编译为机器码 ,提高执行效率。 再追问:什么是JIT? JIT是Just In Time的意思,也就是即时编译 再追问:即时编译那么快,为什么不全部都进行即时编译呢? 引用博客园ddzz1991 空间开销的角度看: 对一般的Java方法而言, 编译后 代码的大小相对于字节码的大小, 膨胀比达到10x ,如果把所有代码都编译则会显著增加代码所占空间,导致“代码爆炸”。 时间开销的角度看: 对比 解释执行和动态编译 解释器的执行,抽象的看 :字节码 -> [ 解释器 解释执行 ] -> 执行结果 JIT编译然后再执行的话,抽象的看 :字节码 -> [

还没搞懂JVM吗?95%的技术面试必问知识点都在这,还怕面不过?

与世无争的帅哥 提交于 2019-12-04 20:42:28
概述:知识点汇总 jvm的知识点汇总共6个大方向:内存模型、类加载机制、GC垃圾回收是比较重点的内容。性能调优部分偏重实际应用,重点突出实践能力。编译器优化和执行模式部分偏重理论基础,主要掌握知识点。 各个部分的内容如下: 1>内存模型部分 :程序计数器、方法区、堆、栈、本地方法栈的作用,保存哪些数据; 2>类加载部分 :双亲委派的加载机制以及常用类加载器分别加载哪种类型的类; 3>GC部分 :分代回收的思想和依据,以及不同垃圾回收算法实现的思路、适合的场景; 4>性能调优部分 :常用的jvm优化参数的作用,参数调优的依据,要了解常用的jvm分析工具能分析哪类问题,以及使用方法; 5>执行模式部分 :解释、编译、混合模式的优缺点,了解java7提供的分层编译技术。需要知道JIT即时编译技术和OSR也就是栈上替换,知道C1、C2编译器针对的场景,其中C2针对server模式,优化更激进。在新技术方面可以了解一下java10提供的由java实现的graal编译器。 6>编译优化部分 :前端编译器javac的编译过程、AST抽象语法树、编译期优化和运行期优化。编译优化的常用技术,包括公共子表达式的消除、方法内联、逃逸分析、栈上分配、同步消除等。明白了这些才能写出对编译器友好的代码。 jvm的内容相对来说比较集中,但是对知识深度的掌握要求较高,建议面试前重点加强。 一、jvm内存相关考点

Java虚拟机-字节码指令

北战南征 提交于 2019-12-04 19:45:41
目录 字节码指令 字节码与数据类型 加载和存储指令 运算指令 类型转换指令 对象创建与访问指令 操作数栈管理指令 控制转移指令 方法调用和返回指令 异常处理指令 同步指令 字节码指令 Java虚拟机的指令由一个字节长度的、代表着某种特定操作含义的数字(称为操作码,Opcode)以及跟随其后的零至多个代表此操作所需参数(称为操作数,Operands)构成。Java虚拟机采用面向操作数栈而不是面向寄存器的架构,所以大多数指令都不包含操作数,只有一个操作码。 Java虚拟机操作码长度限制为一个字节(0-255),并且Class文件格式放弃类编译后代码的操作数长度对齐。所以虚拟机处理那些超过一个字节数据的时候,不得不在运行时从字节中重建出具体的数据的结构。这种操作会导致解释执行字节码时损失一些性能,但是这样意味着节省很多填充和间隔符号,编译代码也更加短小精干。这也是因为Java最初设计是面向网络、智能家电的技术背景,并且一直沿用至今。现在的网络带宽相比几十年前已经扩宽了很多倍,本地的计算性能也提高了无数倍。那现在这个思想是否还需要继续保持呢?在56k拨号上网、386的时代Java虚拟机针对编译时的优化或许决定了应用的成败,但是在现在5G和16甚至32核服务器以及Java虚拟机自身的发展与优化,常见的问题主要就是OOM了。 字节码与数据类型 Java虚拟机的指令集中

JVM探究之 —— 类加载过程

假装没事ソ 提交于 2019-12-04 19:19:59
1. 类加载是什么 虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。 与那些在编译时需要进行连接工作的语言不同,在Java语言里面,类型的加载、连接和初始化过程都是在程序运行期间完成的,这种策略虽然会令类加载时稍微增加一些性能开销,但是会为Java应用程序提供高度的灵活性,Java里天生可以动态扩展的语言特性就是依赖运行期动态加载和动态连接这个特点实现的。 2. 类加载的时机 类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)和卸载(Unloading)7个阶段。其中验证、准备、解析3个部分统称为连接(Linking)。 上图中,加载、验证、准备、初始化和卸载这5个阶段的顺序是确定的,类的加载过程必须按照这种顺序按部就班地开始,而解析阶段则不一定:它在某些情况下可以在初始化阶段之后再开始,这是为了支持Java语言的运行时绑定(也称为动态绑定或晚期绑定)。 3. 类加载的过程 3.1 加载 什么情况下需要开始类加载过程的第一个阶段:加载?Java虚拟机规范中并没有进行强制约束

jvm运行时数据区之程序计数器

我与影子孤独终老i 提交于 2019-12-04 18:50:21
什么是程序计数器? 程序计数器是一块 较小 的内存空间,它可以看做是当前线程所执行的字节码的 行号指示器 ;在虚拟机的概念模型里(仅仅是概念模型,各种虚拟机可能会通过一些更高效的方式去实现),字节码解释器工作时,就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳准、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成 ; ———–摘抄自 周志明版 《深入理解java虚拟机》 P39 简单的理解为,是程序计数器保证了程序的正常执行 ; 有什么特点 线程私有的 是java虚拟机规范里面, 唯一 一个 没有规定任何 OutOfMemoryError 情况的区域 生命周期随着线程,线程启动而产生,线程结束而消亡 为什么具有这些特点 要想理解什么是程序计数器,以及它的特点,需要理解上文中的一句话 这里重点理解 :程序计数器,可以看做是当前线程执行的字节码的 行号指示器 ,这句话;要理解这句话,需要先知道字节码文件长什么样子,看下面的代码 // java 文件被翻译为字节码的时候,字节码大概类似于下面的样子 public void haha(){ // 原来的 haha 方法内部的 java 代码,被翻译为下面的类似于汇编语言的指令 0 xxxx .... 2 xxxx .... 4 xx ... 5 xxx ... } 上面左边的 0、2、4、5

数据结构与面向对象程序设计》实验8报告

爱⌒轻易说出口 提交于 2019-12-04 17:42:53
学号 20182329 2019-2020-1 《数据结构与面向对象程序设计》实验8报告 课程:《程序设计与数据结构》 班级: 1823 姓名: 李一卓 学号:20182329 实验教师:王志强 实验日期:2019年10月16日 必修/选修: 必修 1.实验内容 自己根据链的结构,编写一个二叉树。 创建NODE的ATD结构,以及Link的ATD结构以适应树的建立。 学会使用树的先序遍历、中序遍历、后序遍历,来查找、后者是建立树。 学习决策树的的定义和实现方法,可以参照完全二叉树的建立。 实验四也就是用中缀表达式建立一棵树,用后缀表达式输出。 2. 实验过程及结果 参考教材PP16.1,完成链树LinkedBinaryTree的实现(getRight,contains,toString,preorder,postorder)用JUnit或自己编写驱动类对自己实现的LinkedBinaryTree进行测试,提交测试代码运行截图,要全屏,包含自己的学号信息 基于LinkedBinaryTree,实现基于(中序,先序)序列构造唯一一棵二㕚树的功能,比如给出中序HDIBEMJNAFCKGL和后序ABDHIEJMNCFGKL,构造出附图中的树 用JUnit或自己编写驱动类对自己实现的功能进行测试,提交测试代码运行截图,要全屏,包含自己的学号信息 自己设计并实现一颗决策树 输入中缀表达式

初识JavaScript二-----浏览器与JavaScript

删除回忆录丶 提交于 2019-12-04 16:23:54
浏览器的核心包括两部分:渲染引擎和JavaScript解释器(又称JavaScript引擎)。 1 渲染引擎 渲染引擎的主要作用:将网页代码渲染为用户视觉可以感知的平面文档。不同的浏览器有不同的渲染引擎。简单说明如下: Firefox:Gecko引擎 Safari:WebKit引擎 Chrome:Blink引擎 IE:Trident引擎 Edge: EdgeHTML引擎 渲染引擎处理网页,通常分成四个阶段。 第1步,解析代码:HTML代码解析为DOM,CSS代码解析为CSSOM(CSS Object Model)。 第2步,对象合成:将DOM和CSSOM合成一棵渲染树(render tree)。 第3步,布局:计算出渲染树的布局(layout)。 第4步,绘制:将渲染树绘制到屏幕上。 以上四步并非严格按顺序执行,往往第一步还没完成,第二步和第三步就已经开始了。所以,会看到这种情况:网页的HTML代码还没下载完,但浏览器已经显示出内容了。 2 重流和重绘 渲染树转换为网页布局,称为“布局流”(flow);布局显示到页面的这个过程,称为“绘制”(paint)。它们都具有阻塞效应,并且会耗费很多时间和计算资源。 页面生成以后,脚本操作和样式表操作,都会触发重流(reflow)和重绘(repaint)。用户的互动,也会触发,如设置了鼠标悬停(a:hover)效果、页面滚动