2023年8月1日发(作者:)

⾯试题:你印象最深刻的两个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 ;import uration;import nfiguration;import edCorsConfigurationSource;import lter;@Configurationpublic class LeyouCorsConfig { @Bean public CorsFilter corsFilter() { //1.添加CORS配置信息 CorsConfiguration config = new CorsConfiguration(); //1) 允许的域,不要写*,否则cookie就⽆法使⽤了 owedOrigin(""); //2) 是否发送Cookie信息 owCredentials(true); //3) 允许的请求⽅式 owedMethod("OPTIONS"); owedMethod("HEAD"); owedMethod("GET"); owedMethod("PUT"); owedMethod("POST"); owedMethod("DELETE"); owedMethod("PATCH"); // 4)允许的头信息 owedHeader("*"); //2.添加映射路径,我们拦截⼀切请求 UrlBasedCorsConfigurationSource configSource = new UrlBasedCorsConfigurationSource(); erCorsConfiguration("/**", 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)如果是逻辑出现了问题,你项⽬⽐较⼤的话,那只能是通过单步调试,或者⽤n()打印出来想要得到的数据看看是哪步出了问题。(2)如果是开发环境或者是中间件的问题,那只能是通过⽹上查阅资料来解决问题。如果你英语阅读能⼒还可以的话,我推荐使⽤StackOverflow来查阅资料。

2023年8月1日发(作者:)

⾯试题:你印象最深刻的两个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 ;import uration;import nfiguration;import edCorsConfigurationSource;import lter;@Configurationpublic class LeyouCorsConfig { @Bean public CorsFilter corsFilter() { //1.添加CORS配置信息 CorsConfiguration config = new CorsConfiguration(); //1) 允许的域,不要写*,否则cookie就⽆法使⽤了 owedOrigin(""); //2) 是否发送Cookie信息 owCredentials(true); //3) 允许的请求⽅式 owedMethod("OPTIONS"); owedMethod("HEAD"); owedMethod("GET"); owedMethod("PUT"); owedMethod("POST"); owedMethod("DELETE"); owedMethod("PATCH"); // 4)允许的头信息 owedHeader("*"); //2.添加映射路径,我们拦截⼀切请求 UrlBasedCorsConfigurationSource configSource = new UrlBasedCorsConfigurationSource(); erCorsConfiguration("/**", 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)如果是逻辑出现了问题,你项⽬⽐较⼤的话,那只能是通过单步调试,或者⽤n()打印出来想要得到的数据看看是哪步出了问题。(2)如果是开发环境或者是中间件的问题,那只能是通过⽹上查阅资料来解决问题。如果你英语阅读能⼒还可以的话,我推荐使⽤StackOverflow来查阅资料。