🦸个人主页: 小卢要刷力扣题
🦸♂️ 作者简介: 大三学生,准备找工作的人儿
🕍 推荐一款找工作神器网站: 《牛客网》 |笔试题库|面试经验|实习招聘内推|
⛪ 系列专栏: 《前端面试题》
🐋 希望大家多多支持😘一起进步呀!
📝 如果文章对你有帮助的话,欢迎评论💬点赞👍收藏📂加关注
秋招正式批已经到来,相信不少小伙伴在为找工作而烦恼,对自己的实力不太自信,感觉好难找工作,不用怕,下面我来给各位推荐一个知名刷题网站《牛客》
牛客网,是一个集笔面试系统、题库、课程教育、社群交流、招聘内推于一体的招聘类网站。牛客是领先的数字化招聘求职解决方案服务商,牛客向企业提供校园招聘技术人才招聘一站式解决方案服务,主要包括招聘渠道服务(发校招岗位收简历) ,招聘SaaS工具服务(笔、面试 、群面系统 ),招聘传播服务(技术竞赛、广告、线上招聘专场、牛客职播。
牛客网题库中包含几万道题目,主要通过第三方购买和 UGC 的方式获得,牛客网先后尝试了直播和录播课,内容覆盖笔试题解析、面试技巧和机器学习等。
在里面可以与大家交流最近的面试心得,
如果不知道怎么面试的或者面试技巧掌握得不够牢固的小伙伴可以在牛客里面找面经来看,快速提升自己的面试能力,以更快的找到自己心仪的工作
第一题考察的是文件的权限
对一个文件的访问,常由用户文件权限和文件属性共同限制
因此选A
这一题考的是网络协议
TCP和UDP的区别
连接性
TCP是面向连接的协议,在收发数据前必须和对方建立可靠的连接,建立连接的3次握手、断开连接的4次挥手,为数据传输打下可靠基础;UDP是一个面向无连接的协议,数据传输前,源端和终端不建立连接,发送端尽可能快的将数据扔到网络上,接收端从消息队列中读取消息段。
可靠性
TCP提供可靠交付的服务,传输过程中采用许多方法保证在连接上提供可靠的传输服务,如编号与确认、流量控制、计时器等,确保数据无差错,不丢失,不重复且按序到达;UDP使用尽可能最大努力交付,但不保证可靠交付。
报文首部
TCP报文首部有20个字节,额外开销大;
UDP报文首部只有8个字节,标题短,开销小。
TCP协议面向字节流,将应用层报文看成一串无结构的字节流,分解为多个TCP报文段传输后,在目的站重新装配;
UDP协议面向报文,不拆分应用层报文,只保留报文边界,一次发送一个报文,接收方去除报文首部后,原封不动将报文交给上层应用。
吞吐量控制
TCP拥塞控制、流量控制、重传机制、滑动窗口等机制保证传输质量;
UDP没有。
双工性
TCP只能点对点全双工通信;
UDP支持一对一、一对多、多对一和多对多的交互通信。
因此这道题选B
这一题考察的链表的知识
只有链表为空时,加入的节点即为头节点又为尾节点
因此选A
这一题考察的图的知识,只有在无环图才能进行拓扑排序
有向无环图存在拓扑排序。
拓扑排序:对有向图构造拓扑排序,解决工程是否能够顺利进行的问题。
当全部顶点都被输出,说明图中无【环】存在,是AOV网;
没有输出全部顶点,说明图中存在【环】,不是AOV网;
AOV(Activity On Vertex Network)即一种有向无环图。
因此选B
1.哈希表不保存插入顺序,不可以按照下标读取元素;
2.哈希表的查询时间是,hashmap.get(key),常数级的查询时间;
因此选D
这一题毫无疑问选哈希表
可以把数组元素作为key值,次数作为value值
这一题考察的是各种数据结构的用途
Trie树又称字典树和前缀树,听名字就知道是用来查询相同前缀的
Trie树是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高。
因此选C
这一题考察的是各个算法的用途
迪杰斯特拉算法(Dijkstra)是从一个顶点到其余各顶点的最短路径算法,解决的是有权图中最短路径问题
辗转相除法又名欧几里德算法(Euclidean algorithm),是求最大公约数的一种方法。它的具体做法是:用较大数除以较小数,再用出现的余数(第一余数)去除除数,再用出现的余数(第二余数)去除第一余数,如此反复,直到最后余数是0为止。如果是求两个数的最大公约数,那么最后的除数就是这两个数的最大公约数。
Floyd-Warshall算法是一种在具有正或负边缘权重(但没有负周期)的加权图中找到最短路径的算法
因此选B
IPv6过渡技术现在主要分为三类:双协议栈技术、协议转换技术、隧道技术
因此D是错的
这一题考察的是计算机网络
OSI七层模型:
应用层 :HTTP\SMTP\POP3
表示层:ASCII
会话层: RPC\SOCKETS
传输层: TCP\UDP
网络层: ARP\路由
数据链路层:交换机,网桥,令牌环
物理层:集线器,双绞线,光纤
默认定位是static
因此选D
浏览器在处理下面的 css 的时候,会使用 GPU 渲染
transform(当 3D 变换的样式出现时会使用 GPU 加速)
opacity 用于指定元素透明度
filter 修改所有图片的颜色为黑白
will-change 过告知浏览器该元素会有哪些变化,使浏览器提前做好优化准备,增强页面渲染性能。
因此选A
这一题考察的是对尺寸单位的掌握程度
em是相对于父元素字号大小的单位
因此选B
题中的then函数都是加在p1上的,故只能传递p1里面的resolve值。当then函数加在p2上才能打印出p2里面的resolve(2)里面的2。
因此选C
打开谷歌浏览器的控制台
Sources是源代码,可以在里面添加断点,调试代码
Element是元素,可以看到网页的结构
console是控制台,是用来查看输出的
Network是网络,可以查看请求返回的数据
本题考察隐式转换和== 第一个空数组转换为0 第二个空对象转换为NaN,NaN不等于任何东西包括他自己 第三个和第一个一样 第四个js中数组为对象,尽管数组内元素相同,但这是两个不同的对象
下列对象的布尔值是 False:
None
False (布尔类型)
所有的值为零的数:
0 (整型)
0.0(浮点型)
0L (长整型)
0.0+0.0j (复数)
“” (空字符串)
[] (空列表)
() (空元组)
{} (空字典)
值不是上面列出来的任何值的对象的布尔值都是True。
因此选C
这一题考察的js代码的执行顺序
先执行同步,再执行微服务,再执行宏服务。
微服务:promise.then
宏服务: setTimeout
所以一开始从上向下执行,输出6。同步结束,执行微服务3,4,5。微服务结束,继续从上向下执行宏服务,1,2。
所以答案634512
这一题考察的clientWidth和offsetWidth的区别,比较容易混淆
clientWidth = content + padding
offsetWidth = content + padding + border
因此选b
跨域是因为由浏览器的同源策略造成的
所谓同源指的是两个页面具有相同的协议、主机和端口,三者有任一不相同即会产生跨域
因此这一题选A
这一题考察的是语义化标签
Header是头部信息
article标签定义独立的内容
address标签定义文档或文章的作者/拥有者的联系信息
都属于语义化明确的标签
因此选D
栈是先进后出,队列是先进先出
B选项中,如果D先出来,B无论如何都在C后面
其他三项都对
这一题考察的是排序的复杂度和稳定性
快排和堆排都是不稳定的
因此选AD
这一题考察的树的概念
二叉树中,节点个数比边数多1
红黑树插入操作为O(logn)
因此选BC
这一题考察的是TCP协议运行阶段
TCP协议的运行可划分为三个阶段:连接创建(connection establishment)、数据传送(data transfer)和连接终止(connection termination)
因此选ABD
这一题考察的CSS选择器的权重
!important > 内联样式 > ID选择器 > 类选择器(属性选择器、伪类选择器)> 元素选择器(伪元素选择器)> 通配符选择器
因此选AD
A:slice不会改变原数组
B:map也不会改变原数组
C:splice(0,1)表示在删除数组的第0位删除一个元素
D:concat不会改变数组 a还是那个a
因此选ABD
A: [function,function,function,function] 因为函数没有立即执行,所以每一项但是function
B: [function,function,function,function] 因为函数立即执行,但是里面有嵌套了一层函数,所以还是个函数,所以每一项但是function
D: [0,1,2,3,4] let有块级作用域,所以写起来比较方便
D: [0,1,2,3,4] 因为var没有块级作用域,所以写法必须是 (…)(i) 才能保证每一次都是拿到对应的 i
这一题考察的this的作用域范围
A.在js的语法规则中,如果一个对象内存在方法,则该方法this指向当前对象。若方法中再次包含函数方法,则该嵌套函数指向全局。不能获取到本对象中的属性。
可以通过如下几种办法来解决此问题:
(1)定义变量,保存对象this,也就是这里的B选项
(2)通过bind/call/apply方法改变函数this指向
(3)通过箭头函数的方式,箭头函数具有默认指向父级调用对象obj的特点,就是这里的C选项
D.嵌套箭头函数this指向包含他的函数,而这个函数又是箭头函数,指向全局window
这一题考察的是扩展运算符的应用
扩展运算符(spread)是三个点(…)。它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列。
A:扩展完后依然是个数组,应该把运算符放在外面
B:要在外面再加应该扩展运算符
C:传入是数组
D:正确,可以传入1,2,3
因此答案为ABC
这一题除了D,其他的格式都不对
简单的动态规划
容易推出动态规划公式:dp[i]=dp[i-1]+dp[i-2]+dp[i-3]
import java.util.*;
public class Solution {
/**
*
* @param num_money int整型 奖金的总数,单位为元
* @return int整型
*/
public int CalulateMethodCount (int num_money) {
// write code here
int n=num_money;
int[] dp=new int[n+1];
dp[0]=1;
dp[1]=1;
dp[2]=2;
for(int i=3;i<=n;i++){
dp[i]=dp[i-3]+dp[i-2]+dp[i-1];
}
return dp[n];
}
}
用一个队列来记录撤销的单词
如果为撤销操作,则将撤销的单词放进队列里
如果为取消撤销操作,则将队列里的头元素添加回数组里
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNextLine()){
ctrlZ(sc.nextLine());
}
}
private static void ctrlZ(String str) {
List<String> list = new ArrayList<>(Arrays.asList(str.replace("\t", " ").split(" ")));
Deque<String> deque = new LinkedList<>();
for (int i=0;i<list.size();i++){
if("undo".equals(list.get(i))){
list.remove(i--);
if(i>=0){
deque.push(list.get(i));
list.remove(i--);
}
}else if("redo".equals(list.get(i))){
list.remove(i);
if(!deque.isEmpty()){
list.add(i++,deque.pop());
}
i--;
}else{
deque.clear();
}
}
System.out.println(String.join(" ",list));
}
}