- 实现乘法运算(不能用乘、除、取余操作),假设a*b
每次b向右移一位,a向左移一位
如果b的此位为1,则结果ans相应的加上a。
直到b为0, 结束迭代。
int Multi(int a, int b){
int result = 0;
while(b){
if(b&1)
result += a;
a = a << 1;
b = b >> 1;
}
return result;
}
按键“K”,在屏幕上显示经过了哪些操作?(计算机组成原理)
- 键盘下有“光线”,如果没有任何按键时,光线可以到达键盘所有位置。当按下某一键时,光线被挡住,扫描会发现该信号,即扫描码;
http://blog.csdn.net/bingjing12345/article/details/7830710 - 将扫描码存放到缓存区, 产生中断;
- 识别键盘中断,将cpu的中断寄存器的特定位置置为1;
- cpu处理完一条指令后,发现有中断,识别中断分配给对应的键盘处理程序;
- 键盘处理程序到缓冲区取出扫描码,然后转化为相应的ASCII码;
- 将ASCII转为为一个光点矩阵,作为显示屏的输入信号,在屏幕中显示。
- 键盘下有“光线”,如果没有任何按键时,光线可以到达键盘所有位置。当按下某一键时,光线被挡住,扫描会发现该信号,即扫描码;
BIOS启动过程(扩展于第二题)
http://www.cnblogs.com/Braveliu/p/3305975.html- 按下开机键,电源会向主板和其他设备供电;
- CPU电压不稳定,初始化,直至电压稳定;
- POST(Power on self test 加电检测), 检测系统中关键设备是否正常,如内存、显卡;
- 查找显卡,显示显卡信息;查找其他的BIOS;查找并显示系统的BIOS信息;检测查找CPU的信息;
- 检测硬件设备,如硬盘、串口等等;
- 检测即插即用的设备(如U盘),为这些设备分配中断、IO等资源;
- 显示系统配置列表;
- 更新ESCD(Extended System Configuration Data,扩展系统配置数据)
- 根据用户指定的启动顺序从软盘、硬盘或光驱启动。(如C盘的IO.SYS)
怎样检测TCP的610端口是否打开?
ps aus| grep tcp
ps aux | grep 610
netstat -tlp | grep 610
netstat -aon | grep 610
telnet 该主机ip 610 是否可以连接
如果是windows,可以查看任务管理器,PID中是否有610端口,且是否为tcp服务
向该主机的610端口请求tcp连接,看是是否有回应
编程建立tcp服务,且端口号设为610,看是否会报端口占用的错误TCP为什么三次握手、四次分手?(计算机网络)
- TCP不两次握手的原因: 防止死锁,防止等待浪费资源。A向B发送连接请求,B收到后发送回应,但是如果B发送回应,但是该回应丢失,则A一直在等待B的回应,而忽略B发送的数据,而B则认为A已经成功收到B发送的回应而给A发送数据,而这些数据又被A忽略,B认为A没有收到数据,所以认为数据丢失一直给A发送同样的数据,形成死锁。
- TCP不四次握手的原因是:三次握手已经可以确定通信双方都处于ready状态,则无需再进行额外的四次确认。
- TCP四次分手的原因:TCP是全双工模式,A发送中断,只能表明A已经没有数据向B发送,但是B可能还有数据要向A发送。为了使数据完整发送,所以四次分手。(和面试时候说的差不多,其他的原因真想不出来了)
A、B数组中,每个数组中存放数据不同,是否A经过一次变化(增加序列、删除序列、交换序列)变成B序列。
思路: 关键点,找到需要改变的片段开始和结尾位置。
- 求A、B数组长度,lena,lenb;
- 如果lena == lenb(则说明,可能交换某两段数据可以实现A转化为B),思路即为面试时的思路,如果不符合,则返回false,反之true;
- 如果lena < lenb (则说明,可能A + 某片段 = B),思路即为面试时的思路,如果不符合,则返回false,反之true;
- 如果lena > lenb (则说明,可能B + 某片段 = A),思路同上。