开发者

分析源码,学会正确使用 Java 线程池

有些话、适合烂在心里 提交于 2020-04-05 22:37:35
本文作者:oschina_2020 在日常的开发工作当中,线程池往往承载着一个应用中最重要的业务逻辑,因此我们有必要更多地去关注线程池的执行情况,包括异常的处理和分析等。本文主要聚焦在如何正确使用线程池上,以及提供一些实用的建议。文中会稍微涉及到一些线程池实现原理方面的知识,但是不会过多展开。 线程池的异常处理 UncaughtExceptionHandler 我们都知道Runnable接口中的run方法是不允许抛出异常的,因此派生出这个线程的主线程可能无法直接获得该线程在执行过程中的异常信息。如下例: public static void main(String[] args) throws Exception { Thread thread = new Thread(() -> { Uninterruptibles.sleepUninterruptibly(2, TimeUnit.SECONDS); System.out.println(1 / 0); // 这行会导致报错! }); thread.setUncaughtExceptionHandler((t, e) -> { e.printStackTrace(); //如果你把这一行注释掉,这个程序将不会抛出任何异常. }); thread.start(); } 为什么会这样呢?其实我们看一下Thread中的源码就会发现

百度App iOS工程化实践: EasyBox破冰之旅

半世苍凉 提交于 2020-04-05 22:32:58
本文作者:yanxin1563 本文作者: Yunpeng-基础技术 前言 百度App从单一的搜索工具发展到今天以搜索和Feed流为双引擎的综合性内容消费服务平台,其复杂程度已然不可同日而语矣。 作为一个日活过亿的超级App,业务规模庞大,相关技术人员超过千人,客户端支持主流的移动技术,涉及近百业务方,技术形态复杂,各种组件近三百个,代码百万量级,由此带来的工程化问题是技术团队的一个极大挑战。 项目的膨胀导致了很多不起眼的小问题被无限放大,组件管理不规范、编译时间长、工程文件合并冲突、Xcode默认非彻底编译隔离等等问题,导致开发人员在开发环境上耗费了大量时间。目前业界较流行的工具对于大规模工程的支持力度相对较弱,实践起来总是有些掣肘,难以达到理想状态。 EasyBox的诞生,就是致力于为超级App量身打造一套现代、高效、优雅的研发工具链。 这篇文章的主要目的是 站在工具链的角度 上,分享一下我们在实践工程化过程中一些经验。 概述 EasyBox主体由工程组装器(Installer)、多仓库管理工具(MGit)、二进制管理工具(LFS)三部分构成,分别负责工作区的构建(组件依赖分析、工程的生成与组合)、源码仓库的管理以及二进制的管理。EasyBox架构图: 由多仓库管理工具克隆所需仓库源码,由二进制管理工具下载二进制包,然后组装器根据描述表生成对应工程

Stack Overflow大揭密:哪一种程序员工资最高?

倾然丶 夕夏残阳落幕 提交于 2020-03-06 13:52:20
  Stackoverflow在程序员之间可以說是无人不知无人不晓,甚至常有人开玩笑说:“如果stackoverflow倒闭了,全世界代码的产出率将下降一半以上”或许听起来有点夸张,但是不难想像这个网站在软件界中扮演的重要地位。    你知道根据stackoverflow统计,最受欢迎的程序语言是那一种吗?快来一探究竟吧!   「Stack Overflow开发者调查」是由全球著名IT科技网站Stack Overflow发起的,专门针对该站注册开发者用户的问卷调查活动。该调查已经持续了三年之久。去年的调查是近年来规模最大,问题最多,涵盖范围最广的一次。    最受欢迎的程序语言–Js Js    写哪一种语言的工程师,薪水最高? Object-C   根据StackOverflow统计,最赚钱的工程师用的是开发IOS应用程序的御用语言“Object-C”,紧接其后的是Java家族的“Node.js”    在家工作的工程师收入比每天到办公室报到的工程师多40%   看来越来越多的程序员可以体验到自由工作的乐趣,并且学会了合理的分配时间来享受生活和工作,这里也希望越来越多的开发者加入我们程序员客栈www.proginn.com成为一名freelancer。    76%的工程师满意自己的工作   而76%满意自己工作的工程师中有将近一半是热爱自己的工作的,接受调查的工程师中

红帽为开发订阅成员提供免费的Red Hat Enterprise Linux

心已入冬 提交于 2020-03-02 04:56:47
开发者计划的成员现在可以得到一套免费的 Red Hat Enterprise Linux 许可证,RHEL 开发套件将为程序员提供一个构建企业应用的稳定发展平台。红帽开发订阅成员还可以免费得到一套 Red Hat JBoss 中间件副本,当然,这都只是(限定)用于非生产环境的开发订阅。 如果你正构建本地应用程序或微服务,新的红帽开发订阅将允许你访问容器开发工具与资源集合— Red Hat Container Development Kit (CDK) 。 CDK 用户也将有机会获得 RHEL Server 和 OpenShift Enterprise for Development 本地桌面实例,其完整的开发工具包括: RHEL 7 Server 开发工具与长期支持:提供主要 RHEL 版本的基础工具:操作系统(10年支持)、Python、PHP, Ruby、OpenJDK 7 (1.7)、OpenJDK 8 (1.8) 等等。 开发工具长期更新:每年更新稳定版的开源编程语言、数据库、Web 服务器和开发工具,以及红帽软件集合与开发工具箱。 本文转载自: http://www.linuxprobe.com/red-hat-enterprise-linux/ 免费提供最新Linux技术教程书籍,为开源技术爱好者努力做得更多更好: http://www.linuxprobe.com/

我不要做骡子程序员

可紊 提交于 2020-03-01 10:46:52
转载来源 :码厩技术博客 http://www.markjour.com 原文标题 :我不要做骡子程序员 原文地址 : http://www.markjour.com/article/not-be-a-mule.html 阮一峰发表了一篇新文章 《你的命运不是一头骡子》 ,看完之后很受触动。 看到这一幕,我非常感慨。骡子并不知道,为何要把如此重的铁管背到山顶,就是因为主人要求它这么做,就任劳任怨地干了。哪怕有那么一瞬间,它的内心有过一丝抗拒或疑问,主人一施压,它就不再追问了,回到正常的状态,默默地听任摆布。 我从这头骡子身上,想到很多人不也是这样,背负重压,被推着前行,却不知为何。他们埋头勤奋工作,努力完成上级交付的每一个任务,别人让你干什么就干什么,却没有思考过这一切到底为了什么。 我不就是那头骡子么? 我的开发工作,大部分时候都是按照公司(研发中心、项目组)的要求,为已有产品开发某一个功能模块,而对于这个功能,我其实并不真正了解。 以下问题,我并不都知道答案: 需求具体是通过什么渠道来的,是否合理? 待开发模块在整个系统中处于什么位置,对我们的业务起到了什么作用? 整个系统又是一个什么样的架构,其他的每一部分(尤其是相关模块)具体是怎么实现的?有哪些坑? 我们的产品卖给了哪些单位?价格多少?提供什么服务?解决了客户的什么需求(尤其是功能痛点)? 产品在对外的实施中遇到了什么问题

成为程序界的叶问,你需要打败这十个人

前提是你 提交于 2019-12-04 04:52:35
  万众创新,移动互联网正在吞噬世界,开发者这个职业炙手可热的程度前所未有,而且只会越来越热门。许多人意识到这股潮流,加入写程序的行列。不过别看程序工程师坐拥高薪,这可是个强者如云、充满挑战的环境。也因如此,开发者质量的优劣判断总是在网络上引发热烈讨论。曾经在程序员客栈www.proginn.com技术圈上就有这么一道热门的问题 「糟糕的软件工程师有什么特征」 ,亚马逊软件开发工程师Nachiket Naik的回答颇为中肯,获得几千名网友赞同。迈向顶尖开发者的道路上,你该避免成为下列十种人。    1.复制粘贴的人   程序设计问答网站Stack Overflow拥有非常丰硕的资源,很多人写程序碰壁了就会上去找解答,Stack Overflow本身并没有错,它是工程师的得力助手。但是如果只是复制粘贴,改个参数,不去了解前因后果,不去弄懂为何这样的解法到底是不是真的适用于现在面临的问题,那当然很难进步。有不少工程师宁可相信他们在网络论坛看到的说法,而不愿意费心思考眼前的代码或系统。    2.懒得测试的人   「我不干测试这种事,那是测试工程师的责任。」即使在敏捷开发方法如此盛行的时代,这种态度依旧层出不穷。工程师不愿测试的惰性还是很普遍。有可能是他们讨厌设定测试环境,也有可能是缺乏测试的连贯性知识。当然,也或许是,测试工程师在开发者社群中总存在着不能说的污名。    3.不写文件人

Navigation Drawer详解-Google推出的用来取代Sliding Menu的控件(一

[亡魂溺海] 提交于 2019-12-02 08:06:05
相信 Sliding Menu 很多人都用过,在 Android 和 iOS 的 app 中,越来越多的开发者都会把自己的菜单界面放在一个列表里,然后让用户通过向右(或者向左)滑动的操作看到应用所有的功能。 Google 官方的应用也基本都选择了这种交互方式,不同的是, Google 使用的是 Navigation Drawer ,而我们大部分用的还是 Sliding Menu 。 大家对 Sliding Menu 这个开源项目可能已经很熟悉了,但是 Navigation Drawer 我们有些童鞋可能了解的还比较少,它是 Google I/O 2013 刚推出不久的一个在 support v4 包里面的一个控件,下面我就通过一个 demo 跟大家介绍一下 Navigation Drawer 的使用方法。 http://safe.ijiami.cn/ 这个 demo 是 google 官方的,大家可以到这里下载一下: http://developer.android.com/training/implementing-navigation/nav-drawer.html ,我下面写的代码说明也基本就是翻译了一下这个教程,英语比较好的童鞋建议还是直接看官方的吧。 创建一个抽屉 导航抽屉是一个位于屏幕左侧边缘用来显示应用程序导航项的一个面板。导航抽屉在大部分时间是不显示的

程序员如何摆脱简历,立体展示个人价值

我与影子孤独终老i 提交于 2019-11-28 19:45:50
在我们向优秀程序员发出的邀请信中,我们是这样描述我们的目标的:   程序员客栈宗旨是:汇聚中国最优秀的程序员并为大家服务。目前正处于第一阶段:更立体地展现优秀程序员的成就(从作品,专业社区影响力,以及个性宣言等方面),让程序员摆脱简历局限,更充分地展现自己的能力,得到更多收入和人脉机会。   所以我们一直在苦想,怎么可以实现这点?目前,我们整理出以下两个思路:   1. 摆脱简历,通过综合个人履历立体展现自己   3分钟以内完成个人履历信息输入,之后我们 每日为你更新 所有可以自动抓取的内容: Github信息 知乎信息 stackoverflow的信息   并且我们会请专业的设计师帮忙做出更好的履历页面(是的,现在还很挫T_T),让你每次可以很酷地把主页分享出去,你的大拿气质,个人成就就可以让对方膜拜,不用自己花时间填写。   以我自己的为例:(在程序员的专业社区我就是个渣。。。)   个人履历   2. 每周推荐一些有意思的 程序员 ,让大家知道他们有意思,值得关注。   以Github标星,follower数量,作品类型,履历被赞的数量等作为排序规则,我们可以从不同纬度发现很多有意思值得关注的程序员,我们希望可以把他们推荐给更多人。   简单从程序员客栈现有的排序体系来看: 客栈总体热门排行 客栈移动端方向热门排行 客栈北京地区热门排行   等等。希望通过这些实践