第二十三章 论道
推荐阅读:危险哨兵驯养手册、升棺发财死老公、咸鱼修仙,躺平飞升、漂亮炮灰她和气运之子he了[快穿]、深埋爱意[追妻火葬场]、汴京春闺、月亮不坠落、我是限制文男主的继妹、和暗恋男神结婚后、[日娱同人] 东京少女心事、
陈哲跟著站起来,目光扫过那群人。
走在最前面的是一个三十多岁的白人男性,个子不高,穿一件洗得发白的蓝色卫衣,头髮有点长,扎了个小揪在脑后。他手里拿著一个保温杯,杯身上印著纽约的logo,边缘的漆已经磕掉了好几块。
“麦克!”那人走近,伸出手和麦克击了个掌,“好久不见。”
“群主。”麦克笑著指了指旁边的陈哲,“这是陈,新来的,我拉进群的。”
群主的目光落在陈哲身上,从上到下扫了一眼,然后伸出手。
“欢迎。叫我本就行。群主是大家开玩笑叫的。”
陈哲握住他的手。本的手掌很厚,指腹有茧,不知道是敲键盘留下的还是別的什么。
“陈哲。”
“中国人?”本问。
“对。”
本点点头,没再多问。他转身朝后面那群人招了招手:“都过来吧,找个地方坐。”
一群人往长椅那边移动,有人坐下,有人靠在栏杆上,有人乾脆坐在草坪上。陈哲粗略数了数,加上他和麦克,一共十二个人。
本清了清嗓子。
“今天叫大家出来,没什么正事,”他说,“就是最近群里太安静了,想让大家见见面,聊聊天。都是干这行的,平时对著屏幕,也该出来透透气。”
有人笑了一声。
本从口袋里掏出一个笔记本,翻了翻。
“先介绍一下自己吧。从我开始。本,做youtube的,频道叫『码农日记』,主要讲后端和资料库。干了五年,还在干。”
他把笔记本递给旁边的人。
那是个非裔女生,二十多岁,厚嘴唇,戴一副圆框眼镜,扎著马尾。她接过笔记本,看了一眼,然后抬起头。
“莱拉,群里的『爱来自冒险家协会』,是一家游戏公司的程式设计师。”
隨后是一个重度近视镜的华人男子,淡淡地说:“书虫。”
此外均是一群美国白人。
陈哲的目光也在这群拘谨的成年社畜之间游移。
美国高级程式设计师中黄种人和白种人的数量大约各占一半,但是在目前这种低端局里,白人还是占了巨大优势的,毕竟是本土主要民族。
陈哲看向群组暱称为书虫的华人男子,而对方的眼镜上起著雾,也看不清对方的表情。
现场除了自己和对方,还有那个叫莱拉的黑人女生以外,其他人的手里都拿著一部高端牌子的笔记本电脑,诸如macbook pro、戴尔、rog、razer、lg gram系列。
陈哲不动声色地抖了抖自己的背包,里面那台老式的二手thinkpad联想,看上去倒是和这些人有点格格不入了。
不过好在陈哲拥有lv2的计算机技术。
笔记本继续传。
“汤姆,后端,主要写go。”
“莎拉,前端,目前在自由职业。”
“戴夫,devops,最近在搞k8s。”
……
不久,十二个人介绍完,本拍了拍手。
“行,都认识了。接下来自由活动,想聊技术的聊技术,想聊八卦的聊八卦。十二点的时候我请大家喝咖啡,楼下有家店不错。”
本说。
人群散开,三三两两地聚成几堆。
陈哲站在原地,目光扫过四周。阳光已经彻底升起来了,河面上的碎金晃得人眼睛发酸。远处有几只海鸥在盘旋,叫声尖锐,像是在爭夺什么。
他注意到那个叫书虫的华人男子独自站在栏杆边,背对著人群,望著河面。眼镜上的雾气已经散了,但他没有要加入任何一个小团体的意思。
陈哲想了想,没有走过去。
“陈,对吧?”
一个声音从旁边传来。
陈哲转头,看见那个叫汤姆的白人男生走过来,手里拿著一台macbook pro,屏幕还亮著。
“对。”
陈哲整理了一下自己的衬衣,说。
汤姆点了点头,在他旁边的栏杆上靠下来。
“我也是社区大学出来的,”他说,“皇后区的拉瓜迪亚社区学院。转了学,最后在纽约城市大学毕的业。”
他顿了顿,笑了笑。
“这条路走得通,就是慢一点。”
陈哲没说话。
开盒!
陈哲从来没有透露过自己的身份,但是遇到有心之人,就是直接开了。
“改天得消除一下行踪了……”
陈哲眸光深思,对於程式设计师来说,想要套取到他人的信息是一件容易事。就算是那些专精於网际网路人肉搜索的青少年,在这方面爱好也敌不过兴趣。
就在这时,汤姆的声音又传来。
“你现在写什么语言?”
“python。”陈哲答。
汤姆頷首,目光落在河面上。
“python挺好入门的,”他说,“不过后端的话,迟早得学go或者java。看你以后想走什么方向。”
陈哲刚要开口,身后传来本的拍手声。
“都过来一下!”
人群重新聚拢。本站在中间,手里不知从哪掏出一块白板,大概a3纸大小,上面贴著一张纸,纸上写著一行字。
陈哲走近了才看清那行字是什么。
“设计一个url短连结服务”
本把白板举高了点,让所有人都能看见。
“来,玩个游戏。”他说,语气里带著一点兴奋,“这玩意儿大家都不陌生吧?短连结服务,bitly那种。给你一个长url,生成一个短码,访问短码的时候重定向到原地址。”
他顿了顿,目光扫过人群。
“规则很简单:每个人三分钟时间,想一下怎么设计。可以討论,也可以自己想。三分钟之后,每个人轮流说自己的思路。”
有人笑了一声:“面试来了。”
本也笑了:“面试?没意思。这是游戏,隨便聊。谁说得有意思,我请他喝咖啡——不是楼下那种,是正经的第三波咖啡。”
“更何况,这种事我们之前的聚会也做过,不是吗?”本嘴角上扬。
人群里响起几声口哨。
陈哲站在原地,目光落在那行字上。
url短连结服务。
简单来说,url短连结服务就是一种將冗长的网址(url)转换为简短地址的工具。当用户点击短连结时,会被自动重定向到原始的长网址。
这东西他见过,用过,但从来没想过怎么设计。
三分钟。
他开始想。
……
最开始想到的是最简单的,一个资料库表,两个栏位,长url和短码。用户提交长url,生成一个隨机字符串,存进去。访问的时候查一下,重定向。
但这样太简单了。隨机字符串碰撞怎么办?重复的url要不要復用同一个短码?访问量大的时候资料库扛得住吗?
过了半分钟,他想到了哈希。把长url用md5或者sha256哈希一下,取前几位作为短码。但哈希衝突怎么办?再加个盐?还是用布隆过滤器先判断一下?
隨后,陈哲想到了缓存。
高频访问的短码可以放redis里,不用每次都查资料库。但缓存失效怎么办?缓存雪崩怎么办?
再接著,他想到了分布式。如果服务做大了,单机扛不住,得用分布式id生成器。雪花算法?还是用资料库自增id然后取模?
一分钟,他想到了更多。
短码过期怎么办?自定义短码怎么支持?统计点击量怎么实现?防攻击怎么搞?
……
三分钟到。
本的拍手声把陈哲从思考里拉出来。
“行,时间到。”本说,“谁先来?”
人群安静了一秒。
“我来吧。”
说话的是汤姆。他往前站了一步,清了清嗓子。
“最简单的设计:一张表,id自增,长url栏位,短码栏位。短码可以用id的62进位表示,0-9a-za-z,一共62个字符。id从100000开始,保证至少六位短码。”
他顿了顿。
“优点是简单,不会衝突。缺点是自增id容易被遍歷,可以加个隨机偏移量。访问量大的时候加缓存,redis存热点数据。如果要做大,分库分表,按短码哈希分片。”
他的语气中充斥著自信,毫无疑问这是个比较优越的答卷。
本点了点头,没评价。
“下一个。”
莱拉站出来。
“我会用哈希。长url做md5,取前六位。如果衝突了,加个盐重新哈希,或者用布穀鸟哈希的思路。优点是短码隨机,不容易被猜。缺点是要处理衝突,性能稍微差点。”
本还是点了点头。
“下一个。”
接下来几个人轮流发言,思路都大同小异——资料库、哈希、缓存、分片。有人提到了用nosql,有人提到了用消息队列做异步统计,有人提到了用cdn加速。
陈哲一直不语。
本的视线最后落在他身上。
“陈,你呢?”
所有人的目光都转过来。
陈哲沉默了两秒。
“我想到的跟大家不太一样。”他说。
本的眉毛挑了一下。
“你可以说来听听。”
陈哲往前走了一步,站在白板旁边。
“大家说的都是存储和查询的逻辑,我换个角度——成本。”
他顿了顿。
“短连结服务最烧钱的是什么?不是伺服器,不是资料库,是流量。每次访问都要302重定向,每次重定向都是一次http请求。如果服务做大了,每天几亿次访问,光是流量钱就能烧破產。”
人群安静下来。
“所以我会在重定向之前加一层cdn。”陈哲继续说,“短码的访问路径先走cdn,如果cdn有缓存,直接返回重定向响应,不回源。缓存时间可以设长一点,比如24小时。这样99%的流量都被cdn扛住了,源站只需要处理缓存未命中的请求。”
本的眉头微皱。
陈哲继续。
“然后是短码生成。大家说的哈希和自增id都有问题——哈希有衝突,自增id太规律。我会用预生成的方式:启动一个服务,提前生成一批短码放在队列里。用户来的时候,直接从队列里取一个分配出去。”
“这样生成短码和分配短码解耦了。生成服务可以用雪花算法保证全局唯一,分配服务只需要从队列里pop。就算分配服务掛了,队列里的短码还能顶一阵……”
“然后是资料库。短码和长url的映射关係可以存mysql,但高频访问的短码要放redis。如果要做大,可以按短码前缀分片,比如0开头的放一组,1开头的放另一组。”
“最后是监控。每个短码的访问量要统计,但不能影响主流程。可以用消息队列,异步写日誌,然后离线分析。”
他说完了。
人群安静了几秒。
本盯著他,表情有点奇怪。
麦克站在人群后面,手里的咖啡杯停在半空中,眼睛瞪得比刚才大了一圈。
“你……”麦克张了张嘴,像是想说什么,但又咽了回去。
汤姆第一个开口。
“cdn那层,”他皱著眉,“重定向响应能缓存吗?”
“能。”陈哲说,“302重定向也是http响应,只要设置cache-control头,cdn就会缓存。用户访问短码的时候,cdn直接返回302,连源站都不碰。”
汤姆沉默了两秒,然后点了点头。
莱拉在旁边喃喃自语:“预生成队列……这个思路倒是第一次听说。”
本的眉头舒展开来。
他盯著陈哲看了几秒,然后笑了。
“有意思。”
他把白板放下,拿起保温杯喝了一口。
“你在哪家公司实习过?”
“没实习过。”陈哲说。
本愣了一下。
“那你在哪干过?”
“无可奉告。”
本的表情有点微妙。他把保温杯放下,目光在陈哲身上转了一圈,最后落在那台老旧的thinkpad上。
沉默了两秒。
“行。”本说,“我记住了。”
他没再多说什么,转身朝人群挥了挥手:“走吧,喝咖啡去。楼下那家店不错,我请。”
人群开始往出口移动。有人还在小声討论刚才那个设计,有人已经开始聊別的话题。
陈哲站在原地,没动。
麦克走过来,在他旁边站定。
“小子,你……”麦克的声音压得很低,“你从哪学的这些?”
陈哲看了他一眼。
“网上。”
麦克盯著他看了几秒,然后摇了摇头。
“我拉你进群的时候还以为你是个萌新,”他低声说,“结果你他妈是个扮猪吃老虎的。”
陈哲没说话。
麦克拍了拍他的肩膀。
“走吧,喝咖啡去。”
……
pier 57楼下有一家叫“blue bottle”的咖啡店,蓝白相间的招牌,门口排著七八个人。本带著一群人走过去,直接推门进了店里——他显然是熟客,店员看见他,点了点头,指了指角落里的几张空桌子。
十几个人分散坐下。本去柜檯点单,回来的时候手里拿著一沓小票,一张一张分给在座的人。
“自己点的自己拿。”他说。
陈哲拿到的是美式,黑咖啡,不加糖不加奶。他端起来喝了一口,苦的,但能接受。
莱拉坐在他旁边,手里拿的是一杯拿铁,奶泡上面画著一颗心。她盯著那颗心看了两秒,然后用勺背把它搅散了。
“hello?陈哲。你那个设计,”她忽然开口,“预生成队列那个思路,是从哪学的?”
陈哲转头看她,思索了一会儿:“学校竞赛。”
莱拉沉默了两秒,然后点点头,没再追问。
对面坐著书虫。
那个华人男子从刚才开始就一直没说话,只是坐在角落里,面前放著一杯冷萃,冰块已经化了一半,他没动。他的眼镜片上又起了雾,不知道是咖啡的热气还是別的什么。
陈哲的目光落在他身上。
书虫似乎感觉到了什么,抬起头。
两个人的目光在空中碰了一下。
书虫没说话,低下头,继续盯著那杯冷萃。
陈哲收回目光。
本端著一杯拿铁走过来,在陈哲旁边坐下。
“你那个设计,”他说,语气比刚才轻鬆了一点,“说实话,有点出乎我意料。”
陈哲没说话。
“cdn那层,”本继续说,“一般新人想不到。预生成队列那个,更不是新手能想到的。”
他顿了顿,喝了一口咖啡。
“你真没实习过?”
“没。”
本盯著他看了几秒,然后笑了。
“行,我不问了。”
他站起来,朝其他人挥了挥手。
“一点钟我还得去剪视频,先走了。你们聊。”
他走了。
人群渐渐散开。有人起身去柜檯续杯,有人走到门外抽菸,有人凑在一起聊技术。陈哲坐在原位,盯著杯子里黑乎乎的液体,脑子里不知道在想什么。
麦克走过来,在他旁边坐下。
“感觉怎么样?”
陈哲想了想。
“还行。”
麦克笑了笑。
“本那人对新人一般不怎么上心,”他说,“但他刚才多看了你几眼。这是好事。”
陈哲点点头,没说话。
窗外,阳光照在哈德逊河上,波光粼粼。一艘卡其色观光船慢悠悠地驶过,船上的人很小,看不清在干什么。
“下午有什么安排?”麦克问。
“回去。”陈哲说,“写代码。”
麦克点点头,站起来。
“行,那我也不留你了。群里聊。”
他拍了拍陈哲的肩膀,转身走了。
陈哲抿了一口咖啡,这咖啡是蓝瓶咖啡的一类,以精品单一產地咖啡豆和新鲜烘焙著称。
陈哲实际上回去是不可能写代码的。
毕竟他其实根本不是程式设计师。
他倒也没有在这里留多久,二手thinkpad放在背包里没拿出来过,回头换乘了几次纽约地铁,就回了布鲁克林区。
走在最前面的是一个三十多岁的白人男性,个子不高,穿一件洗得发白的蓝色卫衣,头髮有点长,扎了个小揪在脑后。他手里拿著一个保温杯,杯身上印著纽约的logo,边缘的漆已经磕掉了好几块。
“麦克!”那人走近,伸出手和麦克击了个掌,“好久不见。”
“群主。”麦克笑著指了指旁边的陈哲,“这是陈,新来的,我拉进群的。”
群主的目光落在陈哲身上,从上到下扫了一眼,然后伸出手。
“欢迎。叫我本就行。群主是大家开玩笑叫的。”
陈哲握住他的手。本的手掌很厚,指腹有茧,不知道是敲键盘留下的还是別的什么。
“陈哲。”
“中国人?”本问。
“对。”
本点点头,没再多问。他转身朝后面那群人招了招手:“都过来吧,找个地方坐。”
一群人往长椅那边移动,有人坐下,有人靠在栏杆上,有人乾脆坐在草坪上。陈哲粗略数了数,加上他和麦克,一共十二个人。
本清了清嗓子。
“今天叫大家出来,没什么正事,”他说,“就是最近群里太安静了,想让大家见见面,聊聊天。都是干这行的,平时对著屏幕,也该出来透透气。”
有人笑了一声。
本从口袋里掏出一个笔记本,翻了翻。
“先介绍一下自己吧。从我开始。本,做youtube的,频道叫『码农日记』,主要讲后端和资料库。干了五年,还在干。”
他把笔记本递给旁边的人。
那是个非裔女生,二十多岁,厚嘴唇,戴一副圆框眼镜,扎著马尾。她接过笔记本,看了一眼,然后抬起头。
“莱拉,群里的『爱来自冒险家协会』,是一家游戏公司的程式设计师。”
隨后是一个重度近视镜的华人男子,淡淡地说:“书虫。”
此外均是一群美国白人。
陈哲的目光也在这群拘谨的成年社畜之间游移。
美国高级程式设计师中黄种人和白种人的数量大约各占一半,但是在目前这种低端局里,白人还是占了巨大优势的,毕竟是本土主要民族。
陈哲看向群组暱称为书虫的华人男子,而对方的眼镜上起著雾,也看不清对方的表情。
现场除了自己和对方,还有那个叫莱拉的黑人女生以外,其他人的手里都拿著一部高端牌子的笔记本电脑,诸如macbook pro、戴尔、rog、razer、lg gram系列。
陈哲不动声色地抖了抖自己的背包,里面那台老式的二手thinkpad联想,看上去倒是和这些人有点格格不入了。
不过好在陈哲拥有lv2的计算机技术。
笔记本继续传。
“汤姆,后端,主要写go。”
“莎拉,前端,目前在自由职业。”
“戴夫,devops,最近在搞k8s。”
……
不久,十二个人介绍完,本拍了拍手。
“行,都认识了。接下来自由活动,想聊技术的聊技术,想聊八卦的聊八卦。十二点的时候我请大家喝咖啡,楼下有家店不错。”
本说。
人群散开,三三两两地聚成几堆。
陈哲站在原地,目光扫过四周。阳光已经彻底升起来了,河面上的碎金晃得人眼睛发酸。远处有几只海鸥在盘旋,叫声尖锐,像是在爭夺什么。
他注意到那个叫书虫的华人男子独自站在栏杆边,背对著人群,望著河面。眼镜上的雾气已经散了,但他没有要加入任何一个小团体的意思。
陈哲想了想,没有走过去。
“陈,对吧?”
一个声音从旁边传来。
陈哲转头,看见那个叫汤姆的白人男生走过来,手里拿著一台macbook pro,屏幕还亮著。
“对。”
陈哲整理了一下自己的衬衣,说。
汤姆点了点头,在他旁边的栏杆上靠下来。
“我也是社区大学出来的,”他说,“皇后区的拉瓜迪亚社区学院。转了学,最后在纽约城市大学毕的业。”
他顿了顿,笑了笑。
“这条路走得通,就是慢一点。”
陈哲没说话。
开盒!
陈哲从来没有透露过自己的身份,但是遇到有心之人,就是直接开了。
“改天得消除一下行踪了……”
陈哲眸光深思,对於程式设计师来说,想要套取到他人的信息是一件容易事。就算是那些专精於网际网路人肉搜索的青少年,在这方面爱好也敌不过兴趣。
就在这时,汤姆的声音又传来。
“你现在写什么语言?”
“python。”陈哲答。
汤姆頷首,目光落在河面上。
“python挺好入门的,”他说,“不过后端的话,迟早得学go或者java。看你以后想走什么方向。”
陈哲刚要开口,身后传来本的拍手声。
“都过来一下!”
人群重新聚拢。本站在中间,手里不知从哪掏出一块白板,大概a3纸大小,上面贴著一张纸,纸上写著一行字。
陈哲走近了才看清那行字是什么。
“设计一个url短连结服务”
本把白板举高了点,让所有人都能看见。
“来,玩个游戏。”他说,语气里带著一点兴奋,“这玩意儿大家都不陌生吧?短连结服务,bitly那种。给你一个长url,生成一个短码,访问短码的时候重定向到原地址。”
他顿了顿,目光扫过人群。
“规则很简单:每个人三分钟时间,想一下怎么设计。可以討论,也可以自己想。三分钟之后,每个人轮流说自己的思路。”
有人笑了一声:“面试来了。”
本也笑了:“面试?没意思。这是游戏,隨便聊。谁说得有意思,我请他喝咖啡——不是楼下那种,是正经的第三波咖啡。”
“更何况,这种事我们之前的聚会也做过,不是吗?”本嘴角上扬。
人群里响起几声口哨。
陈哲站在原地,目光落在那行字上。
url短连结服务。
简单来说,url短连结服务就是一种將冗长的网址(url)转换为简短地址的工具。当用户点击短连结时,会被自动重定向到原始的长网址。
这东西他见过,用过,但从来没想过怎么设计。
三分钟。
他开始想。
……
最开始想到的是最简单的,一个资料库表,两个栏位,长url和短码。用户提交长url,生成一个隨机字符串,存进去。访问的时候查一下,重定向。
但这样太简单了。隨机字符串碰撞怎么办?重复的url要不要復用同一个短码?访问量大的时候资料库扛得住吗?
过了半分钟,他想到了哈希。把长url用md5或者sha256哈希一下,取前几位作为短码。但哈希衝突怎么办?再加个盐?还是用布隆过滤器先判断一下?
隨后,陈哲想到了缓存。
高频访问的短码可以放redis里,不用每次都查资料库。但缓存失效怎么办?缓存雪崩怎么办?
再接著,他想到了分布式。如果服务做大了,单机扛不住,得用分布式id生成器。雪花算法?还是用资料库自增id然后取模?
一分钟,他想到了更多。
短码过期怎么办?自定义短码怎么支持?统计点击量怎么实现?防攻击怎么搞?
……
三分钟到。
本的拍手声把陈哲从思考里拉出来。
“行,时间到。”本说,“谁先来?”
人群安静了一秒。
“我来吧。”
说话的是汤姆。他往前站了一步,清了清嗓子。
“最简单的设计:一张表,id自增,长url栏位,短码栏位。短码可以用id的62进位表示,0-9a-za-z,一共62个字符。id从100000开始,保证至少六位短码。”
他顿了顿。
“优点是简单,不会衝突。缺点是自增id容易被遍歷,可以加个隨机偏移量。访问量大的时候加缓存,redis存热点数据。如果要做大,分库分表,按短码哈希分片。”
他的语气中充斥著自信,毫无疑问这是个比较优越的答卷。
本点了点头,没评价。
“下一个。”
莱拉站出来。
“我会用哈希。长url做md5,取前六位。如果衝突了,加个盐重新哈希,或者用布穀鸟哈希的思路。优点是短码隨机,不容易被猜。缺点是要处理衝突,性能稍微差点。”
本还是点了点头。
“下一个。”
接下来几个人轮流发言,思路都大同小异——资料库、哈希、缓存、分片。有人提到了用nosql,有人提到了用消息队列做异步统计,有人提到了用cdn加速。
陈哲一直不语。
本的视线最后落在他身上。
“陈,你呢?”
所有人的目光都转过来。
陈哲沉默了两秒。
“我想到的跟大家不太一样。”他说。
本的眉毛挑了一下。
“你可以说来听听。”
陈哲往前走了一步,站在白板旁边。
“大家说的都是存储和查询的逻辑,我换个角度——成本。”
他顿了顿。
“短连结服务最烧钱的是什么?不是伺服器,不是资料库,是流量。每次访问都要302重定向,每次重定向都是一次http请求。如果服务做大了,每天几亿次访问,光是流量钱就能烧破產。”
人群安静下来。
“所以我会在重定向之前加一层cdn。”陈哲继续说,“短码的访问路径先走cdn,如果cdn有缓存,直接返回重定向响应,不回源。缓存时间可以设长一点,比如24小时。这样99%的流量都被cdn扛住了,源站只需要处理缓存未命中的请求。”
本的眉头微皱。
陈哲继续。
“然后是短码生成。大家说的哈希和自增id都有问题——哈希有衝突,自增id太规律。我会用预生成的方式:启动一个服务,提前生成一批短码放在队列里。用户来的时候,直接从队列里取一个分配出去。”
“这样生成短码和分配短码解耦了。生成服务可以用雪花算法保证全局唯一,分配服务只需要从队列里pop。就算分配服务掛了,队列里的短码还能顶一阵……”
“然后是资料库。短码和长url的映射关係可以存mysql,但高频访问的短码要放redis。如果要做大,可以按短码前缀分片,比如0开头的放一组,1开头的放另一组。”
“最后是监控。每个短码的访问量要统计,但不能影响主流程。可以用消息队列,异步写日誌,然后离线分析。”
他说完了。
人群安静了几秒。
本盯著他,表情有点奇怪。
麦克站在人群后面,手里的咖啡杯停在半空中,眼睛瞪得比刚才大了一圈。
“你……”麦克张了张嘴,像是想说什么,但又咽了回去。
汤姆第一个开口。
“cdn那层,”他皱著眉,“重定向响应能缓存吗?”
“能。”陈哲说,“302重定向也是http响应,只要设置cache-control头,cdn就会缓存。用户访问短码的时候,cdn直接返回302,连源站都不碰。”
汤姆沉默了两秒,然后点了点头。
莱拉在旁边喃喃自语:“预生成队列……这个思路倒是第一次听说。”
本的眉头舒展开来。
他盯著陈哲看了几秒,然后笑了。
“有意思。”
他把白板放下,拿起保温杯喝了一口。
“你在哪家公司实习过?”
“没实习过。”陈哲说。
本愣了一下。
“那你在哪干过?”
“无可奉告。”
本的表情有点微妙。他把保温杯放下,目光在陈哲身上转了一圈,最后落在那台老旧的thinkpad上。
沉默了两秒。
“行。”本说,“我记住了。”
他没再多说什么,转身朝人群挥了挥手:“走吧,喝咖啡去。楼下那家店不错,我请。”
人群开始往出口移动。有人还在小声討论刚才那个设计,有人已经开始聊別的话题。
陈哲站在原地,没动。
麦克走过来,在他旁边站定。
“小子,你……”麦克的声音压得很低,“你从哪学的这些?”
陈哲看了他一眼。
“网上。”
麦克盯著他看了几秒,然后摇了摇头。
“我拉你进群的时候还以为你是个萌新,”他低声说,“结果你他妈是个扮猪吃老虎的。”
陈哲没说话。
麦克拍了拍他的肩膀。
“走吧,喝咖啡去。”
……
pier 57楼下有一家叫“blue bottle”的咖啡店,蓝白相间的招牌,门口排著七八个人。本带著一群人走过去,直接推门进了店里——他显然是熟客,店员看见他,点了点头,指了指角落里的几张空桌子。
十几个人分散坐下。本去柜檯点单,回来的时候手里拿著一沓小票,一张一张分给在座的人。
“自己点的自己拿。”他说。
陈哲拿到的是美式,黑咖啡,不加糖不加奶。他端起来喝了一口,苦的,但能接受。
莱拉坐在他旁边,手里拿的是一杯拿铁,奶泡上面画著一颗心。她盯著那颗心看了两秒,然后用勺背把它搅散了。
“hello?陈哲。你那个设计,”她忽然开口,“预生成队列那个思路,是从哪学的?”
陈哲转头看她,思索了一会儿:“学校竞赛。”
莱拉沉默了两秒,然后点点头,没再追问。
对面坐著书虫。
那个华人男子从刚才开始就一直没说话,只是坐在角落里,面前放著一杯冷萃,冰块已经化了一半,他没动。他的眼镜片上又起了雾,不知道是咖啡的热气还是別的什么。
陈哲的目光落在他身上。
书虫似乎感觉到了什么,抬起头。
两个人的目光在空中碰了一下。
书虫没说话,低下头,继续盯著那杯冷萃。
陈哲收回目光。
本端著一杯拿铁走过来,在陈哲旁边坐下。
“你那个设计,”他说,语气比刚才轻鬆了一点,“说实话,有点出乎我意料。”
陈哲没说话。
“cdn那层,”本继续说,“一般新人想不到。预生成队列那个,更不是新手能想到的。”
他顿了顿,喝了一口咖啡。
“你真没实习过?”
“没。”
本盯著他看了几秒,然后笑了。
“行,我不问了。”
他站起来,朝其他人挥了挥手。
“一点钟我还得去剪视频,先走了。你们聊。”
他走了。
人群渐渐散开。有人起身去柜檯续杯,有人走到门外抽菸,有人凑在一起聊技术。陈哲坐在原位,盯著杯子里黑乎乎的液体,脑子里不知道在想什么。
麦克走过来,在他旁边坐下。
“感觉怎么样?”
陈哲想了想。
“还行。”
麦克笑了笑。
“本那人对新人一般不怎么上心,”他说,“但他刚才多看了你几眼。这是好事。”
陈哲点点头,没说话。
窗外,阳光照在哈德逊河上,波光粼粼。一艘卡其色观光船慢悠悠地驶过,船上的人很小,看不清在干什么。
“下午有什么安排?”麦克问。
“回去。”陈哲说,“写代码。”
麦克点点头,站起来。
“行,那我也不留你了。群里聊。”
他拍了拍陈哲的肩膀,转身走了。
陈哲抿了一口咖啡,这咖啡是蓝瓶咖啡的一类,以精品单一產地咖啡豆和新鲜烘焙著称。
陈哲实际上回去是不可能写代码的。
毕竟他其实根本不是程式设计师。
他倒也没有在这里留多久,二手thinkpad放在背包里没拿出来过,回头换乘了几次纽约地铁,就回了布鲁克林区。
本文网址:https://www.powenxue11.com/book/122696/36335279.html,手机用户请浏览:https://www.powenxue11.com享受更优质的阅读体验。
温馨提示:按 回车[Enter]键 返回书目,按 ←键 返回上一页, 按 →键 进入下一页,加入书签方便您下次继续阅读。章节错误?点此举报