qt 选择器
qt的选择器中共有
通用选择器(*): 作用于所有widget
类型选择器: 作用于该类及子类
类选择器: 只作用于这个类
ID选择器: 作用于某个对象
属性选择器: 作用域某个成员变量
包含选择器: 作用于某个类下的类
子元素选择器: 作用于某个类的直接子widget
伪类选择器: 选择某些状态,如QPushButton的hover和pressed状态
子控件选择器: 选择某个部件下面的子部件
qss内部数属性一般是不区分大小写的,但是类名,属性名区分大小写
加载方法QFile qss("StyleSheet.qss");qss.open(QFile::ReadOnly);app.setStyleSheet(qss.readAll());qss.close();
类型、类、ID选择器类型选择器
格式className{ attribute: value; ...}其中attribute是控件的各种属性,className是类名,由QObject::metaObject()::className获得。类型选择器匹配该类及其派生类
...
js 代理和反射
代理基础代理是目标对象的抽象。代理类似于c++的指针,可以通过代理操作对象,但是它又是一个独立的变量。在代理上的修改会反映到目标对象上,在目标对象上的修改也会对代理起作用
创建
const target = { id: 'target'};const handler = {};const proxy = new Proxy(target, handler);//两个参数,第一个是操作的对象,第二个是处理程序对象,用来定义捕获器console.log(proxy.id);//target可以通过revocable()定义撤销代理,并且还可以通过一个返回值进行撤销,撤销完成后再使用代理会产生异常const target = {foo: 'bar'};const handler = { get(){ return 'intercepted';}};const {proxy, revoke} = Proxy.r ...
js函数
基础在js中,函数其实是对象。每个函数都是Function类型的实例,Function也有自己的属性和方法。因为函数是对象,所以函数名其实就是指向对象的指针,甚至和这个对象没有强制绑定。
定义函数的一些方式:
直接定义function sum(num1, num2){ return num1 + num2;}
匿名定义,定义一个函数,然后把函数指针给sum变量let sum = function(num1, num2){ return num1 + num2;};
通过箭头,可以称作箭头函数。这是一种语法糖,实际上和上面那个作用是一样的let sum (num1, num2) => { return num1 + num2;};
箭头函数可以用在任何使用函数表达式的地方(不需要函数名的地方),但是箭头函数和普通函数还是有一些微妙的差别的,例如不能使用arguments等。
最后一种方法时使用Function构造函数,这个函数接收任意多个参数,最后一个参数会被当成函数体,例如let sum = new Func ...
js迭代器和生成器
迭代器在很多语言中都有迭代器,例如QList<int>::iterator iter = list.begin();while(iter != list.end()){ iter = iter->next();}在js中let set = new Set().add(3).add(1).add(4)
通过上面的例子可以看出,迭代器的关键是不断返回一个相同类型的不同实例。在js中,实现Iterable接口就可以认为是一个迭代器。迭代器是按需创建的一次性对象,每个迭代器都会关联一个可迭代对象,而迭代器会暴露迭代其关联对象的API(例如next)
实现Iterator接口需要实现两种能力: 自我识别能力和创建实现Iterator接口的对象的能力。这意味着需要暴露一个属性作为默认迭代器,并且这个属性还要以Symbol.iterator作为键。默认迭代器必须引用一个迭代器工厂函数,调用这个工厂函数必须返回一个新迭代器。
常见的实现了Iterator接口的类:字符串、数组、map、set、arguments、NodeList
可以使用for-of循环、数 ...
js常用对象
基本引用类型DateDate和java的Date类似,里面保存的是从1970年1月1日至今的毫秒数。
创建
Date(date): 创建一个Date对象,包含创建时的时间.date是字符串形式的时间,格式可以参照parse()的格式
Date.now(): 返回当前时间的毫秒数
Date.parse(): 将其他格式的时间字符串转换为该日期的毫秒数,例如let someDate = new Date(Date.parse("May 23, 2019"));
可以使用下列格式
月/日/年: 如”5/23/2019”
月名 日, 年: 如”May 23, 2019”
周几 月名 日 年 时:分:秒:时区,如”Tue May 23 2019 00:00:00 GMT-0700”
YYYY-MM-DDTHH:mm:ss:sssZ,如”2019-05-23T00:00:00
Date.UTC(year, month, day, hour, minute, second):传入年、月(0-11)、日(1-31)、时(0-23)、分、秒并转化为毫秒数,如let y2k = ...
汇编 函数
进入函数在汇编中其实就是callq,出函数就是retq。
而callq和retq的功能之前已经提到过
参数的传递在x86-64位系统中,有六个寄存器负责传入参数,分别是rdi,rsi,rdx,rcx,r8,r9,同时程序返回时返回值放在rax中。如果大于6个,多的部分就要放在栈上。如果我们想操作在栈上的参数,就要通过 x(%rsp)来操作了。
例如有7个参数,此时第7个参数就放在栈上那么 8(%rsp)就可以访问这个参数了,pushq操作分为两部分,首先是rsp-8,然后把数据放进去。这个时候其实数据就是在rsp到rsp+8的区域中,也就是说我们直接movq (%rsp)…就可以访问到我们刚才放进去的元素了
我们这里不采用(%rsp)的原因是因为调用函数是callq,在最后应该是把rip放到栈中,所以要加8到下一个元素。
如果有8个参数,那么栈中要先存第8个,然后再存第7个。
栈上的局部储存由于现代编译器的不断优化和寄存器的增多,我们一般不把局部变量放到栈中,但是有的时候我们不得不把他们放到栈中。
寄存器不足时
某一变量用了&(取地址),因此这个时候不得不把它放到栈中,这样才 ...
Hadoop和Spark
Mapreducemapreduce是一种编程模型,它的基本思想就是分而治之。
map()负责将一个任务分解成若干个小的任务,这些小的任务可以交给不同的计算节点去处理,Reduce()负责把这些计算结果进行合并。
例如统计词频:a a aaa aaabcdebcabcabc想要统计这些次出现的次数首先进行map,例如有4个工作节点,我们可以把每两行给一个工作节点,然后这些工作节点就会进行词频统计,最后得到('a', 3), ('aa', 1)('aaa', 1), ('bc', 1)('de', 1), ('bc', 1)('abc', 2)之后把这些计算结果发给主节点,然后主节点进行reduce, 也就是把各个工作节点产生的结果组合到一起。('a', 3), ('aa', 1), ('aaa', 1), ('bc', 2), ('de', 1), ...
硬件描述语言
硬件描述语言(HDL)大致功用硬件描述语言和逻辑电路之间的关系类似于c语言和机器代码。c语言通过编译器编译成机器码,而硬件描述语言通过硬件描述语言综合器变成硬件电路网表文件。
硬件描述语言和高级语言的一大区别是硬件描述语言的基本运行逻辑是并行,而高级语言是顺序执行
在HDL中,只有一部分是可以综合的,称为可综合的HDL。另外一部分主要用于仿真验证(例如等几秒后再进行下一步)
综合器大致工作过程为:
将RTL描述通过EDA工具翻译成未经过优化的设计约束
然后进行逻辑优化。去除冗余逻辑
之后根据工艺库实现逻辑电路及其布线。工艺库由中芯国际和台积电等公司提供
语法基础框架:module mux2(input logic D0, D1, sel, output logic y); logic a, b; assign a = D0 & (~sel); assign b = D0 & sel; assign y = a | b;endmodule
module endmodule: 定义了一个模块,注意module后面有一个;,而endmodul ...
js基础语法
html中使用javascript将js插入html主要是用<script>元素,这个元素有八个属性
async: 表示应该立即下载脚本,但是不阻止其它页面动作(如加载页面,加载其他脚本等),只对外部脚本有效.async标记的脚本之间没有前后顺序关系。
charset: 指定字符集,但是很少用
crossorigin: 配置相关请求的CORS(跨源资源共享)设置。crossorigin="anonymous"表示配置文件请求不必设置凭据标识,而use-credentials表示出站请求会包含凭据
defer: 表示文档解析和显示完成后再执行脚本也是可以的,即推迟执行。有时候会在DOMContentLoaded事件之前执行(此时已经解析完</html>了),并且推迟执行的脚本也会按顺序执行。但是都不是绝对的。
integrity: 允许比对接收到的资源和指定的加密签名来验证子资源完整性
src: 表示包含的外部文件地址
type: 这个值始终是”text/javascript”
使用script时,一般把<script>元素放在 ...
js对象
基础操作创建自定义对象的方式通常是创建一个Object的新实例,然后添加属性和方法let person = new Object();person.name = 'Nicholas';person.age = 29;person.job = 'engineer';person.sayName = function(){ console.log(this.name);}
这是早期创建对象的方式。如果使用对象字面量可以这样写let person = { name: 'Nicholas'; age: 29; job: 'engineer'; sayName() { console.log(this.name); }}
属性类型属性有些是对象中的成员变量,还有些类似于c#中的属性(property).这些属性都有一些内置的attribute(特性),我们可以修改这些特性。为了标识某一个内部特性,一般使 ...