大纲

开篇

  • 自我介绍
    :面试官你好,我叫林飞武,是一名通信工程大三学生,对计算机专业有着浓厚兴趣并且未来有志于在互联网的测试领域有深入发展。全套学习了计算机专业的专业课,计算机网络,操作系统等,对于Linux,数据库,postman接口测试这些都比较熟悉。
    介绍项目
  1. 我做过的项目是目标标注系统,这个项目主要是内部使用,用来实现机构、域名、证书、IP Whois数据等原始的管理。还有基于原始数据的目标信息库的标注,合成,查询。
  2. 这个项目中我的职责主要是测试工程师,负责编写测试用例,执行测试用例,编写冒烟测试用例,编写测试总结报告。
  3. 项目流程:先编写测试脑图,然后需求评审,通过以后编写测试用例和冒烟测试交给开发,开发提测以后按照测试用例执行并且在JIRA上提交bug并且分配任务给开发,最后编写测试文档。
    职业发展规划
    长期目标是成为测试leader,中期目标是希望在5到6年内成为测试专家,短期目标是三年内成为技术栈没有短板并且精通某一方面测试,比如自动化测试的测试开发工程师。
    对测试开发的理解
    测试开发本质上也是测试,所以正常测试工程师该有的技术栈测试开发也必须全部掌握,不过相比于一般的测试工程师测试开发需要具备能够阅读代码并且发现代码错误的能力,而且要能根据业务需求,公司要求开发出合适的测试工具的工程师。
    你有什么缺点
    目前实际动手能力不是很足,大部分工具的学习都是靠自学,没有在实际场景应用过,导致掌握的不是很牢固。有过一个月测试实习以后,发现对学习过的的一些测试知识一下子就很轻松掌握了,所以我觉得我目前还是需要更多的实践去让我把从书本上学到的知识转换为实际应用的能力。

最近在看什么书
最近在准备考试,在看《计算机网络》和《近现代史纲要》

测试书籍

《软件测试的艺术》《Google的软件测试之道》《大话软件测试》《全程软件测试》

反问

您觉得我这次表现怎么样?您对我未来的学习方面的建议?

测试篇

测试是什么?测试的流程是什么?
测试是发现软件错误,保障软件质量并且评审软件是否符合需求和设计的过程。
测试流程:(非测试员)提交需求说明书——制定测试计划——设计测试用例——执行测试用例——提交bug——bug修复以后回归测试——编写测试文档详细记录测试过程

哪些测试方法
黑盒测试,白盒测试。黑盒测试主要有等价类划分法,因果图设计法,边界值法,判定表设计法,正交试验法

逻辑覆盖法是白盒测试的主要方法,有语句覆盖,条件覆盖,判定覆盖,条件-判定覆盖等。

灰盒测试:是介于白盒测试与黑盒测试之间的一种测试,灰盒测试多用于集成测试阶段,不仅关注输出、输入的正确性,同时也关注程序内部的情况。灰盒测试不像白盒那样详细、完整,但又比黑盒测试更关注程序的内部逻辑,常常是通过一些表征性的现象、事件、标志来判断内部的运行状态。

说一下等价类测试方法

等价类测试方法就是把输入划分为若干个子类,每个类中的每一个元素都可以代表这个子集,比如二位数加法器,1+2,1+55这种正数和正数相加可以划分为一个等价类,区间内正数和负数相加划分为一个等价类,负数和负数相加,如果规定了取值范围还要划分无效等价类。

说一下边界值分析法

要选择边界数据{a,b}选择a,b和略大于b和略小于a

说一下因果图法

等价类和边界值着重考虑输入条件却没有考虑输入条件的组合,制约关系。所以用因果图法描述多种条件组合,产生对应测试动作。

讲一下正交试验法


怎么测试网络协议

协议测试包括四种类型的测试
1、一致性测试:检测协议实现本身与协议规范的符合程度

2、互操作性测试:基于某一协议检测不同协议实现间互操作互通信的能力

3、性能测试:检测协议实现的性能指标,比如数据传输速度,连接时间,执行速度,吞吐量,并发度,

4、健壮性测试:检测协议是现在各种恶劣环境下运行的能力,比如注入干扰报文,通信故障,信道被切断

α测试和β测试

α测试:在受控的环境中进行,由用户在开发者的场所进行,并且在开发者对用户的指导下进行测试,开发者负责记录发现的错误和使用中遇到的问题
β测试:在开发者不能控制的环境中的真实应用,由软件的最终用户们在一个或多个客户场所下进行,由用户记录在测试中遇到的一系列问题,并定期报给开发者。

给你一个京东登录页面怎么测试

功能测试+性能测试+安全测试+兼容测试+可用测试+界面测试

  • 输入正确的账号密码看能否登录成功
  • 输入正确的账号错误的密码
  • 输入错误的账号正确的密码
  • 输入错误的账号错误的密码
  • 不输入账号看提示信息
  • 不输入密码看提示信息
  • 验证码测试
  • 如果用户未注册,提示用户注册的页面是否友好?
  • 界面是否美观?
  • 输入html5,javascript是否会破坏页面渲染?
  • 密码存储显示是否加密?
  • 账号密码位数支持,最短和最长,超过或者不足是否有提示?
  • 是否支持¥%*&等特殊符号
  • 是否可以复制粘贴
  • 忘记密码跳转界面是否正确
  • 开启大写是否有提示信息

性能测试:

  • 打开登录界面需要几秒
  • 输入正确后跳转时间需要几秒
  • 模拟大量用户同时登陆,检查一定压力下能否正常登陆跳转。

安全测试

  • 登录成功后生成的cookie(cookie是一个小信息,服务器写给浏览器的,客户端保存cookie信息),是否是http only(http only是cookie内一个附加flag,能有效放置XSS攻击)
  • 用户名和用户密码是否通过加密方式传给web服务器?
  • 用户名和密码的验证应该在服务器端而不应该在前端
  • 错误登录的限制
  • 是否支持多用户在同一台机器登录
  • 是否支持单用户在不同机器登录

请对这个系统做出测试用例:一个系统,多个摄像头,抓拍车牌,识别车牌,上传网上,网上展示

功能:
1.每个摄像头都能抓拍车牌;

2.每个摄像头抓拍到的车牌能正常交给系统处理;

3.系统能够正确识别车牌;

4.系统能够将识别出的车牌上传;

5.上传至网络的车牌能够正常展示出来;

一、功能测试

1.使用正常的车牌,保持车牌静止,检查每个摄像头是否能抓拍车牌;

2.使用类似非车牌的写有字的纸板,检查每个摄像头是否抓拍;

3.使用正常的车牌,保持车牌较高速移动,检查每个摄像头是否能抓拍车牌;

4.在多种情况下检查每个摄像头抓拍到的车牌能否正常交给系统处理,如临时断电、断网后能否正常将数据交给系统;

5.使用抓拍到的正常的车牌,交由系统处理,检查系统能否识别车牌;

6.使用非车牌的其他图片,交由系统处理,检查系统能否识别;

7.在多种情况下检查系统能否将正常识别出的车牌进行上传,如临时断电、断网后未上传数据是否能继续上传;

8.构造非车牌的其他内容的数据,检查系统能否将异常内容进行上传;

9.检查上传至网络的车牌能否正常展示出来;

10.上传非车牌的其他内容的数据,检查能否正常显示出来。

二、性能测试

1.同时向一个摄像头展示多个静止的车牌,检查摄像头能否抓拍到多个车牌;

2.同时向一个摄像头展示多个较高速运动的车牌,检查摄像头能否抓拍到多个车牌;

3.抓拍后,检查系统识别车牌的时间是否在需求要求的时间内;

4.模拟大量抓拍照片同时交由系统处理,检查一定压力下系统能否正常识别车牌;

5.模拟大量车牌同时上传,检查一定压力下能否上传成功。

三、安全性测试

1.检查是否能够通过给车牌加装饰物等方法,使摄像头无法抓拍或抓拍后系统无法正常识别车牌。

水壶测试

1.功能

(1)水倒水壶容量的一半

(2)水倒规定的安全线

(4)水壶容量刻度与其他水壶一致

(5)盖子拧紧水倒不出来

(6)烫手验证

2.性能

(1)使用最大次数或时间

(2)掉地上不易损坏

(3)盖子拧到什么程度水倒不出来

(4)保温时间长

(5)壶的耐热性

(6)壶的耐寒性

(7)长时间放置水不会漏

(8)壶上放置重物达到什么程度壶会被损坏

3.界面

(1)外观完整、美观

(2)大小与设计一样(高、宽、容量、直径)

(3)拿着舒服

(4)材质与设计一样

(5)壶上的图案掉落

(6)图案遇水溶解

4.安全

(1)壶使用的材质毒或细菌的验证

(2)高温材质释放毒性

(3)低温材质释放毒性

5.易用性

(1)倒水方便

(2)喝水方便

(3)携带方便

(4)使用简单,容易操作

(5)防滑措施

6.兼容性

(1)壶能够容纳果汁、白水、酒精、汽油等。

7.震动测试

(1)壶加包装(有填充物),六面震动,检查产品是否能应对铁路/公路/航空运输。

8.可移植性

(1)壶在不同地方、温度环境下都可以正常使用。

淘宝搜索框

一, 功能测试

  1. 输入关键字,查看: 返回结果是否准确,返回的文本长度需限制

1.1输入可查到结果的正常关键字、词、语句,检索到的内容、链接正确性;

1.2输入不可查到结果的关键字、词、语句;

1.3输入一些特殊的内容,如空、特殊符、标点符、极限值等,可引入等价类划分的方法等;

  1. 结果显示:标题,卖家,销售量,单行/多行,是否有图片

  2. 结果排序:价格 销量 评价 综合

4.返回结果庞大时,限制第一页的现实量,需支持翻页

  1. 多选项搜索:关键字 品牌 产地 价格区间 是否天猫 是否全国购

  2. 是否支持模糊搜索,支持通配符的查询

7, 网速慢的情况下的搜索

  1. 搜索结果为空的情况

  2. 未登录情况和登录情况下的搜索(登录情况下 存储用户搜索的关键字/搜索习惯)

二.性能测试:

1压力测试:在不同发用户数压力下的表现(评价指标如响应时间等)

2负载测试:看极限能承载多大的用户量同时正常使用

3稳定性测试:常规压力下能保持多久持续稳定运行

4内存测试:有无内存泄漏现象

5大数据量测试:如模拟从庞大的海量数据中搜索结果、或搜索出海量的结果后列示出来,看表现如何等等。

三. 易用性:交互界面的设计是否便于、易于使用

1依据不同的查询结果会有相关的人性化提示,查不到时告知?查到时统计条数并告知?有疑似输入条件错误时提示可能正确的输入项等等处理;

2查询出的结果罗列有序,如按点击率或其他排序规则,确保每次查询出的结果位置按规则列示方便定位,显示字体、字号、色彩便于识别等等;

3标题查询、全文检索、模糊查询、容错查询、多关键字组织查询(空格间格开)等实用的检索方式是否正常?

4输入搜索条件的控件风格设计、位置摆放是否醒目便于使用者注意到,有否快照等快捷查看方式等人性化设计?

四. 兼容性

1WINDOWS/LINUX/UNIX等各类操作系统下及各版本条件下的应用

2IE/FIREFOX/GOOGLE/360/QQ等各类浏览器下及各版本条件下、各种显示分辨率条件下的应用

3SQL/ORACLE/DB2/MYSQL等各类数据库存储情况下的兼容性测试

4简体中文、繁体中文、英文等各类语种软件平台下的兼容性测试

5IPHONE/IPAD、安卓等各类移动应用平台下的兼容性测试

6与各相关的监控程序的兼容性测试,如输入法、杀毒、监控、防火墙等工具同时使用

五. 安全性

1被删除、加密、授权的数据,不允许被SQL注入等攻击方式查出来的,是否有安全控制设计;

2录入一些数据库查询的保留字符,如单引号、%等等,造成查询SQL拼接出的语句产生漏洞,如可以查出所有数据等等,这方面要有一些黑客攻击的思想并引入一些工具和技术,如爬网等。

3通过白盒测试技术,检查一下在程序设计上是否存在安全方面的隐患;

4对涉及国家安全、法律禁止的内容是否进行了相关的过滤和控制;

购物车测试

界面布局、排版是否合理;文字是否显示清晰;不同卖家的商品是否区分明显。

2.功能测试

未登录时:

• 将商品加入购物车,页面跳转到登录页面,登录成功后购物车数量增加;

• 点击购物车菜单,页面跳转到登录页面。

登录后:

• 所有链接是否跳转正确;

• 商品是否可以成功加入购物车;

• 购物车商品总数是否有限制;

• 商品总数是否正确;

• 全选功能是否好用;

• 删除功能是否好用;

• 填写委托单功能是否好用;

• 委托单中填写的价格是否正确显示;

• 价格总计是否正确;

• 商品文字太长时是否显示完整;

• 店铺名字太长时是否显示完整;

• 创新券商品是否打标;

• 购物车中下架的商品是否有特殊标识;

• 新加入购物车商品排序(添加购物车中存在店铺的商品和购物车中不存在店铺的商品);

• 是否支持TAB、ENTER等快捷键;

• 商品删除后商品总数是否减少;

• 购物车结算功能是否好用。

3.兼容性测试

• 不同浏览器测试。

4.易用性测试

• 删除功能是否有提示;是否有回到顶部的功能;商品过多时结算按钮是否可以浮动显示。

5.性能测试

• 压力测试;并发测试。

请问你遇到过哪些印象深刻的bug

面试官询问遇到过哪些印象深刻的bug,其实它并不关心你描述的这个bug是否真的有价值,或有多曲折离奇?他只是:了解你平时工作中的测试能力
所以,这就要求的你平时工作中遇到bug时试着自己去定位,定位bug的过程远比你的单纯的执行测试用例有“价值”(自我技能提高的价值),在定位bug的过程中你需要掌握和运用更多知识。

另外,建议你平时养成总结的好习惯,发现的bug,开发解决了,最好问问他原因以及解决的方法,这样再遇到类似问题时,自己也可以试着定位解决。遇到难解决的bug,也可以把最终的解决过程记录下来。(这不是就有素材了)

所以,建议你平时可以主动要求去分享一些自己工作中用到或学习的技术。或者多去参加集体活动,加强自己的表达能力。

接口测试出现bug的原因有哪些?

接口测试常见的bug有以下几个:

特殊值处理不当导致程序异常退出或者崩溃

类型边界溢出,导致数据独处和写入不一致

取值边界外未返回正确的错误信息

权限未处理,可以访问其他用户的信息

逻辑校验不完善,可以利用漏洞获取非正当利益

状态处理不当,导致逻辑出现错误

数组类型item个数为0或者item重复时程序异常退出

设计一个朋友圈点赞的测试用例

功能测试:
点赞某条朋友圈,验证是否成功

接口测试:

点赞朋友圈,验证朋友能否收到提示信息

性能测试

点赞朋友圈,是否在规定时间显示结果,是否在规定时间在朋友手机上进行提示

兼容性测试

在不同的终端比如ipad,手机上点赞朋友圈,验证是否成功

请问如果用户点击微博的关注图标但是app上面没有反应,应该怎么排查这个问题

首先1.在Eclipse Devices窗口,选中app对应的包名,然后点击debug图标(绿色的小虫子),然后切换到Debug视图。
2.切换视图之后,可以看到debug下,app的线程列表。

3.对于main线程(第一个线程),选中,并将其挂起Suspend。

4.然后我们就可以看到,Suspend之后,main线程卡住的位置。
先排除手机是否出现故障
在排除手机网络是否稳定,换一个稳定的网络再试一次,因为在弱网或者没网的情况下也会出现该类问题
若手机网络环境差或者无网络连接,还要验证是否有关于网络差的提示。
判断是否手机内存溢出
看该用户关注人数是否已达上线,普通用户上限2000,会员用户最高上限可3000
若达到上限,可能返回提示信息出错
可能是版本问题或者是安装包问题
更新应用
重新安装
在debug模式下,查看app的线程列表,看线程是否卡主。

如果广东用户头条app刷不出东西了,你应该怎么排查问题

先排除手机是否出现故障
在排除手机网络是否稳定,换一个稳定的网络再试一次,因为在弱网或者没网的情况下也会出现该类问题
若手机网络环境差或者无网络连接,还要验证是否有关于网络差的提示。
判断是否手机内存溢出
看该用户关注人数是否已达上线,普通用户上限2000,会员用户最高上限可3000
若达到上限,可能返回提示信息出错
可能是版本问题或者是安装包问题
更新应用
重新安装
在debug模式下,查看app的线程列表,看线程是否卡主。

标题

TestNG的核心文件
testng.xml

缺陷测试报告
缺陷测试报告是对缺陷进行记录,跟踪和分类的文档(准确,清晰,剪简洁)。

缺陷编号,缺陷的描述,缺陷的优先级,缺陷所属版本,缺陷重要程度,缺陷所属开发人员,缺陷分析。

功能测试用例需要详细到什么程度才是合格的?
测试用例覆盖所有测试点

测试用例包含哪些内容
前提条件+测试步骤+测试数据+预期结果

微信支付测试用例

功能+性能+兼容+可用+界面+安全

功能
扫二维码
1.第一次扫描付钱二维码时可以得到相机权限,进入付钱界面
2.第一次扫描付钱二维码时可以拒绝相机权限,退回聊天界面
3.扫一扫可以扫描收钱的二维码
4.扫描出来的信息与收钱人信息相符
5.输入框只能输入数字
6.一次能支付的最大钱数
7.一次支付的最少的钱数
8.一天最多能支付多少次
9.一天支付钱数是否有上限
10.支付的钱数小数位最多为2位
11.能否直接输入小数点
12.能否添加备注
13.备注的最大字数为10
14.添加备注完了,按确定按钮保存备注
15.不想添加备注,可以按取消,取消备注

收付款
16.打开后能否显示付款二维码和条形码
17.条形码和二维码都可以付钱
18.付钱方式可以选择,零钱,信用卡,银行卡
19.零钱是否显示余额,以及余额是否正确
21.显示银行卡的数目和绑定银行卡的数目是否一样
22.是否显示银行卡的后四位,以及后四位是否与对应银行匹配
23.支付时余额不足,是否支持其他方式支付
24.网络异常支付失败
25.钱数够,密码正确,显示支付成功
26.钱数够,密码错误,支付失败
27.支付时余额不足,是否有提醒
28.取消支付后,余额或者银行卡里的钱数不变
29.支付失败,余额或者银行卡里的钱数不变
30.支付时有电话进入时,接完电话可以继续支付
31.支付时有信息来时,处理完信息可以继续支付
32.如果没有开启指纹支付,在第一次支付完后会有提醒是否开启指纹支付
33.是否可以选择指纹支付和密码支付
34.指纹支付时可以识别指纹
35.金额和密码是否支持复制粘贴操作

红包优惠卷
36.当有优惠劵且支付金额大于优惠券金额时,是否可以抵消现金
37.抵消现金后支付金额是否正确
38.当支付金额小于优惠券金额时,优惠券是否可用
38.1.当超过优惠券期限后是否还可以使用优惠券
38.2在优惠券期限内是否还可以使用优惠券
39.支付成功后,是否可以摇一摇得到红包
40.一天最多能摇几次红包
41.摇到红包后是否可以在下次付款时自动抵消现金,
42.红包的金额与抵消的金额是否一致
43.在红包使用的期限内是否可以使用红包
44.当超过红包的使用期限,红包是否还可以使用

性能
1.扫二维码响应的时间
2.取消支付的响应时间
3. 支付成功的响应时间
4.退款成功的响应时间
5.弱网支付的响应时间
6.不同网速对支付的响应时间(3g,4gWIFI)

安全
1.支付密码是否可见
2.支付时如果对方微信被盗是否有对应提示
3.如果支付钱数较多,是否有对应的提示
4.支付时对方异地登录是否有对应提示
5.支付扣的钱和零钱或者银行卡里少的钱数一样
6.在新的设备上支付时都需要认证,授权

界面
1.扫描二维码对应收款人的头像和信息是否正确
2.界面的排版是否符合合理,按钮大小,输入框大小
3.界面里是否我有错别字
4.界面颜色搭配是否合理

易用性
1.界面显示是否符合大多数人的使用习惯
2.付款二维码不用输入密码就可以完成对应的支付
3.指纹支付只要有在指纹处输入指纹就可以支付
4.支付用户可以选择自己喜欢的方式进行支付

兼容性
1.在安卓机和苹果机上都可以支付
2.对不同商家的微信收钱码均可以扫描

3.在不同的浏览器上是否可以付款

经典面试题:电梯,杯子,笔,桌子,洗衣机

第一步应该反问:需求是什么?一般从功能测试,性能测试,安全测试,外观测试,可用测试,兼容测试这几个方面来解答

测试项目:电梯

需求测试:电梯使用说明书,安全说明书等。

功能测试

  • 电梯的门能否正常打开,按钮能否正常运行
  • 电梯能否正常上楼下楼
  • 电梯内手机信号是否完好
  • 电梯在10楼往下的时候已经满载,五楼有人按钮,电梯会不会停
  • 有人在10楼按电梯向下,有人在二十楼按电梯向下,电梯会怎么停?

性能测试

  • 电梯最大负重是多少
  • 电梯最大负载情况下平稳运行时间多少?

安全测试

  • 电梯内报警装置是否完好,通风口是否通畅

外观测试

  • 电梯外观是否美观,按钮位置是否便于人按,电梯说明书是否有错别字。

可用测试

  • 电梯按钮和电梯位置是否符合人使用习惯

用户文档

  • 用户文档是否对电梯的使用限制描述详细无歧义

杯子

需求测试:
功能测试

  • 杯子能否接水
  • 杯子能否喝水
  • 杯子能否放冰箱
  • 杯子能接多少升的水?

如果你发现了bug开发不认为是bug怎么办

首先找证据支持我说这个是bug,(比如需求文档这么写的,竞品这么做的等等),如果找不到足够的证据支持你的观点,那就将问题升级到小组内讨论,一级一级的上升,直到PM或者项目经理拍板定义

搜索功能测试用例

功能测试

搜索内容为空,验证系统如何处理
搜索内容为空格,查看系统如何处理
边界值验证:在允许的字符串范围内外,验证系统的处理
超长字符串输入,系统是否会截取允许的长度来检验结果
合法的字符串长度后,加空格验证检索结果
多关键字中间加入空格,逗号,tab验证系统的结果是否正确
验证每种合法的输入,结果是否正确
是否支持检索内容的复制、粘贴、编辑等操作
是否支持回车键搜索
多次输入相同的内容,查看系统的检索结果是否一致
特殊字符、转义字符、html脚本等需要做处理
敏感词汇,提示用户无权限等
输入的内容是否支持快捷键操作等
只能输入允许的字符串长度等
输入链接是否正确跳转,
搜索的历史纪录是否显示在下面
搜索内容有没有联想功能
界面测试

查看UI是否显示正确,布局是否合理
是否有错别字
搜索结果显示的布局是否美观
已查看的结果链接,链接的颜色要灰化处理,
结果数量庞大时,页面的分页布局是否合理
安全性测试

脚本的禁用
SQL的注入,检索SQL SELECT语句等
敏感内容的检索是禁止的
特殊字符的检索
被删除、加密、授权的数据,不允许被查出来,是否有安全设计控制
兼容性测试

多平台Windows,mac
移动平台android,ios
多浏览器火狐、chrome、IE等
性能测试

搜索页面的链接打开速度是否满足设计要求
搜索出结果消耗时间,是否满足设计要求

计算机网络篇

牛客网——面试宝典

牛客网计网专题

数据库篇

Linux篇

牛客网面试宝典+博客Linux+下面


b



请问什么是数据库事务
数据库事务是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成。一个数据库事务通常包含了一个序列的对数据库的读/写操作。
数据库事务目的
1.为数据库操作序列提供了一个从失败中恢复到正常状态的方法,同时提供了数据库即使在异常状态下仍能保持一致性的方法。

2.当多个应用程序在并发访问数据库时,可以在这些应用程序之间提供一个隔离方法,以防止彼此的操作互相干扰。

PS:当事务被提交给了DBMS(数据库管理系统),则DBMS(数据库管理系统)需要确保该事务中的所有操作都成功完成且其结果被永久保存在数据库中,如果事务中有的操作没有成功完成,则事务中的所有操作都需要被回滚,回到事务执行前的状态;同时,该事务对数据库或者其他事务的执行无影响,所有的事务都好像在独立的运行。

数据库连接泄露的含义
数据库连接泄露指的是如果在某次使用或者某段程序中没有正确地关闭Connection、Statement和ResultSet资源,那么每次执行都会留下一些没有关闭的连接,这些连接失去了引用而不能得到重新使用,因此就造成了数据库连接的泄漏。数据库连接的资源是宝贵而且是有限的,如果在某段使用频率很高的代码中出现这种泄漏,那么数据库连接资源将被耗尽,影响系统的正常运转。


对缓存技术有了解吗?/讲一下Redis
Redis可以实现缓存机制, Redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、 list(链表)、set(集合)和zset(有序集合)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步,当前 Redis的应用已经非常广泛,国内像新浪、淘宝,国外像 Flickr、Github等均在使用Redis的缓存服务。
Redis 工作方式分析

Redis作为一个高性能的key-value数据库具有以下特征:

1、多样的数据模型

2、持久化

3、主从同步

Redis支持丰富的数据类型,最为常用的数据类型主要由五种:String、Hash、List、Set和Sorted Set。Redis通常将数据存储于内存中,或被配置为使用虚拟内存。Redis有一个很重要的特点就是它可以实现持久化数据,通过两种方式可以实现数据持久化:使用RDB快照的方式,将内存中的数据不断写入磁盘;或使用类似MySQL的AOF日志方式,记录每次更新的日志。前者性能较高,但是可能会引起一定程度的数据丢失;后者相反。 Redis支持将数据同步到多台从数据库上,这种特性对提高读取性能非常有益。


输入url后,按下回车发生了什么

查询ip地址
①浏览器解析出url中的域名。

②查询浏览器的DNS缓存。

③浏览器中没有DNS缓存,则查找本地客户端hosts文件有无对应的ip地址。

④hosts中无,则查找本地DNS服务器(运营商提供的DNS服务器)有无对应的DNS缓存。

⑤若本地DNS没有DNS缓存,则向根服务器查询,进行递归查找。

⑥递归查找从顶级域名开始(如.com),一步步缩小范围,最终客户端取得ip地址。

tcp连接与http连接
①http协议建立在tcp协议之上,http请求前,需先进行tcp连接,形成客户端到服务器的稳定的通道。俗称TCP的三次握手。

②tcp连接完成后,http请求开始,请求有多种方式,常见的有get,post等。

③http请求包含请求头,也可能包含请求体两部分,请求头中包含我们希望对请求文件的操作的信息,请求体中包含传递给后台的参数。

④服务器收到http请求后,后台开始工作,如负载平衡,跨域等,这里就是后端的工作了。

⑤文件处理完毕,生成响应数据包,响应也包含两部分,响应头和相应体,响应体就是我们所请求的文件。

⑥经过网络传输,文件被下载到本地客户端,客户端开始加载。

html渲染
①客户端浏览器加载了html文件后,由上到下解析html为DOM树(DOM Tree)。

②遇到css文件,css中的url发起http请求。

③这是第二次http请求,由于http1.1协议增加了Connection: keep-alive声明,故tcp连接不会关闭,可以复用。

④http连接是无状态连接,客户端与服务器端需要重新发起请求–响应。

在请求css的过程中,解析器继续解析html,然后到了script标签。

⑤由于script可能会改变DOM结构,故解析器停止生成DOM树,解析器被js阻塞,等待js文件发起http请求,然后加载。这是第三次http请求。js执行完成后解析器继续解析。

⑥由于css文件可能会影响js文件的执行结果,因此需等css文件加载完成后再执行。

⑦浏览器收到css文件后,开始解析css文件为CSSOM树(CSS Rule Tree)。

⑧CSSOM树生成后,DOM Tree与CSS Rule Tree结合生成渲染树(Render Tree)。

⑨Render Tree会被css文件阻塞,渲染树生成后,先布局,绘制渲染树中节点的属性(位置,宽度,大小等),然后渲染,页面就会呈现信息。

⑩继续边解析边渲染,遇到了另一个js文件,js文件执行后改变了DOM树,渲染树从被改变的dom开始再次渲染。

⑪继续向下渲染,碰到一个img标签,浏览器发起http请求,不会等待img加载完成,继续向下渲染,之后再重新渲染此部分。

⑫DOM树遇到html结束标签,停止解析,进而渲染结束。


算法篇

翻转链表+快排+其他排序+回文字符串+二叉树遍历+跳台阶+合并两个有序数组。

操作系统篇

多进程,多线程
原则上一个CPU只能分配给一个进程,以便运行这个进程。通常使用的计算机中只有一个CPU,同时运行多个进程,就必须使用并发技术。通常采用时间片轮转进程调度算法,在操作系统的管理下,所有正在运行的进程轮流使用CPU,每个进程允许占用CPU的时间非常短(比如10毫秒),这样用户根本感觉不出来CPU是在轮流为多个进程服务,就好象所有的进程都在不间断地运行一样。但实际上在任何一个时间内有且仅有一个进程占有CPU。如果一台计算机有多个CPU,情况就不同了,如果进程数小于CPU数,则不同的进程可以分配给不同的CPU来运行,这样,多个进程就是真正同时运行的,这便是并行。但如果进程数大于CPU数,则仍然需要使用并发技术。在Windows中,进行CPU分配是以线程为单位的,一个进程可能由多个线程组成。操作系统将CPU的时间片分配给多个线程,每个线程在操作系统指定的时间片内完成(注意,这里的多个线程是分属于不同进程的).操作系统不断的从一个线程的执行切换到另一个线程的执行,如此往复,宏观上看来,就好像是多个线程在一起执行.由于这多个线程分属于不同的进程,就好像是多个进程在同时执行,这样就实现了多任务。总线程数<=CPU数量时并行运行,总线程数>CPU数量时并发运行。并行运行的效率显然高于并发运行,所以在多CPU的计算机中,多任务的效率比较高。但是,如果在多CPU计算机中只运行一个进程(线程),就不能发挥多CPU的优势。

请你说一下线程通信的方法、线程的五种状态

请你说一下死锁的概念、原因、解决方法

1、死锁是指在一组进程中的各个进程均占有不会释放的资源,但因互相申请被其他进程所站用不会释放的资源而处于的一种永久等待状态。死锁的四个必要条件:
• 互斥条件(Mutual exclusion):资源不能被共享,只能由一个进程使用。

• 请求与保持条件(Hold and wait):已经得到资源的进程可以再次申请新的资源。

• 非剥夺条件(No pre-emption):已经分配的资源不能从相应的进程中被强制地剥夺。

• 循环等待条件(Circular wait):系统中若干进程组成环路,该环路中每个进程都在等待相邻进程正占用的资源。

java中产生死锁可能性的最根本原因是:1)是多个线程涉及到多个锁,这些锁存在着交叉,所以可能会导致了一个锁依赖的闭环;2)默认的锁申请操作是阻塞的。

如,线程在获得一个锁L1的情况下再去申请另外一个锁L2,也就是锁L1想要包含了锁L2,在获得了锁L1,并且没有释放锁L1的情况下,又去申请获得锁L2,这个是产生死锁的最根本原因。

2、避免死锁:

• 方案一:破坏死锁的循环等待条件。

• 方法二:破坏死锁的请求与保持条件,使用lock的特性,为获取锁操作设置超时时间。这样不会死锁(至少不会无尽的死锁)

• 方法三:设置一个条件遍历与一个锁关联。该方法只用一把锁,没有chopstick类,将竞争从对筷子的争夺转换成了对状态的判断。仅当左右邻座都没有进餐时才可以进餐。提升了并发度。

说一下多线程
最开始,线程只是用于分配单个处理器的处理时间的一种工具。但假如操作系统本身支持多个处理器,那么每个线程都可分配给一个不同的处理器,真正进入“并行运算”状态。从程序设计语言的角度看,多线程操作最有价值的特性之一就是程序员不必关心到底使用了多少个处理器。程序在逻辑意义上被分割为数个线程;假如机器本身安装了多个处理器,那么程序会运行得更快,毋需作出任何特殊的调校。根据前面的论述,大家可能感觉线程处理非常简单。但必须注意一个问题:共享资源!如果有多个线程同时运行,而且它们试图访问相同的资源,就会遇到一个问题。举个例子来说,两个线程不能将信息同时发送给一台打印机。为解决这个问题,对那些可共享的资源来说(比如打印机),它们在使用期间必须进入锁定状态。所以一个线程可将资源锁定,在完成了它的任务后,再解开(释放)这个锁,使其他线程可以接着使用同样的资源。
多线程是为了同步完成多项任务,不是为了提高运行效率,而是为了提高资源使用效率来提高系统的效率。线程是在同一时间需要完成多项任务的时候实现的。

一个采用了多线程技术的应用程序可以更好地利用系统资源。其主要优势在于充分利用了CPU的空闲时间片,可以用尽可能少的时间来对用户的要求做出响应,使得进程的整体运行效率得到较大提高,同时增强了应用程序的灵活性。更为重要的是,由于同一进程的所有线程是共享同一内存,所以不需要特殊的数据传送机制,不需要建立共享存储区或共享文件,从而使得不同任务之间的协调操作与运行、数据的交互、资源的分配等问题更加易于解决。

进程同步的方法

1、临界区(Critical Section):通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。
优点:保证在某一时刻只有一个线程能访问数据的简便办法

缺点:虽然临界区同步速度很快,但却只能用来同步本进程内的线程,而不可用来同步多个进程中的线程。

2、互斥量(Mutex):为协调共同对一个共享资源的单独访问而设计的。

互斥量跟临界区很相似,比临界区复杂,互斥对象只有一个,只有拥有互斥对象的线程才具有访问资源的权限。

优点:使用互斥不仅仅能够在同一应用程序不同线程中实现资源的安全共享,而且可以在不同应用程序的线程之间实现对资源的安全共享。

缺点:①互斥量是可以命名的,也就是说它可以跨越进程使用,所以创建互斥量需要的资源更多,所以如果只为了在进程内部是用的话使用临界区会带来速度上的优势并能够减少资源占用量。因为互斥量是跨进程的互斥量一旦被创建,就可以通过名字打开它。

②通过互斥量可以指定资源被独占的方式使用,但如果有下面一种情况通过互斥量就无法处理,比如现在一位用户购买了一份三个并发访问许可的数据库系统,可以根据用户购买的访问许可数量来决定有多少个线程/进程能同时进行数据库操作,这时候如果利用互斥量就没有办法完成这个要求,信号量对象可以说是一种资源计数器。

3、信号量(Semaphore):为控制一个具有有限数量用户资源而设计。它允许多个线程在同一时刻访问同一资源,但是需要限制在同一时刻访问此资源的最大线程数目。互斥量是信号量的一种特殊情况,当信号量的最大资源数=1就是互斥量了。

优点:适用于对Socket(套接字)程序中线程的同步。(例如,网络上的HTTP服务器要对同一时间内访问同一页面的用户数加以限制,只有不大于设定的最大用户数目的线程能够进行访问,而其他的访问企图则被挂起,只有在有用户退出对此页面的访问后才有可能进入。)

缺点:①信号量机制必须有公共内存,不能用于分布式操作系统,这是它最大的弱点;

②信号量机制功能强大,但使用时对信号量的操作分散, 而且难以控制,读写和维护都很困难,加重了程序员的编码负担;

③核心操作P-V分散在各用户程序的代码中,不易控制和管理,一旦错误,后果严重,且不易发现和纠正。

4、事件(Event): 用来通知线程有一些事件已发生,从而启动后继任务的开始。

优点:事件对象通过通知操作的方式来保持线程的同步,并且可以实现不同进程中的线程同步操作。

请问进程线程的区别,进程间怎么相互通信,什么是多线程,什么是并发

进程和线程的区别有以下几点
1、进程是资源分配的最小单位,线程是程序执行的最小单位

2、进程有自己独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段,堆栈段,数据段,而线程是共享进程中的数据的,使用相同的地址空间,但是CPU切换一个线程的花费远比进程要小,

3、线程之间通信方式更方便,同一进程下的线程共享全局变量等数据,而进程之间的通信方式需要以通信的方式进行,

4、多线程程序中只要有一个线程死掉了,整个进程也死掉了,而一个进程死掉了,并不会对另一个进程造成影响,因为进程有自己独立的地址空间

进程间的通信方式:

1、无名管道通信,数据只能单向流动,只能在具有亲缘的进程间使用

2、高级管道通信,将领一个程序当作一个新的进程在当前程序中启动,则他算是当前进程的子进程

3、有名管道通信,允许无亲缘关系进程间的通信

4、消息队列通信,消息队列是由消息的链表,存放在内核中并由消息队列标识符标识,消息队列克服了信息传递信息少等缺点

5、信号量通信,信号量用于控制多个进程对共享资源的访问

6、信号通信,用于通知接受进程某个事件已经发生

7、共享内存通信,共享内存映射一段能被其他进程所访问的内存,往往与其他通信机制配合使用,来实现进程间的同步和通信

8、套接字通信,他用于不同机器之间的进程通信

什么是多线程

多线程就是指一个进程中同时有多个执行路径正在执行

并发指在操作系统中,一个时间段中有几个程序都已处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上面,但任意时刻点上只有一个程序在处理机上运行。

C++篇

Python篇

暑期实习+秋招面经合集(更新ing)相关推荐

  1. Java面经:小米暑期实习+秋招真题分享

    秋招结束,总结了一下从寒假回来开始的实习生招聘和秋招面经,过来回馈一下牛客网. 上学期寒假回来就开始投简历,找人内推的小米,过几天后约时间面试,部门未知. 一面 1小时7分钟 上来先自我介绍,然后开始 ...

  2. 实习秋招C++知识点总结

    实习/秋招时按自己需求总结的知识点,内容并不十分详细,建议选择性阅读. C++基础 如何在main函数之前调用函数 C语言,采用__attribute__关键字,void f()attribute(( ...

  3. 海康威视2019年校园招聘内推码(2019届春招、2020届实习/秋招)

    官宣拥有内推码的同学,同等条件择优录取,在每一个环节都会更加具有优势 海康威视2019年校园招聘内推码(2019届春招.2020届实习/秋招): 5S3QAI (最好复制内推码,不要写错了,写错了可能 ...

  4. 实习秋招linux和网络编程知识点总结

    实习/秋招时按自己需求总结的知识点,内容并不十分详细,建议选择性阅读. 部分图片已失效. git常用命令速查表 git回滚 https://www.jianshu.com/p/f7451177476a ...

  5. 中科大软件学院硕士:实习秋招百多轮面试总结(上)

    大家好,我是对白. 今天给大家介绍一位我的朋友,他是中科大软件学院的硕士,在去年秋招中斩获了多个互联网大厂的offer,后来他将自己从实习到秋招参加的一百多轮面试进行了总结,希望对即将找工作的大家有所 ...

  6. 我的2018春招实习+秋招总结【前端开发】

    双非本科,通信工程,算是转到IT行业这边的了.从大二暑期正式开始学习前端,想想已经一年的时间了.期间经历了很多,从迷惘到清晰,从艰难自学到找到实习,从备战秋招到找到工作.能经历的我都经历过了.来说说那 ...

  7. 【前端春招】前端春招实习+秋招心路历程

    想写这篇由来已久了,大抵是自己比较懒惰,所以拖了这么久,从2021的3月份决定走前端然后春招开始,一直在白嫖面经帖子并受益良多,面经帖子很多,但是关于感受感想和一些经历的思考帖子不太多,在春招面试的路 ...

  8. 2018互联网实习秋招回顾(BATM+MS+Intel+NE+DJI)

    先介绍本人在2018年的暑期实习和秋招拿到的offer: 实习:阿里(c++后台研发),微软(c++后台开发),网易游戏(基础架构研发),大疆(测试开发),地平线(嵌入式软件开发),微策略(c++后台 ...

  9. 2018年秋招记录-前端开发-更新完结

    关于自己:7.8月份疯狂投简历,9月初看到各种大佬拿各种大厂offer,各种羡慕.然而菜鸡的自己目前还是只收获了惨淡的一堆笔试,想把这次秋招的经历记录下来,也好给后来人参考(秋招说不定挂了还得继续春招 ...

最新文章

  1. 港大徐爱民组研究助理招聘-内分泌代谢方向
  2. 计算机科学与技术联合培养是什么意思,联合培养
  3. P1582 倒水(二进制)
  4. python如何创建一个列表_在python中创建列表的最佳和/或最快方法
  5. 学校计算机教室的用途,录播教室有什么功能,又有哪些用途
  6. TCP加速机制是如何加速的?
  7. java 删除n天前的文件_linux自动删除n天前备份
  8. OpenGL ES glew 下载和使用
  9. 常用IP扫描工具整理一下
  10. CAN总线学习总结2——CAN错误及CAN busoff处理机制
  11. 第二章第一题(将摄氏温度转换为华氏温度)(Convert Celsius to Fahrenheit)
  12. 命令模式,升级版的灭霸响指
  13. ie 启用 java_无法使用带有Java的Selenium2(Webdriver)启动IE浏览器
  14. 街霸5服务器链接已中断,《街头霸王5》常见问题解决方法
  15. 阿里云服务器ECS适用于哪些场景?
  16. 英伟达面向开发者群体建立深度学习课程
  17. git常用命令+代码上传冲突+vscode拉取代码报would clobber existing tag错误
  18. 如何屏蔽百度右侧的广告
  19. Atitit 怎么阅读一本书 消化 分析 检索 attilax总结 1 读书的本质 是数据的处理,大量的数据,处理能力
  20. 我要喷一个自认为很垃圾的网站架构 - 老赵【苏州】

热门文章

  1. 代码随想录第二十五天|261.组合总和、17.电话号码的字母组合
  2. idea启动项目时一直build等待(很简单)
  3. Java小程序简易多客户端聊天服务器
  4. Linux 日志查看方法(小记)
  5. 上不了岸的new grad,惨遭layoff的码农,都在抓这根“救命稻草”!
  6. php 仪表盘模板,后台界面整体美化带仪表盘
  7. 高速公路超速处罚 (15 分)
  8. DHT11的使用资料
  9. 修改hosts 不生效? 三种方法解决
  10. body-parser是什么?怎么用?