文章分类 » Blog my Blog

天助自助者

这世间,几乎所有的事情,都需要自己主动去做,才可能做成。

主动,除了包括思想,最最主要的,是包括行动。

这两天正在整理抖音短视频小航海的一个比较成功的财友的小航海总结,里面他就写到了这么一块:天助自助者。

他的总结是:我总会觉得这一路上都有人愿意帮助我,现在回头看来还是受益于生财的价值观:真诚、利他、主动、开放、空杯。我认为我做到了,所以会有磁场把我和这些人联系起来。

这验证了一句话,真诚起来,强大起来,所有的财富、资源都会紫东向你聚集。

由此反思自己,以前总觉得自己空杯心态足够,其实来西安这半年多来,自己的空杯心态远远不够,也不够主动,哪怕看到了一些眼前的机会,但是总感觉自己没有修整过来,总是提不起干劲。

其他的几项,更是相去甚远。

这几天也是终于其他的事情有了一个大致的收尾,节奏和状态调整回来一些,另外制作了一个坚持写作输出一百天的计划,目前执行的还可以,大概也正是执行这个计划,让自己的节奏开始正确了起来。

从身边的小事开始,训练强化自己的执行力,弱化自己的懈怠、自满,让自己从思想上和行动上,都步入正轨。

爬虫爬取某菠菜网站的结果

查看网站,结果在外边没有,需要用正式用户或者游客身份登录之后才能拿到
登录之后,查看请求内容,发现只有一个get的请求是主要数据,但是整个是页面,不是单独的数据
摘出来链接:/member/dresult?lottery=AULUCKY5&date=*&table=1
写爬虫的时候需要替换这里的日期

用熟悉的语言,java写,因为后续还需要做成服务,做服务的时候,java也比较顺畅

使用原来写的httpUtil爬取,发现从网站拿来的header有的不能用,搜了一下,是http2里可以自定义的key,比如key使用冒号开头
// :method: GET
// :path: /member/dresult?lottery=AULUCKY5&table=1&date=2018-01-01
使用java自带的http请求会无法携带这些自定义的header
查资料,发现jdk8处理http2略微有些麻烦,直接使用支持http2的jdk版本比较方便。到oracle上去下载。下载了16.

下载成功之后,安装,整个环境的参数已经被修改,执行java -version 显示是jdk16了。

使用开发工具idea增加仓库,发现总是报无法识别的仓库地址。想了一下,好像是因为我idea比较老的原因。。。我的idea还是2017版的。。。

没办法,这个方法得放弃了。使用另外一种方式。

修改项目依赖,增加依赖okhttp3,当前环境使用的是jdk8,直接在仓库里找了个比较新的版本

<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.9.1</version>
</dependency>


结果依赖的包怎么都引入不进来,根本没法实例化。
弄了半天仍然不行,忽然想到可能也是版本的原因。

去查了一下这个版本包发布的时间,确实是在jdk8之后很久,时间差距有点太大,可能是这个原因,切换一个比较老的版本试试。

找了个距离jdk8发布时间比较接近的版本,

<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>3.11.0</version>
</dependency>


修改这个配置之后,OK了,可以实例化了。
写个公用点的方法,可以动态添加header

public static String getUrlContent(String urlStr, Map<String, String> headers) {
try {
Request.Builder requestBuilder = new Request.Builder().url(urlStr);
headers.forEach(requestBuilder::addHeader);
Request request = requestBuilder.build();
Response response = client.newCall(request).execute();
if (Objects.isNull(response)) {
throw new IOException("Response is null");
}
if (!response.isSuccessful()) {
throw new IOException("Unexpected code " + response);
}
if (Objects.isNull(response.body())) {
throw new IOException("Response body is null");
}
return response.body().string();
}
catch (IOException io) {
System.out.println("获取URL资源异常!,URL :" + urlStr);
throw new RuntimeException("获取URL资源异常!URL " + urlStr);
}
}

把从浏览器里扒出来的header都写到代码里,然后写死一个地址,尝试请求一下
/member/dresult?lottery=AULUCKY5&date=2018-01-01&table=1

请求成功,但是显示的是乱码。从网上找资料,有的说把gzip这个header的这一项去掉,试试。

尝试成功,打印出来了需要的页面内容。

按照之前跟大佬交流时候的提议,建议在爬完一些网页之后,为了避免需要重新摘取里面的数据的时候,网页出现了变化,需要重新解析,所以第一次爬完之后就把所有的爬取下来的网页直接保存成文件,后续需要用的时候,直接拿这些文件用就行了,不需要再重新去爬取,还需要处理各种外部变化问题。

不过这次应对的网站比较简单,感觉不会有这么频繁的变化,先把数据爬下来再说。写入文件也就一步简单的操作,先写数据解析的部分。

别让自己“墙”了自己(转载)

这一两周与几个朋友聊天,有年轻的90后,也有大叔级的70后,这些人在我看来都是很有能力的人,但是一些喜好过于强烈,让我不经意地回顾了我工作20年来身边的人,有发展得好的,也有发展的不好的,有些人是很可惜的,因为限制他们的不是其它人,也不是环境,而是自己,所以,很想写下这篇文章。(注:这篇文章可能会是一篇说教的文章,所以,可能会让你看着犯困,所以,我会尽量地短一些,而且尽可能多讲故事,少道理,这里的故事,全是真实发生的)

几个故事

2019年年初,我面试了一个很年轻的小伙子(93/94年出生),这个小伙子特别有灵性,也很聪明,计算机专业出身,也很喜欢技术,基础和学习能力也很好。在我这20年来认识的人中,如果他能呆在北京、上海、深圳这样的城市,我保证不出三年,他会成为他们同龄人中非常出色的技术人员,如果有个好的舞台有一个好的团队带他,他的未来会非常成功。然而,这个小伙子有两大喜好:1)只愿(或是说被迫)呆在一个毫无IT的环境的三/四线城市,2)对技术有非常大的偏好,只喜欢Go语言,非常不喜欢其它的语言,比如:Java(离开Java的世界,基本上离开了做架构的世界(相关解释见文末))。

他的这两个喜好,足以让一个未来会很优秀的人毁掉,因为,这个时代没有限制他,他的能力也没有限制他,但是他的意识完完全全地限制了他。

  • 他把自己最宝贵的青春放在了很烂的项目上,就算能用一些新的技术,他也只能算是自娱自乐,在实验室中玩玩具罢了。
  • 他把自己的技术栈封闭起来,而直接放弃了这个时代最具工业化的技术Java,对于一个好的程序员来说,同时掌握几门语言和技术完全是没什么问题,但是自己封闭了自己的视野。

实在是非常可惜,我本来是可以为他介绍到一些很不错的公司的,但是他这样的习性,等于自己把自己未来的门给关上了,虽然我跟他长谈过,但是我也没有办法叫醒不想醒的人……

  • 视野、环境和舞台,对一个人的限制是非常大的。井蛙不知道大海,被空间维度所限制;夏虫不知道冬天,是被时间维度所限制;圈养的动物没有斗志,是被自己意识所限制。
  • 偏见和不开放,对一个人的限制是真正有毁灭性的。主动让自己成为一个瞎子和聋子,主动把自己的能力阉割掉,这是一件令人痛心的事。想想大清的闭关锁国是如何让亚洲第一的北洋水师给毁掉的……

我还有个同学,他的技术并不差,就算呆在昆明这种很落后的地方,他也非常地好学,学习英文,学习各种新技术,对技术没有任何的偏好,喜欢C/C++/Java/Python/Shell,同样喜欢前端Javascript,对基础知识非常地踏实,他在技术上没有限制自己的潜力,有什么就学什么。后来,我带他玩Docker/Go/K8S……分布式架构,他也上手的很快……像他这样的人,技术能力完全没得说,比我还大一岁,44岁了,还是一样的天天追代码细节,看Youtube的各种大会,翻github里的各种issue和pull request……

我同学这人,拥有了成为一个技术牛人几乎所有的条件:基础知识过硬,细节扎得深,面很广,学习能力强,有英文能力,逻辑思维能力不错,非常的自律,执行力也很强,抓得住重点……然而,只有一个小问题,就是没有到大公司历练过,我三番五次叫他从昆明出来,但是最终他都呆在昆明这个城市没有出来,因为有所谓的家庭约束。然而,我身边还有好些人,把自己家从北京搬到上海,从上海搬到深圳,从厦门搬到深圳……这样的人大有人在……像他这样的能力,在哪个公司都会是主力和骨干,对于一个公司的主力和骨干来说,家庭上的这些问题都是小问题都是有很多解的……

另外,我这个同学还是一个比较悲观的人,任何事情都是先想到不好的事,他关注负面的东西会胜于正面的东西,而且他还有一定的社交恐惧,怕与人相处和交流,时间越长越害怕,甚至有时候直接跟我说,“我就是不想改变”这样的话……其实,我以前也是一个很害怕与人交流的人,面试的时候,我根本不敢正眼看面试官一眼,也不知道与人怎么交流。但是,我与他不一样,我努力克服,不断地面试,与人面对面的交流,到一线技术客服接用户的电话,在公司里做分享,慢慢地到外面分享……3-5年就完全克服掉了。

其实,很多事情,完全是有解的,也没有必要担心,自己的心理障碍也是可以克服的,重点就是自己愿不愿意,只要愿意完成了一半,接下来就是不断的摸爬滚打坚持了。

  • 不限制自己的人,会穷举各种方法来解决问题,限制自己的人,只会找各式各样的问题或借口。
  • 不限制自己的人,会努力改变自己的问题和缺陷,限制自己的人,会放任自己。

另外几个故事

我还有另外几个故事(活到四十多,能看到好多人十几年的发展过程,感觉有点上帝视角了)

我还有一个以前团队里的一个小伙,人是很聪明,但就完全就是野路子,他对技术没有什么偏好,一个PHP程序员,做那个Discuz!论坛,公司被并购了,转成Java,开始研究Java的各种细节,对技术从来没有什么偏见,有什么就玩什么,每做一个项目,就算是一样的他都要用新的技术做一遍,然后跟着我做云计算,我教他TCP,教他C/C++,后来一起玩Docker/Go,等等,反正是一点就通,他是我见过学习能力最强的人。但是,有一个事他一直与我的想法不一样,就是我希望他先把软件设计好,再写代码,他非常不能理解,他习惯于直接动手开干,然后有什么问题就整什么问题,我也很难教育他。

有一天,他电话面了一下Facebook,电话面了15分钟后对方就放弃了,他受到了严重的打击。然后,他就开始找菲利宾人练英文口语了,我也让他做算法题,然后,他才发现,一道连算法都不是的纯编程题都提交几次都过不了,等他做完了Leetcode最初的那151道题后,整个人都改变了,写代码前认认真真地在纸上把程序的状态,处理时序以及可能遇到的一些条件先罗列出来,然后,进行逻辑设计后,再写,从此,他就开启他更大的天地了。我后来把他推荐给了微软,先在中国的Bing,在中国升好2-3级,然后去了美国的Azure,现在听说他准备要跟 k8s 的 co-founder Brendan Burns 混了(虽然,他现在还在印度人手下,但是,我真的不知道他未来能玩多大,因为今年他才33岁,而且非常聪明)

他以前是把自己封闭起来的,我叫他出来,他也不出来,后来因为一些办公室政治的原因不得不来找我,于是我就带着他玩了两年,跟他讲了很多外面的世界是怎么玩的,他这个人也是一个相当不善于社交的人,但是心是开放的,愿意接受新的东西,虽然对技术也有一定偏见,比如不喜欢Windows,但是也不会不喜欢到完全封闭。后来我跟他说,微软的技术相当的强的,你看到的技术只是表面,深层次的东西都是相通的,直到他到了微软后发现各种牛逼的东西,对微软系统的技术的态度也有了改变,而且我让他跟我说很多微软那边的事,我发现,他对技术了解的维度已经是越来越高级的了……

还是我以前团队的一个小伙,他是一个前端,他说前端的东西没什么意思,想来找我做后端,我也一点点带他……后来,我说,你如果想要玩得好,你必需来北京,无论现在你觉得过得有多好,你都要放弃掉,然后,尽最大可能出去经历一下世界最顶尖的公司,我甚至跟他说,如果他女朋友不跟来的话,就先分开一段时间,先自己立业,他来北京的时候,他之前的同事都等着看他的笑话,我说,那些人连想都不敢想,不必管他们。于是,他去了Amazon,再过了一年去了西雅图,我跟他说,接下来就是去AWS,然后,如果有足够的野心,用自己的年轻这个资本去硅谷创业公司赌一把……未来他怎么样我不知道,但至少他没有限制自己,他的未来不会有封顶……

也是我的同学,我跟他在大学是上下铺,后来他去了人民大学读计算机博士,大学的时候做国产数据库kingbase,然后去了一家外企,天天被派到用户那边做数据分析,后来,他想回科研单位做国产数据库,我说,别啊,你的技术比我好太多,还有博士理论加持,你不去国外顶尖公司玩玩,你不知道自己有多强的,于是他跟公司申请去了国外做核心,后来因为Hadoop的原因,公司的产品最终成为了历史,于是我说,你来了美国么,你一定要去AWS,于是他就去了AWS的Aurora团队,成为了AWS明星级产品的中坚力量,天天在改MySQL的核心源码,干了两年,正在晋升 Principal Software Engineer ……

这里我到不是说出国有多牛,也许你只关注能挣多少钱,但是我想说,他们之所以能有这样的际遇,除了他们本来就有实力,还更因为他们从来不给自己设制什么限制,就是那种“艺多不压身”,有什么就学什么,有更高的就去向更高的迈进,其它的像家庭什么的问题其实都是会有解的,真的不必担心太多……

 别限制了自己

上面的这些故事,也许你能看得懂,也许你看得不一定能懂,这里,让我来做个总结吧

  • 做有价值的事。这个世界对计算机人才的要求是供不应求的,所以,不要让自己为自己找各式各样的借口,让自己活在“玩玩具”、“搬砖”和“使蛮力加班”的境地。其实,我发现这世界上有能力的人并不少,但是有品味的人的确很少。所谓的有价值,就是,别人愿付高价的,高技术门槛的,有创造力的,有颠覆性的……
  • 扩大自己的眼界,开放自己的内心。人要变得开放,千万不要做一个狭隘的民族主义者,做一个开放的人,把目光放在全人类这个维度,不断地把自己融入到世界上,而不是把自己封闭起来,这里,你的英文语言能力对你能不能融入世界是起决定性的作用。开放自己的心态,正视自己的缺点,你才可能往前迈进。你的视野决定了你的知不知道要去哪,你的开放决定了你想不想去
  • 站在更高的维度。面的维度会超过点的维点,空间的维度会超过面的维度,在更高维度上思考和学习,你会获得更多。整天在焦虑那些低维度的事(比如自己的薪水、工作的地点、稳不稳定、有没有户口……),只会让你变得越来越平庸,只要你站在更高的维度(比如: 眼界有没有扩大、可能性是不是更多、竞争力是不是更强、能不能解决更大更难的问题、能创造多大的价值……),时间会让你明白那些低维度的东西全都不是事儿。技术学习上也一样,站在学习编程语法特性的维度和站在学习编程范式、设计模式的维度是两种完全不一样的学习方式。
  • 精于计算得失。很多人其实不是很懂计算。绝大多数人都是在算计自己会失去多少,而不会算会得到多少。而一般的人也总是在算短期内会失去什么,优秀则总是会算我投入后未来会有什么样的回报,前者在算计今天,目光短浅,而后者则是舍在今天,得在明天,计算的是未来。精于计算得失的,就懂得什么是投资,不懂的只会投机。对于赚钱,你可以投机,但是对于自己最好还是投资。
  • 勇于跳出传统的束缚。有时候,跳出传统并不是一件很容易的事,因为大多数人都会对未知有恐惧的心理。比如:我看到很多人才都被大公司垄断了,其实,有能力的人都不需要加入大公司,有能力的人是少数,这些少数的人应该是所有的公司share着用的,这样一来,对于所有的人都是利益最大化的。这样的事现在也有,比如:律师、设计师……。但是,绝大多数有能力的技术人员是不敢走出这步。我在2015年到2016年实践过一年半,有过这些实践,做“鸡”的比“二奶”好多了,收入也好很多很多(不好意思开车了)……

庄子说过几句话——

井蛙不可以语于海者,拘于虚也;//空间局限

夏虫不可以语于冰者,笃于时也;//时间局限

曲士不可以语于道者,束于教也。//认识局限

别自己墙了自己,人最可悲的就是自己限制自己,想都不敢想,共勉!

————————————————————

注:这篇文章就是要劝大家更为开放,让自己有更多的可能性,能到更高的层次,做更有价值的事,成为更强更好的人……当然,如果你觉得你只想做一个平凡人,也和本文并不冲突……另外你也不要觉得这篇文章是让你要成为一个精英,但你一定要去摸高……这篇文章是告诉你一种面对人生的思考方式,在这种思考方式下,你会有更多的可能性,更大的场景……而不是直接把自己归到“平常人”,把自己“墙”了!

注:我以为用Java适合做架构这事应该是常识了,但是评论中有很多人非常反对这个事。那我解释一下吧:首先,小型的项目用什么语言都行,爱用什么用什么。但是,真正的企业级架构就不一样了,其中并不仅仅只是RESTful API或RPC,还有各种配套设施和控制系统,比如:应用网关,服务发现、配置中心、健康检查、服务监控、服务治理(熔断、限流、幂等、重试、隔离、事务补偿)、Tracing监控、SOA/ESB、CQRS、EDA……这些东西在非Java的技术栈体系内,很难看到全貌,Java强大的生态环境,就是让你把注意力放到更高层次的架构和业务上来的。(千万不要觉得,整几个服务RPC一下,加个缓存,加个队列,就能叫架构,那只是系统集成罢了)

(全文完)

转载自:https://coolshell.cn/articles/20276.html