您的位置:首页 > 理论基础

计算机9个基础知识点

2016-09-08 21:37 183 查看

1.编译型语言和解释型语言的区别

编译型语言:

编译是指在应用源程序执行之前,就将程序源代码“翻译”成目标代码(机器语言),因此其目标程序可以脱离其语言环境独立执行,使用比较方便、效率较高。但应用程序一旦需要修改,必须先修改源代码,再重新编译生成新的目标文件(* .OBJ)才能执行,只有目标文件而没有源代码,修改很不方便。现在大多数的编程语言都是编译型的。编译程序将源程序翻译成目标程序后保存在另一个文件中,该目标程序可脱离编译程序直接在计算机上多次运行。大多数软件产品都是以目标程序形式发行给用户的,不仅便于直接运行,同时又使他人难于盗用其中的技术C、C++、Fortran、Visual Foxpro、Pascal、Delphi、Ada都是编译实现的。

解释型语言:

解释型语言的实现中,翻译器并不产生目标机器代码,而是产生易于执行的中间代码,这种中间代码与机器代码是不同的,中间代码的解释是由软件支持的,不能直接使用硬件,软件解释器通常会导致执行效率较低。用解释型语言编写的程序是由另一个可以理解中间代码的解释程序执行的。与编译程序不同的是,解释程序的任务是逐一将源程序的语句解释成可执行的机器指令,不需要将源程序翻译成目标代码后再执行。解释程序的优点是当语句出现语法错误时,可以立即引起程序员注意,而程序员在程序开发期间就能进行校正。对于解释型Basic语言,需要一个专门的解释器解释执行 Basic程序,每条语言只有在执行才被翻译。这种解释型语言每执行一次就翻译一次,因而效率低下。一般地,动态语言都是解释型的,如Tcl、Perl、Ruby、VBScript、 JavaScript等。

混合型:

Java很特殊,Java程序也需要编译,但是没有直接编译称为机器语言,而是编译称为字节码,然后在Java虚拟机上用解释方式执行字节码。Python 的也采用了类似Java的编译模式,先将Python程序编译成Python字节码,然后由一个专门的Python字节码解释器负责解释执行字节码。(Java虚拟机对字节码的执行相当于模拟一个cpu,而ruby1.8–在虚拟机还未出现前–是通过解释成语法树执行。)

个人认为,java是解释型的语言,因为虽然java也需要编译,编译成.class文件,但是并不是机器可以识别的语言,而是字节码,最终还是需要jvm的解释,才能在各个平台执行,这同时也是java跨平台的原因。所以可是说java即是编译型的,也是解释型,但是如果非要归类的话,从概念上的定义,恐怕java应该归到解释型的语言中。

2.c语言的include

include<> :表示只从从标准库文件目录下搜索,对于标准库文件搜索效率快。

include”” :表示首先从用户工作目录下开始搜索,对于自定义文件搜索比较快,然后搜索整个磁盘。

3.中断响应时间是指从发出中断请求到进进中断处理所用的时间

4.class模板

class用于定义类,在模板引入c++后,最初定义模板的方法为:

template,这里class关键字表明T是一个类型,后来为了避免class在这两个地方的使用可能给人带来混淆,所以引入了typename这个关键字,它的作用同class一样表明后面的符号为一个类型,这样在定义模板的时候就可以使用下面的方式了:

template.在模板定义语法中关键字class与typename的作用完全一样。

template <typename T1, typename T2>
template <class T1, class T2>


5.补码

1.因为计算机不仅仅要处理加法运算,还有处理减法运算,但是计算机的CPU只有加法器,没有减法器

所以出现了补码,正数的源码,反码,补码是自己本身,所以补码出现并不影响正数原来的运算

2.计算机二进制如何表示正负数呢,规定最高位为符号位,0是正数,1是负数,负数的反码就是符号位不变,然后全部取反,补码就是反码加1,比如1001:,反码就是1110,补码就是1111.然后谁的补码和谁补码二进制相加就可以得到正确的数字了

3.另外说明,补码还解决了源码中2个0的情况(即+0和-0)

6.c++对++的重载

C++中重载前缀++: operator++();表达式++a,运用成员函数调用方式为:a.operator++()

重载后缀++: operator++(int); 表达式a++,运用成员函数调用方式为:a.operator++(1)

7.图像空间的消隐算法

常见的消隐算法有z-buffer算法:算法的原理是:先将待处理的景物表面上的采样点变换到图像空间(屏幕坐标系),计算其深度值,并根据采样点在屏幕上的投影位置,将其深度值与已存贮在Z缓存器中相应像素处的原可见点的深度值进行比较。如果新的采样点的深度(z值)大于原可见点的深度,表明新的采样点遮住了原可见点,则用该采样点处的颜色值更新帧缓存器中相应像素的颜色值,同时用其深度值更新Z缓存器中的深度值;否则,不做更改。

1)物体空间的消隐算法 (光线投射):将场景中每一个面与其他每个面比较,求出所有点、边、面遮挡关系。

2)图像空间的消隐算法 (Z-buffer、扫描线Z-buffer 、Warnock):对屏幕上每个象素进行判断,决定哪个多边形在该象素可见。

3)物体空间和图像空间的消隐算法 (画家算法):在物体空间中预先计算面的可见性优先级,再在图像空间中生成消隐图。

8.常见哈希冲突解决办法:

1.开放地址法 2.线性探测法 3.链地址法(拉链法) 4.二次探测法

5.伪随机探测法 6.再散列(双重散列,多重散列) 7.建立一个公共溢出区

9.不改代码的情况下,如何快速解决某个域名服务器的压力

一。重定向

1.HTTP重定向

增加N台内部服务器,组成一个局域网,将APP复制N份放到内部服务器中,原来的服务器作为与因特网通信的接口。当原服务器收到客户端请求后,服务器选择一个负载最小的内部服务器,将客户端的请求重定向到该服务器

html重定向就是通过各种的方法将各种网络请求重新定个方向转到其它位置。 在网站建设中,时常会遇到需要网页重定向的情况:象网站调整,如改变网页目录结构,网页被移到一个新地址,再或者,网页扩展名改变,如因应用需要把。php改成。Html或。shtml,在这种情况下,如果不做重定向,则用户收藏夹或搜索引擎数据库中旧地址只能让访问客户还会得到一个404页面错误信息,访问流量白白丧失;再如某些注册了多个域名的网站,也需要通过重定向让访问这些域名的用户自动跳转到主站点,等等。

301 redirect

301代表永久性转移(Permanently Moved),301重定向是网页更改地址后对搜索引擎友好的最好方法,只要不是暂时搬移的情况,都建议使用301来做转址。

302 redirect

302代表暂时性转移(Temporarily Moved ),在前些年,不少Black Hat SEO曾广泛应用这项技术,目前,各大主要搜索引擎均加强了打击力度。即使网站客观上不是spam,也很容易被搜寻引擎容易误判为spam而遭到惩罚。

meta fresh

这在2000年前比较流行,不过现在已很少见。其具体是通过网页中的meta指令,在特定时间后重定向到新的网页,如果延迟的时间太短(约5秒之内),会被判断为spam。

2.DNS重定向

原服务器IP对应的域名解析到多个IP,用DNS轮转法选择合适的IP

3.IP地址转发

另外还可以进行代理的重定向

二。其他的思路:

1,应用服务器与数据库分离

2,使用缓存改善性能,缓存分为两种,缓存在应用服务器上的本地缓存,缓存在专门分布式缓存上的运程缓存

3,使用应用服务器集群,增加服务器数量,使用负载均衡调度服务器

4,使用反向代理和CDN服务,购买网络商的缓存服务

5,使用分布式文件系统,将数据站点做成分布式架构,如后台数据库

我的微信二维码如下,欢迎交流讨论



欢迎关注《IT面试题汇总》微信订阅号。每天推送经典面试题和面试心得技巧

微信订阅号二维码如下:



<script type="text/javascript">
$(function () {
$('pre.prettyprint code').each(function () {
var lines = $(this).text().split('\n').length;
var $numbering = $('<ul/>').addClass('pre-numbering').hide();
$(this).addClass('has-numbering').parent().append($numbering);
for (i = 1; i <= lines; i++) {
$numbering.append($('<li/>').text(i));
};
$numbering.fadeIn(1700);
});
});
</script>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: