C++11/C++14 新特性学习

1. 类型推导 在标准C++和C,使用参数必须明确的指出其类型。然而,随着模版类型的出现以及模板元编程的技巧,某物的类型,特别是函数定义明确的回返类型,就不容易表示。在这样的情况下,将中间结果存储于参数是件困难的事,可能会需要知道特定的元编程程序库的内部情况。C++11提供如下两种方法缓解上述所遇到的困难。 1.1 auto 能明确根据初始化的参数推导出类型的,可以使用auto关键字。如:

auto对于减少冗赘的代码很有用,如:

1.2 decltype decltype和auto一起使用会更为有用,因为auto参数的类型只有编译器知道。然而decltype对于那些大量运用运算符重载和特化的类型的代码的表示也非常有用。比typedef更方便、更优雅。

2. 空指针 C++11引入了新的关键字来代表空指针常量:nullptr,将空指针和整数0的概念拆开。 nullptr的类型为nullptr_t,能隐式转换为任何指针或是成员指针的类型,也能和它们进行相等或不等的比较。而nullptr不能隐式转换为整数,也不能和整数做比较。为了向下兼容,0仍可代表空指针常量。 3. 其它关键词 3.1 noexcept noexcept形如其名,表示其修饰的函数不会抛出异常。 3.2 constexpr constexpr是常数表达式(constant expression),表示这在编译期就可以算出来。如:

4. 左值和右值 凡是真正的存在内存当中,而不是寄存器当中的值就是左值,其余的都是右值。通俗一点的说法就是:凡是取地址(&)操作可以成功的都是左值,其余都是右值。

5. 引用 对于左值的引用就是左值引用,而对于右值的引用就是右值引用。 新准之前我们将左值引用直接称为“引用”。也就是说,我们一直用的int&事实上是对于int类型左值的引用。而对于右值呢?在新标准当中我们使用int&&来表示。通过下例子来体会:

输出:

通用引用(universal reference),传进来的如果是左值引用那就是左值引用,如果是右值引用那就是右值引用。需要注意的是,这个合成规则用户是不允许使用的,只有编译器才能够使用这种合成规则。构成通用引用有两个条件: 必须满足T&&这种形式 类型T必须是通过推断得到的 通用引用有如下几种可能: 1. 函数模板参数(function template parameters)

auto声明(auto declaration)

typedef声明(typedef declaration) decltype声明(decltype declaration) […]

Linux CPU占比高的分析方法

基本思路 top: 查看到CPU占比高的进程号pid; top -H -p $pid: 查看进程内各个线程占用的CPU百分比,找到CPU占比高的线程ID; gstack $pid > gstack.log: 找到线程ID对应线程号; gcore $pid: 使用gcore命令转存进程映像及内存上下文,生成core文件; strace -T -r -c -p $pid 或 strace -o output.txt -T -tt -e trace=all -p $pid:用strace命令查看系统调用和花费的时间; gdb: 然后用gdb调试对应的线程; 测试代码

参考 http://m.blog.csdn.net/article/details?id=47830579

C++ virtual关键词理解

多态 (待续) 虚函数 C++中的虚函数的实现一般是通过虚函数表(C++规范并没有规定具体用哪种方法,但大部分的编译器厂商都选择此方法)。 类的虚函数表是一块连续的内存,每个内存单元中记录一个JMP指令的地址。 注意的是,编译器会为每个有虚函数的类创建一个虚函数表,该虚函数表将被该类的所有对象共享。类的每个虚成员占据虚函数表中的一行。如果类中有N个虚函数,那么其虚函数表将有N*4字节的大小。 虚函数(Virtual Function)是通过一张虚函数表(Virtual Table)来实现的。简称为V-Table。在这个表中,主要是一个类的虚函数的地址表,这张表解决了继承、覆盖的问题,保证其真实反应实际的函数。这样,在有虚函数的类的实例中分配了指向这个表的指针的内存,所以,当用父类的指针来操作一个子类的时候,这张虚函数表就显得尤为重要了,它就像一个地图一样,指明了实际所应该调用的函数。 编译器应该是保证虚函数表的指针存在于对象实例中最前面的位置(这是为了保证取到虚函数表的有最高的性能——如果有多层继承或是多重继承的情况下)。 这意味着可以通过对象实例的地址得到这张虚函数表,然后就可以遍历其中函数指针,并调用相应的函数。 (引用: http://www.baike.com/wiki/%E8%99%9A%E5%87%BD%E6%95%B0%E8%A1%A8 ) 纯虚函数 (待续) 例子 (待续) 虚函数的重要规则 如果虚函数在基类与派生类中出现,仅仅是名字相同,而形式参数不同,或者是返回类型不同,那么即使加上了virtual关键字,也是不会进行滞后联编的。 只有类的成员函数才能说明为虚函数,因为虚函数仅适合用与有继承关系的类对象,所以普通函数不能说明为虚函数。 静态成员函数不能是虚函数,因为静态成员函数的特点是不受限制于某个对象。 内联(inline)函数不能是虚函数,因为内联函数不能在运行中动态确定位置。即使虚函数在类的内部定义,但是在编译的时候系统仍然将它看做是非内联的。 构造函数不能是虚函数,因为构造的时候,对象还是一片未定型的空间,只有构造完成后,对象才是具体类的实例。 析构函数可以是虚函数,而且通常声名为虚函数。 菱形继承(虚基类) (待续) 析构函数 根据上述规则6,具有多态特性的类的析构函数,有必要声明为virtual。如下实例,如果析构函数不用virtual修饰,无法调用子类的析构函数:

输出结果:

如果析构函数不用virtual修饰,则输出结果:

The “HoeflerText” font wasn’t found——解决方法

打开网站时提示The “HoeflerText” Font Wasn’t Found,很像浏览器提示的错误,用户容易去点击“Update”(如下图),实际是网站被植入了攻击代码。详细攻击原理见:https://www.pcrisk.com/removal-guides/11048-the-hoeflertext-font-wasnt-found-scam 解决方法 我遇到的这种攻击,植入代码很简单,是Wordpress的主题index.php第一行被植入了攻击代码,会生成对应的js代码。直接删掉就行。 为什么直接写到php文件了?原因也很简单,文件权限被设为了777。这是不少开发者为了图简单,对apache的配置也不熟悉,就一开始简单的把权限设为777,后来忘了。 这类代码植入是否有其它手段?有空再琢磨。

C++空指针调用成员函数

先看代码

输出结果: I’m in normal_func Segmentation fault 分析 就是“静态绑定”和“动态绑定”的问题。 参考: https://www.zhihu.com/question/23260677

技术大牛推荐加强软件开发基础的文章和书

跟大牛沟通交流加强软件开发基础,给了如下建议: 推荐研读的书: 《tcp/ip详解》、《计算机体系结构》 推荐的文章: http://fex.baidu.com/blog/2014/05/what-happen ,搞清楚这个流程里的主要问题 总结 (待续)

WordPress的Markdown编辑器

Markdown是一种轻量级标记语言。Github的README就是用这个,越来越流行,确实很方便。Wordpress上也有相应的编辑器。 WP Markdown Editor 本文由此插件编辑所得,其中代码部分由Crayon Syntax Highlighter插件生成。 标题1 标题2 标题3 一串斜着的字 黑色 白色 红色 C/C++ Java Python

Javascript代码编译:压缩和混淆

Google closure 下载Closure编译的jar包 下载Closure Compiler(下载不了的自行想办法哈,需要梯子,你懂的) 创建js文件 如命名为hello.js

编译js文件 编译:

编译后的代码:

参考: https://developers.google.com/closure/ https://developers.google.com/closure/compiler/docs/gettingstarted_app 其它类似工具 Uglfyjs YUI Compressor

基于Play Framework和Semantic-UI的用户登录和注册实现(play-java-loginner)

play-java-loginner是基础性模块,主要实现用户登录和注册实现,网站可基于此直接开发。代码见github,便于将持续维护和完善。 Play Framework,相比Spring MVC,个人比较喜欢这个框架。 Semantic-UI,用过Bootstrap,这个相比元素丰富得多。 Apache Shiro,安全框架 Ebean,ORM

HTTP的幂等性

有叫编程中的幂等性,REST的幂等性,或分布式系统接口幂等性,应该都是一个意思。 参考: http://www.i3geek.com/archives/841 http://www.cnblogs.com/weidagang2046/archive/2011/06/04/idempotence.html http://blog.brucefeng.info/post/api-idempotent http://www.infoq.com/cn/news/2013/05/idempotent