精华内容
下载资源
问答
  • 面试题:你印象深刻的两个bug是什么,你是怎么解决的? 在面试的时候,很多时候面试官都会问你这个问题,如果你没有准备或者最近没有在做项目的话,你短时间是很难想起你遇到的bug的。毕竟在做项目的时候遇到的...

    面试题:你印象最深刻的两个bug是什么,你是怎么解决的?

    在面试的时候,很多时候面试官都会问你这个问题,如果你没有准备或者最近没有在做项目的话,你短时间是很难想起你遇到的bug的。毕竟在做项目的时候遇到的问题会有很多,有些bug可能会卡你两天,或者更久。但是如果你不做记录,你过段时间就会把整个印象深刻的bug给想出来。想不出来,你这道面试题就会答得不好,这多少是会影响你的面试成绩的。最近我面试的时候就遇到这样一个问题,当时我想了很久都没想出来,后面答得自然也不是很好,回答的比较宽泛和笼统。所以我就写了这篇博客来记录一下我回想起来的一些bug。

    1、http响应码403问题

    当时这个问题卡了有点久,403错误就是浏览器禁止你跨域访问。为了解决这个问题,我在网上查了很多资料,而且得到了很多解决方案,主要的解决方案可以归为三种,分别为jsonp,nginx和cors。

    • Jsonp
      最早的解决方案,利用script标签可以跨域的原理实现。
      限制:
      • 需要服务的支持
      • 只能发起GET请求
    • nginx反向代理
      思路是:利用nginx把跨域反向代理为不跨域,支持各种请求方式
      缺点:需要在nginx进行额外配置,语义不清晰
    • CORS
      规范化的跨域请求解决方案,安全可靠。
      优势:
      • 在服务端进行控制是否允许跨域,可自定义规则
      • 支持各种请求方式
        缺点:
      • 会产生额外的请求

    我们这里会采用cors的跨域方案。

    CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing)。

    它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。

    CORS需要浏览器和服务器同时支持。目前,所有浏览器都支持该功能,IE浏览器不能低于IE10。

    • 浏览器端:
      目前,所有浏览器都支持该功能(IE10以下不行)。整个CORS通信过程,都是浏览器自动完成,不需要用户参与。
    • 服务端:
      CORS通信与AJAX没有任何差别,因此你不需要改变以前的业务逻辑。只不过,浏览器会在请求中携带一些头信息,我们需要以此判断是否允许其跨域,然后在响应头中加入一些信息即可。这一般通过过滤器完成即可。

    CORS的原理很复杂,但是实现起来是比较简单的,只需要写一个配置类,放行你想要访问的域名或者方法就可以了。代码如下:

    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.cors.CorsConfiguration;
    import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
    import org.springframework.web.filter.CorsFilter;
    
    @Configuration
    public class LeyouCorsConfig {
        @Bean
        public CorsFilter corsFilter() {
            //1.添加CORS配置信息
            CorsConfiguration config = new CorsConfiguration();
            //1) 允许的域,不要写*,否则cookie就无法使用了
            config.addAllowedOrigin("http://xxx.com");
            //2) 是否发送Cookie信息
            config.setAllowCredentials(true);
            //3) 允许的请求方式
            config.addAllowedMethod("OPTIONS");
            config.addAllowedMethod("HEAD");
            config.addAllowedMethod("GET");
            config.addAllowedMethod("PUT");
            config.addAllowedMethod("POST");
            config.addAllowedMethod("DELETE");
            config.addAllowedMethod("PATCH");
            // 4)允许的头信息
            config.addAllowedHeader("*");
    
            //2.添加映射路径,我们拦截一切请求
            UrlBasedCorsConfigurationSource configSource = new UrlBasedCorsConfigurationSource();
            configSource.registerCorsConfiguration("/**", config);
    
            //3.返回新的CorsFilter.
            return new CorsFilter(configSource);
        }
    }
    

    之所以卡了比较久的时间,是因为对这个cors原理不是很熟悉,直接拷贝别人的代码并不能一次性保证自己的程序跑通,所以修改的时候如果没有了解cors的原理,修改起来是很费劲的。
    原理复杂,实现简单。

    2、中间件配置问题

    这个问题经常碰的到,而且如果按照网上的教程,自己配置不成功,那就只能卡在那里。最要命的是,如果网上的资料查不到你想要的解决方案的时候,那你就真的不知道该怎么办了。我就遇到过很多这样的情况,就比如说在配置FastDFS的时候,我需要将我上传的图片保存在FastDFS中做分布式存储。当时经过我的重复检验,代码是完全没有问题的,问题就出在服务器上的FastDFS上,这个问题是真的卡了我一两天,网上查遍资料无果。问别人也不知道,我只能在那慢慢等死,无计可施。过了一两天后,我问了一个阿里的大佬,他就一眼看出了问题所在。当时我也是恍然大悟,因为我的请求组都是通过nginx代理服务器进行转发的,而且监测的端口号是80端口,我服务器上配置的tomcat也是80端口,问题就出现在这里。当发送上传文件到FastDFS请求的时候,它优先找的是tomcat的80端口,也就自然不会转发到FastDFS上了。改了tomcat的端口号之后,果然可以访问了。那时候我有想哭又想笑,真的是没想到这么小的问题卡了这么久,要是没有发现这个问题,我都可能还会一直卡在那里。

    3、服务器的iptables问题

    这个问题也卡了很久,一开始我不知道这个会影响外网访问服务器,一直以为防火墙是fireWall,我那时特别纳闷,就是我的Firewall已经是禁用状态,但是为什么我外网访问就是访问不了。这个问题导致我rabbitMQ,ElasticSearch,redis等等配置的中间件外网无法访问,网上差的资料,一大半都是跟我说把firewall关掉禁用,都是没有用的。最后才看到有iptables这个东西。如果想要外网访问,就需要放行端口,允许外网访问该端口,否则你是无法访问的。。。。。
    具体的iptables的操作命令点击这里

    总结:

    比较难解决的bug无非就两种,一种就是程序的逻辑出现问题,导致得不到正确的结果,第二种就是一些中间件,开发环境的问题。
    (1)如果是逻辑出现了问题,你项目比较大的话,那只能是通过单步调试,或者用System.out.println()打印出来想要得到的数据看看是哪步出了问题。
    (2)如果是开发环境或者是中间件的问题,那只能是通过网上查阅资料来解决问题。如果你英语阅读能力还可以的话,我推荐使用Stack Overflow来查阅资料。

    展开全文
  • 有哪些让你印象深刻bug?

    万次阅读 2020-03-08 13:11:17
    面试时让你说一个印象最深bug,该怎么回答 其实,面试官并不关心你描述的这个bug是否真的有价值,或有多曲折离奇?他只是: 1.了解你平时工作中的测试能力 所以,这就要求的你平时工作中遇到bug时试着自己去定位,...

    面试时让你说一个印象最深的bug,该怎么回答
    转载自:http://www.bcbxhome.com/bcbxxy/forum.php?mod=viewthread&tid=87&highlight=%E5%8D%B0%E8%B1%A1
    http://www.bcbxhome.com/bcbxxy/forum.php?mod=viewthread&tid=86&highlight=%E5%8D%B0%E8%B1%A1

    其实,面试官并不关心你描述的这个bug是否真的有价值,或有多曲折离奇?他只是:

    1.了解你平时工作中的测试能力

    所以,这就要求的你平时工作中遇到bug时试着自己去定位,定位bug的过程远比你的单纯的执行测试用例有“价值”(自我技能提高的价值),在定位bug的过程中你需要掌握和运用更多知识。

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

    2.考察你的表达能力

    我们搞技术的有许多属于闷骚性格(我也是!),让我们和技术打交道游刃有余。在QQ群里聊天,也风趣、幽默、机智、博学… 因为网络段子看多了嘛,再加上有百度加持。但面对公司会议或者和陌生人交流时,语言表达能力比较欠缺。

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

    3.也许就是想抛一个问题给你,自己好有时间继续看你的简历。

    好了,大概了解的面试官的目的,那么可以在面试前事先思考一下这个问题,从工作中总结一些记忆深刻和有价值的bug。

    如果,一时想不起来,可以这么切入,找一个自己工作中很熟悉的项目,然后,谈谈你是如何对这个项目进行测试的,然后,在某一个版本测试中,发现xxx,开发也xxxx,前端也xxxx,运维也xxxx,最后终于发现原来是xxx引起的xxxx 。

    把你工作过程中的测试方法和步骤描述清楚了,那么这个bug有没有价值或是否印象深刻就不那么重要了。

    举几个例子:

    第一个:数据精度相关

    这还是实习生刚进入公司的时候,公司的线上项目出现的问题。用户在下单的时候,购物车的结算金额的会出现xx.xxxxxxxxxx这样的金额,简直逆天啊。后来才知道是在数据的各种换算的时候出现了错误。后来在测试中也会出现各种各样奇怪的数据就还好了。

    第二个:我的第一个线上Bug

    这个时候刚好测试组老人都走了,线上有反馈回来一个bug,说是在某个二级下拉框选择的时候没有限制在一级下拉框的条件下,后台后台人员更改之后,确定测试通过了发布上线之后,一看怎么有不对呀。结果说是不知道那个开发自己做了什么,代码冲突,发布的代码吧这段代码注释了,你能信??

    第三个:和预览功能相关

    有的用户在系统成功上传文档之后,点击文档的名称没法进行预览。后面是开发做了优化,发布后用户才能使用了。(这个bug是我第一次真正意识到兼容性测试的重要性,也增加了我对兼容性测试的认识)

    第四个:和支付相关

    一直来对于线上的支付我都是很谨慎的,这可是公司的财务来源呀。在测试一个活动的支付的时候,有一种情况是用户使用支付宝支付,但是没有安装支付宝app,只用网页版支付。支付成功之后成功回调了,但是没有点击网页版支付成功右上角的成功,直接这个时候进程杀掉app,那么支付宝展示用户实际支付成功,但是在我们系统看起来是支付失败。还好有这样子奇葩的用户不多,最后我们这边移动端的做了修改。(这是因为测试支付的时候没有考虑到各种异常中断的情况)

    展开全文
  • 说一个印象最深bug

    2021-07-20 09:41:12
    这个时候刚好测试组老人都走了,线上有反馈回来一个bug,说是在某个二级下拉框选择的时候没有限制在一级下拉框的条件下,后台后台人员更改之后,确定测试通过了发布上线之后,一看怎么有不对呀。结果说是不知道那个...

    第一个:数据精度相关
    这还是实习生刚进入公司的时候,公司的线上项目出现的问题。用户在下单的时候,购物车的结算金额的会出现xx.xxxxxxxxxx这样的金额,简直逆天啊。后来才知道是在数据的各种换算的时候出现了错误。后来在测试中也会出现各种各样奇怪的数据就还好了。
    第二个:我的第一个线上Bug
    这个时候刚好测试组老人都走了,线上有反馈回来一个bug,说是在某个二级下拉框选择的时候没有限制在一级下拉框的条件下,后台后台人员更改之后,确定测试通过了发布上线之后,一看怎么有不对呀。结果说是不知道那个开发自己做了什么,代码冲突,发布的代码吧这段代码注释了,你能信??
    第三个:和预览功能相关
    有的用户在系统成功上传文档之后,点击文档的名称没法进行预览。后面是开发做了优化,发布后用户才能使用了。(这个bug是我第一次真正意识到兼容性测试的重要性,也增加了我对兼容性测试的认识)
    第四个:和支付相关
     一直来对于线上的支付我都是很谨慎的,这可是公司的财务来源呀。在测试一个活动的支付的时候,有一种情况是用户使用支付宝支付,但是没有安装支付宝app,只用网页版支付。支付成功之后成功回调了,但是没有点击网页版支付成功右上角的成功,直接这个时候进程杀掉app,那么支付宝展示用户实际支付成功,但是在我们系统看起来是支付失败。还好有这样子奇葩的用户不多,最后我们这边移动端的做了修改。(这是因为测试支付的时候没有考虑到各种异常中断的情况)

    展开全文
  • 记一些印象深刻Bug

    千次阅读 2018-11-19 12:08:14
    一、iOS 加载超大尺寸图片 Crash 的调研及解决方案 1.1、问题描述 前段时间遇到一个工单,客户反馈,只要进入订单列表界面 1~2 秒,客户端就会 Crash,订单列表界面示意如下: 1.2、问题分析 由于是客户投诉的 Bug...

    一、iOS 加载超大尺寸图片 Crash 的调研及解决方案

    1.1、问题描述

    前段时间遇到一个工单,客户反馈,只要进入订单列表界面 1~2 秒,客户端就会 Crash,订单列表界面示意如下:

    1.2、问题分析

    由于是客户投诉的 Bug,没有 Debug 信息,先猜测各种情况,数组越界/后台传 nil 值/内存泄露/ KVO 赋未定义值等等;然而经过仔细分析模拟逐个排除了上述可能,仍查找不到 Crash 原因,百思不得其解。

    排除了代码的问题,只有可能是数据问题了,猜测是异常的图片/数据解析出现的问题,于是抽取用户订单数据分析,发现有 2 张尺寸非常大的 JPEG 图片,尺寸达到了 15000*8000 的像素,瞬间想明白了怎么回事,像素总量达到了一亿两千万,猜测是图片解压缩到内存后占用内存过大,导致系统内存紧张,因此系统杀死了 App 进程。

    1.3、问题验证

    验证是否因大尺寸图片引起的错误。验证过程如下:

    写一个类似上面订单列表的 Demo,点击 Cell 逐个加载大图图片,测试用的手机为 iPhone 7P,图片尺寸为(15000px*15000px),点击加载第二张图片就发生了 Crash,一般情况下,APP 占用系统内存 60% 左右就会被杀死进程。iPhone 7P 加载大图后的内存截图如下:

    Tips: 不同手机由于内存和屏幕不一样,内存超限 App 发生 Crash 的条件不一样,其中 iPhone 6P 是最容易 Crash 的,因为它有 5.5 寸的屏幕,却只有 1G 内存,加载 Assets.xcassets 图片时会加载 3x 图片,同一张网络图片,UIImageView 布局一般会按照比例放大,大屏手机图片会放大,解码后占用内存也就更大。

    1.4、解决方案

    • 约定大于配置,上传图片也要遵守一定的约定。 基于 SDWebImage/YYImage 等第三方库加载超大图引起的崩溃,可通过修改源码解决,但不建议这样做;修改源码可能会引起其他 Bug,而且大图毕竟是少数,没必要对所有图片都进行判断,个别大图单独处理即可。按照一定约定,通过管理平台限定上传图片尺寸大小,增加 APP 流畅度的同时,还能减少用户流量损失,此为最佳方案。
    • 缩放图片尺寸。 如果是展示整张图片,不需要展示图片细节,受限于屏幕分辨率,太大尺寸的图片是没有意义的;如果需要做类似于图片浏览器,可对图片进行放大缩小操作的需求,大图预览的时候可加载缩略图,展示的时候切片处理。

    1.5、iOS 图片解码

    我们常见的图片格式例如 PNG/JPG/GIF 等格式都属于图像压缩格式,解压为位图后占用的内存会非常大。

    假设 iOS 系统从磁盘加载一张图片,首先将文件数据从磁盘读到内存中,此时在内存中仍旧是压缩格式,只有在需要的时机,才会把图片解码为无压缩的位图格式,最后 Core Animation 使用未压缩的位图数据渲染 UIImageView 的图层。

    将压缩的图片数据解码成未压缩的位图形式,这是一个耗时的 CPU 操作,SDWebimage/YYImage 等第三方框架一般都会提前异步强制解码图片,保证了 UI 界面的流畅性。

    1.6、图片解码占用内存计算

    图片解码后会占用多少内存呢?其实这个很好计算,苹果手机采用 24 位真彩色显示图像,也就是 24bit(3 字节,RGB 红绿蓝三原色分别占用 8bit,每个颜色有 256 种状态),如果是不包含 Alpha 通道(透明度)的 RGB 图片,那每个像素占用的就是 3 字节,15000px*15000px*3Byte = 644MB,如果是包含透明度的 RGBA 图片,则为 15000px*15000px*4Byte = 858MB,如图2所示,加载一张长和宽 15000px 的图片,内存暴增 858MB。

    1.7、图片缩放最优选择

    最常用的图片缩放方法是使用 CGContextUIGraphicsGetImageFromCurrentImageContext 方法对图片进行裁剪缩放,能够满足大部分需求。但如果是处理多张大图,这时候就需要优化缩放速度了,可通过 Image I/O 框架对图片进行缩放,在工程中添加 Image I/O Framework,然后在需要使用的地方 #import <ImageIO/ImageIO.h> 即可,示例代码如下:

    //maxPixelSize MUST BE a valid value.
    + (UIImage *)thumbImageFromLargeFile:(NSString *)filePath withConfirmedMaxPixelSize:(CGFloat)maxPixelSize
    {
        // Create the image source (from path)
        CGImageSourceRef src = CGImageSourceCreateWithURL((__bridge CFURLRef) [NSURL fileURLWithPath:filePath], NULL);
        
        // Create thumbnail options
        CFDictionaryRef options = (__bridge CFDictionaryRef) @{
                                                               (id) kCGImageSourceCreateThumbnailWithTransform : @YES,
                                                               (id) kCGImageSourceCreateThumbnailFromImageAlways : @YES,
                                                               (id) kCGImageSourceThumbnailMaxPixelSize : @(maxPixelSize)
                                                               };
        // Generate the thumbnail
        CGImageRef thumbnail = CGImageSourceCreateThumbnailAtIndex(src, 0, options);
        CFRelease(src);
        
        UIImage *image = [[UIImage alloc] initWithCGImage:thumbnail];
        CFRelease(thumbnail);
        return image;
    }
    
    复制代码

    二、夏令时引起某些时间段转换为 NSDate 为 nil 问题的解决方案

    2.1、问题描述

    开发中我们经常会处理用户的生日,例如下面的代码,将用户生日转换为NSDate,例如下面的代码:

    NSString *birthStr = @"1986-05-04";
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"yyyy-MM-dd"];
    NSDate * birDate = [formatter dateFromString:birthStr];
    NSLog(@"timeStr to date is %@ %@", birthStr, birDate);
    复制代码

    这时候我们会惊奇的发现,birDate 为 nil ?嗯,nil。

    2.2、问题分析

    通过Google搜索及测试,最终定位在了夏令时问题上。

    我国解放前几年在部分地区也曾实行过夏令时。1986年4月,中央有关部门发出“在全国范围内实行夏时制的通知”,具体作法是:每年从四月中旬第一个星期日的凌晨2时整(北京时间),将时钟拨快一小时,即将表针由2时拨至3时,夏令时开始;到九月中旬第一个星期日的凌晨2时整(北京夏令时),再将时钟拨回一小时,即将表针由2时拨至1时,夏令时结束。从1986年到1991年的六个年度,除1986年因是实行夏时制的第一年,从5月4日开始到9月14日结束外,其它年份均按规定的时段施行。1992年起,夏令时暂停实行。

    看完这段描述应该就明白原因了,在中国东八时区时区,某些时间段是不存在的,例如"1988-04-10 00-00-00"至"1988-04-10 01-00-00"中间的时间段。

    2.3、解决方案

    既然是时区引起的问题,那就把时区转换为 UTC 或 GMT 的时区即可。

    NSString *birthStr = @"1988-04-10 00-00-00";
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setTimeZone:[NSTimeZone timeZoneWithName:@"GMT"]];// 零时区
    [formatter setDateFormat:@"yyyy-MM-dd HH-mm-ss"];
    NSDate * birDate = [formatter dateFromString:birthStr];
    NSLog(@"BirthStr convert to NSDate is %@", birDate);
    复制代码

    Tips: 不要用模拟器测试,模拟器测试结果不正确

    三、日期格式 YYYY-MM-dd 和 yyyy-MM-dd 区别

    3.1、问题描述

    开发中遇到有人使用 YYYY-MM-dd 处理时间格式,觉得不对又说不出为什么,就调研了一下。

    大多数情况下,设置时间格式 YYYY-MM-dd 和 yyyy-MM-dd 转换的日期是一样的,只有当到达一些特点的时间节点,跨年时使用 "YYYY-MM-dd" 可能会出现差一年的问题。如下代码所示:

    // 原始的日期字符串
    NSString *orginDateStr = @"2015-12-28";
    // 转换为NSDate
    NSDateFormatter *orginFormatter = [[NSDateFormatter alloc] init];
    [orginFormatter setDateFormat:@"yyyy-MM-dd"];
    NSDate * orginDate = [orginFormatter dateFromString:orginDateStr];
    NSLog(@"orginFormatter: orginDate is %@", orginDate);
    
    // 如果用YYYY将orginDate转换回字符串时就出现了问题
    NSDateFormatter *weekFormatter = [[NSDateFormatter alloc] init];
    [weekFormatter setDateFormat:@"YYYY-MM-dd"];
    NSString *weekDateStr = [weekFormatter stringFromDate:orginDate];
    NSLog(@"weekFormatter: weekDateStr is %@", weekDateStr);  
    复制代码

    打印结果,相差一年:

    orginFormatter: orginDate is Mon Dec 28 00:00:00 2015

    weekFormatter: weekDateStr is 2016-12-28

    3.2、问题分析

    我们先来理解 YYYY 和 yyyy 的区别:

    “YYYY format” 是 “ISO week numbering system”

    “yyyy format” 是 “Gregorian Calendar(公历)”

    “YYYY specifies the week of the year (ISO) while yyyy specifies the calendar year (Gregorian)”

    yyyy specifies the calendar year whereas YYYY specifies the year (of “Week of Year”), used in the ISO year-week calendar.

    也就是说转换为日期时,DateFormatter如果是YYYY格式的话,如果1月1日是星期一,星期二,星期三或星期四,它是在01周。如果一月1日是星期五,星期六或星期日,它在前一年的52周或53周。

    苹果官方文档说使用YYYY是常见错误,正确的应该是使用yyyy格式,官方文档解释如下:

    It uses yyyy to specify the year component. A common mistake is to use YYYY. yyyy specifies the calendar year whereas YYYY specifies the year (of “Week of Year”), used in the ISO year-week calendar. In most cases, yyyy and YYYY yield the same number, however they may be different. Typically you should use the calendar year.

    The representation of the time may be 13:00. In iOS, however, if the user has switched 24-Hour Time to Off, the time may be 1:00 pm.

    3.3、解决方案

    使用正确的时间格式 yyyy-MM-dd 来处理日期时间。

    四、iOS 局部 BOOL 变量随机值

    4.1、问题描述

    测试给一个小伙伴提了一个Bug,点击一个功能时会不定时出现问题,能够复现,但不是每次都出现。如下代码所示:

    BOOL isSuccess;
    if (isSuccess) {
        NSLog(@"success");
    }else{
        NSLog(@"failed");
    }
    复制代码

    测试结果:在 Debug 环境下真机和模拟器都是 failed,但打包成出来安装后可能为 success 也可能是 failed 了。

    4.2、问题分析

    很明显是局部变量 isSuccess 出现了随机值导致的,虽然我个人平时的习惯是声明遍历一定会初始化,但 Debug 模式下正常,打包后就出现随机值的原因还是不清楚,于是调研了一下。

    在 ARC 环境下,本地对象创建如果未初始化,指针会指向默认值 nil;但是类似 BOOL 的非对象类型的局部变量,未初始化时会指向最后一次写入该地址的内容,可能为任意值,也就是垃圾值,出现随机值也就不稀奇了。

    4.3、解决方案

    创建变量时要养成初始化的好习惯,尤其是基本数据类型,例如:

    BOOL isSuccess = NO; 
    int a = 0;
    复制代码

    五、iPhone 用户名包含特殊符号引起的后台 Crash

    5.1、问题描述

    遇到一个工单,客户反馈无法正常进入 App,进入后就报错,还反馈了机型、系统版本,App 版本等信息。

    排查代码逻辑没有问题,找到相同系统的机型,相同 App 版本测试没有问题。

    期间也回复了用户软件没有问题,但这个用户锲而不舍,最终给这个用户发了一个 Debug 版本,报错时 Debug 日志展示在界面上,复制粘贴发过来。最终问题定位在了用户名上面,这位用户的用户名类似于这样的 &&###???###&&。

    5.2、问题分析

    这时候可能已经想明白怎么回事了,特殊符号转义引起的后台Bug。例如一些特殊的符号,例如 !#$&'()*+,/:;=?@[] 这些特殊符号,拼接在 URL 或者 Body 里面,传送到后台时都可能引起转义,不能正常解析,不同的后台表现逻辑不一致。

    5.3、解决方案

    既然是特殊字符引起的,在网络传输过程中,对特殊字符进 URLEncode 即可,服务器接收到进行 URLDecode 即可。

    // 用户手机设置的用户名
    NSString *userPhoneName = @"abc&&&???dd**%###!!!";
    
    // 设置需要转义的特殊字符,例如@"/+=\n"
    NSString *characterSetStr = @"?!@#$^&%*+,:;='\"`<>()[]{}/\\| ";
    NSCharacterSet *characterSet = [[NSCharacterSet characterSetWithCharactersInString:characterSetStr] invertedSet];
    // 返回转义后的字符串
    NSString *urlEncodeStr = [userPhoneName stringByAddingPercentEncodingWithAllowedCharacters:characterSet];
    NSLog(@"UserPhoneName Encoding is %@",urlEncodeStr);
    
    // 移除百分号转义
    NSString *removeEncodingStr = urlEncodeStr.stringByRemovingPercentEncoding;
    NSLog(@"UserPhoneName removeEncoding is %@",removeEncodingStr);
    复制代码

    打印结果:

    UserPhoneName Encoding is abc%26%26%26%3F%3F%3Fdd%2A%2A%25%23%23%23%21%21%21

    UserPhoneName removeEncoding is abc&&&???dd**%###!!!

    备注: 经历这次事件,在处理特殊字符问题上留下了深刻的印象,无论是处理用户输入,还是取值用户字符串,都会注意特殊字符的转义问题了。

    六、参考链接

    developer.apple.com/library/con…

    blog.leichunfeng.com/blog/2017/0…

    展开全文
  • 印象深刻bug

    千次阅读 2019-04-12 15:25:00
    测试中测到一个印象比较深刻bug,问题出现在web端的电商平台,展示商品的时候每点击一个商品相应的url=~/productid.html,如果知道productid可以直接在url输入跳转到商品详情,相应的下单的时候会生成一个ordid,订单...
  • 面试时让你说一个印象最深bug,该怎么回答呢? 其实,面试官并不关心你描述的这个bug是否真的有价值,或有多曲折离奇?他只是: 1.了解你平时工作中的测试能力 所以,这就要求的你平时工作中遇到bug时试着自己去...
  • 另外,建议你平时养成总结的好习惯,发现的bug,开发解决了,最好问问他原因以及解决的方法,这样再遇到类似问题时,自己也可以试着定位解决。遇到难解决bug,也可以把最终的解决过程记录下来。(这不是就有素材了...
  • 其实,面试官并不关心你描述的这个bug是否真的有价值,或有多曲折离奇?他只是: *了解你平时工作中的测试能力 ...另外,建议你平时养成总结的好习惯,发现的bug,开发解决了,最好问问他原因...
  • 你有没有遇到什么记忆深刻BUG如何解决的? 答:我在不久前遇到了一个偶现问题,就是将APP切换回桌面然后再次打开进入APP里面时,有时候会加载不出来,我一开始以为是网络原因,使用fiddle进行了弱网环境的测试...
  • 回顾从大一到大三的学习生活,我在学习过程中遇到过许多BUG,刚开始和罗凯老师学习C++时从来没有接触过编程,那时候导致程序不能运行的原因多是语法错误和拼写错误,到了大一下学期,错误多出现在循环与条件跳转的...
  •  4)考察你对于测试缺陷的理解,你认为印象最深或者最重要的Bug应该正体现了你对于测试过程中哪些比较重要,哪些比较次要的思考;  5)也许面试官随便问你个问题,好抽时间来看完你的简历...    其实...
  • 软件测试中遇到的比较印象深刻的问题: 项目名称是某幼儿园报名网站,首先我介绍一下这个项目,这个项目是用来给某地区的家长抢报幼儿园名额而服务的,毕竟有的幼儿园人气比较火爆,因此会出现人多名额少的情况,...
  • 印象比较深刻bug

    千次阅读 2018-02-11 16:30:00
    快过年了,最近在做的一个全家福活动,产品经理原定于2月6号上线,因为腾讯要加盟小程序,为了维稳,推迟到2月8号上线,后来因为前段开发没有解决好拍照上传图片插件的问题,导致8号没办法上线,后端接口是早就测好...
  • 一次印象深刻bug调试经历

    千次阅读 2015-11-09 21:10:30
    其实本来说调个bug应该不是什么太难的事情,可是现实正是如我经常说的“数据大了什么都有可能是问题”一样,每次fix一个bug以后,就要跑大量的数据,如果修改的是只需要跑最近几天的数据还有,最怕的就是跑基础的...
  • 让我印象深刻并很喜欢的一个bug

    万次阅读 2016-12-20 09:31:55
    因代码中某个地方有错误(bug),引起了这个内存损坏。我们花了好长时间分析代码,查找可能解释得通的原因,但是结果一无所获。后来想到也许是转换过程中犯了错误,我们就回过头去检查原始的实现方法,修改了测试...
  • 软件测试作业1 令我印象深刻bug

    千次阅读 2017-02-27 15:29:00
    令我印象深刻bug的是有一次,在测试包含虚函数的类时,我创建了一个包含虚函数的类被另一个类继承,并且在子类的构造函数中将父类的很多属性都清零,随后子类实现父类中产生的虚函数,但是产生了无法访问内存的...
  • 本文只记录了2018年3月开始,自己经历的一些印象比较深、奇葩的bug 越总结,越成长!共同进步...... 以下问题几乎都是功能方面的缺陷。怪自己段位不够高。 TCE V3.3.1 1、【自动化运维】403B ...
  • 记录下 自己开发中遇到的 印象深刻 被迫加班的bug,也防止面试时被问到! 一、Feign调用服务时,get请求参数异常? Q: @Fegin get调用暴露的服务接口时候,请求参数为对象类型, 接收到参数始终都是post请求!!!...
  • 测试中遇到的bug总结

    万次阅读 多人点赞 2018-09-13 11:35:07
    面试的时候,会经常被问到你测试中遇到的bug,说出印象最深的。只有平时思考,多总结遇到的bug,不断提升自己的level,自然能从容面对面试官的“废物测试”。 1、输入框为空/最大值判断;为空、最大值显示  设计时...
  • 项目BUG总结,好记性不如烂笔头。
  • 4.解决方案 当点击取消后,状态变为老师取消,下一次点击该课程的“取消”按钮,还有判断该课程的状态,只有“已预约”的状态才能点击取消,其他状态点击取消,会给一个错误提示。 如图,通过postman进行课程...
  • 在完成项目后,我总结了那些自己感觉重要的BUG.第一项目为电商项目 1. BUG系列一:界面销毁时,未关闭广播, dialog等,崩溃 · Bug现象 Bug 85778:同一个账号,两部手机登陆,第一个登陆的手机,...
  • 说几个项目开发中你遇到的印象比较深刻的问题,你是怎么解决的? 列举具有代表性的问题,但是千万不要说技术性问题 N to n错误:断开关联关系,设置为null Datagrid上展示数据,数据中某个属性是懒加载...
  • 购物车常见bug

    千次阅读 2020-11-10 14:15:00
    最近总有小伙伴在需要一些项目中的购物车bug,稍微整理了一下,记录一下,欢迎各方大佬指点,诚心求教。 不足之处望包涵。 这个项目是一个平台下有多个发货仓(发货仓是在不同的地方有不同的仓库),不同的仓库绑定...
  • Q:你印象深刻bug 是?参考答案:其实能被发现的bug,更多都是显而易见的bug。有一个bug,让我印象十分深刻,这个bug并不是发生在我负责测试的系统上,是发生在我们所依赖的系统上。当时在测试分类页,分类页...
  • 如是,一个持续了几个小时未解决bug仅仅来源于变量的存储精度。 float和double的精度是由尾数的位数来决定的。浮点数在内存中是按科学计数法来存储的,其整数部分始终是一个隐含着的“1”,由于它是不变的,故...
  • 前言 前两天在群里看到同学们在聊工作是消灭bug,后来谈到了“高级的bug”。其实,我也没遇见过太高级的bug,可能是因为本身的工作就是普通开发的原因,平常遇到
  • 解决办法开发重写判断顺序/逻辑2、我印象最深的就是我在做小花金融这个项目中,出现的bug,一开始在提交贷款金融数字参数时,后台没有反应,界面也没反应,然后我用抓包工具,重新输入贷款参数,抓取url,参数内...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,947
精华内容 3,578
关键字:

印象最深bug及解决