zoukankan      html  css  js  c++  java
  • 常见面试题

    一、

    问题:

    25匹马,5个跑道,每个跑道最多能有5匹马进行比赛,最少比多少次能比出前3名?前5名?

    参考答案:

    找出前3名最少需要7场就可以确定。首先我们将25匹⻢马分成5组,分别为ABCDE,5组分别进行比赛决出各小组名次;接着让各小组第一进行比赛决出冠军,我们假设各小组第一分别是A1, B1, C1, D1, E1,并且速度A1 > B1 > C1 > D1 > E1;接着2,3名可以在一场比赛内决出,分别由A2, A3, B1, B2, C1参赛;这样总共进行了5 + 1 + 1 = 7场; 找出前5名的思路和这个类似。

    二、

    问题:

    100亿个整数,内存足够,如何找到中位数?内存不足,如何找到中位数?

    参考答案:

    内存足够的情况: 可以使⽤用类似quick sort的思想进行,均摊复杂度为O(n),算法思想如下: 
    • 随机选取一个元素,将比它小的元素放在它左边,比它大的元素放在右边 
    • 如果它恰好在中位数的位置,那么它就是中位数,可以直接返回 
    • 如果小于它的数超过一半,那么中位数一定在左半边,递归到左边处理 
    • 否则,中位数一定在右半边,根据左半边的元素个数计算出中位数是右半边的第几大,然后递归 到右半边处理 
    内存不⾜足的情况: 
    方法⼀:⼆分法 
    思路:一个重要的线索是,这些数都是整数。整数就有范围了,32位系统中就是[-2^32, 2^32- 1], 有了范围我们就可以对这个范围进行二分,然后找有多少个数⼩于Mid,多少数大于mid,然后递归, 和基于quicksort思想的第k大⽅方法类似 
    方法二:分桶法 思路:化大为小,把所有数划分到各个小区间,把每个数映射到对应的区间⾥里,对每个区间中数的 个数进行计数,数一遍各个区间,看看中位数落在哪个区间,若够小,使⽤用基于内存的算法,否则 继续划分

    三、

    问题:

    引用和指针有什么区别?

    参考答案:

    本质:引用是别名,指针是地址,具体的: 
    • 指针可以在运行时改变其所指向的值,引用一旦和某个对象绑定就不再改变 
    • 从内存上看,指针会分配内存区域,而引用不会,它仅仅是一个别名 
    • 在参数传递时,引用会做类型检查,而指针不会 
    • 引用不能为空,指针可以为空

    四、

    问题:

    const和define有什么区别?

    参考答案:

    本质:define只是字符串替换,const参与编译运行,具体的: 
    • define不会做类型检查,const拥有类型,会执行相应的类型检查 
    • define仅仅是宏替换,不占⽤用内存,⽽而const会占用内存 
    • const内存效率更高,编译器通常将const变量保存在符号表中,而不会分配存储空间,这使得它成 为一个编译期间的常量,没有存储和读取的操作

    五、

    问题:

    define和inline有什么区别?

    参考答案:

    本质:define只是字符串替换,inline由编译器控制,具体的: 
    • define只是简单的宏替换,通常会产生二义性;而inline会真正地编译到代码中 
    • inline函数是否展开由编译器决定,有时候当函数太大时,编译器可能选择不展开相应的函数

  • 相关阅读:
    markdown文件的基本常用编写语法
    ajax练习习题一弹窗查看
    jQuery练习二球队移动
    jQuery Ajax
    jQuery练习一好友列表变色
    jq
    jQuery基础知识
    php pod
    php常用代码(一)
    php多维数组化一维数组
  • 原文地址:https://www.cnblogs.com/wangjzh/p/4797788.html
Copyright © 2011-2022 走看看