获取客户端IP用什么方式?
在这个灌水盛行的年代,我们必须要对那些心怀不轨,总是想着做点啥坏事的青年们,致以亲切的祝福:最近还好吗,是不是闲的蛋疼。
本博客使用Typecho 程序搭建,添加验证码插件后,垃圾评论还是有不少。隔个5-6天就有20多条,前几天修正了验证码插件当中的一个bug,稍微减缓了一点,不过还是有一些。这里就再对后台 “同一IP发布评论的时间间隔限制为N分钟”这个功能动点手脚吧。首先要说明的是,这个功能并不能阻挡这些“灌水青年”的恶劣行为,这是因为基于Typecho程序,这个IP可以伪造,致使上面的设置起不到作用。但是这并不能认为是Typecho的bug,因为当你了解了它的用意之后就会明白。
程序员如何面对需求变化
在工作中也接触过各种各样的项目,有的注重时间,有的注重质量,有的注重成本。有些项目会随着时间的推移侧重点会有所改变,比如刚开始可能注重质量、后来开始注重成本、最后可能注重时间,因此在这个变化中项目经理为了整体把控好这个项目,一些需求的变动也是再所难免。即使没有上面说的这些情况,一个项目从开始到结尾,需求的变化肯定是会有的。对于互联网行业,一个新产品的出现往往会立为一个项目,这里主要也是针对这样项目来进行描述。产品需求需求变化意味着什么,意味着程序要要不停的修改之前编写的代码,同时也就意味着不能按时下班。那么程序员怎么才能够更好的应对产品的这些快速的需求变化呢?于是乎,业界的高人提到了敏捷、迭代,但是真正能运用好,还是要经过千锤百炼。
C++五种内存分配方法的区别
在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。
栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区。里面的变量通常是局部变量、函数参数等。
堆,就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。
自由存储区,就是那些由malloc等分配的内存块,他和堆是十分相似的,不过它是用free来结束自己的生命的。
全局/静态存储区,全局变量和静态变量被分配到同一块内存中,在以前的C语言中,全局变量又分为初始化的和未初始化的,在C++里面没有这个区分了,他们共同占用同一块内存区。
常量存储区,这是一块比较特殊的存储区,他们里面存放的是常量,不允许修改(当然,你要通过非正当手段也可以修改,而且方法很多,在《const的思考》一文中,我给出了6种方法)
如何编写高性能的应用程序
在这个硬件性能日新月异的年代里,我们充分的享受着硬件带给我们的“免费午餐”,似忽软件的效率问题已经不再是一种被开发者关心的问题,但是,随着CPU的主频提高步伐越来越慢,高速缓存也不是可以无限制增加,新技术的使用逐渐被用来提高硬件的性能,这时候,要充分发挥这些新特性,软件的支持就显得很重要了,于是,程序的运行效率再一次映入我们的视野,新时代的软件优化,我们该何去何从?
从美学角度来看待编写的代码
似漫漫征途,半个世纪,代码发展至今已有大从如同象形文字般的纸孔设计到01机器指令序列、到能进行简单翻译的汇编伪指令集..到后来的结构化程序语言和如今的面向对象语言设计、脚本语言以及更多将来未知的代码语言,可谓层出不穷。在如同物种优胜劣汰般的法则下,代码也随着我们思想力、行动力的不断前进、不断进化。代码对我犹如一座雕像般具有着力与美。