08-12月笔记
来源:互联网 发布:java后端做什么 编辑:程序博客网 时间:2024/05/21 09:03
- 2008-12-1 Monday
- 1. 程序—数据库连接
- 发现使用地区A和G时,连接的数据库用户不同,原因在于 表中的配置不同
- select * from base.district
- g_struGlobalParam.szCenter的值来自于表中的CENTER_INFO_CODE 字段,通过这个表类来取值:tDistrict.CENTER_INFO_CODE.Char()
- 全局变量g_struGlobalParam.szCenter 的使用出现问题,连接要确认
- 2. 读文件sscanf
- #include <stdlib.h>
- void main()
- {
- FILE* file = fopen("D://11-28.txt", "r+");
- if (file == NULL)
- {
- return;
- }
- char see[32];
- char second[32];
- char line[128];
- while (feof(file) == 0)
- {
- fgets(line, 127, file);
- sscanf(line, "%s%s", see, second);
- printf("/n%s %s/n", see, second);
- }
- fclose(file);
- }
- 11-28.txt
- Miss the days in NanJing.
- Have a good time at NJMiss the days in NanJing.
- Have a good time at NJ
- 结果
- Miss the
- Have a
- Have a
- Press any key to continue
- 晚,见二星伴月 木星,金星,弯月
- 2008-12-2 Tuesday
- 看程序,connection这个类
- (x - 1) % 3 + 1 通过这个方法
- 2008-12-3 Wednesday
- #include <iostream.h>
- void main()
- {
- char* str = "123456";
- char buf[32];
- sprintf(buf, "%5.2s", str);
- cout << buf << endl;
- }
- 2008-12-4 Friday
- 1.多索引的实现细节
- 在生成10叉树时,在数据前进行了加0,123, 0123 这是很有必要的
- 0作为标记
- 当有多个字段作索引时,如 12 089 ,如果直接合并就是12089,和120 89 混淆了
- 在每个字段开始时加0,就可以解决这个问题,012 0089
- 还是有问题 120 01 0120001
- 1200 1 0120001 加个限制条件,字段数值不能以0开头,哈夫曼编码好像是解决这个的,记不清了
- 2008-12-5 Friday
- 1. 再看内存管理类
- 通过指针把各结点组织成树结构及链表结构,new生成了一次数据
- IND_STUDENT_BY_SNO ind_student_by_sno;
- DB_STUDENT db_student;
- db_student.AddIndex(&ind_student_by_sno);
- 可以通过多次
- db_student.AddIndex(&ind_student_。。。);
- 来添加多个索引
- 之后,再导入数据
- j = db_urge_arr_detail.LoadByRecord(*amsConn, str_sql);
- 之后,在程序中的insert,update操作可以直接在内存中进行修改
- 为了能够把修改的结果反馈导出到表中,
- T_LIST<STRU_URGE_ARR_DETAIL> insert_list;
- T_LIST<STRU_URGE_ARR_DETAIL> update_list;
- 把修改数据进行标记放到链表中,在save函数中通过表类的insert,update操作导出到对应的表中
- 2008-12-6 Saturday
- 1. 内存管理类调试
- 1. 添加路径
- Tool 中Options Directories
- F:/work/products/HABOSS/haboss_acct/project/main
- 指导编译
- 2. 0%.0lf 是小写L
- 不是数字1,得到的结果不同
- 3. 配置文件
- .config.ini
- [ORACLE]
- ConnectString = XE
- PassWord = sun
- UserName = sun
- 4. 查找
- 索引查找方法
- SQL> select * from ctest;
- NUM CNAME
- ---------- ------------------
- 12 zhzhou
- 13 126
- 14 study
- SQL> desc ctest
- 名称 是否为空? 类型
- ----------------------------------------- -------- ------------------------
- NUM NUMBER(10)
- CNAME VARCHAR2(9)
- #include "DB_CTEST.hpp"
- #include "STRU_CTEST.hpp"
- #include "IND_CTEST_BY_NUM.hpp"
- #include "T_CTEST.hpp"
- int main()
- {
- long j = Login("ORACLE");
- if (j <= 0)
- {
- cout << "not login";
- return 1;
- }
- DB_CTEST db_ctest;
- IND_CTEST_BY_NUM ind_ctest_by_num;
- db_ctest.AddIndex(&ind_ctest_by_num);
- STRU_CTEST* pstr;
- char sql[256] = "";
- sprintf(sql, "select * from ctest");
- db_ctest.LoadByRecord(DefaultConnect, sql);
- j = ind_ctest_by_num.Query(12, pstr);
- if (j <= 0)
- {
- return 1;
- }
- cout << pstr->CNAME;
-
- db_ctest.Remove();
- ind_ctest_by_num.RemoveAll();
- return 0;
- }
- 2. delete
- int* cc = new int;
- delete cc;
- cc = NULL;
- delete cc;
- 在vc6.0下是可以的
- int* cc = new int;
- delete cc;
- delete cc;
- 这样就不行了
- 2008-12-7 Sunday
- 1. 程序练习:字符串排序
- #include <iostream.h>
- int strcomp(char* astr, char* bstr)
- {
- if (astr == NULL || bstr == NULL)
- {
- return -1;
- }
- while (*astr != '/0' && *bstr != '/0')
- {
- if (*astr < *bstr)
- {
- return 1;
- }
- if (*astr > *bstr)
- {
- return 2;
- }
- astr++;
- bstr++;
- }
- if (*astr == '/0' && *bstr == '/0')
- {
- return 0;
- }
- if (*astr == '/0')
- {
- return 1;
- }
- return 2;
- }
- int sort(char strarr[][16], int num)
- {
- char temp[64] = "";
- for (int i = 0; i < num; i++ )
- {
- for (int j = num - 1; j > i; j--)
- {
- if (strcomp(strarr[j], strarr[j - 1]) == 1 )
- {
- strcpy(temp, strarr[j]);
- strcpy(strarr[j], strarr[j - 1]);
- strcpy(strarr[j - 1], temp);
- }
- }
- }
- return 1;
- }
- void Print(char strarr[][16], int num)
- {
- for (int i = 0; i < num; i++)
- {
- cout << strarr[i] << endl;
- }
- }
- void main()
- {
- char arr[][16] = {"abc", "aba", "a", "hello", "Sunday"};
- Print(arr, 5);
- sort(arr, 5);
- cout << "/n" << endl;
- Print(arr, 5);
- }
- 2008-12-8 Monday
- 注意区别结构体和结点,单独的结构体是个数据点
- 2008-12-9 Tuesday
- 1. printf格式
- printf的格式控制的完整格式:
- % - 0 m.n l或h 格式字符
- 下面对组成格式说明的各项加以说明:
- ①%:表示格式说明的起始符号,不可缺少。
- ②-:有-表示左对齐输出,如省略表示右对齐输出。
- ③0:有0表示指定空位填0,如省略表示指定空位不填。
- ④m.n:m指域宽,即对应的输出项在输出设备上所占的字符数。N指精度。用于说明输出的实型数的小数位数。为指定n时,隐含的精度为n=6位。
- ⑤l或h:l对整型指long型,对实型指double型。h用于将整型的格式字符修正为short型。
- ---------------------------------------
- 格式字符
- 格式字符用以指定输出项的数据类型和输出格式。
- ①d格式:用来输出十进制整数。有以下几种用法:
- %d:按整型数据的实际长度输出。
- %md:m为指定的输出字段的宽度。如果数据的位数小于m,则左端补以空格,若大于m,则按实际位数输出。
- %ld:输出长整型数据。
- ②o格式:以无符号八进制形式输出整数。对长整型可以用"%lo"格式输出。同样也可以指定字段宽度用“%mo”格式输出。
- 例:
- main()
- { int a = -1;
- printf("%d, %o", a, a);
- }
- 运行结果:-1,177777
- 程序解析:-1在内存单元中(以补码形式存放)为(1111111111111111)2,转换为八进制数为(177777)8。
- ③x格式:以无符号十六进制形式输出整数。对长整型可以用"%lx"格式输出。同样也可以指定字段宽度用"%mx"格式输出。
- ④u格式:以无符号十进制形式输出整数。对长整型可以用"%lu"格式输出。同样也可以指定字段宽度用“%mu”格式输出。
- ⑤c格式:输出一个字符。
- ⑥s格式:用来输出一个串。有几中用法
- %s:例如:printf("%s", "CHINA")输出"CHINA"字符串(不包括双引号)。
- %ms:输出的字符串占m列,如字符串本身长度大于m,则突破获m的限制,将字符串全部输出。若串长小于m,则左补空格。
- %-ms:如果串长小于m,则在m列范围内,字符串向左靠,右补空格。
- %m.ns:输出占m列,但只取字符串中左端n个字符。这n个字符输出在m列的右侧,左补空格。
- %-m.ns:其中m、n含义同上,n个字符输出在m列范围的左侧,右补空格。如果n>m,则自动取n值,即保证n个字符正常输出。
- ⑦f格式:用来输出实数(包括单、双精度),以小数形式输出。有以下几种用法:
- %f:不指定宽度,整数部分全部输出并输出6位小数。
- %m.nf:输出共占m列,其中有n位小数,如数值宽度小于m左端补空格。
- %-m.nf:输出共占n列,其中有n位小数,如数值宽度小于m右端补空格。
- ⑧e格式:以指数形式输出实数。可用以下形式:
- %e:数字部分(又称尾数)输出6位小数,指数部分占5位或4位。
- %m.ne和%-m.ne:m、n和”-”字符含义与前相同。此处n指数据的数字部分的小数位数,m表示整个输出数据所占的宽度。
- ⑨g格式:自动选f格式或e格式中较短的一种输出,且不输出无意义的零。
- ---------------------------------------
- 关于printf函数的进一步说明:
- 如果想输出字符"%",则应该在“格式控制”字符串中用连续两个%表示,如:
- printf("%f%%", 1.0/3);
- 输出0.333333%。
- ---------------------------------------
- 对于单精度数,使用%f格式符输出时,仅前7位是有效数字,小数6位.
- 对于双精度数,使用%lf格式符输出时,前16位是有效数字,小数6位.
- 2008-12-10 Wednesday
- 1. unix命令
- pwd 显示当前路径
- grep 进行文本搜索
- $ ls -l | grep '^a'
- 通过管道过滤ls -l输出的内容,只显示以a开头的行。
- $ grep 'test' d*
- 显示所有以d开头的文件中包含test的行。
- $ grep 'test' aa bb cc
- 显示在aa,bb,cc文件中匹配test的行。
- grep 'Excpetion' | cat PayFeeScan_G-20081210.log
- 从grep 'Excpetion' | cat PayFeeScan_G-20081210.log的内容中
- 提取出含 Excpetion 的行 有误 ,应该是下面的语句
- grep 'SQL' RENVIRDAY_G_20081213.log
- 或者 grep 'ERROR' SMSSENDCRE_G_20081213.log grep a file 从file文件中找a字符串
- 通过管道 | 将一个命令的结果作为另一个命令的输入 ls|grep '14'
- 2008-12-11 Thursday
- 1. 指针的初始化
- 回顾,2008-9-16
- 指针的问题
- void main()
- {
- char* p;
- if (p != NULL)
- {
- cout << "p != NULL" << endl;
- }
- }
- 结果为
- p != NULL
- 所以在定义指针时要注意,进行指针的初始化
- char* p = NULL;
- 2008-12-12 Friday
- 2008-12-13 Saturday
- 1. 内存细节
- 栈上的内存分配有大小限制,如在函数中定义char aa[100000000] , 太大可能就会有问题
- 可以用malloc,new来在堆上分配空间
- 2. shell
- 取出变量值可以加一个美元符号($)在变量前面:
- #!/bin/sh
- #对变量赋值:
- a="hello world"
- # 现在打印变量a的内容:
- echo "A is:"
- echo $a
- 在您的编辑器中输入以上内容,然后将其保存为一个文件first。之后执行chmod +x first。使其可执行,最后输入./first执行该脚本。
- 这个脚本将会输出:
- A is:
- hello world
- 在cygwin中运行
- test.sh
- #!/bin/sh
- #This file is used to explain the shell system variable.
- echo "the number of parameter is $# ";
- echo "the return code of last command is $?";
- echo "the script name is $0 ";
- echo "the parameters are $* ";
- echo "/$1 = $1 ; /$2 = $2 ";
- $ ./test.sh aa bb
- the number of parameter is 2
- the return code of last command is 0
- the script name is ./test.sh
- the parameters are aa bb
- $1 = aa ; $2 = bb
- 2008-12-14 Sunday
- 1. shell
- PATH 命令搜索路径,以冒号为分隔符.注意与DOS下不同的是, 当前目录不在系统路径里
- HOME 用户home目录的路径名,是cd命令的默认参数
- echo $HOME
- 结果
- /home/sun
- ls|grep '14' 管道的应用,从当前的目录文件中选出含字符14的文件
- $n $1 表示第一个参数,$2 表示第二个参数 ...
- $# 命令行参数的个数
- $0 当前程序的名称
- $? 前一个命令或函数的返回码
- $* 以"参数1 参数2 ... " 形式保存所有参数
- $@ 以"参数1" "参数2" ... 形式保存所有参数
- $$ 本程序的(进程ID号)PID
- $! 上一个命令的PID
- sun@usasun ~
- $ cat test.sh
- #!/bin/sh
- #This file is used to explain the shell system variable.
- echo "the number of parameter is $# ";
- echo "the return code of last command is $?";
- echo "the script name is $0 ";
- echo "the parameters are $* ";
- echo "/$1 = $1 ; /$2 = $2 ";
- echo $HOME #12-13 用户home目录的路径名,是cd命令的默认参数
- sun@usasun ~
- $
- sun@usasun ~
- $ ./test.sh a "bb"
- the number of parameter is 2
- the return code of last command is 0
- the script name is ./test.sh
- the parameters are a bb
- $1 = a ; $2 = bb
- /home/sun
- 2008-12-16 Monday
- 1. 点滴
- ls -more|grep '15'|grep '23'
- 发现个问题
- 百度知道 右边显示的未解决问题,和平时的搜索词有关,经常出现 随州 网易
- 一次搜索了 今夜不寂寞 ,在问题中又看到了,感觉不会是巧合,肯定是作了记录,如果是这样那么相同的网址,
- 不同的机器打开后,内容就是不一样的了。
- 2008-12-16 Tuesday
- 2008-12-17 Wednesday
- 2008-12-18 Thursday
- 1. grep
- ls|grep -v s
- -v 排除符合条件的
- 2008-12-19 Friday
- 1. gcc
- gcc hello.c -o hello
- #include <stdio.h>
- int main(int argc, char* argv[])
- {
- printf("%d", argc);
- if(argc == 1)
- {
- printf("%s", argv[0]);
- }
- if (argc == 3)
- {
- printf("%s %s/n", argv[1], argv[2]);
- }
- return 0;
- }
- 第一个参数argv[0]是程序名
- nohup 不挂断的执行程序
- sun@usasun ~/08
- $ nohup ./test d k
- nohup: appending output to `nohup.out'
- 在同一目录中
- sun@usasun ~/08
- $ pwd
- /home/sun/08
- 生成了文件nohup.out 保存了运行的结果
- 3a b
- 3a b
- 3a b
- 3a b
- 3d k
- 每次执行后添加到文件的尾部,appending output to `nohup.out',所以是上面的结果
- 2008-12-20 Saturday
- 1. I/O导向
- 将命令执行的结果重新输出到其他设备或文件 >
- 或是导入 <
- 如
- sun@usasun ~
- $ ls >out.txt
- sun@usasun ~/08
- $ ls | grep 'out' > out.txt
- 应用
- #!/bin/sh
- date=`date +%Y%m%d`
- grep ' gsm' aa.txt > ${date}_a.txt
- echo OK
- 对变量进行赋值,使用命令的结果,用了符号`` 键盘上esc 下面的键
- date=`date +%Y%m%d`
- 结果保存到了文件20081220_a.txt
- sun@usasun ~/08
- $ date +%Y%m%d
- 20081220
- sun@usasun ~
- $ date +%Y-%m-%d
- 2008-12-20
- 2008-12-21 Sunday
- ls –a
- 可以显示隐藏的文件
- 2008-12-22 Monday
- 1. find命令
- find . -name /* -type f -print | xargs grep "ERROR"
- 从当前路径下的普通文件(包含子文件)中,查找含有ERROR字符串的文件
- 可以替代大量的手工操作,上网查询得到,早就应该找了
- 2008-12-23 Tuesday
- 1. find
- HA5-ZW04-hnpay%ls -a
- ./ ../ .config.ini areaD/ areaJ/ areaM/ areaN/ areaP/
- HA5-ZW04-hnpay%find . -name "*ini" -print
- ./areaP/.config.ini
- ./.config.ini
- ./areaN/.config.ini
- ./areaD/.config.ini
- ./areaM/.config.ini
- ./areaJ/.config.ini
- find . -name "*ini" -print
- 从当前目录中查找文件*ini
- # find . -name /* -type f -print | xargs grep "hostnames"
- ./httpd1.conf:# different IP addresses or hostnames and have them handled by the
- ./httpd1.conf:# VirtualHost: If you want to maintain multiple domains/hostnames
- on your
- 注意,在上面的例子中, /用来取消find命令中的*在shell中的特殊含义。
- find命令配合使用exec和xargs可以使用户对所匹配到的文件执行几乎所有的命令。
- 2008-12-24 Wednesday
- 1. 算法
- 这是今年百度的一道笔试题。给你1亿个ip地址和每个ip访问的时间(00:00:00= <时间 <=23:59:59,并且已经按照时间排好序了),然后给定一段时间X,定义在X内如果某IP的访问次数超过Y次,则判定该IP为攻击IP。要求输出所有攻击IP。只有一组测试用例。第一行输入IP记录数(即10万),时间X(10= <X <=120秒),次数Y(2= <Y <=100)。输出按访问的时间顺序输出,IP重复不再输出。
- 输入示例:(为了方便,只给出8个,意思意思)
- 8 10 2
- 10.254.82.126 00:00:39
- 10.85.124.135 00:00:40
- 10.254.82.126 00:00:44
- 10.254.82.126 00:00:44
- 10.1.82.125 00:00:45
- 10.85.124.135 00:00:48
- 10.254.82.126 00:00:48
- 10.254.82.126 00:00:49
- 输出示例:
- 10.254.82.126
- 10.85.124.135
- 考虑用滚动扫描,往下移动一次,在移动的过程中进行统计
- IC卡预付费水表
- 2008-12-25 Thursday
- 1. 定时执行程序crontab
- 2008-12-30 Tuesday
- 1. sql
- SQL> select * from student;
- SNO SNAME
- ---------- --------------------
- 001 mm
- 002 mm
- 007 GG
- 007 GG
- 003 mm
- 006 mm
- SQL> select (case when SNO='001' then '111' when SNO='002' then '222' end) "a1",sno from student where sname='mm';
- a1 SNO
- ------ ----------
- 111 001
- 222 002
- 003
- 006
- 可以在sql语句中,使用case等语句操作
- find . -name "SODATASTAT*"|xargs grep "ERROR"