当前位置: 首页 > 面试经验 >

京东(23届春招)前端笔经

优质
小牛编辑
80浏览
2023-03-28

京东(23届春招)前端笔经

3.4  19:00  笔试

平台:牛客;时间:120min;总分:100分

选择题2分*20=40分,编程3道15分+20分+25分=60分

1、断开一个TCP连接有四次挥手,第一次挥手数据包

A 主动方进入EIN WAIT 1状态 B 被动进入LAST ACK状态

C 被动方进入CLOSE WAIT状态 D 主动方进入TIME DAIT状态

2、下列关于内存泄的说法错误的是? D

A 在非严格模式下,若给一个变量赋值,但却没有声明它时,该变量会挂载到 window 对象上,造成全局变量污染

B 定时器的使用可能会导致内存泄露 C 闭包中重复创建的变量可能引起内存泄露

D 因为事件监听是绑定到 DOM 元素上的,所以不会引起内存泄露

4、{9,54,74,21,30},按照H(k)=k%5,填充到哈希表0 1 2 3 4,利用线性探测法54填装位置 A

A 0 B 哈希表溢出 C 3 D 4

5、看代码题忘了

6、字符 X,Y,Z,N,以任意方式进栈,任意出栈,有多少入栈排列能得到XYZN b

A 12 B14 C13 D15

栈的入栈和出栈的顺序规律是先进后出,所以出栈的可能数目跟入栈的可能排列数目是一致的。

穷举法

1个元素入栈出栈一种可能记作f(1) = 1;

2个元素入栈出栈有两种可能记f(2) = 2;

3个元素入栈,考虑最后一个元素,出栈为第一个位置1种,第二个位置2种,第三个位置f(2)种,记作f(3) = 5;

4个元素入栈,考虑最后一个元素,出栈为第一个位置1种,第二个位置(前面只有一个元素pop出去了,在3个push任意位置插入一个pop)有3种可能,第三个位置(说明已经pop出去两个元素,考虑1-3三个数,pop其中两个,若两个连续有前面f(2)种,不连续只有一种,即num_pop(1,2) = 2,num_pop(2,3)=2,num_pop(1,3)=1)有共5种可能,第四个位置pop即为前面f(3)的值,即f(4) = 1 + 3 + 5 + 5 = 14种。

5个元素入栈,考虑最后一个元素,出栈为第一个位置1种,第二个位置(前面有4个元素选择一个pop)有4种可能,第三个位置(说明已有两个元素pop出去,若为pop的为1,2有2种,1,3有一种,1,4有1种,若pop的为2,3有2种,pop2,4有1种,pop3,4有2种)共计9种,第四个位置(说明已经pop出去三个元素,那么假设1未被pop,有f(3)种,2未被pop有f(2)种,3未被pop有f(2)种,4未被pop有f(3)种)共14种,第五个位置即f(4),因此f(5) = 1 + 4 + 9 + 14 + 14 = 42种。

7、div border-radius:50%形状 圆形

8、最快得到10000个数据中第3小的元素的排序方法 选择排序

9、promise.then(函数1扔出错误,函数2).catch(函数3)判断3个函数执行结果

promise多个then 回调,catch 方法写在最后:如果catch在最后,中途then中报错后面代码就不会执行。 .then .catch。catch方法写在中间:前面的then中报错后,catch还是返回一个promise所以后面调用then还是会执行 .then .catch .then

10、let list = [1, 2].push(3); console.info(list.push(5)); 输出结果

11、仅有3个结点值为1和3个结点值为2的大根堆,可能的结果有几种

12、justify-content与align-items那个是水平居中

13、<input>的哪个属性可以指定页面加载后是否自动获取焦点

14、数据表三表联查

15、Number字符串转数字

16、TCP可靠传输的方式

编程题

二、题目描述:

小红拿到了一个正整数n,她可以进行若干次操作,每次操作将选择一个数位,使其加1或者减1。有两条限制:

1.每个数位最多只能投作一次。2.如果选择的是9,则无法进行加1探作。如果选择的是0,则无法进行减1操作.

希望最终n成为p的倍数,输出操作结束后的整数n?

输入描述:

两个正整数 n p

输出描述:

无解,输出-1。否则输出一个整数(如果操作后包含了前导零,请将前导零一起输出),代表操作结束后的熬数。有多解时输出任意即可。

样例 输入 72 7 输入 101 123456789 输入 40 9

输出 63 输出 000 输出 -1

三、题目描述:

小红定义一个数组的权值为,该数组最人值的出现次数。例如[2,3,3,4]权值为1,[2,3,3,3]权值为3。小红想知道,长度为n,且每个元素范围都在[1,n]的数组这些数组的权值之和是多少?该数可能过大,请对109+ 7取模。

输入描述:

1个正整数 n

输出描述:

所有数组的权值之和

示例 输入 2 可能的数组有 [1,1] [2,2] [1,2] [2,1],3,3,4]

输出 6

解题思路:从1到n用排列组合

1:只有所有值是1才是最大值 f(1) = n 特殊处理

2: 只有所有值是1、2才是最大值,从n个个位置选1 ~ n 个2,剩余每个位置有1种选择(填充1),

f(2) = c(n)k * k+...(k从1到n)

3:只有所有值是1、2、3才是最大值,从n个个位置选k(1 ~ n )个3,剩余位置每个位置有 (当前值减一)种可能,总共有2^(n-k) ,即(cur-1)^(n-k) ,每次的权值是当前值的个数k, f(3) =c(n)k * k * (cur-1)^(n-k)+...(k从0到n)


// 计算从1-n个里面每个数为最大值时的权值
function countSingle(cur, n) {
let res = 0;
let j = cur - 1;
for (let i = 1; i <= n; i++) {
res += countSelect(n, i) * i * countJ(j, n - i);
}
return res;
}
// 计算从n个里面选出m个的可能性
function countSelect(n, m) {
let t = 1;
for (let i = n; i > m; i--) {
t = t * i;
}
return t;
}
// 计算从n个为最大值时的剩余位可能的排列数
function countJ(n, k) {
let res = 1;
for (let i = 1; i <= k; i++) {
res = res * n;
}
return res;
}
let count = function (n) {
if (n === 1) {
return 1;
}
// 初始值直接加上1的
let res = n;
for (let i = 2; i <= n; i++) {
res += countSingle(i,n)
}
console.log("res:", res)
};
count(3)
 类似资料: