精华内容
下载资源
问答
  • 语法糖,是由英国计算机科学家彼得·...下面千锋重庆Java培训机构的小编就给大家介绍几个常见的语法糖。 一般来说Java中的语法糖主要四种: 泛型与类型擦除 一个编译器处理泛型两种方式:Code specialization和C

    语法糖,是由英国计算机科学家彼得·约翰·兰达(Peter J. Landin)发明的一个术语,简单来说就是对现有语法的一个封装。使用语法糖能够增加程序的可读性,减少程序代码出错的机会。作为一种与平台无关的高级编程语言,Java中也含有语法糖,这些语法糖并不被虚拟机所支持,在编译成字节码阶段会自动转换成简单常用的语法。下面千锋重庆Java培训机构的小编就给大家介绍几个常见的语法糖。

    一般来说Java中的语法糖主要有四种:

    泛型与类型擦除

    一个编译器处理泛型有两种方式:Code specialization和Code sharing,而Java使用的是Code sharing的机制。在Java虚拟机中没有泛型,只有普通类和普通方法,所有泛型类的类型参数在编译时都会被擦除,泛型类并没有自己独有的Class类对象,需要在编译阶段通过类型擦除的方式进行解语法糖。

    类型擦除的主要过程分两步:1)将所有的泛型参数用其最左边界(最顶级的父类型)类型替换;2)移除所有的类型参数。

    自动装箱与拆箱、变长参数

    自动装箱就是Java自动将原始类型值转换成对应的对象,比如将int的变量转换成Integer对象,这个过程叫做装箱,反之将Integer对象转换成int类型值,这个过程叫做拆箱。一般来说,装箱过程是通过调用包装器的valueOf方法实现的,而拆箱过程是通过调用包装器的xxxValue方法实现的。

    变长参数特性是在JDK1.5中引入的,使用变长参数有两个条件,一是变长的那一部分参数具有相同的类型,二是变长参数必须位于方法参数列表的最后面。变长参数同样是Java中的语法糖,其内部实现是Java数组。

    条件编译

    Java语法的条件编译,是通过判断条件为常量的if语句实现的。根据if判断条件的真假,编译器直接把分支为false的代码块消除。通过该方式实现的条件编译,必须在方法体内实现,而无法在正整个Java类的结构或者类的属性上进行条件编译。

    内部类与枚举类

    内部类又称为嵌套类,可以把内部类理解为外部类的一个普通成员。内部类之所以也是语法糖,是因为它仅仅是一个编译时的概念。outer.java里面定义了一个内部类inner,一旦编译成功,就会生成两个完全不同的.class文件了,分别是outer.class和outer$inner.class。所以内部类的名字完全可以和它的外部类名字相同。

    Java中类的定义使用class,枚举类的定义使用enum。Java SE5提供了一种新的类型-Java的枚举类型,关键字enum可以将一组具名的值的有限集合创建为一种新的类型,而这些具名的值可以作为常规的程序组件使用,这是一种非常有用的功能。

    展开全文
  • 一般网站有哪些常见漏洞?

    千次阅读 2018-09-26 18:13:03
    Web应用是指采用B/S架构、通过HTTP/HTTPS协议提供服务统称。随着互联网广泛使用,Web应用已经融入到日常生活中各个方面:网上...此时,如果Java、PHP、ASP等程序语言的编程人员安全意识不足,对程序参数输...

    Web应用是指采用B/S架构、通过HTTP/HTTPS协议提供服务的统称。随着互联网的广泛使用,Web应用已经融入到日常生活中的各个方面:网上购物、网络银行应用、证券股票交易、政府行政审批等等。在这些Web访问中,大多数应用不是静态的网页浏览,而是涉及到服务器侧的动态处理。此时,如果Java、PHP、ASP等程序语言的编程人员的安全意识不足,对程序参数输入等检查不严格等,会导致Web应用安全问题层出不穷。

    本文根据当前Web应用的安全情况,列举了Web应用程序常见的攻击原理及危害,并给出如何避免遭受Web攻击的建议。  

     阿里云代金券1000元免费领取地址:https://promotion.aliyun.com/ntms/yunparter/invite.html?userCode=2a7uv47d
    新老阿里云账户均可领取!可用于购买阿里云服务器ECS、云数据库RDS、虚拟主机、安骑士、DDoS高防IP等100多云计算产品。 代金券自领取之日起,有效期是30天,请及时使用,过30天后还可以重新领取。

     

    Web应用漏洞原理

     

       Web应用攻击是攻击者通过浏览器或攻击工具,在URL或者其它输入区域(如表单等),向Web服务器发送特殊请求,从中发现Web应用程序存在的漏洞,从而进一步操纵和控制网站,查看、修改未授权的信息。

     

    1.1 Web应用的漏洞分类

    1、信息泄露漏洞

      信息泄露漏洞是由于Web服务器或应用程序没有正确处理一些特殊请求,泄露Web服务器的一些敏感信息,如用户名、密码、源代码、服务器信息、配置信息等。

    造成信息泄露主要有以下三种原因:

    --Web服务器配置存在问题,导致一些系统文件或者配置文件暴露在互联网中;

    --Web服务器本身存在漏洞,在浏览器中输入一些特殊的字符,可以访问未授权的文件或者动态脚本文件源码;

    --Web网站的程序编写存在问题,对用户提交请求没有进行适当的过滤,直接使用用户提交上来的数据。

     

    2、目录遍历漏洞

      目录遍历漏洞是攻击者向Web服务器发送请求,通过在URL中或在有特殊意义的目录中附加“../”、或者附加“../”的一些变形(如“..”或“..//”甚至其编码),导致攻击者能够访问未授权的目录,以及在Web服务器的根目录以外执行命令。

     

    3、命令执行漏洞

      命令执行漏洞是通过URL发起请求,在Web服务器端执行未授权的命令,获取系统信息,篡改系统配置,控制整个系统,使系统瘫痪等。

    命令执行漏洞主要有两种情况:

      通过目录遍历漏洞,访问系统文件夹,执行指定的系统命令;

      攻击者提交特殊的字符或者命令,Web程序没有进行检测或者绕过Web应用程序过滤,把用户提交的请求作为指令进行解析,导致执行任意命令。

     

    4、文件包含漏洞

      文件包含漏洞是由攻击者向Web服务器发送请求时,在URL添加非法参数,Web服务器端程序变量过滤不严,把非法的文件名作为参数处理。这些非法的文件名可以是服务器本地的某个文件,也可以是远端的某个恶意文件。由于这种漏洞是由PHP变量过滤不严导致的,所以只有基于PHP开发的Web应用程序才有可能存在文件包含漏洞。

     

    5、SQL注入漏洞

      SQL注入漏洞是由于Web应用程序没有对用户输入数据的合法性进行判断,攻击者通过Web页面的输入区域(如URL、表单等) ,用精心构造的SQL语句插入特殊字符和指令,通过和数据库交互获得私密信息或者篡改数据库信息。SQL注入攻击在Web攻击中非常流行,攻击者可以利用SQL注入漏洞获得管理员权限,在网页上加挂木马和各种恶意程序,盗取企业和用户敏感信息。

     

    6、跨站脚本漏洞

      跨站脚本漏洞是因为Web应用程序时没有对用户提交的语句和变量进行过滤或限制,攻击者通过Web页面的输入区域向数据库或HTML页面中提交恶意代码,当用户打开有恶意代码的链接或页面时,恶意代码通过浏览器自动执行,从而达到攻击的目的。跨站脚本漏洞危害很大,尤其是目前被广泛使用的网络银行,通过跨站脚本漏洞攻击者可以冒充受害者访问用户重要账户,盗窃企业重要信息。

      根据前期各个漏洞研究机构的调查显示,SQL注入漏洞和跨站脚本漏洞的普遍程度排名前两位,造成的危害也更加巨大。

     

    1.2 SQL注入攻击原理

      SQL注入攻击是通过构造巧妙的SQL语句,同网页提交的内容结合起来进行注入攻击。比较常用的手段有使用注释符号、恒等式(如1=1)、使用union语句进行联合查询、使用insert或update语句插入或修改数据等,此外还可以利用一些内置函数辅助攻击。

    通过SQL注入漏洞攻击网站的步骤一般如下:

    第一步:探测网站是否存在SQL注入漏洞。

    第二步:探测后台数据库的类型。

    第三步:根据后台数据库的类型,探测系统表的信息。

    第四步:探测存在的表信息。

    第五步:探测表中存在的列信息。

    第六步:探测表中的数据信息。

     

    1.3 跨站脚本攻击原理

      跨站脚本攻击的目的是盗走客户端敏感信息,冒充受害者访问用户的重要账户。跨站脚本攻击主要有以下三种形式: 

    1、本地跨站脚本攻击

      B给A发送一个恶意构造的Web URL,A点击查看了这个URL,并将该页面保存到本地硬盘(或B构造的网页中存在这样的功能)。A在本地运行该网页,网页中嵌入的恶意脚本可以A电脑上执行A持有的权限下的所有命令。

     

    2、反射跨站脚本攻击

      A经常浏览某个网站,此网站为B所拥有。A使用用户名/密码登录B网站,B网站存储下A的敏感信息(如银行帐户信息等)。C发现B的站点包含反射跨站脚本漏洞,编写一个利用漏洞的URL,域名为B网站,在URL后面嵌入了恶意脚本(如获取A的cookie文件),并通过邮件或社会工程学等方式欺骗A访问存在恶意的URL。当A使用C提供的URL访问B网站时,由于B网站存在反射跨站脚本漏洞,嵌入到URL中的恶意脚本通过Web服务器返回给A,并在A浏览器中执行,A的敏感信息在完全不知情的情况下将发送给了C。

     

    3、持久跨站脚本攻击

      B拥有一个Web站点,该站点允许用户发布和浏览已发布的信息。C注意到B的站点具有持久跨站脚本漏洞,C发布一个热点信息,吸引用户阅读。A一旦浏览该信息,其会话cookies或者其它信息将被C盗走。持久性跨站脚本攻击一般出现在论坛、留言簿等网页,攻击者通过留言,将攻击数据写入服务器数据库中,浏览该留言的用户的信息都会被泄漏。

     

    Web应用漏洞的防御实现

    对于以上常见的Web应用漏洞漏洞,可以从如下几个方面入手进行防御:

      1)对 Web应用开发者而言

      大部分Web应用常见漏洞,都是在Web应用开发中,开发者没有对用户输入的参数进行检测或者检测不严格造成的。所以,Web应用开发者应该树立很强的安全意识,开发中编写安全代码;对用户提交的URL、查询关键字、HTTP头、POST数据等进行严格的检测和限制,只接受一定长度范围内、采用适当格式及编码的字符,阻塞、过滤或者忽略其它的任何字符。通过编写安全的Web应用代码,可以消除绝大部分的Web应用安全问题。

     

      2) 对Web网站管理员而言

      作为负责网站日常维护管理工作Web管理员,应该及时跟踪并安装最新的、支撑Web网站运行的各种软件的安全补丁,确保攻击者无法通过软件漏洞对网站进行攻击。

    除了软件本身的漏洞外,Web服务器、数据库等不正确的配置也可能导致Web应用安全问题。Web网站管理员应该对网站各种软件配置进行仔细检测,降低安全问题的出现可能。

    此外,Web管理员还应该定期审计Web服务器日志,检测是否存在异常访问,及早发现潜在的安全问题。

     

      3)使用网络防攻击设备

      前两种为事前预防方式,是比较理想化的情况。然而在现实中,Web应用系统的漏洞还是不可避免的存在:部分Web网站已经存在大量的安全漏洞,而Web开发者和网站管理员并没有意识到或发现这些安全漏洞。由于Web应用是采用HTTP协议,普通的防火墙设备无法对Web类攻击进行防御,因此可以使用IPS入侵防御设备来实现安全防护。

     

    H3C IPS Web攻击防御

      H3C IPS入侵防御设备有一套完整的Web攻击防御框架,能够及时发现各种已经暴露的和潜在的Web攻击。下图为对于Web攻击的总体防御框架。

    QQ_20180926181001

     图1:Web攻击防御框架

      H3C IPS采用基于特征识别的方式识别并阻断各种攻击。IPS设备有一个完整的特征库,并可定期以手工与自动的方式对特征库进行升级。当网络流量进入IPS后,IPS首先对报文进行预处理,检测报文是否正确,即满足协议定义要求,没有错误字段;如果报文正确,则进入深度检测引擎。该引擎是IPS检测的核心模块,对通过IPS设备的Web流量进行深层次的分析,并与IPS攻击库中的特征进行匹配,检测Web流量是否存在异常;如果发现流量匹配了攻击特征,IPS则阻断网络流量并上报日志;否则,网络流量顺利通过。

     

      此Web攻击防御框架有如下几个特点:

      1) 构造完整的Web攻击检测模型,准确识别各种Web攻击

      针对Web攻击的特点,考虑到各种Web攻击的原理和形态,在不同漏洞模型之上开发出通用的、层次化的Web攻击检测模型,并融合到特征库中。这些模型抽象出Web攻击的一般形态,对主流的攻击能够准确识别,使得模型通用化。

     

      2) 检测方式灵活,可以准确识别变形的Web攻击

      在实际攻击中,攻击者为了逃避防攻击设备的检测,经常对Web攻击进行变形,如采用URL编码技术、修改参数等。H3C根据Web应用漏洞发生的原理、攻击方式和攻击目标,对攻击特征进行了扩展。即使攻击者修改攻击参数、格式、语句等内容,相同漏洞原理下各种变形的攻击同样能够被有效阻断。这使得IPS的防御范围扩大,防御的灵活性也显著增强,极大的减少了漏报情况的出现。

     

      3) 确保对最新漏洞及技术的跟踪,有效阻止最新的攻击

      随着Web攻击出现的频率日益增高,其危害有逐步扩展的趋势。这对IPS设备在防御的深度和广度上提出了更高的要求,不仅要能够防御已有的Web攻击,更要有效的阻止最新出现的、未公布的攻击。目前,H3C已经建立起一套完整的攻防试验环境,可以及时发现潜在Web安全漏洞。同时还在继续跟踪最新的Web攻击技术和工具,及时更新Web攻击的特征库,第一时间发布最新的Web漏洞应对措施,确保用户的网络不受到攻击。

     

      4) 保证正常业务的高效运行

      检测引擎是IPS整个设备运行的关键,该引擎使用了高效、准确的检测算法,对通过设备的流量进行深层次的分析,并通过和攻击特征进行匹配,检测流量是否存在异常。如果流量没有匹配到攻击特征,则允许流量通过,不会妨碍正常的网络业务,在准确防御的同时保证了正常业务的高效运行。

     

    展开全文
  • C/C++中指针让程序员了更多灵活性,但它同时也是一把双刃剑,如果用不好,则会让你的程序出现各种各样问题,人说,C/C++程序员一半工作量是花在处理由指针引起bug上,可想而知,指针中包含陷阱...

    C/C++中的指针让程序员有了更多的灵活性,但它同时也是一把双刃剑,如果用的不好,则会让你的程序出现各种各样的问题,有人说,C/C++程序员有一半的工作量是花在处理由指针引起的bug上,可想而知,指针中包含的陷阱是多么可怕。既然如此,我们在编写代码的时候就应该把好关。

    要想在编写代码的时候尽可能避免指针带来的问题,就需要知道不恰当的使用指针到底会引发哪些问题, 又该如何去避免它?下面一起来总结在使用指针时容易遇到的问题。

    1.避免内存泄露

    程序在运行的时候需要内存,同时我们也知道内存是有限的,是计算机特别宝贵的资源,对于使用完的内存,应当及时的归还给操作系统。

    在c/c++中,如果是栈上的内存(比如说函数中的局部非静态变量),在使用完之后,操作系统会帮我们自动回收;但是如果是通过动态分配得到的堆上的内存,需要我们手动释放。

    如果我们在程序中忘了释放这些动态内存,而程序又是会持续运行的服务进程,会导致内存占用越来越高,轻者致残影响系统性能,重者致命导致进程崩溃。

    总之一句话,不再用到的内存没有释放,就叫做内存泄露,内存泄露的问题很严重。好了,让我们看几个内存泄露的案例。

    在C/C++中,通过动态内存分配函数(如malloc系统函数)或者new运算符分配的动态内存在使用完之后需要手动释放。否则会造成内存泄露。

    在这里插入图片描述

    建议:代码编写时注意malloc/free, new/delete成对使用

    即使在malloc/new后显示调用了free/delete释放内存,但是由于异常可能会导致释放内存的free/delete语句得不到执行,也会发生内存泄露,下面的例子就是这种情况。

    在这里插入图片描述

    从运行结果来看,类的析构函数没有被执行,可推知delete语句并没有得到执行。

    有人会说,这还不简单,直接在catch语句的cout << “Something has gone wrong” << endl;下面之后加个delete t不就行了?

    没错,这只是个几十行代码的测试程序,你可能一下就看出问题了,但是如果你面对的是一个庞大的工程时候,我想你内心一定是好崩溃的。还有更好的办法来解决这种问题,就是智能指针,后面会有专门的文章介绍。

    建议:C++代码代码中多注意使用智能指针

    2.不要使用野指针

    野指针也叫悬挂指针,是指向“垃圾”内存的指针,使用“野指针”会让程序出现不确定的行为。

    注意,野指针不是NULL指针, 它比NULL指针更容易犯错,因为它不能通过形如 if (NULL == p)的判断语句来预防,只能我们自己在写代码时多注意。

    指针p被free或者delete之后,没有置为NULL,让人误以为p是个合法的指针,事实上free或delete只是把指针所指的内存给释放掉,但是指针的值还是这块内存的地址,只不过这块内存已经被回收了不能被该进程再使用,下面的例子就是一个典型的使用野指针的案例。

    在这里插入图片描述
    在这里插入图片描述

    建议:free或delete之后将相应的指针设置为NULL

    在创建指针变量p时忘了初始化,p的值是个随机的垃圾值,此时读写该指针都是危险的,程序会产生不确定的行为

    在这里插入图片描述

    在这里插入图片描述

    建议:定义指针变量的时候尽量初始化,哪怕初始化为NULL也好

    c/c++中,局部变量是存放在中的,它的特点是随函数调用时创建随函数结束时销毁,因此在程序中将局部变量的地址返回后赋值给一个指针,这个指针指向的是一个已经被回收的内存,这也是一种野指针。

    看看下面的例子,原本是想将fun函数中的变量i的地址返回给p,用p访问这个变量,这个打印出*p是32767,并不是变量i的值8。像这种bug,一旦在大的项目中出现是很难定位的。

    在这里插入图片描述

    在这里插入图片描述

    建议:不要在函数中返回局部变量的地址,如果代码的逻辑非要是一个局部变量的地址,那么该局部变量一定要申明为static类型,因为static变量的生存期是整个程序运行期间

    3.不要使用NULL指针

    大家都知道,在程序中不能使用NULL指针,但是如果不注意,程序中还是有可能在你的意料之外就使用到NULL指针,下面看两个比较容易出问题的例子。

    动态内存分配函数分配内存的时,有可能会分配失败,此时返回NULL

    在这里插入图片描述

    在这里插入图片描述

    从程序运行结果来看,malloc分配失败返回NULL赋给p,再通过p访问其所指向的0地址内存内容时,出现"Segmentation fault"错误。

    建议:在使用内存分配函数分配内存的时候,应该用i f(p==NULL) 或if(p!=NULL)进行防错处理。

    此外,在含有指针参数的函数,也是有可能会误用到NULL指针,当调用该函数时传递的指针是个空指针,如果没有if(p!=NULL) 的判断条件,那么在后面使用指针的时候麻烦就大了,下面的例子就是这种情况。

    在这里插入图片描述
    在这里插入图片描述

    建议:对于含有指针参数的函数,也应当在函数入口处用if(p==NULL) 或if(p!=NULL)进行防错处理。

    学如逆水行舟,不进则退
    
    展开全文
  • HDUOJ: 常见问题及解答 ...Q: Online Judge(以下简称OJ)支持哪些语言...Q: 什么条件判断我的程序是在OJ上运行吗? A: 您可以使用ONLINE_JUDGE这个条件定义。下面是使用举例: C/C++ #ifdef ONL...

    HDUOJ:

    常见问题及解答



    Q: Online Judge(以下简称OJ)支持哪些语言?
    A: 目前为止,HDOJ支持C、C++、Pascal和Java四种语言。



    Q: 有什么条件判断我的程序是在OJ上运行吗?
    A: 您可以使用ONLINE_JUDGE这个条件定义。下面是使用举例: 

    C/C++

    #ifdef ONLINE_JUDGE
    此间的语句只有在OJ上的才会被编译
    #endif

    Pascal

    {$IFDEF ONLINE_JUDGE}
    此间的语句只有在OJ上的才会被编译
    {$ENDIF}



    Q: 在OJ上我能使用哪些输入输出?
    A: HDOJ上只能使用标准输入输出,您的程序不允许操作文件,否则将被判为'Runtime Error'或者'Wrong Answer'。
    比如要通过1000这个题目,您可以使用以下几种形式的程序:

    C++ 代码:

    #include <iostream>
    using namespace std;
    int main()
    {
       int i, j;
       while(cin >> i >> j)
          cout << i + j << endl;
      return 0;
    }


    C 代码:

    #include <stdio.h>
    int main()
    {
       int i, j;
       while(scanf("%d%d", &i, &j) == 2)
          printf("%d\n", i + j);
       return 0;
    }


    Pascal 代码:

    PROGRAM p1000(intput, output);
    VAR i, j : INTEGER;
    BEGIN
       WHILE NOT EOF(input) DO
       BEGIN
          Readln(i, j);
          Writeln(i + j);
       END;
    END.


    Java 代码:

    import java.util.*;
    class Sum
    {
        public static void main(String args[])
        {
            Scanner cin = new Scanner(System.in);
            int a, b;

            while(cin.hasNextInt())
            {
                a = cin.nextInt();
                b = cin.nextInt();
                System.out.println(a + b);
            }
        }
    }

    或者

    import java.util.*;
    public class Main
    {
        public static void main(String args[])
        {
            Scanner cin = new Scanner(System.in);
            int a, b;

            while(cin.hasNextInt())
            {
                a = cin.nextInt();
                b = cin.nextInt();
                System.out.println(a + b);
            }
        }
    }

    关于Java的特别说明:
    1、HDOJ上使用的是JDK 1.50 Update 8多国语言版。
    2、您提交的Java程序必须是单个文件的,也就是所有的类必须写在一个文件里。但是必须有一个类的里面必须包含一个名字为'main'的静态方法(函数),这个方法是程序的入口。
    3、如果您将主类申明为public公有类,则这个类名必须是'Main'(注意大小写,请参看第二个程序)。
    4、每个题目对于Java程序的时间和内存限制一般都会放宽的。但是即便如此,有些题目还是不适合用Java来解,对于这些题目我们建议您使用编译性语言来解。



    Q: 我提交了程序,OJ回复的那些评判结果是什么意思?
    A: 下面是常见的OJ评判结果以及它们表示的意思:

    Queuing : 提交太多了,OJ无法在第一时间给所有提交以评判结果,后面提交的程序将暂时处于排队状态等待OJ的评判。不过这个过程一般不会很长。

    Compiling : 您提交的代码正在被编译。

    Running : 您的程序正在OJ上运行。

    Judging : OJ正在检查您程序的输出是否正确。

    Accepted (AC) : 您的程序是正确的,恭喜!

    Presentation Error (PE) : 虽然您的程序貌似输出了正确的结果,但是这个结果的格式有点问题。请检查程序的输出是否多了或者少了空格(' ')、制表符('\t')或者换行符('\n')。

    Wrong Answer (WA) : 输出结果错,这个一般认为是算法有问题。

    Runtime Error (RE) : 运行时错误,这个一般是程序在运行期间执行了非法的操作造成的。以下列出常见的错误类型:

    • ACCESS_VIOLATION 您的程序想从一些非法的地址空间读取或向其中写入内容。一般例如指针、数组下标越界都会造成这个错误的。
    • ARRAY_BOUNDS_EXCEEDED 您的程序试图访问一个超出硬件支持范围的数组单元。
    • FLOAT_DENORMAL_OPERAND 进行了一个非正常的浮点操作。一般是由于一个非正常的浮点数参与了浮点操作所引起的,比如这个数的浮点格式不正确。
    • FLOAT_DIVIDE_BY_ZERO 浮点数除法出现除数为零的异常。
    • FLOAT_OVERFLOW 浮点溢出。要表示的数太大,超出了浮点数的表示范围。
    • FLOAT_UNDERFLOW 浮点下溢。要表示的数太小,超出了浮点数的表示范围。
    • INTEGER_DIVIDE_BY_ZERO 在进行整数除法的时候出现了除数为零的异常。
    • INTEGER_OVERFLOW 整数溢出。要表示的数值太大,超出了整数变量的范围。
    • STACK_OVERFLOW 栈溢出。一般是由于无限递归或者在函数里使用了太大的数组变量的原因。
    • ...... 其他错误,包括C++标准库/STL运行时库错误等,这里不再举例。

    Time Limit Exceeded (TLE) : 您的程序运行的时间已经超出了这个题目的时间限制。

    Memory Limit Exceeded (MLE) : 您的程序运行的内存已经超出了这个题目的内存限制。

    Output Limit Exceeded (OLE) : 您的程序输出内容太多,超过了这个题目的输出限制。

    Compilation Error (CE) : 您的程序语法有问题,编译器无法编译。具体的出错信息可以点击链接察看。

    System Error (SE) : OJ内部出现错误。由于我们的OJ可能存在一些小问题,所以出现这个信息请原谅,同时请及时与管理员联系。

    Out Of Contest Time : 超出比赛时间,这个信息只有在比赛的时候才会出现。



    Q: 为什么我的程序在VC++/VC下能正常编译,但是使用G++/GCC就会出现'Compilation Error'?
    A: GCC/G++和VC/VC++有所不同,例如:

    • 在G++/GCC下'main'函数必须定义成int型,定义成void main会得到'Compilation Error'。
    • 循环变量i定义在for语句块之内"for(int i=0...){...}"也会出错。
    • 在G++/GCC中itoa不是一个ANSI函数,但是在VC/VC++中是的。


    Q: 我想参加OJ的在线比赛,如何参加比赛呢?
    A: HDOJ和其他OJ不同。在HDOJ上有两种类型的比赛:一种是public公开比赛,另外一种是private内部比赛。所有HDOJ注册用户均可以参加公开的比赛,但是一般只有授权用户才可以参加内部比赛(一般是杭电的学生和受邀请的外校用户)。
    要参加公开比赛,您只要进入比赛页面,找到您要提交的题目,用您的HDOJ账号直接提交就行了。
    参加内部比赛的用户将会在比赛前收到比赛组织者提供的账户和密码,您用这个账户和密码才能提交。



    Q我已经在主页上的"User Login"中登录了,但是为什么我还是不能参加比赛呢?
    A: 这种情况一般只会出现在内部比赛中。您登录的那个是HDOJ的练习账号,不是那场比赛的账号。当系统就那场内部比赛要求您进行身份认证时,请输入正确的比赛账号和密码登录就行了。
    注意:浏览器所有HDOJ相关页面被关闭或者您长期(一般是20分钟)处于未操作状态的时候,您的所有认证将失效,这时您只要重新登录就行了。



    Q: 为什么我用scanf/printf的组合能得到'AC'的程序换成cin/cout就得到了'TLE'?
    A: 一般情况下,C语言运行时I/O函数比C++的效率高一些,所以处理大数据量的时候,建议使用scanf/printf组合。



    Q: 我用Borland C++ 3.1或者Borland Pascal 7.0写程序的,那么我如何才能避免得到'Compilation Error'?
    A: 我们服务器上使用的是Borland Delphi 7编译器。您需要注意以下几个方面:
    • 您的程序可以使用超过64K大小的数组。
    • 不要使用Pascal语言基于Dos操作系统的CRT单元和C/C++的conio.h头文件。
    • 对于Pascal integer = longint,对于C/C++ int = long。
    • 用GCC/G++提交的话,来自math.h申明的函数不能使用整数作为参数。像sqrt(2)的调用会得到错误,您要写成((double)2)或者sqrt(2.0)。
    • 在GCC/G++中,函数j0,j1,jn,y0,y1,yn已经在math.h中被定义。所以,当您使用math.h的时候,要避免为全局变量取这些名字。
    • Pascal编译器默认string类型(后面不加大小限制)为AnsiString类型,它将可以是任意长度的字符串(至于其他字符串类型ShortString、WideString,请参看Delphi 7的SDK)。要得到字符串的长度,可以使用length函数。
    • Pascal中,与函数名相同的变量有特殊的意义,它表示这个函数的返回值,以下两个函数是等价的:

      function Sum(a, b: integer): integer;
      begin
         Sum := a + b;
      end;

      function Sum(a, b: integer): integer;
      begin
         result := a + b;
      end;


    • 以下列出的是Pascal/Delphi的所有保留字:
      as
      and
      begin
      constructor
      do
      except
      finally
      if
      initialization
      label
      not
      out
      property
      resourcestring
      string
      try
      uses
      false
      array
      case
      destructor
      downto
      exports
      for
      implementation
      inline
      library
      object
      packed
      raise
      set
      then
      type
      var
      new
      as
      class
      dispinterface
      else
      file
      function
      in
      interface
      mod
      of
      procedure
      record
      shl
      threadvar
      unit
      while
      new
      asm
      const
      div
      end
      finalization
      goto
      inherited
      is
      nil
      or
      program
      repeat
      shr
      to
      until
      with


    Q: 如何使用64位整数类型?
    A: 服务器支持64位有符号和无符号类型的整数。
    • 有符号型64位整数,值域为:-9223372036854775808 .. 9223372036854775807。

      语言 GNU C/C++ Pascal Visual C/C++
      类型名称 __int64
      or
      long long
      int64 __int64
      输入方法 scanf("%I64d", &x);
      or
      cin >> x;
      read(x); scanf("%I64d", &x);
      输出方法 printf("%I64d", x);

      cout << x;
      write(x); printf("%I64d", x);

    • 无符号型64位整数,值域为:0 .. 18446744073709551615。

      语言 GNU C/C++ Pascal Visual C/C++
      类型名称 unsigned __int64
      or
      unsigned long long
      qword unsigned __int64
      输入方法 scanf("%I64u", &x);
      or
      cin >> x;
      read(x); scanf("%I64u", &x);
      输出方法 printf("%I64u", x);
      or
      cout << x;
      write(x); printf("%I64u", x);

    求 1+2+3+……+n = ?
    数据生成器:

    #include<stdio.h>
    #include<stdlib.h>
    #include<time.h>
    int main()
    {
     int n;
     srand((int)time(0));  //调用srand()函数,以系统时间为随机种子
     n = 1 + rand()%10000;  //随机生成一个1到10000的自然数
     printf("%d\n",n); // 输出随机生成的自然数
     return 0;
    }


     
    //编译运行后,生成rand.exe可执行文件  然后在批处理文件中 直接调用 rand.exe>data.in即将上边的输出结果重定向到data.in文件中
     
    暴力程序:算法 是直接从1加到n,执行n次循环 时间复杂度为 O(n)
    #include<stdio.h>
    #include<stdlib.h>
    int main()
    {
     int i,n;
     long int sum = 0;
     scanf("%d",&n);
     for(i=1;i<=n;i++)
     {
      sum += i;
     }
     printf("%d\n",sum);
     return 0;
    }


     
    //编译运行后,生成std.exe可执行文件  然后在批处理文件中 直接调用 std.exe<data.in>std.out即将从data.in中获取输入,然后将输出结果重定向到std.out文件中
     
    高效算法: 算法为  1+2+……+n = n*(n+1)/2,   时间复杂度为O(1)
    #include<stdio.h>
    #include<stdlib.h>
    int main()
    {
     int n;
     long int sum = 0;
     scanf("%d",&n);
     sum = n*(n+1)/2; 
     printf("%d\n",sum);
     return 0;
    }


     
    //编译运行后,生成my.exe可执行文件  然后在批处理文件中 直接调用 my.exe<data.in>std.out即将从data.in中获取输入,然后将输出结果重定向到my.out文件中
    批处理文件 test.bat 内容如下
    @echo off  
    :loop  
        rand.exe>data.in  
        std.exe<data.in>std.out
        my.exe<data.in>my.out  
        fc my.out std.out  
    if not errorlevel 1 goto loop  
    pause  
    goto loop


    最后将这三个.exe文件和批处理文件放到同一个目录下 运行批处理文件即可

    转载于:https://www.cnblogs.com/yefengCrazy/p/5636695.html

    展开全文
  • 12.13 适用于整数和浮点数数学函数分别有哪些? 12.14 什么是多字节字符(multibyte characters)? 12.15 怎样操作由多字节字符组成字符串? 第13章 时间和日期 13.1 怎样把日期存储到单个数字中?有这...
  • Go 语言的类型转换

    2017-06-15 22:46:22
    从 PHP、Nodejs 等弱类型语言转向 Go 语言开发时最头疼的就是类型转换了,Go 语言提供了万能类型 interface,常见的基础类型 int、float64、string,还有 map、slice,还有 error 等。怎么互相转换,写 restful API ...
  • 计算机辅修 C++ 程序设计 姓名: 班级: 学号: 我们编写的源程序代码为什么要预处理 编译和链接在 C++中常见的编译预处理指 令有哪些 编译程序读取源程序 字符流对之进行词法和语法的分析将高级语言指令转换为功能 ...
  • 应届生必会Java知识(异常处理篇)

    多人点赞 热门讨论 2021-05-30 19:07:56
    2、Java中都有哪些错误?(1)、编译错误(2)、运行错误3、异常和错误继承结构图1、Error类2、Exception类4、用户自定义异常 1、什么是异常处理? 在了解什么是异常处理之前,我们不妨先了解一下什么叫异常。所谓...
  • python常见知识点整理

    2019-09-12 14:22:23
    Python是初学者的语言:Python是一种非常适合初学者的语言,它支持多种类型的应用程序的开发,如简单的文本处理、www浏览器应用程序开发、游戏开发等等。 1)什么是Python?使用Python的优点有哪些?缺点有哪些?...
  • 每一个C 语言程序有且只有一个主函数,函数后面一定有一对大括号“{}”,在大括号 里面书写其它程序。 从上面分析我们了解了部分C 语言的特性,下面再看一个稍复杂一点例子。 例1-2 让接在P1.0 引脚上LED 闪烁...
  • 可以选择各种编程语言方便程序的编写和记录,如果用虚拟机登录mysql数据库也可以先在sublime上写sql语句,方便修改。 一、首先两个基本问题: 1.1 机器学习是干什么? 从数据中自动分析获得规律(模型),并利用...
  • 常见软件测试面试题

    2015-10-09 21:33:57
    如果将你的程序的语言扩展到非英语,例如中文, 你如何测试.  3. 给你一个COCAN, 你如何测试(解释说就是罐装的可口可乐).  4. 当你的程序遇到BUG的时候,你选择怎样处理.  5. 你如何isolation 你程序...
  • 常见软件测试工程师面试题

    千次阅读 2014-10-22 10:16:17
    如果将你的程序的语言扩展到非英语,例如中文, 你如何测试.  3. 给你一个COCAN, 你如何测试(解释说就是罐装的可口可乐).  4. 当你的程序遇到BUG的时候,你选择怎样处理.  5. 你如何isolation 你程序里的BUG...
  • o 3.5 在 C 中是否模拟继承等面向对象程序设计特性好方法? o 3.6 我遇到这样声明结构代码: struct name { int namelen; char namestr[1];}; 然后又使用一些内存分配技巧使 namestr 数组用起来好像多个...
  • 内存处理是编程人员容易出现问题地方,忘记或者错误内存回收会导致程序或系统不稳定甚至崩溃,Java提供GC功能可以自动监测对象是否超过作用域从而达到自动回收内存目的,Java语言没有提供释放已分配内存...
  • 3. 描述主题列表中各数据结构常见的应用。 4. 用高级语言实现用户自定义的数据结构。 5. 比较数据结构的不同实现的性能。 6. 编写使用以下各种数据结构的程序:数组、记录、字符串、链表、栈、队列和哈希表。 7. ...
  • 22、面向对象特征有哪些方面 15 23、java中实现多态机制是什么? 17 24、abstract class和interface有什么区别? 17 25、abstractmethod是否可同时是static,是否可同时是native,是否可同时是synchronized? 18 ...
  • 异常处理的方法有哪些? 抛出异常 throw、throws 捕获异常 try-catch 反射与泛型 反射 什么是反射? 在程序运行过程中分析类一种能力(通过访问字节码.class文件,创建并使用对象过程) ...
  • C#微软培训教材(高清PDF)

    千次下载 热门讨论 2009-07-30 08:51:17
    C#--微软.NET第一语言 本书着重介绍语言本身,比较少涉及应用,不错入门书,从头讲起,不怕不明白。 <<page 1>> page begin==================== 目 目目 目 录 录录 录 第一部分 C#语言概述.4 ...
  • 处理程序异常提供了一种机制,如函数参数值不正确或内存耗尽等。读者还将学习RTTI,这种机制用来 确定对象类型。最后,本章还将介绍一种更安全方法来替代不受限制强制类型转换。 第16章:string类和标准...
  • 处理程序异常提供了一种机制,如函数参数值不正确或内存耗尽等。读者还将学习RTTI,这种机制用来 确定对象类型。最后,本章还将介绍一种更安全方法来替代不受限制强制类型转换。 第16章:string类和标准...
  • C#微软培训资料

    2014-01-22 14:10:17
    1.3 C#语言的特点.8 1.4 小 结 .11 第二章 运行环境 全面了解.NET.12 2.1 .NET 结构.12 2.2 公用语言运行时环境与公用语言规范.13 2.3 开 发 工 具 .17 2.4 小 结 .19 第三章 编写第一个应用程序 .20 ...
  • 接下来介绍了许多巧妙的调试技术,并且通过真实的示例来展示各种常见的C#编程错误。 读者在《.NET高级调试》中可以学到: ●使用事后调试技术,包括Power DBG以及其他“强大的调试工具”。 ●理解在.NET CLR 4....
  • 处理程序异常提供了一种机制,如函数参数值不正确或内存耗尽等。读者还将学习RTTI,这种机制用来 确定对象类型。最后,本章还将介绍一种更安全方法来替代不受限制强制类型转换。 第16章:string类和标准...
  • 处理程序异常提供了一种机制,如函数参数值不正确或内存耗尽等。读者还将学习RTTI,这种机制用来 确定对象类型。最后,本章还将介绍一种更安全方法来替代不受限制强制类型转换。 第16章:string类和标准...

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 168
精华内容 67
关键字:

常见的语言处理程序有哪些