外包平台上的项目很可能会很紧急

两个多月前的某个晚上,在某某外包平台上,我收到了一条消息,对方说他们有个电商项目急需人手进行技术攻关,需要驻点开发。我想着闲着也是闲着,就去碰碰面,看看有什么机会。

对方在滨江,距离有20公里,说远不远,说近不近。到了地点之后,对方大致地介绍了项目的设想、计划、投资方和技术栈等等。我觉得还行,就跟对方商量了价钱,大概需要两周时间。接下来就去跟团队成员一起过一下产品细节。

过了一会发现不太对劲儿,项目的细节非常之多,画了一黑板。有常见的商品、下单、支付、会员等功能,我自己分析了下,十来天的时间肯定是不够的。我提了出来,对方说,每人一小部分,赶一赶还是可以的(团队里还有两个全职开发)。

(更多…)

继续阅读 →

开始尝试技术图书翻译

一个月前,我在“图灵教育”的微博上看到《Java Performance, 2nd》这本书正在招募译者,所以我就咨询了下是否可以参与试译,很快小编给了我责编的联系方式,我马上发邮件要来了试译章节,开始动手。

这本书第一版4年前就由图灵出版了,书名是《Java性能权威指南》,如果你是Java老手,大概率看过这本书,Java群体比较大,而且讲性能的书本来就不多。第二版新增了很多Java 11相关的特性和工具等,在这里我当然要建议你在出版后读一读,性能调优在Java进阶的路上必不可少。

(更多…)

继续阅读 →

Spring Boot教程(29) – RabbitMQ必备基础

RabbitMQ是使用最广泛的开源消息队列中间件之一,它是用Erlang写的,并实现了高级消息队列协议AMQP。消息队列可以在应用间交换消息,实现解耦、异步处理、削峰、缓冲等目的,应用场景还是比较丰富的。除了RabbitMQ,还有其他的消息队列可用,比如Kafka、Java写的ActiveMQ和阿里出品的RocketMQ等,现在网上有很多他们的对比,你可以具体分析分析那种可能更适合你。

RabbitMQ现在属于Pivotal公司,而Spring框架也是Pivotal出品,所以两者搭配使用也是顺理成章,Spring Boot也有AMQP Starter以提供支持。在打开IDE演示代码如何编写之前,先说说消息队列以及RabbitMQ具体是怎么工作的。

(更多…)

继续阅读 →

Spring Boot教程(28) – 简单读写Redis

Redis是最流行的key-value数据库,它最常用的功能就是缓存。就算你不是搞后端的,也会不断看到Redis相关的新闻和技术文章等,因为它性能强劲、功能丰富、生态完备,各种“吊打面试”的系列文章肯定少不了它。

如果仅仅是CRUD工程师来使用Redis的话,那需要掌握的东西寥寥几句话就可以概括,简单说就是80%的情况下你只需要用到20%的知识。我想更复杂的地方就是如何针对不同的业务进行数据结构的设计,这个就需要实践和经验了。如果你是在大厂,数据足够多,访问量足够大,可能会需要搭建Redis集群,这也是有现成工具和方案的。

可惜作为一个toB项目的CRUD的工程师,还没有机会将Redis的作用充分发挥出来,只能在这里啰嗦下它的基本使用。轮子丰富的Java生态和Spring全家桶,老早已经为你准备好了工具,Spring Data Redis可以帮你高效使用Redis,而且Spring Boot也提供了starter可以一键接入Redis,“0配置”就可以写代码。在介绍它之前,先复习下Redis的基本概念和命令,然后再来说说它的API的使用。

(更多…)

继续阅读 →

最近股市波动大,入场须谨慎

前两天有个大学同学C,问我有没有兼职项目可以做,我好奇他是不是工作不饱和,他说不是的,炒股亏光了,把买房钱亏进去了。

众所周知,最近美股市场遇到了罕见的大跌,S&P 500指数在一个月内大跌了30%+,直接跌到了2017年的水平。连巴菲特也得感叹自己“太年轻”,见证了短时间内的四次熔断。

要说我也挺惨的,我在2月19号美股历史最高点的时候,入金买股票,然而第二天立马就开始跌跌不休。我不禁感叹,是什么力量让我如此精准把控股市的走向,“我一买入就大跌,我一卖出就大涨”绝对不是什么传说,是昏暗灯光下每个吃面人的真实内心写照。我有时候会想,跌了这么多,要不我清仓试试,看看能不能挽救全世界股民。后来我控制住了自己,没有卖出任何一支股票,因为当时入场时就打算长期持有3到5年,现在清仓我干点啥呢。好在下跌的过程中我慢慢补仓降低了成本,到现在浮亏已经降到了10%以内,还可以接受。

(更多…)

继续阅读 →

Spring Boot教程(27) – 优雅地实现重试逻辑

Spring家族中有一个小项目是Spring Retry,他用来方便地实现重试机制。你的程序在调用远程API的时候,可能因为网络抖动等原因,导致调用失败,这种失败是偶发的,出现了多试几下就行。如果你遇到需要重试多次的情况,倘若只是朴素地写个for循环N次,请求成功就跳出循环返回结果,未免也太粗糙了。Spring已经为这一通用需求造好了轮子。

Spring Retry现在被Spring BatchSpring Integration等项目引用,在Spring Boot项目中,我一般直接引入spring-boot-start-batch来间接引入Spring Retry(Spring Batch是个批处理工具库,你也许会用得到其中的类,我们有机会再具体研究下),另外它还要配合AOP Starter才能使用,后者你的项目里一般都有。引入Spring Retry后,可以用加注解声明的方式,或者编码的方式来使用。

(更多…)

继续阅读 →

找工作失败

在1月初的时候,我决定再找找工作试试看,没想到刚准备没几天,疫情爆发,打乱了原有的节奏。窝在家里的时间多了,那我就多准备准备好了。年后很多公司都是远程办公,远程面试,我不太乐意远程面试,因为有时候话都说不清楚。三月初的时候,杭州这边的情况有所好转,我就试着投了投简历。

(更多…)

继续阅读 →

大家最近还好么

最近新型冠状病毒肺炎已经影响了所有人的生活,大家都憋在家里。我当然也不例外,每天醒来第一件事就是打开丁香园看看现在各种数据增加了多少,再刷刷微博,看看武汉和各地的防疫工作都有哪些进展。说实话,消极信息实在是太多,尤其是肺炎患者求助超话,看了一些求助的文字,整个人都不好了。网上的信息真假混杂,仅凭一个手机获取消息的我无法去验证真假,也帮不上什么忙。

(更多…)

继续阅读 →

我又动了找工作的心了

最近又在考虑找工作了。

虽然这两年不在职场,但是我还是很关注的。经常会打开拉勾和BOSS直聘,看看有哪些公司在大力招人。很可惜,我住在城东,互联网公司洼地,杭州的很多公司都在滨江、城西和余杭,动不动单程十几二十公里让我很有畏惧感,一想到要每天开车穿越杭州城就有点头疼。

当然距离只是一方面原因,另外一个原因是没有找到合适的公司。自从转到Java Web方向之后,在招聘网站搜索职位的时候出现的都是一大串阿里的公司,比如淘宝天猫、蚂蚁金服、菜鸟、盒马,倒不是嫌钱少或者对阿里有什么意见,只是因为之前的工作经历让我少了一丝憧憬。接下来还有一些公司,比如网易、华为、海康威视、滴滴、有赞,都是比较成熟的公司,另外还有一些大厂在杭州有分部的,比如vivo、头条、京东数科等等,剩下的是一些中小型公司和非互联网公司的技术部门。

(更多…)

继续阅读 →

Spring Boot教程(26) – 如何发送邮件

发送邮件的需求很常见,找回密码啦,推广产品啦等等。在演示如何写代码之前,我先来说说,常见的邮件发送方式有哪些,以及我们应该如何做选择。

大体上来说,发送的方式有两种,一种是使用SMTP协议,连上SMTP服务器发送邮件,一种是使用第三方的邮件发送服务,调调API就行。我们先来说说前者。

SMTP是“简单邮件传输协议”的简称,是用来邮件的,与之对应的是用来邮件的IMAP和POP3协议,后俩协议暂且不提。现在各大邮件服务商比如Gmail,网易邮箱,QQ邮箱等都有提供SMTP服务器方便你发送邮件,比如你本地的邮件客户端,在添加你的邮箱的时候就需要提供SMTP服务器的地址和端口。同时还需要提供的,就是你的邮箱和密码,这个密码通常不是你的登陆密码,而是一个授权码,类似于token的东西,你需要在后台生成,在账户出现安全问题的时候这个授权码是有办法revoke的。有了SMTP服务的地址、端口、邮箱和密码,你就能在邮件客户端上或者编写代码来发送邮件了。

(更多…)

继续阅读 →