我根据ahrefs上的数据筛选出Stack Overflow上流量最高的5个问题。这些问题非常受欢迎且具有很高的参考价值。问题排名按照问题所在页面流量从高到低进行。在这篇文章中,我会将问题的原始链接放在它的标题上,如果你想要查看问题原始页面的话,可以点开链接。我会用自己的话简述一遍问题,因为有时候问题作者对问题进行了多次编辑比较混乱,然后我会附上这个问题的最佳回答。
ps:Stack Overflow上的问题和回答大部分都是用英文写出来的,为了方便阅读,我将使用中文进行表述。
排名方法
- 登录ahrefs网站
- 点开“Site Explorer页面”
- 在地址输入框中输入“stackoverflow.com/questions”
- 点击搜索按钮
- 在左侧边栏中找到并点击“Top Pages”
- 国家选择“All countries”
- “Traffic”从高到低排序
如何创建一个和链接具有一样行为的按钮?(How to create an HTML button that acts like a link?)
流量:37,156
这个问题创建于10年前。问题作者原本是想实现一个点击按钮之后跳转链接的功能,但是作者查看了收到的回答,并没有满足要求的。目前有两种解决方案,第一种是在form
标签中嵌套一个button
标签,代码如下:
<form method="get" action="/page2">
<button type="submit">Continue</button>
</form>
但是这个解决方案有一点不完美就是Safair和IE浏览器会在链接后面添加一个问号。第二个解决方案是使用JavaScript:
<button onclick="window.location.href='/page2'">Continue</button>
但是这个解决方案需要使用JavaScript,屏幕阅读器不能访问这样的链接。
链接的作用就是跳转到另一个页面。所以问题作者换了一种问法,如何把链接的样式变成像按钮一样。
<a href="https://zhaoshuquan.com" class="button">Go to Google</a>
a.button {
-webkit-appearance: button;
-moz-appearance: button;
appearance: button;
text-decoration: none;
color: initial;
}
什么是NullPointer, 怎么修复这个问题?(What is a NullPointerException, and how do I fix it?)
Java,流量:32,036
这个问题创建于12年前。作者的问题是什么是空指针异常(java.lang.NullPointerException),这个异常是怎么产生的。当异常发生的时候,有什么方法或工具可以定位这个异常并找到导致这个异常的原因。
下面是这个问题的最佳回答。当你定义一个引用变量(例如:一个对象)时,其实你定义的是一个指向对象的指针。下面这个代码定义了一个原生类型为int的变量:
int x; x = 10; 在这个例子中,变量x是int类型,Java会将x初始化为0。第二行代码将x赋值为10,10被写入到x指定的内存地址。
但是,当你尝试定义一个引用类型,就会发生一些不一样的事情。来看一下下面的代码:
Integer num;
num = new Integer(10);
上面这个代码首先定义了一个num变量,但是这个变量还没有包含任何原生类型值。相反,这个变量包含一个指针(因为这个变量的类型是Integer,这是一个引用类型)。因为你定义完变量之后还没有对变量进行初始化,定义这个引用类型的变量num应该指向什么,所以Java把num设置为指向null,意思就是“num什么都没有指向”。
上面代码的第二行,使用new关键词创建一个类型为Integer的对象,然后将num指向这个Integer对象。
当你尝试使用一个变量的内容(解引用,dereferencing),但是你还没有对这个变量进行赋值的时候,就会出现NullPointerException。
解引用通常发生在使用.调用方法或字段,或者使用[去索引一个数组。
在没有将num指向一个对象之前,如果你尝试去解引用num,你就会看到NullPointerException。
在有些情况下,编译器会找到出现问题的原因并告诉你“num may not have been initialized”(num变量可能没有被初始化),但是有时候你并不是直接创建一个对象的。
例如以下代码:
public void doSomething(SomeObject obj) {
//调用obj的方法,假设obj是null
obj.myMethod();
}
在这个例子中,我们不创建一个obj变量,而是假设在调用doSomething()方法之前,obj变量已经被创建了。我们可能按照以下方法调用doSomething()方法:
doSomething(null);
在这种情况下,obj为null,并且语句obj.myMethod()将抛出NullPointerException。
如果像上面这个代码那样调用doSomething()方法,则跑出NullPointerException就是合适的,因为这是程序员错误,并且程序员需要这个信息来调试代码。
除了由于方法逻辑引发的NullPointerException之外,你还可以检查方法参数是否为null,然后抛出NullPointerException,这个可以通过在方法开头添加以下代码来实现:
// 如果obj为null,则将带有自定义错误消息的NullPointerException抛出
Objects.requireNonNull(obj, "obj must not be null");
在错误消息中清楚说明哪个对象不能为null是很有帮助的。像上面这个代码对变量进行验证的优点是:1)你可以返回你自己设置的错误信息,2)对于这个方法的剩余代码,你可以安全的解引用obj,因为obj一定不为null。
有时候你定义的方法允许参数为null的情况。在这种情况下,你可以通过检查null参数然后执行不一样的操作。你也应该把这种情况在方法文档中解释清楚。例如,doSomething()可以被写为以下形式:
/**
* @param obj 一个用于__的可选参数。可能为空,在这种情况下
* 结果为 ____.
*/
public void doSomething(SomeObject obj) {
if(obj == null) {
//do something
} else {
//do something else
}
}
IndentationError: unindent does not match any outer indentation level
Python,流量:31,970
问题作者在运行下面这段Python代码的时候遇到一个错误提示:
IndentationError: unindent does not match any outer indentation level
import sys
def Factorial(n): # Return factorial
result = 1
for i in range (1,n):
result = result * i
print "factorial is ",result
return result
问题作者不知道这个问题是怎么产生的。
这个问题解决方案也是很直接。出现这个错误提示的原因就是上面这段代码混用tab和空格。解决方法是通过代码编辑器的查找和替换功能,将所有的tab字符替换为空格字符(几个空格字符都可以,一个两个都没问题)。下面给出替换之后的代码:
import sys
def Factorial(n): # return factorial
result = 1
for i in range (1,n):
result = result * i
print "factorial is ",result
return result
print Factorial(10)
Uncaught ReferenceError: $ is not defined?
流量:29,042
问题作者遇到了以下错误提示:
Uncaught ReferenceError: $ is not defined
代码在这里:
$(document).ready(function() {
$('#tabs > ul').tabs({ fx: { opacity: 'toggle' } });
$('#featuredvid > ul').tabs();
});
<script language="JavaScript" type="text/javascript" src="<?php echo get_option('siteurl') ?>/js/sprinkle.js"></script>
<script language="JavaScript" type="text/javascript" src="<?php echo get_option('siteurl') ?>/js/jquery-1.2.6.min.js"></script>
<script language="JavaScript" type="text/javascript" src="<?php echo get_option('siteurl') ?>/js/jquery-ui-personalized-1.5.2.packed.js"></script>
这个问题目前还没有一个高分且被接受的回答。这里,我就总结一下目前已经存在的几种回答。
第一种回答,这个回答观察到问题作者的JavaScript包引入的时候使用了PHP代码,认为这段代码是和PHP代码或者模板引擎一起使用的,所以这个回答说如果问题作者使用的是Laravel框架,错误就有可能来源于Blade模板文件,注意需要使用正确的blade指令标签将JavaScript包引入代码正确引入:
@section('section name')
// put javascript files in here
@endsection
第二种回答是将最新的jquery包CDN链接放在HTML代码的head标签顶部,下面是代码示例:
<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script>
$(document).ready(function(){
$("button").click(function(){
$("h2").hide();
});
});
</script>
</head>
<body>
<h2>This will hide me</h2>
<button>Click me</button>
</body>
</html>
第三种回答是,问题作者应该在引入jQuery之后,再调用相关函数。
根据问题作者给出的代码来看,因为jquery引入顺序导致出现这个问题的可能性最高,但是10年过去了,问题作者依然没有接受任何一个回答。
Failed to load resource: the server responded with a status of 404 (Not Found)
流量:27,868
这个问题是因为资源链接设置错误导致的,问题作者相关代码如下:
CSS:
<link href="../Jquery/jquery.multiselect.css" rel="stylesheet"/>
<link href="../Jquery/style.css" rel="stylesheet" />
<link href="../Jquery/prettify.css" rel="stylesheet" />
JS
<script src="../Jquery/jquery.multiselect.js"></script>
<script src="../Jquery/prettify.js"></script>
Error
Failed to load resource: the server responded with a status of 404 (Not Found) http://localhost:8080/RetailSmart/jsp/Jquery/jquery.multiselect.css
Failed to load resource: the server responded with a status of 404 (Not Found) http://localhost:8080/RetailSmart/jsp/Jquery/style.css
Failed to load resource: the server responded with a status of 404 (Not Found) http://localhost:8080/RetailSmart/jsp/Jquery/prettify.css
Failed to load resource: the server responded with a status of 404 (Not Found) http://localhost:8080/RetailSmart/jsp/Jquery/jquery.multiselect.js
Failed to load resource: the server responded with a status of 404 (Not Found) http://localhost:8080/RetailSmart/jsp/Jquery/prettify.js
目录结构
这个问题的解决方案是,回两次目录,当前目录的上两层目录,
<script src="../../Jquery/prettify.js"></script>