个人修炼
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
字符串操作函数:
• strcpy(dest, src) //字符串拷贝 '\0'结束, 一定 要保证: src以'\0'结尾. dest空间比src大. • snprintf(paramIdBuffer, 127, "%d_", paramId); • memset(dest, 0, sizeof(uint32_t)*数组元素个数) • memcpy(dest, src, n); // 拷贝指定n个字节 数. 注意事项: 参数绝对不能是NULL.策略:调用别的 方法前,自己把不必要的接口给过滤掉.
第一种写法: include <sys/time.h> struct timeval tLast, tNow; gettimeofday(&tLast, NULL); ... gettimeofday(&tNow, NULL); nInterval = ( (tNow.tv_sec - tLast.tv_sec) + (tNow.tv_usec - tLast.tv_usec) / 1000000) / 60;
C++ 多线程(二)
• • • • • • • • • // 线程方法 void *sfbclient_stay_thread_function(void *arg) { CSFBIMClient *pClient = (CSFBIMClient *)arg; if(pClient!=NULL) pClient->processAll(); pthread_exit(NULL); return ((void *)0); } //另外,在编译时注意加上-lpthread参数,以调用静态 //链接库。因为pthread并非Linux系统的默认库.
写文件
const uint32_t BUFFER_SIZE=1024*10; bool CCompanyDBProxy::_recordDBAllcation(uint32_t cityId, CDBServer *pDBs) { char buffer[BUFFER_SIZE]={0}; // 将更新写入文件 if(m_pDBAllcationFile == NULL) return false; FILE *pF = fopen(m_pDBAllcationFile, "ab+"); if(pF==NULL) return false; snprintf(buffer,BUFFER_SIZE-1, "\r\ncityid=%d%sid=%d\r\n", cityId, DBSPLITTER, pDBs->m_id); if(fwrite(buffer, strlen(buffer), 1, pF) != 1) { fprintf(stdout, "Error writing dbhash file:%s. msg:%s.\n", m_pDBAllcationFile, buffer); } fclose(pF); return true;
多线程
• • • • 线程创建 互斥锁 读写锁 多线程安全
C++ 多线程(一)
• • • • • • 源自文库 • • • • • • • • • /**********pthread_create:参数说明: // 第一个参数为指向线程标识符的指针。 // 第二个参数用来设置线程属性。 // 第三个参数是线程运行函数的起始地址。 //第一个参数为指向线程标识符的指针 /********* bool sfbclient_stay(CSFBIMClient *pClient) { pthread_t m_pstay; if(pthread_create(&m_pstay, NULL, sfbclient_stay_thread_function, pClient) != 0) { fprintf(stderr, "SFB_ERROR: failed to create stay thread\n"); return false; } return true; }
逐行读大文件(java版)
• • • • • • • • • • • • • • • • • • • • • • • try { FileInputStream fis = new FileInputStream(newResPath); BufferedReader br = new BufferedReader(new InputStreamReader(fis, "utf-8")); StringBuilder sb=new StringBuilder(); String line=""; while (( line = br.readLine()) != null) { if(line.indexOf("process Query.")>-1) { if(sb.length()>0) { processOnce_detail( sb,aMatchNum, aMatched); } sb=new StringBuilder(); } sb.append(line+"\n"); } fis.close(); br.close(); } catch (IOException e) { e.printStackTrace(); }
Linux 进程通信(二)
• 报文(Message)队列(消息队列):消息队列是消息的链接表, 包括Posix消息队列system V消息队列。有足够权限的进程可以向队 列中添加消息,被赋予读权限的进程则可以读走队列中的消息。消 息队列克服了信号承载信息量少,管道只能承载无格式字节流以及 缓冲区大小受限等缺点。 • 共享内存:使得多个进程可以访问同一块内存空间,是最快的可用 IPC形式。是针对其他通信机制运行效率较低而设计的。往往与其 它通信机制,如信号量结合使用,来达到进程间的同步及互斥。 • 信号量(semaphore):主要作为进程间以及同一进程不同线程之 间的同步手段。 • 套接口(Socket):更为一般的进程间通信机制,可用于不同机器 之间的进程间通信。起初是由Unix系统的BSD分支开发出来的,但 现在一般可以移植到其它类Unix系统上:Linux和System V的变种 都支持套接字。
CatInfo *pCandidates = NEW_ARRAY(pMp, CatInfo, MAX_CAT_NUM); if(pCandidates==NULL) return false; memset(pCandidates, 0, MAX_CAT_NUM*sizeof(CatInfo));
时间函数
Linux 进程通信(三)
参考资料:
进程间通信(一): 管道 https://www.ibm.com/developerworks/cn/linux/l-ipc/part1/ 进程间通信(二): 信号(上) http://www.ibm.com/developerworks/cn/linux/l-ipc/part2/index1.html 进程间通信(二): 信号(下) http://www.ibm.com/developerworks/cn/linux/l-ipc/part2/index2.html 进程间通信(三): 消息队列 http://www.ibm.com/developerworks/cn/linux/l-ipc/part3/ 进程间通信(四): https://www.ibm.com/developerworks/cn/linux/l-ipc/part4/ 进程间通信(五): 共享内存(上) http://www.ibm.com/developerworks/cn/linux/l-ipc/part5/index1.html 进程间通信(五): 共享内存(下) http://www.ibm.com/developerworks/cn/linux/l-ipc/part5/index2.html 进程间通信(六): 套接口 https://www.ibm.com/developerworks/cn/linux/l-ipc/part6/
C++ 多线程(三)
//多线程_互斥锁,任一时刻,只能有一个线程访问该对象 • bool CLock::lock() • bool CLock::unLock() //多线程_读写锁,适合于对数据结构的读次数比写次数多得多的情况. 因 为, 读模式锁定时可以共享, 以写模式锁住时意味着独占 bool CRWLock::readLock(); bool CRWLock::writeLock(); bool CRWLock::unLock();
}
STL
• 1 .size()效率问题? • 2 .指定比较器 • 3 .make_pair • 4 .Hash Table 和HashMap,HashSet区别及 各自应用场景? • 5 .TreeSet?快速检索 • 各种容器的代码编写
Linux 进程通信(一)
几种主要手段:
• 管道(Pipe)及有名管道(named pipe):管道可用于具有 亲缘关系进程间的通信,有名管道克服了管道没有名字的限 制,因此,除具有管道所具有的功能外,它还允许无亲缘关 系进程间的通信; • 信号(Signal):信号是比较复杂的通信方式,用于通知接 受进程有某种事件发生,除了用于进程间通信外,进程还可 以发送信号给进程本身;linux除了支持Unix早期信号语义函 数sigal外,还支持语义符合Posix.1标准的信号函数sigaction (实际上,该函数是基于BSD的,BSD为了实现可靠信号机 制,又能够统一对外接口,用sigaction函数重新实现了signal 函数);
时间函数
第二种写法:
• include <sys/time.h> • bool getNowTime(char *pNowTime) • { • if(pNowTime == NULL) return false; • time_t t; • time(&t); • struct tm *tm, tim; • tm = ::localtime_r((const time_t*)&t, &tim); • snprintf(pNowTime,1024,"%04d-%02d-%02d_%02d-%02d%02d", • tm->tm_year+1900, tm->tm_mon+1, tm->tm_mday, • tm->tm_hour, tm->tm_min, tm->tm_sec); • return true; • }
MemPool.h 的使用
• 这是个内存池,用MemPool替代new delete,目的是减少 实际申请内存的频率,提高速度。 • 特点: 自动线性增长,在MemPool对象析构时释放所有 空间. • 使用: 1)构造函数: MemPool::MemPool(int initSize); 2)基本类型的数组: NEW_VEC(pMp, char, 1); 3)自定义类型的数组: NEW_ARRAY(pMp, CMyClass, 1);
linux版SVN:
• svn st //查看本地与svn server变化 ( 状态: G冲突,M更改, !本地文件被删 ?未加到svn) • svn ls <svn srcpath> //查看 • svn add //本地添加 • svn del //本地删除 • svn log //看log,只有ci过的才能看到 • svn di -r 161 //与指定版本比较 • svn co -r 310 svn://192.168.105.100/virtical_search/trunk // 导出指定 版本 • svn di -r835:1200 // 比较指定版本
文件读写:
• 读文件:
char buffer[1024*10]; FILE *rFile = fopen(pConfigName, "rb"); if(rFile == NULL) return false; while( fgets(buffer,sizeof(buffer),rFile) != NULL ) { fprintf(stdout, "curline:%s\n", buffer); } fclose(rFile);