后端开发口试题10(附答案)

[复制链接]
发表于 2026-1-1 13:39:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
媒介

在下首语言是golang,以是会用他作为示例。
原文拜见 @arialdomartini的: Back-End Developer Interview Questions
代码示例标题

1. 这段Javascript函数的输出是什么?

  1. function hookupevents() {
  2.   for (var i = 0; i < 3; i++) {
  3.     document.getElementById("button" + i)
  4.       .addEventListener("click", function() {
  5.         alert(i);
  6.       });
  7.   }
  8. }
复制代码
        这段JavaScript代码界说了一个名为hookupevents的函数,该函数的重要作用是为三个ID分别为"button0"、"button1"和"button2"的HTML元素添加点击变乱监听器。当这些按钮被点击时,会触发一个匿名函数,该函数会弹出一个告诫框体现变量i的值。
         然而,由于闭包的特性,当变乱处置处罚函数被实际实验时,它会访问其所在的词法作用域中当时生存的i变量的值,而不是变乱绑定时的值。在循环竣过后,i的值将是3,因此无论点击哪一个按钮,弹出的告诫框都将体现数字3。
         以是,如果实验hookupevents()函数并依次点击这三个按钮,弹出的告诫框都会体现数字3。这就是著名的JavaScript闭包陷阱的一个例子。要办理这个标题,可以使用IIFE(立即调用的函数表达式)或其他方式来捕捉每个循环迭代时i的值,如下所示:
  1. function hookupevents() {
  2.   for (var i = 0; i < 3; i++) {
  3.     (function(index) {
  4.       document.getElementById("button" + index)
  5.         .addEventListener("click", function() {
  6.           alert(index);
  7.         });
  8.     })(i);
  9.   }
  10. }
复制代码
        通过这种方式,每个按钮的变乱处置处罚函数会记着各自绑定时的index值,从而精确体现0、1或2。
2. 关于范例擦除(Type Erasure),这段Java代码的输出是什么?为什么?

  1. ArrayList<Integer> li = new ArrayList<Integer>();
  2. ArrayList<Float> lf = new ArrayList<Float>();
  3. if (li.getClass() == lf.getClass()) // evaluates to true
  4.   System.out.println("Equal");
复制代码
在Java中,由于范例擦除(Type Erasure)的机制,上述代码段的输出将会是:
  1. Equal
复制代码
        缘故因由在于Java泛型在编译后的字节码中并不生存详细范例参数信息。在运行时,        ArrayList<Integer>和ArrayList<Float>都会酿成原始的非泛型类ArrayList。因此,li.getClass()和lf.getClass()实际上都是获取到ArrayList类的Class对象,以是在运行时比力这两个类对象时,效果是相称的。
   &n
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表