c++线程池实现

咳咳。c++11 加入了线程库,从此告别了标准库不支持并发的历史。然而 c++ 对于多线程的支持还是比较低级,稍微高级一点的用法都需要自己去实现,譬如线程池、信号量等。线程池(thread pool)这个东西,在面试上多次被问到,一般的回答都是:“管理一个任务队列,一个线程队列,然后每次取一个任务分配给一个线程去做,循环往复。” 貌似没有问题吧。但是写起程序来的时候就出问题了。

废话不多说,先上实现,然后再啰嗦。(dont talk, show me ur code !)

站点迁移

只怪当时太年轻,选择了 SAE + Drupal 。 当时 SAE 还是免费的,现在早就不是了。更令人可悲的是使用了 drupal ,一个复杂得让人有些无语的 CMS 框架,对于只是想建立一个小站而不会做过多修改的人来说可能是一个不错的选择,但是对于另外一些人就不是了。

以后 me 的内容更新会放到 http://www.lrj.name 之上,那是 me 用 Node 实现的一个个人站点,虽然还很简陋,但是自己完全可控。 运行在 OpenShift 之上。

本站点依然可用, 所有的访问也都是有效的。 如果 u 是本来在访问 http://www.lrj.name ,后来网页链接跳到了本站之上也不要奇怪。

Tags: 

意想不到的c++:程序结果的多输出

不修改 main 函数, me 们能多大程度去影响程序的输出结果呢?!或是说,如何才能在不修改 main 的情况下去修改程序的输出结果?面试中可能经常问到的一个问题:下面是输出 hello,world 的程序代码

Tags: 

ATT汇编(gas:gnu assembly)

前话

汇编不用多数,就是符号化了机器指令,是一种很低级(靠近硬件)的编程。很多人接触比较多的是 windows 下的 Intel 汇编,然而 unix/linux 下 or 使用 gcc 的话,用的是 ATT 汇编。(unix 最初是 AT&T 实验室中的 Ken Thompson 发明的。)

Intel 汇编和 ATT 汇编使用的指令基本一样,就是写法上有些差异,鉴于前者有很多人介绍,而后者相对比较少,故有了此篇文章。 (me 也曾经想在 linux 看下汇编的写法,然而搜到的基本都是 Intel 汇编,赶脚很失落,O__O"…)

ATT 汇编格式

ATT 汇编大体格式是: 指令 源操作数 目的操作数 ,比如将 10 移动到 eax 寄存器的写法: movl $10, %eax

Tags: 

websocket和nodejs

websocket

web 实际上只是 Internet 上的一种服务,使用的是 http 协议。 http 协议是一个 request - reponse 的无状态协议,在开发推送应用的时候很不方便,因为 web 的传统模式是浏览器发请求然后服务器响应;而推送则是服务器根据需要主动向浏览器发数据。传统的推送应用的一个主要实现方式是:浏览器间断滴发送 ajax 请求,然后服务器响应数据;这只是给 us 了一种“推送”的错觉,因为 ajax 是在背后工作的。 最近的 web 标准 html5 加入了 websocket 功能,就是浏览器和服务器建立一个长 tcp 连接,浏览器和服务器都可以主动向对方发数据;而且只是在有需要的时候发送数据。

websocket 是一个全双工模式,开发推送程序灰常合适。(尼玛,本来就是为了开发这种应用的好不,O__O"…) 微博、 在线聊天,是推送应用典型的例子。

websocket 是 html5 也就是前端的技术; 因为 web 是 b/s 工作模式, 还需要有服务器也就是后台的程序,推送才能正常工作。

迭代法求平方根和立方根

迭代法求值在数值计算中是一种常用的方法,思路也很简单:首先得有一个迭代公式,比如 $$ z = z - \frac{z^2-x}{2z} $$, 然后给一个初值比如 z = 1.0, 然后不断滴代入公式, 然后结果会不断滴趋近于要求的值,这里就是 x 的平方根。 下面是一些求平方根和立方根的迭代公式,这些公式是某些大家一不小心找出来的或是创造出来的,至于肿么找的或是创造的,这不是 me 关心的事,O__O"…

Newton 算法

平方根 : $$ z = z - \frac{z^2-x}{2z} $$

Babylonian 算法

平方根 : $$z = (z + \frac{x}{z})\cdot\frac{1}{2} $$

立方根 : $$z = (2z + \frac{x}{z^2})\cdot\frac{1}{3} $$

Tags: 

MongoDB数据库操作

MongoDB

MongoDB 是最流行的 NoSQL 数据库, 也是几百种数据库中最流行使用的数据库,之一,O__O"… 虽然官网和其他处都说 MongoDB 是文档 (document) 数据库, 但 me 赶脚“对象数据库”的名字更合适。 JSON 最初只是 JavaScript 中表示对象的一种格式,比如 {"name": "ant", "age":20} ,后来就演变成了一种数据传输格式, 在 MongoDB 中其更是一种数据存储格式(大有取代 xml 的形势)。 官网关于 MongoDB 数据存储格式的说法是 BSON, 也就是 JSON 的一种二进制表示形式。

关系型数据库是 database ==> table ==> row ,对应的 MongoDB 是 database ==> collection ==> document 。一个文档 document 就是一个对象, 包括多个 key-value 对, 而 value 不限于字符串 "hello" 、 数字 42 、日期 Date, 还可以是对象 {"first_name": "li", "seconde_name" : "zhang"}, 也可以是数组 ["cat", "dog"] 等。

Tags: 

jQuery使用

jQuery

jQuery 的一个主要用途就是控制 DOM, 修改 CSS 。 基本使用方法是: $(".info").css("color", "red"); 前面是选择页面中的一些元素, 后面是调用方法, 修改 css 。jQuery 选择元素的方法和写 css 的时候是类似的, 比如 #anchor 控制的是锚点, .name 控制的类, p 控制的是标签。

Tags: 

手工开平方

手工开平方

现在有了计算器就是好,掏出计算器开平方完全不在话下,而且是高精度。比如 windows 下的 $$ \sqrt{3} $$= 1.7320508075688772935274463415059 。不过这里要介绍的是一种手工开平方的方法,可能以后永远都不会用上,但是方法就在那里,会不会不是方法的问题。

先回顾一下试除法计算商,比如 $$ \frac{71}{3} = $$ ? 对齐位置,比如用 3 去除 7, 试着商 2, 余 1。余数添上后一位变成 11,然后除以 3, 试商 3, 余 2。再添加 0,变成 20, 除以 3, 商 6 ,... 所以,$$ \frac{71}{3} = 23.6... $$

Tags: 

Pages