首页 文章 精选 留言 我的

精选列表

搜索[官方镜像],共10000篇文章
优秀的个人博客,低调大师

Linux Foundation APAC 首批开源布道者官方发布会,诚邀您共同见证!

开源已经被证明是一个高效的创新模式和可行的商业模式,开源运动兴起的10年,正是人类历史上科技创新最蓬勃的10年。开源为社会创造了一个更公平、更多元化、更包容和更开放的创新环境。我们不仅能够在开源社区得到免费开源软件,更可以建立自己的开源社区,学习新的技术和磨练团队的技能。我们可以通过开源与华为、腾讯、阿里、百度、中移动、谷歌、VMWare、英特尔等前沿科技公司的开发者并肩工作,打造你的职场人脉,寻找你下一个创业机会和合作伙伴! 开源已经成为全球绝大部分企业科技创新的主要动力来源,为了能够让更多的中国企业利用好开源资源,Linux 基金会亚太团队与10位开源精英志愿者组成了亚太区第一个开源布道者团队(开源布道者详细介绍请访问:https://training.linuxfoundation.cn/news/161),帮助企业明确开源目标,掌握开源方法,推荐关键开源技术,协助企业构建自己的开源生态。 本次发布会是我们全体布道者团队首次公开亮相,我们期待这次见面能够成为中国开源旅程的新起点! 开源布道者发布会日程如下: 日期:2021年2月3日 时间:晚7:30 – 9:30 地点:线上直播 本次开源布道者与大家分享的主题包括: 19:30-21:00 欢迎演讲 演讲主题:拥抱开源的企业需要什么样的最佳实践?作为Linux 基金会 APAC 开源布道者,能为本土企业做些什么? 演讲嘉宾:LFAPAC 开源布道者 李建盛 演讲主题:Hyperledger 超级账本项目在中国的发展现状, 以及Hyperledger + IoT/边缘计算/AI的应用展望 演讲嘉宾:LFAPAC 开源布道者 Michael Su 演讲主题:开源社区 - 让开源项目、用户企业和开发者距离更近一点 演讲嘉宾:LFAPAC 开源布道者 张岩 演讲主题:工业4.0时代的开源软件 演讲嘉宾:LFAPAC 开源布道者 侯胡的 演讲主题:锁定或中立:与供应商的博弈 演讲嘉宾:LFAPAC 开源布道者 陈兴友 演讲主题:开源:企业创新的助燃剂;个人能力提升的垫脚石 演讲嘉宾:LFAPAC 开源布道者 马景贺(小马哥) 演讲主题:加入开源社区,让开源成为日常习惯 演讲嘉宾:LFAPAC 开源布道者陈一苇 演讲主题:新项目如何加入Linux基金会,要做哪些准备? 演讲嘉宾:LFAPAC 开源布道者 杨爱林 演讲主题:开源需要生态,开源需要贡献,开源需要布道 演讲嘉宾:LFAPAC 开源布道者 Sam Chen 演讲主题:选择参与开源,就是选择了一种投资方式 演讲嘉宾:LFAPAC 开源布道者 Rick 演讲主题:Linux Foundation 开源软件大学 - 加入开源,由学习开始 演讲嘉宾:Linux Foundation 开源软件大学运营总监 Jerry Li 21:00-21:20 炉边夜谈 - 如何培育成功的开源文化 21:20-21:30 开源对话 (Q&A) 扫描以下二维码观看直播: 也可点击【传送门】进入直播页面

优秀的个人博客,低调大师

Node.js官方文档:到底什么是阻塞(Blocking)与非阻塞(Non-Blocking)?

译者按: Node.js文档阅读系列之一。 原文: Overview of Blocking vs Non-Blocking 译者: Fundebug 为了保证可读性,本文采用意译而非直译。 这篇博客将介绍Node.js的阻塞(Blocking)与非阻塞(Non-Blocking)。我会提到Event Loop与libuv,但是不了解它们也不会影响阅读。读者只需要有一定的JavaScript基础,理解Node.js的回调函数(callback pattern)就可以了。 博客中提到了很多次I/O,它主要指的是使用libuv与系统的磁盘与网络进行交互。 阻塞(Blocking) 阻塞指的是一部分Node.js代码需要等到一些非Node.js代码执行完成之后才能继续执行。这是因为当阻塞发生时,Event Loop无法继续执行。 对于Node.js来说,由于CPU密集的操作导致代码性能很差时,不能称为阻塞。当需要等待非Node.js代码执行时,才能称为阻塞。Node.js中依赖于libuv的同步方法(以Sync结尾)导致阻塞,是最常见的情况。当然,一些不依赖于libuv的原生Node.js方法有些也能导致阻塞。 Node.js中所有与I/O相关的方法都提供了异步版本,它们是非阻塞的,可以指定回调函数,例如fs.readFile。其中一些方法也有对应的阻塞版本,它们的函数名以Sync结尾,例如fs.readFileSync。 代码示例 阻塞的方法是同步执行的,而非阻塞的方法是异步执行。 以读文件为例,下面是同步执行的代码: const fs = require('fs'); const data = fs.readFileSync('/file.md'); // 文件读取完成之前,代码会阻塞,不会执行后面的代码 console.log("Hello, Fundebug!"); // 文件读取完成之后才会打印 对应的异步代码如下: const fs = require('fs'); fs.readFile('/file.md', (err, data) => { if (err) throw err; }); // 代码不会因为读文件阻塞,会继续执行后面的代码 console.log("Hello, Fundebug!"); // 文件读完之前就会打印 第一个示例代码看起来要简单很多,但是它的缺点是会阻塞代码执行,后面的代码需要等到整个文件读取完成之后才能继续执行。 在同步代码中,如果读取文件出错了,则错误需要使用try...catch处理,否则进程会崩溃。对于异步代码,是否处理回调函数的错误则取决于开发者。 我们可以将示例代码稍微修改一下,下面是同步代码: const fs = require('fs'); const data = fs.readFileSync('/file.md'); console.log(data); moreWork(); // console.log之后再执行 异步代码如下: const fs = require('fs'); fs.readFile('/file.md', (err, data) => { if (err) throw err; console.log(data); }); moreWork(); // 先于console.log执行 在第一个示例中,console.log将会先于moreWork()执行。在第二个示例中,由于fs.readFile()是非阻塞的,代码可以继续执行,因此moreWork()会先于console.log执行。 moreWork()不用等待读取整个文件,可以继续执行,这是Node.js可以增加吞吐量的关键。 并发与吞吐量 Node.js中JS代码执行是单线程的,因此并发指的是Event Loop可以在执行其他代码之后再去执行回调函数。如果希望代码可以并发执行,则所有非JavaScript代码比如I/O执行时,必须保证Event Loop继续运行。 举个例子,假设Web服务器的每个请求需要50ms完成,其中45ms是数据库的I/O操作。如果使用非阻塞的异步方式执行数据库I/O的话,则可以节省45ms来处理其他请求,这可以极大地提高系统的吞吐量。 Event Loop这种方式与其他许多语言都不一样,通常它们会创建新的线程来处理并发。 混用阻塞与非阻塞代码会出问题 当我们处理I/O时,应该避免以下代码: const fs = require('fs'); fs.readFile('/file.md', (err, data) => { if (err) throw err; console.log(data); }); fs.unlinkSync('/file.md'); 上面的示例中,fs.unlinkSync()很可能在fs.readFile()之前执行,也就是说,我们在读取file.md之前,这个文件就已经被删掉了。 为了避免这种情况,我们应该是要非阻塞方式,来保证它们按照正确的顺序执行。 const fs = require('fs'); fs.readFile('/file.md', (readFileErr, data) => { if (readFileErr) throw readFileErr; console.log(data); fs.unlink('/file.md', (unlinkErr) => { if (unlinkErr) throw unlinkErr; }); }); 上面的示例中,我们把非阻塞的fs.unlink()放在fs.readFile()的回调函数中。 参考 libuv About Node.js 关于Fundebug Fundebug专注于JavaScript、微信小程序、微信小游戏、支付宝小程序、React Native、Node.js和Java线上应用实时BUG监控。 自从2016年双十一正式上线,Fundebug累计处理了10亿+错误事件,付费客户有Google、360、金山软件、百姓网等众多品牌企业。欢迎大家免费试用! 版权声明 转载时请注明作者Fundebug以及本文地址:https://blog.fundebug.com/2019/06/12/overview-of-nodejs-blocking-vs-non-blocking/

优秀的个人博客,低调大师

基于umeng官方php sdk v1.4,支持Laravel5以及Lumen5

安装 composer require zzl/umeng Laravel 5.* 配置 打开config目录下的app.php文件,找到provider,添加如下代码: 'provider' => [ Zzl\Umeng\UmengServiceProvider::class, ], 配置alias: 'aliases' => [ 'Umeng' => Zzl\Umeng\Facades\Umeng::class, ], 生成配置文件: php artisan vendor:publish 在配置文件umeng.php中填入appkey以及master_secret既可完成配置 在Lumen 5.*中配置 打开bootstrap目录下的app.php文件,注册provider: $app->register(Zzl\Umeng\UmengServiceProvider::class); 配置alias: class_alias('Zzl\Umeng\Facades\Umeng','Umeng'); 生成配置文件: php artisan vendor:publish 在配置文件umeng.php中填入appkey以及master_secret既可完成配置 用法 Android用法: use Umeng; $device_token = 'xxxx'; $predefined = array('ticker' => 'android ticker' ,...); $extraField = array(); //other extra filed Umeng::android()->sendUnicast($device_token,$predefined,$extraField); //单播 IOS用法: use Umeng; $device_token = 'xxxx'; $predefined = array('alert' => 'ios alert' ,...); $customField = array(); //other custom filed Umeng::ios()->sendUnicast($device_token,$predefined,$customField); //单播 Api 说明: Android API跟 IOS一样 sendBroadcast($predefined = [], $extraField = []); //广播 sendUnicast($device_tokens = '', $predefined= [], $extraField = []); //单播 sendListcast($device_tokens = '', $predefined= [], $extraField = []); //列播 sendFilecast($fileContents = '', $predefined= [],$extraField = []); //文件播 sendGroupcast($filter = [], $predefined= [], $extraField = []); //组播 sendCustomizedcast($alias = '', $alias_type = '', $predefined= [], $extraField = []); //自定义播,通过alias sendCustomizedcastFileId($file_contents = '', $predefined= [], $extraField = []); //自定义播,通过file_id Exception 程序不处理异常,可根据业务情况自行处理, 若抛出异常,可通过 e->getHttpCode() 获取http状态码, 通过 e->getErrCode()获取umeng返回的错误码. 使用过程中若出错,可自行查看Laravel或Lumen的Log日志

优秀的个人博客,低调大师

每周新品|云市场官方小二推荐值得买清单(有图有真相)

岁末将至,阿里云云市场7大类目、3000余款产品是不是让您挑花了眼。每周新品这个栏目就为各位用户甄选最值得买的产品。本周我们特意邀请阿里云云市场各类目小二精选本类目最值得推荐的新品,汇聚成值得买清单。 点击购买>译云机器翻译-翻译测试接口(公测) 点击购买>京颐云HIS·SaaS版 点击购买>Oracle安装、配置、故障排除、迁移、调优代维服务 点击购买>绿盟网站安全评估服务 点击购买>【微信网站】微网站建设微信公众号定制开发手机微官网制作购物商城设计 Udesk,智能在线客服系统 Udesk全渠道客服系统,将在线客服,呼叫中心,工单,邮件,微信微博信息统一到一个平台进行客服管理,大幅度提升客服效率,用户满意度。 优势特色:1、无需下载与安装;2、快速部署,接入企业系统;3、无需硬件设备。 点击购买>Udes

优秀的个人博客,低调大师

Android官方开发文档Training系列课程中文版:管理设备的睡眠状态

原文地址:http://android.xsoftlab.net/training/scheduling/index.html 引言 当Android设备处于闲置状态时,它的屏幕首先会变暗,接着会关闭屏幕,最后会将CPU关闭。这些举措可以防止设备的电量迅速被耗尽。但是当APP需要的话,还是会有例外情况: 游戏类APP或者视频类APP需要保持屏幕常亮。 有一部分APP或许不需要屏幕保持常亮,但是它们需要CPU继续保持运转,直到它们的任务执行完毕。 这节课主要学习如何在需要的时候保持设备的唤醒状态而又不至于非常耗电。 保持设备的唤醒状态 为了避免迅速将电量耗光,Android设备会在进入闲置状态后紧接着进入睡眠状态。不过,还是有一些例外情况的:它们需要保持屏幕常亮或者是保持CPU持续运转状态以便完成某些任务。 具体采用什么样的方式这取决于APP的需求。不过,有一条规则就是尽量采取最轻量级的方法,尽可能少的消耗系统资源。 保持屏幕常亮 某些APP比如游戏类APP或者视频类APP需要保持屏幕常亮。要做到这一点只需要在Activity中使用FLAG_KEEP_SCREEN_ON就可以,不过千万不要在服务或者其它组件中使用该标志: public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); } ... } 这种方法的优势在于:它不要指定特殊权限,系统会将APP之间的状态切换处理好,也不需要担心有关释放无用资源的问题。 另一个实现方式就是在布局文件中使用android:keepScreenOn属性: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:keepScreenOn="true"> ... </RelativeLayout> android:keepScreenOn=”true”的作用效果与使用FLAG_KEEP_SCREEN_ON的效果等同。你可以选择最合适的方式。使用标志的优势在于可以动态的清除该标志的状态,以便于屏幕可以转入关闭状态。 Note: 除非可以肯定屏幕不再需要保持常亮,否则不需要我们自己专门去清除该标志。WindowManager会严格把关这些事情:APP转入后台时,APP转入前台时。但是如果你明确要清除该标志以便屏幕可以转入关闭状态,那么可以使用clearFlags():getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) 保持CPU的运行 如果APP希望在系统转入睡眠状态之前完成一些事情,那么可以使用PowerManager系统服务中的WakeLock特性。WakeLock可以使APP控制设备的电源状态。 因为持有WakeLock对象可以直接与电源交互,所以只能在必要的时候使用WakeLock。绝不要在Activity中使用WakeLock。就像上面说的那样,如果希望保持屏幕常亮,只需要使用FLAG_KEEP_SCREEN_ON就可以。 使用WakeLock的合理场景就是后台服务。再强调一次,使用时应当以最小限度使用该标志,因为它会直接影响到电池的电量。 如果要使用WakeLock,首先需要在清单文件中添加WakeLock的权限: <uses-permission android:name="android.permission.WAKE_LOCK" /> 如果APP还包括了一个与服务做相关工作的广播接收器,那么可以通过WakefulBroadcastReceiver来管理WakeLock。这是一种非常理想的方案。如果APP没有那样的情况,那么也可以使用下面的方法: PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE); Wakelock wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyWakelockTag"); wakeLock.acquire(); 如果要释放WakeLock,调用wakelock.release()就好。它会释放你所持有的CPU资源。在任务完成后做这项工作是很重要的,因为这可以防止电池电量被迅速耗光。 使用WakefulBroadcastReceiver 广播接收器与服务的结合使用非常易于管理后台任务的生命周期。 WakefulBroadcastReceiver是一种特殊的广播接收器:它可以创建并管理APP的PARTIAL_WAKE_LOCK。在设备即将转入睡眠状态时,WakefulBroadcastReceiver会将该信号发给服务(通常是IntentService)。如果在收到广播后没有持有WakeLock,那么可以在工作完成之前设备就会转入睡眠状态。这就会导致任务不能及时完成,这并不是我们想看到的。 WakefulBroadcastReceiver用法的第一步就是将其添加到清单文件中,与其它广播接收器的添加方式一样: <receiver android:name=".MyWakefulReceiver"></receiver> 第二步就是使用startWakefulService()方法来启动MyIntentService。这个方法除了在启动时WakefulBroadcastReceiver持有了一个WakeLock外,其它的都与startService()很相似。在startWakefulService()中所使用的Intent被隐式的携带了一个WakeLock。 public class MyWakefulReceiver extends WakefulBroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // Start the service, keeping the device awake while the service is // launching. This is the Intent to deliver to the service. Intent service = new Intent(context, MyIntentService.class); startWakefulService(context, service); } } 在服务结束时,要使用MyWakefulReceiver.completeWakefulIntent()将WakeLock释放。completeWakefulIntent()方法使用了被WakefulBroadcastReceiver传递过来的Intent对象: public class MyIntentService extends IntentService { public static final int NOTIFICATION_ID = 1; private NotificationManager mNotificationManager; NotificationCompat.Builder builder; public MyIntentService() { super("MyIntentService"); } @Override protected void onHandleIntent(Intent intent) { Bundle extras = intent.getExtras(); // Do the work that requires your app to keep the CPU running. // ... // Release the wake lock provided by the WakefulBroadcastReceiver. MyWakefulReceiver.completeWakefulIntent(intent); } }

资源下载

更多资源
优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册