现在的位置: 首页 > 综合 > 正文

工作的几个技术小点总结

2013年11月29日 ⁄ 综合 ⁄ 共 1911字 ⁄ 字号 评论关闭

这篇文章,主要是总结一下我最近工作中遇到的一些之前没有接触过的东西

1.mysql数据引擎

mysql 支持几种引擎,我们常见到的引擎ISAM 和INNODB,

其他详细介绍可以参看其他文章,很多介绍比如

http://www.cnblogs.com/xulb597/archive/2012/05/25/2518118.html

这里我想说的就是,ISAM 不支持外键。所以,当你发现设置外键的时候,没有效果,那么就要坚持你的数据库引擎了。改回INNodb

如何更改有几种办法,就是在创建表的时候指定,比如 CREATE TABLE mytable (id int, title char(20)) ENGINE = INNODB。

如果已经建好表了,那么就,set type=innodb的方式方法。 更加具体可以参看文章

http://space.itpub.net/22359110/viewspace-718334

2.会议室预订问题

会议室预定问题就是查询时候某个时间段有冲突的问题。

问题环境

mytable


id begintime endtime  
1 1000 1500  
2 1501 2000  

这里,为了方便,我直接把时间存储为长整形。

我们想要查询的时间段为 bTime,eTime.

解决思路

首先,我用了一个最笨的方法的sql语句如下

select * from mytable where ( bTime >=begintime and bTime <=endtime) or (eTime >=begintime and eTime <=endtime) or (bTime <=begintime and bTime >=endtime)

我发现这个sql语句太长了,应该会有优化的地方

于是以下sql为

select * from mytable where  bTime <=endTime and eTime >=beginTime;

这样就更加完美了。这里已经保证了 

bTime <eTime;

3.Redis 多线程问题

项目中使用了Redis作为nosql数据库。直接放入内存中,因为我们的项目是整体框架是多线程的环境,因此,在和redis交互的时候,涉及使用的 变量

redisAsyncContext* _redis_context; 内部的一个接收缓冲区出现coredump的问题。

因此在使用该变量的时候,一定要保证他的只有一个线程处理,就是加锁,互斥访问,或者使用线程的使用变量。

因为redis这块我还没有研究深入,因此我还需要继续的学习吧。

4.gdb 多线程调试。

之前做游戏的时候,因为业务逻辑的原因,都是搞单线程的的,而且还是纯C语言的,因此调试起来很方便吧。但是现在的框架是多线程,因此调试的时候遇到一些比较烦的问题,不过没关系

使用一下命令就很好了。

先介绍一下GDB多线程调试的基本命令。

info threads 显示当前可调试的所有线程,每个线程会有一个GDB为其分配的ID,后面操作线程的时候会用到这个ID。 前面有*的是当前调试的线程。

thread ID 切换当前调试的线程为指定ID的线程。

break thread_test.c:123 thread all 在所有线程中相应的行上设置断点

thread apply ID1 ID2 command 让一个或者多个线程执行GDB命令command。 

thread apply all command 让所有被调试线程执行GDB命令command。

set scheduler-locking off|on|step 估计是实际使用过多线程调试的人都可以发现,在使用step或者continue

5.json数据格式

json数据格式,我大学的时候就已经开始接触了。没想到这个项目又有新的接触,不过我之前是asp解析json,现在是c++解析,使用的开源框架是jason,这个东西,挺有意思的,欢迎大家用一下。


6.需要学习的技术内容

项目使用了好多开源框架,比如boost,openssl,redis开源nosql等等很多,要学习的东西还是太多,对我这个工作不长的人,压力很巨大。

一直感兴趣于linux内核的网络模块。也没有太多时间看和学习。

7.项目框架的细节介绍

这篇文章,先不介绍了。有时间 我会把几个技术要点一一写出来,在研究很透彻的情况下。

比如如何实现定时器,如何实现网络的事件轮询。项目里如何对c++管理资源,如何实现异步的形式等等

8.工作感受

有时候受到压力,感觉自己不合适做技术。因为我本身也不是计算机科班出身。学习计算机,学习linux c/c++纯是为了找工作而已。能赚多钱。

不过,既然选择了,就要把它做好,将来可能不一定完全从事这块,但是努力吧。不管受到什么样的压力和歧视。

加油吧。

2013/11/23


抱歉!评论已关闭.