视频演讲: 从程序员到架构师,从架构师到 CTO
概要程序员、架构师、CTO,这个可能是很多技术人员为自己规划的职业发展路径,然而这三个职位各有各自的侧重点和思考方式,其衔接并非自然而然就能发生,而是需要有本质的飞跃。此次将分享从业15年一路走来,依次经历的这三个阶段,给大家分享一下其中的心路历程,如何做到眼界和技能的螺旋式上升。个人简介洪强宁,爱因互动创始人&CTO,EGO会员,11年互联网从业经验,商用对话机器人创业中。前豆瓣首席架构师,前宜信大数据创新中心首席架构师,资深Python开发者,为中国Python用户组(CPUG)的创立者之一。豆瓣网首名全职员工,负责系统架构,经历了豆瓣从日PV十万到数亿的过程,积累了深厚的大规模网站架构经验。曾主导豆瓣内部PaaS系统DAE和宜信金融容器云Lain的建设,有丰富的容器云和微服务架构经验。目前主要关注方向在聊天机器人(chatbot)、云计算、容器技术、微服务、安全技术上。全球架构师峰会(International-Architect--Summit,下简称ArchSummit)是由I
CC视频CTO栗伟:CDN系统架构及CC视频应用实践
北京分会会员、CC视频CTO栗伟获邀作为EGO线上分享第三季嘉宾,与大家交流了CDN系统架构及CC视频的应用实践。技术出身的栗伟曾在中科院计算机技术研究所和蓝讯公司从事多年网络存储和CDN技术等工作,2014年加入CC视频,在CDN和视频编解码技术方向颇多建树。作为一站式场景化视频解决方案服务商,CC视频在经历12年企业级视频云服务的探索,已经拥有了视频云点播、云直播、云加速、云互动的完整产品线,为整个视频领域提供全方位服务。在线教育领域的大型企业大多都是CC视频的重度用户。凭借领先的云计算技术和专业的视频处理经验,CC视频已经积累了包括新东方、好未来华图、新东方、达内、尚德、清华大学、万国、学堂在线、宝宝树、好医生、海马玩、蚂蜂窝、SMG集团、36氪、财新网、凤凰网、上海通用、唱吧、广联达等18000+众多知名企事业单位的首选合作品牌。作为CDN架构的专家,栗伟首先向大家介绍了基于DNS解析的CDN工作原理。通过利用DNS的CNAME特性和CDN的回源原理,CDN厂商实现了用户流量的调度,同时也解决了内容缓存和源站保
“加密”对医疗行业而言是一把双刃剑
医疗行业必须认真对待安全和隐私问题。他们会在提供救生医疗护理的同时,采集并保存个人健康信息(PHI)和财务信息。如何保护此信息以及管理该信息的网络,是医疗行业IT企业面临的最大问题之一。SSL/TLS技术可以帮助医院、医疗机构和医护人员保护敏感的个人信息。医疗行业的IT企业需要通过两种不同方式利用加密技术来保护IT基础架构的安全。首先,他们必须保护在网络中传输的数据的安全。接下来,他们还需要保护保存并发送敏感数据的网络基础架构的安全。HedyLamarr是正确的1941年,女星HedyLamarr获得了一项专利,描述了一种可以混淆无线信号的方法。该方法的目的是防止对于控制鱼雷的无线电信号的干扰和追踪。这被认定为是无线加密以及随后的网络加密的开端。SSL/TLS技术为网络通信提供了与Hedy无线电通信相同的优势(尽管实际机制并不相同)。对传输中的个人数据进行SSL/TLS加密,对于保持信息的私密性和完整性而言至关重要。加密使用复杂的数学算法来混淆数据,如果没有正确的密钥或海量计算能力,数据解密几乎很难进行,因此加密就提供
MySQL等传统关系型数据库弱爆了!GPU数据库才是未来趋势!
数据库市场似乎已经很久没有足以撼动MySQL地位的数据库出现了,我们习惯于看到MySQL占据各大数据库排行榜的首位。MySQL确实是很棒的一款开源数据库,也是目前应用最广泛的数据库。甚至不少业内人士都认为未来属于MySQL,但事实果真如此吗?为了探讨这个问题,本文特意邀请了SQreamTechnologies首席执行官AmiGal,他的观点是GPU数据库才是未来的趋势,来看看他的理由是什么吧!Ami拥有超过20年的技术和创业经验,技术背景深厚,曾担任MagicSoftware(MGIC)业务发展副总裁,在高性能和复杂数据集成环境中创造了新的增长引擎。他有这个想法的原因很简单:GPU可以远高于CPU的速度读取和处理数据,每年的性能提高速度大约为40%左右(等于数据增长率)。目前,在几个核心领域(如深度学习,虚拟现实和自动驾驶汽车)之外的计算机领域,图形处理单元(GPU)的功能仍然相对未知。事实上,对于大多数人来说,使用GPU进行非图形计算的想法也是前所未闻的。然而,这种想法马上就可以被改变,一切从GPU数据库开
JS Native:覆盖阿里几乎所有产品的全新开发模式,到底有何高明之处(一)?
现在概念上的APP诞生在Apple推出iOS,Google推出Android之时,从这时候开始,便有了App开发工程师这个职位,比如iOS工程师、Android工程师等等。最开始的App开发只有原生开发这个概念,但自从H5广泛流行后,一种效率更高的开发模式Hybrid应运而生,它就是“Hybrid模式”,时至今日,Hybrid模式也不是那么的“先进”,“潮流”了,伴随着“React-Native”、“Weex”等新型技术的崛起,也给我们带了全新的“JS-Native模式”。那么这个大热的“JS-Native”到底是什么,就让我们通过本文来一探究竟吧。【JSNative是什么】Facebook当初在深入研究Hybrid开发后,觉得这种模式有先天的缺陷,所以果断放弃,转而自行研究,后来推出了自己的“ReactNative”方案,不同于H5,也不同于原生,更像是用JS写出原生应用。ReactNative可以认为是JSNative开发模式的开山鼻祖,而后来者WEEX和NativeScript更被认为是Rea
CodeMirror 5.33.0 发布,在线代码编辑器
CodeMirror5.33.0已发布,该版本的更新包含Bug修复和新特性的引入。CodeMirror是一款“OnlineSourceEditor”,基于Javascript,短小精悍,实时在线代码高亮显示,它不是某个富文本编辑器的附属产品,而是许多大名鼎鼎的在线代码编辑器的基础库。5.33.0(2017-12-21)Bug修复lintaddon:使升级更有效率cssmode:该模式现在完全不区分大小写continuelistaddon:修复了以前版本中引入的无序列表的中断处理的问题swiftandscalamodes:支持嵌套块注释mllikemode:改进对OCaml的支持sublimebindings:使用适当的键绑定addCursorToNextLine和addCursorToPrevLine新特性jsxmode:支持JSX片段closetagaddon:添加一个禁用自动缩进的选项详细更新内容请查看完整的更新日志。
Celery(四)定时任务
要定时或者周期性的执行任务,可以使用linux的crontab。Celery也提供了类似的PeriodicTasks功能。CelerybeatCelery使用celerybeat作为任务调度器,周期性的启动任务。需要执行的任务默认是在beat_schedule配置选项中设置的。使用django-celery-beat时,也可以使用数据库存储。需要保证同一时间只有一个任务调度器在运行,否则会重复的执行任务。TimeZones既然是任务与时间有关,那么时区设置是很重要的。Celery默认使用UTC时区,要改变默认时区,可以配置:timezone=Asia/Shanghai'在django项目中使用celery时,celery也可以使用setting的TIME_ZONE时区设置。使用默认的任务调度器时,celery会自动识别时区的改动,然后重置任务调度。使用其它任务调度时,需要手动重置。比如,使用django-celery-beat时:$pythonmanage.pyshell>>>fromdjce
Android Handler消息机制实现原理
一、消息机制流程简介在应用启动的时候,会执行程序的入口函数main(),main()里面会创建一个Looper对象,然后通过这个Looper对象开启一个死循环,这个循环的工作是,不断的从消息队列MessageQueue里面取出消息即Message对象,并处理。然后看下面两个问题:循环拿到一个消息之后,如何处理?是通过在Looper的循环里调用Handler的dispatchMessage()方法去处理的,而dispatchMessage()方法里面会调用handleMessage()方法,handleMessage()就是平时使用Handler时重写的方法,所以最终如何处理消息由使用Handler的开发者决定。MessageQueue里的消息从哪来?使用Handler的开发者通过调用sendMessage()方法将消息加入到MessageQueue里面。上面就是Android中消息机制的一个整体流程,也是“Android中Handler,Looper,MessageQueue,Message有什么关系?”的答案。通过上面的流程可以发现Ha
程序员故事:没有免费的午餐
捕获.JPG我们总想着花最少的钱办最多的事情,这本是一件很正确的观念,但如果花的钱明显少到不合理,那办出的事情也就有可能会狠打几个折扣。所谓没有免费的午餐,或许就是如此了。那是刚参加工作的前几个年头,公司用户的需求越来越多,软件要求也越来越复杂,我们那几个内部程序员已经明显不够用,花钱请外面的软件公司来帮忙做软件已经成为刻不容缓的一件事情。很荣幸,我成为部门成立以来第一个真正意义上的项目经理。那是公司生产部的一个软件项目,主要用来对制造产品所需的一些材料和配件信息进行管理,生产部的李部长和我们信息部的赵部长关系很熟,再加上这个项目的规模比较适中,所以两位领导一拍即合,决定拿它试水软件外包。外请的软件公司在我们业内口碑不错,带队的周经理也帮其他单位做过类似软件,所以大家也都觉得这是一个注定要成功的项目。周经理是个技术型的程序员,戴着一副黑框眼镜,每天上下班都会背着一个双肩包,里面装着笔记本电脑,非常典型的程序员形象。而我也是刚从程序员向项目经理的方向转变。初步了解用户的需求之后,我们两个人从技术角度分析了一下,觉得和之前在其他单位做
程序员的四种境界
IT行业可谓现在的热门行业,程序员也是很多人羡慕的工作。薪水高,不用东跑西颠,敲敲键盘,看看屏幕,一切工作全都搞定,轻松而方便。果真如此吗?不尽然,实际上,程序员的职业生涯也是一个求道的过程,需要不断的提高和学习,IT行业知识更新之快,常让程序员们有随时掉队的危险,无一日不战战兢兢,不敢稍有懈怠。程序员的职业生涯也可分为四个阶段,初级程序员(菜鸟)、高级程序员(熟练工)、系统程序员(高手)、软件大师(大师),其作品也经历四种境界:可以运行的程序健壮、高效的程序结构优美的程序思想深邃的程序1第一阶段的程序员都是编写可以运行的程序,很多从“HelloWorld”开始,当第一次按照教科书上的步骤,将源文件编辑完后,编译、连接、运行,在屏幕上显示出“HelloWorld”时,心中的激动一点也不亚于阿里巴巴打开了宝库的大门。初级程序员的目标一般是让程序能运行起来,他们迷惑于库函数的众多,不知道该用那一个,他们还要学习基本的语法,以使程序编译通过。初级程序员一般不会考虑设计模式、软件结构等问题。程序员菜
MySQL 主从同步配置
SHOWMASTERSTATUS;1.5.从服务器配置文件my.ini配置(slave)[mysqld]#服务器idserver-id=2#要从主机同步的库replicate-do-db=shenxianyun_consolereplicate-do-db=shenxianyun_portalreplicate-do-db=test#配置中继日志(一般可以不用)#relay_log=mysql-relay-bin#slave将复制事件写进自己的二进制日志(后面会看到它的用处)。#log_slave_updates=1#它防止改变数据(除了特殊的线程)慎重使用#read_only=1server_id是必须的,而且唯一。slave没有必要开启二进制日志,但是在一些情况下,必须设置,例如,如果slave为其它slave的master,必须设置bin_log。在这里,我们开启了二进制日志,而且显示的命名(默认名称为hostname,但是,如果hostname改变则会出现问题)。
函数对象、函数嵌套、名称空间与作用域、装饰器
三函数分类#1、内置函数为了方便我们的开发,针对一些简单的功能,python解释器已经为我们定义好了的函数即内置函数。对于内置函数,我们可以拿来就用而无需事先定义,如len(),sum(),max()ps:我们将会在最后详细介绍常用的内置函数。#2、自定义函数很明显内置函数所能提供的功能是有限的,这就需要我们自己根据需求,事先定制好我们自己的函数来实现某种功能,以后,在遇到应用场景时,调用自定义的函数即可。例如二定义函数一如何自定义函数?#语法def函数名(参数1,参数2,参数3,...):'''注释'''函数体return返回的值#函数名要能反映其意义defauth(user:str,password:str)->int:'''authfunction:paramuser:用户名:parampassword:密码:return:认证结果'''ifuser=='egon'andpassword=='123':return1#print(auth.__annotations__)#{'
js面向对象
深拷贝:解决传址问题把对象使用JSON.stringify方法转变成json格式数据,然后在使用JSON.parse解析json字符串,这个看起来在做一些浪费时间的事情,但数据经过这样转变后,改变arr2的值,不会影响到arr的值。vararr2=JSON.parse(JSON.stringify(arr));三、工厂模式工厂模式:使用函数封装一个创建对象的接口,实例化对象。用于解决变量的污染。下面例子是工厂模式的一般写法;functionFactory(height){//obj人类;varobj={};obj.name="小明";obj.height=height;obj.age=20;obj.hobby=function(){console.log("我喜欢篮球");}returnobj;}varnewFactory=Factory("180cm");console.log(newFactory.height);newFactory.hobby();四、构造函数构造函数类似于类的概念,在es6还
easywebpack 3.5.0 新特性一览: dll工程化和多进程编译
首发于easywebpack写文章登录easywebpack3.5.0新特性一览:dll工程化和多进程编译sky8hoursago在3.5.0版本之前,项目大以后,webpack构建打包越来越慢,同时dll工程化构建也没有内置支持。虽然可以通过在easywebpack中添加newwebpack.DllPlugin()和webpack.DllReferencePlugin()方式实现dll方案,但使用起来还是很繁琐:因为需要先单独为dll添加webpack.config.js配置,然后先手动先构建dll,然后在页面里面配置dll的引用,最后再构建页面。easywebpack3.5.0从工程化的角度内置支持了。1easywebpack3.5.0特性一览entryinclude支持正则配置支持cssextracthotreload支持webpackdll配置和自动化构建,无需手动先构建dll,然后再构建页面简化commonsChunklib配置,无需在on
JaveScript简单数据类型(JS知识点归纳二)
JS中的简单数据类型有五种:-->string-->number-->boolean-->null-->undefined数据类型的检测:typeof语法:typeof数据;typeof(数据);1typeof100;//结果为number使用typeof获取的数据类型名是字符串类型1varnum=100;2varresult=typeofnum;//result此时保存的是变量str中数据的类型名3console.log(typeofresult);//"string"String类型1使用成对的""'',用于标识的引号是不会显示的,可以使用转义符(\)显示2强制转换数据.toString();varnum=100;console.log(num.toString());varresult=num.toString();console.log(num);console.log(resu
ChromeExtension那些事儿
ChromeExtension那些事儿2017-12-2200:21by猴子猿,...阅读,...评论,收藏,编辑ChromeExtension是什么呢?简而言之,就是Chrome扩展,它是基于Chrome浏览器的,我们可以理解它为一个独立运行在Chrome浏览器下的APP,当然核心编程语言就是JavaScript咯,然后结合HTML以及CSS来开发。重点是,这个“APP”功能强大,可以独自运行,亦可以与打开的网页、Chrome控制面板(DevTools)、第三方插件等等进行通信,且,Google允许ChromeExtension不必受限于跨域限制,结合以上种种优点,固,我们可以使用ChromeExtension,结合自身业务,开发出许多提高工作效率的工具。部署ChromeExtension也很简单,如下:好了,现在来听听属于ChromeExtension它的故事。
Angular 开发学习 00 – 序
现在开始一个新的系列——《Angular开发学习》。这个系列与之前的Qt完全不同,从C++切换到Web。其实豆子的工作一直是在Web方面,所以一直会说,Qt只是业余爱好。而现在终于会把工作的部分拿上来写一些文章。对于之前关心Qt的读者,可能跨度有些大,不过按照我的计划,Qt的系列还是会继续写下去——毕竟对于一个业余的Qt爱好者而言,有些东西也是不想那么轻易放弃的。《Angular开发学习》只关心Angular2及以上版本。关于Angular和AngularJS的关系,按照官方说法,AngularJS特指1.x版本。从2.x开始,Angular推荐使用TypeScript开发。虽然是一个升级版,但其实际内容与1.x有显著差异,完全可以当做两套框架。因而,官方将2.x及以上版本统一称作Angular。虽然在2017年年末,Angular的版本已经到5,但Angular5与Angular2或者Angular4的差异远远小于与AngularJS的差异。
ASP.NET Core Web API下事件驱动型架构的实现(一):一个简单的实现
ASP.NETCoreWebAPI下事件驱动型架构的实现(一):一个简单的实现很长一段时间以来,我都在思考如何在ASP.NETCore的框架下,实现一套完整的事件驱动型架构。这个问题看上去有点大,其实主要目标是为了实现一个基于ASP.NETCore的微服务,它能够非常简单地订阅来自于某个渠道的事件消息,并对接收到的消息进行处理,于此同时,它还能够向该渠道发送事件消息,以便订阅该事件消息的消费者能够对消息数据做进一步处理。让我们回顾一下微服务之间通信的几种方式,分为同步和异步两种。同步通信最常见的就是RESTfulAPI,而且非常简单轻量,一个Request/Response回环就结束了;异步通信最常见的就是通过消息渠道,将载有特殊意义的数据的事件消息发送到消息渠道,而对某种类型消息感兴趣的消费者,就可以获取消息中所带信息并执行相应操作,这也是我们比较熟知的事件驱动架构的一种表现形式。虽然事件驱动型架构看起来非常复杂,从微服务的实现来看显得有些繁重,但它的应用范围确实很广,也为服务间通信提供了新的思路。了解DDD的朋友相信一定知道CQR
什么是Kafka
什么是Kafka?Kafka的增长是爆炸性的。财富500强企业中超过三分之一使用卡夫卡。这些公司包括十大旅游公司,十大银行中的七家,十大保险公司中的八家,十大电信公司中的九家,等等。LinkedIn,微软(Microsoft)和Netflix每天用Kafka处理一兆(1,000,000,000,000)的信息。Kafka用于实时数据流,收集大数据,或做实时分析(或两者兼而有之)。Kafka与内存中的微服务一起使用以提供耐用性,并且可以用于向CEP(复杂事件流式传输系统)和IoT/IFTTT式自动化系统提供事件。##为什么选择Kafka?Kafka通常用于实时流式数据体系结构以提供实时分析。由于Kafka是一个快速,可扩展,耐用和容错的发布、订阅消息传递系统,Kafka被用于JMS,RabbitMQ和AMQP可能因为数量和响应速度而不被考虑的情况。Kafka具有更高的吞吐量,可靠性和复制特性,使其适用于跟踪服务呼叫(跟踪每个呼叫)或跟踪传统MOM可能不被考虑的物联网传感器数据。Kafka可以与Flume/Flafka,Spa
想做程序员,C语言可以开发哪些项目?
(1)C语言是面向过程的,而C++是面向对象的(2)C和C++的区别:C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制)。C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事务)控制。所以C与C++的最大区别在于它们的用于解决问题的思想方法不一样。之所以说C++比C更先进,是因为“设计这个概念已经被融入到C++之中”。(3)C与C++的最大区别:在于它们的用于解决问题的思想方法不一样。之所以说C++比C更先进,是因为“设计这个概念已经被融入到C++之中”,而就语