c语言中没有I/O语句,I/O操作由函数实现
#include <stdio.h
格式:putchar(c)
参数:c为字符常量\变量\表达式
功能:把字符c输出到显示器上
返回值:正常,为显示的代码值ASCII码
#include <stdio.h>
int main()
{
int a = 65;
char ch = 'B';
putchar(a); // int值 -- 显示A
putchar('\n'); // 字符 -- 显示换行
putchar(ch); // 字符 -- 显示B
return 0;
}
printf("格式控制串",输出表)
功能:按照指定格式向显示器输出数据
输出表:要输出的数据
格式控制串:包含两种信息
格式说明:%[修饰符]格式字符,用于指定输出的格式
普通字符:原样输出
#include <stdio.h>
int main()
{
int a = 255;
char ch = 'C';
char s[] = 'sdfsdf';
float fl = 567.534;
printf("%d %o %x\n",a,a,a);
printf("%c %d\n",ch,ch); // %c 打印字符 %d 打印字符ascii码值
printf("%s\n",s);
printf("%f %e %g\n",fl,fl,fl);
printf("%%"); // 打印一个%
return 0;
}
m.n
int a = 1234;
float b = 123.456;
char ch = 'a';
printf("%8d,%2d\n",a,a); // 8d指的是数据位宽m ,不够左侧补空格
// 位宽 < 实际位数,原样输出
//
printf("%8f,%8.1f,%.2f\n",f,f); // .n表示保留小数
printf("%3c",ch); // 补充空格
char s[] = "Hello,World!";
printf("%15s\n",s); // 字符串打印15个字符长度,不够左侧补空格
printf("%15.5s\n",s); // 要打印15个,打印5个字符
printf("%2.5s\n",s); // 2 < 12(实际长度,原样输出),打印5个字符
printf(".5s\n",s); //
0 +
0 -- 用0填充
+ -- 整数显示加号
int a = 1234;
float b = 123.456;
char ch = 'a';
printf("%08d %0+8d\n",a); // 8d指的是数据位宽m ,不够左侧补0
// + 表示正数的时候添加加号
printf(%08.1f\n",f); //
printf("%3c",ch); // 补充空格
getchar()
--格式:getchar()
--功能:从键盘读取一个字符
--返回值:正常,返回读取的ASCII码值;出错或者结束输入,返回-1(用int接收)
ctrl d返回-1,表示结束输入
#include <stdio.h>
int main()
{
int ch;
printf("input:")
ch = getchar();
putchar(ch); // 输入什么字符显示什么字符
putchar('\n');
printf("ch = %d\n",ch); // 结束键盘输入的时候显示-1
return 0;
}
scanf("格式控制串,地址表")
功能:按照指定格式从键盘读入数据,存入地址表指定存储单元中,并按回车键结束
格式控制串可以表示输入的是多少进制的数
返回值:正常,返回输入数据的个数
地址表:变量的地址,常用取地址运算符&
#include <stdio.h>
int main()
{
int ch,n;
printf("Enter a character:");
n = scanf("%d",&ch); // 输入65
printf("%d\n",ch); // 打印65
printf("n = %d\n",n); // n小于输入变量的个数表示输入失败
return 0;
}
修饰符
#include <stdio.h>
int main()
{
int ch,n;
// long m;
int y,m,d
printf("Enter a character:");
n = scanf("%x %ld",&ch,&m); // 输入 21 5
// printf("n = %d\n, %d %ld",n,ch,m); //2 33 5
scanf("%4d%2d%2d",&y,&m,&d); // 20221213
// 4d 表示位宽 -- 自动将输入的前四位给y
printf("%d %d %\n",y,m,d);// 2022 12 13
return 0;
}
* -- 抑制符,输入的值不赋值给变量
scanf("%2d%*3d%2d",&a,&b); // 1234567 a = 12 b = 67 中间取到值不给变量
// 字符型变量连续输入
#include <stdio.h>
int main()
{
char y,m,d;
scanf("%c%c%c".&y,&m,&d);
printf("%d:%d:%d\n",y,m,d);
// 输入abc 打印97:98:99
// a b c 97:32:32
// 字符型变量在进行连续输入的时候,空格和转义字符是有效字符
// 数值型进行连续输入的时候空格不是有效字符
return 0;
}
总结:整型数据输入的时候,遇到空格\会出\TAB都认为是数据结束,此外,非法输入(整型输入字母)和遇到宽度也表示结束
scanf("%d%c%f",&a,&b,&c);
输入:1234a123o.26
a = 1234 b = 'a' c = 123
int a ;
char x;
printf(">");
scanf("%d",&a);
scanf("%c",&x);
printf("%d:%c:%d\n",a,x,x); // 输入5,然后回车,打印 5:回车:10
// 回车会赋值个x
// 方法1:使用getchar清除
int x;
char ch;
scanf("%d",&x);
getchar()
ch = getchar();
printf("x = %d,ch = %d\n",x,ch);
// 方法2:使用空格%c或者%*c接收字符型数据
int x;
char ch;
scanf("%d",&x);
// scanf(" %c",&ch);
scanf("%*c",ch);
printf("x = %d,ch = %d\n");
gets
格式:char * gets(char *s)
功能:从键盘输入一个以回车结束的字符串放入字符数组中,并且自动加入'\0'
说明1:输入串长度应小于字符数组长度
说明2:与scanf函数不同,gets函数并不以空格作为字符串输入结束的标志
char s[5]; // 定义长度为5的字符数组用于存储字符串,只能存储4个
gets(s); // 输入字符串
printf("%s\n",s) // 打印字符串
// 用户输入字符串的长度超过字符数组的长度,会报错
// 这个函数是有风险的
char s[5];
scanf("%s",s); // 空格会作为分割符结束,可以用循环,使用%c存储空格
printf("%s\n",s);
char s[5];
gets(s);
printf("s:%s",s); // printf() 默认不换行
printf("***\n");
puts("$$$$"); // 自动换行
puts(s);
puts
格式:int puts(const char *s)
功能:向显示器输出字符串(输出完,换行)
说明:字符数组必须以'\0'结束
#include <stdio.h>
#include <math.h>
int main()
{
int a,b,c;
int delt;
float result1,result2;
scanf("%d%d%d",a,b,c);
delt = b*b-4*a*c;
result1 = [(-b)+sqrt(delt)]/(2*a);
result2 = [(-b)-sqrt(delt)]/(2*a);
printf("result1 = %f,result2 = %f\n",result1,result2);
return 0;
}
大家好,又见面了,我是你们的朋友全栈君。Pythonformat()函数的用法复制自博主chunlaipiupiupiu的博客,如有侵权,请联系删除python中format函数用于字符串的格式化通过关键字1print('{名字}今天{动作}'.format(名字='陈某某',动作='拍视频'))#通过关键字 2grade={'name':'陈某某','fenshu':'59'} 3print('{name}电工考了{fenshu}'.format(**grade))#通过关键字,可用字典当关键字传入值时,在字典前加**即可复制通过位置1print('{1}今天{0}'.format('拍视频','陈某某'))#通过位置 2print('{0}今天{1}'.format('陈某某','拍视频')复制填充和对齐^
整理|郑丽媛、出品|CSDN(ID:CSDNnews) 对许多不擅长英语的编程萌新来说,乍一看代码中各类英文关键字、变量名、函数名等,难免十分头大,甚至还会对自己能否学好编程提出质疑。如此心境下,他们脑海中往往会冒出一种想法:“要是可以用中文编程就好了。”你还别说,最近真有人落实了这个想法:一位湖南长沙的软件工程师Jason.shao用中文编写了一个操作系统,并自信道:“火龙操作系统是全宇宙首个采用中文编写的操作系统”!自创了甲、乙、丙语言既然要开发操作系统,编程语言必不可少——为了更好地“砍柴”,Jason.shao自然要先“磨刀”,为此他创建了三种编程语言,取名还透着一分随性:甲语言:一门对机器码助记语言,让人更容易理解的语言,发明目的是为了开发操作系统。乙语言:一门对甲语言进行结构化过程化的语言,发明目的是为了提高开发效率。丙语言:一门面向对象的高级语言,可以理解为把任何东西看做是一个对象,这个对象应该有什么样的属性,面向对象语言更容易用计算机去描绘这个世界。“刀”磨好了之后,Jason.shao便开始设计其“全宇宙首个采用中文编写的操作系统”。据项目介绍,火龙操作系统使用其自创
Update!H5支持摘要折叠,体验更佳!点击阅读原文访问arxivdaily.com,涵盖CS|物理|数学|经济|统计|金融|生物|电气领域,更有搜索、收藏等功能!cs.CV方向,今日共计70篇Transformer(4篇)【1】Tensor-to-Image:Image-to-ImageTranslationwithVisionTransformers 标题:张量到图像:使用视觉变换器进行图像到图像的转换 链接:https://arxiv.org/abs/2110.08037 作者:YiğitGündüç 摘要:Transformer自首次推出以来就受到了广泛的关注,并有着广泛的应用。Transformer开始接管深度学习的所有领域,视觉Transformer论文也证明了它们可以用于计算机视觉任务。在本文中,我们使用了一个基于视觉转换器的自定义设计模型,即张量到图像,用于图像到图像的转换。在自我关注的帮助下,我们的模型能够在不做任何修改的情况下推广并应用于不同的问题。 摘要:Transformersgainhugeattentionsincetheyarefirstintroduc
使用stop方法 方法stop()已经被作废,因为如果强制让线程停止则有可能使一些清理性的工作得不到完成。就象突然关闭计算机电源,而不是按正常程序关机一样,可能会产生不可预料的结果。另外一个情况就是对锁定的对象进行了“解锁”,导致数据得不到同步的处理,出现数据不一致的问题(比如一个线程正在修改数据,刚改了一半被stop了,那么就会出现数据不一致)。暂停线程 暂停线程意味着此线程还可以恢复运行。在Java多线程中,不推荐使用suspend()方法暂停线程,使用resume()方法恢复线程的执行,原因如下: 假设两个线程A、B和一个资源P,B锁定了资源P,A调用suspend()方法中断线程B,但同时A又想获取资源P。对任何线程来说,如果它们想中断目标线程,同时又试图使用这个线程锁定的资源,就会造成死锁,也就是暂停未释放锁。但如果暂停释放了锁,又可能出现不同步问题,比如线程B正在修改P中的数据,刚修改一半被suspend了,然后他释放了P的锁,A线程获得P会发现P中的数据不一致。 如何正确的挂起一个线程:可以在Thread实例外设置一个volatile修饰的boolean变量,指出
作者:HelloGitHub-小鱼干安全问题一直是GitHub的一大热点,因为数据安全问题诞生的各类自托管服务便是。而本周周榜上的2个和安全主题相关的项目,有些不同。mimikatz是个老项目了,很多“黑客”用它从内存中提取明文密码、哈希、PIN码和kerberos凭据(ticket),而同样是“安全主题”的scorecard更像是个守护者,它从代码、社区等多个层面帮你检测开源项目的安全健康度。当然,命令行文件共享工具transfer.sh的安全点便是支持加密传输数据。以下内容摘录自微博@HelloGitHub的GitHubTrending及HackerNews热帖(简称HN热帖),选项标准:新发布|实用|有趣,根据项目release时间分类,发布时间不超过14day的项目会标注New,无该标志则说明项目release超过半月。由于本文篇幅有限,还有部分项目未能在本文展示,望周知?1.本周特推1.1不只是Netflix:Fakeflix本周star增长数:1,500+New如果你想要使用Redux构建一个中等复杂度的Web应用,不妨试试Fakeflix,项目作者拿它练手,复制了Netf
##关于我[作者博客|文章首发](http://www.zhouhuibo.club)过去.net最有名望的ServiceStack.Redis早已沦为商业用途,在.NETCore中使用只能充值。后来居上的StackExchange.Redis虽然能用,但是之前出现的各种Timeout错误也是让人很无语,所以也不作为使用的首选。经过网上的一些整理和推荐,发现了一款开源库CSReidsCore。CSRedisCore是国人开源的一套Redis操作库,现在最新版本已经V3.6.5,经过几个实际公司项目的使用情况来看,还没有出现什么大的问题,本文主要介绍一下在使用这个库的过程中的一些自己的想法。##特征-CSRedisClient和RedisHelper保持所有方法名称与redis-cli一致-支持地理类型命令(需要redis-server3.2或更高版本)-支持Redis集群redis-trib.rb-支持RedisSentinel和主从-支持流类型命令(需要redis-server5.0及更高版本)##官方参数|范围|默认|解释||-----------------|------|---
COCO官方:地址COCO2017数据集简介:CoCo数据集一共有五种标注类型,分别(5种类型):目标检测,关键点检测,素材分割,全景分割,图像说明标注信息使用JSON格式存储(annotations),预处理通过COCOAPI用于访问和操作所有“标注”COCO2017下载:地址Images:2017Trainimages[118K/18GB]:下载2017Valimages[5K/1GB]:下载2017Testimages[41K/6GB]:下载2017Unlabeledimages[123K/19GB]:下载Annotations:2017annotations_trainval2017[241MB]:下载2017StuffTrain/Valannotations[1.1GB]:下载2017TestingImageinfo[1MB]:下载2017UnlabeledImageinfo[4MB]:下载
作者:上帝爱吃苹果目录ConcurrentHashMap的简介get操作源码volatile登场是加在数组上的volatile吗?用volatile修饰的Node总结我们知道,ConcurrentHashmap(1.8)这个并发集合框架是线程安全的,当你看到源码的get操作时,会发现get操作全程是没有加任何锁的,这也是这篇博文讨论的问题——为什么它不需要加锁呢?ConcurrentHashMap的简介我想有基础的同学知道在jdk1.7中是采用Segment+HashEntry+ReentrantLock的方式进行实现的,而1.8中放弃了Segment臃肿的设计,取而代之的是采用Node+CAS+Synchronized来保证并发安全进行实现。JDK1.8的实现降低锁的粒度,JDK1.7版本锁的粒度是基于Segment的,包含多个HashEntry,而JDK1.8锁的粒度就是HashEntry(首节点)JDK1.8版本的数据结构变得更加简单,使得操作也更加清晰流畅,因为已经使用synchronized来进行同步,所以不需要分段锁的概念,也就不需要Segment这种数据结构了,由于粒度的
【新智元导读】今日,新智元重磅独家发布《2018华人AI青年学术影响力百人名单》,评选出100位45周岁及以下的华人AI学者。其中,超过8成的华人AI学者来自学界,供职于清华大学的学者最多,占比达15%。入围名单的企业界华人学者中,有9位学者加入了AI创业大军,成为初创公司的创始人或首席科学家。 最新华人AI青年学术影响力百人榜公布! 今年3月,人工智能连续第三年写入总理政府工作报告,在总理的工作报告中,其中“关键核心技术”出现了3次。报告明确指出要提升科技支撑能力,加大基础研究和应用基础研究支持力度,强化原始创新,加强关键核心技术攻关。 科技创新本质上是人的创造性活动,而科研人员正是这场创造性活动的核心与基石。当前,中国AI将以更加突飞的姿态成为领头雁,关键核心技术面临新突破。在此过程中,华人学者正在成为这场智能革命的中坚力量,中国AI将由此获得持续爆发的驱动力。 作为“智能+”中国主平台,新智元不断探索并关注人工智能在世界范围内的应用和创新,是最新AI技术的记录者和传播者。 为推动AI科研发展、助力华人AI学术创新,新智元权威发布2018年“45岁及以下华人AI学术影响力百人”名单
AndroidMotionEvent中getX()与getRawX()都是获取屏幕坐标(横),但二者又有区别 getX() : 是获取相对当前控件(View)的坐标 getRawX() : 是获取相对显示屏幕左上角的坐标演示示例代码Java代码:publicclassMainActivityextendsActivityimplementsOnTouchListener{ privateButtonbtn; privateintx=0,y=0; privateintrawX=0,rawY=0; @Override protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main); btn=(Button)findViewById(R.id.btn); btn.setOnTouchListener(this); } @Override publicbooleanonTouch(Vi
对于Activity,在startActivity或finish后调用overridePendingTransition(R.anim.activity_in,R.anim.activity_out)复制对于Fragment:supportFragmentManager.beginTransaction().setCustomAnimations(R.anim.fragment_enter,R.anim.fragment_exit)复制ActivityOptions从Android5.0之后,可以用ActivityOptions来实现,ActivityOptionsCompat是supportv4的兼容实现,可以支持到4.1(SDK16),它有几个make开头的方法makeCustomAnimation(Contextcontext,intenterResId,intexitResId)makeScaleUpAnimation(Viewsource,intstartX,intstartY,intstartWidth,intstartHeight)makeThumbnailScaleUp
大数据文摘出品编译:茶西、DonFJ、CoolBoy程序猿为何痴迷于用人工智能攻克各种游戏?是对网瘾少年的嘲讽,还是对科技未来的探索?这一切的背后,是人性的扭曲还是道德的沦丧?敬请关注本期的走进大数据文摘!8月5日,人工智能系统OpenAIFive迎战了由5名专业电子竞技玩家组成的队伍,这次的战场是Dota2,这个游戏需要快速的反应力,渊博的游戏策略知识,更重要的是团队协作。在这个电子游戏中,两支五人队伍会被安排在竞技场的两端,与对方战斗并利用物理或者法术攻击摧毁对方的营地。这是当今最赚钱的电子竞技项目之一,今年最大规模锦标赛的奖池已经积累超过2300万美金。研究人员开发的软件想要赢过经过千锤百炼的职业选手,就跟让机器人学着在迈克尔∙乔丹(MichaelJordan)头上扣篮一样难。游戏是一个让我们这些没有博士学位的人了解人工智能研究已经到达何种程度的好方法:在复杂环境下,人工智能可以击败人类吗?我们知道IBM的“深蓝”在国际象棋比赛中击败了GarryKasparov,以及DeepMind的AlphaGo在围棋比赛中战胜李世石,这意味着什么——数十年来人类的练习与技巧被计算机打败了。除
引言 在现在的前端页面中,尤其是移动端,经常会需要将<header>或者是<footer>模块悬浮出来,跟随页面的滑动保持定位在页面的最上方或者是最下方,如下图所示。“回复主题”模块,就是跟随页面的浮动一直悬浮在页面的最下方,代码结构如下。1... 2<sectionclass='footer'> 3<divclass='reply-topic'>回复主题</div> 4</section> 5...复制实现这样的功能当然是利用position:fixed。但是,使用position:fixed有一个bug,以悬浮<footer>在最下方为例(悬浮<header>同理),当页面滑到最下方的时候,由于是fixed定位,脱离了正常文档流,导致会遮挡住一部分内容。如下所示:上面左边是有问题的显示,右边为正常显示。那么,如何解决这个问题呢?在此,我抛砖引玉提出三种我的看法,希望能有更好的方法。法一.Javasrript解决使用js解决,判定当滑动条滑到页面内容
Docker集群初探之:DockerSwarmcker技术大家都有所了解,单个Docker能发挥的作用毕竟有限,也不便于管理,所以Docker得组集群来使用才能发挥强大的技术优势。既然要组集群那就涉及诸如Docker的资源调度、管理等等一系列问题。目前涉及Docker集群的三个主要的技术无外乎Swarm、Kubernetes、Mesos三种。从本文开始作者将会一一实践这几种主要的Docker集群技术,话不多说,现在开始。注意:作者的kubernetes相关实践在此环境准备MacOSX10.13.2Docker17.09.1-ce-mac42(21090)virtualbox(虚拟集群中节点时需要)boot2dockerv1.8.0(在虚拟节点中起docker环境时需要)环境搭建节点规划如下:我们需要4个节点(1个master+3个slave),由于没有真实地4台物理机,所以下文中是靠docker-machine、virtualbox以及boot2docker来虚拟出4个独立IP地址的带docker环境的节点,大家注意!环境安装:Docker环境安装:Tips:以前Mac上一般是使用bo
大家好,又见面了,我是你们的朋友全栈君。 给定一个包含n个点m条边的有向图,并给定每条边的容量,边的容量非负。图中可能存在重边和自环。求从点S到点T的最大流。输入格式 第一行包含四个整数n,m,S,T。接下来m行,每行三个整数u,v,c,表示从点u到点v存在一条有向边,容量为c。点的编号从1到n。输出格式 输出点S到点T的最大流。如果从点S无法到达点T则输出0。数据范围 2≤n≤10000, 1≤m≤100000, 0≤c≤10000, S≠T输入样例: 71417 125 136 145 232 253 322 343 353 367 465 561 651 578 677 输出样例: 14复制#include<bits/stdc++.h> usingnamespacestd; constintN=1e4+10; constintM=2e5+10; constintINF=0x3f3f3f3f; intn,m,s,e; structEdge{ intv,w,next; }edge[M]; intd[N],q[N],cur[N]; inthh=0,tt=0; inthea
有时,一个app中,后台并没有提供页面中对应的信息接口,需要前端在页面跳转时把某些信息带入下一个页面,一般想到用url后带参数的方法,但是有时需要带的参数过长,就不适合用这个方法了,所以用sessionStorage或者localStorage可以解决这个问题。 自己写的一个简单的函数 functionsetSession(item,jsonData){ window.sessionStorage.setItem(item,JSON.stringify(jsonData)); }; functiongetSession(item){ returnJSON.parse(window.sessionStorage.getItem(item)); } functionremoveSession(item){ window.sessionStorage.removeItem(item); } 复制 另外,有时不要把sessionStorage中的数据弄得太复杂,一个json就可以了,最好不要json再套json,这样调用起来会非常繁琐,而且判断和管理控制起来也不方便。 还有,如果在s
目录 主要选项 还原流程 用法示例 参考 正文 之前的博文当中提到备份工具mydumper的使用,而软件包中还包含了与之对应的恢复工具myloader,本文就总结下myloader的用法。关于mydumper的安装与使用可以参考之前的博文:MySQLBackupmydumper。 查看myloader的版本信息: #myloader-V myloader0.9.5,builtagainstMySQL5.7.21-21 复制 回到顶部 主要选项 #myloader--help Usage: myloader[OPTION?]multi-threadedMySQLloader HelpOptions: -?,--helpShowhelpoptions ApplicationOptions: -d,--directoryDirectoryofthedumptoimport -q,--queries-per-transactionNumberofqueriespertransaction,default1000 -o,--overwrite-tablesDroptablesif
JavaScript基本概念(二)操作符和语句 目录 操作符 一元操作符 位操作符 布尔操作符 乘性操作符 其他操作符 语句部分 说起操作符,回忆下上一篇文章末尾说的话。 操作符 一元操作符 ++、--(前置和后置) 注意: 和其他操作符混合使用时候的优先级问题; 前置后置操作符的区别; 这4个操作符对任何值都适用包括对象和字符串、布尔值;(能转换为数字值的转换,对象则先调用valueOf()方法,看能不能转换为数字,不能的话再调用toString(),然后再转) +、-(正负操作符) 转换规则和上面两个操作符类似。 位操作符 ~按位非:结果就是返回数值的反码; &按位与:结果是将两个数值的每一位与; |按位或: 每一位都进行或操作; ^按位异或:每一位都进行按位异或操作; <<左移:将数值的所有位向左移动指定的位数,右侧补0填充空位; >>有符号右移:将数值的所有位向右移动,但保留符号位。用符号为填充空位; >>>无符号右移:将数值的所有位无符号向右移动,用0填充空位。 布尔操作符 !逻辑非适用于任何值(肯定有一
最近应团队要求,研究整理了下,mysql相关的优化,有些是根据实际java项目中碰到的情况经验之谈。欢迎讨论~ SQL语言是一种强大而且灵活的语言,在使用SQL语言来执行某个关系查询的时候,用户可以写出很多不同的SQL语句来获取相同的结果。也就是说,语法不同的SQL语句,有可能在语义上是完全相同的。但是尽管这些SQL语句最后都能返回同样的查询结果,它们执行所需要的时间却有可能差别很大。 一.优化目标 减少IO次数 IO永远是数据库最容易产生瓶颈的地方,这是由数据库的职责所决定的,大部分数据库操作中超过90%的时间都是IO操作所占用的,减少IO次数是SQL优化中需要第一优先考虑,当然,也是收效最明显的优化手段。 降低CPU计算 除了IO瓶颈之外,SQL优化中需要考虑的就是CPU运算量的优化了。orderby,groupby,distinct等操作都十分占用CPU资源(这些操作基本上都是CPU处理内存中的数据比较运算)。当我们的IO优化做到一定阶段之后,降低CPU计算也就成为了我们SQL优化的重要目标。 二.MySQL的
1.redis的设计与实现 2.图解http https:http+ssl https优点: 1.防止数据被窃听:数据明文。通过对称加密 2.防篡改:请求响应被修改。通过双向认证 3.防止被劫持:请求方伪装。通过双向认证 双向认证: 服务端_证书机构:公钥登录证书机构 证书机构_服务端:证书机构根据公钥对应的秘钥,对证书署签,并颁发公钥证书。 客户端_服务器:客户端获取到公钥,根据公钥加密请求报文发到服务端 客户端_证书机构:客户端根据公钥对应的数字签名去证书机构验证公钥就是来自要访问的服务器 证书机构_客户端:返回验签结果 服务器_客户端:根据秘钥解密数据,然后再根据公钥加密,响应报文数据 3.dmz区的作用 a.解决外网与内网之间安装了防火墙后不能访问问题。 b.dmz也成隔离区 c.dmz区存放web服务器(存储静态资源),ftp文件服务器,论坛等 d.外网不能访问内网:防止入侵,内网数据遭窃取。 内网可以访问外网:内网需要自由访问外网资源 外网可以访问dmz区:外网需要访问dmz区的服务器,但是需要经过防火墙由外地址到实际地址的转换 dmz区不能访问外网:邮件特例 内网可以访问
通过js获取外部样式表中的属性,比如.box在style.css样式表中有个属性叫font-size:16px; 通过js获取.box的这个属性: js代码为: <script> window.onload=function(){ varoBox =document.getElementsByClassName("box")[0]; alert(oBox.style.fontSize);//结果返回的是空 } </script> 解决方法: js代码为: <script> window.onload=function(){ varoBox =document.getElementsByClassName("box")[0]; alert(getElementStyle(oBox,"fontSize")); } functiongetElementStyle(obj,attr){ if(obj.cu