hello,最近秋招已经开了一部分了,我本科是信息安全,研究生是网络空间安全,本来想走安全,但是由于种种原因还是后面走了另一个课题——深度学习中计算机视觉相关的数据处理,实习有测试和开发两段,所以投递的岗位目前有测试开发、数据科学家和后端开发,其实有人会觉得这个岗位投的太散了,我个人觉得没有,因为数据科学其实是我的课题,而测开这些是我有的实习经验,所以这两个面试并不冲突,面试软件开发和测试开发的时候肯定也会问到我的课题,所以准备数据科学的时候也相当于在复习我的课题,而数据科学可能关注开发问题比较少,但是你有开发这个经验,他会觉得你的代码应该还不错。总之~根据现在面试的岗位总结了一下最近遇到的高频面试问题以及看到别人牛客发的一些面经~后面将会持续更新!
基础八股
1.GET和POST的区别?
get和post是HTTP协议中两种常用的请求方法。
GET请求:适合用于获取资源、查询操作等场景。适合传输少量数据,通常用于获取资源,如页面、图片、视频等。由于参数直接附加在URL中,因此GET请求的参数是可见的,并且不适合传输敏感信息。由于GET请求只是请求数据,并不对服务器的状态进行修改,因此GET请求可以被缓存,以提高页面加载速度。
POST请求:适合用于提交数据、修改服务器状态的场景。适合传输大量数据或复杂数据结构,如提交表单、上传文件等。POST请求将参数放在请求体中,因此相对更加安全,适合传输敏感信息。由于POST请求可能对服务器的状态产生影响,每次请求都需要重新获取最新数据,因此POST请求不能被缓存。
2.列表和元组的区别?
元组是不可变的序列,使用圆括号()表示。它可以包含任意类型的元素,如整数、字符串、浮点数等。由于元组是不可变的,一旦创建后,其元素不能被修改、添加或删除。元组是用于存储不可变数据的理想选择,它具有固定长度和不可变性的特点。
列表是可变的序列,使用方括号[]表示。与元组不同,列表的元素可以被修改、添加或删除。列表也可以包含不同类型的元素,并且长度可以动态调整。
3.几种集合的区别?(集合分单列集合和双列集合)
单列集合:Collection接口:list、set
list:LinkedList
ArrayList
Vector
set:HashSet
双列集合:Map接口 :Hashtable、HashMap
1、List,Set都是继承自Collection接口,Map则不是
2、List特点:元素有放入顺序,元素可重复,无需设置长度;另外list支持for循环,也就是通过下标来遍历,也可以用迭代器,
3、Set特点:元素无放入顺序,元素不可重复,重复元素会覆盖掉,(注意:元素虽然无放入顺序,但是元素在set中的位置是有该元素的HashCode决定的,其位置其实是固定的,加入Set 的Object必须定义equals()方法 ,但是set只能用迭代,因为他无序,无法用下标来取得想要的值)
4、Map以键值(key-value)的形式来存储数据的,Map 不允许重复键但允许重复值;map存在的意义就是为了快速查找,通过键的直接找到值,因为键是不可重复的。
4. 队列、堆和栈,数据结构的实现?
线性表就是数据排成像一条线一样的结构。每个线性表上的数据最多只有前和后两个方向。其实除了数组,链表、队列、栈等也是线性表结构
。而与它相对立的概念是非线性表
,比如二叉树、堆、图等。
堆:topk排序、桶排序。
栈:维护程序虚拟栈
5.cookie和session?
Session和Cookie是用于跟踪用户会话的技术。cookie 侧重信息的存储主要是客户端行为session 和 token 侧重于身份验证主要是服务端行为。
-
Cookie适用于存储少量简单信息且需要长期保存的场景如用户登录状态保持、个性化设置等;
-
Session适用于存储大量复杂信息且只需要短期保存的场景如购物车功能、表单提交等;
-
在安全性要求较高的情况下应优先考虑使用Session来跟踪用户会话并采取必要的安全措施来保护Session数据的安全;
-
在处理大量并发请求时应合理控制服务器上存储的Session数量以避免对服务器性能造成过大影响。
-
Session会有一个超时时间(默认通常是30分钟),如果在这个时间内没有收到来自该session ID的任何请求,那么服务器就会认为该Session已经过期并会将其销毁。
Cookie和Session详解_cookie session-CSDN博客
6.怎么解析Http响应?
7.说一下tcp三次握手和四次挥手?如何进行错误处理?
8.指针常量和常量指针?(笔试)
常量指针:
int const *p1;
指向常量的指针。指向地址可变,但内容不可重新赋值,内容的改变智能通过修改地址。
指针常量:
int *const p2;
指向的地址不可重新赋值,不能指向其他地址,但内容可变。
9.二叉树的前中后序?
前:根左右
中:左根右
后:左右根
10.结构体对齐问题(笔试)
条件1:结构体当前大小%自身有效对齐数=0,若无法对齐,填充字节
条件2:结构体总大小%结构体最大对齐字节数=0,若无法对齐,填充字节
11.http状态码?
12.url到网页显示过程?域名解析过程?
- URL输入:url(Uniform Resource Locator)统一资源定位符。协议+域名+路径+查询参数
- DNS解析:
- 向本地DNS缓存中查找是否已存在相应的IP地址
- 向根域名请求获取顶级域名服务器IP地址,然后逐级往下查询,直到查询到相应的本地DNS服务器。(根域名->顶级域名->次级域名)
- 建立TCP连接:浏览器通过IP地址和端口号向服务器发起连接请求,在建立TCP连接后,浏览器会发送HTTP请求报文给服务器。
- 解析HTTP/HTTPS请求:服务器收到HTTP请求报文后,会处理请求并生成相应HTTP响应报文,然后将HTTP响应报文发送回浏览器。
- 服务器响应请求,后端处理完请求后,将结果封装成JSON格式返回前端。
- 浏览器解析渲染页面:
- 使用HTML解析器将HTML文档解析成DOM树
- 使用CSS解析器将CSS文件解析成样式规则
- 根据DOM树和样式规则进行渲染
- HTTP请求结束,TCP断开连接。
13.http和rpc的区别是什么?
14.OSI七层模型?
物理层:ISO2110、IEEE802、IEEE802.2
数据链路层:以太网协议、PPP协议、ARP、RARP
- 在以太网首部找到MAC地址判断是否为自己,不是就丢弃。如果是,就在以太网首部找到数据类型传给IP/ARP
网络层:IP、RIP、ICMP、OSPF、BGP、IGMP
- 决定接收此包的路由/主机,判断IP对否,传给TCP/UDP
传输层:TCP、UDP
- 计算校验和,判断是否被破坏,然后检查是否按序号发送,完整接收后检查端口号,传给具体的应用程序。
会话层:RPC、NetBIOs
表示层:ASCII、JPEG
应用层:HTTP、FTP、SMTP、DNS、Telnet
测试开发
1.python中的多进程和多线程?除了threading 还会什么库?如何设计线程数量的?
多线程:IO密集型
多进程:CPU密集型
threading->简单多线程
cocurrent.futures: threadPoolExecutor, ProcessPoolExecutor
multiprocessing:多进程
根据IO等待时间和CPU处理时间进行线程数量设置。
2.为什么有的时候多线程被认为是没有用的?
3.黑盒测试和白盒测试区别,以及如何选择?
4.覆盖率是什么?
5.python实际开发过什么测试脚本,完整的?
6.协程是什么?和线程的区别?线程和线程池、线程创建方式、run()和start()的区别?
协程:编程者自己控制,可以设置优先级,非抢占式。
线程:操作系统调度,抢占式
yield、await、async
7.如何判断链表是否有环?
8.介绍一下如何避免死锁?读写锁和互斥锁模式区别?
读写锁(共享——独占锁):区分读操作和写操作,允许多个线程同时读(获取读锁),但是只有一个线程获取写锁进行写操作。
互斥锁(独占锁):保证任何时候只有一个线程可以访问共享资源,无论是读/写(严格串行化)
read_mode:在此模式下,第一个读者取得读写锁,所有写锁阻塞,而读者可以申请,而最后一个读者释放锁,退出该模式
write_mode:当一个写者取得读写锁,所有读者写者阻塞,当申请锁的写者释放锁后退出改模式。
9.介绍一下熟悉的排序算法?
稳定的(插冒归基)
基数排序:先比个位、再十位,再百位。
不稳定的(选快希堆)
10.pcie switch和 expander的区别?
pcie接nvme盘, expander接SAS和SATA盘。
nvme盘充分利用pcie的高带宽和低延迟,具有极高的数据传输速度和IOPS。
pcie协议由四个层组成:应用层、事务层、数据链路层、物理层。
11.linux如何查看cpu和内存使用情况?
top/free/uptime/nmon/htop
12.linux常用命令?
13.python如何进行ssh连接?
调用paramiko.SSHClient()
14.异常情况很多的情况下怎么覆盖?
等价类、判定表等
15.登陆页面如何测试/如何测试一个水杯?
车企及芯片
1.CAN报文?H264协议?
2.CAN报文是如何交互的?
3.WIFI芯片如何实现网络连接?
考察无线通信技术、加密技术、协议栈。
a.初始化:上电后进行配置(STA模式、AP模式/STA+AP),设置网络参数(SSID、密码....),配置安全协议等
b.扫描接入点(AP):
- 主动扫描/被动扫描:
- WIFI芯片主动发送探测请求帧,并等待AP响应;
- 监听无线信道上的信标帧(Baecon帧)
- 选择AP:根据(信号强度、安全性...)选择1/多个AP进行连接
c.建立连接:
- 认证和加密:WPA/WPA2
- 关联和认证
d.数据传输:
- 数据传输协议
- 数据包封装和解析
e.断开连接:
- 主动断开
- 被动断开
机器学习
1.你知道的激活函数有哪些,怎么看待sigmoid()?
2.transformer的结构和注意力机制?
3.分类问题算法有哪些?
4.logistic回归属于线性回归还是分类算法
5.介绍一下经常使用的库,pandas库了解哪些?
6.pytorch中的dataloader除了用来加载数据还可以用来干什么?
7.准确率和召回率?
8.numpy中的array和torch中的tensor有什么区别?
9.如何看待前几年虽然已经有深度学习了,但是近年突然大火?
10.transformer中图像的时序性如何实现的?
11.nlp中的单词如何处理的,图像中怎么处理文本信息?
nlp代表计算机编程来学习大量文本数据的研究,包括标记化、停止词去除、词根提取、情感分析。
12.分类和回归算法常用的损失函数有哪些?
13.优化策略有哪些?
14.评估指标?
混淆矩阵:错误率、准确率、精确率、召回率。
15.降维和PCA主成分分析?
降维可以减少给定数据集的特征数量,如:
a.特征选择
b.矩阵分解
c.manifold学习
d.autoencoder方法
e.线性判别分析(CDA)
f.主成分分析(PCA)
同时还可以减少时间和空间;用2D和3D可视化容易;空间复杂度降低。
16.偏差和方差
选择偏差:由于样本选择和非随机性导致得到的结论存在偏差。
偏差:算法过于简化
方差:模型过于复杂,导致高灵敏度和过拟合。
任何监督机器学习算法都具有低偏差和低方差,才可以达到良好的预测性能。
17.有监督学习和无监督学习?
有监督学习:输入数据有标记,主要用于预测,例如分类和回归。
无监督学习:输入数据无标记,多用于分析,密度估计和降维等。
18.标准化和归一化是什么?
标准化:将所有数据变为具有均值为0,标准差为1的正态分布。
归一化:将所有数据值转换为(0,1)之间的技术。