计算机基础知识

计算机基础知识

计算机的本质

	计算机也称之为"电脑">>>:通电的大脑
	计算机的工作肯定离不开电 电信号只有高低电平两种状态(0和1)
	计算机其实只认识数字0和1(二进制)
		进制数
			二进制: 0 1
			八进制: 0 1 2 3 4 5 6 7
			十进制: 0 1 2 3 4 5 6 7 8 9
			十六进制:0 1 2 3 4 5 6 7 8 9 a b c d e f
		通过二进制位的长短来记录各式各样的数据
			比特位(bit)    1bit   
			8bit = 1bytes  字节
			1024bytes = 1KB 
			1024KB = 1MB
			1024MB = 1GB
			1024GB = 1TB
	
	# 补充:文件后缀名的作用
		仅仅是给人看的    

计算机的五大组成部分

	五大组成部分概要
	1.控制器
		类似于人的大脑 控制计算机各个硬件的工作
        控制计算机各个硬件的工作
	2.运算器
		类似于人的大脑 数学运算、逻辑运算
        数学运算、逻辑运算
		控制器+运算器=CPU(中央处理器) 
	3.存储器
		类似于人的记忆 短期记忆、长期记忆
        存储数据
		内存:基于电工作 存取数据的速度快 但是断电数据立刻丢失
      		类似于人的短期记忆
		外存:不基于电工作 存储数据的速度较内存慢 但是可以永久保存数据
        	类似于人的长期记忆
			 eg:U盘 磁盘 磁带 硬盘 固态
	4.输入设备
		类似于人的眼睛 接收外界信息
        eg:鼠标 键盘 触摸屏
	5.输出设备
		类似于人的嘴巴 给外界传递信息
        eg:显示屏 打印机 音响

image

计算机的三大核心硬件

1.CPU
	计算机中真正干活的人(程序要想运行起来必须要有CPU参与)
    控制器+运算器= cpu 
2.内存
	存取数据的速度极快 主要与CPU配合使用
3.硬盘
	能够长久保存数据 

4.内存的容量一般比硬盘小的多得多
	硬件水平跟不上 
    	4GB 8GB 16GB 32GB 64GB 128GB 256GB
5.为什么不直接砍掉内存 让CPU跟硬件交互 
	CPU的运行速度非常的快(1000) 但是硬盘的运行速度非常的慢(1)
	内存的速度比硬盘快很多 可以跟CPU搭配干活 提升CPU运行效率
6.只要是运行的程序 产生的数据第一时间肯定在内存
	以前的文本编辑器使用过程中如果突然断电数据会立刻丢失
 	现在的文本编辑器不会出现这种情况的原因是内部自动执行保存操作
    	保存>>>:将内存中的数据刷到硬盘
    扩展:自动保存机制有两种方式
      	方式1:实时检测文档变化 一旦有变化就保存
       方式2:循环定时任务 每隔一段时间保存一次

image

操作系统

"""
控制 协调 管理计算机各个硬件的工作
"""
程序员ABC都需要开发一个播放视频的软件
	程序员A开发快播
 		 得先编写操作计算机各个硬件的代码
       再编写快播的核心功能
	程序员B开发迅雷
  		 得先编写操作计算机各个硬件的代码
       再编写迅雷的核心功能
	程序员C开发暴风影音
    	 得先编写操作计算机各个硬件的代码
      	再编写暴风影音核心功能
由于计算机各个硬件几乎一致 所以操作计算机各个硬件的代码也几乎相同
为了避免重复造轮子 有个人站出来说这个活它来干!!!
	微软>>>:windows
   
我们现在所使用的应用程序都必须依赖于操作系统之上才可以运行
	所以我在拿到一台计算机之后第一件事就是按照操作系统
 
PC端常见操作系统
	windows、macOS、linux
移动端常见操作系统
	安卓、IOS、鸿蒙

image

编程与编程语言

"""
课外了解:计算机的发展史
"""
1.机器语言
	程序员是直接使用二进制与计算机沟通交流
		优势:计算机能够直接读懂 执行效率高
    	劣势:学习难度太大 开发效率极低 门槛太高
2.汇编语言
	用一些英语字母来表示一串二进制数
       优势:学习难度有所降低 开发效率有所提高 
       劣势:门槛还是太高 
3.高级语言 
	用人类能够读懂的字符与计算机沟通交流
    	优势:学习难度低 开发效率高 门槛低
    	劣势:执行速度没有上述两个语言快
常见高级语言:C++、Java、PHP、python、Golang
 	种类虽然多但是万变不离其宗 底层原理几乎一致
    掌握了一门学习其他的会非常的快

image

编程语言的分类

高级语言都需要经过翻译之后才能被计算机识别并执行
1.编译型语言		C++
	类似于谷歌翻译(一次性翻译) 翻译之后可以反复使用翻译的结果
 		优势:一次翻译可以反复使用 执行效率高 速度快
  		劣势:当程序中频繁出现bug 那么需要反复编译 
2.解释型语言    python
	类似于同声传译(说一句翻一句) 
    	优势:有bug和没有bug执行效率几乎一样
    	劣势:速度没有编译型语言快
'''要想让计算机能够识别并运行高级语言需要对应类型的翻译官'''

pyhon发展方向

	web方向
    自动化运维
    自动化测试
    自动化办公
    网络爬虫
    金融量化
    人工智能
    机器学习
    数据分析
本文转载于网络 如有侵权请联系删除

相关文章

  • SAP SEGW 事物码里的 Function Import

    开放数据协议(OData)包括标准的CRUD(创建、检索、更新和删除)操作,这些操作映射到HTTP方法的POST、GET、PUT/MERGE和Delete几类。此外,OData还支持进一步的服务操作:FunctionImport,这些操作可以由HTTP方法GET或POST调用,用于处理不能映射到标准CRUD操作的任何内容。通过在数据模型中创建FunctionImport,可以在serviceBuilder中实现此类额外的服务操作。例如,您可以为以下自定义操作创建函数导入:WorkItemconfirmation 检查航班的可用性 虽然创建新的函数导入来调用自定义操作很简单,但是如果可以使用标准的CRUD操作来调用要使用的操作,那么就应该尽量避免函数导入的创建。也就是说,应该只为不能使用标准操作调用的自定义操作创建函数导入。Functionimport的例子如下:FunctionImport有下列属性需要维护:ReturnTypeKind:可以在ComplexType和EntityType里选择,也可以选择不返回任何结果。这种情况下,可以理解成一个产生sideeffect的函数执行,比如

  • Postgresql排序与limit组合场景性能极限优化

    1构造测试数据createtabletbl(idint,numint,arrint[]); createindexidx_tbl_arrontblusinggin(arr); createorreplacefunctiongen_rand_arr()returnsint[]as$$ selectarray(select(1000*random())::intfromgenerate_series(1,64)); $$languagesqlstrict; insertintotblselectgenerate_series(1,3000000),(10000*random())::int,gen_rand_arr(); insertintotblselectgenerate_series(1,500),(10000*random())::int,array[350,514,213,219,528,753,270,321,413,424,524,435,546,765,234,345,131,345,351];复制2查询走GIN索引测试场景的限制GIN索引查询速度是很快的,在实际生产

  • HDOJ(HDU) 1994 利息计算(简单题目)

    ProblemDescription 为自行解决学费,chx勤工俭学收入10000元以1年定期存入银行,年利率为3.7%。利率 按年计算,表示100元存1年的利息为3.7元.实际上有时提前有时推迟取,因此实际利息按天 计算,1年按365天计算,因此Q天的利息是 本金*3.7/100*Q/365 存了100天后1年定期年利息提高到3.9%。如将存款提前全取出,再存1年定期。那么前面的 100天只能按活期利息1.7%计算。 100天的利息和本金:10000(1+1.7/100*100/365)=10046.6 再存1年定期:10046.6(1+3.9/100)=10438.4 得到的利息加本金为10438.4 如果无视利息的提高,再存1年。得到的利息加本金为(定期推迟取,利率不变) 10000(1+3.7/100*(100+365)/365)=10471.4Input 输入数据有多组,第1行为整数T,是数据的组数.每组占一行5个数,Y-存入的本金<=100000, Q-已存天数<=365,e-活期利率,f-定期利率,g-提高后的定期利率.Output 每组数据输出2行. 第1行

  • 有赞crash平台符号化实践

    作者:杨杨&姜豪部门:电商移动背景有赞在基础保障平台的实践中完成了Crash平台的建设,但是iOS的崩溃日志未经符号化,排查问题比较困难。为了降低iOSApp的crash率,快速排查线上crash,疑难crash的跟踪处理,符号化崩溃日志显得尤为重要!一、crash日志的收集与分析1.1如何收集crash日志1.手机上直接看,在隐私-分析与改进-分析数据,可以找到所有崩溃日志,未符号化。2.连接电脑,通过“音乐”同步到本地~/Library/Logs/CrashReporter/MobileDevice/xxx的iPhone.缺点:日志没有符号化,需要自己手动符号化3.连接电脑,打开Xcode-window-DivecesandSimulators。Xcode会尝试在本地查找符号表文件,自动符号化。以上3种方法都局限于拿得到设备的情况。4.查看别人手机上的crash日志Xcode-Window-Organizer。这种方式找符号表会有2种途径上传AppStore的时候会让你勾选上传符号表「IncludeAppsymbolsforyourApplication…」,如果上传了,苹

  • 一个安卓App,如何成为DuerOS 上的技能应用呢?

    我们经常谈到的移动互联网是与智能手机密不可分的,iPhone这样的智能手机改变了人们使用手机的交互方式——由功能机(featurephone)的按键式交互变成了触控式交互。对于开发者而言,意味着嵌入式应用框架的转变,详情可以参考《探索嵌入式应用框架(EAF)》。Android和iOS成为了移动互联网上的两大主流开发环境,大多数的开发者和企业都有着自己的AndroidApp,那么,如何让这些安卓App成为DuerOS上支持语音交互的多模态技能呢?DBP上的App技能App技能同样是一种DBP的自定义技能,与其他自定义技能的区别在于需要开发者开发或调整自己的安卓App。DBP平台上APP技能的推出使得AndroidApp可以很快地成为DuerOS设备上的技能,使安卓系统的App生态能够与DuerOS的技能生态水乳交融,为用户带来更多的价值。正像老码农在以往技术大会上所讲的那样,APP技能的接入和DBP自定义技能的开发类似,同样遵循六个步骤:开发者认证技能创建技能开发技能调试技能审核技能上线目前,DBP平台推出的App技能作为Previewfeature开放给广大企业开发者,遵循预览版的相关

  • 【漏洞复现】Tomcat文件包含漏洞的搭建与复现:CVE-2020-1938

    点击上方“公众号”可以订阅哦!Hello,各位小伙伴大家好~今天打开手机就被Tomcat的这个漏洞刷屏了估计昨晚很多大佬都在通宵刷SRC吧...让我们一起来复现一下这个漏洞吧~Part.1漏洞说明漏洞描述2月14日,ApacheTomcat官方发布了一个安全更新版本,用于修复Tomcat中存在的一个利用AJP协议的漏洞。利用该漏洞,攻击者可以通过发送恶意的AJP请求,在未授权的情况下读取或者包含webapp目录下的任意文件。2月20日,国家信息安全漏洞共享平台(CNVD)发布安全公告,将该漏洞综合评级为高危,当前网上已可以找到该漏洞的利用POC。涉及版本ApacheTomcat6ApacheTomcat7<7.0.100ApacheTomcat8<8.5.51ApacheTomcat9<9.0.31Part.2环境搭建JDK安装以Tomcat8.0版本为例,需要安装JDK1.7及以上版本。公众号回复1938可进行下载。Tomcat8.0.39Tomcat8.0.39可在公众号回复1938可进行下载。也可访问官网自行下载:http://tomcat.apache.org

  • PHP Laravel中的Trait是什么

    PHP作为编程语言的一个问题是,您只能有单一继承。这意味着一个类只能从另一个类继承。例如,为了防止代码重复,最好从两个不同的类继承方法。在PHP5.4中,添加了一种称为Traits的语言新特性,并在Laravel框架中广泛使用。Trait是一种在单继承语言(如PHP)中重用代码的机制。Trait旨在通过使开发人员能够在生活在不同类层次结构中的多个独立类中自由地重用方法集来减少单继承的某些限制。Traits和类组合的语义以降低复杂性的方式定义,并避免了与多重继承和Mixins相关的典型问题。Trait类似于类,但仅用于以细粒度和一致的方式对功能进行分组。无法自行实例化Trait。它是对传统继承的补充,可以实现行为的横向组合;也就是说,类成员的应用程序不需要继承。什么是PHPTrait?Trait仅仅是您希望包含在另一个类中的一组方法。与抽象类一样,Trait不能自己实例化。Trait的一个例子可以是:然后你可以把这个trait包含在其他类中,就像这样:现在,如果要从这些类中创建新对象,您会发现它们都有share()方法可用:trait如何运作?从上面的示例中可以看出,尽管没有定义该方法,

  • 由 for...of 深入看 Babel 转码的局限

    ES6借鉴了其他编程语言的特性,为JavaScript带来了for…of循环语法,用于遍历数组等数据结构。当然,由于是ES6的特性,我们使用for…of的时候,依然要借助Babel进行转码。我们来看看Babel是如何处理for…of代码的。ES6原生代码如下。为避免干扰,这里不使用ES6其他特性。varnames=['paul','jordan','griffin']; for(varnameofnames){ console.log(name); }复制Babel转码后结果如下:'usestrict'; varnames=['paul','jordan','griffin']; var_iteratorNormalCompletion=true; var_didIteratorError=false; var_iteratorError=undefined; try{ for(var_iterator=names[Symbol.iterato

  • 《C#图解教程》读书笔记之二:存储、类型和变量

    本篇已收录至《C#图解教程》读书笔记目录贴,点击访问该目录可获取更多内容。一、类型初窥:掀起你的盖头来  (1)C程序是一组函数和数据类型,C++程序是一组函数和类,而C#程序是一组类型声明;  (2)类型是一种模板:模板本身不是数据结构,但它详细说明了由该模板构造的对象的特征;  (3)C#提供了16种预定义类型:13种简单类型(数值类型:int,float,double,decimal等;非数值类型:bool,char),3种非简单类型(object,string,dynamic);所有的预定义类型都直接映射到底层的.NET类型。C#的类型名称其实就是.NET类型的别名,所以使用.NET的类型名称也符合C#语法,不过并不鼓励这样做。在C#程序中,应当尽量使用C#类型名称而不是.NET类型名称;   (4)除了上面提到的16种预定义类型外,还可以创建自己的用户定义类型,一共有6种用户定义类型可以由用户自己创建,它们是:类(Class)、结构体(Struct)、数组(Array)、枚举(Enum)、委托(Delegate)和接口(Interface);二、存储双雄:栈和堆  2.1栈 

  • Uber无人车发生全球首例行人致死事件,自动驾驶技术信度或倒退10年?

    大数据文摘作品作者:Aileen、龙牧雪、魏子敏、云舟、小鱼自动驾驶技术再一次被推至了风口浪尖。当地时间3月18日晚10点,49岁的ElaineHerzberg被Uber无人驾驶测试车撞倒,抢救无效身亡。这是全球首例无人车致行人死亡事件,其处理结果必然会对全球无人车进程及相关规范制定产生不可估量的影响。悲观声音甚至称,“它严重打击了消费者对技术的信心,(民众信度)可能会因此后退了几年甚至几十年。”让我们先来重现一下悲剧发生的现场:美国西部时间3月18日晚10点,亚利桑那州坦佩市,49岁的ElaineHerzberg在人行横道外横穿马路,随即被正在往北行驶的Uber无人驾驶测试车撞倒。这名女子被送往医院,但因伤势严重而身亡。坦佩警方证实,事故发生时,汽车确实处于自动驾驶模式,车后座还坐着一位安全驾驶员。这是一辆沃尔沃XC90SUV,被Uber改装,车顶配备有激光雷达和摄像头等设备。Uber发言人证实了这件事的发生:“我们正在与地方当局进行全面合作,调查这起事件。”此次发生事故的汽车来自Uber亚利桑那州技术测试中心。事故发生后,Uber已暂了在坦佩、匹兹堡、旧金山和多伦多等城市进行的无人

  • Flume+Kafka整合

    脚本生产数据---->flume采集数据----->kafka消费数据------->storm集群处理数据   日志文件使用log4j生成,滚动生成!   当前正在写入的文件在满足一定的数量阈值之后,需要重命名!!!    flume+Kafka整合步骤及相关配置:(先安装好zookeeper集群和Kafka集群) 配置flume: 1、下载flume 2、解压flume安装包   cd /export/servers/   tar -zxvf apache-flume-1.6.0-bin.tar.gz   ln -s apache-flume-1.6.0-bin flume 3、创建flume配置文件   cd /export/servers/flume/conf/   mkdir myconf   vi exec.conf   输入一下内容:   a1.sources=r1   a1.channels=c1   a1.sinks=k

  • 练习几种常见的排序算法来回顾之前学的控制语句和类,方法的创建和使用

    1以为自己会结果调试了半天的冒泡排序。。。。。 classbubbleSort{ voidsort(int[]arr){ for(intx=0;x<arr.length-1;x++){ for(inty=0;y<arr.length-1-x;y++){ if(arr[y]>arr[y+1]){ inttemp=arr[y]; arr[y]=arr[y+1]; arr[y+1]=temp; } } } sop(arr); } voidsop(int[]arr){ System.out.print("["); for(intx=0;x<arr.length;x++){ if(x!=arr.length-1){ System.out.print(arr[x]+","); }else{ System.out.print(arr[x]+"]"); } } System.out.println(""); } } publicclassMa

  • CAD二次开发---导入外部文件中的块并输出预览图形(五)

    思路: 1)首先要定义一个数据库对象来表示包含块的文件,改数据库对象会被加载到内存中,但不会被显示在CAD窗口中。   2)调用Database类的ReadDwgFile函数将外部文件DWG文件读入到新创建的数据库对象中。   3)最后调用Database类的WblockCloneObjects函数将外部的DWG文件中块对象复制到当前数据库中。   1///<summary> 2///外部文件导入块, 3///</summary> 4///<paramname="desdb">目标数据库</param> 5///<paramname="sourceFileName">完整的外部文件名</param> 6publicstaticvoidImportBlocksFrmDwg(thisDatabasedesdb,stringsourceFileName) 7{ 8//publicDatabase(boolbuildDefaultDrawing,boolnoDocument); 9Data

  • Block 与 delegate

      代理设计模式对于iOS开发的人来说肯定很熟悉了,代理delegate就是委托另一个对象来帮忙完成一件事情,为什么要委托别人来做呢,这其实是MVC设计模式中的模块分工问题,例如View对象它只负责显示界面,而不需要进行数据的管理,数据的管理和逻辑是Controller的责任,所以此时View就应该将这个功能委托给Controller去实现,当然你作为码农强行让View处理数据逻辑的任务,也不是不行,只是这就违背了MVC设计模式,项目小还好,随着功能的扩展,我们就会发现越写越难写;还有一种情况,就是这件事情做不到,只能委托给其他对象来做了,下面的例子中我会说明这种情况。 下面的代码我想实现一个简单的功能,场景描述如下:TableView上面有多个CustomTableViewCell,cell上面显示的是文字信息和一个详情Button,点击button以后push到一个新的页面。为什么说这个场景用到了代理delegate?因为button是在自定义的CustomTableViewCell上面,而cell没有能力实现push的功能,因为push到新页面的代码是这样的, [sel

  • [Docker] 使用ubuntu涉及时区问题

    不多说,以下Dockerfile会报错 FROMubuntu:latest RUNapt-getupdate&&apt-getinstall-y\ ssh\ build-essential\ gcc\ g++\ gdb\ clang\ cmake\ rsync\ tar\ python\ vim\ automake\ openssh-client\ openssh-server\ &&apt-getclean RUNPermitRootLoginyes\ &&UsePAMno RUNpasswdroot COPYentrypoint.sh/sbin RUNchmod+x/sbin/entrypoint.sh ENTRYPOINT["/sbin/entrypoint.sh"]复制 会卡在这里 Preparingtounpack.../tzdata_2018i-0ubuntu0.18.04_all.deb... Unpackingtzdata(2018i-0ubuntu0.18.04)... Settinguptzdata(20

  • 页面静态化

    目录页面静态化什么是页面静态化为什么要使用网页静态化技术Freemarker什么是Freemarker优点使用场景原则运行过程(生成原理图)模板数据模板文件中四种元素入门程序1.创建Maven工程2.引入pom依赖3.创建模板文件MyFreemark.ftl4.生成文件使用步骤示例代码FTL指令assign指令list指令if指令include指令内建函数运算符项目生成静态页面创建页面service_page(web)工程在pom中引入pom依赖引入配置文件spring/applicationContext-service.xmlweb.xml根据商品ID和数据生成静态页面 页面静态化 什么是页面静态化 将动态页面转化成静态的html,降低与数据库的交互次数,提高页面的访问速度 就是服务器在请求来之前把已经固定好的东西先编译好了,等请求来了再动态的填数据,不要等请求来了什么都没做忙得半死 利用第三方提供的模板引擎,生成对应的html 常用的页面静态化技术有thymeleaf、freemarker、Velocity 为什么要使用网页静态化技术 网页静态化技术和缓存技术的共同点都是为

  • HTML5 2D平台游戏开发#8指令技

      一般在动作游戏中,玩家可以通过对输入设备输入一系列的指令让角色完成某个或多个特定的动作。以格斗游戏《拳皇》为例,键入↓↘→↘↓↙←+AorC可以触发IORI的必杀技八稚女: 通过一系列输入最终让角色完成某个动作,就是指令技。其原理是通过将玩家的键入与指令技列表中的键位进行比对,如果一致,就匹配成功。以下是JavaScript的简单实现: classInstruct{ constructor(callback){ this.instructs={}; this.MAX_INTERVAL=250;//超时时间 this.interval=0;//上一次输入的时间 this.pressedKeys=[];//记录输入 this.callback=callback; window.addEventListener('keydown',this.onKeyDown.bind(this)); } //注册指令 registerinstruct(instructName,instructKeys){ if(this.instructs[instru

  • 2017-2018-1 学号20155311 《信息安全系统设计基础》第11周学习总结

    2017-2018-1学号20155311《信息安全系统设计基础》第11周学习总结 教材学习内容总结 第九章虚拟存储器 为了更加有效地管理存储器并且少出错,现代系统提供了一种对主存的抽象概念,叫做虚拟存储器(VM)。虚拟存储器是硬件异常、硬件地址翻译、主存、磁盘文件和内核软件的完美交互,它为每个进程提供了一个大的、一致的和私有的地址空间。通过一个很清晰的机制,虚拟存储器提供了三个重要的能力: 1)它将主存看成是一个存储在磁盘上的地址空间同,主存中只保存活动区域,并根据需要在磁盘和主存之间来回传送数据,通过这种方式,它高效地使用了主存。 2)它为每个进程提供了一致的地址空间,从而简化了存储器管理。 3)它保护了每个进程的地址空间不被其他进程破坏。 9.1物理和虚拟寻址 当CPU执行这条加载指令时,它会生成一个有效物理地址,通过存储器总线,把它传递给主存。主存取出从物理地址4处开始的4字节的字,并将它返回给CPU,CPU会将它存放在一个寄存器里。早期的PC使用物理寻址,而且诸如数字信号处理器、嵌入式微控制器以及Cray超级计算机这样的系统仍然继续使用这种寻址方式。 9.2地址空间

  • 一句话的设计模式

    如题,实际上,我想这是很困难的。 除非——只是为了给自己做一个提醒,能够看一眼就快速回想起该设计模式的种种记忆。 下列是我之前在学习《大话设计模式》时做的笔记总结,当中有部分措辞来自其作者程杰。(非常感谢他为神秘的设计模式搭建了如此平滑的学习通道) 1.创建型: (1)单例:只需一个实例时考虑。 (2)工厂方法:一般先用工厂方法解决对象创建问题。 (3)抽象工厂:当工厂方法无法满足多系列问题时,再重构为抽象工厂。 (4)建造者:多个部件的建造实现相同,只是所需部件、建造顺序不同时考虑。 (5)原型:在初始化信息不发生变化时考虑。 2.结构型: (1)适配器:让接口不相容的类能协同工作。(亡羊补牢) (2)装饰:动态增加单个对象的额外职责,比生成子类更灵活。 (3)桥接:使继承关系更改为组合关系,使两者可独立变化。(未雨绸缪) (4)组合:用树状结构表示“整体-部分”的层次关系,使单个对象(叶节点)与组合对象(枝节点)的使用具有一致性。 (5)享元:为运用共享技术,支持大量细粒度对象,节省开销。 (6)代理:控制对单个对象的访问。 (7)外观:子系统的高层接口,避免两个类直接关系的第三者

  • OpenCV图像载入、显示和输出到文件以及滑块的使用

    图像载入 imread()函数 Matimread(conststring&filename,intflags=1); 复制 第一个参数为文件名 第二个参数为载入标识 flags>0返回一个3通道的彩色图像 flags=0返回灰度图像 flags<0返回包含Alpha通道的加载图像 若要载入最真实无损的源图像,可flags=2||flags=4 imshow()函数 voidimshow(conststring&winname,InputArraymat); 复制 第一个参数:conststring&类型的winname,填需要显示的窗口标识名称。 第二个参数:InputArray类型的mat,填写要显示的图像 namedWindow函数 voidnamedWindow(conststring&winname,intflags=WINDOW_AUTOSIZE) 第一个参数,conststring&类型的name,填写被用做窗口的标识符的窗口名称。 第二个参数,int类型的flags,窗口的标识,默认为WINDOW_AUTOS

  • 选择Netty作为基础通信框架 .

    在开始之前,我先讲一个亲身经历的故事:曾经有两个项目组同时用到了NIO编程技术,一个项目组选择自己开发NIO服务端,直接使用JDK原生的API,结果两个多月过去了,他们的NIO服务端始终无法稳定,问题频出。由于NIO通信是它们的核心组件之一,因此项目的进度受到了严重的影响。另一个项目组直接使用Netty作为NIO服务端,业务的定制开发工作量非常小,测试表明,功能和性能都完全达标,项目组几乎没有在NIO服务端上花费额外的时间和精力,项目进展也非常顺利。 这两个项目组的不同遭遇告诉我们:开发出高质量的NIO程序并不是一件简单的事情,除去NIO固有的复杂性和BUG不谈,作为一个NIO服务端,需要能够处理网络的闪断、客户端的重复接入、客户端的安全认证、消息的编解码、半包读写等情况,如果你没有足够的NIO编程经验积累,一个NIO框架的稳定往往需要半年甚至更长的时间。更为糟糕的是,一旦在生产环境中发生问题,往往会导致跨节点的服务调用中断,严重的可能会导致整个集群环境都不可用,需要重启服务器,这种非正常停机会带来巨大的损失。 从可维护性角度看,由于NIO采用了异步非阻塞编程模型,而且是一个I/O线程

相关推荐

推荐阅读