系列(二)数据结构

1、数组与链表

1)数组与链表的区别

数组在内存顺序排列,通过改变数组大小实现

链表用指针实现,上一个元素的引用指向下一个元素的存储结构,在内存中不连续。链表就是将一系列不连续的内存联系起来,将那种碎片内存进行合理的利用,解决空间的问题。所以,链表允许插入和删除表上任意位置上的节点,但是不允许随即存取。

数组和链表的区别浅析

2、bst树、avl树、rb树、b树、b+树的相关

1)二叉树、满二叉树、完全二叉树、完美二叉树的区别?

二叉树->满二叉树->完全二叉树->完美二叉树:在形状上要求越来越严格

二叉树,完全二叉树,满二叉树,完美二叉树(有图干货)

2)bst树、avl树、rb树、b树、b+树是什么?

   (bst树、avl树、rb树、b树、b+树)->(搜索二叉树、平衡二叉树、红黑树、平衡的多叉查找树、plus版的b树)

3)bst树、avl树、rb树、b树、b+树适用场景

      bst树 -> avl树 -> rb树:多叉搜索树,平衡性越来越高,适合内存中使用

      b树->b+树:多叉搜索树,适合磁盘中使用

      BST,AVL树,红黑树,B树,B+树,B*树(从map的底层实现到mysql索引原理)

4)红黑树五个特性?搜索、插入、删除操作如何实现以及时间复杂度?

      教你初步了解红黑树

5)B+树的优势

 

6)bst的第k个节点


三、Redis

1、redis数据结构:

String、LinkedList、HashMap、Set、ZSet

考察基础知识:Redis五种数据结构

2、数据淘汰机制:

定时删除、惰性删除、定期删除

考察:Redis的过期机制

3、如果Redis有1亿个key,使用keys命令是否会影响线上服务?

执行keys命令,redis会锁定,如果数据庞大的话可能需要几秒或更长,对于生产服务器上锁定几秒这绝对是灾难了

考察Keys命令性能问题:关于redis的keys命令的性能问题

4、Redis持久化方式,aod和rdb,具体怎么实现,追加日志和备份文件,底层实现原理的话知道么?

 

5、Redis分布式锁

 


四、Http协议

1、http请求完整过程

域名解析-建立tcp连接(3次握手)-浏览器发送http请求-服务器响应http请求-浏览器得到html代码-浏览器解析html代码-请求HTML代码中的资源-关闭tcp连接(四次挥手)-浏览器对页面进行渲染

HTTP请求的完全过程

2、http状态码:

分别说下:100、200、300、400、500、501、502、503、504的代表的含义

分类分类描述
1**信息,服务器收到请求,需要请求者继续执行操作
2**成功,操作被成功接收并处理(成功表示服务器成功接收了请求但未必进行处理)
3**重定向,需要进一步的操作以完成请求
4**客户端错误:请求包含语法错误或无法完成请求
5**服务器错误:服务器在处理请求的过程中发生了错误

3、DNS是什么?HTTPDNS与DNS的区别?

DNS:域名解析,过程(浏览器缓存-操作系统缓存-本地域名服务器LocalDNS-根域名服务器

HttpDNS:根据http请求获取域名的真实ip地址,解决LocalDNS的流氓行为

HttpDNS与传统DNS的区别

4、如何加速网络链接

使用长连接

5、如何维持长连接?

如何高效维持网络长连接

6、如何发送心跳包?

 

7、拥塞避免算法

 

8、get与post请求的区别

get与post本质上无区别,都是基于tcp/udp的http请求

get:参数放在url中,只发送一次请求,http header和data一并发送出去,服务器响应200(返回数据)

post:参数放在request body中,发送两次请求,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。

GET和POST两种基本请求方法的区别


五、Mysql

1、mysql实现事务的原理

 

2、Mysql索引的实现,innodb的索引原理?,myisam索引原理?b+树的索引是怎么实现的?

Mysql采用B+Tree数据结构实现索引:B+Tree只在最末端叶子节点存数据,叶子节点是以链表的形势互相指向的。

myisam索引:创建索引时会创建索引文件、数据文件、数据结构类型3个文件,叶子节点中存储的是数据地址,当找到叶子节点时会根据叶子节点存储的数据地址取数据

innodb的索引:创建索引时会创建索引文件、数据文件2个文件,叶子节点中存储的是数据值,寻找到叶子节点时,直接找到数据的值,如果不是主键索引,则叶子节点存储的是主键id

mysql索引实现原理

3、为什么用b+树做索引节点,一个节点存了多少数据,怎么规定大小,与磁盘页对应

因为B+Tree只在最末端叶子节点存数据,叶子节点是以链表的形势互相指向的。

InnoDB中一棵B+树能存多少行数据

4、主从同步如何实现?

 

5、sql语句

1)创建表、字段的sql

DROP TABLE 名字 //删除表

CREATE TABLE 名字(列名  数据类型,列明 数据类型) //创建表和列

2)查第10-20的关键字:limit

select * from tablename limit 9,10 #返回第10-20行数据 

3)表a插入表b的语句

# 整表插入
insert into t_b(select * from t_a)

# 插入指定字段
insert into t_b (col1, col2) (select col1, col2 from t_a)

 


六、Linux命令

1、查看端口号占用情况

lsof -i:端口号

lsof(list open files)是一个列出当前系统打开文件的工具

linux如何查看端口占用?

2、查看文件最后50行

tail -n 50 filename

3、查看cpu和内存的命令

top、ps、free

Linux常用命令大全

4、log日志,打印ip、port、message等信息,如何根据ip过滤日志记录条数(ip可能会重复)


七、测试用例设计

测试用例设计题主要是从功能,性能,安全,稳定,扩展,兼容等几个方面进行分析

1、百度搜索测试用例

2、B/S架构网站登陆页面测试用例设计

3、抖音注册测试

4、抖音同城功能测试
能否准确定位、试试更新定位、定位多大范围内为同城、搜索同城用户

5、测试发送图片的功能

1)功能

  • 图片大小测试:0k大小图片发送、正常要求范围的图片、超越大小上限的图片发送(大于1m)
  • 图片格式测试:png、jpg、gif、bmp
  • 图片名称测试:正常字符、带有特殊字符、超长字符、字符中带有注入的sql代码或者js代码、
  • 查看上传的图片是否正常显示、显示时是否压缩、图片是否可以缩放
  • 不选择图片直接上传、发送的图片能否正常删除、是否支持多张图片同时上传

2)性能

  • 并发调用该接口,支持的最大并发数3

3)安全性

  • 图片是否可以通过url直接、图片是否加密传输
  • 请求图片数据是否经过身份认证

6、视频加载失败如何测试

  • 1)网络连接是否正常
  • 2)测试小视频的加载
  • 3)Adobe Flash Player下载

7、朋友圈显示的测试案例

1)功能:

  • 浏览:朋友圈内容的准确性、正常滑屏浏览操作
  • 刷新:下拉刷新操作
  • 点赞、取消点赞、多次点赞取消点赞、最多可以多少次点赞/取消点赞
  • 评论朋友圈文字,回复评论

2)性能:

  • 最多支持多人并发调用朋友圈查询接口
  • 初始缓存多少条朋友圈、最多缓存多少条朋友圈、没有缓存时的加载速度、最多可以浏览器多少条朋友圈

3)安全:

  • 调用朋友圈接口时是否经过二次鉴权
  • 朋友圈内容是否加密传输
  • 敏感词的控制

4)稳定性

  • 朋友圈服务的CPU、内存等硬件资源消耗的监控

5)兼容

  • IOS系统:不同iphone版本、不同ios版本、不同ipad版本
  • Andriod系统:不同厂商的手机、不同版本

8、针对微信电话设计测试用例

1)功能

  • 拨通、拨通前取消、
  • 拨通前免提、拨通前取消免提、拨通后免提、拨通后取消免提
  • 拨通前静音、拨通前取消静音、拨通后静音、拨通后取消静音
  • 拨通前页面的缩放、拨通后页面的缩放、
  • 挂断
  • UI:接通前的友好提示信息,接通后的提示信息,头像显示

2)可靠性

  • 网络较差时无法拨通的异常情况处理
  • 对方长时间不接通的异常情况处理
  • 接通语音电话时,手机电话、其他好友语音电话、其他好友视频电话进来
  • 语音电话接通过程中断网

3)性能

  • 网络正常情况下的延时
  • 网络较差时,语音电话的卡顿程度
  • 断网时

4)安全

  • 身份认证机制
  • 语音数据加密传输
  • 防窃听机制

5)稳定性

 

9、针对12306设计测试用例

 

10、对即将上线的哇哈哈矿泉水进行测试用例设计

1)功能

  • 水瓶的材料、溶剂、瓶身厚度、瓶盖大小、瓶盖开启方式、瓶盖密封成都、瓶子颜色和透明度、承受最高温

2)性能

  • 验证功能实现的效率高低
  • 水瓶出水的流畅度
  • 倾斜多少角度开始出水

3)稳定性

  • 在不同温度下(正常室外温度、冬天室外、夏天室外、冰箱冷冻室、极限高温、极限低温),瓶盖是否能咬合紧密
  • 跌落多次瓶身是否会变形(注意不同高度、瓶身水位不同、地面不同的情况进行交叉验证)

4)可靠性

  • 反复打开瓶盖,在合理次数范围内,瓶盖是否依然可以正常扭紧,不漏水

5)安全性

  • 瓶嘴的安全性、瓶盖开启过程的安全性、是否对儿童友好
  • 加入开水是否会烫伤用户,是否有醒目的安全提示说明文字
  • 瓶身材料在常温、高温、酸、碱情况下是否会渗透对人体有害的元素
  • 瓶身材质是否可降解

6)兼容性

  • 除了可以装水,是否可以放入其他液体,比如碳酸饮料、果汁、牛奶、酱油醋等等
  • 水瓶的体积和外形是否可以放入包中、车中等

八、其他测试

1、接口测试问题解决

2、如何对上述代码进行单元测试

 


九、计算机网络

1、tcp协议

2、tcp三次握手和四次挥手?

1)三次握手:为了确认双方各自的接受和发送能力是否正常(服务端需要确认服务端和客户端、客户端也需要确认服务端和客户端的收发能力)

  • 第一次握手:客户端给服务器端发送一个SYN报文;
  • 第二次握手:服务器收到SYN报文之后,会应答一个SYN+ACK报文。
  • 第三次握手:客户端收到SYN+ACK报文之后,会回应一个ACK报文。
  • 服务器收到ACK报文之后,三次握手建立完成。

 

·第一次握手:客户端发送网络包,服务器收到了。服务器断就能得到结论:客户端的发送能力、服务端的接收能力是正常的

·第二次握手:服务端发包,客户端收到了。客户端就能得出结论:服务端的接收能力、发送能力,客户端的接收、发送能力是正常的。不过此时服务器并不能确认客户端的接收能力是否正常。

·第三次握手:客户端发包,服务器端收到了。服务端得出结论:服务器自己的发送能力,接收能力正常

2)四次挥手:

3、tcp与udp的区别

 UDPTCP
是否连接无连接面向连接
是否可靠不可靠传输,不使用流量控制和拥塞控制可靠传输,使用流量控制和拥塞控制
连接对象个数支持一对一,一对多,多对一和多对多交互通信只能是一对一通信
传输方式面向报文面向字节流
首部开销首部开销小,仅8字节首部最小20字节,最大60字节
适用场景适用于实时应用(qq聊天、在线视频、网络语音电话、视频会议、直播等即时通讯、广播通信等)适用于要求可靠传输的应用,例如文件传输、收发邮件、远程登录

目前常见的直播方案都是上行采用rtmp;下行采用http-flv或者hls,底层都是tcp。UDP理论上更适合用于直播系统,但开发效率低,周期长。

做视频直播,用UDP好还是TCP好?为什么?做视频点播呢?

抖音底层用的什么传输协议TCP,还是UDP?:为适应弱网都基于UDP做可靠传输,本质上既不是TCP也不是UDP。

4、同步IO、异步IO、阻塞IO、非阻塞IO

如何区分是同步IO还是异步IO呢?

5、xss攻击


七、Python

1、Python中的列表和元组有什么区别?

Q6、如何在Python中管理内存?

python中的内存管理由Python私有堆空间管理。所有Python对象和数据结构都位于私有堆中。程序员无权访问此私有堆。python解释器负责处理这个问题。

Python对象的堆空间分配由Python的内存管理器完成。核心API提供了一些程序员编写代码的工具。

Python还有一个内置的垃圾收集器,它可以回收所有未使用的内存,并使其可用于堆空间。

Q11、python是否区分大小写?

是。Python是一种区分大小写的语言。

Q15、Python数组和列表有什么区别?

Python中的数组和列表具有相同的存储数据方式。但是,数组只能包含单个数据类型元素,而列表可以包含任何数据类型元素。

Q17、什么是__init__?

__init__是Python中的方法或者结构。在创建类的新对象/实例时,将自动调用此方法来分配内存。所有类都有__init__方法。

Q18、什么是lambda函数?

lambda函数也叫匿名函数,该函数可以包含任意数量的参数,但只能有一个执行操作的语句。

Q19、Python中的self是什么?

self是类的实例或对象。在Python中,self包含在第一个参数中。但是,Java中的情况并非如此,它是可选的。它有助于区分具有局部变量的类的方法和属性。init方法中的self变量引用新创建的对象,而在其他方法中,它引用其方法被调用的对象。

Q21、[:: - 1}表示什么?

[:: - 1]用于反转数组或序列的顺序。

Q22、如何在Python中随机化列表中的元素?

可以使用shuffle函数进行随机列表元素。举例如下:

Q23、什么是python迭代器?

迭代器是可以遍历或迭代的对象。

Q24、如何在Python中生成随机数?

random模块是用于生成随机数的标准模块。该方法定义为:

Q29、你如何把字符串的第一个字母大写?

在Python中,capitalize()函数可以将字符串的第一个字母大写。如果字符串在开头已经包含大写字母,那么它将返回原始字符串。

Q32、什么是Python中的文档Docstrings?

Docstrings实际上不是注释,它们是文档字符串。这些文档字符串在三引号内。它们没有分配给任何变量,因此有时也用于注释。

Q33、operators中的is、not和in各有什么功能?

Operators是特殊函数,它们比较一个或多个值并产生相应的结果。其中is:当2个操作数为true时返回true(例如:“a”是'a')

not:返回布尔值的倒数

in:检查某个元素是否存在于某个序列中

Q38、为什么使用* args,** kwargs?

当我们不确定将多少个参数传递给函数,或者我们想要将存储的列表或参数元组传递给函数时,我们使用* args。**当我们不知道将多少关键字参数传递给函数时使用kwargs,或者它可以用于将字典的值作为关键字参数传递。标识符args和kwargs是一个约定,你也可以使用* bob和** billy。

Q41、什么是负指数,功能是什么?

Python中的序列是索引的,它由正数和负数组成。积极的数字使用'0'作为第一个索引,'1'作为第二个索引,进程继续使用。

负数的索引从'-1'开始,表示序列中的最后一个索引,' - 2'作为倒数第二个索引,序列像正数一样前进。

负索引用于从字符串中删除任何换行符,并允许该字符串除了作为S [: - 1]给出的最后一个字符。负索引还用于显示索引以正确的顺序表示字符串。

Q46、如何将值添加到python数组?

可以使用append(),extend()和insert(i,x)函数将元素添加到数组中。

Q47、如何删除python数组的值?

可以使用pop()或remove()方法删除数组元素。这两个函数之间的区别在于前者返回已删除的值,而后者则不返回。

 


七、java

1、数组、链表、哈希表的使用场景,时间复杂度

哈希表现在很少使用

哈希表,数组,链表应用场景分析

2、LinkedList与ArrayList的区别

ArrayList:基于动态数组的数据结构,对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。 

LinkedList:基于链表的数据结构,对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。

LinkedList几乎总是一个(性能)错误。为什么LinkedList糟透了:它使用大量小内存对象,因此会影响整个过程的性能。很多小对象都不利于缓存局部性。任何索引操作都需要遍历,即具有O(n)性能。这在源代码中并不明显,导致算法O(n)比ArrayList使用的算法慢。获得良好的表现是棘手的。即使大O性能相同ArrayList,但无论如何它可能会明显变慢。LinkedList在源代码中看到它很不耐烦,因为它可能是错误的选择。

ArrayList 和 LinkedList 的区别(底层数据结构): 什么时候使用arrayList,什么时候使用LinkedList (一个小时)

3、Hashmap?ConcurrentHashMap?什么情况用HashMap什么时候用ConcurrentHashMap?

hashmap采用数组+链表+红黑树的存储结构

4、扩容:LinkedList、ArrayList、HashMap如何扩容?

ArrayList:初始为10,不够就扩容,每次扩大1.5倍

LinkedList:无初始大小,也不需要扩容

HashMap: 初始化大小是 16 ,扩容因子默认0.75,每次扩大两倍

ArrayList,HashMap,LinkedList 初始化大小和 扩容机制

5、Hashmap怎么处理数据冲突?怎么高效率的实现数据迁移?

 

6、ConcurrentHashMap在java7与java8中的区别?

 

7、为什么java并发效率更好?

 

8、java GC机制?GC Roots有哪些?


八、C语言

1、空指针、野指针

空指针: 没有存储任何内存地址的指针就称为空指针(NULL指针)

野指针:"野指针"不是NULL指针,是指向"垃圾"内存(不可用内存)的指针。形成原因是对象销毁后,指针没有置空

2、内存泄漏

  • 内存分配未成功,却使用了它
  • 内存分配虽然成功,但是尚未初始化就引用它
  • 内存分配成功并且已经初始化,但操作越过了内存的边界
  • 忘记了释放内存,造成内存泄露

3、C和C++的区别

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值