测试常见问题整理

测试常见问题

• 软件测试的目的是什么?
1.为了发现程序中的缺陷,保证软件质量。 2.满足用户需要
• 软件测试的一般流程是怎么样的?
1.项目立项后,参加需求评审 2.根据需求文档制定测试用例,然后进行用例评审 3.项目提测后,执行用例,问题记录cp4,及时有效的跟进问题的解决情况 4.测试环境测试通过后,产品进行验收测试
• 常见的测试类型有哪些?分别说明一下?
1.黑盒测试,即常说的功能测试 2.白盒测试,即单元测试,通常由开发来完成,对程序类和方法的测试 3.兼容性测试,主要是浏览器的兼容测试 4.集成测试,即各个模块的测试 5.系统测试,各模块测试完成后,对整个系统的完整性测试 6.回归测试 7.验收测试
• 测试用例设计常用的方法有哪些?详细说明一下?
最常用的3种 等价类划分、边界值、场景法 1.等价类划分 分为有效等价类和无效等价类,将测试的范围划分成几个互不相交的子集,从每个子集选出若干个有代表性的值作为测试用例 2.边界值:选取正好等于、刚刚大于、刚刚小于边界的 3.场景法:划分不同的场景,然后逐一进行验证
• 解释下单元测试,集成测试,系统测试以及验收测试?
1.单元测试,通常由开发来完成,对程序类和方法的测试 2.集成测试,即各个模块的测试 3.系统测试,各模块测试完成后,对整个系统的完整性测试 4.验收测试,测试环境测试通过后,由产品或者用户进行验收测试,看看产品的实现,是不是满足了他们当初设计的需求
• 探索性测试是什么?应该怎么做?
在需求文档不完善或者压根没有需求文档的情况下,根据经验进行摸索尝试性进行的测试,是测试过程中形成的基本的思维性测试
• 什么是冒烟测试,如何有效的开展冒烟测试?
1.软件最基本的功能测试,通常由开发完成,只有冒烟点都通过的产品,交由测试,才会比较有意义 2.冒烟测试贯穿于测试的各个阶段,比如集成测试,系统测试等
• 一条高质量的缺陷记录(Bug)应该具有哪些内容?
1.记录bug产生的前提条件 2.产生bug的详细操作步骤 3.截图,直观的展示问题,有效帮助开发快速定位问题
• 缺陷的生命周期是怎样的?
1新建–提交–分配–修复–验证–验证通过关闭–验证不通过reopen
• Alpha测试与Beta测试的区别?
1.Alpha测试:把用户请到开发方的场所来测试,用户在模拟实际操作环境下进行的测试,由开发记录下用户反馈的问题 2.beta测试:当开发和测试根本完成时所做的测试,很多不同的用户,在不同的环境下操作,然后用户把产生的问题,定期发给开发者,进行修复(开发不在现场) 3.通常现有alpha测试,后有bata测试
• 你认为做好软件测试应该具备哪些素质?
1.较好的技术能力 2.对业务逻辑的理解 3.良好的沟通能力 4.解决和分析事情的能力
• 作为测试人员,在与开发人员沟通过程中,如何有效的提高沟通效率和效果?
1.耐心的跟开发沟通,跟他阐述不过的重要性 说服他解决问题 2.充分尊重对方,哪怕再低级的bug都不要小看他 3.宽以待人,设身处地为他人着想 即使开发因为压力或者其他原因不肯合作 也要心平气和的跟他沟通 讨论bug的优先级 4.平时多跟开发沟通 无论是工作还是生活上的问题,但是测试一定要有自己的原则 对测试的产品质量负责 5.自己先定位问题 帮助开发缩小排查范围
• 你觉得软件测试工程师在一个团队中,都需要做什么?有什么价值?
1.在产品需求会上 可以站在用户的角度 提一些贴合用户需求的建议 2.测试阶段,根据自己对项目的了解和专业的测试技能 尽可能在项目上线前测出更多问题 保证产品质量 3.对测试过程中出现的问题 合理有效的进行风险评估。 4.对质量严格把关 测试不通过的 一定不能发布生产
• 在你以往的经历中,解决过的最困难的问题是什么?
环境问题,是所有测试人员都面临的一个难题;解决的那么多问题中,测试环境无法使用,无法快速的介入测试,仍然是比较突出的。曾经把一个长久未使用的环境,根据经验和clog定位,各个服务之间的调用,一步步完成调通
• 在你以往的工作或学习中,你最大的收获是什么?学到了什么?
1.业务的积累 2.通过各种自动化,如UI自动化,job自动化,api自动化,不仅提升了自己编码能力,也在每周的常规发布中,起到举足轻重的作用 3.长期的测试过程中,提升了自己解决问题的能力
• 在没有任何文档的情况下,你如何开展测试?
1.尽量的去获取其他的文档吧,比如开发的一 些设计文档—概要设计、功能设计、详细设计 2.尝试从网上找类似的项目文档,如果幸运,可以从公司的资料库找到类似的文档 3.按照开发的接口或者设计文档,按照功能模块划分,大致写一些用例,然后进行摸索测试,在测试过程中逐渐完善自己的用例
测试用例设计问题
• 测试用例是什么?如何设计有效的测试用例?
为了测试某个产品,编制的一组测试输入、执行条件以及预期结果 设计有效的测试用例: 1.明确需求,清晰的知道需求要实现哪些功能 2.根据需求文档,拆分出功能点和测试测试要点 3.详细的梳理业务需求,设计不同的业务场景,尽可能多的覆盖,尤其重要的逻辑,颗粒度要精细 4.具体逻辑的设计方法,遵循边界分析法,出问题最多的就在边界值,然后用等价类划分方法补充一些测试用例 5.UI测试,界面元素测试+样式+操作控件设计+浏览器兼容性相关的用例 6.时间充足的情况下,设计接口的测试用例,从而保证接口数据的用等价类划分方法补充一些测试用例完整性和正确性–目前携程提倡测试先行的概念,接口要在项目提测前,完成api自动化测试
• 输入三个整数,判断是否构成有效的三角形,针对这个设计测试用例
首先要设计满足三角形的条件,输入的三个数必须大于0,且同时满足任意两边之和大于第三边。假设三条边是A/B/C,则要满足的条件为A>0,B>0,C>0,A+B>C,A+C>B,B+C>A。以此为例来进行设计即可 有效等价类:A>0,B>0,C>0
28、目前主要的测试用例设计方法是什么?

等价类划分法、边界值分析法、错误推测法、判定表法、正交实验法。

Charles抓包原理
Charles作为一个中间人代理,在客户端给服务器端发消息的时候,会截取客户端发送给服务器的请求,然后伪装成客户端与服务器进行通信;服务器返回数据时将截取的数据发送给客户端,伪装成服务器与客户端进行通信。

Charles抓取HTTPS流程:
1客户端向服务器发起HTTPS请求
2Charles拦截客户端的请求,伪装成客户端向服务器进行请求
3服务器向“客户端”(实际上是Charles)返回服务器的CA证书
4Charles拦截服务器的响应,获取服务器证书公钥,然后自己制作一张证书,将服务器证书替换后发送给客户端。(这一步,Charles拿到了服务器证书的公钥)
5客户端接收到“服务器”(实际上是Charles)的证书后,生成一个对称密钥,用Charles的公钥加密,发送给“服务器”(Charles)
6Charles拦截客户端的响应,用自己的私钥解密对称密钥,然后用服务器证书公钥加密,发送给服务器。(这一步,Charles拿到了对称密钥)
7服务器用自己的私钥解密对称密钥,向“客户端”(Charles)发送响应
8Charles拦截服务器的响应,替换成自己的证书后发送给客户端
至此,连接建立,Charles拿到了 服务器证书的公钥 和 客户端与服务器协商的对称密钥,之后就可以解密或者修改加密的报文了。

• 针对文件上传功能,设计下测试用例
页面
1、页面美观性、易用性
2、按钮文字正确性
3、说明文字是否正确
4、正确/错误的提示文字是否正确
5、提示当前位置是否正确,并且和其他页面保持一致格式
6、必添项的标示是否正确
功能
1、路径是否可以手工输入
2、上传文件超过最大值是在提交前校验还是提交后校验
3、上传文件格式是否全部支持
4、上传文件是否支持中文名称
5、文件名称的最大值、最小值、特殊字符(包含空格)、使用程序语句是否会对其造成影响、中文名称是否能正常显示
6、对于是否发布的设置是否正确
7、简介最大值、特殊字符、使用程序语句是否会对其造成影响
按钮
1、保存按钮
· 对输入项有错误提示后光标提示是否正确
· 对输入项的错误提示是否描述正确
· 对必添项是否进行校验
2、清空按钮
· 是否清除了填写内容
3、返回按钮
· 是否返回上一页面
文件下载:
页面
1、当前位置的提示是否现实正确
2、页面美观性、易用性
3、按钮文字是否正确
4、说明性文字是否正确
5、正确/错误的提示文字是否正确
功能
1、右键另存为是否可以正确下载文件,并且记录下载次数
· 工具下载是否正确,并且记录下载次数
2、单击下载是提示下载还是在页面打开
· 直接打开是否显示正确
· 对于本机没有安装工具的文件是否能够打开,是否能给出正确的提示
· 对于直接在页面内打开的内容是否能够显示正常,页面美观性
· 保存到本地是否能正确显示
· 取消下载是否会纪录下载次数
3、下载次数是否被正确记录
4、后台没有发布的文件是否在前台可以找到并下载
5、后台设置了下载权限的文件是否可以被正确看到、是否可以下载
按钮
返回按钮是否回到上一页面
再补充一些其他的常见测试点:
1、上传文件名测试,检查不符合文件名规范
2、上传文件名类型测试,检查不同文件类型是否支持如:.rar,.mp3,avi等
3、上传文件大小测试,检查不同文件规格大小如:0字节文件, 1kb,200kb, 2mb, 20mb,2g等
4、上传文件容错性测试:如检查覆盖同文件操作;
5、上传文件异常情况测试:如硬盘空间不足
6、上传文件速率性能测试:检查上传不同的文件在不同的网络环境响应速度,及系统资源占用
7、上传文件安全性测试:如上传常见木马
8、上传文件易用性测试:检查上传文件操作是否让用户易于学习和理解使用等
9、上传文件特性测试:如果支持如断点续传等一些特性
10、上传文件后,检查是否与源文件一致,包含目录设置等
11、上传文件,是否能打开等
• 针对网上购物中订单提交的过程,设计测试用例
测试任何事物的测试思路:
第一步:梳理产品的核心业务流程:明白这是个什么项目,实现了什么业务,以及是怎么实现的?
第二步:根据流程进行模块细分,然后针对每个功能模块进行详细的测试点设计和提取。
进入购物车—> 加商品到购物车 —> 编辑购物车—> 选择商品—> 提交订单
**冒烟测试:**加入商品到购物车,并进入购物车,可以选择商品提交订单,跳转到订单页面。
然后我们再来细化每个模块的测试点:
进入购物车入口
底部菜单栏,点击跳转购物车
商品详情页顶部去购物车结算,点击跳转到购物车
用户购物车的权限
已经登录的用户,点击进入购物车,可以进行购物车相关的操作;
未登录的用户,点击进入购物车,提示未登录,并弹出登录界面。
购物车相关的操作
添加商品到购物车,查看购物车显示
添加一件商品到购物车,观察购物车显示,规则、信息描述等都正常
添加同一个商家的多件商品到购物车,观察购物车显示正常
添加同不同商家的多件商品到购物车,观察购物车显示正常
商品、商家名称和描述太长,UI 显示正常
点击商品链接可以打开商品详情页
货物状态:
a、有货,并显示商品的数量

b、无货,无法勾选选择,并调试重新选择商品的规格

c、下架,移到失效宝贝,可以找相似的商品

购买数量增减操作

数量范围:
有效:1/后台最低限购梳理~ 库存/最大限购数量

无效:0,大于库存,大于最大限购数量,小于最低限购数量,检查是否有友好的报错信息

数据类型:
有效:整数字

无效:非数字,可以是从字母、字符、中文里选择一个代表测试;还有小数,负数,检查书否有提示信息

必填项:输入数量为空/或者空格,检查是否有报错信息并友好
商品支持删除

点击删除是否有提示信息,可以确认和取消按钮可用
删除后,商品不显示在购物车列表;商品总件数减 1,总价检查更新正确
商品支持移入收藏夹

点击移入收藏夹后,购物车里不显示商品
收藏夹里增加商品显示正常
选择功能

单选商品,合计里的统计数据正确,并可以取消勾选
多选商品,合计里的统计数据正确,并可以取消勾选
全选,合计里的统计数据正确,并可以取消勾选;反勾选一个商品,全选框状态变化
点击去结算
点击结算,可以跳转到下一个页面,金额和数量都是正确的
空购物页面
空购物车检查页面显示,可以点击”去购物“跳转首页进行购物
功能交互
优惠券,有优惠券的使用规则,价格和限制是否正确
订单处理,跟订单功能模块的交互
登录功能模块的交互(见上面的登录用户和未登录用户)
APP 专项测试

如果是 Web 端的购物车功能,此处可以忽略;

如果是移动端的淘宝购物车,除了覆盖了基本业务功能测试之后,我们一定还要考虑到 APP 的专项测试,比如 APP 自身的安装、卸载、升级,消息的推送等;特别要关注一下“中断测试”和“网络测试”!
支付中断:
购物车操作过程中如果出现一些手机的中断行为,是否会受到影响以及是否可以正常继续。常见的中断类型有:
电话中断
网络中断
闹钟中断
插拔耳机中断
保证这些中断发生的时候,购物车的跳转和操作不会影响,更加不会导致一些异常情况发生,比如 APP 突然 crash 和 ANR 的情况;
网络测试:
验证各种网络类型:2G、3G, 4G,5G,wifi 下都可以正常操作;
进行网络切换,功能正常;
弱网测试下功能正常:
购物车结算的时候,不会重复提交订单;
APP 不会闪退 崩溃,而且页面提示友好;
淘宝购物车的非功能测试点
测试完以上的功能测试点之后,我们还需要验证一些非功能测试点,主要包括以下几个方面:
1)界面
验证界面的美观,排版和错别字等。
2)兼容性
移动端的淘宝购物车:
a、考虑测试手机移动端的兼容,比如手机型号
b、考虑系统版本的兼容,主流的系统版本需要测试覆盖
c、考虑不同屏幕大小及分辨率的兼容性测试
Web 端的淘宝购物车:
a、考虑浏览器的兼容性,不同的内核版本的浏览器
b、从同一个内核版本的浏览器里选择主流的浏览器进行测试
3)易用性

测试站在用户的角度考虑用户体验,使用是否方便等。

4)性能

比如大量用户同时操作等,一般需要借助工具或者代码进行测试。

5)安全

验证敏感信息是否加密,是否可以篡改;通过一些工具进行安全扫描,检查是否有安全漏洞;或者采用一些其他的手段进行专门的安全测试。
• 列举你以往项目测试中遇到的风险以及你如何处理的?
• 列举你曾经做过的测试(你认为有技术含量的或者提高了测试管理能力的),并说下你从中如何受益?
• 如何开展软件测试工作?一个模块如何展开测试?
第一:掌握需求和被测试业务系统的业务流程。需求的掌握是测试人员进行测试工作的前提,如果对需求的理解不够深入,测试工作将无法进行;而对被测试系统业务流程的熟悉决定了测试的覆盖度,系统业务熟悉度越深,则测试的宽度就会越宽;确切的说业务的理解决定了测试的宽度,而测试技术的掌握,决定了整个测试的深度。
第二:高效的用例设计能力。一个好的测试用例将会决定整个测试过程中的测试进度和缺陷的命中率,即能满足预定的需求覆盖率,又能达到很好的测试效果,即最少的测试用例,满足最大的需求覆盖。所以整个测试过程中用例的设计最为关键,根据所实际测试过程中应用的测试策略,决定采用哪些测试类型,是以手工测试为主,还是手工测试和自动化测试结合,以便使整个测试更加高效。
第三:缺陷的跟踪及推动能力。作为测试人员不仅需要较强的执行力,更重要的需要有一定的推动能力。即从测试人员第一次提交缺陷,至到缺陷关闭的整个过程,测试人员在这个期间推动开发修复缺陷的能力,是否能够及时的跟进,与需求,开发之间的沟通,协助开发完成对缺陷的修复。这个也非常的重要,缺陷的推动能力将决定了整个项目上线的周期,以及为后期出现风险性的问题提供出一定的处理时间空间。

自动化测试问题
• 你认为适合做自动化测试的标准是什么?
• 在一个项目中目前还没有进行自动化,如果我想开展自动化测试,我应该怎么做(一般步骤)?
• 什么是自动化测试框架?一个好的自动化测试框架应该具备什么元素?
• 说一下你写过的测试框架的代码目录结构是怎么样的?
• 自动化测试框架的类型有哪些?
• 自动化测试是否仅仅可以是实施在UI层?为什么?
• 你是否熟悉Selenium工具?说一下它是什么?
性能测试问题
• 什么是性能测试?为什么要进行性能测试?
• 性能测试的类型有哪些?
• 列举下性能测试中常涉及的性能计数?
并发数
首先,理解三个用户数的概念:
系统用户数、在线用户数、并发用户数
响应时间
先看一个请求从发出到用户看到结果的过程:用户发送一个请求后,通过网络传输、DNS解析等步骤到达Server端后,Server通过各种算法处理,将结果通过网络传输返回到Client,Client要经过解析渲染等步骤,最后才呈现给用户。
通过以上流程可知,响应时间的计算模式:响应时间=请求传输时间+Server处理时间+响应传输时间+前端解析渲染时间。
TPS
即Transaction Per Second,每秒通过事务数。TPS是直接反映系统性能的指标。TPS值与系统性能成正比

吞吐量
即单位时间内系统能处理的请求数量,吞吐量也是可直接反映服务器所能承受的压力。
资源利用率
关于资源利用率初期了解以下几个重要指标即可:
CPU
对于CPU都不陌生,简言之,是用来处理\判断事务的,CPU一般有系统CPU与用户CPU,前者是 处理系统占用的资源 ;而后者是处理应用程序占用的资源 。
网络
即网络传输的流量,测试过程中对网络的监控以,以分析是否存在瓶颈。
IO
即,Input/Output,输入/输出。关注与磁盘的交互频率等
(1)连接超时

这个是App关闭的首要问题,而在移动应用中网络错误数据比例报错中最高的就是连接超时错误。想象一下当花重金好不容易把你的App推广到用户手机上,而在用户初次尝试时发生连接超时无法正常使用,多数用户会选择再也不会打开应用第二次。

(2)崩溃

这个已无需多言。APP的崩溃,就是用户的崩溃。当用户使用你的App出现闪退或崩溃时,他们很有可能跑去App Store赠送你一个“一星”差评。

(3)系统交互(电话短信干扰,低电量提醒,push提醒,usb数据线插拔提醒,充电提醒等)

在APP使用过程中,可能会遇到各种中断场景,那么一旦发生这些场景,APP就卡死或者闪退,想必也没有多少用户愿意持续使用你的APP。

(4)弱网下的运行情况

电梯里、地铁上,网络信号差时,APP页面的菊花转不停,界面卡死,同时错误提示一堆,这样的情况怎能不让用户抓狂。

(5) CPU使用问题

CPU频率设置过高时会导致过热,过热导致耗电更严重,CPU频率设置过低导致手机滞后,应用处理缓慢同样会导致耗电。更多时候,用户解决CPU超载问题只能关闭甚至卸载App,App就被Kill了!
• 性能测试中并发用户点击量是什么?如何实现?
• 性能测试中吞吐量是什么?
Java面试题
• 重写和重载的区别是什么?为什么重载不能根据返回值判断?
重写 @Override(不同类),用于子类继承父类,在子类去重写方法,对父类进行扩充或改造 ps:父类的方法只有是public或者protected的,子类才能重写方法,其他的如父类是私有或者default,子类都是不可见的,所以不能重写方法 子类的方法名,参数,返回值都跟父类相同,重写的方法修饰符大于等于父类的方法 重载,同一个类中,存在相同的方法名,但是方法的参数一定不同 为什么重载不能根据返回值判断?–答案:因为如果根据返回值判断,那么编译器编译的时候,如果参数相同,就不知道调用哪个方法了
• 访问修饰符public,private,protected以及默认之间的区别
类的成员不写访问修饰时默认为default。默认对于同一个包中的其他类相当于公开(public),对于不是同一个包中的其他类相当于私有(private)。受保护(protected)对子类相当于公开,对不是同一包中的没有父子关系的类相当于私有。 Java中,外部类的修饰符只能是public或默认
• 抽象类和接口的异同?
接口和抽象类的异同
1、 接口和抽象类相似,它们都具有如下特征
• 接口和抽象类都不能被实例化。只能被其他类实现和继承。
• 接口和抽象类都可以包含抽象方法,实现接口和抽象类的类都必须实现这些抽象方法
2、接口和抽象类有如下不同
• 抽象类与接口定义不同:抽象类abstract class ,接口 interface
• 接口里只能包含抽象方法,不包含已经实现的方法;抽象类则完全可以包含普通的方法。
• 接口里不能定义静态方法;抽象类可以定义静态方法
• 接口里只能定义静态常量属性,不能定义普通属性;抽象类里既可以定义普通属性,也可以定义静态常量
• 接口不包含构造函数;抽象类可以包含构造函数,抽象类里的构造函数并不是用于创建对象,而是让其子类调用这些构造函数来完成属于抽象类的初始化操作。
• 接口不包含初始化块,但抽象类可以包含初始化块
• 一个类最多只能有一个直接父类,包括抽象类;但一个类可以直接实现多个接口,通过实现多个接口可以弥补java的单继承不足
总结:
1、普通类中有的东西,抽象类都包含,此外抽象类比普通类多了抽象方法。
2、接口中只包含抽象方法和静态常量属性。
• Java中的异常有哪几类?分别怎么使用?
1、按照能否处理划分:Error、Exception
Throwable类是所有异常的超类,有两个子类,分为Error和Exception
Error:错误是无法处理的,只能更改代码,就像一个人得癌症一样
Exception:异常是可以处理的,就像是感冒一样,吃药就能好
2、按照编译、运行时划分
编译时异常:写代码的时候就会提醒你有异常IOException、SQLException
运行时异常:java.lang.RuntimeException,运行的时候会在控制台提示异常
• 常用的集合类有哪些以及各自有什么特点?
集合的两个顶级接口分别为:Collection和Map
Collection下有两个比较常用的接口分别是List(列表)和Set(集),其中List可以存储重复元素,元素是有序的(存取顺序一致),可以通过List脚标来获取指定元素;而Set不可以有重复元素,元素是无序的。
List接口中,比较常用的类有三个:ArrayList、Vactor、LinkedList。
ArrayList :线程不安全的,对元素的查询速度快。
Vector :线程安全的,多了一种取出元素的方式:枚举(Enumeration),但已被ArrayList取代。
LinkedList :链表结构,对元素的增删速度很快。
Set接口中,比较常用的类有两个:HashSet、TreeSet:
HashSet:要保证元素唯一性,需要覆盖掉Object中的equals和hashCode方法(因为底层是通过这两个方法来判断两个元素是否是同一个)。
TreeSet:以二叉树的结构对元素进行存储,可以对元素进行排序。
Map接口其特点是:元素是成对出现的,以键和值的形式体现出来,键要保证唯一性:常用类有:HashMap,Hashtable ,TreeMap。
HashMap:线程不安全等的,允许存放null键null值。
Hashtable:线程安全的,不允许存放null键null值。
TreeMap:可以对键进行排序(要实现排序方法同TreeSet)。
Collection和Map两个接口对元素操作的区别:
存入元素:
Collection接口下的实现类通过add方法来完成,而Map下是通过put方法来完成。
取出元素:
Collection接口下:List接口有两种方式:1、get(脚标);2、通过Iterator迭代方式获取元素;而Vactor多了一种枚举(Enumeration)的方式。Set接口通过迭代的方式获取元素。
Map接口下:先通地keySet获取键的系列,然后通过该系列使用Iterator迭代方式获取元素值。
• ArrayList和LinkedList内部的实现大致是怎样的?他们之间的区别和优缺点?
ArrayList:数组实现,根据下标可以快速定位,删除数据的时候,数组会移动,效率较低
LinkedList:链表实现,删除数据效率很高,对于集合修改比较频繁的地方建议使用
• 内存溢出是怎么回事?请举几个可能出现内存溢出的场景?
点,堆内存用来存储对象实例,我们只要不停的创建对象,并且保证GC Roots和对象之间有可达路径避免垃圾回收,那么在对象数量超过最大堆的大小限制后很快就能出现这个异常。
java堆内存泄漏:Java中的内存泄漏是一些对象不再被应用程序使用但垃圾收集无法识别的情况。因此,这些未使用的对象仍然在Java堆空间中无限期地存在。不停的堆积最终会触发java . lang.OutOfMemoryError。
解决方法:重写equals方法即可
• ==和equals的区别?
==是判断两个变量或实例是不是指向同一个内存空间,equals是判断两个变量或实例所指向的内存空间的值是不是相同
==是指对内存地址进行比较 , equals()是对字符串的内容进行比较
==指引用是否相同, equals()指的是值是否相同
• hashCode方法的作用是什么?
hashCode() 方法的存在主要是用于查找的快捷性,如Hashtable,HashMap等,hashCode() 方法是用来在散列存储结构中确定对象的存储地址的;
如果两个对象相同,就是适用于 equals(Java.lang.Object) 方法,那么这两个对象的 hashCode 一定要相同
• HashMap实现原理,如何保证HashMap的线程安全?
HashMap简单说就是它根据建的hashcode值存储数据的,大多数情况下可以直接定位到它的值,因而具有很快的访问速度,但遍历的顺序是不确定的
HashMap基于哈希表,底层结构由数组来实现,添加到集合中的元素以“key–value”形式保存到数组中,在数组中key–value被包装成一个实体来处理-也就是上面Map接口中的Entry
使用ConcurrentHashMap,它使用分段锁来保证线程安全,只需要锁住要修改的部分。
• Java中一个字符占多少个字节,扩展再问int, long, double占多少字节
字符”就是指 Java 中的 char,那它就是 16 位,2 字节。int 4字节,long,double 8字节
• 创建一个类的实例都有哪些办法?
• final/finally/finalize的区别?
• String/StringBuffer/StringBuilder的区别?
• 什么是java序列化,如何实现java序列化?
JVM
• JVM内存结构,为什么需要GC?
• JVM堆的基本结构
• JVM的垃圾算法有哪几种?CMS垃圾回收的基本流程?
• JVM有哪些常用启动参数可以调整,描述几个?
• 如何查看JVM的内存使用情况?
• 你常用的JVM配置和调优参数都有哪些?分别什么作用?

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值