自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(29)
  • 资源 (1)
  • 收藏
  • 关注

原创 JSONString转List<map>;Duplicate key

有一个字符串,需要转为List<<Map>>的形式。但是在实际操作中出现了一些问题。//将字符串转为JSONObject或JSONArrayJSONObject jo = JSONObject.fromObject(str);JSONArray ja = jo.getJSONArray(str);思路是将jsonstr先转为JSONObject或JSONArray ,然后遍历组装成List。

2017-06-16 11:05:12 3365

原创 从执行角度解释:return与finally执行顺序

从接触JAVA异常处理相关知识开始,就会遇到一个问题:return与finally的执行顺序。这里从执行的角度进行解释。先说结论: 1.当return在try、catch中时,finally块中代码仍会执行,但不会改变return的值 2.当return在finally中时,会忽略try、catch中的return语句,返回值是finally中改变的值看完结论可能有点懵逼,那么 首先要

2017-05-22 17:01:32 399

原创 String数组转List,java.lang.UnsupportedOperationException异常

可以通过Array.asList方法来将String数组转为List:String arr = {"1","2","3"};List<String> list = Arrays.asList(arr);//将数组转为List但是需要注意,使用Arrays.asLisvt()后,调用add、remove等方法时,报java.lang.UnsupportedOperationException异常。

2017-05-17 09:17:42 696

转载 Comparison method violates its general contract!

Comparison method violates its general contract!

2017-05-16 09:45:43 354

原创 虚拟存储器(二)——Linux虚拟存储器系统

Linux虚拟存储器系统在了解了虚拟存储器的相关知识之后,我们通过Linux的虚拟存储器系统,来大致了解下操作系统是如何组织虚拟存储器的。Linux进程的虚拟存储器 上图是一个Linux进程的虚拟存储器,与之前所示虚拟存储器的区别在于,其展现方式不再是一个个独立的页,而是按照不同的功能组织成不同的区域。区域 Linux将虚拟存储器组织成一些区域的集合。一个区域就是已分配的虚拟存储器的连续

2017-05-06 20:46:39 1242

原创 虚拟存储器(一)——虚拟存储器及地址翻译

虚拟存储器虚拟存储器是一个抽象的概念,主要目的是为多个程序之间有效而安全地共享存储器。它为每个进程提供了一个大的、一致的和私有的地址空间。虚拟地址与物理地址 把主存看成是由连续字节单元组成的大数组,并且用物理地址来标识每个数组的单元。那么物理寻址如下图: 虚拟寻址如下图: 虚拟存储器与物理存储器 虚拟存储器被组织为一个由存放在磁盘上的N个连续的字节大小的单元组成的数组。和存储器层次结构中其他

2017-04-12 19:18:14 1073

原创 String解析——String s=new String("a");String s = "a" + "b";String的intern方法等问题

我们经常能看到一些问题,比如String字符串创建了几个对象,判断是否相等,等等。在这里做一个总结。String字符串在内存中的存储我们常把java内存区分为“堆”和“栈”,但实际上其内存结构用下图来描述更准确: 其中方法区存储虚拟机加载的类信息,常量,静态变量,编译后的代码等数据。运行时常量池是方法区的一部分,我们接下来要说的字符串就保存在常量池中。在java中,所有的字符串都是常量,即每一

2017-03-25 15:12:51 8803 6

原创 异常控制流

异常异常 最简单的处理器控制流是平滑的,即指令按顺序执行。但是系统必须对状态变化进行反应,这种变化不一定和程序执行相关,如一个硬件定时器定期产生信号。异常就是控制流中的突变,用来响应处理器状态中的某些变化。 异常处理 当处理器检测到有事件发生时,就会通过异常表进行跳转,调用异常处理程序。异常表的起始地址放在一个叫做异常表基址寄存器的特殊CPU寄存器里。 异常类别 中断 中断是来自处理器

2017-03-19 14:41:37 352

异常控制流

异常异常 最简单的处理器控制流是平滑的,即指令按顺序执行。但是系统必须对状态变化进行反应,这种变化不一定和程序执行相关,如一个硬件定时器定期产生信号。异常就是控制流中的突变,用来响应处理器状态中的某些变化。 异常处理 当处理器检测到有事件发生时,就会通过异常表进行跳转,调用异常处理程序。异常表的起始地址放在一个叫做异常表基址寄存器的特殊CPU寄存器里。 异常类别 中断 中断...

2017-03-19 14:41:00 124

原创 深入理解计算机系统——链接

链接是将各种代码和数据部分收集起来并组合成为一个单一文件的过程。当我们构建一个大型程序的时候,不需要将其组织为一个巨大的源文件,而是可以把它分解为更小、更好管理的模块,可以独立地修改和编译这些模块。当我们改变这些模块中的一个时,只需简单地重新编译它,并重新链接应用,而不必重新编译其他文件。在学习CSAPP第一章的时候有这么一个图: 在这里,我们通过了解可重定位目标文件及可执行目标文件的格式及组

2017-03-16 10:55:56 849

深入理解计算机系统——链接

链接是将各种代码和数据部分收集起来并组合成为一个单一文件的过程。当我们构建一个大型程序的时候,不需要将其组织为一个巨大的源文件,而是可以把它分解为更小、更好管理的模块,可以独立地修改和编译这些模块。当我们改变这些模块中的一个时,只需简单地重新编译它,并重新链接应用,而不必重新编译其他文件。在学习CSAPP第一章的时候有这么一个图: 在这里,我们通过了解可重定位目标文件及可执行目标文件的格式...

2017-03-16 10:55:00 275

原创 存储器层次结构——基于存储器的程序优化

局部性原理一个编写良好的计算机程序常常具有良好的局部性,它们倾向于引用邻近于其他最近引用过的数据项的数据项,或者最近引用过的数据项本身。局部性通常有两种不同的形式:时间局部性:被引用过一次的存储器位置很可能在不远的将来再被多次引用。空间局部性:如果一个存储器位置被引用了一次,那么程序很可能在不远的将来引用附近的一个存储器位置。下面来看个局部性的代码示例: 变量sum在每此循环中被引用一次

2017-03-08 19:36:04 378

存储器层次结构——基于存储器的程序优化

局部性原理一个编写良好的计算机程序常常具有良好的局部性,它们倾向于引用邻近于其他最近引用过的数据项的数据项,或者最近引用过的数据项本身。局部性通常有两种不同的形式:时间局部性:被引用过一次的存储器位置很可能在不远的将来再被多次引用。空间局部性:如果一个存储器位置被引用了一次,那么程序很可能在不远的将来引用附近的一个存储器位置。下面来看个局部性的代码示例: 变量sum在每此循环中...

2017-03-08 19:36:00 367

原创 优化程序性能

优化程序性能主要从两个步骤来考虑,第一步是消除不必要的内容,第二步是利用处理器的指令级并行能力。消除不必要的内容消除低效率循环 通过移动代码,将执行多次但计算结果不改变的计算移动到循环外面。例:for(i=0;i<str.length();i++)改为int lengtn = str.length();for(i=0;i<length;i++)减少过程的调用 过程调用会带来相当大的开销,

2017-03-02 11:23:57 411

优化程序性能

优化程序性能主要从两个步骤来考虑,第一步是消除不必要的内容,第二步是利用处理器的指令级并行能力。消除不必要的内容消除低效率循环 通过移动代码,将执行多次但计算结果不改变的计算移动到循环外面。例:for(i=0;i&lt;str.length();i++)改为int lengtn = str.length();for(i=0;i&lt;length;i++)...

2017-03-02 11:23:00 132

原创 处理器体系结构

之前我们有简单的提到CPU,这一章我们来了解下CPU是如何实现和工作的,以及流水线处理器的原理。指令集体系结构指令集体系结构,包括各种状态元素、指令集和它们的编码、一组编程规范和异常事件处理。程序员可见的状态 每条指令都会读取或修改处理器状态的某些部分,这称为程序员可见的状态。 指令 下图给出了指令的简单描述,左边是汇编码表示,右边是字节编码表示。 对于字节编码,每条指令需要1~6个字节

2017-02-24 09:56:05 458

处理器体系结构

之前我们有简单的提到CPU,这一章我们来了解下CPU是如何实现和工作的,以及流水线处理器的原理。指令集体系结构指令集体系结构,包括各种状态元素、指令集和它们的编码、一组编程规范和异常事件处理。程序员可见的状态 每条指令都会读取或修改处理器状态的某些部分,这称为程序员可见的状态。 指令 下图给出了指令的简单描述,左边是汇编码表示,右边是字节编码表示。 对于字节编码,每条...

2017-02-24 09:56:00 298

原创 程序的机器级表示(三)

过程过程调用就是调用方法,这里主要了解调用过程的时候存储结构是如何变化的。栈帧结构 IA32程序用程序栈来支持过程调用。机器用栈来传递过程参数、存储返回信息、保存寄存器用于以后恢复,以及本地存储。每个过程会分配一个栈帧。下图描绘了栈帧的通用结构。栈帧的最顶端以两个指针界定,寄存器%ebp为帧指针,寄存器%esp为找指针。当程序执行时,栈指针可以移动,因此大多数信息的访问都是相对于帧指针的。 假

2017-02-20 21:17:53 392

程序的机器级表示(三)

过程过程调用就是调用方法,这里主要了解调用过程的时候存储结构是如何变化的。栈帧结构 IA32程序用程序栈来支持过程调用。机器用栈来传递过程参数、存储返回信息、保存寄存器用于以后恢复,以及本地存储。每个过程会分配一个栈帧。下图描绘了栈帧的通用结构。栈帧的最顶端以两个指针界定,寄存器%ebp为帧指针,寄存器%esp为找指针。当程序执行时,栈指针可以移动,因此大多数信息的访问都是相对于帧...

2017-02-20 21:17:00 189

原创 程序的机器级表示(二)

控制以上操作,我们只考虑了直线代码的行为,即指令按顺序执行。但是还有一些代码,比如条件语句、循环语句和分支语句,要求有条件的执行,这时需要根据数据测试的结果来改变条件码,结合跳转指令决定操作执行的顺序。条件码 除了整数寄存器,CPU还维护着一组单个位的条件码寄存器,它们描述了最近算数或逻辑操作的属性。常用的条件码有: -CF:进位标志。最近的操作使最高位产生了进位。可以用来检查无符号操作数的溢

2017-02-20 21:16:11 604

程序的机器级表示(二)

控制以上操作,我们只考虑了直线代码的行为,即指令按顺序执行。但是还有一些代码,比如条件语句、循环语句和分支语句,要求有条件的执行,这时需要根据数据测试的结果来改变条件码,结合跳转指令决定操作执行的顺序。条件码 除了整数寄存器,CPU还维护着一组单个位的条件码寄存器,它们描述了最近算数或逻辑操作的属性。常用的条件码有: -CF:进位标志。最近的操作使最高位产生了进位。可以用来检查无...

2017-02-20 21:16:00 222

原创 程序的机器级表示(一)

这篇文章内容主要是了解汇编语言,以及它是怎么工作的。以下所介绍的内容均为在x86架构下,x64做了很多64位的扩展。重在理解实现方式及原理。:)程序编码寄存器分类程序计数器:用%eip表示,指示将要执行的下一条指令在存储器中的地址。整数寄存器:用以存储地址或整数数据。条件码寄存器:保存着最近执行的算数或逻辑指令的状态信息。浮点寄存器:存放浮点数据。整数寄存器 机器级代码 我们以一个例子来

2017-02-19 19:08:10 475

程序的机器级表示(一)

这篇文章内容主要是了解汇编语言,以及它是怎么工作的。以下所介绍的内容均为在x86架构下,x64做了很多64位的扩展。重在理解实现方式及原理。:)程序编码寄存器分类程序计数器:用%eip表示,指示将要执行的下一条指令在存储器中的地址。整数寄存器:用以存储地址或整数数据。条件码寄存器:保存着最近执行的算数或逻辑指令的状态信息。浮点寄存器:存放浮点数据。整数寄存器 ...

2017-02-19 19:08:00 220

原创 信息的表示和处理

信息存储字长与字节字长:每个计算机都有一个字长,对于字长为w位的机器而言,虚拟地址范围为0~2w−12^w-1,32位的计算机虚拟地址空间被限定为4GB,当然操作系统有办法解决这一问题。字节:1byte=8bit。寻址与字节顺序。对于跨越多字节的程序对象,我们必须建立两个规则:这个对象的地址是什么,以及在存储器中如何排列这些字节。对象的地址:在几乎所有的机器上,多字节对象都被存储为连续的字节

2017-02-16 16:05:49 353

信息的表示和处理

信息存储字长与字节字长:每个计算机都有一个字长,对于字长为w位的机器而言,虚拟地址范围为0~&lt;nobr&gt;&lt;span class="math" id="MathJax-Span-2056" style="width: 3.576em; display: inline-block;"&gt;&lt;span style="display: inline-block; pos.

2017-02-16 16:05:00 133

原创 了解计算机系统

编译系统预处理阶段:将文件头文件插入程序文本中。编译阶段:翻译成汇编语言程序。汇编阶段:将汇编程序翻译成机器语言,hello.o是一个二进制文件。链接阶段:合并一些预编译好的目标文件(如标准C库中的printf函数),得到可执行文件,可以被加载到内存中,由系统执行。计算机系统的硬件组成这里主要记录CPU,CPU的组成包括运算执行单元(EU)、寄存器单元和控制单元(CU)等。执行单元 A

2017-02-14 15:16:42 274

了解计算机系统

编译系统预处理阶段:将文件头文件插入程序文本中。编译阶段:翻译成汇编语言程序。汇编阶段:将汇编程序翻译成机器语言,hello.o是一个二进制文件。链接阶段:合并一些预编译好的目标文件(如标准C库中的printf函数),得到可执行文件,可以被加载到内存中,由系统执行。计算机系统的硬件组成这里主要记录CPU,CPU的组成包括运算执行单元(EU)、寄存器单元和控制单元(CU...

2017-02-14 15:16:00 111

原创 文本文件与二进制文件的区别

在看CSAPP的时候,有提到文本文件及二进制文件,书中介绍太少所以参考了一些资料,以下为个人理解的两者区别。文本文件属于二进制文件,区别在于读取两者的规则不同。文本文件与二进制文件物理上的存储方式并无不同,都是二进制的。比如某文件中内容是:01000001_01000010_01000011_01000100(下划线_为增加可读性)这是一个二进制文件。 当我们用ASCII码表去解读它的时候,可以得

2017-02-14 15:14:20 245

文本文件与二进制文件的区别

在看CSAPP的时候,有提到文本文件及二进制文件,书中介绍太少所以参考了一些资料,以下为个人理解的两者区别。文本文件属于二进制文件,区别在于读取两者的规则不同。文本文件与二进制文件物理上的存储方式并无不同,都是二进制的。比如某文件中内容是:01000001_01000010_01000011_01000100(下划线_为增加可读性)这是一个二进制文件。 当我们用ASCII码...

2017-02-14 15:14:00 169

Memory Analyzer (MAT)

MAT2016年12月最新版,windows64位,7 December 2016, Memory Analyzer Released Version 1.6.1

2017-03-24

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除