taocoding


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

VS从现有代码创建工程

发表于 2013-06-19 | 分类于 VC , 工具

当了好几年码工了,用得最多的IDE是VS,主要是配合助手实在是太强大了,偶尔也用用vim,eclipse,cb等工具,一直都觉得vs没有一个可以导入文件系统的方式创建工程很坑爹,这两天和同事交流才发现是自己一直都没有注意,vs(除了6)系列一直都有,且看下图(wordpress不能显示中文文件名的图?):
vs_create_prj_from_folder

linux下静态库、动态库相关问题总结

发表于 2013-04-11 | 分类于 转载
  • 静态库链接顺序
  • 静态库依赖问题
    下面几个链接作为备忘,看完之后大部分linxu链接相关的问题都可以搞定了。

http://www.ibm.com/developerworks/cn/linux/l-cn-linklib/

http://www.yolinux.com/TUTORIALS/LibraryArchives-StaticAndDynamic.html

http://ticktick.blog.51cto.com/823160/431329

http://mooon.blog.51cto.com/1246491/908358

vim小技巧

发表于 2013-04-03 | 分类于 工具

由于最近工作代码量不会太多,打算用vim搞定,刚好弥补下之前vim囫囵吞枣式的使用习惯。

  • ctags -R –languages=c,c++ .会生成一个tags文件,打开vim通过set tags=tags;命令设置tags文件路径,开始的tags表示会从当前目录找tags文件,分号后面可以再加其他可选的tags文件,ctrl+]在实现和定义之间跳转,ctrl+t回到上一个动作。
  • Texplore这个命令可以在打开tab页时浏览文件夹,很方便的打开多个文件,剩下的就可以通过tab*命令切换tab页了
  • %进行括号匹配跳转
  • 可视化模型下,<,>分别进行减少,增加缩进
  • set encoding设置文件在终端上面显示的编码
  • set fileencoding设置文件写入磁盘的编码

XML,JSON然后呢

发表于 2013-03-30 | 分类于 工具

Data representation, a seemingly simple problem, is proving intractable as one standard after another fails to deliver what is needed.

  • 二进制
  • ASN.1
  • XDR
  • XML
  • JSON/BSON
  • TOML
  • YAML(Ain’t Markup Language)
    YAML看起来会火一阵子,等待下一个新的格式出现,BG好像对YAML使用比较多

http://www.drdobbs.com/web-development/after-xml-json-then-what/240151851

IT牛人博客

发表于 2013-03-06 | 分类于 转载

原文链接:http://blog.csdn.net/huang_xw/article/details/7957908

团队技术博客

  • 淘宝UED淘宝用户体验团队
  • 淘宝核心系统淘宝核心系统团队博客
  • 阿里巴巴数据库团队专注数据库管理开发运维
  • 淘宝通用产品专注JAVA技术
  • 淘宝QA致力于做测试的行业标准
  • 淘宝搜索技术关注技术 关注搜索
  • 量子恒道专注大数据统计
  • 百度搜索研发关注搜索相关技术
  • EMC中国研究院关注于云计算和大数据
  • 贰号楼肆层阿里巴巴平台技术部
  • 阿里数据平台阿里巴巴数据平台
  • 百度技术分享交流百度的互联网技术
  • 编码者说腾讯滴技术团队
  • 腾讯SOSOSOSO团队博客
  • 人人网FED关注前端技术
  • 阿里DBA Team阿里巴巴数据库团队
  • 腾讯CDC为用户创造优质在线生活体验

    底层架构博客
  • 邓侃移动互联网围观者,起哄者

  • 杨建新浪架构师
  • 陈臻米聊开发经理,54chen
  • 阳振坤专注云计算和海量数据库
  • 曹政4399架构师
  • 陈皓酷壳博主
  • 林仕鼎百度架构师
  • 余锋Erlang系统深度探索和应用
  • 王波百度十年码工
  • 朱照远他就是淘叔度
  • 刘炜他就是淘宝雕梁
  • 吴镝专注基础架构,分布式系统
  • 张宴Nginx大神
  • 章文嵩LVS作者
  • 李飞勃非主流程序员,呵呵
  • 颜开在EMC
  • 林晓斌他就是淘宝丁奇
  • 阿稳豆瓣的算法攻城师
  • RednaxelaFX曾经的淘撒迦
  • Claymore通才啊
  • Martin FowlerOO,CI泰山北斗
  • TimYang新浪微博滴牛X人
  • 王旭Cassandra权威指南译者
  • 放翁 文初淘宝开放平台技术产品负责人
  • 庆亮高性能服务端架构与设计
  • 淘宝华庭Glibc内存管理
  • 网易汪源网易杭州研究院副总监
  • 黄亮关注企业存储、服务器相关
  • 唐福林新浪微博开放平台架构师
  • 孙立去哪儿网架构师
  • 付超群搜索和数据挖掘的LAMP人
  • 叶茂盛专注系统管理
  • 潘少宁腾讯滴LAMP人
  • 黑夜路人百度码农,很多有用博文
  • 和煦主要研究开源程序
  • 冯大辉UNIX,DB,WEB
  • 宁海元一淘无线事业部高级技术专家
  • 陈冠诚关注并行计算
  • 王聪关注Linux Kernel

    数据存储相关博客
  • 楊廷琨Oracle大牛

  • 朱旭淘宝滴DBA
  • 周振兴专注MySQL
  • 朱龙春资深应用系统架构师
  • 黄凯耀OS与Oracle牛人
  • 盖国强Oracle ACE总监
  • 黄忠支付宝滴资深DBA
  • 童家旺DB神人
  • 老熊Oracle/UNIX/数据恢复

    语言开发
  • 惠新宸他就是鸟哥

  • 闫斌PHP高手
  • 黄毅Java传教士
  • 温少做Java和.NET
  • 陈硕muduo网络库作者
  • 张善友多年的微软MVP
  • 云风Lua大牛
  • 刘未鹏C++罗浮宫
  • Solrex YangGDB高手

    前端开发
  • 前端观察资讯,资源,技术

  • CSS森林腾讯滴,不知道离职了没

    其他博客
  • EssaysPaul Graham文集

  • 阮一峰IT知名博客
  • 对牛弹琴IT知名博客keso
  • 月光博客关注互联网与搜索引擎
  • Mr.6(台湾)网络趋势行销与开发
  • 王建硕百姓网CEO
  • 纯银网易产品总监
  • 人人都是产品经理专注PM的知名博客
  • 许晓斌Maven专家
  • 范凯ITeye老大
  • 白鸦UCDChina发起人
  • 周金根敏捷个人创立和推广者
  • matrix67神牛,不解释
  • 余洪春构建高可用Linux服务器作者
  • 阿朱《走出软件作坊》作者
  • 徐宥Google的软件工程师
  • vgodMIT的博士
  • 阅微堂数学、金融、计算机
  • 刘洋以老大自居的人,呵呵

linux线程死锁检测

发表于 2013-02-02 | 分类于 未分类

代码中引用了libhdfs,在Hadoop集群负载过高或者某个datanode掉线死极易导致进程挂起,从堆栈可以看出是挂在了pthread_cond_timedwait上面而且是在libjvm.so附近,在https://svn.apache.org/repos/asf/hadoop/common/branches/HDFS-326/CHANGES.txt中有提到修复了一个deadlock的bug。

在目前这种过渡阶段也没有想到很好的办法去验证并修复这个问题,下面是我采取的一个简单方法,在程序中定时去touch一个文件,另外一个监控脚本去stat该文件的修改时间,如果时间超过一定范围即认为死锁了,kill -9然后拉起。但是在某些时候进程负载较高时会导致定时器没有被触发,这时监控脚本就会产生误杀现象。为了解决这个误杀,我又自作聪明的开了一个线程专门去定时touch文件,没过多久死锁现象又出现了,但是进程却没被kill,跟一个同事讨论后才意识到自己犯了一个很荒唐的错误,这里的死锁只是线程级别的!!!

后来另一同事共享了他的方案,通过pstack查看线程堆栈,如果一段时间内堆栈没有发生改变,那么进程基本上是死锁了,感觉这个方法也不错,但是程序中如果有多个线程也不太凑效。

linux设置DNS客户端

发表于 2013-01-24 | 分类于 网络通讯

1修改/etc/resolv.conf,添加对应的nameserver和domain

2修改/etc/nsswitch.conf,找到hosts,在后面添加dns,即hosts: files dns,表示先从/etc/hosts文件查找,再通过dns查找

3重启dns cache进程nscd,否则可能会出现域名可以解析,但是ping不通

一个socket选项导致服务不可用

发表于 2013-01-19 | 分类于 未分类

“All TCP servers should specify this socket option to allow the server to be restarted in this situation.”

最近为了提高机器利用率,将原来一台机器部署一个进程改为部署两个进程,考虑到运维的成本,就简单修改可以自动尝试新的端口,当时觉得这个只会在第二个进程启动时会出现。新版本发布没多久,通过网管系统发现异常了,到机器上一看,发现本该监听10086,10087两个端口的,结果变成了10088,10089,这尼玛肿么回事。通过监控脚本日志发现进程重启过了,按理说进程重启这端口还是不会变啊,查看运行日志发现进程重启时10086,10087都被占用了,通过netstat看到在10086上面有TIME_WAIT的链接,行家一眼就看出问题了,这尼玛不就是没设SO_REUSEADDR么,是的确实是通过设置了这个选项就搞定了。

这里顺便说下为啥端口变了就导致服务不可用,因为对外服务时是直接给的服务的指定端口,要是有一个配置中心之类的服务而不是直接暴露服务会更好些,这样就无所谓你端口变不变了,反正对外是透明的。

另外进程重启是因为在某些时刻进程负载过高导致定时器没有触发,间接导致监控脚本认为进程僵死而将其kill掉,这一点目前也修复了。

之前单进程部署时进程有时也会有重启现象,但是由于是非10086端口不可,因此在2MSL时间过后进程还是可以顺利启动的,当然之前没有防止进程僵死的监控,进程重启的概率非常小。

总结几点:

1UNP不仔细看完并实践,真不能写出健壮的网络程序

2当服务需要横向扩展时,提供一个类似配置中心的角色是必须的

架构设计需要考虑的非功能性需求

发表于 2013-01-09 | 分类于 architecture

看了一些架构相关的资料,在讲非功能性需求时大部分都会提到以下几个词:
Reliability(可靠性)
Availability(可用性)
Scalability(伸缩性),包括水平和垂直两类,水平是指通过添加机器提高伸缩能力,垂直是指通过增加单机的硬件配置提高伸缩能力,显然单机的硬件配置是有上限的,因此水平伸缩才是王道。要做到水平伸缩可以通过以下方式进行:

  • Load Balancing(负载均衡)
  • Caching(缓存)
  • Off-Line Processing(离线处理),也可以认为是异步处理,
  • Partition by Function(按功能切分)这一点有点像公司那门海量课程<大系统小做>,数据层也可以按这个方式进行分离,比如典型的分库分表。
    Resiliency(弹性)

mongodb分片配置

发表于 2012-12-23 | 分类于 数据库

mongodb分片配置包括以下几个角色:

1configsvr,顾名思义就是存储配置的,这里的配置包括集群中的shareds,databases,collections等,

2shard,存放实际数据的进程

3mongos,路由进程

configsvr其实就是对应的mongod –configsvr,shard其实就是mongod –shardsvr

这里我搭建一个windows最简单的分片集群,所有进程都部署在同一台机器上。

依次执行如下命令,所以的dbpath可以随意指定,但是需要提前创建好:

binmongod –configsvr –dbpath data-config –journal –rest

binmongos –configdb 127.0.0.1:27019

正常启动后配置服务器会创建一个叫做”config”的数据库,包括如下集合:

 

其中databases表示当前集群中的数据库信息,mongos即路由进程,shards目前还没有。

接着启动shard,依次执行如下命令,启动两个shards。

binmongod –shardsvr –dbpath data-shard1 –port 10086 –journal –rest

binmongod –shardsvr –dbpath data-shard2 –port 10096 –journal –rest

不出意外所以进程都会顺利启动,这时一个简答的分片集群就完成了一半了,剩下的就是将shards加入集群,这需要通过mongo shell来完成。

启动binmongo 127.0.0.1:27017/admin,这里ip:port是mongs的,admin是默认的管理数据库,执行如下命令:

sh.addShard(“127.0.0.1:10086”)

sh.addShard(“127.0.0.1:10096”)

此时config数据库中的shards集合数变为2,文档内容如下:

 

至此一个简单的分片集群即搭建完毕,接下来往里面搞点数据。

  • 指定可以分片的数据库
  • 指定可分片的集合
  • 插入数据
    sh.enableSharding(“billowqiu”),表示”billowqiu”这个数据库需要分片;

sh.shardCollection(“billowqiu.education”, {“date”:1}),表示eduction这个集合按照{“date”:1}的shard-key方式进行分片,这里的shard-key是必须要的,关于shard-key-pattern的详细信息可以去mongo官网查看。

插入数据的方式和普通模式类似,唯一需要注意的是插入时必须带上shard-key,例如

use billowqiu

col=db[“education”]

col.insert({“date”:1997} ,{“name”:”taer mid school”})

col.insert({“date”:2000} ,{“name”:”huangpi three high school”})

总的来说,mongodb配置和使用都是比较容易上手的,其分片模型和许多Master-Slave模式类似,只不过多了一个configsvr的角色,像gfs,bigtable中这些分布式系统中master的角色其实包括了config和mongos。

 

1234…16

billowqiu

157 日志
33 分类
10 标签
GitHub E-Mail
© 2020 billowqiu
由 Hexo 强力驱动
|
主题 — NexT.Pisces v5.1.3