
程序设计
文章平均质量分 71
August_1989
JAVA核心技术,中间件,高性能,高并发,性能调优,机器学习算法
展开
-
PreparedStatement与Statement
PreparedStatement是用来执行SQL查询语句的API之一,Java提供了 Statement、PreparedStatement 和 CallableStatement三种方式来执行查询语句,其中 Statement 用于通用查询, PreparedStatement 用于执行参数化查询,而 CallableStatement则是用于存储过程。同时PreparedStatement还转载 2015-06-09 11:24:03 · 1215 阅读 · 0 评论 -
对面向对象程序设计(OOP)的认识
前言 本文主要介绍面向对象(OO)程序设计,以维基百科的解释:面向对象程序设计(英语:Object-oriented programming,缩写:OOP),指一种程序设计范型,同时也是一种程序开发的方法。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性。 简略来说,面向对象程序设计,指采用了面向对象的方法来进行程序设计。设计原创 2013-07-29 19:21:53 · 2514 阅读 · 0 评论 -
C++类的作用域详细讲解
C++:类作用域每个类都定义了自己的新作用域和唯一的类型。在类的定义体内声明类成员,将成员名引入类的作用域。两个不同的类具有两个不同的作用域。即使两个类具有完全相同的成员列表,它们也是不同的类型。每个类的成员不同于任何其他类(或任何其他作用域)的成员。例如:class First { public: intmemi; double memd;原创 2013-07-15 13:48:59 · 4951 阅读 · 0 评论 -
Direct Buffer vs. Heap Buffer
1、 劣势:创建和释放Direct Buffer的代价比Heap Buffer得要高; 2、 区别:Direct Buffer不是分配在堆上的,它不被GC直接管理(但Direct Buffer的JAVA对象是归GC管理的,只要GC回收了它的JAVA对象,操作系统才会释放Direct Buffer所申请的空间),它似乎给人感觉是“内核缓冲区(buffer in kernel)”。Heap Buffe原创 2015-06-09 12:49:48 · 1563 阅读 · 0 评论 -
mysql子查询慢的问题
当你在用explain工具查看sql语句的执行计划时,若select_type 字段中出现“DEPENDENT SUBQUERY”时,你要注意了,你已经掉入了mysql子查询慢的“坑"。。。下面我们来看一个具体的例子 有这样一条查询语句: SELECT gid,COUNT(id) as count FROM shop_goods g1 WHERE status =0 and gid原创 2014-10-25 21:39:20 · 2933 阅读 · 0 评论 -
共用体结构体的内存分配
1. 共用体内存分配共用体表示几个变量共用一个内存位置,在不同的时间保存不同的数据类型和不同长度的变量。在union中,所有的共用体成员共用一个空间,并且同一时间只能储存其中一个成员变量的值。 下例表示声明一个共用体foo: union foo { int i; char c; double k; }; 再用已声明的共用体可定义共用体变量原创 2013-07-24 09:55:32 · 3598 阅读 · 0 评论 -
理解C语言声明的优先级规则
A 声明从它的名字开始读取,然后按照优先级顺序依次读取;B 优先级从高到低依次是:B.1 声明中被括号括起来的那部分;B.2 后缀操作符: 括号()表示这是一个函数,而[ ]表示这是一个数组;B.3 前缀操作符:星号*表示“指向...的指针”;C 如果const和(或)volatile关键字的后面紧跟类型说明符(如int,long等),原创 2013-07-21 15:03:00 · 1069 阅读 · 0 评论 -
C++智能指针
C++ 智能指针一、简介由于 C++ 语言没有自动内存回收机制,程序员每次 new 出来的内存都要手动 delete。程序员忘记 delete,流程太复杂,最终导致没有 delete,异常导致程序过早退出,没有执行 delete 的情况并不罕见。用智能指针便可以有效缓解这类问题,本文主要讲解参见的智能指针的用法。包括:std::auto_ptr、boost::scoped_原创 2013-07-19 18:43:46 · 874 阅读 · 0 评论 -
库函数和系统调用的区别
库函数是语言本身的一部分,而系统函数是内核提供给应用程序的接口,属于系统的一部分。函数库调用是语言或应用程序的一部分,而系统调用是操作系统的一部分。用户应用程序访问并使用内核所提供的各种服务的途径即是系统调用。在内核和用户应用程序相交界的地方,内核提供了一组系统调用接口,通过这组接口,应用程序可以访问系统硬件和各种操作系统资源。 1.系统调用是为了方便应用使用操作系统的接口原创 2013-07-22 18:22:15 · 1574 阅读 · 0 评论 -
何种情况下可以用对象名直接访问私有变量
私有成员变量的概念,在脑海中的现象是,以private关键字声明,是类的实现部分,不对外公开,不能在对象外部访问对象的私有成员变量.然而,在实现拷贝构造函数和赋值符函数时,在函数里利用对象直接访问了私有成员变量,因而,产生了困惑.下面以具体实例进行说明:class CTest { public: CTest(int i); CTest(const CTest& r原创 2013-07-14 20:55:16 · 2694 阅读 · 1 评论 -
内存中堆与栈的区别
此文章虽然是面向C/C++程序员写得,但是对咱们Java程序员还是很有帮助的。 堆和栈的区别 一、预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序原创 2013-07-19 11:05:22 · 924 阅读 · 0 评论 -
C语言中的内存泄露,如何避免,如何检测
有些程序并不需要管理它们的动态内存的使用。当需要内存时,它们简单地通过分配来获得,从来不用担心如何释放它。这类程序包括编译器和其他一些运行一段固定的(或有限的)时间然后终止的程序。当这种类型的程序终止时,所有内存会被自动回收。细心查验每块内存是否需要回收纯属浪费时间,因为它们不会再被使用。其他程序的生存时间要长一点。有些工具如日历管理器、邮件工具以及操作系统本事经常需要数日及至数周连续运行,并原创 2013-09-08 13:09:28 · 8750 阅读 · 2 评论 -
vmstat命令
vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。这个命令是我查看Linux/Unix最喜爱的命令,一个是Linux/Unix都支持,二是相比top,我可以看到整个机器的CPU,内存,IO的使用情况,而不是单单看到各个进程的CPU使用率和内存使用率(使用场景不一样)。一般vmst原创 2013-09-08 13:14:21 · 1594 阅读 · 0 评论 -
C语言中的setjmp和longjmp函数
C语言的setjmp:异常处理与构建协作式多任务系统int setjmp(jmp_buf envbuf)宏函数setjmp()在缓冲区envbuf中保存系统堆栈里的内容,供longjmp()以后使用,setjmp()必须使用头文件setjmp.h。调用setjmp()宏时,返回值为0,然而longjmp()把一个变原传递给setjmp(),该值(恒不为0)就是调用longjmp()原创 2013-07-22 11:56:11 · 1503 阅读 · 0 评论 -
C++new/delete相关知识点详解
每个程序在执行时都占用一块可用的内存空间,用于存放动态分配的对象,此内存空间称为程序的自由存储区(free store)或堆(heap)。C语言用一堆标准库函数malloc和free在自由存储区中分配存储空间,而C++则用new和delete表达式实现相同的功能。 一、new和delete创建和释放动态数组:数组类型的变量有三个重要的限制:数组长度固定,在编译时必须知道其长度,数组只在原创 2013-07-31 23:17:15 · 1955 阅读 · 0 评论 -
hash表详细讲解及实现
哈希表是种数据结构,它可以提供快速的插入操作和查找操作。第一次接触哈希表时,它的优点多得让人难以置信。不论哈希表中有多少数据,插入和删除(有时包括侧除)只需要接近常量的时间即0(1)的时间级。实际上,这只需要几条机器指令。 对哈希表的使用者一一人来说,这是一瞬间的事。哈希表运算得非常快,在计算机程序中,如果需要在一秒种内查找上千条记录通常使用哈希表(例如拼写检查器)哈希表的速度明显比树快原创 2013-07-19 11:00:31 · 3603 阅读 · 1 评论 -
C++检查内存溢出的方法
一: ps vx| grep 进程号 ----看size和rss段是否在增加。 方法二:http://www.ibm.com/developerworks/cn/aix/library/au-mallocdebug.html如果是AIX服务器 :引言在编写应用程序时进行动态内存分配是非常必要的。它可以在程序运行的过程中帮助分配所需的内原创 2013-07-30 15:12:57 · 7062 阅读 · 0 评论 -
对C++默认构造函数的理解
在文章开始之前,首先指出对于c++新手的两个常见的误解: 一、任何class如果没有定义default constructor,就会被合成出一个来。 二、编译器合成出来的default constructor会明确设定'“class内每一个data member的默认值”。 首先我们来讨论第一个误解。编译器并不是给任何一个没有use原创 2013-07-30 14:23:59 · 1003 阅读 · 0 评论 -
可执行文件中的段在内存中的布局
一个可执行文件中的段都是由 bss段、data段、text段、堆栈段等部分组成。这样的概念,不知道最初来源于哪里的规定,但 在当前的计算机程序设计中是很重要的一个基本概念。而且在嵌入式系统的设计中也非常重要,牵涉到嵌入式系统运行时的内存大小分配,存储单元占用空间大小的问题。BSS段:BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域。BSS是英文Blo原创 2013-07-22 11:52:08 · 3003 阅读 · 0 评论 -
new与malloc的区别
1,malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。2,对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于m原创 2013-07-19 11:41:40 · 820 阅读 · 0 评论 -
C和C++中的异常处理
1. 简介简介许多的编程新手对异常处理视而不见,程序里很少考虑异常情况。一部分人甚至根本就不考虑,以为程序总是能以正确的途径运行。譬如我们有的程序设计者调用fopen打开一个文件后,立马就开始进行读写操作,根本就不考虑文件是否正常打开了。在编程过程中恰当地使用异常处理可以增强软件的健壮性。本文将介绍C和C++对于异常处理的一些常用方法。2. C语言异常处理2.1 无条件原创 2013-07-28 09:46:09 · 3436 阅读 · 0 评论 -
C++初始化列表
何谓初始化列表与其他函数不同,构造函数除了有名字,参数列表和函数体之外,还可以有初始化列表,初始化列表以冒号开头,后跟一系列以逗号分隔的初始化字段。在C++中,struct和class的唯一区别是默认的克访问性不同,而这里我们不考虑访问性的问题,所以下面的代码都以struct来演示。struct foo{ string name ; int id ; foo(原创 2013-08-07 23:13:00 · 1252 阅读 · 0 评论 -
指针与数组的异同
1.把数组作为参数传递的时候,会退化为指针数组名作为函数形参时,在函数体内,其失去了本身的内涵,仅仅只是一个指针; 很遗憾,在失去其内涵的同时,它还失去了其常量特性,可以作自增、自减等操作,可以被修改。 所以,数据名作为函数形参时,其全面沦落为一个普通指针!它的贵族身份被剥夺,成了一个地地道道的只拥有4个字节的平民。 典型的情况是void func(int A[])原创 2013-07-21 15:37:13 · 935 阅读 · 0 评论 -
C中的volatile用法
volatile 影响编译器编译的结果,指出,volatile 变量是随时可能发生变化的,与volatile变量有关的运算,不要进行编译优化,以免出错,(VC++ 在产生release版可执行码时会进行编译优化,加volatile关键字的变量有关的运算,将不进行编译优化。)。 例如: volatile int i=10; int j = i; ... int k = i;原创 2013-08-25 20:18:59 · 1359 阅读 · 0 评论 -
内存对齐与ANSI C中struct型数据的内存布局
当在C中定义了一个结构类型时,它的大小是否等于各字段(field)大小之和?编译器将如何在内存中放置这些字段?ANSI C对结构体的内存布局有什么要求?而我们的程序又能否依赖这种布局?这些问题或许对不少朋友来说还有点模糊,那么本文就试着探究它们背后的秘密。 首先,至少有一点可以肯定,那就是ANSI C保证结构体中各字段在内存中出现的位置是随它们的声明顺序依次递增的,并且第一个字段的首原创 2013-08-13 12:07:19 · 2366 阅读 · 1 评论 -
【C/C++】内存分配函数:malloc,calloc,realloc,_alloca
【C/C++】内存分配函数:malloc,calloc,realloc,_allocamalloc:原型:extern void *malloc(unsigned int num_bytes); 头文件:在TC2.0中可以用malloc.h或 alloc.h (注意:alloc.h 与 malloc.h 的内容是完全一致的),而在Visual C++6.0中可以用malloc原创 2013-08-23 10:11:18 · 5523 阅读 · 0 评论 -
返回指向局部变量的指针或引用的带来的问题讨论
返回局部变量没问题 如果返回局部变量有问题,函数的意义还有吗? 全局变量还用返回吗? 返回指向局部变量的指针才有问题, 函数退栈之后,局部变量消失, 指针将指向未知区域,所以出现问题。返回局部变量的引用也是绝对不可以的。 引用只是变量的一个别名,变量本体都不存在了,引用当然也没有任何意义。 还有,如果是堆空间,可以返回,即在函数中用new申请的空间,是可以返回的。原创 2013-08-10 19:31:06 · 8812 阅读 · 7 评论 -
进程、过程调用、函数调用、堆、栈
我们在这里拿最典型且开源的Unix/Linux平台举例:1. 进程进程:程序的一次动态执行过程,是操作系统管理系统活动的基本单位。从内核的角度看,进程是系统中的一个对象,它对应一个程序的执行流并且是一个资源分配(包括内存和文件等)的单位。在Linux中,一个进程包括四个部分内容:指令段(正文段):存放程序的CPU指令代码。用户数据段:存放程序所需要的数据。用户堆栈段:程序执行所需要的堆原创 2013-08-10 18:08:42 · 1881 阅读 · 0 评论 -
为什么静态成员必须在类外初始化
为什么静态成员不能在类内初始化在C++中,类的静态成员(static member)必须在类内声明,在类外初始化,像下面这样。class A{ private: static int count ; // 类内声明};int A::count = 0 ; // 类外初始化,不必再加static关键字为什么?因为静态成员属于整个类,而不属于某个对象,如原创 2013-08-07 23:10:34 · 1658 阅读 · 0 评论