博文

虚拟机安装Oracle RAC到ASM进行到oracleasm步骤时需要注意的两点

    Oracle RAC集群最核心的思想是共享存储空间。如果是用实体机安装搭建RAC集群,由于一般会用两台实体机+外接磁盘阵列,外接磁盘阵列天然就是物理的共享存储,所以按照Oracle RAC的官方文档,安装不应该有任何问题。     但是如果只是想试一下RAC,没有外接磁盘阵列,采取用虚拟机的形式,那么则需要注意配置ASM共享自动管理的地方,需要事先创建好独立于虚拟机之外的虚拟共享硬盘,并同时挂接到两台虚拟机上,以模拟外接磁盘阵列的情况,而不是在某台虚拟机系统内部创建虚拟硬盘,再试图用ASM管理起来,这样是无法通过RAC安装时的ASM步骤的。     另外还有一点,就是据VmWare WorkStation版本有些问题。实际试装时也的确遇到了问题,用VmWare WorkStation单独创建的虚拟硬盘虽然能够分别挂接到两台用VmWare WorkStation创建的虚拟机上,但是RAC安装时走到ASM时,先scandisks,再用oracleasm listdisks命令仍然无法在两台虚拟机上找到分区的虚拟硬盘空间。据说用VmWare Server版本可以避免这个问题,不过实际试装时是用了VirtualBox,安装成功。

Android载入图片时Out of Memory

嗯,这个经典的问题也被我遇上了,修改代码如下: imageView = (ImageView) findViewById(R.id.imageview); InputStream is = this.getResources().openRawResource(R.raw.idcard); BitmapFactory.Options option = new BitmapFactory.Options(); options.inJustDecodeBounds = true;   //先设为只取图片的宽高不实际载入图片 Bitmap btp = BitmapFactory.decodeStream(is, null, options); int imageWidth = options.outWidth; int imageHeight = options.outHeight; DisplayMetrics dm = getReources().getDisplayMetrics(); //获取屏幕的分辨率 int screenHeight = dm.heightPixels; int screenWidth = dm.widthPixels; double heightRate = Math.ceil( (double)imageHeight / (double)screenHeight ); double widthRate = Math.ceil( (dobule)imageWidth / (double)screenWidth ); int shrinkRate = 0; if (heightRate > widthRate) {shrinkRate = (int) heightRate;} else { shrinkRate = (int) widthRate; } if (shrinkRate % 2 == 1 ) {shrinkRate += 1;}   //缩放比例需为2的倍数 options.inJustDecodeBounds= false; //重新设置参数为不获取宽高 options.imSampleSize = shrinkRate; //设置载入图片时的缩放比例 btp...

StringBuffer的声明与初始化

  今天莫名遇到一个空指针的问题,怎么看也看不出来问题。无奈后来只好debug调试,才发现是StringBuffer造成的问题,声明变量时一时手顺就给当做String写成null了,后面的调用于是统统空指针了-_-b 还是记录一下吧: String: String strA = null; StringBuffer: StringBuffer strbfA = new StringBuffer(); 如果需要重新初始化: String: strA = null; StringBuffer: strbfA.setLength(0);

String.replace()

  今天想用String的replace()做替换,但是怎么也得不到想要的结果:   grammarData.replace('n', '\n');   困扰了好一阵子,最后只好把替换前后打印了出来,才恍然大悟:忘了String是不可变的了!于是加了个变量,搞定:   strGrammarData = grammarData.replace('n', '\n');   说起String的特征都明白,但是一coding就给忘了 -_-b

arrayList.toArray()的用法

 做一个arrayList<String>到String[]的转换,调用toArray(),编译出错:     String[] sTemp = (String[])alTemp.toArray();  查了一下,原来toArray有两种方法:toArray()和toArray(T[] a),前者返回object,后者返回指定的<T> T[]  所以想得到String[]的转换,应该调用第二种方法:     String[] sTemp = (String[])alTemp.toArray(new String[]{});

后知后觉了,原来java7开始就支持用string作为switch语句的条件了

public class SwitchString {     public static void test(String str) {         switch(str) {         case "abc":             System.out.println("abc");             break;         case "def":             System.out.println("def");             break;         default:             System.out.println("default");         }     } public static void main(String[] args) { test("def"); } }

Windows平台上Visual Studio C/C++内存泄漏自动检查的工具VLD

VLD是一个用于Windows平台上Visual Studio C/C++内存泄漏自动检查的工具。 VLD通过对内存分配过程进行动态跟踪,在每次内存分配的时候记录其上下文,当程序退出时对检测到的内存泄漏查找其上下文信息,并转换成报告输出到Output中 VLD只能用于Windows平台下,不能用于Linux。 Linux平台下的内存泄漏检测,可以使用 Valgrind 1. 安装VLD 安装前请关闭Visual Stuido 可到VLD的官网下载: http://vld.codeplex.com/ 安装过程中全部接受默认选项与设置即可 2. 打开Visual Studio,检查一下VLD是否已经正确关联: 工具->选项->项目和解决方案->VC++目录->包含文件:确认VLD目录已在,默认安装路径是 C:\Promgram Files(x86)\Visual Memory Detector\include 工具->选项->项目和解决方案->VC++目录->库文件:确认VLD目录已在,默认安装路径是 C:\Promgram Files(x86)\Visual Memory Detector\lib\win32 3. 使用时,在包含入口函数的.cpp文件中包含vld.h就可以。 如果这个cpp文件中包含了预编译头文件stdafx.h,则将包含vld.h的语句放在stdafx.h的包含语句之后,否则放在最前面。 4. 创建一个试验项目: #include<vld.h>    //在文件的最前面包含VLD的头文件 #include<stdlib.h> #include<stdio.h> void f() {     int *p = new int(0x12345678);   //这里new了一个int,4个字节     printf("p=%08x, ", p); } int main() {     f();     return 0; } 5. 编译 debug 模式并执行(注意不要编译成发布release版本),...