美团点评2017秋招笔试真题-后台开发&系统工程师A.docx
### 美团点评2017秋招笔试真题解析——后台开发&系统工程师A #### 一、Java并发工具类的选择 题目要求找出`java.util.concurrent`包下的四个类中差别最大的一个,选项分别为:`CountDownLatch`、`Future`、`Semaphore`、`ReentrantLock`。 - **CountDownLatch**:它是一种协调工具类,允许一个或多个线程等待其他线程完成操作。例如,在某个任务开始之前,等待所有准备工作完成。 - **Future**:这是一个接口,代表了一个异步计算的结果。它可以用来获取计算的结果或者取消计算。`Future`本身不是一个具体的类,但在`java.util.concurrent`包中,`FutureTask`实现了`Future`接口,是一个具体实现。 - **Semaphore**:它是一种基于许可的同步工具类,可以控制同时访问特定资源的线程数量。当线程获取一个许可时,计数器减一;当释放一个许可时,计数器加一。 - **ReentrantLock**:这是一个可中断、可超时、非公平或公平的锁实现,提供了比`synchronized`关键字更丰富的功能。 **正确答案:B(Future)** 在这四个选项中,`Future`与其他三个类相比,其主要作用和实现机制完全不同,因此差别最大。 #### 二、字符串比较问题 题目给出了一段代码,并要求判断哪几行会被执行。代码如下: ```java String s1 = "abc" + "def"; String s2 = new String(s1); if (s1 == s2) System.out.println("===succeed==="); if (s1.equals(s2)) System.out.println("===equals()succeed==="); ``` - `s1`是通过字符串常量拼接的方式创建的,因此它被放在字符串常量池中。 - `s2`是通过`new String()`的方式创建的新对象,虽然它的内容与`s1`相同,但它们是两个不同的对象。 因此,`s1 == s2`将返回`false`,而`s1.equals(s2)`将返回`true`,因为它们的内容相同。 **正确答案:C(行4不执行,行6执行)** #### 三、糖果分配问题 题目要求将60个糖果平均分给5个小朋友,每个小朋友至少得到10个糖果,求有多少种分配方法。 这是一个组合数学的问题,可以通过组合的方法来解决。根据题目条件,每个小朋友至少得到10个糖果,那么剩余的糖果数目为60 - 5 * 10 = 10个。我们需要将这10个糖果分给5个小朋友,可以使用插板法(即球和盒子问题)来计算。 将10个糖果看作是10个相同的球,要在这些球中间插入4块板,以区分出5份。这样就转换成了从14个位置中选择4个位置放置板的问题,即求组合数C(14, 4)。 **正确答案:C(1001种分法)** #### 四、幂次尾数问题 题目询问3的102次方的尾数是多少? 我们可以观察3的幂次方的尾数规律: - \(3^1\) 的尾数为 3, - \(3^2\) 的尾数为 9, - \(3^3\) 的尾数为 7, - \(3^4\) 的尾数为 1, - \(3^5\) 的尾数又回到了 3。 可以看出,3的幂次方尾数呈现出周期性,周期长度为4。因此,\(3^{102}\) 的尾数与 \(3^{2}\) 的尾数相同。 **正确答案:A(9)** #### 五、多线程与多进程 题目考查多线程和多进程的区别。 - **线程的数据交换更快**:因为它们在同一地址空间内,共享相同的内存区域。 - **线程有自己的独立栈空间**:但这并不意味着不利于资源管理和保护,因为栈空间独立有利于隔离线程状态,而共享的数据则通过其他机制来保护。 - **多进程中,子进程可获得父进程的所有堆和栈的数据**:这是正确的,子进程继承父进程的资源。 - **进程比线程更健壮**:这是因为进程有独立的内存空间,而线程共享内存空间。但是说进程比线程更容易杀掉不一定准确。 **正确答案:ACD** #### 六、实模式与保护模式 题目考查实模式与保护模式的概念。 - **实模式**:地址计算公式为段值*16+偏移,访问的地址范围为1MB。如果访问超过1MB的地址,系统确实会发生异常。 - **决定实模式与保护模式的关键**:应该是CR0寄存器中的PE位,而不是CR1。 - **保护模式下,通过调用门,可以实现不同特权级之间的代码转移**:这是正确的。 - **保护模式下,共有4个特权级别**:0特权级的任务访问3特权级的段时确实会触发常规保护错误。 **正确答案:C** #### 七、二叉树遍历 题目要求根据给定的前序遍历和后序遍历序列判断根节点的孩子结点。 给定前序遍历序列:a,e,b,d,c,后序遍历序列:b,c,d,e,a。 根据前序遍历的特性,第一个元素是根节点,这里为a。根据后序遍历的特性,最后一个元素也是根节点,确认了根节点为a。在前序遍历中,紧跟根节点之后的第一个节点是左子树的根节点(如果有左子树的话),这里是e。在后序遍历中,根节点之前的最后一个元素是右子树的根节点(如果有右子树的话),这里没有其他元素在a之前,说明e没有右子树。 **正确答案:A(只有e)** #### 八、队列的应用场景 题目询问下列哪些操作需要使用队列作为辅助存储空间。 - **查找哈希表**:不需要队列。 - **先序遍历二叉树**:一般使用递归或栈。 - **广度优先搜索图**:需要使用队列来存储待处理的节点。 - **深度优先搜索图**:一般使用递归或栈。 **正确答案:C(广度优先搜索图)** #### 九、递归函数的时间复杂度 题目给出了一个递归函数并要求判断其时间复杂度。 ```java int fun(int n) { if (n < 2) { return 1; } return n * fun(n - 2); } ``` 该递归函数的调用模式是每次减2,直到n小于2为止。因此,递归深度取决于n的初始值,递归次数约为n/2。 **正确答案:B(O(n))** #### 十、进程间通信 题目要求选出不是进程间通信方式的一项。 - **回调**:不是进程间通信的一种标准方式。 - **共享内存**:是一种常见的进程间通信方式。 - **消息传递**:也是进程间通信的一种方式。 - **信号量**:通常用于进程同步,也可以作为进程间通信的一种手段。 **正确答案:A(回调)** #### 十一、数据库索引 题目考查关于数据库索引的描述。 - **减少磁盘空间占用**:建立索引并不会减少磁盘空间占用。 - **提升读写效率**:建立索引可以有效提升查询效率,但可能会影响写入效率。 - **使用hash表存储索引**:这不是常见的索引存储方式,常见的是B树或B+树。 - **可能导致相关字段删除效率降低**:这是因为索引维护需要额外的操作。 **正确答案:D(可能导致相关字段删除的效率降低)** #### 十二、TCP连接状态 题目询问以下哪个不是TCP连接断开的状态。 - **TIME_WAIT**:是连接关闭后的状态之一。 - **FIN_WAIT_1**:也是连接关闭过程中的状态之一。 - **SYN_SENT**:是在连接建立阶段的状态,不是断开状态。 - **FIN_WAIT_2**:同样是连接关闭过程中的状态之一。 **正确答案:C(SYN_SENT)** #### 十三、Cookie的描述 题目要求选出关于Cookie描述中错误的一项。 - **用于实现session跟踪技术**:这是Cookie的一个常见用途。 - **由服务器保存在客户端的文本文件**:大小确实限制在4KB左右。 - **通过HTTP Headers进行传输**:这是正确的。 - **HTTP请求中的Cookie是加密传递的**:Cookie通常不是加密的,除非使用了安全标志。 **正确答案:D(HTTP请求中的Cookie是加密传递的)** #### 十四、8位补码运算 题目要求判断下列运算结果存入8位寄存器中不会溢出的是哪些。 - **r1*r2**:\(FEH * F2H\) 超出了8位的范围。 - **r2*r3**:\(F2H * 90H\) 也会超出8位的范围。 - **r1*r4**:\(FEH * F8H\) 不会超出8位的范围。 - **r4*r2**:\(F8H * F2H\) 也不会超出8位的范围。 **正确答案:ACD(r1*r4 和 r4*r2)** #### 十五、Java代码编译 题目要求判断以下哪些代码片段可以编译不报错。 - **片段A**:尝试扩展不可扩展的`String`类,会导致编译错误。 - **片段B**:使用`String.format()`方法打印`null`,是可以正常编译运行的。 - **片段C**:静态方法`calculate()`试图访问实例变量`value`,会导致编译错误。 **正确答案:B** 以上是对美团点评2017秋招笔试真题的部分解析,希望能帮助理解相关的IT知识和技术细节。
- 粉丝: 27
- 资源: 147
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助