面试题:你印象最深刻的两个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 {@Beanpublic 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是什么,你是怎么解决的?相关推荐

  1. 那些让我印象深刻的五个bug

    相信大家在工作中面试过程中经常被问到,让你印象最深刻的一个bug是什么,这是一个开放性的题目,并没有标准答案,每个人接触过的系统都不一样,遇到过的问题也不一样,可能面试官只是想看一下你的表达能力,以及 ...

  2. 2019年“网红”芯片大盘点,哪一颗让你印象最深刻?

    作者 | Aaron 来源 |TechSugar(ID:TechSugar) [导读]今年的芯片发布会是一场接着一场,不管是传统芯片厂商,亦或者一些新进者,都在2019年牟足了劲,秀一把芯片实力.今天 ...

  3. 2023产生的那些让我印象深刻的五个bug,无法释怀!

    相信大家在工作中面试过程中经常被问到,让你印象最深刻的一个bug是什么,这是一个开放性的题目,并没有标准答案,每个人接触过的系统都不一样,遇到过的问题也不一样,可能面试官只是想看一下你的表达能力,以及 ...

  4. ​她回顾过去的学习生活,印象最深刻的并非是收获荣耀的高光时刻, 而是在“看文献、做科研、写论文”循环中推进的每一步...

    一不留神又到期末了,热搜上都在数着哪个学校的寒假更长,而我只想问,科研人的论文都写完了吗? 反正我是恨不得克隆十个自己,一个泡在实验室盯实验结果,一个去盯基金申请,一个去写月底要送审的稿子..... ...

  5. mysql印象最深的事情_印象最深刻的一件事500字

    篇一:印象最深刻的一件事 从一个茫然无知的婴儿到一个热爱祖国的少先队员,我经历的事情就象茫茫大海,然而,另(令)我印象最深刻的事却是一次普普通通的旅游. 那是一个艳阳高照的大晴天,也是一个充满欢声笑语 ...

  6. 英语口语练习十六之I was quite impressed by... (我对……的印象很深刻)的用法

    I was quite impressed by- 我对--的印象很深刻 用法透视 这个句型用"impress"的被动语态来表达自己对某事物印象深刻. 支持范例 I was qui ...

  7. 软件测试Homework1——印象最深刻的一次调bug经历

    大三上学期,我选了<可视语言与信息可视化>这门课程.最后期末大作业,我选择了一个课题--"电影镜头边界的信息可视化".整个完成过程的难度并不在于最后数据可视化的内容,而 ...

  8. 从两个bug来看Javascript的装载

    不管是做前端开发还是测试,我觉得都应对网页内容加载和执行有所了解,特别是JavaScript,否则迟早都会得到教训,在我写此文之前就得到过教训,所以印象特别深刻,当时也为了搞明白其中缘由,查了些资料, ...

  9. Redisson里的“看门狗”居然有这两个“bug”?

    ​大家好! 提到分布式锁,大家一般都会想到 Redis. 想到 Redis,一部分同学会说到 Redisson. 那么说到 Redisson,就不得不掰扯掰扯一下它的"看门狗"机制 ...

  10. 今晚被两个bug 困扰---第一个,小程序数组传递到PHP后台变成了字符串,导致解析失败

    1.今晚被两个bug 困扰-第一个,小程序数组传递到PHP后台变成了字符串,导致解析失败 2.解决方法 小程序部分: var that = this; console.log(this.data.co ...

最新文章

  1. MPLS学习一些问题(一)
  2. 嗯?原来if可以调用方法的?
  3. svn commit --cl app 时手动输入提交的注释,而不是在 -m 'comments here'这里输入
  4. mysql数据库优化清理_mysql 数据库优化整理
  5. Rsyslog 日志相关内容
  6. OC Swift混编-Swift.h File not found
  7. 设计模式练习_设计练习是邪恶的
  8. # 20155337 2017-2018-1 《信息安全系统设计基础》第二周课堂实践+myod
  9. 程序员为什么热衷于造轮子,而不是硬照,升职加薪吗?
  10. 自己写的一个执行带参数的sql,PreparedStatement
  11. 在局域网搭建mqtt服务器
  12. Hikari数据库连接池泄露问题排查
  13. AI提取图片里包含的文字信息-解决文字无法复制的痛点
  14. tensorflow各个版本的CUDA以及Cudnn版本对应关系(重点)
  15. 基于Springboot + Thymeleaf 的招聘网站(源代码+数据库) 026
  16. Sitemesh 初探
  17. Facebook SDK For Unity
  18. 自用:Stata工具变量检验标准
  19. android通用模板项目AndroidTemplate
  20. fortran:使用IMSL函数库计算第一/二类完全椭圆积分

热门文章

  1. Repository does not allow updating assets 解决方法
  2. 【Python打卡2019】20190421之52周存钱挑战
  3. 质数筛+埃氏筛取思想
  4. 计算机开机桌面文件丢失怎么办,电脑重启桌面文件丢失怎么办
  5. 抖音java解析_Java版抖音解析接口
  6. 数据结构和算法的区别
  7. 如何在阿里云建立网站
  8. HTML给表格写个标题居中,如何将表格中的各个标题居中?
  9. 华为手机USB调试搜不到设备
  10. 谈一谈CloudBlog的系统架构