IT人永远不老,老程序员价值何在?
IT人永远不老?做梦,怎么可能。无论你现在是多么风华正茂,青春洋溢,终有成熟、老去的那天。但是,人的身体可以变老,人的精神面貌、心态却真的可以“归来仍是少年”,只要你心不老,保持着对生活、对世界的好奇心和进取心,眼光和状态就会不同。最近一则新闻刺痛了我的神经,中兴公司的某大叔级开发人员被公司逼迫辞职,最后发生惨剧。再联想起年初的“华为-35岁辞退”事件,我很想在这里聊几句。首先,你要对资本的残酷性有一定认识,很早就要有心理准备。当它需要你的时候,鼓吹“公司就是你的家”,你可要明白这是忽悠,别真的信了–哪里有这回事。公司不是你的家,如果需要,他可以随时裁掉你,解除雇佣关系,毫不留情。人力与资本之间,实质是合作关系。既然是合作,当然可以一拍两散。心里不把公司当成家,把它当作随时可以走开的工作场所,你就不会真的无法忍受、想不开了。但是,这跟工作要认真敬业并不矛盾,人可以很职业很负责,工作做的很好。真要到最后一刻,属于自己的利益要积极争取,实在没办法也不要太计较身外之物,人要豁达。为什么要“清理老程序员”?有公
视频演讲: 基于 AWS 的 Spring Cloud 微服务实践
概要Java在企业中有着非常广泛的应用基础,随着云计算技术的发展,云原生Java应用被越来越多的客户接受并积极运用在业务上;在本演讲中,我们会跟大家一起分享在AWS平台上基于SpringCloud微服务一些实践,比如如何与AWS云服务集成,持续集成与发布,微服务中的数据架构等等。个人简介薛军,AWS解决方案架构师,获得AWS解决方案架构师专业级认证和DevOps工程师专业级认证。负责基于AWS的云计算方案架构的咨询和设计,同时致力于AWS云服务在国内的应用和推广,在互联网金融、保险、企业混合IT、微服务等方面有着丰富的实践经验。在加入AWS之前已有接近10年的软件开发管理、企业IT咨询和实施工作经验。QCon是由InfoQ主办的全球顶级技术盛会,每年在伦敦、北京、东京、纽约、圣保罗、杭州、旧金山召开。自2007年3月份首次举办以来,已经有包括传统制造、金融、电信、互联网、航空航天等领域的近万名架构师、项目经理、团队领导者和高级开发人员参加过QCon大会。
为什么说 Service Mesh 是微服务发展到今天的必然产物?
过去三年里,架构领域最火的方向非微服务莫属。微服务的好处显而易见,它本身所具备的可扩展性、可升级性、易维护性、故障和资源的隔离性等诸多特性使得产品的生产研发效率大大提高。同时,基于微服务架构设计风格,研发人员可以构建出原生对于“云”具备超高友好度的系统,让产品的持续集成与发布变得更为便捷。但是,世界上没有完美无缺的事物,微服务也是一样。著名软件大师,被认为是十大软件架构师之一的ChrisRichardson曾一针见血地指出:“微服务应用是分布式系统,由此会带来固有的复杂性。开发者需要在RPC或者消息传递之间选择并完成进程间通讯机制。此外,他们必须写代码来处理消息传递中速度过慢或者不可用等局部失效问题。”在云原生模型里,一个应用可以由数百个服务组成,每个服务可能有数千个实例,而每个实例可能会持续地发生变化。这种情况下,服务间通信不仅异常复杂,而且也是运行时行为的基础。管理好服务间通信对于保证端到端的性能和可靠性来说是无疑是非常重要的。以上种种复杂局面便催生了服务间通信层的出现,这个层既不会与应用程序的代码耦合,又能捕捉到底
[译] 软件架构师之路
大码农导读:程序员的职业发展是一个很值得我们深入探讨的问题,因为它关系到程序员的未来。程序员的发展路线其实有很多,你选择了合适自己的路了吗?在你选择要去哪里的时候,想好该怎么达到目的地吗?你是否曾经想过程序员的职业生涯应该怎样发展?程序员到了45岁之后会怎样?你见过45岁以上的程序员吗?我倒是见过不少,他们很多都是大神级的人物,有一些甚至还见过穿卡机。程序员的职业发展路线不外乎这么几种:第一种最直接,就是在你所处的领域内不断成长,从初级程序员成长为中级程序员,再从中级程序员成长为高级程序员,然后是主力程序员。进入新的技术领域。比如,在iOS和安卓崛起的那些年,有很多开发者转向了移动开发。成为管理者。在程序员眼里,这个行业很缺乏有竞争力的管理者。真正聪明的管理者太少了,如果他们有技术背景,就能够跟程序员打成一片。成为软件架构师,这是本文的重点。转行,离开IT行业。有些人会选择这条路,其实只要你想清楚了,做什么都不晚。在过去八年,我从JavaEE开发转到iOS开发,然后成为项目组长。我管理过各种各样的开发团队,包括A
服务读写分离架构,绝不推荐
缘起在《服务读写分离(读服务,写服务),是否可行?》中,对背景做了交代,互联网架构设计上,数据库可以读写分离,服务能否读写分离呢?下面是两种常见的“服务读写分离”架构:一、单纯服务读写分离如上图,服务化之后:业务方通过RPC分别调用读服务和写服务服务层分为读服务与写服务底层是高可用的数据库集群二、服务和数据库同时读写分离读服务与写服务读写的是不同的数据库,如上图:写服务访问写库读服务访问读库写库与读库是一个组从同步的集群。这种架构设计好还是不好,网友进行了激烈的讨论,感兴趣的同学可以看下《服务读写分离(读服务,写服务),是否可行?》的评论,这里,分享下个人的观点。三、先说结论楼主旗帜鲜明的反对服务区分读写分离。四、小理由调用方对同一个基础服务,某一个RPC接口,在读服务,还是写服务,容易困惑对于同一个基础服务,服务数量翻倍了,运维更加复杂五、强理由一般来说,垂直拆分,是按照“子业务”维度进行拆分,而不是按照“读写”维度
如何评价清华大学开设《自动驾驶》课程?
本文由【AI前线】原创,原文链接:t.cn/RTEQOGK哪一刻会让你觉得自动驾驶能成为现实?ElonMusk要做的事情,总是让人感觉太遥远,实现起来有着巨大的困难和障碍。但自2018年起,奥迪将从A8开始,逐渐在量产车型上推广自动驾驶功能的相关技术。百度也宣布将于明年量产无人车。自动驾驶技术在短短几年内,就从实验室走向了量产商业化。全球共有几百家做自动驾驶的企业,有240多家初创企业也都不同程度涉足该行业。越是最前沿的技术,实际上进步的速度越快。昨天,北京率先推出地方性的自动驾驶测试法规,这也是国内首次为自动驾驶测试提出了相关规定。至于李彦宏那张罚单该不该,请参看这次颁布的法规细则。行业繁荣的背后,学界也紧紧跟随。清华大学交叉信息院将开设《自动驾驶》课程,由从清华姚班毕业并创立了自动驾驶公司Pony.ai的楼天城,携其公司一众专家授课,课时定为八周。本课程覆盖自动驾驶的整体技术路线和主要模块的设计与算法,包括:1.绪论:自动驾驶系统的整体架构,自动驾驶产业的发展现状与展望;
关于iOS-SDK那些事
架构参数设置.png依赖关系
mysql分表的3种方法
推荐阅读微服务:springboot系列教程学习源码:Javaweb练手项目源码下载调优:十五篇好文回顾面试笔试:面试笔试整理系列一,先说一下为什么要分表当一张的数据达到几百万时,你查询一次所花的时间会变多,如果有联合查询的话,我想有可能会死在那儿了。分表的目的就在于此,减小数据库的负担,缩短查询时间。根据个人经验,mysql执行一个sql的过程如下:1、接收到sql;2、把sql放到排队队列中;3、执行sql;4、返回执行结果。在这个执行过程中最花时间在什么地方呢?第一,是排队等待的时间;第二,sql的执行时间。其实这二个是一回事,等待的同时,肯定有sql在执行。所以我们要缩短sql的执行时间。mysql中有一种机制是表锁定和行锁定,为什么要出现这种机制,是为了保证数据的完整性。我举个例子来说吧,如果有两个sql都要修改同一张表的同一条数据,这个时候怎么办呢,是不是两个sql都可以同时修改这条数据呢?很显然mysql对这种情况的处理是,一种是表锁定(myi
阿里云上轻松实现SQL Server AlwaysOn高可用性
摘要:使用MSSQLServer的用户,如何在阿里云上实现改造,成为云上Alwayson的高可用架构呢?还有早期已经在线下实现Alwayson高可用性架构,那么在不想改造,并且云上暂时不提供alwayson高可用性架构的服务和产品的情况下,那如何平迁到云上呢?2017年12月19日,火爆京城运维圈的TechInsight的<企业级数据库最佳实战>论坛上,来自阿里云服务团队的解决方案架构师正博,为大家分享了一个最佳实践的细节。使用MSSQLServer的用户,如何在阿里云上实现改造,成为云上Alwayson的高可用架构呢?还有早期已经在线下实现Alwayson高可用性架构,那么在不想改造,并且云上暂时不提供alwayson高可用性架构的服务和产品的情况下,那如何平迁到云上呢?2017年12月19日,火爆京城运维圈的TechInsight的<企业级数据库最佳实战>论坛上,来自阿里云服务团队的解决方案架构师正博,为大家分享了一个最佳实践的细节。最佳实践的架构如下图:该案例为某地产公司云上运行架构。另外一些
SpringBoot+SpringSecurity处理Ajax登录请求
最近在项目中遇到了这样一个问题:前后端分离,前端用Vue来做,所有的数据请求都使用vue-resource,没有使用表单,因此数据交互都是使用JSON,后台使用SpringBoot,权限验证使用了SpringSecurity,因为之前用SpringSecurity都是处理页面的,这次单纯处理Ajax请求,因此记录下遇到的一些问题。这里的解决方案不仅适用于Ajax请求,也可以解决移动端请求验证。创建工程首先我们需要创建一个SpringBoot工程,创建时需要引入Web、SpringSecurity、MySQL和MyBatis(数据库框架其实随意,我这里使用MyBatis),创建好之后,依赖文件如下:
DoraCMS v2.0.4 发布,Node.js CMS 内容管理框架
可能是2017年内的最后一个版本,近期DoraCMS更新到2.0.4,主要对样式做了变更,也修复了一些bug。具体如下1、添加系统支持redis缓存,通过开关控制,并添加通过redis缓存数据中间件。要知道redis在存储性能方面MongoDB要好很多(主要存储session数据)。2、重新整理了样式,组件样式全部单独提取,提高可维护性。3、文档详情页添加了“喜欢”功能,需要在mongodb执行脚本。db.contents.update({},{"$set":{"likeUserIds”:[]}},{multi:true})4、修复了某些场景下批量删除留言异常的bug。5、添加了二维码分享功能。6、添加了回到顶部按钮。7、优化了包括最新文档、近期文档、推荐文档等模块的代码结构。8、优化了用户中心的界面和交互。9、修复页面跳转后滚动条不置顶的问题。10、修复了某些场景下通过标签查询,分页异常的问题。11、优化了cms在移动端的显示。12、修复了一些明显bug。更新方法:1、che
Angular5.1以及更多可用功能
我们很高兴的宣布Angular5.1版本发布了。这是一个小版本,包含几个小的功能和bug修复。我们也发布了AngularCli的1.6版本,以及AngularMaterial的第一个稳定版本。新特性AngularMaterial和CDK稳定版CLI中支持ServiceWorker在CLI中改进了Universal和AppShell的支持改进了装饰器的错误信息支持TypeScript2.5有关功能和bug修复的完整列表,请参阅Angular,Material和CLI的更新日志。AngularMaterial和CDK稳定版在发布了11个alpha版本,12个beta版本以及3个候选版本之后,我们很高兴现在能够标记AngularMaterial和AngularCDK的5.0.0的稳定版。基于Google的MaterialDesign视觉设计语言,AngularMaterial提供了30个UI组件给你的Angular应用。组合使用AngularCDK,AngularCDK(组件开发工具包)提供了一组构建模块,帮
实现一个页面中两个zTree的联动
效果图代码:functionlinkageTreeClick(event,treeId,treeNode){varparam=treeNode.id;//获得点击树的IDvarotherTree=$.fn.zTree.getZTreeObj(treeId);//选取树的所有节点varnodes=otherTree.getNodesByParam(param);//遍历树的节点for(variinnodes){if(param==nodes[i].id){otherTree.selectNode(nodes[i]);return;}}}其中treeId为你想与之联动的树的ID,将该方法在zTree的onclick方法中进行调用,根据自己情况,传入参数,然后实现联动。方法selectNode()参数为树的节点,作用为:使该节点被选中。
angular UI-Router路由
angularUI-Router路由UI-Router被认为是AngularUI为开发者提供的最实用的一个模块。开发者可以创建嵌套分层的视图、在同一个页面使用多个视图、让多个视图控制某个视图等更多的功能。即使是非常复杂的web应用,UI-Router也可以极佳地驾驭。1、ui-sref指令链接到特定状态
二叉树的创建及遍历(JavaScript实现)
图一只有一个根结点,而图2和图5除叶子节点外都有两个节点,图3和图4则是比较极端的情况,只有左子树/右子树,网上很多人都把它叫做退化成为线性表实现代码通常二叉树都是用类的形式来创建的,虽然javscript现在也有类了,但是为了熟悉一下原型,这里还是用原型来模拟类的行为。以下是实现的代码:functionNode(){this.data=nullthis.leftChild=nullthis.rightChild=null}functionbinaryTree(){this.root=null}可以看到这里定义了两个类,一个是Node类,另一个是binaryTree类。其中一个结点含有数据域,和它的左指针以及右指针,而一颗树则含有结点包含的一切属性,以及一个根节点。这里可以看做树是结点的子类,下面则利用原型来实现它们之间的继承关系:binaryTree.prototype={constructor:Node,insertNode:function(data){if(this.ro
你所不知的Webpack-多种配置方法
除了通过最常见的导出一个Object来描述Webpack所需的配置外,还有其它更灵活的方式,以简化不同场景的配置。下面来一一介绍它们。导出一个Function在大多数时候你需要从同一份源代码中构建出多份代码,例如一份用于开发时,一份用于发布到线上。如果采用导出一个Object来描述Webpack所需的配置的方法,需要写量个文件。一个用于开发环境,一个用于线上环境。再在启动时通过webpack--configwebpack.config.js指定使用哪个配置文件。采用导出一个Function的方式,能通过JavaScript灵活的控制配置,做到只用写一个配置文件就能完成以上要求。导出一个Function的使用方式如下:constpath=require('path');constUglifyJsPlugin=require('webpack/lib/optimize/UglifyJsPlugin');module.exports=function(env={},
JavaScript之多小球非对心弹性碰撞
在学习JavaScript的时候,看到一个练习事例,就想到能不能做成类似Windows屏幕保护气泡那种效果,经过不断思考尝试,最后做出的效果如下图:思路其实上面的那种效果就是模拟理想物理环境下的多个小球非对心碰撞(对心碰撞是其特殊情况),所谓理想物理情况就是没有外力作用的封闭系统,内部遵循动量守恒定律和能量守恒定律。假设小球A和小球B的质量分别为和,初始速度分别为和,碰撞后的速度分别为'和',两个小球的碰撞瞬间的状态如下图:其中ȳ
underscore 系列之实现一个模板引擎(上)
前言underscore提供了模板引擎的功能,举个例子:vartpl="hello:<%=name%>";varcompiled=_.template(tpl);compiled({name:'Kevin'});//"hello:Kevin"感觉好像没有什么强大的地方,再来举个例子:在HTML文件中:
css3的动画特效--元素旋转
开发中,视觉要你实现一个元素的旋转问题,比如说如下图所示:思路:首先动画动效肯定离不开anmimation动画。和transition动画一样,animation动画也是CSS3动画的一种,这类动画可以理解为是一种关键帧动画,它可以预先为动画设置多个节点,在每个节点中含有不同的状态属性,通过使用animation动画我们可以得到更为复杂的动画效果。注意:transition是为页面元素设置某个需要产生动画效果的属性,如宽度(width)、高度(height)、透明度(opacity),甚至3D旋转等,并使得这些属性的值在发生变化时产生相应的过渡效果。我们常常在制作类似按钮鼠标经过和移出效果时使用transition。通俗地说,transition是简化版的CSS3动画,而animation则是强化版的CSS3动画。在日常开发中transition的使用频率更高一些,我们往往只有在遇到transition无法解决的问题时,才会转而使用animation。1、dom元素准备准备一个span元素作为图标的载体(也可以使用其
jQuery实现贪吃蛇游戏
贪吃蛇的游戏相信大家都玩过。在那个水果机还没有流行,人手一部诺基亚的时代,贪吃蛇是手机中的必备游戏。笔者闲的无聊的时候就拿出手机来玩上几局,挑战一下自己的记录。后来上大学了,用c语言做过贪吃蛇的游戏,不过主要是通过函数来控制(PS:现在让我看代码都看不懂(⊙﹏⊙))。现在学习前端框架之后,通过jQuery来实现一个贪吃蛇的游戏效果,虽然游戏界面比(bu)较(ren)简(zhi)陋(shi),但是主要学习一下游戏中面向对象和由局部到整体的思想。设计思想在开始写代码前首先让我们来构思一下整体游戏的实现过程:需要的对象首先既然是贪吃蛇,那么游戏中肯定要涉及到两个对象,一个是蛇的对象,另一个是食物的对象。食物对象肯定要有一个属性就是食物的坐标点,蛇对象有一个属性是一个数组,用来存放蛇身体所有的坐标点。如何移动另外全局需要有一个定时器来周期性的移动蛇的身体。由于蛇的身体弯弯曲曲有各种不同的形状,因此我们只处理蛇的头部和尾部,每次移动都根据移动的方向的不同来添加新的头部,再把尾部擦去,看起来就像蛇在向前爬行一样。方向控