面试题——中
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;
//
- 调用存储过程
call test();