zoukankan      html  css  js  c++  java
  • 常见计算机基础笔试题总结quickstart

    【本文链接】

    1. 以下是一颗平衡二叉树,请画出插入键值3以后的这颗平衡二叉树。

    分析:考察平衡二叉树的基本操作,插入3变成不平衡,需要节点5右旋一次,节点2左旋一次。。

    2. 表达式X=A+(B*(C-D))/E的后缀表示形式可以是 XABCD-*E/+=

    如何快速解答,增加括号。

    3. 对于一个内存地址是32位、内存页是8KB的系统。0X0005F123这个地址的页号与页内偏移分别是多少。

    0x5F123/8K=a*8k+b,页号是a,页内偏移量应该是b。

    4. 如果X大于0并小于65536,用移位法计算X乘以255的值为: 255x=256x-x =   (X<<8)-X

    5. 一个包含n个节点的四叉树,每个节点都有四个指向孩子节点的指针,这4n个指针中有  4n-(n-1)=3n+1   个空指针。

    6. 以下两个语句的区别是:第一个动态申请的空间里面的值是随机值,第二个进行了初始化,里面的值为0

    int *p1 = new int[10];
    int *p2 = new int[10]();

    7. 计算机在内存中存储数据时使用了大、小端模式,请分别写出A=0X123456在不同情况下的首字节是,大端模式:0X12 小端模式:0X56 X86结构的计算机使用 小端 模式。

    一般来说,大部分用户的操作系统(如windows, FreeBsd,Linux)是小端模式的。少部分,如MAC OS,是大端模式 的。

    8. 在游戏设计中,经常会根据不同的游戏状态调用不同的函数,我们可以通过函数指针来实现这一功能,请声明一个参数为int *,返回值为int的函数指针:

    int (*fun)(int *)

    9. 头文件中ifndef / define / endif 是做什么用的?防止该头文件被重复引用

    10. 写出输出:char array[] = “abcde”; char* s = array;

    cout<<sizeof(array)<<strlen(array)<<sizeof(s)<<strlen(s);

    答案:6545

    11. stable排序有InsertionSort,BubbleSort,MergeSort,CountSort,RadixSort

    12. 为什么对于n非常大的时候,堆排序的效率不如快排?

     堆排序时,i 2i都是非常大的,要经常跨越长内存,甚至跨越缓存影响效率,而快排始终是在一个小范围内,而且越来越小。

    13. [0,2,1,4,3,9,5,8,6,7]是以数组形式存储的最小堆,删除堆顶元素0后的结果是:
    A. [2,1,4,3,9,5,8,6,7]

    B. [1,2,5,4,3,9,8,6,7]

    C. [2,3,1,4,7,9,5,8,6]

    D. [1,2,5,4,3,9,7,8,6]

     提示:最后一个元素7和0替换,然后将较小的child替换上去直到OK。

    14. 在公司局域网上ping www.taobao.com没有涉及到的网络协议是()

    A、ARP B、DNS C、TCP D、ICMP

    DNS是将域名www.taobao.com映射成主机的IP地址,ARP是将IP地址映射成物理地址,ICMP是报文控制协议,由路由器发送给执行ping命令的主机,而一个ping命令并不会建立一条TCP连接,故没有涉及TCP协议。

    15 http属于(应用层)协议,ICMP属于(网络层)协议。
    16. 深度为k的完全二叉树至少有(2^(k-1))个结点,至多有(2^k-1)个结点。
    17. 字节为6位的二进制有符号整数,其最小值是(-32)。

    18. 设有28盏灯,拟公用一个电源,则至少需有4插头的接线板数(9)个。

    第一个板4个口,此后每增加1个板会消耗1个原来的口,总的只增加3个口,故N个接线板能提供 1+3*N个电源口。

    19 一台指针式钟表的时钟和分钟的指向重合的时间间隔是__。

    A.720/13分钟 B. 720/11分钟 C. 60分钟D. 以上都不正确

    【分析】时针60分钟走1/12*2π的弧度,V(时针)= 1/12*2π/60 (rad/min);分针60分钟走2π的弧度,V(分针)= 2π/60 (rad/min);假设从重合开始经过了T时间又重合了,则满足:V(时针)*T+2π=V(分针)*T。

    20. 已知一个线性表(38,25,74,63,52,48),假定采用散列函数h(key) = key%7计算散列地址,并散列存储在散列表A【0....6】中,若采用线性探测方法解决冲突,则在该散列表上进行等概率成功查找的平均查找长度为(C

    A、1.5                  B、1.7                           C、2.0                       D、2.3

    依次进行取模运算求出哈希地址:

    A

    0

    1

    2

    3

    4

    5

    6

    记录

    63

    48

     

    38

    25

    74

    52

    查找次数

    1

    3

     

    1

    1

    2

    4

    74应该放在下标为4的位置,由于25已经放在这个地方,所以74往后移动,放在了下标为5的位置上了。

    由于是等概率查找,所以结果为:1/6*(1+3+1+1+2+4)= 2.0

    21.(B)设计模式将抽象部分与它的实现部分相分离。

    A、Singleton(单例)                                      B、 Bridge(桥接)                     

    C、 Composite(组合)                                   D、 Facade(外观)

    22、typedef char *String_t; 和 #define String_d char * 这两句在使用上有什么区别?
    答:typedef char *String_t 定义了一个新的类型别名,有类型检查。

    而#define String_d char * 只是做了个简单的替换,无类型检查,前者在编译的时候处理,后者在预编译的时候处理。
    同时定义多个变量的时候有区别,主要区别在于这种使用方式String_t  a,b;  String_d  c,d;    a,b ,c都是char*类型,而d为char类型
    由于typedef还要做类型检查。。#define没有,所以typedef比#define安全。

    23、OFFSETOF(s, m)的宏定义,s是结构类型,m是s的成员,求m在s中的偏移量。

    #define OFFSETOF(s,m) ((int)&(((s*)0)->m))  

    24. 为了某项目需要,我们准备构造了一种面向对象的脚本语言,例如,对所有的整数,我们都通过Integer类型的对象来描述。在计算“1+2”时,这里的“1”,“2”和结果“3”分别为一个Integer对象。为了降低设计复杂度,我们决定让Integer对象都是只读对象,也即在计算a=a+b后,对象a引用的是一个新的对象,而非改a所指对象的值。考虑到性能问题,我们又引入两种优化方案:(1)对于数值相等的Integer对象,我们不会重复创建。例如,计算“1+1”,这里两个“1”的引用的是同一个对象——这种设计模式叫做(享元模式);(2)脚本语言解析器启动时,默认创建数值范围[1,32]的32个Integer对象。现在,假设我们要计算表达式“1+2+3+…+40”,在计算过程需要创建的Integer对象个数是(40)。

    分析:1到7以及他们的和是不用创建的,从8开始,28(是1到7的和)+8=36,36需要创建,36+9=45,45需要创建…依次类推,在加数是32之前(含32)需要创建的对象是32-8+1=25,某数+32=某数之后33至40所表示的加数也要创建,这样有8个加数 + 8个和,共有16个数需要创建,注意,加数中包含36,这个我们已经创建了,所以有25+8+8-1=40个数的对象需要创建。

    n   sn

    [1,7] no   [1,3,....28]  no

    [8,32] no [36,45,...] yes

    [33,40] yes [561,...] yes

    总共25+8+8-1=40个

    25 由9,2,5,7,构造一个Huffman树,带权路径长度为 9*1+2*3+5*3+7*2 = 44

    提示:每次选取最小的2个节点组成一个新的节点。

    26 Linux中进入目录都要x权限(执行权限),查看目录下的文件需要r权限(读权限)和x权限,因为相当于进入了目录。执行目录下某个可执行文件,需要进入目录的x权限,以及对该执行文件的x权限。

    27 下面哪种排序法对12354最快? 
       A. quick sort 
       B. buble sort 
       C. merge sort

    已经部分排序,bubbleSort只需要交换一次即可。

    BubbleSort比较相邻元素a和b,如果a>b那么交换,这样一趟下来,最大的元素就到升到了最后。

    28 依赖:用到了别人的方法或变量;关联:对称的,好比你是我的朋友,我也是你的朋友;

    聚合:非对称的,员工与公司就是聚合关系,还有一个重要特点就是生命周期可以不同,员工离开了公司还是可以活的;组合:生命周期一致,好比人与心脏,一个没了另一个也没了。强度:依赖<关联<聚合<组合。

    29 有两个线程,最初 n=0,一个线程执行 n++; n++; 另一个执行 n+=2; 问,最后可能的 n 值?()

    A. 1 
    B. 2 
    C. 3 
    D. 4

    解析:大家要知道 C语言中的 ++ 和 += 并不是原子操作,而是通过多条微程序组成的,因此 ++ 和 += 在执行过程中可能被中断的

    第一种可能情况:现在假设两个线程没有并行顺序执行的那么结果显然是 4。

    第二种可能情况:再假设现在第一个n++ 已经执行完了  但是结果还没有写回内存 这个时候 n+=2 已经全部执行完 2 写进了内存 结束 然后回到n++的写回操作 这个时候内存就从2被改回1了,后面再来一次n++  结果就为2。

    第三种可能情况: 第n+=2 先读取n的值到寄存器 即0入寄存器 这个时候被中断   第一个n++开始执行 并直到结束 内存被改成了1 ,然后 n+=2 继续执行 结束后内存变为2  第二个n++再执行 结果就是3

    30 一棵二叉树的先序遍历是 f b a c d e g h,中序遍历是 a b d c e f g h,问后序遍历是什么

    答案:adecbhgf

    解析:根据先序遍历和中序遍历,我们可以构建一颗二叉树:

    31  在一个 big endian 的 32 位的计算机上,b 的结果是______

    unsigned int a = 0x1234;
    char b = *((char*)&a);

    答案:0

    解析:unsigned int是 4 个字节,0x1234 的完整表示是 0x 00 00 12 34,因为是 big endian,所以,所以 &(取地址) 的话,如果当字节看的话,取到了最左边 00 字节的地址,一定要转换成 char 看的话,值就是 0。

    32 select foo,count(foo) from pokes where foo>10 group by foo having count(*)>5 order by foo

    SQL Select语句完整的执行顺序:

    1、from子句组装来自不同数据源的数据;
    2、where子句基于指定的条件对记录行进行筛选;
    3、group by子句将数据划分为多个分组;
    4、使用聚集函数进行计算;
    5、使用having子句筛选分组;
    6、计算所有的表达式;
    7、使用order by对结果集进行排序。

    因此 合理的答案应该为 from --where-- group by-- having --select-- order by

    只有select选出了相应的表 才能对其排序,删除之类的操作

    33 UNIX系统中,目录结构采用(带链接树形目录结构)

    34 避免死锁的一个著名算法是(银行家算法)

    35 怎么理解分配延迟? dispatch lantency 分配器停止一个进程到开启另一个进程的时间

    36 入栈出栈顺序问题,卡特兰数:n=5,那么h(5) = C(2n,n)/(n+1) = 42

    37 a+b*(c-d)/e-f的逆波兰式是:abcd-*e/+f-

    38 计算 a^b << 2  ===>  a^(b<<2)

    移位运算<< >>优先级高于位运算& | ^。

     

    39 不使用其他变量,交换两个整型a,b的值
      答案:x = x+y; y = x-y; x = x-y
    40、写出float x 与“零值”比较的if语句。
      if(x>=0.000001 && x<=-0.000001)(x不为0的比较)
      float: 6位精度
      double: 16位精度

     

     

    个人学习笔记,欢迎拍砖!---by hellogiser

    Author: hellogiser
    Warning: 本文版权归作者和博客园共有,欢迎转载,但请保留此段声明,且在文章页面明显位置给出原文连接。Thanks!
    Me: 如果觉得本文对你有帮助的话,那么【推荐】给大家吧,希望今后能够为大家带来更好的技术文章!敬请【关注】
  • 相关阅读:
    go反射实现实体映射
    golang的time包:秒、毫秒、纳秒时间戳输出
    在 Gin 框架中使用 JWT 认证
    docker安装redis
    docker安装mysql5.7
    Python Web实战:Python+Django+MySQL实现基于Web版的增删改查
    apache2.4配置weblogic12c集群(linux环境)
    小BUG大原理:重写WebMvcConfigurationSupport后SpringBoot自动配置失效
    Spring源码解析02:Spring IOC容器之XmlBeanFactory启动流程分析和源码解析
    Git进阶:常用命令和问题案例整理
  • 原文地址:https://www.cnblogs.com/hellogiser/p/interview-questions-quickstart.html
Copyright © 2011-2022 走看看