首页 文章 精选 留言 我的

精选列表

搜索[快速],共10000篇文章
优秀的个人博客,低调大师

IoT 设备免烧录三元组,基于MQTT动态注册身份,快速上云方案

背景 物联网场景中,设备产线烧录不同三元组成本很高,Android设备更是无法独立烧录三元组,IoT 存量设备迁移更是无法预置身份三元组,面对这种场景,IoT物联网平台提供了无需预注册三元组,在设备运行时通过MQTT动态注册,获取认证信息,再发起设备业务连接的方案。 安全提示 对于一型一密免预注册方式,请在设备端使用4.X版C SDK。该SDK包含DAS(设备取证服务),可以对设备可能产生的安全事件进行风控。物联网平台不承担因设备端没有使用该SDK而导致的安全风险。 流程图 设备动态注册三元组流程如下: 开发实战 创建产品 我们接入 IoT 物联网平台,注册一个新产品:Android设备。进入产品详情,获取productKey和productSecret。开启动态注册功能,如下图: 接下来,我们无需按常规流程,在控制台注册设备,而是直接开发设备端程序。 设备端开发 我们以Node.js代码演示设备动态注册原理。 动态注册 设备发送CONNECT报文,报文中包含动态注册参数,请求建立连接。• MQTT连接域名:公共实例的连接域名为${YourProductKey}.iot-as-mqtt.${YourRegionId}.aliyuncs.com:1883。MQTT动态注册的CONNECT报文参数和取值结构如下: mqttClientId: clientId+"|securemode=2,authType=regnwl,random=xxxx,signmethod=xxx|" mqttUserName: deviceName+"&"+productKey mqttPassword: sign_hmac(productSecret,content) • mqttClientId组成结构:clientId+"|securemode=2,authType=regnwl,random=xxxx,signmethod=xxx|"参数取值中包含的详细参数如下表。 • mqttUserName组成结构:deviceName+"&"+productKey示例:device1&al123456789。• mqttPassword计算方法:sign_hmac(productSecret,content)其中,content的值是拼接串("deviceName"+device1+"productKey"+al123456789+"random"+123456)hmac_sha1(h1nQFYPZS0mW2352, deviceNamedevice1productKeyal123456789random123) 免预注册认证方式,设备注册成功后,物联网平台使用Topic:/ext/regnwl,返回ClientID、DeviceToken。IoT 物联网平台推送的设备身份消息Payload格式如下: { "productKey" : "xxx", "deviceName" : "xxx", "clientId" : "xxx", "deviceToken" : "xxx" } 动态注册示例代码: function doDeviceRegister() { // 1.产品信息 const productInfo = { productKey: "产品 productKey", productSecret: "产品 productSecret", regionId: "cn-shanghai" } // 2.程序读取的设备唯一标识,比如 MAC,Serial Number 等 productInfo.deviceName = Math.random().toString(36).substr(2) // 3.生成设备动态注册的参数 var options = getRegisterOptions(productInfo, trustedCA); // 4.发起动态注册,获取设备连接 clientId 和 deviceToken var registerClient = mqtt.connect(options); registerClient.on('message', function(topic, message) { // 5. 解析注册结果 if ('/ext/regnwl' == topic) { // 6.断开注册连接 registerClient.end(); // 7.发起设备 MQTT 连接 //deviceOnline(JSON.parse(message),"cn-shanghai") } }) } 生成设备动态注册的参数参考文档: https://help.aliyun.com/document_detail/132111.html function getRegisterOptions(productInfo, rootCA) { var random = Date.now(); var content = { deviceName: productInfo.deviceName, productKey: productInfo.productKey, random: random } var options = {} options.clientId = Date.now() + "|securemode=2,authType=regnwl,random=" + random + ",signmethod=hmacsha1|" options.username = productInfo.deviceName + "&" + productInfo.productKey options.password = signHmacSha1(content, productInfo.productSecret) options.port = 1883; options.host = `${productInfo.productKey}.iot-as-mqtt.${productInfo.regionId}.aliyuncs.com`; options.protocol = 'mqtts'; options.ca = rootCA options.keepalive = 120 return options; } 动态注册成功后,产品下会设备数量会更新: 设备在线和上报数据 设备收到并保存ClientID和DeviceToken的组合,断开当前MQTT连接,发起设备直连IoT平台的请求的CONNECT参数如下: mqttClientId: clientId+"|securemode=-2,authType=connwl|" mqttUsername: deviceName+"&"+productKey mqttPassword: deviceToken • mqttClientId:设备动态注册时获得的ClientID拼接固定字符串。• mqttUserName:组成结构:deviceName+"&"+productKey示例:device1&al123456789。• mqttPassword:设备动态注册时获得的DeviceToken实例代码: function deviceOnline(opts,regionId) { // 设备 MQTT 连接参数 var options = {} options.clientId = opts.clientId + "|securemode=-2,authType=connwl|" options.username = opts.deviceName + "&" + opts.productKey options.password = opts.deviceToken options.port = 1883 options.host = `${opts.productKey}.iot-as-mqtt.${regionId}.aliyuncs.com` options.protocol = 'mqtt' options.keepalive = 120 // 设备建立 MQTT 连接 var deviceClient = mqtt.connect(options); // 上报业务数据 deviceClient.publish(`/${opts.productKey}/${opts.deviceName}/user/update`, "sdk client " + Date.now(), { qos: 1 }); } 在控制台可以看到设备在线,并展示ClientID信息,如下: 【往期回顾】 1、39张IoT传感器工作原理GIF图汇总2、IoT 设备发送 MQTT 请求的曲折经历3、20元体Arduino 环境监测仪开发4、智能手持测温枪开发实践5、JMeter 压测 MQTT 服务性能实战

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

直播揭秘飞冰 | 淘系中后台负责人教你快速搭建企业微前端架构

主题:微前端 + icejs 助力企业级中后台开发时间:3月5日 19:00-20:00嘉宾:大果 阿里巴巴淘系技术前端技术专家 ★上期直播地址:http://mudu.tv/watch/4662084★PPT获取:关注「淘系技术」微信公众号,后台回复“前端”即可获取全部PPT资料! 分享简介 icejs 是飞冰团队在 2020 年初发布的一个 React 研发框架,目前已广泛应用于淘系中后台业务中。icejs 致力于建设一套上手简单、生态完善的研发框架,从基础的路由到状态管理再到 SSR、微前端等我们是如何思考与设计的?icejs 与社区已有的框架 nextjs、nuxtjs 等又有哪些区别?本次直播带你一探究竟。 另一方面,今年在国内前端社区突然火起来的微前端到底是解决什么问题的?在淘系业务场景下微前端方案 icestark 又是怎

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

19、 Python快速开发分布式搜索引擎Scrapy精讲—css选择器

css选择器 1、 2、 3、 ::attr()获取元素属性,css选择器 ::text获取标签文本 举例: extract_first('')获取过滤后的数据,返回字符串,有一个默认参数,也就是如果没有数据默认是什么,一般我们设置为空字符串 extract()获取过滤后的数据,返回字符串列表 #-*-coding:utf-8-*- importscrapy classPachSpider(scrapy.Spider): name='pach' allowed_domains=['blog.jobbole.com'] start_urls=['http://blog.jobbole.com/all-posts/'] defparse(self,response): asd=response.css('.archive-title::text').extract()#这里也可以用extract_first('')获取返回字符串 #print(asd) foriinasd: print(i) 【转载自:http://www.lqkweb.com】

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

如何用SAP WebIDE的Fiori创建向导基于ABAP OData service快速创建UI5应用

如果我们手上已经有可以正常工作的OData服务,无论位于ABAP on-premise系统还是public上的internet OData service,都可以用SAP WebIDE里的Fiori创建向导,几分钟之内轻松创建出可以持续开发的UI5应用。 打开SAP云平台上的WebIDE,New->Project from Template: 选择Master Detail风格的Fiori应用: 这里就要指定这个UI5应用消费的OData服务url了。下拉菜单里看到的是一个我在SAP云平台创建的Destination,指向on premise系统: url路径选择/sap/opu/odata/sap/CRM_OPPORTUNITY,做过CRM的朋友们会知道这个路径指向的是CRM ABAP里的OData服务CRM_OPPORTUNIT

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

将你的物联网设备位置快速接入到地图上,只需要10分钟!

楼主作为一个物联网方面的萌新,喜欢玩玩阿里云物联网平台的各种现成功能,然后和自己的设备做下简单组合,往往就能实现一些之前比较麻烦的功能。最近看到阿里云物联网平台新上了一个数据分析菜单,对于动手党来说,先别管什么东西?玩玩先。 在产品和服务里,搜物联网,先进物联网平台控制台。 看到这个数据分析目录了么,就是这个新出现的目录。 简单点点几个功能目录,发现除了最后一个空间数据可视化以外,都是和数据相关的,看来大数据和物联网结合的潮流已经势不可挡了,不过像楼主这种普通码农,手上的设备有限,数据更是没有多少,这些功能看来短时间是用不上了,不过点到最后一个空间数据可视化,楼主的眼睛开始冒小星星了。 创建场景 先点下创建场景,看到可以选择产品或者设备组,但是在产品的下拉菜单里没有找到我的产品,问号脸??? 看了上面有个文档链接,进去有个视频教程,15分钟的样子,讲的内容很全,从创建设备到配置地图都有。快快看一下,知道原因了,这个功能需要高级版设备(其实在页面上已经提示了,但是眼睛太大没有看到,o(╯□╰)o)。so,建一个呗,反正又不要钱。 创建产品和设备 高级版的设备,有不少现成的类型可以选,我在这里选了一个自定义的设备,然后用这个产品新建了几个设备三元组: 这个时候再回到二维可视化这里,就能看到刚才新建的产品了: 新建好的场景进来是这样的:提示设备没有位置。 上传设备位置 下一步就是如何给楼主的设备设置位置了,看了下官方的设备定位文档链接,有两种方法,一种是在设备详情页面给设备给个位置的标签,就像下面图上的这样,用鼠标在地图上选一下设备的位置,这种方式估计是为了给没有gps模块、同时位置又不怎么变动的设备用的; 作为程序员的楼主,怎么能用这么偷懒的办法呢,还有一种办法是给设备添加一个代表位置的属性,然后把经纬度通过这个属性post到云端来。楼主手上没有gps模块的设备,不过可以用阿里云提供的mqtt客户端sdk程序模拟一个设备来做测试。SDK的版本有很多,C、java、python、nodejs等等,楼主这里为了方便,就用java版本的sdk在自己的本本上直接跑了。阿里云物联网java SDK的链接在这里,有一个demo功能,我直接下回来改改, 这里楼主因为建产品的时候选择的自定义的产品,根据官方文档,要给产品添加位置属性才可以,楼主在添加标准属性的时候,搜了下位置关键字,选了个和官方文档上一样的标识符是GeoLocation的属性(后面有属性的试用类别,楼主根本没有care,^_^): 下面就是跑代码把设备位置传上来了,很激动有木有! 把设备三元组填到demo的device_id.json文件里。如图:demo程序的入口在HelloWorld.java,看了下里面的代码,把上报属性以外的方法都干掉,最后精简以后的demo长这样: public class HelloWorld { private static final String TAG = "HelloWorld"; private String pk, dn; private ThingSample thingTestManager = null; public static void main(String[] args) { ALog.d(TAG, "Hello world!"); ALog.setLevel(ALog.LEVEL_DEBUG); HelloWorld manager = new HelloWorld(); ALog.d(TAG, "args=" + Arrays.toString(args)); System.out.println(System.getProperty("user.dir")); String diPath = System.getProperty("user.dir") + "/device_id.json"; String deviceInfo = FileUtils.readFile(diPath); if (deviceInfo == null) { ALog.e(TAG, "main - need device info path."); return; } Gson mGson = new Gson(); DeviceInfoData deviceInfoData = mGson.fromJson(deviceInfo, DeviceInfoData.class); if (deviceInfoData == null) { ALog.e(TAG, "main - deviceInfo format error."); return; } ALog.d(TAG, "测试一机一密和物模型"); manager.init(deviceInfoData); } public void init(final DeviceInfoData deviceInfoData) { this.pk = deviceInfoData.productKey; this.dn = deviceInfoData.deviceName; LinkKitInitParams params = new LinkKitInitParams(); /** * 设置 Mqtt 初始化参数 */ IoTMqttClientConfig config = new IoTMqttClientConfig(); config.productKey = deviceInfoData.productKey; config.deviceName = deviceInfoData.deviceName; config.deviceSecret = deviceInfoData.deviceSecret; config.channelHost = pk + ".iot-as-mqtt." + deviceInfoData.region + ".aliyuncs.com:1883"; /** * 是否接受离线消息 * 对应 mqtt 的 cleanSession 字段 */ config.receiveOfflineMsg = false; params.mqttClientConfig = config; /** * 设置初始化三元组信息,用户传入 */ DeviceInfo deviceInfo = new DeviceInfo(); deviceInfo.productKey = pk; deviceInfo.deviceName = dn; deviceInfo.deviceSecret = deviceInfoData.deviceSecret; params.deviceInfo = deviceInfo; /** * 设置设备当前的初始状态值,属性需要和云端创建的物模型属性一致 * 如果这里什么属性都不填,物模型就没有当前设备相关属性的初始值。 * 用户调用物模型上报接口之后,物模型会有相关数据缓存。 */ Map<String, ValueWrapper> propertyValues = new HashMap<String, ValueWrapper>(); // 示例 // propertyValues.put("LightSwitch", new ValueWrapper.BooleanValueWrapper(0)); params.propertyValues = propertyValues; thingTestManager = new ThingSample(pk, dn); LinkKit.getInstance().init(params, new ILinkKitConnectListener() { public void onError(AError aError) { ALog.e(TAG, "Init Error error=" + aError); } public void onInitDone(InitResult initResult) { ALog.i(TAG, "onInitDone result=" + initResult); thingTestManager.readData(System.getProperty("user.dir") + "/test_case.json"); thingTestManager.report(); } }); } } 对于设备要上报的位置属性设置,要填在test_case.json里。由于GeoLocation属性定义是struct结构体,所以value要填结构体子属性的json串,子属性的名字点击下面框出来的红框里的编辑查看:填好以后的test_case.json长这个样子:这里碰到一个坑,楼主只填写了struct里的经度和纬度两个属性,结果云端返回"6312:tsl parse: struct param size error -> GeoLocation",看来struct里的全部属性都要填。CoordinateSystem这个属性查了下,是google用标准国外标准和国标的区别,两个坐标系之间会有少许偏移,这里只是测试,所以先填1。这里给大家推荐高德的坐标拾取器,很好用的:link最后就是跑下HelloWorld的main方法了,见证奇迹的时候到了!!!看到云端返回: {"code":200,"data":{},"id":"526900545","message":"success","method":"thing.event.property.post","version":"1.0"} 说明上传成功,哈哈,开心。这个时候再看看我的场景: **大功告成,总结一下,总共三个步骤, 1、创建带位置属性的高级版产品和设备; 2、用产品来创建场景; 3、上传设备位置。 其他的工作这个云产品都帮你做了,如果第三步楼主不是用代码,而是在控制台上直接设置,整个过程用不了10分钟,是不是挺简单?简单在页面点点,还发现了其他的功能,这个留着楼主下期分享。**

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

30K iOS程序员的简述:如何快速进阶成为高级开发人员

前言: 本篇文章适用于所有在这个行业已经有了几年时间后想要在职业生涯中取得突破的开发人员,编程人员和程序员(或者你可能刚刚开始,但希望你能看到你的路径) 本文适合那些有着简单愿望的人:你想成为一名高级开发人员,并希望在你的领域中脱颖而出。在阅读完这篇文章后,您将获得一组具有最佳资源列表的路径,供您升级并成为高级开发人员。 作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个我的iOS交流群:638302184,不管你是小白还是大牛欢迎入驻 ,分享BAT,阿里面试题、面试经验,讨论技术, 大家一起交流学习成长!希望帮助开发者少走弯路。 免责声明:与生活中的所有事物一样,您可以随时设定自己的路径。尽管这不是唯一的方法,但是这是我在自己的职业生涯中发现的一种方法,并且通过我在过去一年中与我认为是社区中资深和受人尊敬的程序员的人进行了许多对话和访谈。 我已经积累了这篇文章的所有共同点。所有这些不仅仅是一篇关于如何成为更好的开发人员的文章。这是一个如何指导您如何使用高效实用的工具来优化您的时间,从而让您从生活中获得最大收益。将来你可以在任何地方进行这种学习 我们想要什么?1,我们都努力做好工作。该声明的具体内容可能取决于个人。但是,大多数人可以同意一些常见的事情: 2,我们不希望经历被视为“无能”的生活, 3,我们希望得到我们同事的尊重 4,我们希望感觉自己聪明,并且做到了 5,我们想感受赞赏 为了实现上述目标,我们不能仅仅停留在我们的能力上,并期望事情会发生。特别是在编程领域,技术在不断变化,我们掌握的信息量非常之大,我们希望将注意力集中在成长和学习上,而不是消耗殆尽。随着越来越多的开发者走出大学和训练营,我们需要保持技能的锐利,而让自己与众不同的方法是在学习时保持智能和高效。谈得很多,让我们一起潜入。我们将一如既往地尝试并采取最好的方法。 什么是高级开发人员?作为一个可以使用十种不同编程语言编写代码并构建了自己版本的多语言编程人员,并不会让您成为高级开发人员(尽管您非常有才华)。这是因为高级开发人员是为公司带来增量利益的人员。它是一个能够让周围的人变得更好,并且能够长期愿景,实现并持续创造商业价值的人。您可以了解全球所有功能强大的编程技术,但如果您无法与团队沟通,或者无法专注于为客户提供实际价值,则您不是高级开发人员。这是重要的一点:你为贵公司/创业/企业带来了什么价值,如果你是为数不多的能为您的公司或企业带来数量级(有些人喜欢10倍的想法)价值的人之一,那么你是一位高级开发人员。高级开发人员不仅仅是另一个职位,而是能够利用您的经验为利益相关方提供真正的利益。 **我如何成为一个高级程序员?得到它。**这是你们所有人一直在等待的部分(或者我想象的是......也许没人读这个......在这种情况下,我会一直跟自己说话)。让我们深入了解一下,看看我们是否能够完成所有事情。按照以下资源,花一些时间了解每个主题。如果你能够积极研究下面的技能,你将远远领先于其他任何人。我把这称为开发者边缘:在一个领域总会有比你更有经验的人,但是你可以更聪明地工作,并以更有效的方式积累不同的技能组合,让你分开。这不仅使你成为一个更好的开发者,它还增加了你的整体幸福感,因为你正在为人们提供真正的价值。 学习中经常被忽视的一个方面是,你需要专注于一件事而专注于一件事。然而,这不是生活的方式。生活中非常罕见,你只需要一种技能。特别是在像技术领域发生变化的领域(谁知道机器学习工程师将在5年内完成什么?),您需要拥有多种可转换技能,这将转化为适应性。 这些是您需要被视为高级开发人员的6项核心技能:**1.技术技能** 这通常是大多数人想到的第一个技巧。希望通过这一点你相信它是一个更大的馅饼的一小部分。不要误解我的意思,你确实需要这个技能,而且你不能伪造它。然而,你可以聪明地关注你关注的内容。高级开发人员花时间了解Why的技术。为什么这个问题存在?为什么这个框架存在?这个图书馆解决什么问题?作为一名开发人员,您需要对所有有利于开发生命周期的工具和想法有所了解,并选择在项目中获得最大利益的工具。他们没有专注于这个超级奇特的测试框架的每一个新版本功能,而是试图为公司解决实际问题时专注于每个测试框架的优缺点。他们会问“我们的持续过程中可以改进哪些方面以提供更好的产品?” 他们也明白事情是如何连接的。为了开始这样思考,思维导图是一个很好的熟悉工具。它本质上是一种工具,可以用来将学习推向更高层次。思维导图帮助你的大脑在不同的想法和技术之间建立联系。 举个例子:如果我是一个iOS开发,一旦掌握了行业中的工具和技术,就需要制定产品在扩展时面临哪些问题的思路图,以及何时过早优化是一件坏事。通过在上述所有方面掌握这种关系,您可以通过广泛的视角而不是狭隘的焦点,将公司的资源集中在最重要的事情上。 如果你是从训练营走出来的,或者你没有计算机科学学位,那么你需要开始学习数据结构,算法和其他计算机科学主题。为什么?因为尽管框架和技术发生了变化,但计算机科学的主要原则(大部分)保持不变。通过理解这些更高层次的主题,您可以再次看到,大多数软件问题和良好实践在不同的语言和时间中通常是不变的。这本书(Rob Conery)和这本书(Gayle Laakmann McDowell)可能是我发现提升你的技能的最好工具。虽然它们只是表面上的,但它将为今后的学习奠定基础。 开始收听软件工程日报等播客,这样您就可以了解整个行业的当前问题和未来前景。 最后,阅读这篇文章从纯粹技术角度来看部分技巧。 2.团队技能 这是一个经常被忽视的技巧。你如何与团队成员合作?你是否对PR评论感到愤怒和意见,并对有其做出贡献?或者你是否体贴,合作和鼓励你的团队成员?高级开发人员没有大的自负。他们知道他们很好,不需要向他人证明自己。他们编写干净简单的代码,而不是编写代码来炫耀其他团队成员无法读懂的技能。他们愿意帮助别人,当他们不知道某事时,他们愿意提问。 这就是情商出现的地方。社会心理学是提高这种技能的重要工具,没有什么比“ 如何赢得朋友和影响力的人”更好。记住:你如何能让你身边的人变得更好?如果你的团队中有5人,那么1 + 1 + 1 + 1 + 1应该大于5,因为你可以让你身边的人变得更好(现在我从数学纯粹主义者那里得到邪恶的眼睛......)。 如果你是任何一个项目的参与者,或者你参与的任何一个团队,那么你就能够与你的队友相处并让其他人一起工作,你已经远远领先于大多数人。您还可以让经理,主管,Scrum大师和CTO的生活更轻松。那些是得到晋升的人,更重要的是那些是为公司提供最大价值的人。 3.客户/用户技能 您是否能够与客户或用户交谈,并清楚地了解他们的需求?当他们向你提出一些建议时,你是否了解他们面临的问题?高级开发人员是一个可以独立与客户并可以成为优秀听众的人,然后就最佳步骤向前迈进提供建议。他们在组建关系方面非常出色,他们不会将意见推给客户。他们明白,目标是一个非零和游戏,客户和开发者都可以从互动中获益。 最后,您需要能够向非技术人员解释复杂的编程概念。通过观看大神分解复杂的话题开始开发这项技能。虽然他们正在教练困难的话题,但你可以观察他们之间的一些共同点。 4.成长技巧 高级开发人员每天都在学习新的东西。这并不意味着他们每天花14小时坐在电脑前阅读文章。他们比这更有效率。他们一直在寻找与其他开发人员交谈,提出问题或探索新主题。他们不专注于一个技能组合。在做一件事情时,你可以成为世界上最好的人,但是如果你不知道整个范围或者对你解决什么问题有一个大概的了解,那么你就不再是最好的了。 他们有一个成长的思维模式(相信智力是可塑的),他们相信有意识的练习。他们明白,学习一切都是不可能的,他们选择把时间花在他们喜欢的事情和最重要的事情上。 他们不只是说“哦,我讨厌这个!”大多数时候,说这些东西的人会因为不完全理解而憎恨某些东西。例如,不要只说“我讨厌Switf。只有部分的开发人员使用Switf“并且声名显赫。高级开发人员说,“Switf在iOS开发方面发挥了重要作用”。他们的观点可以改变,因为他们喜欢从别人那里学习,并且在他们决定“憎恨”某些事物之前尝试新的概念。 5.销售/面试技巧 高级开发人员能够让自己担任高级职位,因为他们能够与做出这些决策的人进行交流和销售。你能够看到你的雇主或企业的需求,并且你可以向他们灌输你是解决问题的人的信心。你有信心,但谦虚。高级开发人员也有足够的信心承担这些角色,并能够承受压力。他们也知道,如果你永远不会问答案总是否定的,那么他们会要求晋升或挑战他们的角色,因为他们认为他们是适合工作的人选。虽然销售和谈判对某些人来说可能会很不起眼,但这是您需要掌握的宝贵技能。有一篇很棒的文章。虽然它谈到薪酬谈判,但其中一些原则可以应用于其他情况。 6.社区技能 高级开发人员为开发者社区做出贡献 ,无论是做技术讲座,在聚会上发言,为开源贡献,甚至写文章。他们是与行业共享信息的人。他们并不是只关在工作空间的封闭盒子里,而是和其他社区的人交流,让他们拓宽视野。这有点像旅行:你遇到并且交谈的文化越多,你越了解人与人之间的相似和不同之处,并且越是开始欣赏它。 **最后一件事如果你能够积极工作上述技巧,你会立即充满激情。**我已经从这个列表中留下了最重要的主题:你喜欢你在做什么。 如果你不喜欢每天学习有关计算机科学和软件开发的知识,那么你永远不会成为高级开发人员,因为从长远来看,你不会有更好的动力。如果你是这么好,他们不能忽略你,你明白激情已被过度炒作。真正的激情来自你掌握了一项技能。你已经努力成为精通领域的领导者。你已经掌握了这些技能,现在你提供给他人的尊重和好处促使你变得越来越好,从而获得更多这样的好感受。你就是这样开发的 你对工作的热情。 结论 如果你已经学会了编码,并且正在寻找职业生涯的下一步,那么你需要以不同的方式思考。你怎么能够脱颖而出?你怎样才能成长?你如何能够帮助人们解决实际问题并提供价值?你不做简单的事情就会成为高级开发人员。你做的事情,推动和挑战你的头脑和舒适水平。你要学习,并且要一天一天地做出适应,就像你第一次写了第一段代码一样。每一步都很小,但是在一生中,一小步就会变成几公里。 永远不要停止阅读,永远不要停止学习,但也要知道什么是你宝贵的时间,什么不宝贵。 作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要这是一个我的iOS交流群:638302184,不管你是小白还是大牛欢迎入驻 ,分享BAT,阿里面试题、面试经验,讨论技术, 大家一起交流学习成长!

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Spring

Spring

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

Sublime Text

Sublime Text

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

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册