起因是想更新一个array类型的state,结果setState更新之后用console.log() debug 结果,发现结果特别玄学。。。
先放资料:
Learning a New Programming Language: Java for C++ Programmers
java package # 先说几条重要的人话:
背景 # move semantics 是 modern cpp 中非常重要的特性,有必要详细了解一下。
起因是在看《CplusplusConcurrencyInAction_PracticalMultithreading》的时候,里面讲到初始化 std::thread 的时候,如果 thread function 的参数列表中有引用,需要传入 std::ref 才可以得到符合预期的结果。
20181014update: 可以不写了,开心
迫于生计,要从零开始学习前端。
由于之前的to do list 年代久远+ 前端的技术栈可之前几乎没有关系,因此新开一篇记录。
先放参考资料:
TypeScript 入门教程
React & Webpack
react-typescript-cheatsheet (强推一波,讲了很多 react+ts 的实践)
最近在学习node.js,里面讲到node.js的事件机制使用了观察者模式,因此来学习一下。
Redux是Flux架构的一种实现。
至于Flux架构是什么,可以参考Flux 架构入门教程
暂时没空从头开始搞…用到哪里先记录一下好了orz
首先介绍一个fb家的快速开发react的工具 create-react-app
这个东西依赖node6.0或者更高版本。
目的是忽略单一对象和组合对象的不同。 有点像以前写过的用链表定义一个树结构,每个节点是一个val + 多个tree 。如果某个节点是叶子节点了,那么对应的tree都为NULL. 只不过这里用了更加面向对象的实现。
用人话就是,主线程传给附属线程一个promise Object,然后主线程想要获取附属线程set给promise Object的值(也就是该线程返回的某个结果),需要通过主线程中的promise object 得到对应的future object(每个promise 对应一个 future),然后调用future 的get方法。如果附属线程没有执行作为参数传入的promise的set方法去返回结果,那么程序就会block住。
1 std::vector<unsigned char> readFromFile1(const char* filePath) { 2 FILE* file = fopen(filePath, "rb"); 3 std::vector<unsigned char> result; 4 if (file == nullptr) { 5 return result; 6 } 7 8 // 获取文件大小,尽量一次读完 9 size_t fileSize = getFileSize(file); 10 if (fileSize != 0) { 11 result.resize(fileSize); 12 size_t n = fread(&result[0], 1, fileSize, file); 13 assert(n <= fileSize); 14 if (n != fileSize) { 15 result.resize(n); 16 } 17 } 18 19 // 在读取过程当中,有可能文件大小有变化,再尝试读取 20 const size_t read_len = 1024; 21 char buf[read_len]; 22 for (;;) { 23 size_t n = fread(buf, 1, read_len, file); 24 result.insert(result.end(), buf, buf + n); 25 if (n < read_len) { 26 break; 27 } 28 } 29 fclose(file); 30 return result; 31 } 另外一种C++风格,但是性能较差的方法:
先放资料:
How to use boost::property_tree to load and write JSON
How to iterate a boost property tree?
不出现key的方法遍历一个json文件:
编译某代码,发现报错某函数未定义的引用。该函数的是先前编译得到的动态库中。
import os
1import math 2ave_err=0.0 3max_err=0.0 4max_err_rate=0.0 5length=0 6with open("cpu_result.txt","r") as fp1, open("cuda_ppl_result.txt","r") as fp2: 7 for l1 in fp1: 8 l2 = fp2.readline() 9 l1=l1[:-2] 10 l2=l2[:-2] 11 lst = l1.split(' ') 12 lst2 = l2.split(' ') 13 #print lst 14 lst = [float(x) for x in lst ] 15 length = length + len(lst) 16 lst2 = [float(x) for x in lst2] 17 #print (lst) 18 #print (lst2) 19 20 for index,x in enumerate(lst): 21 y = lst2[index] 22 ave_err = ave_err + abs(x-y) 23 max_err = max(max_err,abs(x-y)) 24 max_err_rate = max(max_err_rate,abs(x-y)/x) 25 26 print("len=",length) 27 print("max_err=",max_err) 28 print("max_err_rate=",max_err_rate*100,"%") 29 print("ave_err=",ave_err/length) 需要提供两个文件,并且两个文件的数据格式相同。
C++11 std::function 是一种通用、多态的函数封装,它的实例可以对任何可 以调用的目标实体进行存储、复制和调用操作
tbb是**Threading Building Blocks library的缩写,**是一个为开发者提供并行解决方案的库.
以前用的办法太老土啦
看到一个since C++11的方法,我觉得比较优雅
用gdb调试c++的时候,需要添加-g编译选项add_compile_options(-g),并且关掉各种编译优化