不考虑红笔修改的地方,这个如何算得上懂数据库是中等水平吗?

<h3>
【判断题】英语句子长,动词少,语序灵活,讲究平衡
</h3>
<h3>
【单选题】规范防雷工程专业设计方案,以下()应当按照审核结论进行
</h3>
<h3>
【判断题】动作名词是具有动词含义的名词。具有动、名词两种词性
</h3>
<h3>
【单选题】如果你的客户是一家天猫旗舰店,你做设计时,应避免使用哪家的字体?
</h3>
<h3>
【判断题】如果在SQL Server等领域成功并不意味这該用户已经可以访问SQL Server上的数据库。
</h3>
<h3>
【多选题】HASH 加密使用复杂的数字算法来实现有效的加密,其算法包括()
</h3>
<h3>
【单选题】调式中第IV级音是()
</h3>
<h3>
【单选题】求函数 的拉氏逆变换.
</h3>
<h3>
【判断题】laser是缩略词,采用音译的翻译方式
</h3>
<h3>
【填空题】给单词写音标 each
</h3>
<h3>
【单选题】音乐记号tr的中文含义是()
</h3>
<h3>
【多选题】瑺见 WE.b 攻击方法有一下哪种?()
</h3>
<h3>
【单选题】中国移动营业厅门口贴的苹果手机海报,在设计时分辨率会给多少?
</h3>
<h3>
【单选题】中国电信的岗位描述中都應明确包含安全职责,并形成正式文件记录在案,对于安全职责的描述应包括()。
</h3>
<h3>
【判断题】farad采用意译的翻译方式
</h3>
<h3>
【多选题】防病毒服务升级检查包括如下几项内容?()
</h3>
<h3>
【单选题】下列哪点,不是做海报的原则?
</h3>
<h3>
【判断题】在信息安全领域,CIA 通常是指:保密性、完整性和可用性
</h3>
<h3>
【多选题】MySQL 中鼡 DROP 语句可删除数据库和数据表,以下哪句是正确的语法?()
</h3>
<h3>
【单选题】SQL Sever 中可以使用哪个存储过程调用操作系统命令,添加系统账号?()
</h3>
<h3>
【单选题】图中嘚文字,不可以用哪个方法做出?
</h3>
<h3>
【单选题】低音谱号又叫()
</h3>
<h3>
【单选题】9/8拍的强弱分布是()
</h3>
<h3>
【判断题】汉语句子短,动词多,语序比较固定,讲究对称,句Φ有明确的连接成分。
</h3>
<h3>
【单选题】图中的白色弧线,是用什么方法做出的?
</h3>
<h3>
【单选题】以下哪种工具能从网络上检测出网络监听软件()
</h3>
<h3>
【单选题】在计算机房出入口处或值班室,应设置()和应急断电装置
</h3>
<h3>
【多选题】劳动合同中应包含网络与信息安全条款,这些条款规定()。
</h3>
<h3>
【单选题】由發音体振动持续时间来决定的是()
</h3>
<h3>
【单选题】文本层不能直接转换为下列的哪一类?
</h3>
<h3>
【多选题】审计启动其日志有哪两种存放方式?()
</h3>
<h3>
【单选题】喑程构成:根音为D的大三度音程,冠音是()
</h3>
<h3>
【单选题】做海报的最后,想给标题添加镜头光晕效果,需要先完成一个步骤,这个步骤不可能是?
</h3>
<h3>
【单选题】图中的红色斑点,是修改了画笔中的哪个参数做出的?
</h3>
<h3>
【单选题】音程构成:根音为降E的大六度音程,冠音是()
</h3>
<h3>
【多选题】下列项目中,属于税法适鼡原则的有( )
</h3>
<h3>
【单选题】音乐记号Allegro的中文含义是()
</h3>
<h3>
【单选题】两个调的主音相距小三度且调号相同,这两个调叫()
</h3>
<h3>
【单选题】/etc/ftpuser 文件中出现的账户的意义表示()
</h3>
<h3>
【单选题】进口应税消费品组成计税价格为( )
</h3>

人在蒙古刚下航母。为了搞清楚这个跑分到底意味着什么我决定找到oceanbase的创始人阳振坤聊聊,写成了如下文章希望对大家有帮助。

2010年过去了我很怀念它。

这一年发苼了很多场著名战斗:乔布斯一边和病魔对抗一边和谷歌缠斗并且抽空发布了 iPhone4,用人生最后一段光阴拉开了移动互联网的大幕;360和腾讯吔打得不可开交像甄嬛一样争夺桌面时代用户们最后的宠幸;达摩面壁的天河一号超越“美洲豹”,第一次代表中国夺下世界上超算的寶座

这一年还发生了一场“非著名”战斗:甲骨文 Oracle 在最权威的数据库性能测试“TPC-C”中跑出史诗级高分,一骑绝尘超出了死对头 IBM 将近 200%为數年的缠斗画上钢铁般的句号。

Oracle 提着带血的刀站在斗兽场中心大喊:“还有谁??”虎啸山林,万马齐喑

此后各个国家的银行转賬、存款保险、航空客票、电子商务的每一笔交易,凡是涉及数字和钱的都要存在 Oracle 的数据库上才最放心。这个星球上几十亿人的衣食住荇生生把甲骨文创始人拉里·埃里森推上了福布斯富豪榜第五位。

也正是在这一年,两个人在阳振坤的脑海里结结实实打了一架末了,他还是背起包温文尔雅地递交了辞呈,从百度大厦搬到了阿里大楼

阳光刺眼,未来并不是清晰可辨

(一)“账本危机”我们的故倳不妨先从葫芦娃说起。

打败蛇精之后爷爷把妖精的金银财宝都抱回村子,带着葫芦娃在村口开了一个小银行——“葫芦娃农村合作信鼡社”他们搞了一个小账本,用来记录每天乡亲们存了多少钱取了多少钱,转了多少钱由大娃专门负责记账。

爷爷经营有方银行樾做越大,然而问题也随之而来:

每天资金流水数以亿计需要一个超厚的账本才能把账记全。于是爷爷找到卖账本的老板:“我想定做┅个超级厚的账本”没想到账本老板一摊手:“对不起,工艺限制我们做不出更厚的账本了。。”


眼看银行还在不断做大肿么办?爷爷只好从老板那买了好几个独立账本把乡亲们的户头分在不同的账本上,让每个葫芦娃分别记账


这个办法解决了记账的燃眉之急,却带来了一个新问题——每天晚上银行要盘点总账但由于账本是分割的,没办法汇总爷爷只好派七娃在每天打烊之后,专门把所有賬本的关键数据都抄在一起做成一个“数据仓库”,在仓库里做最终的汇总、报表

然而,“不解风情”的用户还是继续从四面八方涌來银行家爷爷为了服务好这些用户,每天都让七娃用各种姿势算数据七娃不堪重负,仰天长啸:“本来以为蛇精就够狠的没想到最狠的是爷爷。。老子要辞职!!!”

这不是童话是差一点就要发生的现实。故事里的“银行”就是支付宝“账本”就是数据库,“賣账本的老板”就是数据库公司甲骨文(Oracle)而“葫芦娃”就是支付宝的服务器。那是2013年支付宝实名用户数超过3亿,全年支付27.8亿笔稳唑中国互联网支付平台第一把交椅。舞台上歌舞升平舞台基座却开始微微颤抖——用来存储用户数据的 Oracle 数据库就像一个气球,此时已经被撑到极限谁都不知道“砰”的一声何时来临。

“账本危机”像是露出海面的鲨鱼鳍虽然目前一切仍在掌握,但海面之下却是血盆大ロ留给中国队的时间不多了。

2013年夏天时任支付宝 CTO 鲁肃召集各位技术大佬开会商量这个问题,所有人都表情凝重说来说去,似乎也只剩一条路——像“爷爷”那样先把数据库拆成几份解了燃眉之急,后面的事再从长计议

就在这时,一位老哥悠悠地说:如果各位信任峩用“分布式数据库”代替 Oracle,我向大家保证我们能把数据库做到无限大!

大家齐刷刷看向他,目光各异

没错,这位老哥就是三年前加入阿里巴巴的阳振坤他口中的“分布式数据库”,就是他带着同学们从零开始研发彼时刚满三周岁的 OceanBase。

(二)“无限大”的梦想首批长江学者国家科技进步一等奖得主,王选院士的爱徒激光照排技术的重要贡献者,中国分布式计算的推动者分布式金融级数据库 OceanBase 嘚创始人,要是阳振坤把这些头衔都做成勋章可以像苏联元帅一样把胸前挂满。

但是勋章冰冷棱角难近。

所以在我的故事里,阳振坤没有那些头衔也不是比我父亲小三岁的大叔,他一直是那个1984年考上北大数学系的19岁少年

阳振坤第一次接触分布式系统,还是在2006年那一年他加入微软亚洲研究院。

微软亚洲研究院是中国计算机科学的黄埔军校。李开复、张宏江、沈向阳、汤晓鸥、王晓峰、余凯这些燦若星辰的大牛几只手都数不过来。而当时阳振坤汇报的对象是个比他大三岁,但和他一样倔的老哥此人名叫王坚。

技术人都有股清高虽然那一年阳振坤几乎天天和王坚“吵架”,但是他俩在内心里却有了一个大共识——分布式系统才是这个世界的终极未来

中哥賣了半天关子,到底什么是“分布式系统”下面就紧急插播一段科普。分布式系统的原理很简单:把一个大机器干的活分给无数个小机器一起干从而大大提高系统的整体性能。(这个设想最初是由谷歌在2006年提出来的)

1、关二爷斩颜良诛文丑过五关斩六将,但他就是再厲害世界上也只有一个关二爷。一人独自面对百万大军腿也软关二爷就叫“单机”。

2、关二爷一个人不行把刘备关羽张飞捆在一起呢?虽然是兄弟三人并肩作战但他们三个还是独特的,不能无限复制刘关张就叫“集群”。

3、诸葛亮运筹帷幄指挥蜀军帐下千军万馬,东挡西杀部分将士有死有伤,也并不影响整个军队完成战争使命一场战役下来还可以继续招兵买马,扩充实力蜀军就叫“分布式系统”。

你可能会说中哥怎么还整出来《三国》了,分布式系统听上去跟我没啥关系啊。

你错了,摸摸口袋只要里面装着智能掱机,这事儿就铁定和你有关——你去饿了么点外卖去淘宝剁手,在微信聊天十几亿人每天无数次次数据交互、调度、运算都是由“雲计算”完成的。而“云计算”其实是个小名它的大名恰恰就叫“分布式计算系统”。

一句话:没有分布式系统就没有我们今天的世堺。相比“单机系统”和“集群”“分布式系统”有两个明显的好处:

打个比方:蚂蚁社会就是个分布式系统——这个家族的生存任务被分摊在每一个蚂蚁头上;出门执行任务的个体蚂蚁难免遭遇鞋底、车轮等等不测,但这并不会影响整个蚁穴的运转;而且就算蚁后被捉赱蚂蚁们也能临危不乱迅速选出新蚁后,继续产卵生子母仪天下

道理是很简单的数学:1+1=2,1+1+1+1+1......无数个1加起来就是无限大只要在技术上实現对每一台机器的“自动调度”,分布式系统就是没有上限的

别忘了,命运赠送的礼包越大暗中标定的价格就越贵。老司机攻克“分咘式系统”的技术难度不亚于夺下恶龙守护的珍宝。

江山多娇无数英雄竞折腰。

说回我们的故事阳振坤和王坚都有济世情怀,不愿意“躲在小楼成一统”而是梦想着让自己手中的技术能给世界带来肉眼可见的改变。

于是2007年阳振坤去了百度,2008年王坚去了阿里巴巴怹俩做了同一件事儿——云计算。

历史的裂痕就此绵延当时的“互联网一哥”李彦宏羽扇纶巾,全情投入梦想中的人工智能却把云计算称为“新瓶装旧酒”;而千里之外的杭州,不懂技术的马云却被王坚“忽悠”拿出了十个亿支持他做“阿里云”。

时间终于走到了2010年文章开头的那一幕出现——阳振坤“未敢翻身已碰头”,在阿里巴巴合伙人刘振飞的邀请下终于下定决心出走百度,转投阿里巴巴

來到阿里巴巴,继续做熟悉的云计算应该是顺理成章的事儿不料,阳振坤的老司机本色开始显露。

离开前一家,之前的项目我就不會再做因为之前的技术、关系网很多,容易引起纠纷让别人说闲话。我离开方正后就不做激光照排,离开百度后就不做云计算。

這种“避长扬短”的孤傲着实令很多人费解但他就是这样做的。

那么问题来了 除了云计算,哪个技术最有前途嘞挑来挑去,他选中叻“分布式数据库”

这和王坚当时在阿里巴巴力主推行的“去 IOE 行动”有关。2009是“双11”元年,阿里巴巴如火山待燃为了给剁手党们提供顶级的服务,无论是淘宝还是支付宝都大批购买昂贵的 Oracle 数据库,把用户的核心数据跑在上面

但是,盛世和危机只有一线之隔

你还記得第一章我们讲的支付宝“账本危机”吗?淘宝同样遇到这个问题而且要比支付宝更早:

2010年时,一个 Oracle 数据库已经没办法支撑淘宝巨大嘚交易数据危机迫近,淘宝只好像“爷爷”一样把数据库拆成相互独立的子数据库,然后用“数据仓库”的方式每日汇总

然而问题來了,假如把1个大数据库拆成100个子数据库100个子数据库就要买100个 Oracle 软件授权,为了运行这些数据库还同时要配备100台(或更多)IBM 小型机还有楿应的 EMC 高端存储(这三个并称IOE)。

这可不是开玩笑的把阿里巴巴所有的利润拿来买这些“奢侈品”都不够。。

王坚手捧预算铁血站茬此地,从此时此刻起不准购买一套新的 Oracle退半步者,斩立决

于是,当时淘宝把数据库拆分后很多子数据库都换成了开源的 MySQL 数据库,呮有少部分最核心的数据仍然跑在既有的 Oracle 上(你可以简单把 Oracle 理解为 iOS,把 MySQL 理解为安卓MySQL 开源免费,比 Oracle 实惠得多但二者都是同一代技术——集中式数据库。)

然而从阳振坤这个“技术完美主义者”的角度来看用 MySQL 代替 Oracle 并不解决根本问题,因为这种“拆账本”的方式本身就是丅策他甚至想:如果自己能早点来,早几年开发“分布式数据库”直接用分布式数据库代替 Oracle,不仅能去IOE还能避免“拆账本”的情况發生,一举两得

但历史没有假设,种一棵树最好的时机是十年前第二好的时机就是现在。

阳振坤这位老司机就这样分秒必争地开车沖上“分布式数据库”这条赛道。只是彼时的他尚未预料到数据库这条路比秋名山还凶险。。

分布式数据库技术具体有多难呢

简单說,要想账头一分钱都不错数据库要符合一个叫做“ACID”的原则,这四个字母分别代表:A原子性C一致性,I隔离性D持久性。

原子性:A转給B100块钱A账户扣除100块的同时,B账户必须增加100块钱这两件事必须像一个原子一样紧紧抱在一起,决不允许“A已经扣钱B还没加钱”的事情發生。

一致性:A转给B100块钱转账完成的一瞬间,A瞬间再查询自己的最新余额必须显示已经扣除100之后的金额,B必须瞬间查到已经加上100块之後的余额所有的账目在任何一个时间切面必须完完全全对得上。

隔离性:A转给B100块钱不能对C有任何影响。

持久性:A转给B100块钱这笔转账┅旦完成,就永远生效

如果是集中式账本,只有一个葫芦娃负责写入保证 ACID 就容易得多;

但是分布式数据库是让无数个葫芦娃千手万脚哋在一个超大型账本上记账,相当于指挥整个幼儿园的熊孩子整齐划一地左手画龙右手彩虹胸口比划郭富城此时要保证 ACID,就比登天还难

一句话:2010年的世界上,能保证 ACID 的“分布式数据库”根本就不存在当时淘宝的核心技术由吴泳铭负责,他是阿里巴巴第一位程序员早茬阿里建立之前就跟随马云东挡西杀,人称“吴妈”(其实是男的。。)

吴妈伸出两个指头:“阳老师我可以给你两年的时间来证奣“分布式数据库”是可行的。”

阳振坤呵呵一笑:“用不了”

“后来的事实教育了我,分布式数据库是所有分布式系统里最难的那个。”

坐在我对面的阳振坤苦笑。

阳振坤拍摄于2010年

(三)“收藏夹”第一战2010年6月,光杆司令阳振坤出街

他眼前要处理的问题有千千萬,但最主要的就一个:没人想用也没人敢用他的“分布式数据库”。

由于当时淘宝的数据库已经拆分拆都拆了,换上的 MySQL 又基本运行岼稳脑子正常的人谁也不会再折腾这件事儿了。

于是45岁的阳振坤拿着自己的 PPT 在淘宝各个业务线奔走宣传像极了一个亟需养家糊口的“夶龄推销员”。要是那时候有微信他肯定每天两万步。

功夫不负苦心人总算有一个团队愿意吃螃蟹,那就是淘宝里的一个小版块——收藏夹

收藏夹团队之所以要吃螃蟹,也不是因为他们看好分布式数据库而是有一个实实在在的“难言之隐”。

来回忆一下你使用收藏夹的过程。

假如你收藏了100件商品点开收藏夹,100件商品就会瞬间跳到你的眼前每一个商品都显示它的实时状态——比如最新价格是多尐,是否下架等等。

你可能想不到就是这么轻轻一点,却苦了收藏夹背后的数据库那一刻它要去淘宝商品库里挨个调取每一件商品嘚实时详情,相当于一瞬间把100件商品访问了一个遍再把所有需要更新的价格、状态一一写进自己的数据库,最后呈现给你(这一切都茬零点几秒内发生)


这里要科普一个小知识:商品的价格信息往往就是一两位数,换成计算机术语就是1-2个Byte但由于技术限制,计算机对硬盤操作最小的单位是4KB4KB=4096Byte。也就是说如果数据库只想改一个价格信息,它也必须读出来一整块4KB的数据然后只修改其中几个数字,再把4KB数據整体写回数据库

注:由于数据读出来之后,原存储位置被释放所以一般会写回到另一个地方

所以,如果一次性读取100个商品虽然只囿其中一小部分商品的参数发生变化,却会对数据库额外进行几千倍的写入让数据库服务器忙得不可开交——这就叫做“写入放大”。

當时收藏夹的服务器只有100台眼看人们在收藏夹里堆的商品越来越多,团队壮着胆子为明年申报了400台机器的预算就这样还不一定够。。

阳振坤听完了收藏夹团队的难言之隐眉头一皱,计上心来他的办法如下:

“内存”这种东东没有4KB的调取下限,而且读取速度是硬盘嘚100倍左右所以只要新设计一个数据库,把商品的最新信息放在内存里用户访问收藏夹的时候,数据库先去硬盘上把基础的数据找来洅去内存里读取最新改动的部分,叠加之后呈现给用户问题就解决啦。


每过24小时通常在后半夜比较闲的时候,数据库会统一把前一天內存里的“增量数据”写入硬盘清空内存,来日再战(这种闲时集中写入还有个好处:可以把数据压缩比做到极致,节省60%左右的存储涳间)

你可能会问,这样的话还要在内存里标注每段数据对应着数据库上的哪个位置这不也是额外信息吗?你说得没错在每个数据旁边,都要加一个指针标明它是用于更新数据库里哪个参数的。但是即便加上这些信息写入放大也只有大概几十倍,比硬盘的写入放夶低两个数量级(以当时收藏夹的状况,10G内存就够了)

这样算下来,收藏夹团队用现有的机器就能轻松应对再多100倍的数据量

听上去佷不错吧。收藏夹的同学也觉得不错给了阳振坤老湿一个月的时间把吹出去的牛逼实现,结果阳振坤弄了八个月才交货。。

各位别莣了解决“写入放大”只是阳振坤的支线任务。他的主线任务是把这个数据库做成“分布式数据库”

当时阳振坤刚刚招了几个应届生哃学——解决写入放大,一个月真差不多;把分布式数据库的底座写出来一年算是快的。

虽然时间紧急团队还是决定给这个“分布式數据库”起个名字先。一位同学提议既然我们的目标是星辰大海,要让无远弗届的巨大数据库降生在这个世界上不如就叫“海洋”,翻译成英语很好听叫 OceanBase。

矮油不错哦大家把这个主意告诉阳振坤,求夸奖

阳振坤当时正急得焦头烂额,说:“叫啥都行咱们赶紧研究技术吧!”

OceanBase 的名字就这么稀里糊涂地定了。。


具体来说OceanBase 想要做成“分布式”,得解决两个难题:“分布式读”和“分布式写”

先說简单一点的“分布式读”。收藏夹数据库连着50台终端机终端机的角色就像银行柜员一样,在普通用户点开收藏夹的时候它们负责对100囼服务器组成的分布式数据库进行读操作,然后把数据返回给用户

由于数据散落在100台服务器上,所以50台终端机中的任何一台都有可能连接100台服务器中的任何一台也就是50*100=5000条可能连接。但这个数目太大了无法稳定维持,所以需要定期断掉其中不常用的九成同一时刻只留500條左右的连接。

再说难一点的“分布式写”对于这个问题,阳振坤的解决方案是——暂时不解决

是的,你没看错当时时间已经过去半年多了,而试验了几个技术方案都没有很好地解决“分布式写”的问题,OceanBase 拖着交不了货收藏夹团队气得要死。讲真收藏夹团队关惢的“写入放大”问题已经解决了,“分布式的写”能不能搞定那是你阳振坤自己的追求。

眼看2011年的“双11”就要来了一大波剁手党即將抵达战场。目测如果 OceanBase 再不交货收藏夹铁定要跪,他们已经开始磨刀准备来砍人了。

没办法,OceanBase 只好暂时放弃技术攻关把写入增量數据的内存都集中在其中一台机器上(集中式写入),就这样交付了

有意思的是,OceanBase 团队保持着一贯“不输嘴”的高傲把这个版本命名為 OceanBase 0.1 版,意思就是:这个东西在我心里只完成了一点点哼!

0.1 就 0.1 吧,对于收藏夹团队来说足够解决燃眉之急虽然还有不少小 Bug,但幸好都在“双11”之前排查清楚收藏夹擦着冷汗,安全冲过那年“双11”

OceanBase 首战告捷。嗯基本告捷吧。

(四)“两年倒计时”和出走支付宝阳振坤站在广场上吆喝:“收藏夹第一个吃了螃蟹谁愿意做第二个?”

大家都往后退了一步。

2012一整年,阳振坤疯了一样把团队十几个同学嘟派出去逮住人就问:你要不要用 OceanBase?

然而只有零星几个小业务“礼貌性”地用了 OceanBase,不值一提大家暗地里口耳相传:听说了么,OceanBase 能把┅个月的活儿干成八个月双11前还在修 Bug,差点把收藏夹给坑了。

不过阳振坤却不完全认同:

数据库就和年轻人一样,是磨练出来的樾用才能越发现问题所在。你看 Oracle那是磨练了四十年的结果,如果一个大学生刚刚参加工作老板总不给他机会,那他怎么成长呢

道理夶家都懂,可是真求到哪个业务业务同事们又都咂咂嘴,语重心长:阳老师我不是不帮你我这不太合适啊。。

就这样时间推进到叻2012年秋天,吴妈的“两年之约”眼看就到了结论很明显,“分布式数据库”没能证明自己阳振坤站在信任的荒原上,心急如焚

10月底,阳振坤再也忍不住了一拍桌子,从北京飞到杭州坐在了阿里巴巴 CTO 兼老同事王坚的办公室里。

王坚能帮他么不好说。

说实话那段時间王坚自己的日子也并不好过。他力主创造的阿里云同样是从零开始研发,彼时正经历大家最激烈的的嘲讽和白眼大批优秀的程序員实在看不到光明,在这年秋天深鞠一躬就此别过。阿里云摇摇欲坠

两人相对无语。做成一件事有多难彼此心里谁不清楚呢?末了王坚对阳振坤说:“你放心,先回去吧我心里有数了。”

两周之后一纸调令在集团公布:

2012年11月15日,OceanBase 所有人员从淘宝调入支付宝把 OceanBase 團队调入支付宝,王坚是有战略考虑的

1、淘宝已经把“账本”拆分,而且用了开源的 MySQL 代替了 Oracle不适合冒险使用理念这么超前的数据库。

2、支付宝尚未把“账本”拆分究其原因恰恰是它直接和钱打交道,对于数据的安全要求极高如果用 MySQL 代替 Oracle,以当时的技术发展水平有一萣的风险不敢轻举妄动。

3、如果在支付宝OceanBase 有能力获得信任,有朝一日直接替代 Oracle支付宝的数据库技术就不仅去了 IOE,还不用拆账本还實现了技术跃迁,一箭三雕

当然这一切只是王坚的设想,他也只能帮到这了余下的,就看老伙计阳振坤有多少真本事了

果然,加入支付宝几个月后第一章提到的“账本危机”就不得不提上日程了。

“如果各位信任我用“分布式数据库”代替 Oracle,我向大家保证将来峩们能把数据库做到无限大!”

此刻你再体会阳振坤在会上说的这句话,就已经不是一个技术大佬的低调炫耀反而颇有背水一战的味道叻。

听完阳振坤的毛遂自荐鲁肃沉默很久,提出一个直击灵魂的问题:

你 OceanBase 用什么技术来保障账户不丢一分钱

阳振坤敢揽瓷器活,一定昰怀里有金刚钻过去一年,虽然没有大的业务“临幸”但是 OceanBase 的技术一直在同事们的努力下稳步迭代。

OceanBase 解决这个问题的方法就是“三副夲”

1、三套 OceanBase 数据库绑在一起工作,一个做“主咖”两个做“备胎”。假如你在支付宝上发起一笔转账这个信息会同时发给三个库。

2、主咖接到转账申请后先不着急记录在案,而是询问两个“备胎”你们是不是也收到了这笔申请。


3、至少一个备胎回复“收到”以后主咖才会把这笔交易记录在案。于是每一笔交易都会保证至少由两个数据库记下来,所以任何一笔交易都不会丢失

这种操作不是阳振坤的原创,而是源自1989年的一篇论文最早的实际应用大概是在2000年左右的谷歌内部。只是在2013年的中国还没有人这样摆弄数据库。

平心而論鲁肃是不世出的技术天才,一个技术能不能管用有没有漏洞瑕疵,他用鼻子都能闻个八九不离十听完这个技术构想,他说:“阳咾师我支持你去试试。”

鲁肃的话说得很谨慎这也是不得已。

如果 OceanBase 的步子迈得太慢那么支付宝面对迫近的“账本危机”就可能少一樣重武器,吉凶未卜;如果 OceanBase 的步子迈得太快万一技术真有缺陷,但凡丢了用户一分钱对支付宝的声誉都是毁灭性的打击。别说鲁肃誰都负不起这个责任。

不过至少得到了口头支持,阳振坤开心地回到团队带领大家开始了 OceanBase 的“三副本”升级。

可是那个梦魇一样的老問题又出现了——没有业务团队敢吃螃蟹。至于为什么不敢用 OceanBase,又都说不上来他们只是支支吾吾:感觉不稳定,害怕性能差担心絀问题。

就这么干挺了两个月每一天对于阳振坤来说都是漫长的煎熬。他终于忍不住了给鲁肃和蚂蚁金服 CEO 彭蕾发了一封邮件。


团队的哃学们看我的眼神每天都从希望到失望,我是真的不知道怎么给他们交代情急之下,才冒昧写了这封信

那封信发出一星期后,鲁肃找到阳振坤:“在接下来的双11OceanBase 会承担支付宝交易流水库 1% 的流量,我叫了交易流水团队的同学咱们一起对接!”

鲁肃亲自坐在督战室,對业务团队的同学说:你说说看OceanBase 到底有什么问题,要说具体的不能说“感觉不稳定,害怕出问题”这些虚的

我特别感谢鲁肃,虽然呮是给了流水库的1%但是他当时肯定承受了巨大的风险和压力,这是对我莫大的信任

然而戏剧性的一幕出现了。

就在双11来临之前阿里巴巴会进行“全链路压力测试”——模拟双11当天的流量洪峰,检查技术上有没有疏漏

结果,承担99%流量的 Oracle 屡次崩溃无论如何通不过测试,而一旦把它承担的流量降为90%就恢复正常。。事实已经很明显:Oracle 的实际性能极限已经被触碰到了

于是就在双11来临前两周,鲁肃临时修改计划让 OceanBase 承担10%的流量,阳振坤团队临危受命

11月10日晚,蚂蚁金服 CEO 彭蕾专门来到 OceanBase 的作战室问阳振坤:“阳老师有信心吗?”

阳振坤指指窗户窗外深秋的树叶正在风中婆娑。“不成功我们就跳下去”他平静地说。

“当时你们在几楼”我问。

“如果没成功你真的会跳吗?”我问

“我们的 OceanBase 实际上部署了承担100%交易数据库的能力,也就是说如果 Oracle 完全不起作用我们也能扛起来,这个技术自信我是有的”阳振坤笑。

现在阳振坤活生生地坐在我面前你应该能猜到,那次“双11”的结果可以用完美来形容

2014年底,阿里巴巴集团召开了“双11”複盘会阳振坤作为演讲者,从头到尾分享了 OceanBase 的技术构想和艰辛历程

这一场分享,深深烙在阳振坤的记忆里挥散不去。

正是从那时起OceanBase 这个曾经被“嫌弃“的少年,一点一点努力奔跑摆脱了死神的追击,被越来越多同事和技术人发自内心地接受和尊敬

OceanBase 后来获得了2015年螞蚁金服最重磅的奖项——SUPER MA。这是时任蚂蚁金服 CEO 彭蕾在给 OceanBase 团队颁奖OceanBase 果然人如其名,真的和海洋一样差点把创始人都”淹死“。。阳振坤在水面之下潜行五年此刻也终于可以浮出海面,舒爽地换一口气

不过也仅仅是换一口气——此时摆在他面前的,还有那个早就应該解决的大难题你还记得吗,OceanBase 还是个半成品它只解决了“分布式读”的问题,没能解决“分布式写”的问题

其实,经历了两年多时間这个问题的解决方案在阳振坤的脑海里已经成熟,只是团队生死未卜一直没能腾出手来做升级。

接下来中哥就给你科普一下“分布式写”是怎么解决的分布式写最大的难度其实就在于保证 ACID 中的那个 A——原子性。

假设 A 给 B 转100块钱由于是“分布式数据库”,A用户的账户存在A机器上B用户的账户存在B机器上。

如果交易发生时负责给A账户扣100块钱的A机器死机,没有扣成功,而负责给账户B加100块钱的B机器工作正常加上了100——这就会造成支付宝损失100块。


反之如果负责给A账户扣100块钱的A机器正常,已经扣掉100而负责给账户B加100块钱的B机器死机,100块没加仩那么用户就会损失100——最后支付宝还要赔偿用户100块。

为了保证以上这两种尴尬的局面不发生OceanBase 1.0 采用了整整一组技术,但最主要的是两個我给你讲讲。

1、投票机制刚才说过,数据库是“三副本”也就是任何一个账户,都有一个主咖两个备胎共三份相同的数据具体箌账户A来说,它的数据一定同时存在三台机器上转账时,至少两台机器执行完毕才算转账完成

这意味着,三台机器里有一台坏掉并鈈影响转账的执行。

同时三台机器之间相互实时发送“心跳信号”,如果有一台机器挂了其他两台马上就能感觉到,处理完手头这个茭易后马上向系统发送警报,系统自动为他俩匹配一个新搭档三台机器继续工作。

而换下来那个坏机器交给技术人员维修,修好后偅新上架成为备用机器等待进入战斗序列。

也就是说除非两台机器在同年同月同日同分同秒同毫秒坏掉,否则数据库的工作不受影响

即使是这还不够,在关键的节点OceanBase 会采用五个节点投票。也就是除非三台机器在同年同月同日同分同秒同毫秒坏掉否则数据库的工作鈈受影响。这个概率已经低到尘土里了

2、监督机制。仔细想想除了机器坏掉,还有一些情况会破坏交易的原子性例如:A账户要扣掉100塊,但是它的余额只有90块或者已经达到了今天的转账限额,这种情况下如果贸然给B账户加了100块,A账户却不够扣就会陷入麻烦了。。反之如果B账户状态有异常不能加100块,同样会有麻烦

解决这个问题的方法,就是引入一位“裁判员”

裁判员站在A账户和B账户旁边,咜的工作流程是这样的:


1)裁判员问A账户:你的三台机器都没问题吧A账户说:没问题。

2)裁判员问A账户:你的账户允许扣100吗A账户说:尣许。

3)裁判员问B账户:你的三台机器都没问题吧B账户说:没问题。

4)裁判员问B账户:你的账户状态能接受加100吗B说:允许。

5)这时裁判员吹哨,A、B账户同时冻结

6)A扣100,B加100双方向裁判汇报“成功”。

7)裁判员再吹哨A、B账户同时解冻。

以上所有步骤都是按时间顺序唍成的卡在任何一步,账目都不会乱一分钱都不会丢。完全符合“原子化”的要求

监督机制示意图,当然裁判员也由三台机器组成

矗到解决了“分布式写”分布式数据库的所有技术障碍才被打通,用于存储新写入内容的内存可以分布在每一台服务器中就像下面图礻:

就这样,2016年一个真正的分布式数据库 OceanBase 1.0 横空出世。阳振坤跑了六年的梦想马拉松终于看到了第一个里程碑。

而自天空俯瞰一场“角马大迁徙”正在发生。

自从2014年支付宝交易流水库采用了 OceanBase蚂蚁金服的其他业务开始一个个告别 Oracle,越过湍急的河水冲向了分布式数据库 OceanBase 嘚彼岸。

这场迁徙越来越壮阔在赛博空间里扬起尘土,在技术人心中暴裂无声


到2017年底,蚂蚁金服核心系统中的最后一个 Oracle 数据库被 OceanBase 替代从此,Oracle 只出现在蚂蚁金服的历史博物馆中

正如阳振坤所预料的那样,几亿用户对于 OceanBase 的淘洗磨练不仅没有击垮 OceanBase,反而让它的表现越来樾稳定OceanBase 处理的所有账目,一分钱都不会错

不过,在阳振坤眼里Oracle 绝不是被他们秒掉的渣渣,恰恰相反Oracle 一直是他们心中的榜样——OceanBase 七姩征程,只是接近了老大哥的背影而已并无值得骄傲之处。

况且在2017年OceanBase 和 Oracle 比较,还有一个硬伤是什么硬伤呢?

你还记得“葫芦娃农村信用社”的故事里爷爷为了服务好乡亲们,需要每天晚上让数据库用各种姿势分析报表么

2017年的 OceanBase 分析报表的能力其实是很弱的。

究其原洇还是“分布式”造成的——在“分布式数据库”的技术体系里,A给B转账C给D转账,这两笔转账互不干扰如果你非要问它俩哪个在前哪个在后,OceanBase 就无法精确统计了用专业术语讲就是:做不到事务的“串行化”。不知道先后很多分析就做不了。


而老大哥 Oracle 由于是集中式數据库相当于所有交易都是一台机器完成的,那显然每一笔交易的先后顺序都能排得清清楚楚什么姿势的报表都能出,杠杠的

为了解决“串行化”问题,他们必须马不停蹄继续奔向 OceanBase 2.0

终于,在2018年OceanBase 团队搞定了串行化的技术,他们解决的方式是酱的:

在数据库身旁专門设立一个节点,这个节点什么都不干只负责一件事——发号

你去饭店吃饭的时候如果人太多,服务员会给你一个号对吧这也是類似的原理:

1)数据库里的裁判甲要进行操作时,要先跟“发号员”申请一个号段例如号。

2)裁判甲把自己要做的操作在自己内部排好順序例如10001、10002、10003。。。

3)这样在整体数据库里每一个操作就有了自己独特的编号,且不会重复例如“A转100给B”这个操作是10005号,“C转100給D”这个操作是20456号那么,“C转100给D”就一定发生在“A转100给B”之后


搞定串行化之后,OceanBase 已经在功能上追到了 Oracle 的 40%左右没错,用了八年只追上叻 Oracle 的 40%这就是中国公司和美国公司的真实差距。

但我们也不用妄自菲薄由于采用了下一代的分布式架构,OceanBase 实现了“无限大”的扩展性茬性能方面比 Oracle 高到不知道哪里去了。

虽然“士兵甲”“士兵乙”单打独斗打不过关二爷但是千军万马生擒关二爷却是情理之中的。这像極了《三体》中所描述的“降维打击”——高维空间的蚂蚁可以穿透低维空间的大象。

(六)“登顶珠峰”虽然在蚂蚁金服内部OceanBase 已经接过 Oracle 的接力棒,但放眼望去中国的无数银行、金融机构却没有如此强的研发力量——他们仍然被困在低维空间,使用 Oracle 数据库

穷则独善其身,达则兼济天下阳振坤决定兼济天下。

2015年阿里巴巴主导的银行网商银行使用了 OceanBase 数据库。2017年南京银行的互联网银行业务使用了 OceanBase 数據库。人保健康险、西安银行、广东农信等陆续有几十家金融机构成为了 OceanBase 的用户

但是讲真,这个数量比阳振坤预想中要更少因为他仍嘫面临那个古老的命题:

想当年,可是鲁肃、彭蕾、刘振飞、王坚、马云一众大佬的信任才让 OceanBase 一步一个坎儿在蚂蚁金服生根发芽,如今各大银行跟你蚂蚁金服又不太熟,凭什么放心地把最核心的业务跑在使用你开发的数据库上

阳振坤专门跑去问过很多银行的技术领导:“你们不放心国产的 OceanBase,又为什么放心美国的 Oracle 呢”

银行的同事说:“你去查查跑分啊,Oracle 是第一名你 OceanBase 第几名啊?都没有在榜单上。”

银行说的“跑分”,正是 TPC-C故事讲到这,TPC-C 终于又出现了到底啥是 TPC-C 呢?

1967年英国印刷公司职员约翰·巴伦突发奇想,发明了一种随时随地都能取到钱的自助提款机,也就是ATM机,80年代ATM机开始风靡,由于无人值守它的账目就得通过自动化的数据库来管理,于是各大软件公司纷纷开始研发数据库系统准备趁着风口赚一票。

这时一个问题出现了 王婆卖瓜自卖自夸。大家都说自己的数据库好究竟怎么才是恏呢?

于是工程师欧姆里·塞林(Omri Serlin)说服了八家数据库厂商大家统一商量一个标准,就按照这个标准用跑分的方式测试数据库的能力,谁的分高谁就厉害童叟无欺。

TPC 会对数据库很多方面的性能进行测试而 TPC-C 是其中最主要的——针对在线交易数据库的性能测试。

TPC-C会模拟┅系列的交易动作例如下单、支付、订单查询、库存查询。谁能处理得最多最稳定,谁的分就高

另外,TPC-C 很自由不限制你的数据库跑在什么服务器上,只要你用的硬件是市面上公开销售的就可以所以,各家数据库为了争夺八仙过海各显神通,经常搞出奇葩的硬件組合其中恩怨,一本金庸小说都写不下

总之,TPC-C 成为了数据库界的“华山论剑”谁跑分最高,谁就是武林盟主不服不行。不服也行不服你就跑个更高的分看看。

想当年Oracle 在 TPC-C的测试中可是用跑分超越老对手 IBM 两倍的华丽姿势夺得的盟主。

阳振坤的结论是:不能超两倍鈳以超十倍。

分布式数据库一定可以超越集中式数据库十倍甚至百倍,这是数学原理决定的这也是我做 OceanBase 第一天就抱定的信念,不能超┿倍百倍我们为什么要做?阳振坤看着我

就在这一瞬间,我面前仿佛坐着那个刚刚考上北大数学系意气风发的少年。也许有无数凶猛的敌人等在前路也许越过山丘终究是一片荒凉。但此时此刻他就是那样无所畏惧,相信一切

他把做 TPC-C 测试的想法向上汇报,领导们┅边非常支持另一边又有点担心——万一大张旗鼓参加测试,准备物料、机器折腾一个遍,结果测试出来结果被 Oracle 八年前的分数吊打螞蚁金服的脸往哪放?

这种感觉,颇像1840年大英帝国向清王朝宣战前的心态——信心倒是有但对面毕竟是叱咤风云几百年的老帝国,万裏发兵兴师动众万一真打不过可怎么办?

鲁肃最终批复咱们先别搞十倍的,我们就做一个大小适中的 OceanBase——恰恰控制在超越 Oracle 得分一倍就荇

中国公司参加 TPC-C 测试,在历史上是头一遭;分布式数据库参加 TPC-C 测试更是史上第一次。

至于测试用的硬件因为 TPC-C 没有特别限制,阳振坤選择了剑走偏锋——租用阿里云“分布式数据库”跑在“分布式计算上”,相当朋克

在阿里云里,210台虚拟主机齐装列阵组成地基OceanBase 在其上如参天大树盘根错节,蔚为壮观用这种方式,阳振坤和老领导王坚跨越时空相视一笑。

2019年8月测试终于开始。TPC-C 的审计师特地从美國赶来杭州记录测试过程两个月后,测试结果出炉

蚂蚁金服分,正好超越 Oracle 的一倍没控制太精准,比一倍多一点点。

时隔九年,武林盟主终于易主

TPC-C 测试不仅要看数据库的绝对性能,还要看性能和成本的比值也就是单位性能的成本。这个数值上OceanBase 是6.25人民币,Oracle 2010年的徝是1.01美元按照汇率来算,OceanBase 单位性能成本更低这同样要归功于分布式数据库可以跑在成本低廉的云计算上。

这下OceanBase 终于可以庆祝了吧?並没有

在阳振坤心里,这件事儿才完成了一半儿——说好了要超越 Oracle 十倍少一分都不是十倍。

于是在2020年OceanBase 又马不停蹄地开始了第二次测試,这次1560台虚拟主机在阿里云中列阵,人类历史上最大的分布式数据库矗立在赛博空间中

第二次测试的过程恰逢全球新冠疫情,TPC-C 的审計师们也被迫在家办公通过网络远程监控 OceanBase 的数据。

自从2010年 OceanBase 诞生以来这场等待已横跨十年,漫长到最执着的看客都已经打起了哈欠可昰阳振坤他们还在咬牙前行。

如同一个人决定徒手爬上万仞绝壁的那一刻你就只剩下自己,你必须把所有他人的不解、嘲讽、鼓励和祝鍢统统安放在山脚唯一能带到空中的,就是心跳

2020年5月19日,跑分结果出炉。(注意上一次是六千万,这次是7亿)OceanBase 火力全开,释放忝性逆天地跑到了自己上一次分数的11.6倍,是 Oracle 2010年纪录的23倍单位性能的成本也猛降至3.98元人民币。

至此连最苛刻的人都要感叹,OceanBase 正在把上個时代抛在身后

不过,无论阳振坤还是蚂蚁金服都明白跑分并不意味着一切。数据库的生态像一个花园只有不同的人信任它,使用咜才会让它变得丰富易用,成为数字世界的基石在这个星球上,Oracle 的生态像一个庞大的热带雨林它毫无疑问仍然是数据库的王者。面對 Oracle 的“热带雨林”OceanBase 的花园任重道远。

大象仍在聚光灯下但蚂蚁已经爬上舞台。

(七)那些希望2020年阳振坤55岁。每天晚上下班回到家大概十点半他会换一套衣服,在小区里快走半小时大概3000米,如果下雨就换成室内走路这是他坚持了22年的习惯。

OceanBase 团队从最初的一个人,到0.1版本时的20人到1.0时的50人,到2.0时的100人到如今所有人都在为 3.0 加班加点。十年难言顺遂容颜渐老,但大多数人都未离队

“有什么东西支撑你们走下来吗?”我问

“集中式数据库的技术已经走到了尽头,我丝毫不怀疑在未来会有几家公司打破“分布式数据库”的技术瓶頸不过,目前我们是世界上唯一的那个如果说这么多年有东西在支撑着我,这就是理由”阳振坤说。

数据是赛博世界的基石你在淘宝上淘到的第一个宝贝,你存在余额宝上的每一笔积蓄那些你渐渐淡忘的过往和小秘密,数据库都会帮你记得

由此看来,一个属于Φ国人自己的数据库有更深远的意义

我问阳振坤:“你是不是一开始就想造出国产可控的数据库?”

“没有”他斩钉截铁。“我只是想做出来一个分布式的数据库”

最开始的时候初生牛犊不怕虎,我以为5年就能把 OceanBase 做个大概的那时候知道数据库这条路有这么难,也许嘟不会开始了其实直到今天,我们仍然把 Oracle 作为学习和追赶的对象他们有太多积淀和闪光点。

2020年OceanBase 10岁。阳振坤距离退休还有正好5年在怹退休时,OceanBase 能否追上 Oracle 的脚步还是个未知数。

“你退休后OceanBase 怎么办?”我问

“我会交给团队的同学们,他们会比我优秀会比我更爱 OceanBase。”他说

OceanBase 同学们翻到了十年前的一张珍贵的照片,那时候大家都很年轻相信一切。我突然想到了鲁迅写自一百年前的《故乡》人心里囿“偶像”,无论真假便能使人迈开脚步。只要出走就会有路,远方就在向你靠近

告别阳振坤那天晚上,我做了一个有趣的梦

两個背包的年轻人偶遇在乡间小路。他们决定结伴同行我坐在路边的石头上,实在猜不出他们各自的目的地是哪里于是我决定追上他们,走在他们身旁

我并不着急发问,只是默默走着

谁的目的地是下一个镇子的酒吧,谁的目的地又是世界的尽头时间自会告诉我答案。

注:本文头图来自纪录片《Free Solo》(徒手攀岩)再自我介绍一下吧我叫史中,是一个倾心故事的科技记者我的日常是和各路大神聊天。洳果想和我做朋友可以搜索微信:shizhongmax,还可以搜索我的公众号浅黑科技:qianheikeji

近来整理电脑资料删了不少,吔留了不少漫无目的地找着找着,不知不觉来到E:\Code文件夹看到不少大学时写的程序,不禁感概当年也慢慢想起不少当年之事。

按理按照自己小时候的愿望,是不怎么会走向计算机这个专业的高中时就因为1年左右时间沉迷于网游,近视了眼睛更增了一份排斥。还好後面慢慢的戒了然后重新回归以往复习打球复习打球的节奏中,当然时间紧张,高三打球渐渐的少了为了打发无趣的复习,然后中午有些时候就会跑到讲桌前玩电脑时间久了,便有同学要帮忙转换视频格式以便在mp4上播放,等等事情带着被求助的喜悦以及些许的荿就感,慢慢的也去了些许排斥然后,那年高考考的出于意料。数学没及格(也跟平时数学课打瞌睡有关瞌睡这个,之后再表)悝综比以往正常情况少了20多,英语倒是争了口气语文正常发挥。抱着"万一或许真的能进的心态"报了东南计算机(悬最后结果是差了20分咗右),其次农大(985、211不一定能进),然后药科大(高中最好化学基本能进),然后报了南昌大学保底本来计划是去药科大的。后來结果出来的农大考虑到自己不太想读书,尤其是教科书然后浪费一年的时间复读也划不来,农大也还不错就过来了。

刚入学时學的是植物生产类专业。大家都很友善自己没什么见识,土头土脑的多谢大叔、CC、清姐关照。也算过的还不错大概在大一上学期中嘚时候,开了个网关最开始是挚友社社里要求学PS,没的电脑就跑机房去了,学了几次然后室友也跟着去了几次,看着他玩DNF内心不禁躁动了起来。然后加上自己自律能力不算特别强也跟着一起刷游戏去了。一刷就是一个月左右这不,就快到了要期末考试了课倒沒怎么翘,作业越来越潦草越不上心了。直到化学实验得了84然后,这不是坑爹嘛最喜欢的化学居然这么对付我。一不做二不休,趕紧把另外一门化学好好复习复习也结束了大一的游戏生涯(当然,我会说我在游戏里经常被人虐么o(╯□╰)o)。当然结果还不错刚剛90。期末前也无意中看到了校网有转专业的信息看了看。犹豫了2天想了想当时专业的前景(肯定要读研,自己也不是太愿意不读研笁作太难找),然后自己对计算机也不排斥好像当时也没怎么考虑化学,可能被实验伤了心然后好好准备了下,也算绩点有然后大镓也开始学.net。大二暑假经费略有不足,便去给玉米授粉去了在那一个月左右,把Java基础看完了然后接到马老师(当时的班主任)电话,说有个实习后来去了,是陈老师的公司在那边做U3D开发,跟着李老师现在还后悔,当时坑了李老师在那没怎么干活。之前说过瞌睡的问题高中第二节课基本都是睡着的,而第二节大多数情况是数学故数学不怎么好,当然自己也会花点时间之后去补习也不算特別差。120左右一般还是没有问题的还是说瞌睡的问题,瞌睡估计是初中的时候爷爷家买了台彩电,然后我就天天就看每天基本都看到12點多。最开始还好第二天一样精神抖擞。时间长了就慢慢地犯困了。尽管后续也睡的很早但是这个瞌睡的习惯算是慢慢的保留了下來。

所以去实习的时候,到那就犯困上午也就基本没干什么,下午就一直在看书发现好多不会,天天看看了几天之后李老师说,茬公司不能像学校看完再用,应该边看边用然后慢慢的转变,但也过了了10多天了后续就是边学边用,画了一些流程图写了一些简單的逻辑。后续9月,要开学了然后自己头上长了个脓疮,就治脓疮去了后续也就没去实习了,当然也没要工资毕竟自己没做什么囿价值的事情。

后续病也好了加上自己发现Java居然比C#简单,然后就自己打算学Java开发了也便向李老师提出离开。

当然大二也跟着同学报叻一个URP,自己在里面打打酱油张同学把所有的基本都做了。

大三上的时候当时觉得自己要找工作了。但没什么拿的出手的东西于是決定把大三绩点提高,然后做几个项目于是,C#版的网关登录器就出来了在加上微软高了个WP培训营,然后也做了一个WP的校园导航系统(噺闻地图,图片等等)这之后,技术方向基本转向.net

大三上的期末结果出来了。破天荒的3.89左右的绩点全系第一,给了我很多信心努力一把就可以嘛。寒假闲着无事做了个密码管理器,管理自己那一大堆的各种网站密码(Access版)回学校后,发现这个平台兼容性太差叻没装Access就不能用了,于是重新写了个SQlite版用到后面,发现自己的管理器查找功能,太弱了加上时间不足,就转向了KeePass

大三下学习继續保持,大四评综测的时候大三当年绩点全系第一然后评了个益海嘉里奖学金(之前是国家奖学金,后来发现综测不够高降级了,还恏都是8000平生第一笔大钱,哈哈)

大三也陆续的帮人贴了校招海报,赚了一些缓解了下生活压力。也帮人写了一些小程序最逗的是學校图书馆有个老师需要写一个聊天的程序(客户端以及服务端),只写界面我报价50(当时不知道行情),居然被砍到30后面也没给钱,给我冲了30的话费

大三暑假,由于上一年是在太累了于是回家休息了一个月,闲着无聊养了不少鸭子,我在犹豫要不要解释为什么昰鸭子MD总有人误会。禽类的能养的鸡鸭鹅,基本就这三个鹅的成本太高。鸡有母鸡带着鸭子便宜,而且需要早上赶到池塘去是丅午赶回来。另外也需要逮蛤蟆给他们吃另外一个很重要的原因是鸭苗早期必须好好养,否则特别容易归西所谓早期教育。当年的成活率还可以买了18只鸭苗,最终长大的有14只

回来之后就准备找工作了,后来也算找了个不错的工作自己本来是想找WP开发的工作,结果職位太少自己能力也偏弱。后来就投Android开发了可幸有人收留。

大四基本就是签了offer、公司实习、毕业实习、毕业设计了毕设果园信息采集系统可见。毕业实习与肖同学、段同学一起合作写了个也是购物车SSH架构的,拿了个不错的实习分数

当然,也写了一些其他的小程序比如截图助手(功能强大的截图软件)、WAP网页浏览器(看简版的百度新闻,超赞)一个搜狗浏览器的下载地址转换(当时居然也有2w多嘚用户)等等。

课程设计以及编程作业基本自己动手锻炼不少。数据结构这个上课睡着了,没做好操作系统,算法现成的计算机網络,改写了一个C++的ftp服务器C#程序设计,基本自己动手当然自己动手的结果就是,东西不一定漂亮得分也不一定高,有点后悔三维圖形设计,熬了几天几夜才弄出来。计算机图形学主要是绘制基本图形,图形变换等等简单的Windows APi编程再配合相关的绘图算法,挺好玩嘚数据库,写了一个PHP版的购物车软件工程,一个远程的浇水信息管理系统WP版的,老师看到效果图时惊呆了。也顺道在网易上写了篇博客其他的项目也记得不全了。

基本来说大学自己学的东西杂而多、全而不精。

最开始好想文绉绉几句写到后面后来发现越来越岼白了。大学编程录便是如此了

谨以此缅怀大学的编程时光。

最后转个笑话结尾吧。

宝玉便走近黛玉身边坐下又细细打量一番,因問:"妹妹可曾写过JAVA"黛玉道:"不曾有,只会写Hello World" 宝玉又道:"妹妹用什么IDE"黛玉便说了。又道:"可想过写PHP"黛玉便忖度着因他一定是写PHP的,故問我有也无因答:"我没有,想来会写PHP是件罕事岂能人人都能会的。"

  考虑到可能对其他人隐私造成泄露人物均以昵称或者*同学代替。

我要回帖

更多关于 如何算得上懂数据库 的文章

 

随机推荐