vim使用笔记

vim编辑器安装c.vim插件对C/C++编程有很大的帮助。
官方主页:http://www.vim.org/scripts/script.php?script_id=213

1、下载插件

cd ~
wget http://www.vim.org/scripts/download_script.php?src_id=21803 -O c_vim.zip

我下载的是2014-04-21发布的6.1.1

2、解压安装

mkdir ~/.vim
cd ~/.vim
unzip ~/c_vim.zip

3、激活插件

vim /etc/vimrc

加入:

filetype plugin on

PS:在vim中使用:set runtimepath可以查看插件能安装的位置
PS2:默认插件位置好像在/usr/share/vim/vim72

用vim编程还需要有一个适合的编辑器风格。
继续阅读vim使用笔记

工作体会

做软件开发
1、要有扎实的编程语言基础
2、对开发使用的平台要非常熟悉
3、对软件的业务逻辑要非常熟悉

有的人资历深,其实就是在这个行业做了很多年,对平台和业务逻辑的了解,变成了一种本能反应,不需要多思考和查资料

大公司难免会拉帮结派,最好不加入帮派也不得罪人家

对于程序员来说最最重要的是把领导安排的工作做好,做实!!!

Linux xargs命令

xargs命令的作用就是将上一个命令的结果,作为xargs后面命令的参数来使用。

命令对比:
1、假设当前目录下有111.txt和222.txt两个文件

find -name 111.txt | ls -la

搜索出来的结果和ls -la命令执行结果一样。

find -name 111.txt | xargs ls -la

搜索出来的结果只有111.txt信息。

第二句find语句将前面的结果作为了ls -la的参数,ls -la 111.txt。

2、在当前目录下搜索以.c结尾的文件

find . -name "*.c" | grep SetMessage

搜索出来的是一个叫SetMessage.c的文件。

find . -name "*.c" | xargs grep SetMessage

搜索出来的是在某个.c中有SetMessage函数定义。

第一个find语句是grep从管道出来的结果集中去找SetMessage的内容。
第二个find语句是将管道出来的结果作为grep的参数,比如结果里有1.c、2.c、SetMessage.c,命令就变成
grep SetMessage 1.c 2.c SetMessage.c
后来在2.c中找到SetMessage函数定义。

dbvisualizer设置

1、dbvisualizer中文乱码
tools–tool properties找到Fonts–修改SQL Editor/Text Editor
将字体换成:微软雅黑、新宋体、楷体、黑体

2、dbvisualizer自动提示
tools–tool properties找到SQL Commander–Auto Completion
都打上勾

3、SQL提示
修改SQL提示的步骤如下:
1)编辑dbvis.jar包下的dbvis-actions.xml文件(解压或直接修改)
2)找到以下的代码
<actionidref=”show-auto-completion-command”keystroke=”control SPACE”/>
3)将以上代码修改为以下代码 (改成 alt + 点 或 alt + 斜杠 )
<actionidref=”show-auto-completion-command”keystroke=”alt PERIOD:alt SLASH”/>
4)保存文件并放回到dbivs.jar中
经过以上步骤便让dbvis的SQL提示的快捷键与eclipse的代码提示快捷键一致,修改在与我们编写代码习惯一致,提高我们的编写SQL的效率
此时用alt+点 或 alt+斜杠,SQL提示的框就出来了

4、快速执行一行sql语句
shift+home 选中一行
ctrl+enter 执行语句

5、修改查询结果的显示条数
右上角将Max Rows从1000改为1000000

6、格式化SQL语句
SQL Commander -> Format SQL

7、SQL Editor右上角Max Rows和Max Chars设为-1显示全部,或指定一个大小

8、dbvisualizer编写P/L SQL
需要在declare前加上“–/”,end后加上“/”

--/
DECLARE
v_num number(1) := 1;
BEGIN
dbms_output.put_line(v_num);
end;
/
注意--/和/之前不能有空格,否则执行报错

在SQL Commander里面执行以上代码,dbms_output.put_line()语句没有输出?
1)先选择DBMS OUTPUT选项卡,点击enable绿色箭头
2)再执行以上代码
— 10:31:45 —
1

9、DBMS OUTPUT
在SQL Commander执行:

@set serveroutput on;

相当于在DBMS OUTPUT选项卡,点了enable绿色箭头

@set serveroutput off;

相当于点了stop红色图标

10、调用存在的存储过程

--/
begin
hr.getpages(1,10);
end;
/

不用加exec。

PBOC借贷记学习(未完待续)

应用选择
应用选择主要目的就是在卡片插入终端的时候,由终端来选择哪些应用是由终端和卡片共同支持的。终端的AID列表是通过IC卡参数下载交易从服务端获取,卡片的AID是在做卡片个人化时写入的。

建立应用列表有两种方法,PSE目录选择方法和AID选择方法。

目录选择法流程:
终端先读取PSE,PSE也是一个目录称为支付系统环境。
通过READ RECORD命令读取PSE中的短文件标识(SFI)以及文件里的记录号。读取的记录号对应的记录就是卡片支持的AID。将卡片支持的AID列表和终端支持的AID列表比较,把共同支持的AID放入候选目录中。

AID选择法流程:
AID选择法,就是终端将自己所支持的全部AID通过SELECT命令发送给卡片,逐一尝试,看哪条AID是卡片所支持的。把卡片也支持的AID放入候选目录中。

建立完列表后,可以1)显示应用供用户选择,或2)自动选择优先级最高的一个应用,用于引导处理交易。

卡片会在终端发送SELECT命令响应中返回PDOL(处理选项数据对象列表)是卡片要求终端提供数据的标签和长度列表。终端之后在应用初始化时处理PDOL,通过GPO命令提供列表中所要求的数据给卡片。
继续阅读PBOC借贷记学习(未完待续)

C++学习

1、C++中引用和指针的区别
指针保存的是一个对象的地址,引用是这个对象的别名。
int a = 1;
int * p = &a;
这里变量a和指针p本身地址是不一样的。

int a = 1;
int &b = a;
这里变量a和引用变量b的地址是一样的,两个变量指向同一个内存地址。

主要区别:
引用变量不能为空,在定义时必须初始化。
引用变量初始化后,引用的对象不能再改变。b引用了a后,不能再引用c变量。

总结:
指针指向一块内存,它的内容是所指内存的地址;而引用则是某块内存的别名,引用不改变指向。

指针和引用作为函数参数进行传递时的区别:
传值调用、传址调用、引用调用中传址调用、引用调用都可以改变传入的实参的值。
区别在于指针调用也是将指针变量的值(所指向变量的地址的拷贝)传入形参,在函数内修改所指向变量的值。
引用调用直接把实参传入了函数内,修改了形参就修改了实参。

2、__cdecl和__stdcall区别
两者的区别是清栈方式不同,如果使用__stdcall由函数自己清栈,如果使用__cdecl由调用者自己清栈。

当函数参数个数不定时,只能使用__cdecl来说明函数的调用方式。
如:int sprintf(unsigned char *out, const unsigned char *format, …)

3、类中的静态变量和静态函数
类中的静态变量是属于类的不属于某个对象,它是所有对象所共用的。
静态数据成员需要单独初始化:
<数据类型><类名>::<静态数据成员名>=<值>

静态成员函数可以使用静态数据成员,非静态数据成员要通过具体对象来引用(因为静态成员函数没有this指针)。
静态成员函数主要为了调用方便,不需要生成对象就能调用。
继续阅读C++学习