首页 > 资源分享 > 春招测开岗面试高频考点万字汇总(二)

春招测开岗面试高频考点万字汇总(二)

头像
啦啦啦offer快来快来
编辑于 2021-04-18 09:46:58 APP内打开
赞 50 | 收藏 455 | 回复13 | 浏览6632

帖子太长分为了两个帖子

指路☞ 春招测开岗面试高频考点万字汇总(一)https://www.nowcoder.com/discuss/628372
涵盖计算机网络、操作系统、数据库的高频和常见考点

本贴总结了linux、python语言、测试常见问题

Python语言

高频考点

1.深浅拷贝

copy和deepcopy均是开辟了新的内存空间

不可变对象的话因为是拷贝值,所以原被拷贝对象中不可变对象的变化并不会影响到拷贝后的对象.

但浅拷贝中存放的是对可变对象的引用,如果把a拷贝成b,a中的可变对象发生变化的话,b中的对应对象也随之发生变化,即ab中的子类可变对象其实是共享的,虽然拷贝对象与原对象的内存地址不同,但是两者中的元素具有相同的内存地址。

深拷贝用copy模块中的deepcopy实现,是把所有可变对象、不可变对象的内容都通过递归的方式一一拷贝了过来,ab是不相同的内存地址,ab中的元素内存地址也不相同,两者完全独立。a中的可变对象发生改变的话不会影响b中对象的改变。

2.生成器和迭代器

生成器

生成器是列表生成式的简化,列表生成式一次性生成整个列表,如果列表尺寸过大而我们只需要列表的前几个数据进行处理的话就会造成大量的空间浪费,所以引入生成器。

列表生成式

三种结构:

[执行语句 for 变量 in 数据集合 ]

[执行语句 for 变量 in 数据集合 if 筛选条件]

[执行语句1 if 筛选条件 else 执行语句2 for 变量 in 数据集合]

也可以同时使用两个for 进行嵌套循环 最终生成一个list

生成器有两种形式:

①把列表生成式中的[]改为()即可构成一个生成器。不是一次性生成列表,而是不断用next()进行调用抛出下一个值,如果超出列表范围就返回StopIteration的错误。或者可以用在for循环当中,作为可迭代对象。

②在函数中通过yield关键字定义,即需要返回数据时使用yield语句。生成器在实例化时并不会立即被执行,而是等待next()的出现,程序运行完yield后会保持当前状态并停止运行,等待下一个next()调用,从yield语句处执行。

range和xrange的区别

python2中分range()和xrange() 其中range()是生成一个list,是一个列表生成式 而xrange()是一个生成器

python3中取消了xrange() 内置的range()实际就是python2里的xrange() 返回生成器

迭代器

*迭代器的定义是可以用被next()函数调用并不断返回下一个值的对象 *

1.生成器

2.可迭代对象用iter()函数构成的迭代器 list、tuple、set、str等数据类型

3.is和==的区别

is判断两个对象的内存地址是否相同 ==判断两个对象的值是否相同

4.python传参时需要注意什么

4.1 传入参数是否可以被修改

1.如果没有将外部变量传递到函数来(参数定义种包含该外部变量),则函数内部虽然可以使用,但是不能对该变量进行修改(会报错)——未传参的变量可使用但不可修改

2.将外部变量作为实参传递到函数中来的话,

如果外部变量是不可变对象的话不可以修改该变量的原始值——相当于“传值”的方式来传递变量,可以通过改变引用指向的方式,在函数内部获取新的不可变对象,但是对函数外部没有影响(除非加了global)

python函数传入的是原变量引用的一个副本,这两个引用(副本及原引用)在内外均指向同一个内存区(具体存值的地方)。如果在函数内部改变了引用指向的话,只是副本引用指向了一个新的内存区,函数外面的引用仍然指向原内存堆区,不会改变原变量的值(不可变对象的操作、可变对象的赋值操作)。而如果在内部通过append、remove函数改变了堆区的值的话,外部的引用仍然会改变。

可变对象与不可变对象总结

可变对象:list、dict、set 可变对象是指对象的内存值可以改变

不可变对象:int、tuple、str、bool 不可变对象是指对象的内存值不可以被改变。改变变量时,其实质是变量指向新的地址,即变量引用新的对象

4.2 传入参数的顺序和类型

参数顺序:必选参数,默认参数,可变参数,命名关键字参数,关键字参数

可变参数必须在关键字参数之前

  • 默认参数 必须指向不可变对象

  • 可变参数 形式def func(*可变参数) 传入参数的个数可以是0个或者多个,其实是传入一个list或者tuple,函数接收的是个tuple。如果有个list或者tuple想直接传入func的话,可以直接用func(*list)实现(即把想要传入的可变参数封装成list/tuple传入)

  • 关键字参数 形式def func(**关键字参数) 允许传入0个或多个含参数名的参数,在函数内部组装成字典。传入的时候用参数名=参数值的形式。如果传入dict的话可以直接func(**dict)

  • 命名关键字参数 形式def func(*,city,job) 限制某几种参数名的输入,传入的时候必须只有*,后面的这几种参数名可以选择,传入用fun(city=xxx,job=xxx)的形式

5.装饰器

装饰器可以在不改变函数代码和调用方式的情况下给函数添加新的功能。

本质上是一个嵌套函数,接收被装饰的函数(func)作为参数,并返回一个包装过的函数,以实现不影响函数的情况下添加新的功能。抽离出大量与函数主体功能无关的代码,增加一个函数的重用性。

应用场景:性能测试(统计程序运行时间)、插入日志、权限校验

常见考点

1.函数或变量的作用域

正常的函数/变量是public的,可以被直接引用,如x123 PI

__xxx__变量/函数是特殊变量,虽可以被直接引用,但是有特殊的用途,比如说__init__ __new__

_xxx 表示半私有的变量,只能在类或者子类内使用

__xxx表示私有的变量,只能在类内使用

这两种私有变量都是应当私有 而不是一定不能访问的

2.解释型和编译型语言的区别

编译型语言

在程序执行前,需要把源代码编译成机器语言的文件,再执行时可以直接使用该编译结果,以后不需要再次编译。

优点:运行效率高

缺点:难以移植

解释型语言

代码执行时才一行行动态翻译执行

优点:无需翻译器,方便程序移植;可以交互式运行

缺点:运行效率较低

3.intinew的区别

相同点:两者都是类中的private函数

不同点:

  • __new__是在实例创建之前被调用的,任务是创建实例然后返回该实例对象,是个静态方法,至少要有一个参数cls(代表当前类),必须有返回值(即该实例对象)
  • __init__是在实例创建完成后被调用的,设置对象属性的一些初始值,通常用在初始化一个类实例的时候,是一个实例方法,至少有一个参数self(代表当前的实例),无需返回值

__init____new__之后被调用,__new__的返回值(实例)传递给__init__的第一个参数,然后由__init__设置一些实例的参数。

此外,继承自object的类才有__new__,如果定义子类的时候没有定义__new__,则会追溯到父类的__new__方法来构造该类实例,如果父类也未定义,则一直可以向上追溯到object的__new__方法

4.常用的模块

1.os 与操作系统交互
2.sys
3.random 生成伪随机数
4.time 可以读取时间戳或程序暂停
5.collections 提供常见的数据结构如双向队列deque、计数器Counter、默认字典defaultdict

5.python的list和numpy.array(数组)的区别

1.list可以存放不同类型的数据,比如int,str,bool,float,list,set等,但是numpy数组中存放的数据类型必须全部相同,必须全为int或全为float

2.list中每个元素的大小可以相同,也可以不同,因此不支持一次性读取一列,而numpy数组中每个元素大小相同,支持一次性读取一列。numpy对二维数组的操作更为便捷

3.list中数据类型保存的是数据存放的地址,即指针而非数据,比如一个有四个数据的列表a=[1,2,3,4]需要4个指针和4个数据,增加了存储空间,消耗CPU,但是a=np.array([1,2,3,4])只需要存放4个数据,节省内存,方便读取和计算

4.一个numpy的array是内存中的一个连续块,array中的元素都是同一类型的,所以一旦确定了一个array,它的内存就确定了,每个元素的内存大小都确定了。而list的每个元素是一个地址的引用,这个地址又指向了另一个元素,这些元素在内存里不一定是连续的,因此每当加入新元素,其实只是把这个元素的地址添加到list中

6.lambda函数

匿名函数形式 f=lambda x : x表达式

调用时可采用f(x)的形式 或者直接使用(可以用于return语句)

  • 优点:没有名字,无需担心函数冲突

  • 缺点:只能有一个表达式,没有return,返回值就是该表达式的结果

7.类中self的概念

self代表实例本身,具体来说是该实例的内存地址

self的三种应用:

  1. self为类中函数的第一个参数

    在调用实例方法时,python解释器会自己把实例变量传递给函数中的self。如果类的实例方法的第一个参数不是代表实例的self,则调用实例方法时,该方法没有参数来接收自动传入的实例变量,程序会产生异常。

  2. 在类中,引用实例的属性 self.变量名

    引用实例的属性目的是为实例绑定属性,写入或读取实例的属性

  3. 在类中,调用实例的方法 self.方法名()

python的几种变量,按照作用域划分

1.全局变量 在模块内、在所有函数之外、在class外

2.局部变量 在函数内、在class的方法内(但未加self修饰)

3.静态变量/类属性 在class内,但是不在class的方法内的。

​ 类的所有实例均可以访问到该类属性,用类名.变量名()的方式

4.实例变量/实例属性 在class的方法内,用self修饰的变量

//实例属性的优先级高于类属性,所以若是同名,实例属性会覆盖类属性,有限输出实例属性

8.python的面向对象特性

1.封装
2.继承
3.多态

面向对象和面向过程语言的区别

面向对象是把问题抽象成一个个对象,给这些对象绑上属性和方法,即以功能而非步骤划分问题。优点:更易低耦合、易维护、易复用;缺点:因为需要实例化所以开销较大,性能比面向过程要低

面向过程是把问题拆分成一个个函数和数据,按照一定的顺序来执行这些方法。优点:性能较高;缺点:不易维护,不易复用

9.python的内存管理机制

python的内存管理机制=垃圾回收机制+内存池机制

9.1 垃圾回收机制

垃圾回收机制以引用计数法为主,标记-清除为辅。

1.引用计数法

因为自动回收,所以没有内存泄漏的风险。

引用计数法是指在每个对象的结构体PyObject中定义一个计数变量ob_refcnt,计算该对象被引用的次数,有以下4种情况会造成引用计数变量的增加:1.该对象被引用;2.该对象被加入某容器(列表、字典等);3.对象被创建;4.该对象被作为参数传到函数中。

对应的python计数减少的情况为:1.该引用被释放,也就是说引用该对象的变量换了引用对象;2.该对象被从容器中删除;3.用del删除该对象;4.一个对象离开它的作用域,例如func函数全部执行完毕,非全局变量的对象引用计数器-1(这个引用是指创建引用的副本吗,为什么全局变量的对象计数器不变呢?)

当计数变量减少至0时,自动释放该变量。

优点:高效,自动释放,实时性高,即一旦没有引用立即释放;

缺点:1.增加存储空间,维护引用计数消耗资源;2.无法解决循环调用(一组未被外部使用、但相互指向的对象)的情况。

2.标记-清除法

标记-清除被作为解决循环调用的情况,辅助python进行垃圾回收

过程:①首先创建对象时,python会将其加入零代链表;②遍历零代链表,如果被本链表内的对象引用,自身的被引用数-1;③清除被引用数为0的对象;④其余未被回收的“活动对象”升级为一代链表 一代同样可能会触发gc机制,从而对一代链表标记清除,将剩下的活动对象升级为二代链表

python的GC阈值——即何时会进行标记过程

当被分配对象的计数值与被释放对象的计数值之间的差异增长,超过某个阈值时,就会触发python的收集机制

这里采用了分代的思想,存活越久的对象越不可能是垃圾。这里对零代对象的扫描次数大于对一代对象的次数。核心行为就是:垃圾回收器会频繁地处理新对象。

9.2 内存池机制

python引用了一个内存池memory pool机制,即pymalloc机制,用于对小块内存的申请和释放。

当创建大量消耗小内存的对象时,频繁调用malloc/new会导致大量的内存碎片,导致效率降低。内存池即预先在内存中申请一定数量的、大小相等的内存块留作备用,当有新的内存需求时,就先从内存池中分配内存给该需求,不够了再去申请新的内存。对象被释放后,空闲的小内存返回内存池,避免频繁的内存释放动作。

优点:能够减少内存碎片,提升效率

当申请内存小于256k的话,就会直接在内存池中申请内存空间。如果申请内存大于256k的话则会直接执行new/malloc行为来申请新的内存空间。

Linux常用查询命令

1.文件/目录相关

1.ls 列出当前文件夹下的内容

2.pwd 查看当前所在目录

3.cd 切换目录
. 当前目录 .. 上级目录 cd ~ 切换到主目录 cd - 在最近两次操作目录间横跳
4.touch 创建文件

5.mkdir 新建目录

6.rm 删除文件
rm -r 目录名 删除目录 rm -f 强制删除,无该文件也无需提醒 rm -r * 删除当前目录下所有文件和目录

7.cp 复制文件

8.mv 移动文件

2.显示文件内容相关

1.grep 搜索文本 文件名 搜索文本内容
-n 显示行号; -v 不包括该内容的 ; ^a查找以a开头的行; a$ 查找以a结尾的行

2.cat 显示文件完整内容

3.more 分屏显示文件内容

4.less 分屏显示文件内容,上下键控制翻页

5.head 打印文件中的前n行

6.tail 打印文件中的末尾几行
显示10~15行内容 tail 文件名 +10| head +5

7.find
find 目录 -name 搜索字符 搜索名字为xxx的文件 可以使用通配符
find 目录 -size 数据块 搜索大小为xxx的文件,1数据块=0.5kB
+n 大于 -n 小于 n等于
组合条件:-o 或者;-a 并且
find \ -size +163840 -a -size -204800 查找根目录下大于80MB小于100MB的文件
find 目录 -group xxx 查询所属组为xxx的文件
find 目录 -user xxx 查询所属者为xxx的文件

8.wc
wc 文件 -l 统计文件的行数
wc 文件 -w 统计文件的单词数
wc 文件 -c 统计文件的字节数

3.进程与内存相关

1.top 动态实时显示cpu、内存、进程使用情况

2.ps 列出进程
ps -ef | grep xxx 查看xx进程,可以获得pid
ps -a 列出所有运行中的进程
pgrep -l xxx 查看xx进程的pid
netstat -atnp| grep xxx 查询pid

3.kill 杀死进程
kill -9 pid 强制杀死某进程

4.netstat
netstat -atnp | grep xxxx 查看端口号/状态的进程pid
查看端口占用情况 lsof -i
查看指定端口占用情况 lsof -i:端口号

5.free 显示当前内存使用情况

6.df 以字节形式显示磁盘使用情况

测试相关

设计测试用例

主要从功能性、性能性、安全性、易用性、兼容性、网络测试这几个方面来设计,需要考虑问题的角度全面
注意如果是手机端app测试的话需要加上中断测试这项(考虑后台切换、app切换、拔插数据线、来短信/电话/其他app消息)

1.微信朋友圈点赞
2.微信支付
3.微信红包
4.微信发送消息
5.水杯测试 一次性纸杯/普通水杯
6.电梯测试用例 两台电梯联动算法
7.笔
8.上传文件
9.搜索框
10.登陆页面
11.洗衣机
12.桌子
13.一张白纸
14.椅子
15.ATM机
16.自助售货机
17.购物车功能
18.支付宝扫码
19.微信单人视频通话 多人视频会议
20.微信列表删除操作
21.弹幕测试
22.抖音上下滑动视频
23.测试开屏广告页面
24.测试后台积分管理
25.测试美团外卖点单系统
26.界面下单支付
27.测试百度地图
28.自动贩卖机的人脸识别功能
29.预约界面
30.优惠券抢购界面

测试知识点相关

1.软件的生命周期

软件的生命周期:计划阶段——>需求分析——>设计阶段——>编码——>测试——>运行和维护

产品的生命周期:导入期——>成长期——>成熟期——>衰退期

bug的生命周期:发现Bug—>提交Bug—>指派bug—>研发确认bug—>研发修复bug—>回归验证bug—>关闭bug

2.一般测试用例的设计要点

功能性、性能性、安全性、易用性、界面测试、(网络测试、中断测试)—>app/网站类似的才需要、边界值测试、压力测试

3.软件测试方法分类

白盒测试

概念:关注程序代码的具体细节,根据软件内部代码的逻辑结构分析来进行测试。主要是通过阅读程序代码或者通过使用开发工具中的单步调试来判断软件质量。关注代码的实现细节。主要对程序模块的所有独立执行路径至少测试一遍、对所有的逻辑判定,取“真”或“假”的两种情况都要测试一遍,循环边界和运行界限内执行循环体等等

测试用例设计方法:逻辑覆盖、循环覆盖、基本路径覆盖、判定覆盖

优点:增大代码的覆盖率,提高代码的质量,发现代码中隐藏的问题

缺点:系统庞大时测试开销很大,难以测试所有运行路径;测试基于代码,只能验证代码是否正确,而不晓得代码设计是否合理,可能会遗漏某些功能需求

②黑盒测试

概念:不考虑其内部结构,即具体代码实现,检测软件的各个功能能否得以实现,确认软件功能的正确性,依靠软件说明书来判断测试用例,关注具体的客户需求及软件功能。黑盒测试主要是为了发现:1.是否有不正确的或者遗漏的功能;2.输入是否能输出正确的结果;3.性能上是否满足要求

优点:①较为简单,不需要了解程序内部的代码及实现,与软件内部实现无关;②从用户角度出发,实际考虑用户使用的功能及可能出现的问题

缺点:不可能覆盖所有的代码,覆盖率较低

测试用例设计方法:边界值分析法、等价类划分、错误猜测法、因果图法、状态图法、测试大纲法、随机测试法、场景法

等价类:输入域的各子集中,各个输入数据对于揭露程序中的错误都是等效的。

  • 等价类划分:将全部输入数据合理划分成若干个等价类,在每一个等价类中取一个数据作为输入条件,就可以用少量代表性测试数据取得较好的测试结果。分为有效等价类(合理、有意义的输入数据构成的集合)和无效等价类
  • 边界值分析法:大量错误是发生在输入输出范围的边界上,选定测试用例时应该选取正好等于、刚刚大于、刚刚小于边界值的值作为测试数据,而不是选取等价类中的任意值,作为对等价类划分的补充
  • 错误猜测法:基于经验和直觉推测,列举出程序中所有可能有的错误和容易发生错误的特殊情况,根据这些情况选择测试用例
  • 因果图法:考虑输入条件之间的相互组合,也考虑输出结果对输入条件的依赖关系。原因即为输入条件或者输入条件的等价类,结果即为输出条件,把因果转换为决策表,为决策表中的每一列设计测试用例。
  • 场景分析法:根据用户场景来模拟用户的操作步骤
  • 大纲法:着眼于需求。将需求转换为大纲的形式,大纲表示为树状结构,在根和叶子节点之间存在唯一路径,大纲为每条路径定义了一个特殊的输入条件集合,用于测试用例。
  • 随机测试法:不考虑任何用例和需求,完全站在用户的角度对产品进行测试

灰盒测试:关注输入输出的准确性,也关注内部的代码,但是没有白盒测试那么详细完整。

③静态测试

概念:在不运行程序的情况下寻找代码中可能存在的错误,或者评估程序代码

④动态测试

实际运行被测程序,输入相应的测试用例,检查运行结果与预期结果的差异,从而验证程序的正确性、有效性和可靠性,并且分析系统运行的效率和健壮性

⑤α测试

一个用户在开发环境下的受控测试,模拟实际操作环境

⑥β测试

多个用户在实际使用环境下进行的测试,如一些软件的公测

⑦冒烟测试

在大规模测试之前,先对软件的基本、核心、主要功能进行测试,节省资源

⑧回归测试

开发修正完代码后再回过头来做测试

⑨随机测试

跳出思维的限制,没有思想、没有步骤地随机进行测试

⑩探索测试

有思想,有步骤地测试一些复杂的、不常用地功能

4.软件测试阶段分类

1.单元测试

针对软件设计最小单位——程序模块进行正确性检测。

检查程序模块的功能、性能、接口等。

多个模块可以平行独立地进行单元测试。需要从程序的内部结构出发设计测试用例。需要读程序和代码,大多数时候可以由开发人员自己完成。

(独立测试小积木块儿)

2.集成测试

在单元测试基础上,将所有程序模块组装起来,进行有序、递增的测试。(把多个程序模块拼接起来测试)

比较多涉及到接口测试

(把小积木块儿逐个拼在一起测试)

3.系统测试

在系统的真实运行环境下,检查完整的程序系统是否可以和硬件、外设、网络和系统软件、支持平台等正确配置、连接。

全方位的,需要考虑与硬件系统、系统软件、其他软件的联系。

(把这个整体拼好的积木放在真实环境下测试)

4.验收测试

是测试的最后一个环节,一般由供求双方共同达成的,模拟用户实际运行的环境,对功能模块全面测试。

有两种测试主体:

  • α测试:开发人员在开发环境下的测试
  • β测试:用户在实际运行的环境下进行测试

5.软件测试的基本流程

1.测试需求阶段:阅读软件需求规格说明书,理解需求,分析需求点

2.测试计划阶段:参考软件需求说明书来编写测试计划,内容需包括测试范围、进度安排、人力物力分配、整体测试策略

3.测试设计阶段:编写测试用例,评审测试用例

4.测试执行阶段:搭建环境,执行预测试(即冒烟测试),然后进入正式测试,提交bug,追踪bug,直到软件达到测试需求要求

5.测试评估阶段:给出测试报告,确认产品是否可以上线

6.web测试和app测试的区别

  1. web测试中只要更新了服务器,客户端也会同步更新,保证每个客户的客户端(或者说浏览器)一样;app必须得客户端主动更新,所以app测试中修改了服务器,客户端的所有核心版本都需要进行回归测试
  2. 性能方面:web主要看响应速度,app还要看电量、流量、cpu、内存等
  3. 兼容方面:web基于浏览器,主要看电脑硬件和电脑系统;app依赖于手机或平板等移动端,关注的系统主要是安卓或者ios,还要关心分辨率、屏幕尺寸
  4. app要多一些专项测试:中断测试、界面操作、安装、卸载、更新等

考察思维与逻辑表达能力类的题目

1.如果在测试中发现一个bug,但是开发经理不认为这是一个bug,应该怎么解决?

产生这种有争议的Bug的几个原因有

  • 首先可能是测试人员自己的问题,是否描述该bug不太清晰,使得开发人员难以理解或者产生了歧义,这个时候要修改自己的描述,一定要清晰明了,无歧义,无冗余的步骤
  • 其次可能是需求型的bug,找产品经理沟通清楚该产品的需求,判断是测试人员还是开发人员对该需求判断有误
  • 还有可能是低概率性的Bug,出现了难以复现的bug,这个时候要结合严重性、频繁性、对用户的影响以及产品交付时间与开发共同衡量是否修复该bug,即使是选择暂不修复,也需要将该Bug详细地提交备案

2.为什么想要做测试?

3. 你觉得你做测试的优势在哪里?

4.怎么看待测试中重复性工作较多的问题

5.谈谈你对测试的理解

6.你的职业规划

7.如何理解测试和测试开发?

测试就是在规定条件下检测产品功能或者程序上的错误,对其是否满足设计要求进行评估。

测试开发需要开发一些自动化测试的平台或者二次开发一些现有的开源工具,最终目的是提升测试效率,但是核心职能仍然是测试。

8.如果遇到一些低概率性的bug会怎么办?

首先要认真记录引发该bug的情况(当时的测试环境、测试数据、出现问题前的操作),不应该在测试报告中因为出现概率低而忽略这些bug的存在

其次,会根据严重性、频繁性、对用户的影响这三个因素共同做决定,严重性就是判断该bug是否导致严重的后果,比如是不是会让整个程序崩溃?会导致用户信息丢失吗?还是仅仅是无关痛痒的小问题?;频繁性就是指在用户使用的过程中是否会经常碰到该类问题?还是这个bug出现在某些不太常用的功能中;对用户的影响是指是否会影响到全部用户的使用?还是只影响部分用户的使用?(比如说这个bug所在的程序如果只出现在app的旧版本中,那么它对用户的影响就很小)

综合上面几点联合考虑,然后视产品发布日期来决定,如果产品发布日期临近,修改一些不太严重、出现不太频繁的bug反而可能得不偿失,带来其他的风险,因此此时仅仅将该bug备案,其他情况下还是需要尽力定位、修复该bug。

9.项目最终结果不符合预期怎么办?

10.作为一个测试开发工程师,要参与哪些流程?

测开常考代码题目

测试开发岗面试时对代码能力要求不太高,刷熟剑指offer就可以大胆地去面试啦~

下面是我总结的百度美团京东等大厂常见的代码题

1.将一个只含有-1和1的乱序数组变成-1全在1前面的数组
2.合并区间
3.最小覆盖子串
4.最长不含重复字符的字符串
5.翻转单词顺序
6.判断回文串
7.两数之和
8.最长回文子串
9.和为K的子数组
10.合并两个有序数组
11.合并两个有序链表
12.判断链表有环、环的位置、环的长度
13.翻转链表
14.奇偶链表
15.合并n个有序链表
16.去除驼峰字符串
17.统计一个数字在排序数组中的出现次数
18.输入YYYY-MM-DAY 判断是当年的第多少天
19.括号匹配
20.判断是否为合法字符
21,冒泡排序 归并排序 快速排序
22.最长连续数列
23.给出数组的所有子集
24.两个栈实现一个队列
25.寻找数组中前三大的值
26.两个排序数组找到相同元素

以上~ 祝各位春招秋招顺利 成功上岸~

13条回帖

回帖
加载中...
话题 回帖

相关热帖

资源分享近期热帖

近期精华帖

热门推荐