基础题(一)

一、Python和Java、PHP、C、C#、C++等其余语言的对比?php


 

(1)C语言java

  C语言,它既有高级语言的特色,又具备汇编语言的特色,它是结构式语言。C语言应用指针:能够直接进行靠近硬件的操做,可是C的指针操做不作保护,也给它带来了不少不安全的因素。C++在这方面作了改进,在保留了指针操做的同时又加强了安全性,受到了一些用户的支持,可是,因为这些改进增长语言的复杂度,也为另外一部分所诟病。Java则吸收了C++的教训,取消了指针操做,也取消了C++改进中一些备受争议的地方,在安全性和适合性方面均取得良好的效果,但其自己解释在虚拟机中运行,运行效率低于C++/C。通常而言,C,C++,java被视为同一系的语言,它们长期占据着程序使用榜的前三名。python

  C语言的优势程序员

  简洁紧凑、灵活方便;运算符丰富;数据类型丰富;表达方式灵活实用;容许直接访问物理地址,对硬件进行操做;生成目标代码质量高,程序执行效率高;可移植性好;表达力强;数据库

  C语言的缺点编程

  C语言的缺点主要表如今数据的封装性上,这一点使得C在数据的安全性上有很大缺陷,这也是C和C++的一大区别。 C语言的语法限制不太严格,对变量的类型约束不严格,影响程序的安全性,对数组下标越界不做检查等。从应用的角度,C语言比其余高级语言较难掌握。也就是说,对用C语言的人,要求对程序设计更熟练一些。windows

(2)C#语言数组

  C#是微软公司发布的一种面向对象的、运行于.NET Framework之上的高级程序设计语言。C#看起来与Java有着惊人的类似;它包括了诸如单一继承、接口、与Java几乎一样的语法和编译成中间代码再运行的过程。可是C#与Java有着明显的不一样,它借鉴了Delphi的一个特色,与COM(组件对象模型)是直接集成的,并且它是微软公司 .NET windows网络框架的主角。首先,C# 和JAVA同样,简直就是照搬了C++的部分语法,所以,对于数量众多的C++程序员学习起来很容易上手,另外,对于新手来讲,比C++要简单一些。其次,Windows是占垄断地位的平台,而开发Windows应用,固然微软的声音是不能忽略的。最重要的是,相对于C++,用C# 开发应用软件能够大大缩短开发周期,同时能够利用原来除用户界面代码以外的C++代码。浏览器

(3)Java语言安全

  Java语言,Java是一种能够撰写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台(即JavaSE, JavaEE, JavaME)的总称。Java 技术具备卓越的通用性、高效性、平台移植性和安全性,普遍应用于我的PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。在全球云计算和移动互联网的产业环境下,Java更具有了显著优点和广阔前景。
  Java的优点,与传统程序不一样,Sun 公司在推出 Java 之际就将其做为一种开放的技术。全球数以万计的 Java 开发公司被要求所设计的 Java软件必须相互兼容。“Java 语言靠群体的力量而非公司的力量”是Sun公司的口号之一,并得到了广大软件开发商的认同。这与微软公司所倡导的注重精英和封闭式的模式彻底不一样。Sun 公司对 Java 编程语言的解释是:Java 编程语言是个简单、面向对象、分布式、解释性、健壮、安全与系统无关、可移植、高性能、多线程和动态的语言。

(4)php语言 

  PHP(PHP: Hypertext Preprocessor的缩写,中文名:“PHP:超文本预处理器”)是一种通用开源脚本语言。语法吸取了C语言、Java和Perl的特色,入门门槛较低,易于学习,使用普遍,主要适用于Web开发领域。
     特性:PHP 独特的语法混合了 C、Java、Perl 以及 PHP 自创新的语法;PHP能够比CGI或者Perl更快速的执行动态网页——动态页面方面,与其余的编程语言相比,PHP是将程序嵌入到HTML文档中去执行执行效率比彻底生成htmL标记的CGI要许多,PHP具备很是强大的功能,全部的CGI的功能PHP都能实现; PHP支持几乎全部流行的数据库以及操做系统;最重要的是PHP能够用C、C++进行程序的扩展。

(5)python语言

  python语言,是一种面向对象、直译式计算机程序设计语言,Python语法简洁而清晰,具备丰富和强大的类库。它常被昵称为胶水语言,它可以很轻松的把用其余语言制做的各类模块(尤为是C/C++)轻松地联结在一块儿。常见的一种应用情形是,使用python快速生成程序的原型(有时甚至是程序的最终界面),而后对其中有特别要求的部分,用更合适的语言改写。
  Python是彻底面向对象的语言。函数、模块、数字、字符串都是对象。而且彻底支持继承、重载、派生、多继承,有益于加强源代码的复用性。Python支持重载运算符和动态类型。相对于Lisp这种传统的函数式编程语言,Python对函数式设计只提供了有限的支持。有两个标准库(functools, itertools)提供了Haskell和Standard ML中久经考验的函数式程序设计工具。Python自己被设计为可扩充的。并不是全部的特性和功能都集成到语言核心。Python提供了丰富的API和工具,以便程序员可以轻松地使用C语言、C++、Cython来编写扩充模块。Python编译器自己也能够被集成到其它须要脚本语言的程序内。所以,不少人还把Python做为一种“胶水语言”(glue language)使用。使用Python将其余语言编写的程序进行集成和封装

 二、简述解释型和编译型编程语言?


 

  解释型语言编写的程序不须要编译,在执行的时候,专门有一个解释器可以将VB语言翻译成机器语言,每一个语句都是执行的时候才翻译。这样解释型语言每执行一次就要翻译一次,效率比较低。

  用编译型语言写的程序执行以前,须要一个专门的编译过程,经过编译系统,把源高级程序编译成为机器语言文件,翻译只作了一次,运行时不须要翻译,因此编译型语言的程序执行效率高,但也不能一律而论,部分解释型语言的解释器经过在运行时动态优化代码,甚至可以使解释型语言的性能超过编译型语言。

 三、Python解释器种类以及特色?


 

Python是一门解释器语言,代码想运行,必须经过解释器执行,Python存在多种解释器,分别基于不一样语言开发,每一个解释器有不一样的特色,但都能正常运行Python代码,如下是经常使用的五种Python解释器:

(1)CPython

  当从Python官方网站下载并安装好Python2.7后,就直接得到了一个官方版本的解释器:Cpython,这个解释器是用C语言开发的,因此叫 CPython,在命名行下运行python,就是启动CPython解释器,CPython是使用最广的Python解释器。

(2)IPython

  IPython是基于CPython之上的一个交互式解释器,也就是说,IPython只是在交互方式上有所加强,可是执行Python代码的功能和CPython是彻底同样的,比如不少国产浏览器虽然外观不一样,但内核实际上是调用了IE。

(3)PyPy

  PyPy是另外一个Python解释器,它的目标是执行速度,PyPy采用JIT技术,对Python代码进行动态编译,因此能够显著提升Python代码的执行速度。

(4)Jython

  Jython是运行在Java平台上的Python解释器,能够直接把Python代码编译成Java字节码执行。

(5)IronPython

  IronPython和Jython相似,只不过IronPython是运行在微软.Net平台上的Python解释器,能够直接把Python代码编译成.Net的字节码。

在Python的解释器中,使用普遍的是CPython,对于Python的编译,除了能够采用以上解释器进行编译外,技术高超的开发者还能够按照本身的需求自行编写Python解释器来执行Python代码,十分的方便!

 四、位和字节的关系?


 

1. bit:位
    一个二进制数据0或1,是1bit;

2. byte:字节
    存储空间的基本计量单位,如:MySQL中定义 VARCHAR(45)  便是指 45个字节;
    1 byte = 8 bit

3. 一个英文字符占一个字节(视编码而定);
    1 字母 = 1 byte = 8 bit

4. 一个汉字占2个字节(视编码而定);
    1 汉字 = 2 byte = 16 bit

5. 标点符号
    A>.  汉字输入状态下,默认为全角输入方式;
    B>.  英文输入状态下,默认为半角输入方式;

    C>.  全角输入方式下,标点符号占2字节;
    D>.  半角输入方式下,标点符号占1字节;

    故:汉字输入状态下的字符,占2个字节 (但不排除,本身更改了默认设置);
            英文输入状态下的字符,占1个字节 (但不排除,本身更改了默认设置);

五、b、B、KB、MB、GB 的关系?


 

  b 比特bit / 位 
  B——字节
  KB——千比特
  MB——兆比特
  GB——吉比特

  1 B = 8b (8个bit/ 位) 一个字节(byte)等于8位(bit)
  1 kB = 1024 B (kB - kilobajt) 
  1 MB = 1024 kB (MB - megabajt)
  1 GB = 1024 MB (GB - gigabajt)

六、请至少列举5个 PEP8 规范(越多越好)

(一)代码编排
  一、 缩进,4个空格的缩进(编辑器均可以完成此功能),不使用Tap,更不能混合使用Tap和空格。
  2 、每行最大长度79,换行可使用反斜杠,最好使用圆括号。换行点要在操做符的后边敲回车。
  3 、类和top-level函数定义之间空两行;类中的方法定义之间空一行;函数内逻辑无关段落之间空一行;其余地方尽可能不要再空行

(二)文档编排
  1 、模块内容的顺序:模块说明和docstring—import—globals&constants—其余定义。其中import部分,又按标准、三方和本身编写顺序依次排放,之间空一行。
  2 、不要在一句import中多个库,好比import os, sys不推荐。
  3 、若是采用from XX import XX引用库,能够省略‘module.’,都是可能出现命名冲突,这时就要采用import XX。

(三)空格的使用
        整体原则,避免没必要要的空格。
  1 、各类右括号前不要加空格。
  2 、逗号、冒号、分号前不要加空格。
  3 、函数的左括号前不要加空格。如Func(1)。
  4 、序列的左括号前不要加空格。如list[2]。
  5 、操做符左右各加一个空格,不要为了对齐增长空格。
  6 、函数默认参数使用的赋值符左右省略空格。
  7 、不要将多句语句写在同一行,尽管使用‘;’容许。
  8 、if/for/while语句中,即便执行语句只有一句,也必须另起一行。

(四)注释
        整体原则,错误的注释不如没有注释。因此当一段代码发生变化时,第一件事就是要修改注释!
        注释必须使用英文,最好是完整的句子,首字母大写,句后要有结束符,结束符后跟两个空格,开始下一句。若是是短语,能够省略结束符。
  一、块注释,在一段代码前增长的注释。在‘#’后加一空格。段落之间以只有‘#’的行间隔。好比:
  # Description : Module config.
  # 
  # Input : None
  #
  # Output : None
  二、行注释,在一句代码后加注释。好比:x = x + 1 # Increment x
  可是这种方式尽可能少使用。
  三、避免无谓的注释。

(五)文档描述
  一、为全部的共有模块、函数、类、方法写docstrings;非共有的没有必要,可是能够写注释(在def的下一行)。
  二、若是docstring要换行,参考以下例子,详见PEP 257
  """

  Return a foobang

  Optional plotz says to frobnicate the bizbaz first.

  """

(六)命名规范
        整体原则,新编代码必须按下面命名风格进行,现有库的编码尽可能保持风格。
  一、尽可能单独使用小写字母‘l’,大写字母‘O’等容易混淆的字母。
  二、模块命名尽可能短小,使用所有小写的方式,可使用下划线。
  三、包命名尽可能短小,使用所有小写的方式,不可使用下划线。
  四、类的命名使用CapWords的方式,模块内部使用的类采用_CapWords的方式。
  五、异常命名使用CapWords+Error后缀的方式。
  六、全局变量尽可能只在模块内有效,相似C语言中的static。实现方法有两种,一是__all__机制;二是前缀一个下划线。
  七、函数命名使用所有小写的方式,可使用下划线。
  八、常量命名使用所有大写的方式,可使用下划线。
  九、类的属性(方法和变量)命名使用所有小写的方式,可使用下划线。
  十、类的属性有3种做用域public、non-public和subclass API,能够理解成C++中的public、private、protected,non-public属性前,前缀一条下划线。
  十一、类的属性若与关键字名字冲突,后缀一下划线,尽可能不要使用缩略等其余方式。
  十二、为避免与子类属性命名冲突,在类的一些属性前,前缀两条下划线。好比:类Foo中声明__a,访问时,只能经过Foo._Foo__a,避免歧义。若是子类也叫Foo,那就无能为力了。
  1三、类的方法第一个参数必须是self,而静态方法第一个参数必须是cls。

相关文章
相关标签/搜索