元组和list区别;字典的展开顺序和存放顺序是一致的吗?
数据集train set ,val set,test set的意义;develop set和test set可以混用吗
1、音频特征分析有哪些,特征的作用
Excel多条件查找;三次握手、tcp四次挥手;timewait这个状态是客户端还是服务端; 数据库左关联和右关联
怎么查看是否用到了索引;什么时候不会用到索引;进程和线程的区别;堆和栈的区别;redis存储登陆信息,和session共享怎么实现的;OSI七层模型;TCP和UDP的区别;Linux命令 怎么查看一个进程 ,怎么杀死一个进程,kill -9 和 kill -15 的区别;面向对象和面向过程的区别,面向对象有什么优势;线程安全的集合类有哪些;数据结构问了链表优缺点,应用场景;有没有接触过测试框架;数据库语句,一个成绩表查询总分最大的学生的id;过拟合,欠拟合介绍一下;指针和引用的区别;
1. python 常用模块
数组的数据处理方面是numpy,os对操作系统进行操作,logging模块输出运行日志,设置输出日志的等级、日志保存路径、日志文件回滚等,数学模块math,网络用pytorch中的nn.model,matplotlib画图,Seaborn画hot图.
2. Python装饰器是怎么回事
python装饰器本质上就是一个函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外的功能,装饰器的返回值也是一个函数对象(函数的指针)。装饰器函数的外部函数传入要装饰的函数名字,返回经过修饰后函数的名字;内层函数(闭包)负责修饰被修饰函数。从上面这段描述中我们需要记住装饰器的几点属性,以便后面能更好的理解:
实质:是一个函数
参数:是你要装饰的函数名(并非函数调用)
返回:是装饰完的函数名(也非函数调用)
作用:为已经存在的对象添加额外的功能
特点:不需要对对象做任何的代码上的变动
应用装饰器的场景:插入日志、性能测试、事务处理、权限校验。
3. 深度学习的框架
Keras,集成度更高,利用keras搭建基本的DNN和LSTM网络。Pytorch训练深度复卷积网络。
4. 测试框架
模块化框架,函数库结构框架,关键字驱动测试框架,数据驱动测试框架,混合型框架
5. 性能测试
关注时间性能(向目标服务器发送请求,服务器返回响应数据的时间)和空间性能(如cpu占用,内存占用,磁盘消耗)。
性能测试包括:
1) 负载测试:通过在被测系统上不断加压,直到性能指标达到极限,例如“响应时间”超
过预定指标或都某种资源已经达到饱和状态。
2) 压力测试:测试系统在一定饱和状态下,例如cpu、内存在饱和使用情况下,系统能够
处理的会话能力,以及系统是否会出现错误。
3) 并发测试:通过模拟用户并发访问,测试多用户并发访问同一个应用、同一个模块或者
数据记录时是否存在死锁或其者他性能问题。
4) 配置测试:配置测试方法通过对被测系统的软\硬件环境的调整,了解各种不同对系统
的性能影响的程度,从而找到系统各项资源的最优分配原则。
5) 可靠性测试:在给系统加载一定业务压力的情况下,使系统运行一段时间,以此检测系
统是否稳定。
7. Linux系统,用过的版本
8. 数据库用过的增删改查命令
查:单表查询用select关键字from表名,order by排序(DESC降序,ASC升序),group by分组查询(having子句分组后筛选),筛选字段不重复的值distinct。多表查询:左连接left join,查询出左表中(含有null的值)与右表中的对应,右连接查询出右表中(含有null的值)与左表中的对应
增:insert into...set...插入
改:update表名
删:delete,truncate
9. delete,truncate的区别:
truncate不能加where;delete能加where
truncate删除表后,再加入数据是从1开始;delete删除表后,再加入数据是从上次断点开始。
truncate不能回滚,无返回值;delete可以回滚,有返回值。
10. Osi七层模型,五层模型分别是啥
11. Tcp和udp区别
UDP的特点如下:无链接,不可靠,面向报文的,没有拥塞控制,UDP支持一对一、一对多、多对一和多对多的交互通信,UDP的首部开销小,只有8字节。适合实时流媒体的传输。
TCP的特点:面向连接的,一对一,可靠交付,流量控制,拥塞控制面向字节流。头部20字节,开销大。适合对可靠性要求高的FTP,HTTP。
12. Tcp报文首部
源端口,目的端口,序号(本段数据第一个比特的序号),确认号(期望的下一个数据第一个比特的序号),数据偏移(本段数据的第一个比特到整个tcp报文段起始处的距离,再除以8),标志字段(SYN,ACK,PSH(尽快交付),RST(复位,重新建立连接)),接收窗口,校验和。
13. Tcp流量控制和拥塞控制怎么实现
流量控制:接收窗口告知发送方海域多少缓冲区可以接收数据,发送窗口的大小要小于接收窗口。
拥塞控制:慢启动,拥塞避免,快恢复。慢启动时拥塞窗口由1翻倍增加,阈值设为上次发生拥塞时拥塞窗口的一半,拥塞窗口达到阈值,进入拥塞避免状态,拥塞窗口每次增加1,若连续收到三个相同ACK会进入快恢复状态,从拥塞窗口的一半开始进入拥塞避免状态。
14. 接收窗口怎么得到的
Tcp的报文头包含了窗口字段(2字节,告知本人的接收窗口剩余空间的字节数),接收窗口包含应用程序未检索到的数据以及已接收但尚未确认的数据。
16. A为在一个子网中的主机,与交换机相连接,B为在另一个子网中的主机,也与交换机相连接,A与B通信的过程。
我的想法:不同子网中主机通信,需要路由器互联。首先在子网中,A应该先通过交换机找到子网内的边界网关,已知其ip地址,先通过查找交换机本地缓存中有无其mac地址,没有的话通过ARP协议,广播其ip,等待边界网关响应,得到子网内的边界网关的MAC地址后利用交换机可以隔离冲突域的优势,找到可以抵达边界网关的MAC地址的交换机的端口,把数据发送到这个端口后,送到边界网关。通过路由寻址另一个子网的ip地址,在另一个子网内也进行地址解析和mac寻址。
17. ARP协议包含什么
目的ip和对应的目的mac
18. http报文格式,get,post,put是什么,区别是什么
请求行(字段:方法,url,http版本),首部行,实体
get,post,put是请求行中的方法,get和post都是请求资源,put是上传资源 其中get方法实体为空,get+实体=post ; get用url触发请求,长度受url限制,post请求由表单提交,长度不受限。
19. MSS和MTU
MSS(最大报文段长度)用于在TCP连接建立时,收发双方协商通信时每一个报文段所能承载的最大数据长度(不包括文段头)。在传输层,报文分片是MSS。
MTU(最大传输单元)用来通知对方所能接受数据服务单元的最大尺寸,说明发送方能够接受的有效载荷大小。在数据链路层。数据报分片成MTU。
20. 传输层数据报分片
TCP三次握手时会商量好MSS值,其实也是根据下层的MTU值确定的。MSS指定了TCP数据包的大小,TCP流数据会按照MSS大小进行“打包”,打包后加上IP报头后就是一个IP报文。IP报文在传输过程可能会分片。IP报文分片到对端后会在IP层进行组装,组成一个完整的IP报文(也是一个TCP数据包)后上传到传输层。
21. Ip地址分类,私网地址
A类地址:0.0.0.0-127.255.255.255.255
B类地址:128.0.0.0_191.255.255.255
C类地址:192.0.0.0-223.255.255.255
D类地址:224.0.0.0-239.255.255.255
E类地址:240.0.0.0-255.255.255.255
私有地址:
A类:10.0.0.0-10.255.255.255
B类:172.16.0.0-172.31.255.255
C类: 192.168 .0.0-192.168.255.255
22.划分等价类的6条原则:
(1)在输入条件规定了取值范围或值的个数的情况下,可以确立一个有效等价类和两个无效等价类
(2)在输入条件规定了输入值的集合或者规定了“必须如何”的条件的情况下,可以确立一个有效等价类和一个无效等价类
(3)在输入条件是一个布尔量的情况下,可确定一个有效等价类和一个无效等价类
(4)在规定了输入数据的一组值(假定n个),并且程序要对每一个输入值分别处理的情况下,可确立n个有效等价类和一个无效等价类
(5)在规定了输入数据必须遵守的规则的情况下,可确立一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则)
(6)在确知已划分的等价类中,各元素在程序处理中的方式不同的情况下,则再将该等价类进一步地划分为更小的等价类
23.等价类划分法应如何取值?与边界值法取值有何不同?
(1)若输入条件规定了取值范围,且取值范围上、下限之间的数据是有意义的数据,则可以确立一个有效等价类和两个无效等价类。
(2)若输入条件规定了“必须如何”的条件,则可确立一个有效等价类和一个无效等价类。
(3)若输入条件是一个布尔型量,则可以确定一个有效等价类和一个无效等价类。
(4)若输入条件是一个逻辑型量,则可为每一个输入值确立一个有效等价类且软件要对每个输入值分别进行处理,则可为每一个值确立一个有效等价类,此外还要针对这组值确立一个无效等价类。
2022/7/23 科大讯飞算法岗笔试_笔经面经_牛客网 (nowcoder.com)
2018科大讯飞的Java笔试题附带参考答案_牛客博客 (nowcoder.net)
三角形:
class Solution {
public:
int triangleNumber(vector<int>& nums) {
int count = 0, size = nums.size();
sort(nums.begin(), nums.end());
for (int i = size - 1; i >= 2; i--) {
int left = 0, right = i - 1;
while(left < right) {
if (nums[left] + nums[right] > nums[i]) {
count += (right - left);
right--;
}
else {
left++;
}
}
}
return count;
}
};
两个字符串的最长公共子串
#include<iostream>
#include<string>
using namespace std;
int main()
{
string a, b;
while (cin >> a >> b)
{
if (a.size() > b.size())
swap(a, b);
string str_m;//存储最长公共子串
for (int i = 0; i < a.size(); i++)
{
for (int j = i; j < a.size(); j++)
{
string temp = a.substr(i, j - i + 1);
if (int(b.find(temp))<0)
break;
else if (str_m.size() < temp.size())
str_m = temp;
}
}
cout << str_m << endl;
}
return 0;
}
求字符串子序列:
#include<stdio.h>
#include<string.h>
#define N 1000005
#define mod 1000000007
#define ll long long
int a[N],b[N];
ll dp[N];
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
int maxx=-1;
for(int i=1; i<=n; i++)
{
scanf("%d",&a[i]);
if(a[i]>maxx)
maxx=a[i];
}
for(int i=0; i<=maxx; i++)
b[i]=-1;
b[a[1]]=1;
dp[1]=1;
for(int i=2; i<=n; i++)
{
if(b[a[i]]==-1)
dp[i]=(2*dp[i-1]+1)%mod;
else
dp[i]=(2*dp[i-1]-dp[b[a[i]]-1]+mod)%mod;//如出现负值,处理
b[a[i]]=i;
}
printf("%lld\n",dp[n]%mod);
}
return 0;
}
C++递归实现二分查找
#include <iostream>
using namespace std;
//x为目标数据、left为数组第一个元素下标、right为数组最后一个元素下标
int recurBinarySearch(int* p, int x, int left, int right);
int main()
{
int array[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int x = 7;
int result;
result = recurBinarySearch(array, x, 0, 9);
if (result == -1)
cout << "没找到" << endl;
else
cout << "在array[" << result << "]里找到" << x << endl;
}
int recurBinarySearch(int* p, int x, int left, int right)
{
//基线条件
if (left == right)
return left;
//递归条件
if (left < right)
{
int mid = (left + right) / 2; //得到中间值
if (x < p[mid]) //小于,改变right
return recurBinarySearch(p, x, left, mid - 1);
else if (x > p[mid]) //大于,改变left
return recurBinarySearch(p, x, mid + 1, right);
else
return mid; //得到x
}
return -1;
}