Jack Jiang

我的最新工程MobileIMSDK:http://git.oschina.net/jackjiang/MobileIMSDK
posts - 123, comments - 13, trackbacks - 0, articles - 0

2018年10月24日

     摘要: 1、引言相信看到这个标题,很多人的第一反应就是:对数据库进行分库分表啊!但是实际上,数据库层面的分库分表到底是用来干什么的,其不同的作用如何应对不同的场景,我觉得很多同学可能都没搞清楚。本篇文章我们一起来学习一下,对于一个支撑日活百万用户的高并发系统,数据库架构应该如何设计呢?本文的讨论和分享,将用一个创业公司的发展作为背景引入,方便大家理解。(本文同步发布于:http://www.52im.ne...  阅读全文

posted @ 2019-05-15 14:39 Jack Jiang 阅读(34) | 评论 (0)编辑 收藏

     摘要: 【来源申明】本文原文来自:微信公众号“鲜枣课堂”,官方网站:xzclass.com,原题为:《中国通信的百年沉浮》,本文引用时已征得原作者同意。为了更好的内容呈现,即时通讯网在收录时内容有稍许调整,转载时请注明原文来源信息,请尊重原作者的劳动。1、系列文章引言1.1 适合谁来阅读?本系列文章尽量使用最浅显易懂的文字、图片来组织内容,力求通信技术零基础的人群也能看懂。但个人建...  阅读全文

posted @ 2019-05-05 15:40 Jack Jiang 阅读(15) | 评论 (0)编辑 收藏

     摘要: 1、引言关于“负载均衡”的解释,百度词条里:负载均衡,英文叫Load Balance,意思就是将请求或者数据分摊到多个操作单元上进行执行,共同完成工作任务。负载均衡(Load Balance)建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。负载均衡有两方面的含义:1)首先,大量的并...  阅读全文

posted @ 2019-04-29 14:39 Jack Jiang 阅读(25) | 评论 (0)编辑 收藏

     摘要: 一、引言WebSocket是一种比较新的协议,它是伴随着html5规范而生的,虽然还比较年轻,但大多主流浏览器都已经支持。它使用方面、应用广泛,已经渗透到前后端开发的各种场景中。对http一问一答中二式流程(就是从所周之的“长轮询”技要啦)的不满,催生了支持双向通信的WebSocket诞生。WebSocket是个不太干净协议。本文将从8个常见的疑问入手,为还不了解WebSo...  阅读全文

posted @ 2019-04-25 14:27 Jack Jiang 阅读(27) | 评论 (0)编辑 收藏

     摘要: 本文由百度技术团队“蔡锐”原创发表于“百度App技术”公众号,原题为《百度App网络深度优化系列《二》连接优化》,感谢原作者的无私分享。一、前言在《百度APP移动端网络深度优化实践分享(一):DNS优化篇》里大家了解到网络优化一般会首选优化DNS,而接下来的HTTP协议成为优化的重点,一般优化者会选择协议切换,合并请求,精简数据包大小等手段来对HTT...  阅读全文

posted @ 2019-04-24 16:25 Jack Jiang 阅读(22) | 评论 (0)编辑 收藏

     摘要: 本文由百度技术团队“蔡锐”原创发表于“百度App技术”公众号,原题为《百度App网络深度优化系列《一》DNS优化》,感谢原作者的无私分享。一、前言网络优化是客户端几大技术方向中公认的一个深度领域,所以百度App给大家带来网络深度优化系列文章。本系列文章目录如下:《百度APP移动端网络深度优化实践分享(一):DNS优化篇》(* 本文)《百度APP移动端...  阅读全文

posted @ 2019-04-22 13:51 Jack Jiang 阅读(23) | 评论 (0)编辑 收藏

     摘要: 1、引言我,Scott,一家创业公司的 CTO。从业6年却很少写文章,近一年来接触了几十个刚毕业的前端新人,也面试了100多个前端工程师和Nodejs工程师,对于前端发展的这个职业算是有些感触吧,打算陆续写一些从业经验也好,技术分享也好,对自己前6年的经历做一些文字上的沉淀。此篇文章谨献给工作0 ~ 3年的前端工程师,内容都是我的亲身经历,不精彩但接地气。(本文同步发布于:http://www.5...  阅读全文

posted @ 2019-04-15 11:45 Jack Jiang 阅读(41) | 评论 (0)编辑 收藏

     摘要: 1、引言在文章《理论联系实际:Wireshark抓包分析TCP 3次握手、4次挥手过程》中,我们学会了用wireshark来分析TCP的“三次握手,四次挥手”,非常好用。这就是传说中的锤子,拿着 锤子,看什么都像 钉子!在这本文中,我对将准 HTTP这颗钉子,狠狠地砸下去。。。为了对网络数据包的“流转”有更加深刻的理解,我在docker(远程)上部署...  阅读全文

posted @ 2019-04-13 11:27 Jack Jiang 阅读(27) | 评论 (0)编辑 收藏

     摘要: 1、引言HTTPS(全称: Hypertext Transfer Protocol Secure,超文本传输安全协议),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。本文,就来深入介绍下其原理。补充:限于篇幅,本文对于https的相关技术要点的介绍尽量简明扼要,如想要详细了解HTTPS的方方面面,请阅读《即时通讯安全篇(七):如果这样来理解HTTPS,一篇就够了》。(本文同步发布于:ht...  阅读全文

posted @ 2019-04-08 11:48 Jack Jiang 阅读(22) | 评论 (0)编辑 收藏

     摘要: 1、系列文章引言1.1 适合谁来阅读?本系列文章尽量使用最浅显易懂的文字、图片来组织内容,力求通信技术零基础的人群也能看懂。但个人建议,至少稍微了解过网络通信方面的知识后再看,会更有收获。如果您大学学习过《计算机网络》这门课,那么一定不要错过本系列文章。特别推荐即时通讯开发者来阅读,因为针对移动弱网的问题,确实可以找到很多有价值的答案。友情提示:本系列文章可能涉及以下通信技术范畴,如您有兴趣,也可...  阅读全文

posted @ 2019-04-02 13:06 Jack Jiang 阅读(21) | 评论 (0)编辑 收藏

1、引言

沟通是人类的最基本需求,复杂多变的沟通内容、沟通方式,正是人类文明之所以如此璀璨的关键所在。

在自然界中,要完成一件事情的沟通,我们可以直接通过声音传递给对方,这是再平常不过的事了(靠“吼”就能解决)。

随着计算机的普及,互联网改变了我们的生活,甚至改变了我们的沟通方式。现在,“有什么事微信或QQ上找我”已经是很多的人口头禅了。

那么,作为不懂技术的普通人,有没有想过,你每次使用QQ或微这种IM聊天应用时,你所发送的消息,是如何被计算机送达给对方的?(这显然不可能靠“吼”解决 ^_^)

本文将从非技术人员的视角,为你讲解一下IM聊天应用中的聊天消息是怎么发送的。

学习交流:

- 即时通讯/推送技术开发交流4群:101279154[推荐]

- 移动端IM开发入门文章:《新手入门一篇就够:从零开发移动端IM

(本文同步发布于:http://www.52im.net/thread-2433-1-1.html

2、关于作者

巩鹏军:专注移动开发十多年,热爱即时通讯技术。个人微信公众号:“巩鹏军”。

3、阅读对象

本文适合非技术背景的读者阅读,如您喜欢本文,则下列文章您也可能喜欢:

技术往事:微信估值已超5千亿,雷军曾有机会收编张小龙及其Foxmail

QQ和微信凶猛成长的背后:腾讯网络基础架构的这些年

闲话即时通讯:腾讯的成长史本质就是一部QQ成长史

腾讯开发微信花了多少钱?技术难度真这么大?难在哪?

技术往事:史上最全QQ图标变迁过程,追寻IM巨人的演进历史

开发往事:深度讲述2010到2015,微信一路风雨的背后

开发往事:记录微信3.0版背后的故事(距微信1.0发布9个月时)

微信七年回顾:历经多少质疑和差评,才配拥有今天的强大

前创始团队成员分享:盘点微信的前世今生——微信成功的必然和偶然

QQ的成功,远没有你想象的那么顺利和轻松

[技术脑洞] 如果把14亿中国人拉到一个微信群里技术上能实现吗?

QQ和微信止步不前,意味着即时通讯社交应用创业的第2春已来?

那些年微信开发过的鸡肋功能,及其带给我们的思考

为什么说即时通讯社交APP创业就是一个坑?

即时通讯创业必读:解密微信的产品定位、创新思维、设计法则等

老罗最新发布了“子弹短信”这款IM,主打熟人社交能否对标微信?

盘点和反思在微信的阴影下艰难求生的移动端IM应用

QQ现状深度剖析:你还认为QQ已经被微信打败了吗?

那些年微信开发过的鸡肋功能,及其带给我们的思考

渐行渐远的人人网:十年亲历者的互联网社交产品复盘和反思

中国互联网社交二十年:全民见证的互联网创业演义

IM热门功能讨论:为什么微信里没有消息“已读”功能?

读懂微信:从1.0到7.0版本,一个主流IM社交工具的进化史

王欣回应微信封禁,解释为何取名“马桶MT”

同为IM社交产品中的王者,QQ与微信到底有什么区别

还原真实的腾讯:从最不被看好,到即时通讯巨头的草根创业史

如果您是专业技术人员,则跟本文相关的专业技术知识等,可以以下文章中找到:

从客户端的角度来谈谈移动端IM的消息可靠性和送达机制

移动端IM中大规模群消息的推送如何保证效率、实时性?

IM消息送达保证机制实现(一):保证在线实时消息的可靠投递

IM消息送达保证机制实现(二):保证离线消息的可靠投递

如何保证IM实时消息的“时序性”与“一致性”?

IM单聊和群聊中的在线状态同步应该用“推”还是“拉”?

IM群聊消息如此复杂,如何保证不丢不重?

完全自已开发的IM该如何设计“失败重试”机制?

好了,费话不多说,我们开始正文部分。。。

4、在微信里,我们发送一条聊天消息是如此简单

李雷在手机上打开微信(IM客户端),在聊天输框中输入“Hello!”,点击发送。几乎是瞬间,韩梅梅手机上的微信(IM客户端)就会显示李雷的头像后面跟着“Hello!”。

整个过程如下图所示:

▲ 一条聊天消息发送的全过程

从上面的图示可以看到,整个过程涉及三大部分:

1)李雷手机上的IM客户端(微信);

2)IM服务端;

3)韩梅梅手机上的IM客户端(微信)。

下面,我们逐一介绍每个部分的具体工作原理。

5、消息发送者:发送端是怎么工作的?

先看看发送端,李雷手机上的IM客户端中发生了什么?

从上图可以看出,发送一条信息经过三个步骤:

1)消息编辑:

李雷操作键盘输入要发送的文字,点击“发送”按钮。这一切都发生在IM客户端的界面模块中。类似用笔在信纸上写信,键盘就是笔,聊天框就是信纸;

2)消息入库:

IM客户端中的数据模块会先将聊天内容“Hello!”加上谁发给谁等信息,按标准格式打包为一条IM消息,并存入本地数据库。这类似信纸装入信封,填写地址,投入邮箱的过程。一条IM消息就是一封信,本地数据库就是李雷家的邮箱;

3)消息发送:

IM客户端中的网络模块通过长连接将IM消息发给IM服务端。这类似邮递员将信件汇总发往邮政局。网络模块就是邮递员,IM服务端就是邮政局。(长连接是IM客户端跟IM服务端一直保持的网络链路)。

6、消息“中转站”:IM服务端是怎么工作的?

担负“邮政局”职责的IM服务端是IM世界中全知全能的神,它认识所有人,经手所有消息,跟每个人都一直保持联系(长连接)。

每条消息在IM服务端中都要至少经过以下处理:

1)消息接收:

长连接服务从和李雷的长连接接收到“Hello!”的IM消息。IM服务端跟所有登录的IM客户端保持长连接(一条一直活跃的网络链路,每个客户端一条),长连接上定时会有心跳消息来监测客户端的在线离线状态,心跳消息就像邮递员每天都会在邮政局和邮箱之间巡回一样;

2)消息验证:

用户服务查询IM消息的目标人韩梅梅,以及发送人李雷和目标人韩梅梅是否好友关系,确保韩梅梅是真实存在而非虚构的,并且韩梅梅愿意接收李雷的消息,否则会给李雷退信。(一般IM服务端会将IM消息的副本存入数据库中备份);

3)消息转发:

在长连接服务中找到跟韩梅梅手机上IM客户端保持的长连接,并将消息发送给韩梅梅。

7、消息接收者:接收端又是怎么工作的呢?

下面看看韩梅梅手机上发生了什么?

韩梅梅手机上的IM客户端和李雷(发送者)的是一样的,但处理步骤是不同的:

1)消息接收:

网络模块通过跟IM服务端保持的长连接接收IM消息;

2)消息入库:

网络模块会将IM消息存入本地数据库,即信件投入了韩梅梅家的邮箱。网络模块就是邮递员,本地数据库就是韩梅梅家的邮箱;

3)消息展示:

界面模块获取发送人头像,和消息内容一起显示在聊天界面上。

经过上述过程,韩梅梅在自己手机上就看到了李雷发过来的“Hello!”,因为李雷和韩梅梅都是一直和服务器保持长连接,所以上述过程是瞬间完成的,李雷和韩梅梅感觉就像面对面聊天一样方便。这也是Instant Messaging名字的来历。

(本文同步发布于:http://www.52im.net/thread-2433-1-1.html

posted @ 2019-04-01 18:22 Jack Jiang 阅读(18) | 评论 (0)编辑 收藏

     摘要: 【来源申明】本文原文来自:微信公众号“鲜枣课堂”,官方网站:xzclass.com,原题为:《通信交换的百年沧桑(上)》,本文引用时已征得原作者同意。为了更好的内容呈现,即时通讯网在收录时内容有稍许调整,转载时请注明原文来源信息,请尊重原作者的劳动。1、本系列文章目录《IM开发者的零基础通信技术入门(一):通信交换技术的百年发展史(上)》(* 本文)《IM开发者的零基础通信...  阅读全文

posted @ 2019-03-26 12:08 Jack Jiang 阅读(23) | 评论 (0)编辑 收藏

     摘要: 本文来自公众号“玩不好就别玩”原创分享,原文链接:mp.weixin.qq.com/s/x5_OfICU2ijsxwMuVpqojg。文章内容为个人真实经历,虽平凡无奇,但感同身受。1、点评本文来自公众号“玩不好就别玩”原创分享。本次文章内容为个人真实经历,记录了作者个人离职鹅厂前最后一个月工作交接过程中的心理变化历程。内容虽平凡无奇,但同为程序员的...  阅读全文

posted @ 2019-03-01 18:25 Jack Jiang 阅读(44) | 评论 (0)编辑 收藏

     摘要: 本文为原创分享,转载请注明出处。1、引言即时通讯IM应用中的聊天消息时间显示是个再常见不过的需求,现在都讲究用户体验,所以时间显示再也不能像传统软件一样简单粗地暴显示成“年/月/日 时:分:秒”这样。所以,市面上几乎所有的IM都会对聊天消息的时间显示格化做人性化处理,从而提升用户体验(使用感受会明显友好)。这两天正在继续开发RainbowChat-Web产品,所以正需要这样...  阅读全文

posted @ 2019-02-23 16:54 Jack Jiang 阅读(43) | 评论 (0)编辑 收藏

     摘要: 本文原文内容引用自高可用架构公众号,内容有整理和修订。1、引言大家对下面这个排队的场景应该非常熟悉,这个是小米手机抢购的用户排队交互图,大家看到这些排队的兔子时,说明也有很多用户在同一时间向小米抢购系统提交了购买请求。▲ 小米手机抢购排队中...小米抢购系统后端服务面临巨大的压力,下图可以反映小米抢购系统面临的瞬间峰值压力。这张图截取自某年米粉节大秒服务后端其中一组LB(负载均衡层)的...  阅读全文

posted @ 2019-01-24 20:27 Jack Jiang 阅读(78) | 评论 (0)编辑 收藏

     摘要: 本文来自网易云音乐音视频实验室负责人刘华平在LiveVideoStackCon 2017大会上的分享,并由LiveVideoStack根据演讲内容整理而成(本次演讲PPT文稿,请从文末附件下载)。1、引言大家好,我是刘华平,从毕业到现在我一直在从事音视频领域相关工作,也有一些自己的创业项目,曾为早期Google Android SDK多媒体架构的构建作出贡献。就音频而言,无论是算法多样性,Code...  阅读全文

posted @ 2019-01-18 22:02 Jack Jiang 阅读(42) | 评论 (0)编辑 收藏

     摘要: 本文由爱奇艺技术团队原创分享,原题《爱奇艺Android客户端启动优化与分析》。1、引言互联网领域里有个八秒定律,如果网页打开时间超过8秒,便会有超过70%的用户放弃等待,对Android APP而言,要求更加严格,如果系统无响应时间超过5秒,便会出现ANR,APP可能会被强制关闭,因此,启动时间作为一个重要的性能指标,关系着用户的第一体验。爱奇艺安卓APP非常重视启动速度的优化,本文将从启动过程...  阅读全文

posted @ 2019-01-14 11:53 Jack Jiang 阅读(46) | 评论 (0)编辑 收藏

     摘要: 1、点评互联网发展至今已经高度发达,而对于互联网应用(尤其即时通讯技术这一块)的开发者来说,网络编程是基础中的基础,只有更好地理解相关基础知识,对于应用层的开发才能做到游刃有余。对于Android程序员来说,如果您觉得本文内容稍显枯燥,可以看看即时通讯网之前整理过的一篇类似文章《迈向高阶:优秀Android程序员必知必会的网络基础》,该文内容更偏向于知识点的概括。如果您希望更系统地学习网络编程方面...  阅读全文

posted @ 2019-01-10 11:15 Jack Jiang 阅读(43) | 评论 (0)编辑 收藏

     摘要: 本文来自腾讯QQ技术团队工程师许灵锋、周海发的技术分享。一、引言自 2015 年春节以来,QQ 春节红包经历了企业红包(2015 年)、刷一刷红包(2016 年)和 AR 红包(2017 年)几个阶段,通过不断创新玩法,活跃度节节攀升,成为春节一大玩点,给火红的春节带来一抹亮色。2017 年除夕,AR 红包、刷一刷红包再创新高,抢红包用户数达 3.42 亿,共刷出红包 37.77 亿个。那么,QQ...  阅读全文

posted @ 2019-01-07 12:10 Jack Jiang 阅读(65) | 评论 (0)编辑 收藏

     摘要: 本文原作者“minminaya”,作者网站:minminaya.cn,为了提升文章品质,即时通讯网对内容作了幅修订和改动,感谢原作者。1、引言对于IM应用和消息推送服务的开发者来说,在Android机型上的后台保活是个相当头疼的问题。老板一句:“为什么微信、QQ能收到消息,而你写的APP却不行?”,直接让人崩溃,话说老板你这APP要是整成微信、APP...  阅读全文

posted @ 2018-12-27 15:08 Jack Jiang 阅读(114) | 评论 (0)编辑 收藏

     摘要: 本文引用了颜向群发表于高可用架构公众号上的文章《聊聊HTTPS环境DNS优化:美图App请求耗时节约近半案例》的部分内容,感谢原作者。1、引言移动互联网时代,APP 厂商之间的竞争非常激烈,而良好的用户体验是必须优先考虑的,美图产品以高颜值著称,对产品的用户体验非常重视。从技术的角度来看,客户端的体验优化当中 DNS 优化是非常关键的一环,怎么降低 DNS 的耗时、怎么减少域名劫持等问题,都是大家...  阅读全文

posted @ 2018-12-25 16:30 Jack Jiang 阅读(68) | 评论 (0)编辑 收藏

     摘要: 本文由“猫爸iYao”原创分享,感谢作者。1、引言最近有个需求:评论@人(没错,就是IM聊天或者微博APP里的@人功能),就像下图这样:▲ 微信群聊界面里的@人功能 ▲ QQ群聊界面里的@人功能网上已经有一些文章分享了类似功能实现逻辑,但是几乎都是扩展EditText类,这种实现方式肯定不能进入我的首发阵容。你以为是因为它不符合面向对象六大...  阅读全文

posted @ 2018-12-23 21:31 Jack Jiang 阅读(86) | 评论 (0)编辑 收藏

     摘要: 本文由腾讯云加社区整理和发布,原文链接:cloud.tencent.com/developer/article/1004735,内容有删减和改动。1、引言在互联网一线做了十年的程序开发,经历了网易、百度、腾讯研究院、MIG 等几个地方,陆续做过 3D 游戏、2D 页游、浏览器、移动端翻译 app 等。积累了一些感悟,但必然有依然幼稚的地方,就当抛砖引玉,聊为笑谈。(本文同步发布于:http://w...  阅读全文

posted @ 2018-12-19 19:20 Jack Jiang 阅读(63) | 评论 (0)编辑 收藏

     摘要: 本文原作者“ manong”,原创发表于segmentfault,原文链接:segmentfault.com/a/11900000061581861、引言MySQL作为开源技术的代表作之一,是互联网得以广泛流行的重要基础技术之一。国外 GitHub、Airbnb、Yelp、Coursera 均在使用 MySQL 数据库,国内阿里巴巴、去哪儿网、腾讯、魅族、京东等等的部分关键...  阅读全文

posted @ 2018-12-17 13:34 Jack Jiang 阅读(116) | 评论 (0)编辑 收藏

     摘要: 1、引言达达创立于2014年5月,业务覆盖全国37个城市,拥有130万注册众包配送员,日均配送百万单,是全国领先的最后三公里物流配送平台。 达达的业务模式与滴滴以及Uber很相似,以众包的方式利用社会闲散人力资源,解决O2O最后三公里即时性配送难题(2016年4月,达达已经与京东到家合并)。 达达的业务组成简单直接——商家下单、配送员接单和配送,也正因为理解起来简...  阅读全文

posted @ 2018-12-10 19:32 Jack Jiang 阅读(77) | 评论 (0)编辑 收藏


1、引言

“恭喜你,成功的避过了所有的正确答案,选择了错误答案”。没错,我是一个数学专业的普通大学生(准确地说,是学渣一枚),排除万难,我终于还是入了程序员的坑(不好意思,给程序员抹黑了)!

(本文同步发布于:http://www.52im.net/thread-2127-1-1.html

2、生活爆锤了我一顿

我是一个平凡的人,人生也一直都是平淡且稀里糊涂的!像别人家孩子发生的事从来不会发生在我身上。在稀里糊涂的高考完之后,竟也能稀里糊涂的上了一个还凑活的本科院校(虽然是数学专业),算不上好,也算不上坏。没有像大多数的考生一样抱怨没发挥“好”,满怀憧憬的准备开启我的大学生活。

如绝大多数大学生一样,上午睡到自然醒,下午毒奶粉和撸啊撸,晚上喝酒聊天,打牌撸串,好不逍遥自在!本以为我会像当下大多数大学生一样”游戏”人生四年。

操蛋的是,生活毫不犹豫的给了我几皮锤,而且是一顿爆锤,锤的我是一脸懵逼。休学这种事情一向是别人家的孩子才会有的,没想到这次竟然到了我身上,不是因为世界那么大我想去看看,而是怀揣着对生活硬塞给我的迷茫回家休养。休学的生活更是极其的平淡无奇,没有北国的风光、江南的水乡,有的只是一张床、一间屋、一台电脑几本破书。

3、考验才刚刚开始

一年之后回到学校,本以为终于熬过了生活的几皮锤,没想到真正的考验才刚刚开始。“久不入凡尘”的我回到学校,一切都是那么的不适应。嘈杂的宿舍,陌生的舍友,12点以后的作息,熙来攘往的食堂,甚至安静的做着听45分钟的课……这一切都让我难以忍受。终于在第一堂统计课上了三十分钟后,满头大汗,全身都在颤抖的我终于再也忍受不了,在老师和同学们异样的眼光中我夺门而出,如逃命一般离去,那个学期我没有再去上过一节课。对人生未来没有任何方向,对生活失去信息的我,退学的念头在我心中愈发强烈。

庆幸的是,我原来的基友们因为大四有的外出培训和实习,宿舍剩下了很多空铺。于是我当天就收拾铺盖卷搬到了我原来的宿舍。原来的宿舍还剩两个舍友,这两个哥们也很6,不着急找工作。在我最艰难的时候陪我度过了最难熬的一段时光。起初我每天在宿舍床上躺着无所事事,看看电视打打游戏打发时光。后来我这两个哥们的一件事改变了我。

有些时候你难以想象两个爱玩游戏的人,一旦志同道合是多么可怕的一件事,当时他们来热衷于玩地下城和撸啊撸。这俩货玩游戏玩到什么程度呢?我只能用超强的自律来形容,地下城这个游戏玩过的朋友都知道早晨六点刷新疲劳。

于是乎,6点钟这俩货准时起床打开电脑撸一管疲劳之后七点多洗刷吃早饭,完事回来上午接着撸,下午两个人睡个午觉之后开黑打撸啊撸,晚上继续地下城。一个哥们一天撸6管疲劳(6个号),一哥们一天8管疲劳,每天晚上10点准时上床睡觉以备第二天6点能起床继续撸。这样“自律”的生活寒暑不断,风雨无阻。至今想起,我扔感觉佩服不已。终于,我深深折服于这俩货的“自律认真”,受他们影响我也加入了他们的队伍中。

4、人丑就应该多读书

好景不长!虽然我之前也爱玩游戏,但是却做不到一天6管疲劳,更别提8管疲劳。做不到像他们一样乐此不疲的沉入到游戏中去。慢慢地我又开始迷茫了,觉得这样的生活很没有意义,而且身边的人都要毕业了,对于未来,对于工作还一无所知,前途一片迷茫。

恰逢此时,我们学校的图书馆,在吸收了我几年重修费之后终于建成开放。照了照镜子,最终决定为了不让我那“天文数组”重修费不白交,我要去图书馆读读书。

起初,只是读一些文史小说之类的。后来不知道什么时候被猪油蒙了心,竟然鬼使神差的去读了一本HTML、CSS、JavaScript的书,正是这本书让我一步步的走上了不归路。当我使用代码敲出了第一个网页的时候,没错,就是“成就感”这种如毒品一样的感觉吸引了我。这次,我又回到了宿舍,还是和那俩货又混到了一起,不同的是,每天除了吃饭睡觉打游戏之外,敲代码成了我日常生活的一部分。

渐渐地,静态网页我也开始玩腻了。这个时候“动态网站”这个字眼走进了我眼睛。于是乎我又跑到了图书馆,找到了带我入行的第一本书。这本书现在看来虽然很简单,但确是陪我度过了大学里面最充实,最辉煌,真正带我入门的一本书《ASP.NET 从入门到精通》(ps:声明我不是卖书和推广书的!读书应该看看适不适合自己)。

自此正是开始了我的.NET学习与开发的生涯。

5、我好像走上了人生的巅峰

就这样学习了几个月之后,大三下学期(也就是我的老同学大四下学期)。老同学们开始毕业选题。当我看到他们的选题列表的时候。。。

没错,我的内心是这样的。在我免费承包了几个好基友的毕业设计之后,以后我的撸啊撸网名变成了“爷万众景仰”,走路仿佛都在带风。

老天仿佛开了眼,系里老师怕我们这个专业毕业后不好找工作,在大三大四开了计算机相关课程(事实证明我这些老师是多么的英明,我们班30多个同学,除最后有三十个入了程序相关行业的坑)。难以想象兴趣驱动的学习和考试驱动的学习差距是多么的大,经过几个月的学习与实战之后,没上过课的我,在考试中,有一哥们八分钟作弊被撵了出去,而我在一群崇拜的眼光中10分钟交了卷,最后竟然考了全系第一,拿到了一等奖学金。

回想生活是多么的操蛋,大一的时候我每天占座按时上课努力学习,想考第一,最终却不尽如人意。没想到大学快结束了,一天天逃课反而得到了原来自己以前最想要的。

6、离别的忧伤与找工作的迷茫

人们都说离别的时候,最后一个走的人是最痛苦的。而我注定是那最后一个走的。他们毕业以后,我和几个还在培训的同学在一起租了个房子度过了我大学生涯最后一段美好的时光。随着一个个找到工作的离去,偌大的房子就剩下了两个人。冬天还没到来,却感觉贼鸡儿冷。持续几个星期的感冒迟迟不好,又犯了鼻炎,整日呼吸都不顺畅,让我以为得了什么绝症,渐渐地感觉生活好像糟糕透了,我的心情也越来越差。不能再坐以待毙了,于是我决定出去找个工作。

7、新的挑战——入坑程序员

虽然在学校享受着别人“大神”的称呼,但实际上对找工作这件事我是慌得一比的,找到工作的同学都经过专业的培训,而我是野路子出身,也不知道自己学的怎么样。但当时想想出去面面也好,没人要就没人要,涨涨面试经验,不行回来再学习也行,于是抱着试试看的态度我准备出去找工作了。

尴尬的是大多数开发公司都集中在高新区,而学校到那里车程来回四五个小时。两天的奔波就面了两家公司,而且我连技术面试官的面都没见到,被人资就给打发回来了。再加上重感冒的原因有点吃不消,就想放弃。戏剧性的是,在我刚撤回简历的时候,一个电话邀我去面试,而且离我们学校还挺近。命运就是那么的有趣,鬼使神差的我又跟着去了。

当然,结局就是我最终去了这家公司也是我现在的公司。

原因很简单:

第一、这个办公环境是真的棒,国家甲级写字楼,还特么有漂亮的小姐姐给开门摁电梯,慢慢的逼格吸引了我,就连重感冒都感觉好了几分;

第二、当时的技术总监的技术水平折服了我,我想去学东西。

至此,经历重重磨难,我终于入了程序员的坑,开启了另一种人生!在这里我经历了朝九晚五的上班族生活,也经历了史上最要人命的加班生活,经历了每月1800的苦逼岁月,也经历了一年翻五倍薪的辉煌人生,做过小兵、当过带头大哥,孤军奋战过,团队合作过,迷茫过、徘徊过……但还始终坚定地往前扑棱着!

8、最后

最后,送给还在生活中使劲扑棱的人:

假如生活暴锤了你,不要悲伤不要着急,一定要坚定不移地向前再轱蛹、轱蛹!

人丑应该多读书,人在迷茫的时候更不要停止学习的脚步!

当你陷入生活的泥潭的时候要努力的寻求变化!

无论任何时候都不要丧失对生活的信息,保持乐观!

附录:更多感悟和思考的文章

一个微信实习生自述:我眼中的微信开发团队

微信程序员创业总结:如何提高Android开发效率

如何做一个合格的 iOS Team Leader

程序员中年危机:拿什么拯救你,我的三十五岁

一个魔都程序员的3年:从程序员到CTO的历练

为什么说即时通讯社交APP创业就是一个坑?

致我们再也回不去的 Github ...

一名90后二流大学程序员的自述:我是如何从“菜鸟”到“辣鸡”的

一个魔都程序员的3年:从程序员到CTO的历练

选择比努力更重要:我是如何从流水线工人到程序员的?

程序员的抉择:必须离开帝都——因为除了工作机会,还有什么值得留恋?

即时通讯创业必读:解密微信的产品定位、创新思维、设计法则等

干了这碗鸡汤:从理发店小弟到阿里P10技术大牛

程序员神级跳槽攻略:什么时候该跳?做什么准备?到哪里找工作?

感悟分享:在腾讯的八年,我的成长之路和职业思考

调皮的程序员:Linux之父雕刻在Linux内核中的故事

老罗最新发布了“子弹短信”这款IM,主打熟人社交能否对标微信?

迷茫中前行:一个专科渣渣菜鸟的编程入门感悟

盘点和反思在微信的阴影下艰难求生的移动端IM应用

QQ现状深度剖析:你还认为QQ已经被微信打败了吗?

机会不给无准备的人:一个Android程序员屡战屡败的悲惨校招经历

盘点和反思在微信的阴影下艰难求生的移动端IM应用

QQ现状深度剖析:你还认为QQ已经被微信打败了吗?

笑中带泪的码农往事:入职三天被开,公司给100块叫我走人,有我惨?

一个野生程序员的真实自述:我是如何从数学专业学渣入坑程序员的

(本文同步发布于:http://www.52im.net/thread-2127-1-1.html

posted @ 2018-12-05 15:04 Jack Jiang 阅读(99) | 评论 (0)编辑 收藏

     摘要: 1、引言对于互联网,域名是访问的第一跳,而这一跳很多时候会“失足”(尤其是移动端网络),导致访问错误内容、失败连接等,让用户在互联网上畅游的爽快瞬间消失。而对于这关键的第一跳,包括鹅厂在内的国内互联网大厂,都在持续深入地研究和思考对策,本文将就鹅厂团队在这一块的技术实践,做一个深度的总结和技术分享,希望给大家带来些许启发。学习交流:- 即时通讯/推送技术开发交流4群:101...  阅读全文

posted @ 2018-12-04 13:36 Jack Jiang 阅读(42) | 评论 (0)编辑 收藏

     摘要: 本文由作者“卫夕”(ID:weixizhibei)原创,作者为资深广告产品经理,致力于剖析互联网广告的基本逻辑、思路及技巧。1、引言坐拥7亿日活的微信极其成功,有人说微信的成功在于赛道的成功,然而即便把微信和国际上其他地区的同类应用WhatsApp、Line等相比,微信所取得的成绩依然鹤立鸡群,不仅因为其庞大的用户量,更因为微信枝繁叶茂的生态体系。产品人张小龙微信教科书式的...  阅读全文

posted @ 2018-12-01 19:06 Jack Jiang 阅读(46) | 评论 (0)编辑 收藏

     摘要: 1、引言随着瓜子二手车相关业务的发展,公司有多个业务线都接入了IM系统,IM系统中的Socket长连接的安全问题变得越来越重要。本次分享正是基于此次解决Socket长连接身份安全认证的实践总结而来,方案可能并不完美,但愿能起到抛砖引玉的作用,希望能给您的IM系统开发带来启发。学习交流:- 即时通讯/推送技术开发交流4群:101279154[推荐]- 移动端IM开发入门文章:《新手入门一篇就够:从零...  阅读全文

posted @ 2018-11-28 12:28 Jack Jiang 阅读(57) | 评论 (0)编辑 收藏

     摘要: 1、点评本文主要分享的是如何从零设计开发一个中大型推送系统,因限于篇幅,文中有些键技术只能一笔带过,建议有这方面兴趣的读者可以深入研究相关知识点,从而形成横向知识体系。本文适合有一定开发、架构经验的后端程序员阅读,文内个别技术点可能并非最佳实践,但至少都是生动的实践分享,至少能起到抛砖引玉的作用。希望即时通讯网本次整理的文章能给予你一些启发。学习交流:- 即时通讯/推送技术开发交流4群:10127...  阅读全文

posted @ 2018-11-27 20:49 Jack Jiang 阅读(62) | 评论 (0)编辑 收藏

     摘要: 本文由“逆流的鱼yuiop”原创分享于“何俊林”公众号,感谢作者的无私分享。1、引言直播行业的竞争越来越激烈,进过2018年这波洗牌后,已经度过了蛮荒暴力期,剩下的都是在不断追求体验。最近正好在做直播首开优化工作,实践中通过多种方案并行,已经能把首开降到500ms以下,借此机会分享出来,希望能对大家有所启发。本文内容的技术前提:1)基于FFmpeg的...  阅读全文

posted @ 2018-11-22 12:48 Jack Jiang 阅读(81) | 评论 (0)编辑 收藏

     摘要: 本文引用了“帅地”发表于公众号苦逼的码农的技术分享。1、引言搞网络通信应用开发的程序员,可能会经常听到外网IP(即互联网IP地址)和内网IP(即局域网IP地址),但他们的区别是什么?又有什么关系呢?另外,内行都知道,提到外网IP和内网IP就不得不提NAT路由转换这种东西,那这双是什么鬼?本文就来简单讲讲这些到底都是怎么回事。另外,以下是与本文内相关知识点有关联的文章,可详细...  阅读全文

posted @ 2018-11-20 12:34 Jack Jiang 阅读(59) | 评论 (0)编辑 收藏

     摘要: 1、前言标题虽然是为了解释有了 IP 地址,为什么还要用 MAC 地址,但是本文的重点在于理解为什么要有 IP 这样的东西。本文对读者的定位是知道 MAC 地址是什么,IP 地址是什么。(本文同步发布于:http://www.52im.net/thread-2067-1-1.html)2、关于作者翟志军,个人博客地址:https://showme.codes/,Github:https://git...  阅读全文

posted @ 2018-11-16 12:32 Jack Jiang 阅读(35) | 评论 (0)编辑 收藏

     摘要: 本文原始内容由作者“阳振坤”整理发布于OceanBase技术公众号。1、引言OceanBase 是蚂蚁金服自研的分布式数据库,在其 9 年的发展历程里,从艰难上线到找不到业务场景濒临解散,最后在双十一的流量考验下浴火重生,成为蚂蚁金服全部核心系统的承载数据库。这一路走来的艰辛和故事,蚂蚁金服高级研究员、OceanBase 团队负责人阳振坤将为你娓娓道来。什么是OceanBa...  阅读全文

posted @ 2018-11-14 12:49 Jack Jiang 阅读(35) | 评论 (0)编辑 收藏

     摘要: 本文由微信开发团队工程是由“oneliang”原创发表于WeMobileDev公众号,内容稍有改动。1、引言Kotlin 是一个用于现代多平台应用的静态编程语言,由 JetBrains 开发(也就是开发了号称Java界最智能的集成开发工具IntelliJ IDEA的公司)。Kotlin可以编译成Java字节码(就像Groovy和Scala一样),也可以编译成JavaScri...  阅读全文

posted @ 2018-11-12 19:03 Jack Jiang 阅读(105) | 评论 (0)编辑 收藏

     摘要: 本文原题“阿里数据库十年变迁,那些你不知道的二三事”,来自阿里巴巴官方技术公号的分享。1、引言第十个双11即将来临之际,阿里技术推出《十年牧码记》系列,邀请参与历年双11备战的核心技术大牛,一起回顾阿里技术的变迁。今天,阿里数据库事业部研究员张瑞,将为你讲述双11数据库技术不为人知的故事。在零点交易数字一次次提升的背后,既是数据库技术的一次次突破,也见证了阿里技术人永不言败...  阅读全文

posted @ 2018-11-06 11:03 Jack Jiang 阅读(69) | 评论 (0)编辑 收藏

     摘要: 1、引言Netty 是一个广受欢迎的异步事件驱动的Java开源网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。本文基于 Netty 4.1 展开介绍相关理论模型,使用场景,基本组件、整体架构,知其然且知其所以然,希望给大家在实际开发实践、学习开源项目方面提供参考。本文作者的另两篇《高性能网络编程(五):一文读懂高性能网络编程中的I/O模型》、《高性能网...  阅读全文

posted @ 2018-11-05 13:57 Jack Jiang 阅读(866) | 评论 (0)编辑 收藏

     摘要: 本文来自腾讯前端开发工程师“ wendygogogo”的技术分享,作者自评:“在Web前端摸爬滚打的码农一枚,对技术充满热情的菜鸟,致力为手Q的建设添砖加瓦。”1、GIF格式的历史GIF ( Graphics Interchange Format )原义是“图像互换格式”,是 CompuServe 公司在1987年开发出的图像...  阅读全文

posted @ 2018-10-29 12:34 Jack Jiang 阅读(50) | 评论 (0)编辑 收藏

     摘要: 本文由作者“假不理”发表于“编程无界”公众号,现重新整理发布,感谢作者的精彩分享。1、引言十月,金秋季节,本是丰收之时,却因为陆续有同事离职,心中多少有些悲凉之意,顿然想起从参加工作到现在。至今五年已过,当年青涩懵懂的小年轻,如今出街招摇过市时,被小孩子看到都会喊声大叔。回想这五年,有心酸和无奈、有快乐和期待、也有不断的蜕变和成长。趁着国庆长假,写下...  阅读全文

posted @ 2018-10-26 10:42 Jack Jiang 阅读(212) | 评论 (0)编辑 收藏

本文原作者“虞大胆的叽叽喳喳”,原文链接:jianshu.com/p/8861da5734ba,感谢原作者。

1、引言

很多人一提到 HTTPS,第一反应就是安全,对于普通用户来说这就足够了;

但对于程序员,很有必要了解下 HTTP 到底有什么问题?以及HTTPS 是如何解决这些问题的?其背后的解决思路和方法是什么?

本文只做简单的描述,力求简单明了的阐明主要内容,因为HTTPS 体系非常复杂,这么短的文字是无法做到很详细和精准的分析。想要详细了解HTTPS的方方面面,可以阅读此前即时通讯网整理的《即时通讯安全篇(七):如果这样来理解HTTPS,一篇就够了》一文。

(本文同步发布于:http://www.52im.net/thread-2027-1-1.html

2、HTTPS相关文章

即时通讯安全篇(七):如果这样来理解HTTPS,一篇就够了

一文读懂Https的安全性原理、数字证书、单项认证、双项认证等

HTTPS时代已来,打算更新你的HTTP服务了吗?

苹果即将强制实施 ATS,你的APP准备好切换到HTTPS了吗?

3、对HTTPS性能的理解

HTTP 有典型的几个问题,第一就是性能,HTTP 是基于 TCP 的,所以网络层就不说了(快慢不是 HTTP 的问题)。

比较严重的问题在于 HTTP 头是不能压缩的,每次要传递很大的数据包。另外 HTTP 的请求模型是每个连接只能支持一个请求,所以会显得很慢。

那么 HTTPS 是解决这些问题的吗?

不是,实际上 HTTPS 是在 HTTP 协议上又加了一层,会更慢,相信未来会逐步解决的。同时 HTTPS 用到了很多加密算法,这些算法的执行也是会影响速度的。

为什么说 HTTPS 提升了性能呢?因为只有支持了 HTTPS,才能部署 HTTP/2,而 HTTP/2 协议会提升速度,能够有效减轻客户端和服务器端的压力,让响应更快速。有关HTTP/2详细文章可以看看《从HTTP/0.9到HTTP/2:一文读懂HTTP协议的历史演变和设计思路》、《脑残式网络编程入门(四):快速理解HTTP/2的服务器推送(Server Push)》,这里只要知道一点:HTTP/2 能够加快速度的主要原因在于多路复用,同一个连接能够并行发送和接收多个请求。

4、传统HTTP的安全性问题

当用户在浏览器输入一个网址的时候,在地址栏上看到小锁图标,就会安心,潜意识的认为自己的上网行为是安全的,当然对于小白用户来说可能还不明白,但是未来会慢慢改善的(万事开头难嘛)。

那么 HTTP 到底有什么安全问题呢,看几个例子:

1)由于互联网传输是能够被拦截的,所以假如你的上网方式被别人控制了(没有绝对的安全),那么你的任何行为和信息攻击者都会知道,比如我们连上一个匿名的 WIFI,当你上网的时候,输入的网站密码可能就已经泄漏了;

2)当我们在上一个网站的时候,莫名其妙跳出一个广告(这个广告并不是这个网站的),那是因为访问的页面可能被运营商强制修改了(加入了他自己的内容,比如广告)。

HTTP 最大的问题就在于数据没有加密,以及通信双方没有办法进行身份验证( confidentiality and authentication),由于数据没有加密,那么只要数据包被攻击者劫持,信息就泄漏了。

身份验证的意思就是服务器并不知道连接它的客户端到底是谁,而客户端也不确定他连接的服务器就是他想连接的服务器,双方之间没有办法进行身份确认。

有关HTTP比较好的文章,可以看看:

网络编程懒人入门(七):深入浅出,全面理解HTTP协议

从HTTP/0.9到HTTP/2:一文读懂HTTP协议的历史演变和设计思路

脑残式网络编程入门(三):HTTP协议必知必会的一些知识

5、HTTPS 背后的密码学

为了解决 HTTP 的两个核心问题,HTTPS 出现了,HTTPS 包含了核心的几个部分:TLS 协议、OpenSSL,证书。

什么是 OpenSSL 呢,它实现了世界上非常重要和多的密码算法,而密码学是解决问题最重要的一个环节。

TLS 最重要的是握手的处理方式。证书的体系也很大,但是他们背后都是基于同样的密码学。

1)既然 HTTP 没有数据加密,那么我们就加密下,对称加密算法上场了,这种算法加密和解密要使用同一个密钥,通信双方需要知道这个密钥(或者每次协商一个),实际上这种方法不太可能,这涉及到密钥保密和配送的问题,一旦被攻击者知道了密钥,那么传输的数据等同没有加密。

2)这个时候非对称加密算法上场了,公钥和私钥是分开的,客户端保存公钥,服务器保存私钥(不会公开),这时候好像能够完美解决问题了。

但实际上会存在两个问题,第一就是非对称加密算法运算很慢,第二就是会遇到中间人攻击问题。

先说说中间人攻击的问题,假如使用非对称加密算法,对于客户端来说它拿到的公钥可能并不是真正服务器的公钥,因为客户端上网的时候可能不会仔细分辨某个公钥是和某个公司绑定的,假如错误的拿到攻击者的公钥,那么他发送出去的数据包被劫持后,攻击者用自己的私钥就能反解了。

3)接下来如何解决公钥认证的问题呢?证书出现了,证书是由 CA 机构认证的,客户端都充分信任它,它能够证明你拿到的公钥是特定机构的,然后就能使用非对称加密算法加密了。

证书是怎么加密的呢?实际上也是通过非对称加密算法,但是区别在于证书是用私钥加密,公钥解密。

CA 机构会用自己的私钥加密服务器用户的公钥,而客户端则用 CA 机构的公钥解出服务器的公钥。听上去有点晕,仔细体会下。这方面的知识,可以详细阅读:《即时通讯安全篇(七):如果这样来理解HTTPS,一篇就够了》。

4)上面说了非对称加密算法加密解密非常耗时,对于 HTTP 这样的大数据包,速度就更慢了,这时候可以使用对称加密算法,这个密钥是由客户端和服务器端协商出来,并由服务器的公钥进行加密传递,所以不存在安全问题。

5)另外客户端拿到证书后会验证证书是否正确,它验证的手段就是通过 Hash 摘要算法,CA 机构会将证书信息通过 Hash 算法运算后再用私钥加密,客户端用 CA 的公钥解出后,再计算证书的 Hash 摘要值,两者一致就说明验证身份通过。

6)HTTPS 解决的第三个问题是完整性问题,就是信息有没有被篡改(信息能够被反解),用的是 HMAC 算法,这个算法和 Hash 方法差不多,但是需要传递一个密钥,这个密钥就是客户端和服务器端上面协商出来的。

附录:更多安全方面的文章

即时通讯安全篇(一):正确地理解和使用Android端加密算法

即时通讯安全篇(二):探讨组合加密算法在IM中的应用

即时通讯安全篇(三):常用加解密算法与通讯安全讲解

即时通讯安全篇(四):实例分析Android中密钥硬编码的风险

即时通讯安全篇(五):对称加密技术在Android平台上的应用实践

即时通讯安全篇(六):非对称加密技术的原理与应用实践

传输层安全协议SSL/TLS的Java平台实现简介和Demo演示

理论联系实际:一套典型的IM通信协议设计详解(含安全层设计)

微信新一代通信安全解决方案:基于TLS1.3的MMTLS详解

来自阿里OpenIM:打造安全可靠即时通讯服务的技术实践分享

简述实时音视频聊天中端到端加密(E2EE)的工作原理

移动端安全通信的利器——端到端加密(E2EE)技术详解

Web端即时通讯安全:跨站点WebSocket劫持漏洞详解(含示例代码)

通俗易懂:一篇掌握即时通讯的消息传输安全原理

IM开发基础知识补课(四):正确理解HTTP短连接中的Cookie、Session和Token

快速读懂量子通信、量子加密技术

即时通讯安全篇(七):如果这样来理解HTTPS原理,一篇就够了

一分钟理解 HTTPS 到底解决了什么问题

>> 更多同类文章 ……

(本文同步发布于:http://www.52im.net/thread-2027-1-1.html

posted @ 2018-10-24 14:05 Jack Jiang 阅读(107) | 评论 (0)编辑 收藏

Jack Jiang的 Mail: jb2011@163.com, 联系QQ: 413980957, 微信: hellojackjiang