2022年春学习了MIPS视角下的计算机体系结构与组成原理,同年夏自学了操作系统(科普级别的了解),汇编语言是学习操作系统的时候,基于学过的计组强行吃下来的,并没有单独学过。
秋天学学校的OS(比较深入),同时我也报了汇编语言与接口技术这门选修课。在这门选修课上我感觉汇编相关内容还是十分丰富的,并且在系统、底层、安全这些方面用处很多。
这个系列是对这方面知识的整理。打算在这个系列的最后进行课程内容的复习。
课程10章,前四章为汇编语言,后6章为微机硬件接口电路。
有了CPU的电子信息系统功能更为丰富。
电子信息系统的输入是物理量
物理量转化为电量:传感器
转化后的电量为 mv 级
电量放大并滤波:前端调理电路
模电课程(本人不学),到伏特级,留调试点。
模拟信号到数字信号:A/D转化
可以根据需求选择A/D芯片转化的精度和速度。
数字信号提交给CPU处理:CPU型号也是根据需求选择。
CPU应当可以向A/D转化器件和前段调理电路发送控制信号,控制一些处理速度。CPU处理后的数字信号应有存储器存储。
需要输出的数字结果:D/A转化
与前端调理对称地,需要后端调理电路,其输出量来控制外部器件/设备;
实验时这里后端调理结束后通过测试点引出到示波器了。
另一些应用场合,输出要显示(电视机)、打印(打印机)。
我们需要给CPU编程序(汇编语言),来决定整个系统怎么工作,这就是前4章的主要内容。不同的I/O设备的类型也有差异,设备接受信息的格式不同(如串行并行、模拟量数字量),所以CPU和设备之间要设计一段接口电路,这是后半部分硬件部分的内容(时序、存储器、I/O设备接口)。
不是本课程的讲解内容。也可以简单再分为系统软件和应用软件。
早期计算机硬件组成
控制器控制ALU运算:ALU运算的数据在控制器控制下送往存储器;
存储器中的数据被控制器控制器送到ALU;
输入设备(IO)控制器控制输入设备输入数据到存储器或ALU。
随着集成电路发展,将ALU和控制器集成在一起,成为中央处理器CPU(也称微处理器)。
上述部件之间传递信息:
数据信息、控制信息、地址信息
(这点很好理解)
对应的传送信息的线/通道:数据总线、控制总线、地址总线。
现代微型计算机硬件组成
以微处理器/CPU为核心来组成。CPU通过引脚来跟外部存储器、I/O实现地址、数据、控制信息交互。而8位CPU8个引脚,16位CPU16个引脚,是无法同时满足三条总线分开接入的。
8086CPU有16根数据总线,20条地址总线和16条控制总线。
因此实现了一种分时复用技术,部分引脚分时复用。
因此需要设计一个电路(系统总线形成电路),鉴别复用的部分引脚此时到底输出/入的是什么信息,并输出输入。
要想设计这个电路需要了解CPU引脚的时序(第五章)。
引脚也称微处理器级总线。
转化后形成的三总线称为系统总线。外设就挂接在系统总线上。
CPU具体如何与外设交互:
硬件子系统中的存储子系统,由ROM和RAM组成。对于内部不含存储电路的CPU电子系统而言,必须用这两样ROM和RAM,在三总线上扩展设计存储器。
计组实验总线信息这里讲挺清楚的,汇编与接口这课详细讲了怎么设计存储器。
ROM又称程序存储器,用专用设备写入,接入系统电路时是只读的。
指令的概念
前面提到了,I/O设备不会直接接到CPU上,要通过一段接口电路来完成标准化并与CPU连接。
接口电路也就是常说的接口。
I/O接口是连接CPU和I/O设备的控制电路。比如显示器与CPU之间通讯有显卡电路,音响与CPU之间有声卡。
当然,CPU要想向I/O设备读写数据,需要地址来引导。这就提出了I/O接口地址。这是为I/O设备对应的I/O接口电路分配的地址,这就完成了从接口电路进行读写操作到从接口地址进行读写操作的转化。
这一点跟存储器的转化是相通的。
这里有一个问题,如何对I/O接口编址?
8086系统中,是通过地址线来统一编址。即既编址存储器地址,也编址I/O接口。这时读写存储器和I/O的指令相同。
当然,对于存储器地址空间和I/O地址空间,也有很多微处理器采用两个独立地址空间。这时存储单元地址和I/O端口的地址值可能相同,所以需要采用存储器读写信号和I/O读写信号来区分。这样CPU读写存储器和I/O的指令是不同的。
对于一个I/O接口来说,地址码通常只有一个,这里需要设计一个电路来完成从16根地址线(16位二进制)+控制线上的有效位 到一个控制命令(高低电平0/1)的转化。
其实也就是一个I/O地址译码器。这是数电/数字逻辑课的内容。
存储器相应也有类似的结构。
这部分课程后续会再详细介绍。
上述硬件结构还不能工作,只是一个微型计算机,而不是微型计算机系统。需要配上I/O设备、电源、软件等,才能正常工作。
前面已经提到过很多次存储器,这里再简单整理下。
存储器有几个要素,地址单元大小,地址号码。一个地址单元内是一个字节8bit=1byte。而地址号则决定地址单元的逻辑位置,地址线编码了地址号,CPU通过地址线寻址存储器。所以大空间的存储器也要求着地址线条数要多。
地址线和数据线宽度的区别:
数据线的宽度决定一次传送的数据规模。
8086CPU数据线16位,所以一次可以取两个字节的内容。
因此,两个相邻的地址单元(字节),可以组成一个字单元(也就是16位)。字分为高八位和第八位。
大端字节序和小端字节序。而8086系统是高字节存放在高地址空间,低字节存放在低地址空间。
读/写一个字时,读/写的地址是低字节的地址号。
设计存储器时我们需要对芯片进行相关组织而达到相关存储要求。
这部分各个课(C、数字逻辑、计组)都讲,实在重复。
程序设计中的二进制->十进制的一种方法:
除十取余法
二进制除十的二进制,然后余数变成十进制,这样就是十以内的转化
比较法
后面汇编部分会实现这里的简单转换算法
程序设计中的十进制->二进制:
比如要从键盘输入95,CPU中9*10得到的结果就是二进制,再加5,得到的就是二进制95.
这个想法根本原因是:CPU只认识二进制。
mov AL, 96
add AL, 89
中的96、89就是二进制的形式被CPU识别的。
首先要搞清楚运算的对象是8位二进制(字节)还是16位二进制(字)。
在现在大多数情况的汇编语言中数字是十六进制的, 如果最开头的一位是A~F, 仍然要求在前面加零.
处理器状态字寄存器/标志寄存器:
只有运算才能影响标志寄存器。包括下面的逻辑运算。
补充:
- PF是奇偶校验,只看低八位,如果1个数为偶数则为1,奇数为0.可以用于数据串行通信过程中的奇偶校验的硬件实现。
- AF是辅助进位,管理四位间的进位借位,有进位为1。
最近遇到了一个C程序上的问题,从端口中拿出的状态码是char类型的,但是用char接收会溢出,所以向上适用int类型就会正常。
公式1:[X+Y]补 = [X]补+ [Y]补
公式2:[X-Y]补 = [X]补- [Y]补
公式3:[X-Y]补 = [X]补+ [-Y]补
由补码的运算结果(补码)求原码:对补码求补码(符号位不变,取反+1)。所以有公式4.
公式4:[X]=[X补]补
在上面公式3的情境中,需要实现一个操作:已知[Y]补,求[-Y]补。这时需要包括符号位在内全部取反,再加1。
用四位二进制描述0~9十个十进制数
对应关系
也称8421码
更复杂的表示
BCD码的运算:主要是换算进位问题。
如下图,53+28的运算中需要判断是否超过9,如果超过9而未达16,需要+6强制转化。
这时就用到了AF。
程序实现中
mov AL,53
add AL,28
DAA;如果设计BCD计算,+6调整
;如果是分离BCD,需要AAA指令
'0''9':30H39H
字符到数字转化:-30H
'A''F':41H46H
'a''f':61H66H
大小写转化:
;假设将AL中转换为大写
;大写和小写仅在第五位有区别
;;大写:0100_xxxx
;;小写:0110_xxxx
AND AL,0DFH
;;由于第七位必然为0
AND AL,5FH
;AL中转换为小写
OR AL,20H
目录WebFlask140.对Flask蓝图(Blueprint)的理解?141.Flask和Django路由映射的区别?Django142.什么是wsgi,uwsgi,uWSGI?143.Django、Flask、Tornado的对比?144.CORS和CSRF的区别?145.Session,Cookie,JWT的理解146.简述Django请求生命周期147.用的restframework完成api发送时间时区148.nginx,tomcat,apach到都是什么?149.请给出你熟悉关系数据库范式有哪些,有什么作用?150.简述QQ登陆过程151.post和get的区别?152.项目中日志的作用153.django中间件的使用?154.谈一下你对uWSGI和nginx的理解?155.Python中三大框架各自的应用场景?156.Django中哪里用到了线程?哪里用到了协程?哪里用到了进程?157.有用过DjangoRESTframework吗?158.对cookies与session的了解?他们能单独用吗?爬虫159.试列出至少三种目前流行的大型数据库160.列举您使用过的Pyt
给DataGrid添加确定删除的功能 DataGrid的功能我想大家是知道的,我在实际的应用中遇到如下的问题,客户要求在删除之前做一次提示。类似于windows。首先我们都知道DataGrid支持删除的功能,我们可以向DataGrid里面添加删除列就可以实现,下面我想用模板列来实现带提示的删除按钮。我们用northwind的示例数据库作为例子数据库操纵Categories表。DataGrid的Html页的内容如下: <asp:DataGridid="grdTest"style="Z-INDEX:101;LEFT:205px;POSITION:absolute;TOP:134px"runat="server"> <Columns> <asp:TemplateColumn> <ItemTemplate> <asp:Buttonid="btnDelete"runat="server"Text=&q
CSScssCSS简介基础用法高级用法---选择器id选择器什么是idid选择器如何使用类选择器属性选择器引用方式HTML内引入外部导入简介简单来说css就是来控制元素样式的 w3school手册 为什么要用css呢样式重复以及代码看着难受等问题如下图对比 实现此代码 一<html> <head> <metacharset="utf-8"> <title></title> </head> <body> <divstyle="width:100px;height:100px;background-color:black;float:right;"></div> <divstyle="width:100px;height:100px;background-color:red;"></div> <divstyle="width:100px;height:100p
说明:SpringBoot起飞之路系列文章的源码,均同步上传到github了,有需要的小伙伴,随意去downhttps://github.com/ideal-20/Springboot-Study-Code才疏学浅,就会点浅薄的知识,大家权当一篇工具文来看啦,不喜勿喷哈~引言前面分别介绍了一下一些入门的配置和基础,同时引入了Thymeleaf模板引擎,而练习一些小Demo就要开始涉及到数据了,所以今天来讲一下如何在SpringBoot中整合常见数据相关的一些技术:JdbcTemplate、Druid、MyBatis,重点熟悉下后两者,用的也是比较多的这一篇所介绍的内容,都不是新内容,不涉及太多的语法,关键是整合,关于这三样介绍也就简单提一下最后开始之前,还有一个需要提及的SpringBoot中关于数据库相关的处理,均使用SpringData,它是Spring全家桶中的一个子项目,能同时支持关系/非关系型数据库的操作,能够极大地简化数据库访问的操作更多内容,可以去看一下官网:https://spring.io/projects/spring-data(一)整合JdbcTemplate虽然
开放平台交互模型交互模型设计的三方:资源拥有者:用户客户端:APP服务提供方:包含两个角色认证服务器资源服务器认证服务器认证服务器负载对用户进行认证,并授给客户端权限。认证很容实现(验证账号密码即可),问题在于如何授权。比如我们使用第三方登录“有道云笔记”,你可以看到如使用QQ登录的授权页面上有“有道云笔记将获取以下权限”的字样以及权限信息认证服务器需要知道请求授权的客户端的身份以及该客户端请求的权限。我们可以为每一个客户端预先分配一个id,并给每个id对应一个名称以及权限信息。这些信息可以卸载认证服务器的配置文件里。然后,客户端每次打开授权页面的时候,把属于自己的id传过来,如:http://www.funtl.com/login?client_id=yourClientId复制随着时间的推移和业务的增长,会发现,修改配置的工作消耗了太多的人力。有没有办法把这个过程自动化起来,把人工从这些繁琐的操作中解放出来?当开始考虑这一步,开放平台的成型也就是水到渠成的事情了。OAuth2开放平台开放平台是有OAuth2.0协议衍生出来的一个产品。它的作用是让客户端自己去这上面进行注册、申请,通
用途 animation-delay规定动画何时开始。默认是0。即从动画应用在元素上到动画开始的这段时间的长度。代表动画在应用到元素上后立即开始执行。否则,该属性的值代表动画样式应用到元素上后到开始执行前的时间长度;定义一个负值会让动画立即开始。但是动画会从它的动画序列中某位置开始。例如,如果设定值为-1s,动画会从它的动画序列的第1秒位置处立即开始。语法animation-delay:1s; animation-delay:3ms;复制值值描述<time>动画样式应用到元素到元素开始执行动画的时间差。该值可用单位为秒(m)和毫秒(ms)。如果未设单位,定义无效。例子/*HTML*/ <divclass="stage"> <figureclass="ball"></figure> </div> /*CSS*/ @keyframes'slide'{ from{ left:0; top:0;} 50%{ left:244px; top:100px;} to{ left:
目录神经网络算法的直观了解21表征假设和激活函数1神经网络过程描述2神经网络相关的几个问题22结构设计ArchitectureDesign23代价函数CostFunction和优化目标Optimizationobjective24如何进行优化3参考资料前馈传播和结构设计11本章节说明12通用逼近定理的严谨表述12从非线性讲起为什么使用激活函数13前馈网络拟合函数过程2前馈网络进行逼近的拟合过程121来自ApproximationbySuperpositionsofaSigmoidalFunction这篇论文的观点121来自OntheNumberofLinearRegionsofDeepNeuralNetworks这篇论文的观点11以sigmoid为例11ReLU的拟合1通用逼近性质理论UniversalApproximationPropertiesTheorem神经网络可以逼近任意函数3关于通用逼近定理的补充说明4参考资料目标优化11从单变量函数开始12多元函数的梯度下降2学习率learningrate的选择1基于梯度的目标优化3其他优化算法4参考资料基于梯度的神经网络优化31BP算法
作者:BenRogojan 我们最近在Reddit上做了问答活动。有个最常见的问题是数据科学家和数据工程师之间的区别。因此,我们想在这个主题上下写一篇文章来深入探讨下这个话题。有许多数据专家的岗位听起来没多大区别,使用的工具也很类似,我们很难知道各类职位应该承担什么样的职责。此外,较小的公司可能会受限于他们聘请的数据工程师或数据科学家的人数,这便意味着很多时候特定的任务和目标可能会开始混合。上述使得明确区分这两个角色变得更加困难。因此,我们想通过讨论数据工程师和数据科学家所拥有的不同目标,思维模式,工具和背景来了解两个职位的不同之处。在我们讨论差异之前,我们想做一个快速的引言。事实是,许多数据科学家和数据工程师将执行其他技术角色的任务。数据科学家可能需要开发ETL,数据工程师可能需要开发API和前端。因此,我们在下面指出的区别只是为了弄清楚技术差异在哪里。来源:DataCamp目标数据工程师的目标更侧重于任务和开发。数据工程师构建自动化系统和模型数据结构,以允许有效地处理数据。这意味着数据工程师的目标是创建和开发表格和数据管道,以支持分析仪表板和其他数据客户(如数据科学家、分析师和其他
目前,美国Google公司的AndroidP(安卓9.0),已经正式全面推出有几个多月了。众多手机品牌厂商也都在积极的进行更新适配Android9.0系统(修改UI界面也算是二次开发,嗯)。不知道各位Android用户是否体验到了这一最新版本的系统呢?但按照各大手机厂商的适配过程,目前这可能还只是少数用户的专属,而根据谷歌公布的统计数据显示,目前AndroidP的市场份额还不到5%,现阶段,三年前的Android7.0和两年前的8.0才是主力。AndroidQ露出庐山真面目在向大家介绍和解读全新AndroidQ之前,先回答一下广大吃瓜群众更加关心的时间表。早在去年春天,谷歌推送AndroidP的开发者预览版时,AndroidQ其实就已经初见端倪,而在去年11月,包括谷歌Pixel3XL和小米8SE也都已经开始了这一版本的测试工作,其中在GeekBench的数据库中,就曾出现了搭载AndroidQ的小米8SE测试成绩。至于真正从官方渠道见到AndroidQ,按照海外开发者的估算,应该是在今年3月左右谷歌就会推送其开发者版本,而正式亮相则依旧会在I/O大会上,最终面向消费者的稳定版则应该在
待完善。以下方法基于:CentOSLinuxrelease7.2.1511(Core) 1打包部署,在springboot项目中添加打包插件依赖<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <finalName>${project.name}</finalName> <executable>true</executable> </configuration> </plugin> </plugins> </build>复制2:上传至/home/yfmcp/{服务名}/jar包 3创建服务相关的service后缀配置文件/etc/systemd/system[Unit] Des
随着互联网行业的不断发展,各种监控工具多得不可胜数。可以参考这里列出精选的20多种方式来管理你的机器。在本文中,我们主要包括以下方面:命令行工具网络相关内容系统相关的监控工具日志监控工具基础设施监控工具监控和调试性能问题是一个艰巨的任务,但用对了正确的工具有时也是很容易的。下面是一些你可能听说过的工具,也有可能没有听说过——何不赶快开始试试?系统监控工具1.top 这是一个被预装在许多UNIX系统中的小工具。当你想要查看在系统中运行的进程或线程时:top是一个很好的工具。你可以对这些进程以不同的方式进行排序,默认是以CPU进行排序的。2.htophtop实质上是top的一个增强版本。它更容易对进程排序。它看起来上更容易理解,并且已经内建了许多通用操作。它也是完全交互式的。3.powertoppowertop可以帮助你诊断与电量消耗和电源管理相关的问题。它也可以帮你进行电源管理设置,以实现对你服务器最有效的配置。你可以使用tab键切换选项卡。4.iotopiotop用于检查I/O的使用情况,并为你提供了一个类似top的界面来显示。它按列显示读和写的速率,每行代表一个进程。当发生交换或I/
这一次要讲的是套接字名和DNS,并且还会涉及到网络数据的发送接受和网络错误的发生和处理。下面说套接字名,在创建和部署每个套接字对象时总共需要做5个主要的决定,主机名和IP地址是其中的最后两个。一般创建和部署套接字的步骤如下:importsocket s=socket.socket(socket.AF_INET,socket.SOCK_DREAM) s.bind(('localhost',1088))复制可以看到我们指定了4个值,两个用来做对套接字做配置,另外两个提供bind()调用所需要的地址。第5个坐标则是因为socket()方法有第3个可选参数。下面我们依次说这5个参数。首先,第1个参数是地址族的选择,某个特定的机器可能连接到多个不同类型的网络。对地址族的选择指定了想要进行通信的网络类型。这里面选择的是AF_INET作为地址族,即在IP网络层编写程序。这样对与Python程序员来说也是最有益的。第2个参数就是套接字类型,然后我们解释一下套接字类型,尽管TCP和UDP是AFINET协议族特有的,但是套接字接口的设计者决定基于数据报的套接字这一宏观的概念创建一些更通
在微博上经常抱怨“去死”,或许会被甄别为抑郁患者。近期,一项“利用社交媒体数据挖掘识别抑郁倾向人群”的研究成果在网络引发热议,来自哈尔滨工业大学的研究人员称,通过构建抑郁倾向识别模型,实验室在新浪微博近亿用户中识别出几百名重度抑郁症患者,研究结果经医学机构确认准确度可达83%。相关人士表示,这项研究结果或成为抑郁症临床诊断之外的新兴诊断方法。大数据应用建构预测模型在新浪过亿用户中扫描该项研究由哈工大“社会网络与数据挖掘”联合实验室与国内社交媒体数据挖掘公司“宏博知微”共同开展。实验室负责人哈工大博士于霄告诉记者,他是在微博上几位抑郁症患者自杀事件发生后开始关注抑郁症患者这一群体的,“仔细看这些人的微博,非常触目惊心,负面情绪在每一条都很明显,当时我们就感叹,如果通过数据识别这一群体,让其亲友能早点干预,也许可以避免悲剧发生。”如何识别抑郁群体?于霄和同事首先是挑选新浪微博用户中被确认为抑郁症的人群作为样本,通过计算机强大的计算能力分析样本数据,从这些数据获取出规律后建构预测模型。有了数据模型,计算机就可以用这一模型扫描新浪微博上过亿用户了。“计算机算法会包括自然语言处理、时间序列、机器
来自以色列SafeBreach公司的研究人员对隐蔽数据外泄方法进行了广泛的分析,并且发明了他们心目中“完美”的方法。SafeBreach的研究人员从2015年就开始寻找高度安全的组织中窃取少量机密信息的完美方法。恶意攻击者经常会从公司窃取GB级的文件,但是少量的关键信息同样可以非常有价值,例如,加密密钥、密码、甚至是一些可以暴露公司的一些战略决策的只言片语。专家分析发明的数据渗透方法针对的情景是外部攻击者已经在某个目标组织内植入了恶意软件,或者内部人员希望在不被发现的情况下泄露机密信息。完美方法的要求和条件上周在阿姆斯特丹举行的HITB大会上,SafeBreach公司CTO、联合创始人ItzikKotler和公司安全研究副总裁AmitKlein向大家展示了完美的数据外泄方法和其中的因素。专家详细解释了他们的“十诫”,就是要完成完美的数据外泄需要满足的要求和条件。第一条,也是最重要的规则是,技术必须要可测量的、并且是安全的。专家称,数据渗透应当遵守柯克霍夫原则:即使密码系统的任何细节已为人悉知,只要密匙(key,又称密钥或密钥)未泄漏,它也应是安全的。这样的密码系统就足够安全,因为相同的
1.问题背景 在我的力推下,部门业务开发转向ABP,其中ORM采用的是EntityFrameworkCore. 然而,在数据查询方面,出现了重大的性能问题... 请看代码: //在一个百万数据量的表中分页获取十条数据居然花了180ms左右,简直不能忍。 varentityList=awaitquery .PageBy(input) //这是个字符串:MonthCodedesc .OrderBy(input.Sorting) .ToListAsync(); 复制 这是很常见的Abp示例项目中的CURD中的常规代码,被大量使用... 2.分析问题 2.1遇到问题先猜,提高查问题效率 开始我平淡的猜测... a.整段代码平淡无奇,【但是OrderBy的出现】直接解决了任意字段排序的问题,简直解放双手,要知道百万数据在前端排序是不可能的。 b.【问题只能被转移,不能被消灭】--我的编程思想 c.所以,问题初步定在Orderby上。 2.2猜到问题代码,继续猜可能的原因 a.按下F12查看函数签名: OrderBy(thisIQueryablesource,ParsingConfi
由于Win11和Win10的安装并没有多大变化,所以此处只是对TPM检测时出现的报错做出解决说明 镜像下载官方下载地址:https://www.microsoft.com/zh-cn/software-download/windows11 注:官方推荐安装工具作用类似于UltraISO、rufus等启动盘制作工具。它在制作启动盘之前,同样是会下载Windows11的镜像的。如果是打算安装在本机,推荐直接双击镜像进行安装,不需要使用PE以及制作U盘启动盘。 这台电脑无法运行Windows111、遇到报错信息这台电脑无法运行Windows11,这是因为Win11会检测系统硬件TPM 2、按shift+F10打开命令行界面 3、打开注册表 regedit 4、访问路径Setup,并新建项LabConfig \计算机\HKEY_LOCAL_MACHINE\SYSTEM\Setup 5、在项LabConfig下分别
首先,要理解为什么要做接口测试? 优点: 1、可以节约时间,缩短项目时间 2、提高工作效率 3、提高系统的健壮性 4、主要适用于回归测试,保证版本迭代上线的质量保证。 接口测试流程 需求讨论-->需求评审-->场景设置-->数据准备-->执行 设计用例 功能、业务逻辑、异常(参数异常、数据异常)、安全(关键字) 设计测试用例的好处: 理清思路,避免漏测 提高测试效率 跟进测试进度 测试报告(依据) 跟进重复性工作 1、测试用例之功能 功能是否正常 功能是否按接口文档需求 2、用例之逻辑业务 是否依赖业务(前置条件,例如需要先登录) 3、用例之异常测试 参数异常 关键字异常:参数为开发语言的关键字 参数为空ornull 多少参数 错误参数 数据异常 关键字数据 数据为空 null 长度异常 错误数据 4、用例设计之安全测试用例 1.cookie 2.header 3.唯一识
一、项目背景: 看了matplotlibforpythondevelopers这本书,基本掌握了在pyqt中显示曲线的做法,于是自己写一个。 二、需求描述: 1)X轴显示时间点,显示长度为1分钟,每一秒钟绘制一个点,X轴长度超过1分钟,则左移1秒刻度,实现动态效果 2)Y轴显示随机变化的数值,1-100 三、准备工作 1环境:python3.3,eric5,pyqt4 四、开始动手: 使用Eric创建新项目: 在设计编码前期主要用到Eric的两个窗口:源码和窗体浏览器,类似delphi。 在窗体浏览器中,右键,newForm,窗体类型选择MainWindow,如下: 保存时,取名为MplMainWindow。 在界面上放两个PushButton,水平布局,然后放一个Widget,修改名称、水平及垂直策略。 界面设计如下: 最后执行网格布局。 为了嵌入Matplotlib在mplCanvas中,需要将mplCanvas升级,右键执行Promote,输入类名称为MplCanvasWrapper,这
一:send和awk解释 sed-npfilenamesed----------------------------是一个流编辑器(streameditor) awk‘BEGIN{print“Hellow"}'awk--------是一种用于处理文本的编程语言工具。 二:传值方式总结 KVO底层会动态长生新的类,只能坚挺属性(一个对象的属性能背多个兑现监听,一个对象能监听多个对象的其他属性) kvc/kvo底层是基于runtime 代理,规范,代码多:一对一 通知,发送和接收:一对多(一个通知能被多个对象接受,一个对象能接受多个通知) 三:block简单小结 bloack时基于指针和函数指针的,指向结构体的指针!外面使用__block之后里面能修改值,是因为block将地址传进去了 默认在栈里面,对block做一次copy操作就能将它放到堆里面并且一致使用它,还有一种方法是Block_copy(blockname)非Arc里面 四:swift