个人主页: 小卢要刷力扣题
♂️ 作者简介: 大三学生,准备找工作的人儿
推荐一款找工作神器网站: 《牛客网》 |笔试题库|面试经验|实习招聘内推|
⛪ 系列专栏: 《前端面试题》
希望大家多多支持一起进步呀!
如果文章对你有帮助的话,欢迎评论点赞收藏加关注
秋招正式批已经到来,相信不少小伙伴在为找工作而烦恼,对自己的实力不太自信,感觉好难找工作,不用怕,下面我来给各位推荐一个知名刷题网站《牛客》
牛客网,是一个集笔面试系统、题库、课程教育、社群交流、招聘内推于一体的招聘类网站。牛客是领先的数字化招聘求职解决方案服务商,牛客向企业提供校园招聘技术人才招聘一站式解决方案服务,主要包括招聘渠道服务(发校招岗位收简历) ,招聘SaaS工具服务(笔、面试 、群面系统 ),招聘传播服务(技术竞赛、广告、线上招聘专场、牛客职播。
牛客网题库中包含几万道题目,主要通过第三方购买和 UGC 的方式获得,牛客网先后尝试了直播和录播课,内容覆盖笔试题解析、面试技巧和机器学习等。
在里面可以与大家交流最近的面试心得,
如果不知道怎么面试的或者面试技巧掌握得不够牢固的小伙伴可以在牛客里面找面经来看,快速提升自己的面试能力,以更快的找到自己心仪的工作
固定首部长度是20字节;
片偏移指的是当数据长度MTU>最大传输数据长度时,无法一次传输完成,必须要进行分片;分片偏移量,其算法是划分片长/8
1480*2>2900,故1480/8=185
STUB区域
STUB区域是一些特定的区域,STUB区域的ABR不传播它们接收到的自治系统外部路由,在这些区域中路由器的路由表规模以及路由信息传递的数量都会大大减少。
STUB区域是一种可选的配置属性,但并不是每个区域都符合配置的条件。通常来说,STUB区域位于自治系统的边界,是那些只有一个ABR的非骨干区域。
为保证到自治系统外的路由依旧可达,该区域的ABR将生成一条缺省路由,并发布给STUB区域中的其他非ABR路由器。默认路由自动生成。
配置STUB区域时需要注意下列几点:
骨干区域不能配置成STUB区域。
如果要将一个区域配置成STUB区域,则该区域中的所有路由器都要配置STUB区域属性。
STUB区域内不能存在ASBR,即自治系统外部的路由不能在本区域内传播。
虚连接不能穿过STUB区域。
这一题考察的是操作系统中运行变阻塞的情况
运行态:进程占用CPU,并在CPU上运行;
阻塞态:进程因等待某件事发生而暂时不能运行
A:时间片用完,进程会从执行态转到就绪态,继续等待时间片轮转;
B:需要等待其它进程的结果,比如说需要等待数据传输,进程此时只能阻塞自己;
C:执行V操作,释放资源,是不会阻塞的;
D:执行P操作,申请资源,当资源不足时,进程会被阻塞。
内存管理有块式管理,页式管理,段式和段页式管理。现在常用段页式管理。
因此选D
二叉树是一种逻辑结构,提供了按位置访问数据的手段
像搜索二叉树,就可以快速查询数组
因此选C
iframe 用于在网页内显示网页。
因此选C
这一题考察的是CSS选择器的权重
ID选择器优先级最高background-color没有争议;在同优先级下,浏览器渲染CSS的顺序不是由HTML中Class的顺序决定的,而是由CSS文件里定义样式的顺序决定。在题目中.box-bgc要早于.box-color,因此被.box-color覆盖,最终color呈现蓝色。
转载自:https://segmentfault.com/q/1010000012904905
这个你需要通过阅读V8引擎的源代码来获取答案:
function ArrayMap(f, receiver) {
CHECK_OBJECT_COERCIBLE(this, "Array.prototype.map");
// Pull out the length so that modifications to the length in the
// loop will not affect the looping and side effects are visible.
var array = TO_OBJECT(this);
var length = TO_LENGTH(array.length);
if (!IS_CALLABLE(f)) throw %make_type_error(kCalledNonCallable, f);
var result = ArraySpeciesCreate(array, length);
for (var i = 0; i < length; i++) {
if (i in array) {
var element = array[i];
%CreateDataProperty(result, i, %_Call(f, receiver, element, i, array));
}
}
return result;
}
在这里,我们注意到,它首先是用了一个TO_OBJECT来把数组转为了对象,然后用了一个for循环在对象中查找下标,也就是这一句话:if (i in array),而当我们用new Array(4)来创建数组时,实际创建的只是一个指针,并没有创建实体的4个元素,所以当它被转化为对象时,得到是{}这样的空对象,所以这里的每一个if语句分枝都不会被执行。
但如果我们用var array = [null, null, null, null]或者哪怕array = [undefined, undefined, undefined, undefined]来做,效果都会大不一样,因为以这样方式创建的数组,转化为的对象是:
{
0: undefined,
1: undefined,
2: undefined,
3: undefined,
}
当对这样的对象进行if (i in array)操作时,可以找到相应的下标,所以可以依次执行。这就是根本原因。
这一题选B
Array.prototype.splice() 会改变原数组
第一次splice(0,1),删除了1,i++,i来到1,现在数组为[2,3]
第二次splice(1,1),删除了3
因此数组最后为[2]
这一题考察的是this的指向
谁调用this指向谁
在json里的exec方法里this指向json
因此json.val=10+1+fn(val)
fn中this指向window
因此fn返回的是4*2+1=9
json.val=10+1+9=20
val+json.val=21
因此选B
delete用来删除对象中的某个属性
var, let以及const创建的不可设置的属性不能被delete操作删除。
因此选B
[^”]*
匹配除了”的字符任意多次。
^意为除了,*意为匹配任意多次
[.”]*
匹配.或者"任意多次
.意为匹配任意字符,但放在中括号中没有这个意思,只是单纯为.字符
因此选D
贝塞尔曲线曲线由四个点 P0,P1,P2 和 P3 定义。P0 和 P3 是曲线的起点和终点。P0是(0,0)并且表示初始时间和初始状态,P3是(1,1)并且表示最终时间和最终状态。
P0:默认值 (0, 0)
P1:动态取值 (x1, y1)
P2:动态取值 (x2, y2)
P3:默认值 (1, 1)
我们需要关注的是 P1 和 P2 两点的取值,而其中 X 轴的取值范围是 0 到 1,当取值超出范围时 cubic-bezier 将失效;Y 轴的取值没有规定,当然也毋须过大。
最直接的理解是,将以一条直线放在范围只有 1 的坐标轴中,并从中间拿出两个点来拉扯(X 轴的取值区间是 [0, 1],Y 轴任意),最后形成的曲线就是动画的速度曲线。
③贝塞尔曲线的快慢
cubic-bezier(x1,y1,x2,y2)
快慢由斜率k决定,k1=y1/x1,k2=y2/x2,k>1 则为快,k<1则为慢
转载自:https://blog.csdn.net/weixin_44015669/article/details/117794215
因此选A
typeof可以检测除了null的所有基本类型。若是null,返回Object;
instanceof可以检测引用类型。null不为引用类型,所以为false
因此选A
这一题考察的二分查找
第一次找到50,第二次到100
因此选B
二分查找最多在数组中查找logn次
因此选C
队满的条件:(rear+1)%MaxSize = front(此时,循环队列中能装入的元素的个数为MaxSize)
队空的条件:rear=front
因此后序遍历为DGEBHFCA
选C
缺页中断,就是要访问的页不在主存,需要操作系统将其调入主存后再进行访问。
LRU,Least Recently Used的缩写,即最近最少使用,常用于页面置换算法,是为虚拟页式存储管理服务的。
因此缺页次数为5
在大顶堆中,第N层中的所有元素不一定比第N+1层中的所有元素都要大,堆的层级并没有大小关系
堆排和快排都是不稳定的
Sass 中声明变量需要用到 $ 符号,&
Sass可以扩展和继承
因此选BD
null 与 undefined 都可以表示“没有”,含义非常相似,
●undefined 一般都来自于某个表达式最原始的状态值,不是人为操作的结果
●null 有属于自己的类型 Null,而不属于Object类型,typeof 之所以会判定为 Object 类型,是因为JavaScript 数据类型在底层都是以二进制的形式表示的,二进制的前三位为 0 会被 typeof 判断为对象类型,而 null 的二进制位恰好都是 0 ,因此,null 被误判断为 Object 类型
ECMAScript 规范认为,既然 null 和 undefined 的行为很相似,并且都表示 一个无效的值,那么它们所表示的内容也具有相似性,即有
undefined == null; //true
NaN:not a number, 表示存储的数据的数据类型,不是一个数值
在JavaScript中,只要有NaN参与的非加法运算,结果就是NaN
JavaScript的规定,NaN表示的是非数字, 但是这个非数字也是不同的,因此,NaN 不等于 NaN,并且两个NaN永远不可能相等。
h5 新语义元素
header、nav、article、footer、section、aside、datalist、音频audio、视频video、dialog(不常用)、figure、hgroup
因此选CD
零宽断言是 正则表达式 中的一种方法
(?= 子表达式)
零宽度正预测先行断言仅当子表达式在此位置的右侧匹配时才继续匹配。
(?!exp):零宽度负预测先行断言,断言此位置的后面不能匹配表达式exp。
(?<=exp):零宽度正回顾后发断言,它断言自身出现的位置的前面能匹配表达式exp
(? 因此选ABCD
这一题考察的是操作系统里线程和进程的概念
做个简单的比喻:进程=火车,线程=车厢
●线程在进程下行进(单纯的车厢无法运行)
●一个进程可以包含多个线程(一辆火车可以有多个车厢)
●不同进程间数据很难共享(一辆火车上的乘客很难换到另外一辆火车,比如站点换乘)
●同一进程下不同线程间数据很易共享(A车厢换到B车厢很容易)
●进程要比线程消耗更多的计算机资源(采用多列火车相比多个车厢更耗资源)
●进程间不会相互影响,一个线程挂掉将导致整个进程挂掉(一列火车不会影响到另外一列火车,但是如果一列火车上中间的一节车厢着火了,将影响到所有车厢)
●进程可以拓展到多机,进程最多适合多核(不同火车可以开在多个轨道上,同一火车的车厢不能在行进的不同的轨道上)
●进程使用的内存地址可以上锁,即一个线程使用某些共享内存时,其他线程必须等它结束,才能使用这一块内存。(比如火车上的洗手间)-“互斥锁”
●进程使用的内存地址可以限定使用量(比如火车上的餐厅,最多只允许多少人进入,如果满了需要在门口等,等有人出来了才能进去)-“信号量”
因此选ABCDE
promise有三种状态
分别是
pending(进行中),resolved(已完成),rejected(失败)
因此选ACD
因此选ACD
贪心
先按照会议的结束时间排序,然后遍历会议数组,每次选择能参加的会议。
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param times int整型二维数组
* @return int整型
*/
public int AttendMeetings (int[][] times) {
// write code here
Arrays.sort(times,(a,b)->a[1]-b[1]);
int ans=0,end=0;
for(int i=0;i<times.length;i++){
if(end<=times[i][0]){
ans++;
end=times[i][1];
}
}
return ans;
}
}
从左往右模型
有两种情况,选这个物品,不选这个物品
import java.util.Scanner;
import java.util.Arrays;
class Item {
public int limit;
public int cur;
public int future;
public Item(int limit){
this.limit = limit;
}
}
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int x = sc.nextInt();
int m = sc.nextInt();
Item[] items = new Item[m];
for(int i = 0; i < m; i++){
items[i] = new Item(sc.nextInt());
}
for(int i = 0; i < m; i++){
items[i].cur = sc.nextInt();
}
for(int i = 0; i < m; i++){
items[i].future = sc.nextInt();
}
int[][] dp = new int[m][x + 1];
System.out.println(Math.max(x, dfs(items, 0, x, dp)));
}
private static int dfs(Item[] items, int index, int rest, int[][] dp) {
if(index == items.length || rest < items[index].cur){
// 钱不够或物品到头了,后面都无法再产生收益,直接返回剩下的钱
return rest;
}
if(dp[index][rest] > 0){
return dp[index][rest];
}
// 不选当前物品
int p1 = dfs(items, index + 1, rest, dp);
// 选当前物品
int p2 = 0;
for(int nums = 0; nums <= items[index].limit && nums * items[index].cur <= rest; nums++){
p2 = Math.max(p2, nums * items[index].future + dfs(items, index + 1, rest - nums * items[index].cur, dp));
}
dp[index][rest] = Math.max(p1, p2);
return dp[index][rest];
}
}