面试题——中

1. static关键词的用途

  这个简单的问题很少有人能回答完全。在C语言中,关键字static 有三个明显的作用:
  1). 在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。
  2). 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。
  3). 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。

2. 指针和引用的区别

  (1) 引用必须被初始化,指针不必。
  (2) 引用初始化以后不能被改变,指针可以改变所指的对象。
  (3) 不存在指向空值的引用,但是存在指向空值的指针。

3. 写出下列代码的输出

4. 以下代码输出结果

#include <stdlib.h>
#include <stdio.h>
#include <stdarg.h>
int main()
{
    int a,b,c,d;
    a=10;
    b=a++;
    c=++a;
    d=10*a++;
    printf("%d,%d,%d,%d",a,b,c,d);
    
    return 0;
}

  答案:13,10,12,120

5. 以下三个指针的区别

  (1). char * const p;意思a 是一个指向整型数的常指针(也就是说,指针指向的整型数是可以修改的,但指针是不可修改的)

  (2). char const * p;意味着a 是一个指向常整型数的指针(也就是,整型数是不可修改的,但指针可以)

  (3). const char * p;意味着a 是一个指向常整型数的指针(也就是,整型数是不可修改的,但指针可以)

6. 以下代码中两个sizeof的用法有问题吗?

#include <stdio.h>
void Uppercase (char str[])
{
    for(size_t i=0;i<sizeof(str)/sizeof(str[0]);i++)
        if(str[i]>'a'&&str[i]<'z')
            str[i]-=('a'-'A');
};
main()
{
char str[]="abcDe";
printf("str字符长度为%d",sizeof(str)/sizeof(str[0]));
Uppercase(str);
printf("str字符为%s",str);
}

 

7. 进程间通讯方式有几种?

  管道 命名管道 消息队列 共享内存

8. 文件中有一组整数,要求排序后输出到另一文件中

  

#include <iostream>
#include <vector>
#include <fstream>

using namespace std;
void BubbleSort(vector<int>& array)
{
    for (int i=0;i!=array.size();i++)
    {
        for (int j=array.size()-1;j!=i;j--)
        {
            if (array[j]<array[j-1])
            {
                swap(array[j],array[j-1]);
            }
        }
    }
}

void swap(int* a,int* b)
{
    int temp;
    temp=*a;
    *a=*b;
    *b=temp;
}
void main()
{
    vector<int> data;
    ifstream in("c:\\data.txt");
    if (!in)
    {
        cout<<"file error!"<<endl;
        exit(1);
    }
    int temp;
    while(!in.eof())
    {
        in>>temp;
        data.push_back(temp);
    }
    in.close();
    BubbleSort(data);
    ofstream out("c:\\result.txt");
    if (!out)
    {
       cout<<"file error!"<<endl;
       exit(1);
    }
    for(int i=0;i<data.size();i++)
        out<<data[i]<<"  ";
    out.close();
}

9. 指出下列代码中错误//

10. Linux系统中添加删除用户、设置密码的方式、设置IP地址的方式

  添加一个test新用户  useradd test或者adduser test

  (1.添加完成后,打开/etc/passwd,可以看到最后一行新增了一行记录:test  2.在根目录下/home/下新增一个test的文件夹)

  (查看test新用户的密码:nano /etc/shadow,显示为!!,表示密码是不可用的)

  (需要对新用户test设置一个新的密码,有两种方法:1.使用passwd命令,使用passwd设置密码?passwd test,在/etc/shadow内显示乱码。

  2.使用usermod命令,使用usermod设置test密码为111111,执行以下命令:usermod -p 111111 test 。

  打开/etc/shadow,密码在/etc/shadow就可以看到,就是所谓的明码,很危险,其他人很容易获得此账号密码。)

11. Linux系统中查看磁盘空间、进程情况检查、日期查看的命令

    df -hl 查看磁盘剩余空间

  df -h 查看每个根路径的分区大小

  du -sh [目录名] 返回该目录的大小

  du -sm [文件夹] 返回该文件夹总M数

  ps-aux  

12. 操作系统中,设置NTP服务的方式

  ubuntu server ntp时间同步服务器安装及使用
  一、服务端
  1 apt-get install ntp
  2 启动服务/etc/init.d/ntp start
  3 vi /etc/ntp.conf 修改为如下
  restrict default nomodify notrap noquery
  restrict 127.0.0.1
  restrict 网段 mask 255.255.255.0 nomodify
  server 0.pool.ntp.org
  server 1.pool.ntp.org
  server 2.pool.ntp.org
  server 127.127.1.0 # local clock
  fudge 127.127.1.0 stratum 10
  driftfile /var/lib/ntp/drift
  broadcastdelay 0.008
  keys /etc/ntp/keys
  4 重启ntp服务
  /etc/init.d/ntp restart
  二、客户端
  先安装apt-get install ntp
  1 使用ntpdate命令
  /usr/sbin/ntpdate 10.91.0.10 //ip为10.91.0.10的ntp服务器同步时间
  2 设置定时同步。
  vi /etc/crontab
  30 01 * * * /usr/sbin/ntpdate 10.91.0.10
  系统便会在每天早上1点30分自动将系统时间同步到ntp服务器的时间。
  当然这里crontab的时间是指客户端的时间,同步后等同于ntp服务器的时间。

13. oracle 数据库正常开启关闭的操作过程

  以oracle身份运行数据库:
  $sqlplus /nolog >connect / as sysdba >startup
  遇到无法启动,执行关闭命令 启动关闭监听$lsnrctl >start >stop
  以oracle身份关闭数据库:
  $sqlplus /nolog >connect / as sysdba >shutdown immediate

14. $oracle_base 、 $oracle_home 、 $oracle_sid 各指什么意思

  ORACLE_BASE下是admin和product
  ORACLE_HOME下则是ORACLE的命令、连接库、安装助手、listener等等一系列的东东。
  ORACLE_HOME比ORACLE_BASE目录要更深一些。也就是说:ORACLE_HOME=$ORACLE_BASE/product/version
  ORACLE_SID参数则是操作系统的环境变量。在多个实例的服务器中,ORACLE通过ORACLE_SID决定启动哪个实例。
  一般,如果服务器只有一个实例,ORACLE_SID的值和实例的名称以及数据库名称相同。

15. 数据导入导出的方法

  数据的导入
  1 将D:\daochu.dmp 中的数据导入 TEST数据库中。
  imp system/manager@TEST file=d:\daochu.dmp
  上面可能有点问题,因为有的表已经存在,然后它就报错,对该表就不进行导入。
  在后面加上 ignore=y 就可以了。
  2 将d:\daochu.dmp中的表table1 导入
  imp system/manager@TEST file=d:\daochu.dmp tables=(table1)
  基本上上面的导入导出够用了。不少情况我是将表彻底删除,然后导入。
  注意:
  你要有足够的权限,权限不够它会提示你。
  数据库时可以连上的。可以用tnsping TEST 来获得数据库TEST能否连上。
  数据导出:
  将数据库中system用户与sys用户的表导出
  exp system/manager@TEST file=d:\daochu.dmp owner=(system,sys)
  exp hkb/hkb@boss_14 full=y file=c:\orabackup\hkbfull.dmp log=c:\orabackup\hkbfull.log;
  导出注意事项:导出的是当前用户的的数据,当前用户如果有DBA的权限,则导出所有数据!
  同名用户之间的数据导入:imp hkb/hkb@xe file=c:\orabackup\hkbfull.dmp log=c:\orabackup\hkbimp.log full=y
  不同名之间的数据导入:imp system/test@xe fromuser=hkb touser=hkb_new file=c:\orabackup\hkbfull.dmp log=c:\orabackup\hkbimp.log;

16. 编写存储过程(procedure)完成以下功能

  (1)若系统当前时间为星期一,则从1开始循环100次,并将结果输出;

  (2)若系统当前时间为星期二,则从1开始循环1000次,并将结果输出;

  (3)若系统当前时间为星期三的早两点,则输出当前日期时间;

  (4)若系统当前时间为星期四到星期日,则输出当前日期时间;

17. 完成使用sql完成以下操作

  建立一个数据库表,并在表中存储以下信息;

  2013/5/9  A

  2013/5/9  A

  2013/5/9  B

  2013/5/9  B

  2013/5/8  A

  2013/5/8  B

  2013/5/8  B

  2013/5/9  B

    delimiter $$

    CREATE TABLE `test` (

    `Ri_Qi` date DEFAULT NULL,

    `Deng_Ji` varchar(1) DEFAULT NULL,

    ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8$$

  insert into test (Ri_Qi,Deng_Ji)values(2013/5/9,'A',2013/5/9,A,2013/5/9,B,2013/5/9,B,2013/5/8,A,2013/5/8,B,2013/5/8,B,2013/5/9,B);

18. 编写sql语句,完成以下操作。

  A  B

  2013/5/9  2 2

  2013/5/8  1 2

  创建使用事务的存储过程

  delimiter //

  create procedure test()

  BEGIN

  DECLARE foreign_key_conflict CONDITION FOR 1452; 

  DECLARE CONTINUE HANDLER FOR foreign_key_conflict 

    BEGIN

    ROLLBACK;

    END;

  START TRANSACTION;

  SELECT  DISTINCT DengJi FROM test ; 

  SELECT Ri_Qi, Deng_Ji, SUM(Line) AS Amount

  FROM ( SELECT Ri_Qi, Deng_Ji, 1 AS Line FROM test )

  GROUP BY Ri_Qi, Deng_Ji

  ORDER BY Ri_Qi ;

  COMMIT;

  END;

  //

  1. 调用存储过程

  call test();

posted on 2014-11-15 02:53  1129496211  阅读(181)  评论(0编辑  收藏  举报