爱立信笔试

来源:互联网 发布:autocad mac 中文版 编辑:程序博客网 时间:2024/05/04 08:26

1、堆和栈的区别、分配方式、字节对齐

字节对齐:http://blog.csdn.net/zzffly9/archive/2007/10/26/1844421.aspx

union u2

{

char a[13];

int b;

};

cout<<sizeof(u2)<<endl;  //输出结果为16,若将char a[13];改为char a[12];那么输出结果为12,原因自己思考。

 

2、进程和线程的区别

   进程:程序的一次动态执行,是资源分配的基本单位。

   线程:进程中执行的最小的单位,是处理机调度的基本单位。同一个进程内的线程共享该进程的所有资源。

 

   互斥和同步:

   互斥:是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的。

 

同步:是指在互斥的基础上(大多数情况),通过其它机制实现访问者对资源的有序访问。在大多数情况下,同步已经实现了互斥,

特别是所有写入资源的情况必定是互斥的。少数情况是指可以允许多个访问者同时访问资源。

进程间通信:管道、消息队列、事件、信号量、socket、共享内存

3、linux的命令、shell编程、管道

grep命令

4、数据库

 

5、交换分区

  SWAP就是LINUX下的虚拟内存分区,它的作用是在物理内存使用完之后,将磁盘空间(也就是SWAP分区)虚拟成内存来使用.

  它和Windows系统的交换文件作用类似,但是它是一段连续的磁盘空间,并且对用户不可见。

  需要注意的是,虽然这个SWAP分区能够作为"虚拟"的内存,但它的速度比物理内存可是慢多了,因此如果需要更快的速度的话,并不能寄厚望于SWAP,最好的办法仍然是加大物理内存.SWAP分区只是临时的解决办法.

  qlinux下得分区推荐一个交换分区,一个根分区,其中交换分区如上所说作为redhat或者其它虚机所划分的内存不够时候来使用!

  交换分区(swap)的合理值一般在内存的2 倍左右,可以适当加大。

 

6、Linux下安装文件的方法

http://bbs.51cto.com/archiver/tid-331179.html

(1)解析Linux应用软件安装包

常Linux应用软件的安装包有三种:

    1) tar包,如software-1.2.3-1.tar.gz。它是使用UNIX系统的打包工具tar打包的。

    2) rpm包,如software-1.2.3-1.i386.rpm。它是Redhat Linux提供的一种包封装格式。

    3) dpkg包,如software-1.2.3-1.deb。它是Debain Linux提供的一种包封装格式。

    而且,大多数Linux应用软件包的命名也有一定的规律,它遵循:

    名称-版本-修正版-类型

    例如:

    1) software-1.2.3-1.tar.gz 意味着:

    软件名称:software

    版本号:1.2.3

    修正版本:1

    类型:tar.gz,说明是一个tar包。

    2) sfotware-1.2.3-1.i386.rpm

    软件名称:software

    版本号:1.2.3

    修正版本:1

    可用平台:i386,适用于Intel 80x86平台。

    类型:rpm,说明是一个rpm包。

    注:由于rpm格式的通常是已编译的程序,所以需指明平台。在后面会详细说明。

    而software-1.2.3-1.deb就不用再说了吧!大家自己练习一下。

(2)了解包里的内容

一个Linux应用程序的软件包中可以包含两种不同的内容:

    1) 一种就是可执行文件,也就是解开包后就可以直接运行的。

    2) 另一种则是源程序,也就解开包后,你还需要使用编译器将其编译成为可执行文件。

    通常,用tar打包的,都是源程序;而用rpm、dpkg打包的则常是可执行程序。

 

(3) 搞定使用tar打包的应用软件

    1. 安装:

    整个安装过程可以分为以下几步:

    1) 取得应用软件:通过下载、购买光盘的方法获得;

    2) 解压缩文件:一般tar包,都会再做一次压缩,如gzip、bz2等,所以你需要先解压。如果是最常见的gz格式,

则可以执行:“tar –xvzf 软件包名”,就可以一步完成解压与解包工作。如果不是,则先用解压软件,再执行“tar –xvf 解压后的tar包”进行解包;

x 解压缩

z 具有gzip属性

v 显示详细信息

f 使用档案文件或设备,这个选项通常是必选的

    3) 阅读附带的INSTALL文件、README文件;

    4) 执行“./configure”命令为编译做好准备;

    5) 执行“make”命令进行软件编译;

    6) 执行“make install”完成安装;

    7) 执行“make clean”删除安装时产生的临时文件。

(4) 搞定使用rpm打包的应用软件

    rpm可谓是Redhat公司的一大贡献,它使Linux的软件安装工作变得更加简单容易。

    1. 安装:

    我只需简单的一句话,就可以说完。执行:

   rpm –ivh rpm软件包名

    更高级的,请见下表:

     rpm参数 参数说明

   -i 安装软件

   -t 测试安装,不是真的安装

   -p 显示安装进度

   -f 忽略任何错误

   -U 升级安装

   -v 检测套件是否正确安装

  2. 卸载:

    我同样只需简单的一句话,就可以说完。执行:

      rpm –e 软件名

    不过要注意的是,后面使用的是软件名,而不是软件包名。例如,要安装software-1.2.3-1.i386.rpm这个包时,应执行:

      rpm –ivh software-1.2.3-1.i386.rpm

    而当卸载时,则应执行:

      rpm –e software。

 

(5)  搞定使用deb打包的应用程序

    这是Debian Linux提供的一个包管理器,它与RPM十分类似。但由于RPM出现得更早,所以在各种版本的Linux都常见到。

  而debian的包管理器dpkg则只出现在Debina Linux中,其它Linux版本一般都没有。我们在此就简单地说明一下:

    1. 安装

        dpkg –i deb软件包名

      如:dpkg –i software-1.2.3-1.deb

    2. 卸载

         dpkg –e 软件名

       如:dpkg –e software

 

 

 

爱立信笔试题:N多到题目,涉及了C++、java、数据库、涉及模式、Linux、shell编程等多个方面,要学习的东西还有很多啊。

 

1、请说出命令 ./tesh.sh和 .test.sh的区别?

./tesh.sh表示在当前的工作目录中查找tesh.sh文件,然后执行。

.test.sh是在环境变量中对应的目录位置查找test.sh文件,然后执行。这种方式必须执行export PATH=.:$PATH,也就是将

当前工作目录加到环境变量中。

 

2、这样添加一个路径到$path中。

 

查看当前环境变量:

echo $PATH

 

有两种设置环境变量 PATH 的方法。第一种适用于为单一用户设置 PATH,第二种是为全局设置 PATH。

1.在用户主目录下有一个 .bashrc 文件,可以在此文件中加入 PATH 的设置如下:

export PATH=”$PATH:/your path1/:/your path2/…..”

注意:每一个 path 之间要用 “:“ 分隔。

注销重启 X 就可以了。

 

2.在 /etc/profile中增加。

PATH="$PATH:/home/zhengb66/bin"

export PATH

如果要使得计时生效,使用 source 命令

source .bashr

完成。

 

3、编写一个shell程序。将一个/tmp目录下以fuck开头的文件中的www.baidu.com替换为www.baidu.cn,并将这些文件拷贝到/etc/tmp文件夹下。

 

find ./useful/ -name "fuck*" | xargs sed -i "s/www.baidu.com/www.baidu.cn/g"find ./useful/ -name "fuck*" | xargs -i cp {} /tmp/

4、关于Linux的系统运行级别。

 

标准的Linux运行级为3或者5,如果是3的话,系统就在多用户状态。如果是5的话,则是运行着X Window 系统。如果目前正在3或5,而你把运行级降低到2的话,init就会执行K45named脚本。

 

不同的运行级定义如下:(可以参考Red Hat Linux里面的/etc/inittab)

 

缺省的运行级,RHS用到的级别如下:

 

# 0 - 停机(千万不要把initdefault设置为0 );

 

# 1 - 单用户模式;

 

# 2 - 多用户,但是没有NFS;

 

# 3 - 完全多用户模式;

 

# 4 - 没有用到;

 

# 5 - X11;

 

# 6 - 重新启动(千万不要把initdefault设置为6 )。 

 

5、关于多态、以及虚函数默认参数的调用(可以参考effective C++),默认参数使用的是基类的。

class Parent

{

public:

virtual void Foo(int ele = 5)

{

cout<<"Parent::Foo()"<<ele*ele<<endl;

}

virtual void f(double d = 0.0)

{

cout<<"Parent::f(double)"<<endl;

}

};

 

class Child : public Parent

{

public:

virtual void Foo(int ele = 10)

{

cout<<"Child::Foo()"<<ele*ele<<endl;

}

virtual void f(complex<double> d)

{

cout<<"Child::f(complex<double>)"<<endl;

}

};

 

int main()

{

Parent *p1 = (Parent *)new Child;

p1->Foo(5);

p1->f(2.0);

 

Child *c = new Child;

Parent *p2 = c;

p2->Foo();

p2->f();

 

Child child;

child.Foo();

child.f(2.0);

}

 

 

6、设计模式的一个道题(一段代码让说出是说明模式)。关于工厂方法模式的。

 

 

7、关于Java的继承、多态的基础题目。Java完全不会。

 

8、采用多线程输出“ABBABBABB..........”.

 

 

9、数据机构是:给出前序、中序,让构造出该二叉树。

 

10、一些关于内存泄露的。

 

11、算法题:斐波那契数列的的递归实现。

 

12、数据库的题目想不清楚了。

 

13、解释虚函数指针、虚函数表。根据一段代码,画出每个类的虚函数指针、虚函数表。

 

14、makefile中= 和 :=的区别是什么?以及一些echo输出的问题,编写一个makefile文件编译一些文件。

http://www.linuxsir.org/main/doc/gnumake/GNUmake_v3.80-zh_CN_html/make-06.html

 

 

15、

unsigned float2bit(float f)

{

union

{

float f;

unsigned u;

}temp;

temp.f = f;

return temp.u;

}

int main()

{

cout<<float2bit(4.5)<<endl;  输出一个很大的数。

return 0;

}