08-12月笔记

来源:互联网 发布:java后端做什么 编辑:程序博客网 时间:2024/05/21 09:03
  1. 2008-12-1 Monday
  2. 1. 程序—数据库连接
  3. 发现使用地区A和G时,连接的数据库用户不同,原因在于 表中的配置不同
  4. select * from base.district
  5. g_struGlobalParam.szCenter的值来自于表中的CENTER_INFO_CODE 字段,通过这个表类来取值:tDistrict.CENTER_INFO_CODE.Char()
  6. 全局变量g_struGlobalParam.szCenter 的使用出现问题,连接要确认
  7. 2. 读文件sscanf
  8. #include <stdlib.h>
  9. void main()
  10. {
  11.     FILE* file = fopen("D://11-28.txt""r+");
  12.     if (file == NULL)
  13.     {
  14.         return;
  15.     }
  16.     char see[32];
  17.     char second[32];
  18.     char line[128];
  19.     while (feof(file) == 0)
  20.     {
  21.         fgets(line, 127, file);
  22.         sscanf(line, "%s%s", see, second);
  23.         printf("/n%s %s/n", see, second);
  24.     }
  25.     fclose(file);
  26. }
  27. 11-28.txt
  28. Miss the days in NanJing.
  29. Have a good time at NJMiss the days in NanJing.
  30. Have a good time at NJ
  31. 结果
  32. Miss the
  33. Have a
  34. Have a
  35. Press any key to continue
  36. 晚,见二星伴月  木星,金星,弯月
  37. 2008-12-2 Tuesday
  38. 看程序,connection这个类
  39. (x - 1) % 3 + 1 通过这个方法
  40. 2008-12-3 Wednesday
  41. #include <iostream.h>
  42. void main()
  43. {
  44.     char* str = "123456";
  45.     char buf[32];
  46.     sprintf(buf, "%5.2s", str);//占5个字符,取前2个字符
  47.     cout << buf << endl;//   12
  48. }
  49. 2008-12-4 Friday
  50. 1.多索引的实现细节
  51. 在生成10叉树时,在数据前进行了加0,123, 0123    这是很有必要的
  52. 0作为标记
  53. 当有多个字段作索引时,如 12  089 ,如果直接合并就是12089,和120  89 混淆了
  54. 在每个字段开始时加0,就可以解决这个问题,012   0089
  55. 还是有问题 120  01    0120001
  56. 1200  1   0120001     加个限制条件,字段数值不能以0开头,哈夫曼编码好像是解决这个的,记不清了
  57. 2008-12-5 Friday
  58. 1. 再看内存管理类
  59. 通过指针把各结点组织成树结构及链表结构,new生成了一次数据
  60.     IND_STUDENT_BY_SNO ind_student_by_sno;
  61.     DB_STUDENT db_student;
  62.     db_student.AddIndex(&ind_student_by_sno);
  63. 可以通过多次
  64.     db_student.AddIndex(&ind_student_。。。);
  65. 来添加多个索引
  66. 之后,再导入数据
  67.     j = db_urge_arr_detail.LoadByRecord(*amsConn, str_sql);
  68. 之后,在程序中的insert,update操作可以直接在内存中进行修改
  69. 为了能够把修改的结果反馈导出到表中,
  70.   T_LIST<STRU_URGE_ARR_DETAIL> insert_list;    //新增加结点链表
  71. T_LIST<STRU_URGE_ARR_DETAIL> update_list;    //刷新结点链表
  72. 把修改数据进行标记放到链表中,在save函数中通过表类的insert,update操作导出到对应的表中
  73. 2008-12-6 Saturday
  74. 1. 内存管理类调试
  75. 1. 添加路径
  76. Tool 中Options   Directories
  77. F:/work/products/HABOSS/haboss_acct/project/main
  78. 指导编译
  79. 2. 0%.0lf   是小写L
  80. 不是数字1,得到的结果不同
  81. 3. 配置文件
  82. .config.ini
  83. [ORACLE]
  84. ConnectString = XE
  85. PassWord = sun
  86. UserName = sun
  87. 4. 查找
  88. 索引查找方法
  89. SQL> select * from ctest;
  90.        NUM CNAME
  91. ---------- ------------------
  92.         12 zhzhou
  93.         13 126
  94.         14 study
  95. SQL> desc ctest
  96.  名称                                      是否为空? 类型
  97.  ----------------------------------------- -------- ------------------------
  98.  NUM                                                NUMBER(10)
  99.  CNAME                                              VARCHAR2(9)
  100. #include "DB_CTEST.hpp"
  101. #include "STRU_CTEST.hpp"
  102. #include "IND_CTEST_BY_NUM.hpp"
  103. #include "T_CTEST.hpp"
  104. int main()
  105. {
  106.     long j = Login("ORACLE");
  107.     if (j <= 0)
  108.     {
  109.         cout << "not login";
  110.         return 1;
  111.     }
  112.     DB_CTEST db_ctest;
  113.     IND_CTEST_BY_NUM ind_ctest_by_num;
  114.     db_ctest.AddIndex(&ind_ctest_by_num);
  115.     STRU_CTEST* pstr;
  116.     char sql[256] = "";
  117.     sprintf(sql, "select * from ctest");
  118.     db_ctest.LoadByRecord(DefaultConnect, sql);
  119.     j = ind_ctest_by_num.Query(12, pstr);
  120.     if (j <= 0)
  121.     {
  122.         return 1;
  123.     }
  124.     cout << pstr->CNAME;
  125.     
  126.     db_ctest.Remove();
  127.     ind_ctest_by_num.RemoveAll();
  128.     return 0;
  129. }
  130. 2. delete
  131.     int* cc = new int;
  132.     delete cc;
  133.     cc = NULL;
  134.     delete cc;
  135. 在vc6.0下是可以的
  136.     int* cc = new int;
  137.     delete cc;
  138. //  cc = NULL;
  139.     delete cc;
  140. 这样就不行了
  141. 2008-12-7 Sunday
  142. 1. 程序练习:字符串排序
  143. #include <iostream.h>
  144. int strcomp(char* astr, char* bstr)
  145. {
  146.     if (astr == NULL || bstr == NULL)
  147.     {
  148.         return -1;
  149.     }
  150.     while (*astr != '/0' && *bstr != '/0')
  151.     {
  152.         if (*astr < *bstr)
  153.         {
  154.             return 1;
  155.         }
  156.         if (*astr > *bstr)
  157.         {
  158.             return 2;
  159.         }
  160.         astr++;
  161.         bstr++;
  162.     }
  163.     if (*astr == '/0' && *bstr == '/0')
  164.     {
  165.         return 0;
  166.     }
  167.     if (*astr == '/0')
  168.     {
  169.         return 1;
  170.     }
  171. //  if (*bstr == '/0')
  172. //  {
  173. //      return 2;
  174. //  }
  175.     return 2;
  176. }
  177. int sort(char strarr[][16], int num)
  178. {
  179.     char temp[64] = "";
  180.     for (int i = 0; i < num; i++ )
  181.     {
  182.         for (int j = num - 1; j > i; j--)
  183.         {
  184.             if (strcomp(strarr[j], strarr[j - 1]) == 1 )
  185.             {
  186.                 strcpy(temp, strarr[j]);
  187.                 strcpy(strarr[j], strarr[j - 1]);
  188.                 strcpy(strarr[j - 1], temp);
  189.             }
  190.         }
  191.     }
  192.     return 1;
  193. }
  194. void Print(char strarr[][16], int num)
  195. {
  196.     for (int i = 0; i < num; i++)
  197.     {
  198.         cout << strarr[i] << endl;
  199.     }
  200. }
  201. void main()
  202. {
  203.     char arr[][16] = {"abc""aba""a""hello""Sunday"};
  204.     Print(arr, 5);
  205.     sort(arr, 5);
  206.     cout << "/n" << endl;
  207.     Print(arr, 5);
  208. }
  209. 2008-12-8 Monday
  210. 注意区别结构体和结点,单独的结构体是个数据点
  211. 2008-12-9 Tuesday
  212. 1. printf格式
  213. printf的格式控制的完整格式: 
  214. %  -  0  m.n  l或h  格式字符 
  215. 下面对组成格式说明的各项加以说明: 
  216. ①%:表示格式说明的起始符号,不可缺少。 
  217. ②-:有-表示左对齐输出,如省略表示右对齐输出。 
  218. ③0:有0表示指定空位填0,如省略表示指定空位不填。 
  219. ④m.n:m指域宽,即对应的输出项在输出设备上所占的字符数。N指精度。用于说明输出的实型数的小数位数。为指定n时,隐含的精度为n=6位。 
  220. ⑤l或h:l对整型指long型,对实型指double型。h用于将整型的格式字符修正为short型。 
  221. --------------------------------------- 
  222. 格式字符 
  223. 格式字符用以指定输出项的数据类型和输出格式。 
  224. ①d格式:用来输出十进制整数。有以下几种用法: 
  225. %d:按整型数据的实际长度输出。 
  226. %md:m为指定的输出字段的宽度。如果数据的位数小于m,则左端补以空格,若大于m,则按实际位数输出。 
  227. %ld:输出长整型数据。 
  228. ②o格式:以无符号八进制形式输出整数。对长整型可以用"%lo"格式输出。同样也可以指定字段宽度用“%mo”格式输出。 
  229. 例: 
  230.   main() 
  231.   { int a = -1; 
  232.     printf("%d, %o", a, a); 
  233.   } 
  234.   运行结果:-1,177777 
  235.   程序解析:-1在内存单元中(以补码形式存放)为(1111111111111111)2,转换为八进制数为(177777)8。 
  236. ③x格式:以无符号十六进制形式输出整数。对长整型可以用"%lx"格式输出。同样也可以指定字段宽度用"%mx"格式输出。 
  237. ④u格式:以无符号十进制形式输出整数。对长整型可以用"%lu"格式输出。同样也可以指定字段宽度用“%mu”格式输出。 
  238. ⑤c格式:输出一个字符。 
  239. ⑥s格式:用来输出一个串。有几中用法 
  240. %s:例如:printf("%s""CHINA")输出"CHINA"字符串(不包括双引号)。 
  241. %ms:输出的字符串占m列,如字符串本身长度大于m,则突破获m的限制,将字符串全部输出。若串长小于m,则左补空格。 
  242. %-ms:如果串长小于m,则在m列范围内,字符串向左靠,右补空格。 
  243. %m.ns:输出占m列,但只取字符串中左端n个字符。这n个字符输出在m列的右侧,左补空格。 
  244. %-m.ns:其中m、n含义同上,n个字符输出在m列范围的左侧,右补空格。如果n>m,则自动取n值,即保证n个字符正常输出。 
  245. ⑦f格式:用来输出实数(包括单、双精度),以小数形式输出。有以下几种用法: 
  246. %f:不指定宽度,整数部分全部输出并输出6位小数。 
  247. %m.nf:输出共占m列,其中有n位小数,如数值宽度小于m左端补空格。 
  248. %-m.nf:输出共占n列,其中有n位小数,如数值宽度小于m右端补空格。 
  249. ⑧e格式:以指数形式输出实数。可用以下形式: 
  250. %e:数字部分(又称尾数)输出6位小数,指数部分占5位或4位。 
  251. %m.ne和%-m.ne:m、n和”-”字符含义与前相同。此处n指数据的数字部分的小数位数,m表示整个输出数据所占的宽度。 
  252. ⑨g格式:自动选f格式或e格式中较短的一种输出,且不输出无意义的零。 
  253. --------------------------------------- 
  254. 关于printf函数的进一步说明: 
  255. 如果想输出字符"%",则应该在“格式控制”字符串中用连续两个%表示,如: 
  256. printf("%f%%", 1.0/3); 
  257. 输出0.333333%。 
  258. --------------------------------------- 
  259. 对于单精度数,使用%f格式符输出时,仅前7位是有效数字,小数6位. 
  260. 对于双精度数,使用%lf格式符输出时,前16位是有效数字,小数6位.
  261. 2008-12-10 Wednesday
  262. 1. unix命令
  263. pwd 显示当前路径
  264. grep 进行文本搜索
  265. $ ls -l | grep '^a'
  266. 通过管道过滤ls -l输出的内容,只显示以a开头的行。
  267. $ grep 'test' d*
  268. 显示所有以d开头的文件中包含test的行。
  269. $ grep 'test' aa bb cc
  270. 显示在aa,bb,cc文件中匹配test的行。
  271. grep 'Excpetion' | cat PayFeeScan_G-20081210.log
  272. 从grep 'Excpetion' | cat PayFeeScan_G-20081210.log的内容中
  273. 提取出含 Excpetion 的行    有误   ,应该是下面的语句
  274. grep 'SQL' RENVIRDAY_G_20081213.log
  275. 或者  grep 'ERROR' SMSSENDCRE_G_20081213.log  grep a file 从file文件中找a字符串
  276. 通过管道 | 将一个命令的结果作为另一个命令的输入  ls|grep '14'
  277. 2008-12-11 Thursday
  278. 1. 指针的初始化
  279. 回顾,2008-9-16
  280. ////////////////////////
  281. 指针的问题
  282. void main()
  283. {
  284.     char* p;
  285.     if (p != NULL)
  286.     {
  287.         cout << "p != NULL" << endl;
  288.     }
  289. }
  290. 结果为
  291. p != NULL
  292. 所以在定义指针时要注意,进行指针的初始化
  293. char* p = NULL;
  294. 2008-12-12 Friday
  295. 2008-12-13 Saturday
  296. 1. 内存细节
  297. 栈上的内存分配有大小限制,如在函数中定义char aa[100000000] , 太大可能就会有问题
  298. 可以用malloc,new来在堆上分配空间
  299. 2. shell
  300. 取出变量值可以加一个美元符号($)在变量前面: 
  301. #!/bin/sh
  302. #对变量赋值: 
  303. a="hello world"
  304. # 现在打印变量a的内容: 
  305. echo "A is:"
  306. echo $a
  307. 在您的编辑器中输入以上内容,然后将其保存为一个文件first。之后执行chmod +x first。使其可执行,最后输入./first执行该脚本。 
  308. 这个脚本将会输出: 
  309. A is:
  310. hello world
  311. 在cygwin中运行
  312. test.sh
  313. #!/bin/sh
  314. #This file is used to explain the shell system variable.
  315. echo "the number of parameter is $# ";
  316. echo "the return code of last command is $?";
  317. echo "the script name is $0 ";
  318. echo "the parameters are $* ";
  319. echo "/$1 = $1 ; /$2 = $2 ";
  320. $ ./test.sh aa bb
  321. the number of parameter is 2
  322. the return code of last command is 0
  323. the script name is ./test.sh
  324. the parameters are aa bb
  325. $1 = aa ; $2 = bb
  326. 2008-12-14 Sunday
  327. 1. shell
  328. PATH    命令搜索路径,以冒号为分隔符.注意与DOS下不同的是, 当前目录不在系统路径里 
  329. HOME    用户home目录的路径名,是cd命令的默认参数 
  330. echo $HOME
  331. 结果
  332. /home/sun
  333. ls|grep '14'  管道的应用,从当前的目录文件中选出含字符14的文件
  334. $n  $1 表示第一个参数,$2 表示第二个参数 ... 
  335. $#  命令行参数的个数 
  336. $0  当前程序的名称 
  337. $?  前一个命令或函数的返回码 
  338. $*  以"参数1 参数2 ... " 形式保存所有参数 
  339. $@  以"参数1" "参数2" ... 形式保存所有参数 
  340. $$  本程序的(进程ID号)PID 
  341. $!  上一个命令的PID 
  342. sun@usasun ~
  343. $ cat test.sh
  344. #!/bin/sh
  345. #This file is used to explain the shell system variable.
  346. echo "the number of parameter is $# ";
  347. echo "the return code of last command is $?";
  348. echo "the script name is $0 ";
  349. echo "the parameters are $* ";
  350. echo "/$1 = $1 ; /$2 = $2 ";
  351. echo $HOME        #12-13  用户home目录的路径名,是cd命令的默认参数
  352. sun@usasun ~
  353. $
  354. sun@usasun ~
  355. $ ./test.sh a "bb"
  356. the number of parameter is 2
  357. the return code of last command is 0
  358. the script name is ./test.sh
  359. the parameters are a bb
  360. $1 = a ; $2 = bb
  361. /home/sun
  362. 2008-12-16 Monday
  363. 1. 点滴
  364. ls -more|grep '15'|grep '23'  
  365. 发现个问题
  366. 百度知道 右边显示的未解决问题,和平时的搜索词有关,经常出现 随州  网易
  367. 一次搜索了 今夜不寂寞 ,在问题中又看到了,感觉不会是巧合,肯定是作了记录,如果是这样那么相同的网址,
  368. 不同的机器打开后,内容就是不一样的了。
  369. 2008-12-16 Tuesday
  370. 2008-12-17 Wednesday
  371. 2008-12-18 Thursday
  372. 1. grep
  373. ls|grep -v s 
  374. -v  排除符合条件的
  375. 2008-12-19 Friday
  376. 1. gcc
  377. gcc hello.c -o hello
  378. //test.c
  379. //2008-12-19
  380. #include <stdio.h>
  381. int main(int argc, char* argv[])
  382. {
  383.     printf("%d", argc);
  384.     if(argc == 1)
  385.     {
  386.         printf("%s", argv[0]);
  387.     }
  388.     if (argc == 3)
  389.     {
  390.         printf("%s %s/n", argv[1], argv[2]);
  391.     }
  392.     return 0;
  393. }
  394. /*
  395. int main(int argc, char* argv[])
  396. {
  397.     printf("aaa");
  398.     return 0;
  399. }*/
  400. 第一个参数argv[0]是程序名
  401. nohup  不挂断的执行程序
  402. sun@usasun ~/08
  403. $ nohup ./test d k
  404. nohup: appending output to `nohup.out'
  405. 在同一目录中
  406. sun@usasun ~/08
  407. $ pwd
  408. /home/sun/08
  409. 生成了文件nohup.out  保存了运行的结果
  410. 3a b
  411. 3a b
  412. 3a b
  413. 3a b
  414. 3d k
  415. 每次执行后添加到文件的尾部,appending output to `nohup.out',所以是上面的结果
  416. 2008-12-20 Saturday
  417. 1. I/O导向
  418. 将命令执行的结果重新输出到其他设备或文件 >
  419. 或是导入 <
  420. sun@usasun ~
  421. $ ls >out.txt
  422. sun@usasun ~/08
  423. $ ls | grep 'out' > out.txt
  424. 应用
  425. #!/bin/sh
  426. date=`date +%Y%m%d`
  427. grep ' gsm' aa.txt > ${date}_a.txt
  428. echo OK
  429. 对变量进行赋值,使用命令的结果,用了符号``   键盘上esc 下面的键
  430. date=`date +%Y%m%d`
  431. 结果保存到了文件20081220_a.txt
  432. sun@usasun ~/08
  433. $ date +%Y%m%d
  434. 20081220
  435. sun@usasun ~
  436. $ date +%Y-%m-%d
  437. 2008-12-20
  438. 2008-12-21 Sunday
  439. ls –a
  440. 可以显示隐藏的文件
  441. 2008-12-22 Monday
  442. 1. find命令
  443. find . -name /* -type f -print | xargs grep "ERROR"
  444. 从当前路径下的普通文件(包含子文件)中,查找含有ERROR字符串的文件
  445. 可以替代大量的手工操作,上网查询得到,早就应该找了
  446. 2008-12-23 Tuesday
  447. 1. find
  448. HA5-ZW04-hnpay%ls -a
  449. ./            ../           .config.ini   areaD/        areaJ/        areaM/        areaN/        areaP/
  450. HA5-ZW04-hnpay%find . -name "*ini" -print
  451. ./areaP/.config.ini
  452. ./.config.ini
  453. ./areaN/.config.ini
  454. ./areaD/.config.ini
  455. ./areaM/.config.ini
  456. ./areaJ/.config.ini
  457. find . -name "*ini" -print
  458. 从当前目录中查找文件*ini
  459. # find . -name /* -type f -print | xargs grep "hostnames"
  460. ./httpd1.conf:#     different IP addresses or hostnames and have them handled by the
  461. ./httpd1.conf:# VirtualHost: If you want to maintain multiple domains/hostnames
  462. on your
  463. 注意,在上面的例子中, /用来取消find命令中的*在shell中的特殊含义。
  464. find命令配合使用exec和xargs可以使用户对所匹配到的文件执行几乎所有的命令。
  465. 2008-12-24 Wednesday
  466. 1. 算法
  467. 这是今年百度的一道笔试题。给你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重复不再输出。 
  468. 输入示例:(为了方便,只给出8个,意思意思) 
  469. 8 10 2 
  470. 10.254.82.126 00:00:39 
  471. 10.85.124.135 00:00:40 
  472. 10.254.82.126 00:00:44 
  473. 10.254.82.126 00:00:44 
  474. 10.1.82.125 00:00:45 
  475. 10.85.124.135 00:00:48 
  476. 10.254.82.126 00:00:48 
  477. 10.254.82.126 00:00:49 
  478. 输出示例: 
  479. 10.254.82.126 
  480. 10.85.124.135
  481. 考虑用滚动扫描,往下移动一次,在移动的过程中进行统计
  482. IC卡预付费水表
  483. 2008-12-25 Thursday
  484. 1. 定时执行程序crontab
  485. 2008-12-30 Tuesday
  486. 1. sql
  487. SQL> select * from student;
  488. SNO        SNAME
  489. ---------- --------------------
  490. 001        mm
  491. 002        mm
  492. 007        GG
  493. 007        GG
  494. 003        mm
  495. 006        mm
  496. SQL> select (case when SNO='001' then '111' when SNO='002' then '222' end) "a1",sno from student where sname='mm';
  497. a1     SNO
  498. ------ ----------
  499. 111    001
  500. 222    002
  501.        003
  502.        006
  503. 可以在sql语句中,使用case等语句操作
  504. find . -name "SODATASTAT*"|xargs grep "ERROR"
 
原创粉丝点击