1.redis的优点和缺点
优点:
redis速度快是完全基于内存的使用C语言实现,网络层使用epoll解决高并发问题,单线程模型避免了不必要的上下文切换及竞争条件;
注意:单线程仅仅是说在网络请求这一模块上用一个线程处理客户端的请求,像持久化它就会重开一个线程/进程去进行处理
丰富的数据类型,Redis有8种数据类型,当然常用的主要是 String、Hash、List、Set、 SortSet 这5种类型,他们都是基于键值的方式组织数据。
缺点:
由于 Redis 是内存数据库,短时间内大量增加数据,可能导致内存不够用。
redis是单线程的,单台服务器无法充分利用多核服务器的CPU
Redis快的原因?
1、完全基于内存,绝大部分请求是纯粹的内存操作,非常快速。
2、数据结构简单,对数据操作也简单,Redis中的数据结构是专门进行设计的;
3、采用单线程,避免了不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而消耗 CPU;
4、使用多路I/O复用模型,非阻塞IO;
5、使用底层模型不同,它们之间底层实现方式以及与客户端之间通信的应用协议不一样,Redis直接自己构建了VM 机制 ,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求;
Redis支持的数据类型
String;Hash;List;Set;SortedSet
Redis过期策略和内存淘汰机制?
1、定期删除+惰性删除
定期删除:指的是redis默认是每隔100ms就随机抽取一些设置了过期时间的key,检查其是否过期,如果过期就删除
惰性删除:在你获取某个key的时候,redis会检查一下 ,这个key如果设置了过期时间那么是否过期了,如果过期了此时就会删除,不会给你返回任何东西
2、如果大量过期key堆积在内存里,导致redis内存块耗尽了,怎么办?
内存淘汰机制:
redis.conf中配置:
1# maxmemory-policy noeviction
noeviction:当内存使用达到阈值的时候,所有引起申请内存的命令会报错。
allkeys-lru:在主键空间中,优先移除最近未使用的key。
volatile-lru:在设置了过期时间的键空间中,优先移除最近未使用的key。
allkeys-random:在主键空间中,随机移除某个key。
volatile-random:在设置了过期时间的键空间中,随机移除某个key。
volatile-ttl:在设置了过期时间的键空间中,具有更早过期时间的key优先移除。
2.云计算的特点
1.超大规模
“云”具有相当的规模,Google云计算已经拥有100多万台服务器, Amazon、IBM、微软、Yahoo等的“云”均拥有几十万台服务器。企业私有云一般拥有数百上千台服务器。“云”能赋予用户前所未有的计算能力。
2.虚拟化
云计算支持用户在任意位置、使用各种终端获取应用服务。所请求的资源来自“云”,而不是固定的有形的实体。应用在“云”中某处运行,但实际上用户无需了解、也不用担心应用运行的具体位置。只需要一台笔记本电脑或者一部手机,就可以通过网络服务来实现我们需要的一切,甚至包括超级计算这样的任务。
3.高可靠性
“云”使用了数据多副本容错、计算节点同构可互换等措施来保障服务的高可靠性,使用云计算比使用本地计算机可靠。
4.通用性
云计算不针对特定的应用,在“云”的支撑下可以构造出千变万化的应用,同一个“云”可以同时支撑不同的应用运行。
5.高可扩展性
“云”的规模可以动态伸缩,满足应用和用户规模增长的需要。
6.按需服务
“云”是一个庞大的资源池,你可按需购买;云可以像自来水、电、煤气那样计费。
7.极其廉价
由于“云”的特殊容错措施可以采用极其廉价的节点来构成云,“云”的自动化集中式管理使大量企业无需负担日益高昂的数据中心管理成本,“云”的通用性使资源的利用率较之传统系统大幅提升,因此用户可以充分享受“云”的低成本优势,经常只要花费几百美元、几天时间就能完成以前需要数万美元、数月时间才能完成的任务。
8.潜在危险性
云计算服务除了提供计算服务外,还必然提供了存储服务。但是云计算服务当前垄断在私人机构(企业)手中,而他们仅仅能够提供商业信用。对于政府机构、商业机构(特别像银行这样持有敏感数据的商业机构)对于选择云计算服务应保持足够的警惕。
一旦商业用户大规模使用私人机构提供的云计算服务,无论其技术优势有多强,都不可避免地让这些私人机构以“数据(信息)”的重要性挟制整个社会。对于信息社会而言,“信息”是至关重要的。另一方面,云计算中的数据对于数据所有者以外的其他用户云计算用户是保密的,但是对于提供云计算的商业机构而言确实毫无秘密可言。
所有这些潜在的危险,是商业机构和政府机构选择云计算服务、特别是国外机构提供的云计算服务时,不得不考虑的一个重要的前提。
3.云计算的通俗易懂的目的是
云计算的最终目标是将计算、服务和应用作为一种公共设施提供给公众,使人们能够像使用水、电、煤气和电话那样使用计算机资源。
云计算模式即为电厂集中供电模式。在云计算模式下,用户的计算机会变的十分简单,或许不大的内存、不需要硬盘和各种应用软件,就可以满足我们的需求,因为用户的计算机除了通过浏览器给“云”发送指令和接受数据外基本上什么都不用做便可以使用云服务提供商的计算资源、存储空间和各种应用软件。这就像连接“显示器” 和“主机”的电线无限长,从而可以把显示器放在使用者的面前,而主机放在远到甚至计算机使用者本人也不知道的地方。云计算把连接“显示器”和“主机”的电线变成了网络,把“主机”变成云服务提供商的服务器集群。
在云计算环境下,用户的使用观念也会发生彻底的变化:从“购买产品”到“购买服务”转变,因为他们直接面对的将不再是复杂的硬件和软件,而是最终的服务。用户不需要拥有看得见、摸得着的硬件设施,也不需要为机房支付设备供电、空调制冷、专人维护等等费用,并且不需要等待漫长的供货周期、项目实施等冗长的时间,只需要把钱汇给云计算服务提供商,我们将会马上得到需要的服务。
4.云计算的主要服务形式和典型应用
云计算还处于萌芽阶段,有庞杂的各类厂商在开发不同的云计算服务。云计算的表现形式多种多样,简单的云计算在人们日常网络应用中随处可见,比如腾讯QQ空间提供的在线制作Flash图片,Google的搜索服务,Google
Doc, Google Apps等。目前,云计算的主要服务形式有:SaaS(Software as a Service),
PaaS(Platform as a Service), IaaS(Infrastructure as a Service)。
(1)软件即服务(SaaS)
SaaS服务提供商将应用软件统一部署在自己的服务器上,用户根据需求通过互联网向厂商订购应用软件服务,服务提供商根据客户所定软件的数量、时间的长短等因素收费,并且通过浏览器向客户提供软件的模式。这种服务模式的优势是,由服务提供商维护和管理软件、提供软件运行的硬件设施,用户只需拥有能够接入互联网的终端,即可随时随地使用软件。这种模式下,客户不再像传统模式那样花费大量资金在硬件、软件、维护人员,只需要支出一定的租赁服务费用,通过互联网就可以享受到相应的硬件、软件和维护服务,这是网络应用最具效益的营运模式。对于小型企业来说,SaaS是采用先进技术的最好途径。
以企业管理软件来说,SaaS模式的云计算ERP可以让客户根据并发用户数量、所用功能多少、数据存储容量、使用时间长短等因素不同组合按需支付服务费用,既不用支付软件许可费用,也不需要支付采购服务器等硬件设备费用,也不需要支付购买操作系统、数据库等平台软件费用,也不用承担软件项目定制、开发、实施费用,也不需要承担IT维护部门开支费用,实际上云计算ERP正是继承了开源ERP免许可费用只收服务费用的最重要特征,是突出了服务的ERP产品。
目前,Salesforce.com是提供这类服务最有名的公司,Google Doc, Google Apps和Zoho Office也属于这类服务。
(2)平台即服务(PaaS)
把开发环境作为一种服务来提供。这是一种分布式平台服务,厂商提供开发环境、服务器平台、硬件资源等服务给客户,用户在其平台基础上定制开发自己的应用程序并通过其服务器和互联网传递给其他客户。PaaS能够给企业或个人提供研发的中间件平台,提供应用程序开发、数据库、应用服务器、试验、托管及应用服务。
App Engine, Salesforce的force.com平台,八百客的800APP是PaaS的代表产品。以Google App
Engine为例,它是一个由python应用服务器群、BigTable数据库及GFS组成的平台,为开发者提供一体化主机服务器及可自动升级的在线应用服务。用户编写应用程序并在Google的基础架构上运行就可以为互联网用户提供服务,Google提供应用运行及维护所需要的平台资源。
(3)基础设施服务(IaaS)
IaaS即把厂商的由多台服务器组成的“云端”基础设施,作为计量服务提供给客户。它将内存、I/O设备、存储和计算能力整合成一个虚拟的资源池为整个业界提供所需要的存储资源和虚拟化服务器等服务。这是一种托管型硬件方式,用户付费使用厂商的硬件设施。例如Amazon
Web服务(AWS), IBM的BlueCloud等均是将基础设施作为服务出租。
IaaS的优点是用户只需低成本硬件,按需租用相应计算能力和存储能力,大大降低了用户在硬件上的开销。
目前,以Google云应用最具代表性,例如GoogleDocs、GoogleApps、Googlesites,云计算应用平台GoogleApp Engine。
GoogleDocs是最早推出的云计算应用,是软件即服务思想的典型应用。它是类似于微软的Office的在线办公软件。它可以处理和搜索文档、表格、幻灯片,并可以通过网络和他人分享并设置共享权限。Google文件是基于网络的文字处理和电子表格程序,可提高协作效率,多名用户可同时在线更改文件,并可以实时看到其他成员所作的编辑。用户只需一台接入互联网的计算机和可以使用Google文件的标准浏览器即可在线创建和管理、实时协作、权限管理、共享、搜索能力、修订历史记录功能,以及随时随地访问的特性,大大提高了文件操作的共享和协同能力。
GoogleAPPs是Google企业应用套件,使用户能够处理日渐庞大的信息量,随时随地保持联系,并可与其他同事、客户和合作伙伴进行沟通、共享和协作。它集成了Cmail、GoogleTalk、Google日历、GoogleDocs、以及最新推出的云应用GoogleSites、API扩展以及一些管理功能,包含了通信、协作与发布、管理服务三方面的应用,并且拥有着云计算的特性,能够更好的实现随时随地协同共享。另外,它还具有低成本的优势和托管的便捷,用户无需自己维护和管理搭建的协同共享平台。
Googlesites是Google最新发布的云计算应用,作为GoogleApps的一个组件出现。它是一个侧重于团队协作的网站编辑工具,可利用它创建一个各种类型的团队网站,通过Googlesites可将所有类型的文件包括文档、视频、相片、日历及附件等与好友、团队或整个网络分享。
AppEngine是Google在2008年4月发布的一个平台,使用户可以在Google的基础架构上开发和部署运行自己的应用程序。目前,Google
AppEngine支持Python语言和Java语言,每个Google
AppEngine应用程序可以使用达到500MB的持久存储空间及可支持每月500万综合浏览量的带宽和CPU。并且,Google
AppEngine应用程序易于构建和维护,并可根据用户的访问量和数据存储需要的增长轻松扩展。同时,用户的应用可以和Google的应用程序集成,Google
AppEngine还推出了软件开发套件(SDK),包括可以在用户本地计算机上模拟所有Google AppEngine服务的网络服务器应用程序。
云计算系统运用了许多技术,其中以编程模型、数据管理技术、数据存储技术、虚拟化技术、云计算平台管理技术最为关键。
(1)编程模型
MapReduce是Google开发的java、Python、C++编程模型,它是一种简化的分布式编程模型和高效的任务调度模型,用于大规模数据集(大于1TB)的并行运算。严格的编程模型使云计算环境下的编程十分简单。MapReduce模式的思想是将要执行的问题分解成Map(映射)和Reduce(化简)的方式,先通过Map程序将数据切割成不相关的区块,分配(调度)给大量计算机处理,达到分布式运算的效果,再通过Reduce程序将结果汇整输出。
(2) 海量数据分布存储技术
云计算系统由大量服务器组成,同时为大量用户服务,因此云计算系统采用分布式存储的方式存储数据,用冗余存储的方式保证数据的可靠性。云计算系统中广泛使用的数据存储系统是Google的GFS和Hadoop团队开发的GFS的开源实现HDFS。
GFS即Google文件系统(Google File System),是一个可扩展的分布式文件系统,用于大型的、分布式的、对大量数据进行访问的应用。GFS的设计思想不同于传统的文件系统,是针对大规模数据处理和Google应用特性而设计的。它运行于廉价的普通硬件上,但可以提供容错功能。它可以给大量的用户提供总体性能较高的服务。
一个GFS集群由一个主服务器(master)和大量的块服务器(chunkserver)构成,并被许多客户(Client)访问。主服务器存储文件系统所以的元数据,包括名字空间、访问控制信息、从文件到块的映射以及块的当前位置。它也控制系统范围的活动,如块租约(lease)管理,孤儿块的垃圾收集,块服务器间的块迁移。主服务器定期通过HeartBeat消息与每一个块服务器通信,给块服务器传递指令并收集它的状态。GFS中的文件被切分为64MB的块并以冗余存储,每份数据在系统中保存3个以上备份。
客户与主服务器的交换只限于对元数据的操作,所有数据方面的通信都直接和块服务器联系,这大大提高了系统的效率,防止主服务器负载过重。
(3) 海量数据管理技术
云计算需要对分布的、海量的数据进行处理、分析,因此,数据管理技术必需能够高效的管理大量的数据。云计算系统中的数据管理技术主要是Google的BT(BigTable)数据管理技术和Hadoop团队开发的开源数据管理模块HBase。
BT是建立在GFS, Scheduler, Lock Service和MapReduce之上的一个大型的分布式数据库,与传统的关系数据库不同,它把所有数据都作为对象来处理,形成一个巨大的表格,用来分布存储大规模结构化数据。
Google的很多项目使用BT来存储数据,包括网页查询,Google
earth和Google金融。这些应用程序对BT的要求各不相同:数据大小(从URL到网页到卫星图象)不同,反应速度不同(从后端的大批处理到实时数据服务)。对于不同的要求,BT都成功的提供了灵活高效的服务。
(4)虚拟化技术
通过虚拟化技术可实现软件应用与底层硬件相隔离,它包括将单个资源划分成多个虚拟资源的裂分模式,也包括将多个资源整合成一个虚拟资源的聚合模式。虚拟化技术根据对象可分成存储虚拟化、计算虚拟化、网络虚拟化等,计算虚拟化又分为系统级虚拟化、应用级虚拟化和桌面虚拟化。
(5)云计算平台管理技术
云计算资源规模庞大,服务器数量众多并分布在不同的地点,同时运行着数百种应用,如何有效的管理这些服务器,保证整个系统提供不间断的服务是巨大的挑战。
云计算系统的平台管理技术能够使大量的服务器协同工作,方便的进行业务部署和开通,快速发现和恢复系统故障,通过自动化、智能化的手段实现大规模系统的可靠运营。
6.元组的特性
元组: 不可变数据类型,没有增删改查,可以存储任意数据类型
从索引, 切片, 重复, 连接, 成员操作符以及for循环来看:
1) 索引与切片
2)重复与连接
3) 成员操作符
4) for循环
7.什么是框架?
框架是一个半成品,已经对基础的代码进行了封装并提供相应的API,开发者在使用框架是直接调用封装好的api可以省去很多代码编写,从而提高工作效率和开发速度。
框架定义
框架是一种经过校验、具有一定功能的半成品软件
经过校验:
指框架本身经过测试,且框架自身所具有的功能已经实现
具有一定功能:
指框架可以完成特定的功能,不同的框架功能不同
半成品软件:
指框架自身是一个软件,但是该软件无法直接运行,需要配合其他的程序才可以完成指定的工作
框架的工作模式:
开发工程师建立在框架的基础之上完成开发者完成部分加框架自身完成部分组成一个完整的产品
8.数据库查询的几种方式
1.增加内容
insert into Info values(‘p001’,‘张三’,true,‘n001’,‘1989-2-3’) insert into Info (code,name) values('p002','李四');
2.删除数据
delete from Info where Code ='p002'
3.修改数据
update Info set Name='李四' where Code='p001'
4.查询数据
(1)简单查询
select * from Info select Code,Name from Info select Code as‘代号’,Name as‘姓名’from Info查询指定列且替换了列名
(2)条件查询 select *from Car where Code=‘c002’ true
sekect * from Car where brand=‘b001’ and Powers=130 多条件查询 或者用or and是并且
(3)模糊查询 select * from Car where Name like '%奥迪%' %代表任意多个字符 _代表一个任意的字符
(4)排序查询 select * from Car order by Powers asc升序 desce降序
默认升序,所以可以不写asc(asc,desc) select * from Car order by brand asc, Powers
desc asc可不写 双列排序 (5)范围查询 select * from Car where Price>=40 and
Price<=60 select * from Car where Price between 40 and 60
(6)离散查询 select * from Car where Code in ('c001',‘c003’,‘c005’,'c007')
select * from Car where Code not in('c001',‘c003’,‘c005’,'c007')
(7)聚合函数 select sum(Price)from Car #查询所有价格之和 素描()求和 不可用字符串 select count(*)from Car #查询数据总条数 *可以替为列名 可用字符串
select max(Price) from Car #查询最大值 可用于字符串 select min(Price) from Car
#查询最小值 可用于字符串 select avg (Price) from Car #查询平均值 不可以用字符串 (8)分页查询条
#每页显示5条数据,取第2页的数据 select * from Car limit (n-1)*5,5 (9)去重查询 select
distinct Brand from Car 去掉brand列的重复 (10)分组查询 select count(*) ,from Car
group by Brand 分组查数量 select * from Car group by Brand having count
(*)>3#分组之后根据条件查询使用having, 分组之后不使用where。使用where要写在group前面
9.视频通话中,信息传递经过了哪些过程和设备?
视频电话设备是由电话机、摄像头、显示屏组成的。视频电话的话机和普通电话机一样是用来通话的;摄像头的功能,是摄取本方用户的图像传送给对方;显示屏是接收对方的图像信号并在屏上显示对方的图像。
信息传递过程如下:
声音信号经过麦克风这样的传感器转换成音频电流,经过放大之后,以调频方式调制在载波上;视频信号以正交调幅方式调制在载波上;已调制信号经过信号合成,一同发射出去。动态图像视频电话的图像信号因包含的信息量大,所占的频带宽,不能直接在用户线上传输,需要把原有的图像信号数字化,变为数字图像信号,而后还必需采用频带压缩技术,对数字图像信号进行“压缩”,使之所占的频带变窄,这样才可在用户线上传输。动态图像视频电话的信号因是数字信号,所以要在数字网中进行传输。视频电话还可以加入录像设备,就像录音电话一样,把图像录制下来,以便保留。
接受方,采用相应的频率分离手段,以及不同的解调手段还原音频信号和视频信号。
发出和接受的过程就涉及到编解码芯片,编解码芯片技术是视频电话发展的关键,语音和图像在传输时,必须经过压缩编码-解码的过程,而芯片正是承担着编码解码的重任,只有芯片在输出端将语音和图像压缩并编译成适合通讯线路传输的特殊代码,同时在接收端将特殊代码转化成人们能理解的声音和图像,才能构成完整的传输过程,让通话双方实现声情并茂的交流。
而编解码或者就涉及到不同设备之间的协议标准,没有统一的行业标准,各种视频电话不能互通,影响了视频电话市场的拓展。
10.ORM常用字段以及查询
ORM常用字段及参数
我们在使用Django框架开发web应用的过程中,不可避免地会涉及到数据的管理操作(如增、删、改、查),而一旦谈到数据的管理操作,就需要用到数据库管理软件,例如mysql、oracle、Microsoft SQL Server等。
为了解决上述问题,django引入了ORM的概念
ORM全称Object Relational Mapping,即对象关系映射
是在pymysql之上又进行了一层封装,对于数据的操作,我们无需再去编写原生sql
取而代之的是基于面向对象的思想去编写类、对象、调用相应的方法等,ORM会将其转换/映射成原生SQL然后交给pymysql执行
ORM常用字段
AutoField
int自增列,必须填入参数 primary_key=True。当model中如果没有自增列,则自动会创建一个列名为id的列。
IntegerField
一个整数类型,范围在 -2147483648 to 2147483647。(一般不用它来存手机号(位数也不够),直接用字符串存,)
CharField
字符类型,必须提供max_length参数, max_length表示字符长度。
这里需要知道的是Django中的CharField对应的MySQL数据库中的varchar类型,没有设置对应char类型的字段
DateField
日期字段,日期格式 YYYY-MM-DD,相当于Python中的datetime.date()实例。
DateTimeField
日期时间字段,格式 YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ],相当于Python中的datetime.datetime()实例。
BooleanField()
给字段传布尔值,会对应成0/1
TextField()
文本类型
FileField()
字符串,路径保存在数据库,文件上传到指定目录,只存文件路径
upload_to = '指定文件路径'
给该字段传文件对象 文件会自动保存到upload_to指定的文件夹下,然后将路径保存到数据库
DecimalField(Field)
1、10进制小数 2、参数: max_digits,小数总长度 decimal_places,小数位长度
字段合集(争取记忆)