为什么开发者热衷在Stack java stackoverfloww上查阅API文档

Stack Overflow
Join the Stack Overflow Community
Stack Overflow is a community of 7.0 million programmers, just like you, helping each other.
J it only takes a minute:
Looking for more? Browse the , or . Help us answer .
rev .25642
Stack Overflow works best with JavaScript enabledStack Overflow 是如何赚钱的(2016 年版)
我们如何赚钱
——Stack Overflow 的人才与工作
通过我们的企业产品“广告与人才展示( Display Ads and Talent)”,我们帮助企业打造自己的品牌、对接技术人才。反过来,这些服务可以帮助开发人员找到更好的工作、了解企业,同时提供良好的用户体验(没有垃圾信件和 flash 广告等)。
我们竭尽所能想开发者之所想,这就是为什么我们销售的所有产品都那么与众不同。
这很像鸡生蛋蛋生鸡的问题。公司需要开发者,而我们需要专业人士来回答问题。为了实现这一点,等式两边都需要有人。我们聚集更多的企业和开发者,就能更好更快地匹配企业和开发者两边的需求,帮助开发者找到梦寐以求的工作。
对企业而言,我们致力于提供经过精准匹配的少数候选人供选择,而不是提供 500 名勉强合适的候选人。这是我们所能提供的价值。招聘流程中有很多低效率的环节,我们想要对此进行优化,不想浪费你或公司的时间。
我们处在一个相对独特的位置,因为我们可以同时帮助公司和开发者。这不是瞎扯。我相信我们能够做到,而且可以比别人做得更好。
我们已经给数千名候选人推荐安排了工作,但还有更多工作正在等待合适的候选人。一种优化的方式就是我们的“开发者故事(Develper Story)”。
我协助开发了这项功能,是因为我认为这是一种比简历更棒的方式。它可以帮助开发者展示他们是谁、在做什么,而且(我希望)这是一种更容易去维护的方式。它也可以帮你找到一份工作。如果你正在找工作,或者只是好奇,你的“开发者故事”越完善,我们能帮你匹配到合适工作岗位的几率就越大。
如果你对两者都不感兴趣,那也完全没有问题。
尽管我们很乐意帮你匹配一家完美的公司,但是我们打造招聘和开发者故事这两项服务主要是出于我们的核心使命——服务所有开发者,包括当下并不关心找工作的人。
我们正在努力改变公司对待开发者的方式,不仅通过我们的招聘标准(如不允许发送垃圾邮件),还通过我们的“开发人员招聘博客(Developer Hiring Blog)”——这是我们为优化雇主和招聘者的实践而创建的。
通过“开发者故事”,我们想改变那种认为开发者顶多就是他们上一份工作或者头衔所展示的那样的看法。开发者是创作者,他们有他们的故事,不管是通过代码或博客文章,抑或是他们工作过的独立团队或者正在阅读的东西。这些产品的推出不仅是完成最基本的工作任务,更是为了促成范式转移(paradigm shift)。
我们是一个大型网站。我们的广告解决方案是我们生存的重要保障。但我们不希望你点击那些你不关心的东西。我们想给你需要的东西。
——Stack Overflow 广告
我们的目标是尽可能地提供相关、人性化的服务;如果不行,我们会努力为你提供系统认为尽可能相关的东西。我不确定人性化是否是个好主意,这我们以后再说。不管怎样,我们在为之不断努力。让我们赖以生存的广告尽可能地与您相关是我们的工作。
我们有优秀的人才在做这方面工作,为的是成就我们的最终目标:了解开发者,使我们能更好地为他们服务。
(那么,我们该如何看待广告屏蔽呢?我们不在乎,原因在此。)
我们是如何对待广告的呢?简言之,我们没有增加更多广告; 我们只是改善现有的。相比其他地方,我们对于你——作为一个开发者——喜欢什么样的技术更熟悉。我们想通过努力来让广告更精准、更相关。这需要一点时间,同时我们也想提升广告的加载速度,这是一个更大的计划。
我们不会降低广告质量。你知道 Stack Overflow 上每个月都有大量免费广告位吗?
每次我们展示“自家广告”(就是我们所说的链接到其他网站的广告)或“社区广告”(由社区表决决定),其实我们本可以展示付费广告。但我们没有,因为如果没有什么好东西给你看,我们就选择不展示出来。
同时我们也不想采用自动化广告系统来筛选广告。如果选用这种方式,我们便不能对广告质量进行控制,来维持一贯的质量水平。我们故意放弃了很多赚钱的机会,不想以牺牲质量为人所知。我们相信会有更好的方式。
很重要的一点是,拒绝这些潜在广告的决定是由我们的广告销售团队做出的。这些人实际上是靠卖广告赚钱的。但他们否定了这个想法,是因为比起赚更多钱,他们更关心我们正在做的事情,更关心你是如何看待我们的。
你能想象这 TMD 是多么难得吗?我们天才的销售团队在面对老板时也是同样的做法。所有这些人关心的是那些超越自身的东西。而这就是为什么我喜欢在这家公司工作的原因。
我们有几个加载缓慢的广告(感谢用户的反馈)。我们追踪到相应的广告商,搞清楚问题所在,并尽力帮助他们解决。这是一个复杂的问题,因为牵扯到很多人,但我们已经着手开始处理。
Samo 和我将增加定时信息给我们这些项目抽样分布,这样将来我们就可以监控它的情况,如果遇到问题会自动报警。我们认为,加载缓慢或太贵的广告都会降低用户体验。体验可以说是一项功能,页面上展示的任何东西对我们都很重要。
目前我在与广告销售队伍合作,确保从 2017 年 1 月开始,我们所有的广告都将兼容 HTTPS。这主要是今天的情况,但不能保证,不过在未来我们会加强这一点。
我不想让这成为任何事情的障碍。我们将把所有 Imgur 图片迁移到 https:// ,并强制执行。我也将把所有网站 logo 和图标迁移到 https:// 。我们正在实施这项巨大的工程…… 这里就先不展开了。
——企业版
我们将会花更多时间开发企业版 Stack Overflow。这个项目目前已经有了一些起色,它还是一种能同时帮助公司防火墙内程序员和公司自身的方法。我们团队有几个全职员工在负责此事。企业环境比较独特,因此需要专门关注。
但是企业版会与
使用同一套基础代码,是完全相同的 git 分支。有些企业版的功能就是开源 Stack Overflow 的功能。比如,我们准备为企业版搭建一个在防火墙内可以被当成图床使用的 HTTP 协议的简单图像代理。
还记得我之前讲过的客户端校时吗?它会帮助我们估算上述功能所需的带宽。我们其实在布一个很大的局。
像我们这么大的公司要实现盈利需要出色的市场营销。
但是就在两年前,我们还不信任自己的市场团队。为什么呢?因为那时他们是一个全新的团队,我对他们还没有了解。我认识一些其他的市场营销人员,有过不太愉快的经历。
因此我默认的假设大致是:“所有市场营销人员都来者不善,想利用客户的信任去迅速套利”。但是其实并不是这样的。起码这里不是。
通过与我们市场团队在几个项目上的合作,我克服了这个偏见并且意识到一件简单的事:我们雇佣了一些很棒的营销人员,他们在乎的跟我们在乎的完全一致。特别感谢 Kaitlin。我们的新团队收到了很多负面的反馈,而且没有据理力争。他们让我们明白为什么有些主意很棒,在许多事情上说服了一些我认识的聪明人。
我们团队清楚地明白 Stack Overflow 社区和信任是我们拥有的最宝贵资源。我们想要的是交流,而不是疏远。不过只针对那些我们能够为其提供帮助的用户。是的,如果我们的方式是正确的,有时候这些事情会反过来让公司受益。
我不认为这是一件坏事。如果我们能够让公司成长,我们就能够继续给这个世界创造出更好的东西。我还想为大家创造很多很多东西。比如为了打败光速,我曾把 Stack Overflow 塞到欧洲、亚洲和南美的 2U 服务器中。
Adrianna(我们新来的 CMO)做过的一次展示令我叹为观止。在听她演讲之前我并没有见过她,那次她给我留下了非常强烈的第一印象。为帮助我们统一品牌,他们正在开展一些非常出色的工作。在听她展示的时候,我一直在想“为什么我们四年前没有做这些”。
营销,与开发一样,主要是建立联系。我个人从厌恶跟营销人员接触到现在期盼与他们互动。我们找到了一群聪明、善良的人能够帮助提高所有人的参与度。事实上我现在很兴奋。
看过本文的人还看过
最新图文推荐
最新专栏文章
大家感兴趣的内容
网友热评的文章»»Stackoverflow上人气最旺的10个Java问题
  (3623个赞)
  如果执行下面的程序,程序解析两个间隔1秒的日期字符串并比较:
public static void main(String[] args) throws ParseException {
SimpleDateFormat sf = new SimpleDateFormat(&yyyy-MM-dd HH:mm:ss&);
String str3 = & 23:54:07&;
String str4 = & 23:54:08&;
Date sDt3 = sf.parse(str3);
Date sDt4 = sf.parse(str4);
long ld3 = sDt3.getTime() /1000;
long ld4 = sDt4.getTime() /1000;
System.out.println(ld4-ld3);
  输出是:
  为什么 ld4-ld3 不是1(因为我希望这两个时间差是一秒),而是353?
  如果将日期字符串各加一秒:
String str3 = & 23:54:08&;
String str4 = & 23:54:09&;
  ld4-ld3 的结果是1.
sun.util.calendar.ZoneInfo[id=&Asia/Shanghai&,
offset=,dstSavings=0,
useDaylight=false,
transitions=19,
lastRule=null]
Locale(Locale.getDefault()): zh_CN
  解决方案
  这是上海时区,在12月31日有一个变化。
  查阅来了解上海在1927年时区变化的细节。基本上在1927年年底的午夜,始终会回拨5分52秒。所以& 23:54:08&实际上发生了两次,看起来Java解析了后一次的时间作为当地的日期和时间导致了差异。
  (2480个赞)
  我一直认为Java是引用传递;然而,我看了一堆博客(例如)声称不是这样的。我认为我没有理解它们之间的区别。
  给个解释?
  解决方案
  Java一直是值传递。不幸的是,他们决定把指针叫做引用,因此新人总是被搞晕。因为这些引用也是通过值传递的。
  3、一个关于的问题
  (2223赞)
  直到今天我认为这个例子:
  只是一个简写的:
  但如果这样做:
int i = 5;
long j = 8;
  然而 i = i + 没法编译,而 i += 就可以编译。
  这意味着i += 实际上是i = (type of i) (i + j)的简写么?
  解决方案
  总有人问这类问题,JLS里有答案。参见&。摘录:
E1&op=&E2 型的复合赋值表达式等价于&E1&=&(T)((E1)&op&(E2)),这里 T 是 E1 的类型,不同的是 E1 只计算一次。
一个例子,引自&
[...] 下面的代码是正确的:
short x = 3;
  x的结果等于7,因为它等价于:
short x = 3;
x = (short)(x + 4.6);
  换句话说,你的假设是正确的。
  (1769个赞)
  Java中&&和&的不同是什么?
  非多线程应用中使用哪个更有效率?
  解决方案
  Java 中 HashMap 和 HashTable 有几个不同点:
&是同步的,然而&不是。 这使得HashMap更适合非多线程应用,因为非同步对象通常执行效率优于同步对象。
Hashtable 不允许 null 值和键。HashMap允许有一个 null 键和人一个 NULL 值。
HashMap的一个子类是。所以,如果想预知迭代顺序(默认的插入顺序),只需将HashMap转换成一个LinkedHashMap。用Hashtable就不会这么简单。
  因为同步对你来说不是个问题,我推荐使用HashMap。如果同步成为问题,你可能还要看看。
  5、(如何)&
  (1724个赞)
  如果你有一个&java.io.InputStream 对象,如处理这个对象并生成一个字符串?
  假定我有一个&InputStream&对象,它包含文本数据,我希望将它转化成一个字符串(例如,这样我可以将流的内容写到一个log文件中)。
  InputStream&转化成 String 最简单方法是什么?
  解决方案
  使用&&库来拷贝InputStream到StringWriter是一种不错的方式,类似这样:
StringWriter writer = new StringWriter();
IOUtils.copy(inputStream, writer, encoding);
String theString = writer.toString();
// NB: does not close inputStream, you can use IOUtils.closeQuietly for that
// 注意:不关闭inputStream,你可以使用 IOUtils.closeQuietly
String theString = IOUtils.toString(inputStream, encoding);
  或者,如果不想混合Stream和Writer,可以使用&ByteArrayOutputStream。
  (1574个赞)
  在Swing中,密码字段有一个getPassword()(返回 char数组)方法而不是通常的getText()(返回String)方法。同样的,我遇到过一个建议,不要使用 String 来处理密码。
  为什么String涉及到密码时,它就成了一个安全威胁?感觉使用char数组不太方便。
  解决方案
  String是不可变的。这意味着一旦创建了字符串,如果另一个进程可以进行内存转储,在GC发生前,(除了反射)没有方法可以清除字符串数据。
  使用数组操作完之后,可以显式地清除数据:可以给数组赋任何值,密码也不会存在系统中,甚至垃圾回收之前也是如此。
  所以,是的,这是一个安全问题 & 但是即使使用了char数组,仅仅缩小了了攻击者有机会获得密码的窗口,它值针对制定的攻击类型。
  7、的最佳方法
  (1504个赞)
  遍历HashMap中元素的最佳方法是什么?
  解决方案
  这样遍历:
public static void printMap(Map mp) {
Iterator it = mp.entrySet().iterator();
while (it.hasNext()) {
Map.Entry pair = (Map.Entry)it.next();
System.out.println(pair.getKey() + & = & + pair.getValue());
it.remove(); // avoids a ConcurrentModificationException
  更多请查阅。
  8、(如何)
  (1468个赞)
  我有一个数组,初始化如下:
Element[] array = {new Element(1), new Element(2), new Element(3)};
  我希望将这个数组转化成一个ArrayList类的对象。
  解决方案
new ArrayList&Element&(Arrays.asList(array))
  (1478个赞)
  我有过一个面试,被问到如何产生一个Java内存泄露。不用说,我感到相当傻,甚至如何产生一个的线索都没有。
  那么怎么才能产生一个内存泄露呢?
  解决方案
  在纯Java中,有一个很好的方式可以产生真正的内存泄露(通过执行代码使对象不可访问但仍存在于内存中):
应用产生一个长时间运行的线程(或者使用一个线程池加速泄露)。
线程通过一个(可选的自定义)类加载器加载一个类。
该类分配大内存(例如,new byte[1000000]),赋值给一个强引用存储在静态字段中,再将它自身的引用存储到ThreadLocal中。分配额外的内存是可选的(泄露类实例就够了),但是这样将加速泄露工作。
线程清除所有自定义类的或者类加载器载入的引用。
重复上面步骤。
  这样是有效的,因为ThreadLocal持有对象的引用,对象持有类的引用,接着类持有类加载器的引用。反过来,类加载器持有所有已加载类的引用。这会使泄露变得更加严重,因为很多JVM实现的类和类加载都直接从持久带(permgen)分配内存,因而不会被GC回收。
  (1422个赞)
  我试着使用Java生成一个随机整数,但是随机被指定在一个范围里。例如,整数范围是5~10,就是说5是最小的随机值,10是最大的。5到10之间的书也可以是生成的随机数。
  解决方案
  标准的解决方式(Java1.7 之前)如下:
import java.util.R
public static int randInt(int min, int max) {
int randomNum = rand.nextInt((max - min) + 1) +
return randomN
  请查看。在实践中,&类总是优于&。
  特别是当标准库里有一个直接的API来完成这个工作,就没有必要重复制造轮子了。
  原文链接:
加群密码:关注下方微信公众号,发送消息 mm 获取
提示:更多精彩内容关注微信公众号:全栈开发者中心(admin10000_com)
理智评论文明上网,拒绝恶意谩骂 发表评论 / 共0条评论
登录会员中心}

我要回帖

更多关于 stackoverflow 慢 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信