- 博客(103)
- 收藏
- 关注
原创 Java 对象序列化与反序列化
对象序列化是一个用于将对象状态转换为字节流的过程,可以将其保存到磁盘文件中或通过网络发送到任何其他程序;从字节流创建对象的相反的过程称为反序列化。而创建的字节流是与平台无关的,在一个平台上序列化的对象可以在不同的平台上反序列化。如何使Java类可序列化?通过实现java.io.Serializable接口,可以在Java类中启用可序列化。它是一个标记接口,意味着它不包含任何方法或字段,仅用...
2019-04-11 15:18:29
425
原创 深入理解Java序列化
如果你只知道实现 Serializable 接口的对象,可以序列化为本地文件。那你最好再阅读该篇文章,文章对序列化进行了更深一步的讨论,用实际的例子代码讲述了序列化的高级认识,包括父类序列化的问题、静态变量问题、transient 关键字的影响、序列化 ID 问题。在笔者实际开发过程中,就多次遇到序列化的问题,在该文章中也会与读者分享。引言 将Java对象序列化为二进制文件的 Jav...
2019-04-11 14:31:24
306
原创 Java常见运行时异常
java提供了两种异常机制。一种是运行时异常(RuntimeExepction),一种是检查式异常(checked execption)。检查式异常:我们经常遇到的IO异常及sql异常就属于检查式异常。对于这种异常,java编译器要求我们必须对出现的这些异常进行catch 所以 面对这种异常不管我们是否愿意,只能自己去写一堆catch来捕捉这些异常。运行时异常:我们可以不处理。当出现这样的...
2019-04-11 14:24:14
1711
原创 Java异常
异常机制的概述异常机制是指当程序出现错误后,程序如何处理。具体来说,异常机制提供了程序退出的安全通道。当出现错误后,程序执行的流程发生改变,程序的控制权转移到异常处理器。异常的结构 在 Java 中,所有的异常都有一个共同的祖先 Throwable(可抛出)。Throwable 指定代码中可用异常传播机制通过 Java 应用程序传输的任何问题的共性。...
2019-04-11 14:16:59
157
原创 MySQL存储引擎
简单来说,存储引擎就是指表的类型以及表在计算机上的存储方式。存储引擎的概念是MySQL的特点,Oracle中没有专门的存储引擎的概念,Oracle有OLTP和OLAP模式的区分。不同的存储引擎决定了MySQL数据库中的表可以用不同的方式来存储。我们可以根据数据的特点来选择不同的存储引擎。在MySQL中的存储引擎有很多种,可以通过“SHOW ENGINES”语句来查看。下面重点关注In...
2019-04-11 13:43:22
164
原创 BigDecimal
BigDecimal类位于java.math.BigDecimal包下。使用此类可以完成大的小数操作,而且也可以使用此类进行精确的四舍五入,这一点在开发中经常使用。对于不需要任何准确计算精度的程序可以直接使用float或double完成,但是如果需要精确计算结果,则必须使用BigDecimal类。1.BigDecimal类常用方法1) BigDecimal(String val):构造...
2019-04-10 21:11:21
2687
原创 String类型
String类对象的创建字符串声明:String stringName;字符串创建:stringName = new String(字符串常量); 或stringName = 字符串常量;String类构造方法1、public String()无参构造方法,用来创建空字符串的String对象。String str1 =newString();2、public S...
2019-04-10 20:50:45
236
转载 html:multibox 用法
当然这个标签很老了,用法到网上也能找到;我根据自己的经验,记录一下; 如果DB里有张CODE表,存了所有的code;USE_CODE表里的数据可能关联部分code; 那么页面显示的时候checkbox要显示所有的code,USE_CODE表里的已经使用的code则默认选中checkbox; 然后可以任意选择不同的code,提交表单;//给actionForm的两个属性赋值 Strin
2017-04-26 09:22:21
2618
原创 基于AWS搭建分布式计算环境
本文介绍通过 AWS 管理控制台创建示例 Amazon EMR 集群的流程。然后,您将以步骤形式运行 Hive 脚本,以处理存储在 Amazon S3 中的示例数据。1.设置示例集群的先决条件1) 创建 Amazon S3 存储桶Amazon S3 中的每个数据元都存储在存储桶中。必须先创建一个存储桶,然后才能在 Amazon S3 中存储数据。 Tips: 只有将对象存储到存储桶中以及向
2016-04-27 23:28:12
3085
原创 Markdown的使用
这是 H1这是 H2这是 H6 This is a blockquote with two paragraphs. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi, viverra nec, fring
2016-04-06 20:44:32
2690
原创 伪代码规范
在伪代码中,每一条指令占一行(else if 例外),指令后不跟任何符号 书写上的缩进表示程序中的分支结构;同一模块中的语句具有相同的缩进量,通常每个算法开始时都要描述它的输入和输出,而且算法中的每一行都给编上行号,在解释算法的过程中会经常使用算法步骤中的行号来指代算法的步骤。1.变量的声明算法中出现的数组、变量可以是以下类型:整数、实数、字符、位串或指针。定义变量的语句不用写出来,但必须在注
2016-04-06 20:13:18
121297
8
原创 Cpp_异常处理
一、为什么需要异常?1.程序不可能不出错2.传统的错误处理机制存在缺陷 1)通过返回值表示错误 缺点:错误处理流程比较复杂,逐层判断,代码臃肿。 优点:函数调用路径中所有的局部对象(栈对象)都能被右花括号正确地析构,不会内存泄漏。 2)通过远程跳转处理错误优点:不需要逐层判断,一步到位处理错误,代码精炼。 缺点:函数调用路径中的局部对象失去被析构机会,形成内存泄漏。3.C++的异常结合两种
2016-02-29 21:55:15
2382
原创 Cpp_多态
一、虚函数、覆盖和多态如果将基类中的某个成员函数声明为虚函数,那么其子类中与该函数具有相同原型的成员函数就也是虚函数,并且对基类中的版本形成覆盖。这时,通过指向子类对象的基类指针,或者引用子类对象的基类引用,调用虚函数,实际被执行的将是子类中的覆盖版本,而非基类中的原始版本,这种语法现象被称为多态。二、虚函数覆盖的条件1.只有类的成员函数才能被声明为虚函数,全局函数和类的静态成员函数都不能被声明为虚
2016-02-29 21:51:15
2665
2
原创 Cpp_继承
一、继承的基本概念第一级抽象:从具体的对象抽象出共同的属性和行为。学生:姓名、年龄、学号、吃饭、睡觉、学习教师:姓名、年龄、工资、吃饭、睡觉、授课第二级抽象:将类型之间共性抽取出来形成超集,将类型之间的个性具体化的不同子集中。人类:姓名、年龄、吃饭、睡觉 - 超集体现共性 - 基类 | 派生 ^ 学生是人类的一部分:学号、学习 \ 子集 - 子类 V
2016-02-29 21:47:03
2389
原创 Cpp_操作符重载
一、双目操作符的重载1.计算类双目操作符 形如L#R的表达式会被编译器处理为形如L.operator#(R)的成员函数的调用,该函数的返回值即为表达式的值。 形如L#R的表达式也可以被编译器处理为形如::operator#(L,R)的全局函数的调用,该函数的返回值即为表达式的值。 2.赋值类双目操作符 表达式的值是一个左值,而且它就是左操作数本身。 左操作数不能是常量,右操作数可以是常量。
2016-02-29 21:36:39
1293
原创 Cpp_成员指针
1.成员变量指针Student s1; string* p = &s1.name; // 普通指针,而非成员指针 1)定义:类型 类名::*成员指针变量名 = &类名::成员变量; 2)使用:对象.*成员指针变量名 其中”.*”被称为成员指针解引用运算符 对象指针->*成员指针变量名 其中”->*”被称为间接成
2016-02-29 21:32:16
521
原创 Cpp_静态成员
1.静态成员变量1)静态成员变量在类中声明时需要使用static关键字进行修饰; 2)静态成员变量不能在构造函数中被定义及初始化,而必须在类的外部单独进行定义和初始化; 3)静态成员变量每个类只有一份拷贝,并为该类的所有对象所共享; 4)可以通过对象访问其类型中的静态成员变量,也可以通过类直接访问; 5)静态成员变量和全局变量一样,存放在进程空间的静态存储区中; 6)静态成员变量的作用基本
2016-02-29 21:27:14
980
原创 Cpp_拷贝构造与拷贝赋值
1.深拷贝与浅拷贝如果一个类包含指针形式的成员变量,系统提供的缺省拷贝构造函数,只是复制了指针成员变量本身,而没有复制该变量所指向的内容,这种拷贝方式被称为浅拷贝。浅拷贝将导致不同对象间的数据共享,同时会在析构函数中引发”double free”异常。为此就必须自己定义一个支持复制内容即深拷贝的拷贝构造函数。2.类的缺省拷贝赋值类的缺省拷贝赋值同样对于基本类型成员变量按字节复制,因此和缺省拷贝构造函
2016-02-29 21:25:33
1030
原创 Cpp_this指针与常函数
1.this指针1)每个类的构造函数和成员函数中都包含一个隐藏的该类类型的指针参数,名为this,该指针指向调用这个成员函数或正在被构造的对象。成员函数和构造函数中对该类其它成员的访问,都是通过this指针进行的。this指针可以在成员函数或构造函数内部直接显式地引用。2)显式使用this的场合A.区分作用域B.从类的内部向外部传递该类对象地址C.从类的内部向外返回该类对象自身——返回自引用D
2016-02-28 15:50:21
1181
原创 Cpp_析构函数
1.this指针1)每个类的构造函数和成员函数中都包含一个隐藏的该类类型的指针参数,名为this,该指针指向调用这个成员函数或正在被构造的对象。成员函数和构造函数中对该类其它成员的访问,都是通过this指针进行的。this指针可以在成员函数或构造函数内部直接显式地引用。2)显式使用this的场合A.区分作用域B.从类的内部向外部传递该类对象地址C.从类的内部向外返回该类对象自身——返回自引用D
2016-02-28 15:48:54
1361
原创 面试相关之排序与查找
给定两个排序后的数组A和B,其中A的末端有足够的缓冲容纳B,编写一个方法,将并入A并排序编写一个方法,对于字符串数组进行排序,将所有的变位词排在相邻的位置给定一个排序后的数组,包含n个整数,但是这个数组已经被旋转过很多次了,并且次数不详,编写代码找出数组中的某个元素,可以假定数组元素原先是按从小到大的顺序排列的。假设你有20G的文件,每行一个字符串,请说明如何将文件进行排序此问题可知,不能将文件全部
2016-02-26 23:22:51
321
原创 Cpp_构造函数
构造函数1)函数名与类名相同,且没有返回类型。 2)构造函数在对象被创建时自动被调用。 3)构造函数负责确定对象的初始状态以及分配必要的资源。 4)构造函数在每个对象的整个生命周期内,一定会被调用,且仅被调用一次对象的创建过程:A.首先为对象分配足量的内存空间;B.以构造实参调用构造函数,完成如下任务: a)依次调用各个基类的构造函数,初始化所有基类子对象; b)依次调用类类型成
2016-02-25 23:36:19
4748
原创 Cpp_类和对象
围绕具体问题对属性和行为进行有意识的选择,使复杂的具体问题得到简化——面向对象的程序设计类的定义与实例化1.类的一般形式class/struct 类名 : 继承方式 基类, … { 访问控制限定符: 类名 (形参表) : 成员变量 (初值), … { // 构造函数 函数体; } ~类名 (void) { // 析构函数 函数体;
2016-02-25 23:06:08
890
原创 Cpp_类型转换
C风格的类型转换C++完全兼容。C++新增了四个显式类型转换运算符。 1)静态类型转换:static_cast<目标类型> A.将基类的指针或引用转换为子类的指针或引用; B.自定义类型转换。它允许子类类型的指针转换为父类类型的指针(这是一个有效的隐式转换),同时,也能够执行相反动作:转换父类为它的子类,但会给出编译警告下面的例子中,被转换的父类没有被检查是否与目的类型相一致。class Ba
2016-02-25 22:57:48
898
原创 Cpp_引用
1.引用即别名int a = 10;int& b = a; // b引用了a,b是a的别名,b就是a,a就是b/*int b = a;*/引用必须做初始化,而且一经初始化其所引用的目标就不能更换。引用对临时变量(匿名对象的作用)任何出现字面值常量、计算表达式、类型转换、函数返回值的场合,都会有临时变量(匿名变量)产生。只能用带有常属性(const)的引用引用这样的临时变量,而且一旦通过引用引
2016-02-25 22:32:46
2654
原创 Cpp_动态内存分配
1.兼容C语言的动态内存分配函数 malloc/calloc/realloc/free 2.C++增加了专门用于动态内存分配的运算符 1)new: 内存分配 2)delete/delete[]: 内存释放 如果用new分配数组,一定要用delete[]释放。 3)new分配内存失败,不会返回空指针(NULL),而是抛出std::bad_alloc异常。如果程序没有捕获该异常,该异常将被系
2016-02-25 21:20:01
693
原创 Cpp_内联函数
1.编译器用编译好的函数二进制代码块替换对该函数的调用指令的过程称为内联优化。借助内联优化,避免函数调用的开销,所付出的代价就是增大了可执行文件和进程空间代码区的字节数。2.内联主要针对那些被频繁调用的简单函数。编译器会依据其内置的内联优化策略,根据函数的规模和被调用的频率,自动判断是否需要做内联优化。3.若在函数定义前面,加上inline关键字,则可以显式告诉编译器,该函数希望进行内联优化。编译器
2016-02-25 21:15:28
411
原创 Cpp_函数缺省参数
1.在声明函数时可以为函数部分或全部参数指定缺省值,调用该函数时如果某些参数没有提供实参,那么该参数将取缺省值。 2.如果函数的某个参数带有缺省值,那么该参数后面的所有参数必须都带有缺省值。
2016-02-25 21:13:18
677
原创 Cpp_函数重载
什么是函数重载?在同一个作用域中,函数名相同,参数表不同的函数,构成重载关系。 重载与函数的返回类型无关,与参数名也无关,而只与参数的个数、类型和顺序有关。重载解析根据调用函数时所提供的实参,按照类型匹配的原则,找到相应的重载版本的过程叫做重载解析。C++中的换名机制C++编译器在编译C++函数时,会根据该函数的参数表对其名称进行替换,因此同一个作用域中参数表不同的同名函数,在编译成二进制目标模块
2016-02-25 21:12:20
2305
原创 电信主机计费系统_数据采集子模块
需求分析1.按照软件工程的要求,复述用户的需求,得到用户的认可。2.用户化需求和专业化需求。3.需求规格说明书的主要内容 1)用例:系统中的角色。 2)事件流:系统中的角色如何协作完成具体的功能。 3)异常流:对各种意外情况的处理。 4)前置条件:事件流和异常流中每个具体环节的依赖条件。 5)后置条件:事件流和异常流中每个具体环节的输出结果。名词解释DMS:数据挖掘系统(Data Mini
2016-02-25 15:44:51
5707
1
原创 《The Annotated STL Sources》list
list概述list实质上是一个双向环状链表,每次插入或者删除一个数据就会配置或者删除一个元素空间,list迭代器提供递增操作指向下一个节点,递减时指向上一个节点,取值时取的是节点的数据值。list的定义//list节点的定义template <class T>struct __list_node { typedef void* void_pointer; void_pointer nex
2016-02-24 22:36:55
354
原创 《The Annotated STL Sources》vector
vector概述vector与array非常类似,它们唯一的区别在于空间运用的灵活性:array是静态空间,配置之后不能改变;vector是动态空间,随着元素的加入,它的内部机制会自动扩充空间以容纳新的元素。vector的定义template <class T, class Alloc = alloc>class vector {public: //一些类型定义 typedef T val
2016-02-24 16:15:46
568
原创 STL_map
基本概念将key/value当作元素,进行管理。它们可根据key的排序准则自动将元素排序,要修改元素的key必须先删除拥有该key的元素,然后插入拥有新的key/value的元素。构造函数map m:创建空映射,不包含任何元素map m(op):以op为排序准则,产生一个空的mapmap m1(m2):复制c2中的元素到c1中map m(const value_type first, const v
2016-02-23 21:57:38
256
原创 STL_multiset
构造函数1.int size() const:返回容器元素个数 2.bool empty() const:判断容器是否为空,若返回true,表明容器已空 3.insert函数pair<iterator,bool> insert( x):插入元素xiterator insert(iterator it,x):在迭代器it处插入元素xvoid insert(const value_type *fir
2016-02-23 21:50:54
437
原创 STL_set
基本概念Set、multiset都是集合类,差别在与set中不允许有重复元素,multiset中允许有重复元素。构造函数set c(op):以op为排序准则,产生一个空的setset c1(c2):复制c2中的元素到c1中set c(const value_type first, const value_type last):复制[first, last)之间元素构成新集合set c(const v
2016-02-23 21:45:33
257
原创 STL_queue
基本概念成员函数1.入队:q.push(x); 将x 接到队列的末端。 2.出队:q.pop(); 弹出队列的第一个元素,注意,并不会返回被弹出元素的值。 3.访问队首元素,如例:q.front(),即最早被压入队列的元素。 4.访问队尾元素,如例:q.back(),即最后被压入队列的元素。 5.判断队列空,如例:q.empty(),当队列空时,返回true。 6.访问队列中的元素个数,如
2016-02-23 21:37:23
376
原创 STL_stack
构造函数常用成员函数1.压入数据 void push ( const T& x ); 2.弹出数据 void pop ( ); 3.返回栈顶的数据 value_type& top ( ); const value_type& top ( ) const; 4.计算栈元素个数 size_type size ( ) const;应用实例//栈 stack支持 empty() size(
2016-02-23 21:32:47
263
原创 STL_deque
基本概念deque容器为一个给定类型的元素进行线性处理,像向量一样,它能够快速地随机访问任一个元素,并且能够高效地插入和删除容器的头尾部元素。因此也被叫做双端队列。构造函数1.deque():创建一个空deque2.deque(int nSize):创建一个deque,元素个数为nSize3.deque(int nSize,const T& t):创建一个deque,元素个数为nSize,且值均为t
2016-02-23 21:13:57
194
原创 STL_list
基本概念STL中的list就是一双向链表,可高效地进行插入删除元素对象的构造 //整型的默认值是0 list<int>c0; //空链表 list<int>c1(3); //建一个含三个默认值是0的元素的链表 list<int>c2(5,2); //建一个含五个元素的链表,值都是2
2016-02-23 20:14:01
306
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人