金山WPS2017前端校招笔试题解析

版权申诉
0 下载量 127 浏览量 更新于2024-09-09 收藏 193KB PDF 举报
"金山WPS2017前端校招笔试题目分享,包含JavaScript基础知识及算法问题" 金山WPS在2017年的校园招聘中为前端岗位设计了一套笔试题,这份试卷主要考察应聘者的JavaScript基础以及对于编程逻辑的理解。以下是其中几道题目及其解析: 1. 这道题目涉及JavaScript变量提升和函数声明提升的概念。首先,`console.log(a)`在任何赋值操作之前,输出`undefined`。然后,函数声明`function setA(){...}`会被提升到顶部,因此`setA()`会执行这个函数体内的代码,将`a`赋值为3。但在`setA()`调用之前,`vara = 1`的赋值操作已完成,所以`console.log(a)`输出1。最后,调用`setA()`改变`a`的值为2,`console.log(a)`输出2。 2. 这个题目考察的是异步执行和闭包的知识。使用`for`循环遍历从0到9,每次递增1,将当前的`i`值传入一个立即执行的匿名函数,并在该函数内部设置`setTimeout`。由于`setTimeout`是异步执行的,当`for`循环结束后,`i`的值为9,所有`setTimeout`回调中的`j`都将是9,但它们会在不同的1秒间隔内依次输出。通过闭包保存每个`i`的值,确保正确输出。 3. 对于第三题,由于题目描述缺失,无法提供具体解答,但根据描述,这应该是一个相对简单的JavaScript问题。 4. 这道题目涉及到对象属性的引用和`toString`方法。在JavaScript中,当试图将一个对象作为键时,它会被转化为字符串`"[object Object]"`。所以,`a[b]`和`a[c]`实际上都是`a["[object Object]"]`,因此`a[b]`的输出是`456`,因为最后对`a[c]`进行了赋值。 5. 去重问题可以通过多种方式解决,例如使用ES6的`Set`数据结构,或者创建一个空对象来存储已出现过的元素,从而避免数组中的重复项。这是一种常见的面试题,目的是检查开发者对于数据结构的理解和利用。 6. 最后一题是字符串匹配和算法问题。要求找出一个字符串`s1`在经过打乱顺序并添加一个字符后形成的`s2`中新增的那个字符。可以采用滑动窗口或双指针等算法,比较两个字符串的差异,找到唯一多出的字符。这个问题的关键在于如何有效地遍历字符串并进行比较,以达到接近O(n)的时间复杂度。 这些题目展示了WPS对于前端开发人员期望的基本技能,包括JavaScript的核心概念、异步处理、对象和数组操作,以及字符串处理和算法能力。对于准备前端面试的人来说,这些都是非常有价值的练习。

解释下Peoplesoft的这段代码 Component array of array of any &tmpArray; Local Record &rec1, &rec2; &rec1 = CreateRecord(Record.HIK_IPSANRS_TBL); &rec2 = CreateRecord(Record.HIK_IPSAN_TBL); Local Rowset &rsLvl1, &rsDtl; Local number &i, &j; Local Row &row; &rsLvl1 = GetLevel0()(1).GetRowset(Scroll.WPS_STR_INF_TBL); For &i = 1 To &rsLvl1.ActiveRowCount &rsDtl = &rsLvl1(&i).GetRowset(Scroll.WPS_STR_DTL_TBL); For &j = 1 To &rsDtl.ActiveRowCount &row = &rsDtl(&j); If Not &row.IsDeleted Then If All(&row.WPS_STR_DTL_TBL.WPS_GP_AMT_ID.Value) Then &rec1 = CreateRecord(Record.WPS_IPSANRS_TBL); &rec1.WPS_GP_AMT_ID.Value = &row.WPS_STR_DTL_TBL.WPS_GP_AMT_ID.Value; &rec1.EFFDT.Value = &row.WPS_STR_DTL_TBL.EFFDT.Value; If &rec1.SelectByKey() Then &rec1.WPS_GP_AMT_ID.Value = &row.WPS_STR_DTL_TBL.WPS_GP_AMT_ID.Value; &rec1.EFFDT.Value = &row.WPS_STR_DTL_TBL.EFFDT.Value; &rec1.STATUS.Value = &rsLvl1(&i).WPS_STR_INF_TBL.STATUS.Value; &rec1.Update(); Else &rec1.WPS_GP_AMT_ID.Value = &row.WPS_STR_DTL_TBL.WPS_GP_AMT_ID.Value; &rec1.EFFDT.Value = &row.WPS_STR_DTL_TBL.EFFDT.Value; &rec1.STATUS.Value = "A"; &rec1.Insert(); End-If; &rec2 = CreateRecord(Record.WPS_IPSAN_TBL); &rec2.WPS_GP_AMT_ID.Value = &row.WPS_STR_DTL_TBL.WPS_GP_AMT_ID.Value; &rec2.EFFDT.Value = &row.WPS_STR_DTL_TBL.EFFDT.Value; &rec2.WPS_STORID.Value = &row.WPS_STR_DTL_TBL.WPS_STORID.Value; &rec2.WPS_GP_WAGECODE.Value = &row.WPS_STR_DTL_TBL.WPS_GP_WAGECODE.Value; If Not &rec2.Insert() Then &rec2.Update(); End-If; End-If; End-If; End-For; End-For;

2023-06-13 上传