JavaScript 学习笔记

暂时没空从头开始搞…用到哪里先记录一下好了orz

我觉得不行,还是要先大致了解一下。

参考资料:

A re-introduction to JavaScript (JS tutorial)

继承与原型链

 

 

react学习笔记

首先介绍一个fb家的快速开发react的工具 create-react-app

这个东西依赖node6.0或者更高版本。

关于在ubuntu 14.04上安装node ,可以参考这个链接

发现执行nvm install 6.0会没有任何相应…但是实际上已经安装好了。

接下来安装create-react-app

命令是: npm install –global create-react-app

然后创建一个react app

命令为:create-react-app first_react_app

挂着代理大概需要半小时左右。

或者可以使用淘宝npm镜像:

设置方法为: npm config set registry https://registry.npm.taobao.org,设置完成后,重新执行 create-react-app first-app

实现的第一个组件,功能是点击按钮增加计数…

 

JSX是JS的语法扩展。JSX中使用的元素包含html中的元素和React中的组件。React 判断一个元素是 HTML 元素还是 React 组件的原则就是看第一个字母是否大
写。

React设计上的分离是逻辑上的分离,而不是技术上的分离。如果是要实现一件事,就会把CSS,html,JS三种语言混在一起。

React的数据分为prop(property)和state两种。区别是:

  • prop 用于定义外部接口, state 用于记录内部状态;
  • prop 的赋值在外部世界使用组件时, state 的赋值在组件内部;
  • 组件不应该改变 prop 的值,而 state 存在的目的就是让组件来改变的

 

扩展属性:

 

react父组件获得子组件的值

 

 

参考资料:

react.express

React + antd怎么上传图片

[设计模式] 组合模式(composite) 学习笔记

目的是忽略单一对象和组合对象的不同。 有点像以前写过的用链表定义一个树结构,每个节点是一个val + 多个*tree 。如果某个节点是叶子节点了,那么对应的*tree都为NULL. 只不过这里用了更加面向对象的实现。

具体看代码:

 

最后打印的结果为:

root 1
Leaf A 2
Leaf B 2
Composite X 2
Leaf XA 3
Leaf XB 3
Composite XY 3
Leaf XYA 4
Leaf XYB 4

[C++11] promise && future leanrning notes

std::promise and std::future

 

用人话就是,主线程传给附属线程一个promise Object,然后主线程想要获取附属线程set给promise Object的值(也就是该线程返回的某个结果),需要通过主线程中的promise object 得到对应的future object(每个promise 对应一个 future),然后调用future 的get方法。如果附属线程没有执行作为参数传入的promise的set方法去返回结果,那么程序就会block住。

 

参考资料:

C++11 Multithreading – Part 7: Condition Variables Explained

把二进制文件按字节读到vector

另外一种C++风格,但是性能较差的方法:

 

boost:property_tree 学习笔记

先放资料:

How to use boost::property_tree to load and write JSON

How to iterate a boost property tree?

 

不出现key的方法遍历一个json文件:

 

记录一次因动态库符号表可见性导致的未定义的引用(undefined reference)

编译某代码,发现报错某函数未定义的引用。该函数的是先前编译得到的动态库中。

先去check了该函数的实现,还有接口与头文件中的声明是否统一。发现没有问题。

然后怀疑.cpp文件没有被编译到,于是在该函数中添加

#pragma message(“******************************8”)
发现的确被编译到了。
使用nm来查看动态库中的符号表,发现也可以找到这个函数的符号。
于是怀疑编译代码的时候没有链接到该动态库。
于是在make的时候打印详细信息。make VERBOSE=1
发现也的确链接了动态库….
见鬼了Orz
然后用readelf -s 来查看动态库,惊讶得发现要找的那个符号的BIND怎么是LOCAL..也就是只有文件内可见。
最后发现…是公司内部的工具和CMakeLists中的add_library冲突…
虽然这个坑的解决方案没什么价值…不过因为这个坑了解了一些之前没有了解的部分,也算值得。
关于动态库的符号可见性:
控制的原因是,如果不控制,那么不同的cpp文件可能有相同的变量名字,如果把所有的符号都暴露,很可能在链接时产生冲突。 另外一个原因是,暴露没有必要的符号,会导致符号表的size变大,从而使得link时速度变慢。
参考资料:

 

使用python计算误差代码

需要提供两个文件,并且两个文件的数据格式相同。