- T1.关于sleep和wait,以下描述错误的是()
A sleep是线程类的方法,wait是object的方法
B sleep不释放对象锁,wait放弃对象锁
C sleep暂停线程,但监控状态依然保持,结束后会自动恢复
D wait进入等待锁定池,只有针对此对象发出notify方法获得对象锁进入运行状态
答案选D
sleep()是Thread类中的方法,而wait()则是Object类中的方法。
sleep()方法导致了程序暂停,但是他的监控状态依然保持着,当指定的时间到了又会自动恢复运行状态。在调用sleep()方法的过程中,线程不会释放对象锁。
wait()方法会导致线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象调用notify()方法后本线程才进入对象锁定池准备获取对象锁进入运行状态。
注意是准备获取对象锁进入运行状态,而不是立即获得
- T2.有一个文件ip.txt,每行一条ip记录,共若干行,下面哪个命令可以实现“统计出现次数最多的前3个ip及其次数”?
A uniq -c ip.txt | sort -nr | head -n 3
B sort ip.txt | uniq -c | sort -rn | head -n 3
C cat ip.txt | count -n | sort -rn | head -n 3
D cat ip.txt | sort | uniq -c | sort -rn | top -n 3
答案选B
下面的内容是本人学习:
sort命令对File参数指定的文件进行行排序,并将结果写到标准输出,如果File参数指定多个文件,那么sort命令将这些文件连接起来,并当做一个文件进行排序。
sort语法:
[root@www ~]# sort [-fbMnrtuk] [file or stdin]
选项与参数:
-f :忽略大小写的差异,例如 A 与 a 视为编码相同;
-b :忽略最前面的空格符部分;
-M :以月份的名字来排序,例如 JAN, DEC 等等的排序方法;
-n :使用『纯数字』进行排序(默认是以文字型态来排序的);
-r :反向排序;
-u :就是 uniq ,相同的数据中,仅出现一行代表;
-t :分隔符,默认是用 [tab] 键来分隔;
-k :以那个区间 (field) 来进行排序的意思
uniq命令可以去除排序过的文件中的重复行,因此uniq经常和sort合用。也就是说为了使用uniq,所有的重复行必须是相邻的。
语法如下:
[root@www ~]# uniq [-icu]
选项与参数:
-i :忽略大小写字符的不同;
-c :进行计数
-u :只显示唯一的行
排序文件,默认是去重
cat testfile
hello
world
friend
hello
world
hello
#cat words | sort |uniq
friend
hello
world
排序之后删除了重复行,同时在行首位置输出该行重复的次数
#sort testfile | uniq -c
1 friend
3 hello
2 world
head 命令
默认情况下,head将文件的前10行输出到标准输出。当文件的数目大于1时,head分别输出每个文件的前10行。如果没有“文件file”时,或者当“文件file”是“-”时,从标准输入中读取输入
- T3.下面两个结构体
struct One{
double d;
char c;
int i;
}
struct Two{
char c;
double d;
int i;
}
在#pragma pack(4)和#pragma pack(8)的情况下,结构体的大小分别是()
A 16 24,16 24
B 16 20,16 20
C 16 16,16 24
D 16 16,24 24
选C
- T4.头文件已经正常包含,以下代码在VS IDE上编译和运行结果是()
class A{
public:
void test(){printf("test A");}
};
int main(){
A*pA=NULL;
pA->test();
}
A 编译出错
B 程序运行奔溃
C 输出"test A"
D 输出乱码
答案选C
因为对于非虚成员函数,C++这门语言是静态绑定的。这也是C++语言和其它语言Java, Python的一个显著区别。以此下面的语句为例:
pA->test();
这语句的意图是:调用对象 pA 的 test 成员函数。如果这句话在Java或Python等动态绑定的语言之中,编译器生成的代码大概是:
找到 pA 的 test 成员函数,调用它。(注意,这里的找到是程序运行的时候才找的,这也是所谓动态绑定的含义:运行时才绑定这个函数名与其对应的实际代码。有些地方也称这种机制为迟绑定,晚绑定。)
但是对于C++。为了保证程序的运行时效率,C++的设计者认为凡是编译时能确定的事情,就不要拖到运行时再查找了。所以C++的编译器看到这句话会这么干:
1:查找 pA 的类型,发现它有一个非虚的成员函数叫 test 。(编译器干的)
2:找到了,在这里生成一个函数调用,直接调A:: test ( pA )。
所以到了运行时,由于 test ()函数里面并没有任何需要解引用 pA 指针的代码,所以真实情况下也不会引发segment fault。这里对成员函数的解析,和查找其对应的代码的工作都是在编译阶段完成而非运行时完成的,这就是所谓的静态绑定,也叫早绑定。
正确理解C++的静态绑定可以理解一些特殊情况下C++的行为。
- T5.MYSQL实现主从复制的日志是哪种?
A READ LOG
B UNDO LOG
C BINLOG
D GENERAL LOG
答案选C
mysql日志一般分为5种
错误日志:-log-err (记录启动,运行,停止mysql时出现的信息)
二进制日志:-log-bin (记录所有更改数据的语句,还用于复制,恢复数据库用)也是用于主从服务器复制的关键文件。
查询日志:-log (记录建立的客户端连接和执行的语句)
慢查询日志: -log-slow-queries (记录所有执行超过long_query_time秒的所有查询)
更新日志: -log-update (二进制日志已经代替了老的更新日志,更新日志在MySQL 5.1中不再使用)
- T6.下列有关windows系统的EXE和DLL文件说法错误的是?
A EXE和DLL文件都是PE文件
B EXE不能有导出函数,DLL可以有导出函数
C EXE有x86和x64之分,则DLL没有
D EXE可以单独运行,DLL则不行
PE文件的全称是Portable Executable,意为可移植的可执行的文件,常见的EXE、DLL、OCX、SYS、COM都是PE文件,PE文件是微软Windows操作系统上的程序文件(可能是间接被执行,如DLL)
dll是动态链接库,不可直接运行,dll提供库函数给其他程序调用。exe可执行程序,文件可以直接运行。AD正确
然而,dll和exe一样,在发布的时候,可以选择编译为x86模式,x64模式和any cpu模式。
exe完全可以和dll文件一样,导出函数,一样被调用(可以静态调用也可以动态调用)。
- T7.以下有关Http协议的描述中,正确的有?
A post请求一般用于修改服务器上的资源,对发送的消息数据量没有限制,通过表单方式提交
B HTTP返回码302表示永久重定向,需要重新URIC
C 可以通过206返回码实现断点续传
D HTTP1.1实现了持久连接和管线化操作以及主动通知功能,相比http1.0有大福性能提升
答案ACD
get是通过url的形式得到数据。
而post是通过提交表单
这两个的数据大小限制,get是有url长度的限制,但是这个是与浏览器有关
post在http协议中是没有大小限制的,起限制作用的是服务器的处理程序的处理能力。
302是临时重定向。301是永久重定向。
206是用于断点续传
- T8.
文件aaa的访问权限为rw-r–r–,现要增加所有用户的执行权限和同组用户的写权限,下列哪些命令是正确的?
A chmod a+x g+w aaa
B chmod 764 aaa
C chmod 775 aaa
D chmod o+x g+w aaa
答案选择AC
首先看清题意:
增加所有用户的执行权限为 rwx r-x r-x
然后增加同组用户的写权限 rwx rwx r-x
即为 chmod 775 aaa
如果用+-表示则:
u stands for user(文件属主).
g stands for group.
o stands for others.
a stands for all.
- T9.
下面程序的输出结果是()
#include<iosteam.h>
void main(){
int n[][3] = {10,20,30,40,50,60};
int (*p)[3];
p=n;
cout<<p[0][0]<<","<<*(p[0]+1)<<(*p)[2]<<endl;
}
A 10,30,50
B 10,20,30
C 20,40,60
D 10,30,60
答案B
p[0]表示第一行的地址,p[0]+1表示第一行首地址偏移一个地址,即a[0][1]。
int (*p)[3],p是一个数组指针,指向三个元素为一个数组的指针,(*p)表示第一行,(*p)[2]表示a[0][2]
直接在p上偏移就是行,在*p上偏移就是列
比如**(p+1)等于40 即p[1][0];
*(*p+1)等于20 即p[0][1];
其中*q=q[0]
*q+1=q[1]
- T10. 在154个元素组成有序表进行二分法查找,可能的比较次数为
A 10
B 8
C 4
D 1
答案 BCD
[log2(154)] = 7,最差的情况下找8次,所以8次及8次以内都有可能找到。
Mysql 主从复制过程中,数据交换主要是依托于mysql的Binlog,本文将对mysql的binlog进行详细的解析,从二进制来分析binlog的语义。
binlog又分为3中,statement格式,row格式,mixed格式。
statement 格式就是把所有数据变化的sql记录下来,但是如果出现now() rand()等函数时,会造成主从不一致的情况。
mixed格式是将row和statement结合起来,DML用row,DDL用statement。
row格式是比较复杂的,但是我们也是经常使用这个。