2018 年终总结

68次阅读

共计 3828 个字符,预计需要花费 10 分钟才能阅读完成。

职业篇
博客
之前博客系统一直用的 Ghost,然而 Ghost 的新版在 vps 上升级迁移遇到很多问题,后来索性自己用 nodejs 写了一个,基于 nextjs。
翻译文章
花了一周的闲余时间,翻译了 maintainable css,访问地址 http://maintainablecss.wtser.com/
真的是好久没翻译文章了。
生产力

在项目中使用了 stylelint,peritter 等工具,统一代码风格,提高代码质量。
iterm2 插件 https://xiaozhou.net/learn-the-command-line-iterm-and-zsh-2017-06-23.html
alias
alias gs=”git status”
alias gitclean=”git branch -vv | grep ‘ gone]’ | awk ‘{print $1}’ | xargs git branch -d”
快速跳转
使用 d 这个命令,列出最近访问过的各个目录
目录名简写与补全
比如我们要进入到 ~/workspace/src/dict,我们只需要输入每个目录的首字母就行,然后再 TAB 键补全
重复上一条命令
输入 r,可以很便捷的重复执行上一条命令。
zsh-autosuggestions
https://github.com/zsh-users/zsh-syntax-highlighting
https://github.com/zsh-users/zsh-autosuggestions

了解了一些 tmux 相关的知识点,但是缺少实践。http://harttle.com/2015/11/06…http://kumu-linux.github.io/b…http://cenalulu.github.io/lin…http://wdxtub.com/2016/03/30/…
Tmux 使用手册

研究与学习
算法学习
经典排序算法总结与实现
JS 家的排序算法
业务相关

给自己取了一个英文名 English name Finn
参与公司的一个 SPA 项目,react,学习了 redux state 相关的知识。

SVG use with External Source
<svg viewBox=”0 0 100 100″> <use xlink:href=”defs.svg#icon-1″></use>
</svg>

SVG `use` with External Source


But, the external resource way doesn’t work in any version (up to 11 tested) of Internet Explorer. Even the ones that do support inline SVG: 9, 10, 11.
https://github.com/jonathantneal/svg4everybody
It works like this:

If the browser is IE 9, 10, or 11 (User Agent sniff, but that’s the whole point here).
Ajax for the SVG file referenced
Find the needed bit, based on the ID referenced (e.g. #icon-1)
Inject that into the <svg> on the page

简单的跑马灯

使用 picture 元素实现 图片的 response
srcset only use for mobile img
https://developer.mozilla.org/en-US/docs/Web/HTML/Element/picture
<picture>
<source srcset=”mdn-logo-wide.png” media=”(min-width: 600px)”>
<img src=”mdn-logo-narrow.png” alt=”MDN”>
</picture>

overscroll-behavior 解决 modal 滚动带动底下页面滚动问题
比较拙的解决方案就是给 body 添加 overflow:hidden,但这有可能会影响我们的操作,甚至影响你浏览你的页面。
CSS 的 overscroll-behavior,这个属性有三个可取值:

auto:其默认值。元素(容器)的滚动会传播给其祖先元素。有点类似 JavaScript 中的冒泡行为一样

contain:阻止滚动链接。滚动行为不会传播给其祖先元素,但会影响节点内的局部显示。例如,Android 上的光辉效果或 iOS 上的回弹效果。当用户触摸滚动边界时会通知用户。注意,overscroll-behavior:contain 在 html 元素上使用,可以阻止导航滚动操作

none:和 contain 一样,但它也可以防止节点本身的滚动效果

> overscroll-behavior 属性是 overscroll-behavior- x 和 overscroll-behavior- y 的简写,如果你只想控制其中一个方向的滚动行为,可以使用其中的某一个属性。

编写自定义视频播放器
https://www.w3.org/2010/05/video/mediaevents.html
fullscreen api
https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API
https://github.com/sindresorhus/screenfull.js
bug in safari
element:fullscreen{
}

针对被全屏的元素 (如果 element 是 iframe,:-webkit-full-screen-ancestor:not(iframe) {} 在 safari 不生效)
safari
iframe webkitIsFullScreen aways return false
event webkitfullscreenchange e.target return document when exit fullscreen

娱乐篇
电影电视剧

大佛普拉斯
有话好好说 Keep Cool 1997
燃烧
底特律 我欲成人
末代皇帝
红海行动
西部世界 S2
诚邀辣妹:网络性与爱
西游记女儿国
this is us s2
雌猫们
奇迹男孩
斯大林之死
挚爱梵高
异形:契约
逃出绝命镇
小丑回魂
恐惧支配
校合唱团的秘密
短暂的婚姻
去他妈的世界
熔炉
黑镜 第四季
This is us season2
移动迷宫 2
红高粱
移动迷宫 3
逃离
与神通行
雷神 3
三块广告牌
神秘巨星
奇门遁甲
大世界
好极了
中邪
请以你的名字呼唤我
相亲相爱
唐人街探案 2
废城记
电锯惊魂 1 -7
江湖儿女
美人计
反贪风暴 3
爆裂无声
升级
动物世界
沙海
李银河的 52 堂性学课
逃避可耻但有用
血观音
毒液
特工
李茶的姑妈

人生一串

游戏

青蛙旅行
Getting Over It
中国式父母

阅读篇

解忧杂货店
What if
二十世纪的教训根据我的看法,选举应该是这么回事:我们不是让新政府合法化,而是评判旧政府的表现如何——投票日那天是旧政府缴成绩单的时间。

原子弹设计

重来 2

人们的工作方式从“同步”协作变成了无须同步的协作。
分布式员工团队(distributed workforce)
最适合远程办公的脑力工作,比如写作、编程、设计、客户支持(先列举这几样),跟残酷的利润大战都没什么关系(制造业就属于这种)。
我们发现,判断工作质量的最好方法,就是在正式雇用员工、给他们分配许多工作之前,先让他们试做一点。
想要在工作中不被人忽略,有两种最基本的方法。第一个就是吵吵闹闹,弄出点动静来。第二个就是在工作中取得进展,交出漂亮作品。幸运的是,对于远程员工来说,工作质量最重要。

学习之道
活着
自卑与超越侧重讲述婴幼儿时期父母教育对孩子的影响

Your past experiences are blinding you
你的经验会束缚你

为啥会有『偏见与歧视』只有放下执着才能去实现任何事情。
It’s only after we’ve lost everything that we’re free to do anything.
即便是那些大师级的人也无法找到最好的方式来取胜,因为他们擅长的地方束缚了他们的思想。
Even these masters couldn’t see the best way to win because the one they knew so well colonised their mind.
人们很难脱离自己的舒适区。处于对未知的恐惧,他们倾向于呆在自己熟悉的地方。
People have a hard time letting go of their suffering. Out of a fear of the unknown, they prefer suffering that is familiar”

如何摆脱偏见再次成为一个初学者
Be a beginner again
初学者的思想充满了许多的可能性,但是专家就少了许多
In the beginner’s mind there are many possibilities, but in the expert’s there are few”
初学者思想不是说要反对经验,而是在我们用经验应对新状况时应保持的一种开放的思想。
Beginner’s Mind doesn’t mean negating experience; it means keeping an open mind on how to apply our experience to each new circumstance.

未完待续 …

正文完
 0

2018 年终总结

68次阅读

共计 1029 个字符,预计需要花费 3 分钟才能阅读完成。

又是一年,总结一下我的 2018,貌似今年没有什么记忆深刻或者让我灵光乍现的事情发生,不过有一件说大不大说小不小的事情,人生第一次跳槽。
四月,从郑州到北京。
上一家公司不大,做外包也做产品,在这里工作一年多,同事们很 nice,氛围非常棒,老板也很厉害,项目需求,工期把握的都很好,一些小而精的项目,在功能完备的前提下可以自由发挥,选择什么语言,什么框架,自由度很大,所以能体验到好多好多新东西,从项目到技术,每天都有新感觉。感谢我们老板!!!
四月初,因为开源项目结识的一位技术大佬,他那边招人,做 APM,在北京。本来在郑州上学工作,有机会当然想出去看看啦。还有大佬带(当然还是得自己努力)。离职那天大伙儿一块儿吃了个饭,大三实习来的公司,从学校到工作,大伙儿帮了我很太多太多。想说点什么,但是经验不足或者嘴笨,啥也没说,挺遗憾的。吃过饭就回去收拾东西了,晚上带着行李坐公交车去车站的路上,看着路两旁的灯,还是挺伤感的,居然会想哭。神奇
新公司也很 nice,技术栈很丰富。各种语言的 agent、大数据、机器学习都有,一下见到这么多东西,真的是什么都想学。服务端主要是 Java。原来的 PHP 项目都在用 Java 重写,PHP 在公司已经被逼上了边缘。前俩月一直写 C,之后一直维护一个老 PHP 项目,偶尔还写写 Java。modern PHP 什么的,不存在的。希望今年启几个 PHP 项目。
今年有好几个月都在赶项目,加班比较多,而且做的东西一直都是改字段改 json 结构什么的,让我很虚脱呀,有段时间都想转 Java 了。感觉我比较适合做短平快的东西。
来北京之后跟女朋友就异地了,基本是每个月见一次,因为很少给她打电话闹过两次矛盾,之前一直觉得,又没什么想说的话,为啥一直都要打电话,聊聊微信还不行么。还要聊很长时间,有事儿说完了不应该就挂了?为啥还非得继续找话说?后来经过心平气和的探讨,我认命了。
春节去了趟女朋友家,表现很糟糕,性格比较孤僻,不喜欢说话,平常也很少跟别人交流,去女朋友家之前,还千叮咛万嘱咐的多说话,见人要问好,打招呼。然而还是除了一句新年好和简单的问答之外再没说过其他的了。甚至最后走的时候,从屋里拎着包出来上车就走,一气呵成,连声拜拜也没说。也不知道脑子里在想什么。后来女朋友跟我说,她的妈妈说我,跟个没文化人似的,一点礼貌都不懂。真的是,我这种人,怎么可能会有女朋友。
想想祖传的目标,依然一个也没有做。
今年再加一个吧:希望今年能多跟大家说说话,吃吃饭开开玩笑什么的。

正文完
 0

2018年终总结

68次阅读

共计 919 个字符,预计需要花费 3 分钟才能阅读完成。

引言
鲁迅说:时间就像海绵里的水,只要愿意挤,总还是有的
所以,永远不能以“没时间”为借口来掩饰自己的 …… 懒惰

回首 2018
恍惚间,来到团队已经半年的时间了,从一个什么也不会的小白,在潘老师的指导,组长们辛苦的带领下,慢慢的对软件有了了解。
从刚开始的 HTML CSS 到 thinkPHP,再到前后台分离的 springMVC+Angualrjs 这半年来从 0 一点点的成长,学到了很多,成长了很多;在进团队之前我从来没有感觉到过这样的氛围,开始很不适应,俗话说人在什么养的环境成就什么样的人,在这半年来我慢慢的改掉了我以前的坏毛病,融入了一个大的集体,和他们一起进步。
2018,在团队的这段时间我有新的认知,新的变化,学到了新的知识:
thinkphp
从零入学 TP,在组长的帮助指导下我一点点进步,在这感谢组长的辛苦指导,带我搞懂每一行代码。
springMVC+Angualrjs
TP 是一个过度,为了了解 MVC 思想及面向对象,学习 springMVC+Angualrjs 时,起出感觉逻辑清晰,而且前后太分离,觉得简单,后来知道这是大错特错,它就像时间一样总学总有,就是没有学完的一天,从入门开始就要学习一辈子,只有知道学习才能进步。
Angualr
angualr 是 Angualrjs 的升级版,正在学习。
在这半年我虽然学习 TP Java;虽然可以进行简单软件开发,但是我知道这只是一点皮毛,距离会还相差甚远。
学习如逆水行舟,不进则退
展望 2019
新的一年,新的开始,要有全新的自我,有新的目标:

springMVC 现在掌握的只是皮毛,在新的一年要深入学习 springMVC,对其有一定的了解;
学习 angular,英文不是很好,但 Angular 比较仁慈可以看中文的官方文档;
英语还是总重之重,英语不好学什么编程语言都相当于天书,完全看不懂,更别说什么意思了,学英语还是必要的(一点一点来);
等李宜横,陈杰,黄挺翔他们课表出来有必要的科去跟着听一听,毕竟听了比不挺要强;
每天坚持跑跑步锻炼一下身体,身体才是唯一的保障嘛;

总结
2018,在团队是我成长最快,经历最多的半年,同时我也知道了时间的宝贵,时间真是太快,一晃现在已经 2019 过去了两个月了,2020 即将到来。

正文完
 0

2018 年终总结

68次阅读

共计 2126 个字符,预计需要花费 6 分钟才能阅读完成。

引言
庄子云:人生在世,如白驹过隙,忽然而已。
我们没有道家的飘渺,更没有庄子的哲思,陪伴我们的是谷歌、百度,以及一个又一个流行的开源框架。

2018
没赶上辞旧迎新,就在这春节前夕,感慨一下逝去的 2018 吧!
“汶川地震都十年了。”
“是啊!整整十年了。”
那时,我还在上小学,我还写了信,捐了款以支援灾区,为他们加油打气,告诉他们:同胞一直在你们身边,请不要放弃希望!

bilibili、爱奇艺、拼多多也都相继上市。努力,一切皆有可能。

抖音越来越火,已赶超 Facebook 成为全球最火社交 APP。从最初腾讯提出泛娱乐概念开始,我就在思考,未来可能是泛娱乐时代。但是抖音的成功,我觉得我错了。

在抖音上,我也见识到了令我叹为观止的建筑——腾讯大厦。假想着,我们何时也会如何辉煌?拥有一座自己的大厦呢?

寒冬季,互联网停止社招,并且大规模裁员。为我们敲响了警钟,如何在互联网时代生存下去?如何提高个人竞争力?

去年目标
还记得年初自己定下的目标:

写明白 Spring

学习多线程
学习 $q

睡前不玩手机

目标完成情况
年初时,初学 AngularJS 与 SpringBoot,对什么 IOC、上下文什么的一点都不懂,但是自从暑假时编写了一个 Hibernate 拦截器时,@Autowired 失效了,自己手动从上下文中获取需要的 Bean,我觉得我实现了第一条。
第二条就很简单了,这学期学了 Java,学习了多线程 Thread 类与 Runnable 接口,Spring 中就更简单了,@Async 注解标注该方法为异步方法,SpringBoot 就新建一个线程去运行,无需手动管理。
关于 $q,自己之前研究了好几次也没研究明白,最后看潘老师的视频教程才明白,$q 是一个简化我们创建 Promise 的一个服务。
第四点没做到,感觉以后也做不到,躺在床上就想看看微博,刷刷知乎。

上面的小 logo 是用 Shields.io 生成的,Github 上特别流行用这个小 logo 放在 README 里。
回首
一年中,经历了两个学期,两次大实验。
理解了面向对象,学会了切面对面向对象的补充,学会了 Spring 的核心,IOC 与 AOP。
学会了 AngularJS,入门了 Angular,学会了与之类似的微信小程序。
最大的收获就是讲解的能力有所提升,同时也更稳了。
第一次大实验,采用 ThinkPHP 开发,比较着急的,心里没底,一组六人,我一个人写,他们五个写文档,画图,最终统一审核一下,得到了满意的成绩。但这是一次失败的实验,他们什么都没学到。
第二次大实验,采用 SpringBoot 与 AngularJS 进行开发,此系统比上一个复杂得多,但心里有数,特别的稳,四个人,八个上午肯定能完成。
一步步从头给他们讲解怎么设计 ER 图?Git 怎么用?如何使用 Spring Data JPA 替代课上学的 select 语句?grunt 怎么用,模板怎么抄?nginx 是啥,为啥要用 nginx?怎么启动后台,为什么他们都用 Servlet + Tomcat,而我们只需要一行命令就起来了?收获巨大,这是非常成功的一次实验。
展望
新年了,一起来展望一下 2019 吧!
下学期有移动开发的实验,感觉以后实际开发也会用到这门技术,下学期好好学学,但是架构要重新设计。
同学写过参赛的 Android 应用,我下下来用,卡得不行。鉴于我对我手机还有些自信,至少玩个 QQ、微信、支付宝啥的都不卡,我觉得是编码的问题。
看了几篇关于移动 APP 性能的文章,移动端的技术选型与架构设计十分主要。
移动端技术主要有三类:

Web 跨平台 (React Native、Vue Native、Apache Cordova),一套代码,所有平台(包括手机 web 端) 都出来了,但性能略次于原生。

Flutter 跨平台,采用 Dart 语言构建布局,没有 React Native 等强大,相当于用 Dart 进行布局,逻辑还是 Java 代码,性能很好(Dart 的引擎是用 C ++ 实现的)。Made By Google

原生开发,性能最佳,但效率最低。
2019 年的计划之一,就是采用 Data-Binding + Fragmentation 框架,在移动应用开发的实验中实现单 Activity+ 多 Fragment 架构。至少写出来的东西能在我手机上流畅运行。

Spring 官网的图,当今时代,Spring 一统天下。

Spring Boot:构建一切

Spring Cloud:协调一切

Spring Cloud Data Flow:连接一切

2019 年计划之二,就是入门 Spring Cloud。

之前还没觉得数据结构中那些个时间复杂度、空间复杂度啥的有用,但自从上次给潘佳琦讲解数据去重的时候,考虑了一下时间复杂度,突然觉得算法真的很重要。
最简单的实现,两层 for 循环,但是想到了有 Map,这可就是线性的时间复杂度。
注意,使用自带的数据结构为什么比我们手写要好,我们去打印一下 JavaScript 中的 Map。

Native Code:是浏览器开发者使用 C 或 C ++ 编写的原生代码。想想,同样一个 for 循环,用 JavaScript 写和用 C ++ 写性能差多少,能用原生的实现,就不自己写。

2019 年的计划之三,就是学习一下比较流行的算法,以备开发时提高效率。

2019 年的计划之四,锻炼身体!
2019,新年快乐!

正文完
 0

2018年终总结

68次阅读

共计 953 个字符,预计需要花费 3 分钟才能阅读完成。

2018 年,我改变了我对未来大学生活的看法。从大一只想着吃喝玩乐,天天无所事事,到慢慢开始发掘我要努力奋斗,我要多学习一点东西,因为我想要更好的生活档次。
不得不说我最喜欢的学科是数学,因为他很简单,学起来比较容易,大一的高数,大二的复变我几乎不听老师讲课,感觉有些没必要。而且从小到大,数学一直是我比较优秀的科目,建立了不少自信。即使遇到很麻烦的数学概念,我也有信心我能学好。但是,计算机就给了我另一种感受,从来没有接触过,电脑以前只是用来玩游戏的。可以这么说,在上大学之前,我坐在电脑前除了玩游戏啥都不会。
但是,我的同学却不一样,像陈杰,他高中就学着做视频,还有其它的人,有些别的基础。这使我多少缺失了一点自信。但是,学着学着我发现,有些看起来很简单的问题,很多人竟然编不出来。越学越发现,C++ 还行,挺简单的。尽管当时我知道我学的这点东西没什么用。但老师教的也就这么点。后来我发现如果一直这样下去,我大学毕业以后啥都不会,因此,我进入了团队。
进入团队以后又是一番新的感受。就好像刚刚建立的那点自信又瞬间被打没了。到这里又发现,自己啥都不会,啥都不知道。周周是倒数第一,碰见什么问题都要问别人。起初真是有点待不下去,我想着等啥时候不是倒数第一了,我就走人,毕竟倒数第一走人太没面子了。后来写着大众点评觉得还挺简单的,就慢慢的把走人这个想法淡忘了,觉得来这里是我的荣幸,我要好好珍惜。
以后有了数据结构实验,综合实验,如果我不来团队的话,也许我会和其他人一样从网上粘贴下来,直接就交了。但是,到了这里,其他人不管,起码我舍友看着呢,如果我啥都不会,跟他们一样,这就丢人了。所以,我很努力的把每一个实验都自己做出来,让他们看见这就是我进来之后的不同。不得不说这种感觉真是舒服,看着他们没有头绪的样子,而我的代码已经让老师看过了。尽管实验都可以交上去,但我交的问心无愧。
这一年认识了很多人,团队里的每一个人我觉得都挺好,认识他们我很开心。这一年收获颇多,也许我学到的东西并不多,但是眼界开了不少。抛弃了以前的想法,看到了更大的学习空间。认识到自己真的什么都不会。
新的一年,我更要好好努力。课堂上教的东西必然要学会,团队里的学习也不会轻视。为了以后可以少奋斗一些,现在就需要更加努力。
感谢这一年来所有帮助过我的人。

正文完
 0

2018 年终总结

67次阅读

共计 526 个字符,预计需要花费 2 分钟才能阅读完成。

这算是第一次写年终总结吧,当然公司的除外。
这一年收货很多,做出的东西很比较多,下面总结一下。
1. 可编辑布局系统
这是一个公司内部布局系统,支持层级,可以通过拖拽的方式形成网页,暂时不公开

2. 服务器和域名
5 月份首次购买了服务器,当然只是学生优惠套餐尝鲜,然后完全搭建了自己的个人博客
项目地址:https://github.com/XboxYan/koa-blog
个人博客 https://blog.codelabo.cn
有了服务器,确实可以做很多以前做不了的事
收货很多,体会了后台开发,项目上线的一些趣味

3. segmentfault
个人博客终究只是个人阅读,然后把博客同步更新到 segmentfault,活跃度提升不少
共回答了 203 个问题,发布了 19 篇文章
累计得票 539 票,共计 2990 声望
我的 segmentfault

4. 电影天堂 react native
接近年末,重新启动了这个项目,比之前更加完善,体验更好
项目地址 https://github.com/XboxYan/DYTT
正在学习 react native 的小伙伴,可以参考一下~

最重要的
终于有写博客的习惯了。
2019 年计划

坚定用户体验方向,做偏体验的前端

flutter 学习,开发电影天堂 for flutter

正文完
 0

2018年终总结

67次阅读

共计 10560 个字符,预计需要花费 27 分钟才能阅读完成。


不知不觉一年又要过去了,又到了写总结的时候了。
盘点
整体而言,今年技术层面稍微有点拓宽,跨入了外表看上去高大上的流式计算领域,打开了另外一扇窗;而基于 java 的分布式 / 微服务领域,今年变化比较大,spring cloud netflix 的部分组件宣布将要进入维护阶段,而国内 spring cloud alibaba 组件逐渐活跃起来,目前看来处于 PublicEvolving 阶段;而 java 自身也处在不断进化中,今年发布了 java10 及 java11,明年 java12 也要来了,版本变化非常快。稍不留神就跟不上技术更迭了。
今年不知道为什么没有什么想说的了,感觉整体而言自己表现非常一般,有点老气沉沉的感觉,可能是失去了年轻时候的激情,面对现实开始接受自己的平庸。
展望
面对纷繁复杂的技术,觉得技术真是无止境,有时候觉得自己真的很忙,时间真的不够用;但是面对生活,有时候又觉得人毕竟也是要生活的,是为技术而生活,还是为生活而技术,是一个值得思考的问题。
今年定的几个目标基本也没有实现,明年就不再定具体的目标了,大的几个方向就是深入研究流式计算及系统架构,同时也希望自己脚踏实地的同时多仰望星空,多感受人文的世界。
文章导航
arch

演进式架构
聊聊系统设计中的 trade-off
聊聊 rest api 设计

case

记一次 spring schedule 异常
记一个 nginx host not found 异常
Flux OOM 实例
频繁 GC (Allocation Failure)及 young gc 时间过长分析
频繁产生对象造成 gc 时间过长案例分析
No thread-bound request found 异常

nginx

nginx http 模块配置参数解读
nginx proxy cache 配置参数解读
nginx gzip 配置参数解读
nginx limit 配置参数解读
nginx rewrite 配置解读
nginx lua api 解读
nginx 的 port_in_redirect 配置
openresty 下 lua 的 function 定义及调用

nlp

使用 opennlp 自定义命名实体
NLP 系统体系结构及主要流程
朴素贝叶斯算法文本分类原理
使用 stanford nlp 进行依存句法分析
使用 opennlp 进行词性标注
使用 opennlp 进行文档分类
使用 opennlp 进行依存句法分析
Jena ARQ 小试牛刀

java

jvm 排查工具箱 jvm-tools
java8 parallelStream 性能测试
使用 openjdk9-alpine 运行 springboot2
使用 maven 构建 java9 service 实例
java9 迁移注意事项
java9 opens 与 exports 的区别
java9 module 相关选项解析
java9 gc log 参数迁移
java9 系列 (三) 模块系统精要
java9 系列(四)Process API 更新
java9 系列(五)Stack-Walking API
java9 系列(六)HTTP/2 Client (Incubator)
java9 系列(七)Variable Handles
java9 系列(八)Multi-Release JAR Files
java9 系列(九)Make G1 the Default Garbage Collector
聊聊 java9 的 classloader
java9+springboot2+undertow2 启用 http2 及 server push
Java9 的新特性
java10 系列(一)Time-Based Release Versioning
java10 系列(二)Local-Variable Type Inference
Java10 的新特性
java10 下编译 lombok 注解的代码
聊聊新版 JDK 对 docker 容器的支持
JDK 10.0.1 发布
JDK11 的 ZGC 小试牛刀
Java11 的新特性
Java Flight Recorder 小试牛刀
Java11 HttpClient 小试牛刀
聊聊 jdk http 的 HeaderFilter
聊聊 jdk httpclient 的 executor
聊聊 jdk httpclient 的 retry 参数
聊聊 jdk httpclient 的 connect timeout 异常
聊聊 jdk httpclient 的 ConnectionPool
使用 proguard 混淆 springboot 代码
使用 proguard 混淆 java9 代码
命令行一键切换 java 版本的几种方式
easy-rules 小试牛刀
使用 kotlin 改善 java 代码
jib 打包 docker 镜像实战
jib 自定义 entrypoint
jmxtrans+influxdb+grafana 监控 zookeeper 实战
聊聊 ExecutorService 的监控

spring boot/cloud

聊聊 springboot2 的 micrometer
聊聊 springboot 的 HeapDumpWebEndpoint
聊聊 springboot2 的 MappingsEndpoint
聊聊 springboot2 的 LoggersEndpoint
springboot2 增加 diskspace 指标
聊聊 springboot2 的 ScheduledTasksEndpoint
聊聊 springboot2 的 httptrace
springboot2 自定义 HttpTraceRepository
聊聊 springboot2 的 embeded container 的配置改动
springboot2 自定义 statsd 指标前缀
springboot2 上报 metrics 到 statsd
springboot2 输出 metrics 到 influxdb
聊聊 springboot1.x 及 2.x 的 JvmGcMetrics 的区别
聊聊 JvmGcMetrics 的 managementExtensionsPresent
聊聊 micrometer 的 HistogramGauges
micrometer 自定义 metrics
spring-boot-admin 2.0 小试牛刀
chaos-monkey-spring-boot 小试牛刀
dubbo-spring-boot-starter 小试牛刀
springboot 整合 vue 小试牛刀
聊聊 servicecomb-saga 的 alpha-server
聊聊 Spring Data Auditable 接口的变化
spring security reactive 获取 security context
聊聊 springcloud 的 featuresEndpoint

spring cloud eureka

聊聊 springcloud 的 serviceRegistryEndpoint
聊聊 springcloud 的 EurekaClientAutoConfiguration
聊聊 netflix 的 EurekaHttpClient
聊聊 eureka client 的 shutdown
聊聊 spring cloud eureka 的 instanceEnabledOnit 属性
聊聊 Eureka Server 的 REST API
聊聊 eureka server 的 instance 注册及元数据变更接口
聊聊 eureka client 的 HeartbeatThread
聊聊 eureka client 的 serviceUrl
聊聊 spring cloud 的 DefaultEurekaServerContext
聊聊 spring cloud 的 EurekaServerInitializerConfiguration
聊聊 eureka 的 PeerAwareInstanceRegistryImpl
聊聊 eureka 的 TaskDispatcher
聊聊 eureka 的 renewal
聊聊 eureka instance 的 lastDirtyTimestamp
聊聊 eureka instance 的 overriddenstatus
聊聊 JerseyEurekaHttpClient 的参数
聊聊 eureka 的 preferSameZoneEureka 参数
聊聊 eureka 的 appname 属性
聊聊 eureka 的 ZoneAffinityServerListFilter
聊聊 eureka client 的 backup-registry-impl 属性
聊聊 eureka server 的 RemoteRegionRegistry
聊聊 eureka client 的 fetch-remote-regions-registry 属性
聊聊 eureka 的 delta 配置
聊聊 eureka server 的 response cache
聊聊 EurekaHealthCheckHandler

spring cloud gateway

spring cloud gateway 的 stripPrefix 配置
聊聊 springcloud 的 GatewayControllerEndpoint
聊聊 spring cloud gateway 的 RemoveHopByHopHeadersFilter
聊聊 spring cloud gateway 的 XForwardedHeadersFilter
聊聊 spring.cloud.gateway.default-filters
聊聊 spring cloud gateway 的 ForwardedHeadersFilter
聊聊 spring cloud gateway 的 NettyConfiguration
聊聊 spring cloud gateway 的 SecureHeadersGatewayFilter
聊聊 spring cloud 的 DiscoveryClientRouteDefinitionLocator
聊聊 spring cloud gateway 的 RouteLocator
聊聊 spring cloud gateway 的 streaming-media-types 属性
聊聊 spring cloud gateway 的 GlobalFilter
聊聊 spring cloud gateway 的 GatewayFilter
spring cloud gateway 集成 hystrix 实战
聊聊 spring cloud gateway 的 PrefixPath 及 StripPrefix 功能
聊聊 spring cloud gateway 的 RedirectToGatewayFilter
聊聊 spring cloud gateway 的 PreserveHostHeaderGatewayFilter
聊聊 spring cloud gateway 的 SetStatusGatewayFilter
聊聊 spring cloud 的 RequestHeaderToRequestUriGatewayFilter
聊聊 spring cloud 的 RequestRateLimiterGatewayFilter
聊聊 spring cloud gateway 的 RetryGatewayFilter
聊聊 spring cloud gateway 的 LoadBalancerClientFilter
聊聊 spring cloud gateway 的 RedisRateLimiter

hystrix

聊聊 spring cloud netflix 的 HystrixCommands
聊聊 spring cloud 的 HystrixAutoConfiguration
聊聊 spring cloud 的 HystrixCircuitBreakerConfiguration
聊聊 HystrixThreadPool
聊聊 hystrix 的 timeout 处理
聊聊 HystrixCircuitBreaker
聊聊 HystrixPlugins
聊聊 HystrixEventNotifier
聊聊 HystrixConcurrencyStrategy
聊聊 HystrixMetricsPublisher
聊聊 HystrixPropertiesStrategy
聊聊 HystrixCommandExecutionHook
聊聊 hystrix 的 queueSizeRejectionThreshold 参数
聊聊 HystrixEventStream
聊聊 hystrix 的 BucketedCounterStream
聊聊 hystrix 的 execution.isolation.semaphore.maxConcurrentRequests 属性
聊聊 hystrix 的 fallback

resilience4j

resilience4j 小试牛刀
聊聊 resilience4j 的 CircuitBreakerConfig
聊聊 resilience4j 的 CircuitBreaker
聊聊 resilience4j 的 CircuitBreakerStateMachine
聊聊 resilience4j 的 bulkhead
聊聊 resilience4j 的 Retry
聊聊 resilience4j 的 fallback

spring cloud locadbalancer

聊聊 spring cloud 的 LoadBalancerAutoConfiguration
聊聊 spring cloud 的 AsyncLoadBalancerAutoConfiguration
聊聊 spring cloud 的 AbstractLoadBalancingClient
聊聊 ribbon 的 retry
聊聊 ribbon 的超时时间设置
聊聊 EurekaRibbonClientConfiguration
聊聊 RibbonLoadBalancerClient 的 choose 方法
聊聊 WebClient 的 LoadBalance 支持

redis

聊聊 spring-boot-starter-data-redis 的配置变更
redis 的 bitset 实战
redis 的 HyperLogLog 实战
redis 的 GEO 实战
RedisTemplate 读取 slowlog
聊聊 redis 的 HealthIndicator
聊聊 lettuce 的指标监控
redis 的 sentinel 模式故障演练
聊聊 lettuce 的 sentinel 连接
聊聊 spring-data-redis 的连接池的校验
聊聊 redisTemplate 对 lettuce 的封装
聊聊 lettuce 的 shareNativeConnection 参数
聊聊 LettucePoolingConnectionProvider
聊聊 redis 的 slowlog 与 latency monitor
聊聊 redis 的事务操作
聊聊 redis 的数据结构的应用
聊聊 redisson 的分布式锁
聊聊 redisson 的 DelayedQueue
聊聊 redis 的监控工具
聊聊 redisson 的 RMap 的 computeIfAbsent 操作

mongo
使用 mongo shell 远程连接数据库
mq

OpenMessaging 概览
聊聊 openmessaging-java
聊聊 openmessaging 的 MessagingAccessPoint
open-messaging 使用实例
聊聊 AbstractOMSProducer
聊聊 rocketmq 的 ProducerImpl
聊聊 rocketmq 的 SequenceProducerImpl
聊聊 rocketmq 的 PullConsumerImpl
聊聊 rocketmq 的 PushConsumerImpl
聊聊 rocketmq 的 KVConfigManager
聊聊 rocketmq 的 BrokerHousekeepingService
聊聊 rocketmq 的 NettyClientConfig
聊聊 rocketmq 的 RequestTask
聊聊 rocketmq 的 NettyEncoder 及 NettyDecoder
聊聊 rocketmq 的 RemotingException
聊聊 rocketmq 的 FileAppender
聊聊 rocketmq 的 RollingFileAppender
聊聊 rocketmq 的 DailyRollingFileAppender
聊聊 rocketmq 的 AsyncAppender

sentinel

alibaba 限流组件 Sentinel 实战
聊聊 sentinel 的 SimpleHttpCommandCenter
聊聊 sentinel 的 SentinelWebAutoConfiguration
聊聊 sentinel 的 ModifyRulesCommandHandler
聊聊 sentinel 的 DataSource
聊聊 sentinel 的 SentinelResourceAspect
sentinel 自定义 DataSource 实战
聊聊 sentinel 的 NettyHttpCommandCenter
聊聊 sentinel 的 ArrayMetric
聊聊 sentinel 的 DefaultSlotsChainBuilder
聊聊 sentinel 的 StatisticSlot
聊聊 sentinel 的 AuthoritySlot
聊聊 sentinel 的 DegradeSlot
聊聊 sentinel 的 FlowSlot
聊聊 sentinel 的 SystemSlot
聊聊 token bucket 算法的实现
聊聊 leaky bucket 算法的实现
聊聊 Guava 的 RateLimiter
bucket4j 使用实例
bucket4j-spring-boot-starter 小试牛刀

reactive

reactive streams 与观察者模式
聊聊 reactive streams 的 Mono 及 Flux
聊聊 reactive streams publisher 的 doOn 方法
聊聊 reactive streams 的 backpressure
聊聊 reactive streams 的 schedulers
聊聊 reactive streams 的 parallel flux
聊聊 reactive streams 的 processors
聊聊 reactive streams 的 tranform 操作
使用 SseEmitter 不断向网页输出结果
spring 5 webclient 使用指南
spring webflux 文件上传下载
spring webflux 返回 application/stream+json
reactor3 flux 的 map 与 flatMap 的区别
聊聊 reactor extra 的 retry
使用 webflux 提升数据导出效率
spring 5 webflux 异常处理
webclient 的超时时间配置
FluxInterval 实例及解析
FluxSink 实例及解析
webclient 对 reactor-netty 的封装
reactor-netty 中 HttpClient 对 TcpClient 的封装
reactor-netty 中 TcpClient 的 create 过程
reactor-netty 中 TcpClient 的 newHandler 过程
reactor-netty 的 TcpClient 如何往 eventLoop 提交 task
聊聊 webflux 参数校验
聊聊 reactor 异步线程的变量传递
聊聊 reactor-netty 的 PoolResources 的两种模式
聊聊 NettyConnector 的 start 及 shutdown
聊聊 Flux 的 compose 与 flatMap 操作
聊聊 FluxFlatMap 的 concurrency 及 prefetch 参数
reactor-kafka 小试牛刀
reactor-rabbitmq 小试牛刀

jdbc

聊聊 jdbc socketTimeout 的设置
聊聊 jdbc statement 的 fetchSize
聊聊 pg jdbc 的 queryTimeout 及 next 方法
聊聊 mysql jdbc 的 queryTimeout 及 next 方法
聊聊 pg jdbc statement 的 maxRows 参数
聊聊 tomcat jdbc pool 的默认参数及 poolSweeper
聊聊 jdbc 的 batch 操作
聊聊 jpa 的 batch 操作的实现
聊聊 jdbc 的大数据量读写相关异常的防御措施
聊聊 spring boot tomcat jdbc pool 的属性绑定
springboot2 的 hikari 数据库连接池默认配置
聊聊 hikari 连接池的 isAllowPoolSuspension
聊聊 hikari 连接池的 validationTimeout
聊聊 hikari 连接池的 leakDetectionThreshold
聊聊 hikari 连接池的 maxLifetime 属性及 evict 操作
聊聊 hikari 与 tomcat jdbc pool 的 fail fast
聊聊 hikari 连接池的 idleTimeout 及 minimumIdle 属性
聊聊 hikari 连接池的 fixed pool design
使用 RSQL 实现端到端的动态查询
聊聊 jpa 的动态查询

storm

聊聊 storm 的 submitTopology
聊聊 storm client 的 nimbus.seeds 参数
聊聊 storm nimbus 的 LeaderElector
聊聊 curator recipes 的 LeaderLatch
聊聊 storm supervisor 的启动
聊聊 storm worker 的 executor 与 task
聊聊 storm 的 GraphiteStormReporter
聊聊 storm nimbus 的 mkAssignments
聊聊 storm 的 AssignmentDistributionService
聊聊 storm 的 PartialKeyGrouping
聊聊 storm 的 CustomStreamGrouping
聊聊 storm 的 direct grouping
聊聊 storm 的 tickTuple
聊聊 storm 的 ack 机制
storm drpc 实例
聊聊 storm 的 reportError
聊聊 storm 的 WindowedBolt
聊聊 storm 的 WindowedBoltExecutor
聊聊 storm 的 JoinBolt
聊聊 storm 的 stream 的分流与合并
聊聊 storm 的 LinearDRPCTopologyBuilder
聊聊 storm 的 IWaitStrategy
聊聊 storm 的 maxSpoutPending
聊聊 storm 的 messageTimeout
聊聊 storm client 的 netty buffer watermark
聊聊 storm 的 CheckpointSpout
聊聊 storm trident 的 state
聊聊 storm trident 的 operations
聊聊 storm 的 IEventLogger
聊聊 storm 的 LoggingMetricsConsumer
聊聊 storm 的 LoggingClusterMetricsConsumer
聊聊 storm tuple 的序列化
聊聊 storm TridentTopology 的构建
聊聊 storm trident 的 coordinator
聊聊 storm-kafka-client 的 ProcessingGuarantee
聊聊 storm 的 window trigger
聊聊 storm TridentWindowManager 的 pendingTriggers
聊聊 storm WindowTridentProcessor 的 FreshCollector
聊聊 storm 的 AggregateProcessor 的 execute 及 finishBatch 方法
聊聊 storm TridentBoltExecutor 的 finishBatch 方法
聊聊 storm trident batch 的分流与聚合
聊聊 storm trident spout 的_maxTransactionActive
聊聊 storm 的 ICommitterTridentSpout
聊聊 storm 的 OpaquePartitionedTridentSpoutExecutor

flink

聊聊 flink LocalEnvironment 的 execute 方法
聊聊 flink 的 log.file 配置
聊聊 flink 如何兼容 StormTopology
聊聊 flink 的 SpoutWrapper
聊聊 flink 的 BoltWrapper
聊聊 flink 的 CsvReader
聊聊 flink 的 SourceFunction
聊聊 flink 的 RichParallelSourceFunction
聊聊 flink 的 InputFormatSourceFunction
聊聊 flink 的 ParallelIteratorInputFormat
聊聊 flink 的 PrintSinkFunction
聊聊 flink 的 SocketClientSink
聊聊 flink 的 TextOutputFormat
聊聊 flink 的 JDBCOutputFormat
聊聊 flink 的 CheckpointedFunction
聊聊 flink 的 ListCheckpointed
聊聊 flink 的 CheckpointScheduler
聊聊 flink StreamOperator 的 initializeState 方法
聊聊 flink 的 checkpoint 配置
聊聊 flink 的 MemoryStateBackend
聊聊 flink 的 OperatorStateBackend
聊聊 flink 的 PartitionableListState
聊聊 flink 的 MemoryBackendCheckpointStorage
聊聊 flink 的 MemCheckpointStreamFactory
聊聊 flink 的 FsStateBackend
聊聊 flink 的 FsCheckpointStorage
聊聊 flink 的 FsCheckpointStreamFactory
聊聊 flink 的 TimeCharacteristic
聊聊 flink 的 EventTime
聊聊 flink 的 AscendingTimestampExtractor
聊聊 flink 的 BoundedOutOfOrdernessTimestampExtractor
聊聊 flink 的 Managed Keyed State
聊聊 flink 的 StateDescriptor
聊聊 flink 的 StateTtlConfig
聊聊 flink 的 AbstractTtlState
聊聊 flink 的 Broadcast State
聊聊 flink 的 Queryable State
聊聊 flink KeyedStream 的 KeySelector
聊聊 flink KeyedStream 的 reduce 操作
聊聊 flink KeyedStream 的 aggregation 操作

doc

2017 年终总结
2016 年终总结
过去的 2015 年

正文完
 0

2018年终总结

66次阅读

共计 2805 个字符,预计需要花费 8 分钟才能阅读完成。

转眼间,2018 年就要过去了,又可以来总结一年的得失了。今年可以说是充满了收获与挑战的一年,一年的工作基本上是围绕着 node 来进行的,前端相关的东西是做的越来越少。
工作相关的
今年应该说是换工位频率非常高的一年,东西搬来搬去的好多次,还有三次是进会议室封闭开发。
可以说今年有大概 1 / 3 的时间都是在会议室中度过的,个人还挺喜欢这样,没什么人来骚扰你,可以安心做自己的事情。
上半年的工作强度并没有太大,我有很多的时间能够去看所维护的代码,看前人留下的逻辑。确实发现了一些问题,并且在升级 node 环境之后,完成了一些项目的优化 | 重写,逻辑重构 + 语法升级,在升级完成后,拿到前后对比的数据进行对比,我觉得可能这个就叫做成就感吧。期间遇到的各种问题,使用的各种解决方案,基本上都记录到了博客里边去,也是从这个时候开始,在各个平台开始发表自己的一些笔记。
公司在今年业务发展比较迅速,招人也比较多,团队中注入了大量的新鲜血液,在带来活力的同时也带来了一些挑战。比如大家的编码风格、水平实际上都是有差异的,并不是所有人都一样的,而如何帮助大家写出可读性更高的代码,减少一些可能出现的 bug,我觉得是很重要的一步。如果没有约束,任由个人天马行空,那么会出现一种情况:X 写的代码只能 X 来维护。这是一件很恐怖的事情,尤其在接手过离职同事的代码后,更觉得这个问题一定要解决、得到改善。我并不认可有些借口:“当时只有这种写法,只能这么写”。
N 年前的 jQuery 组件化代码看着也很清晰。
所以在下半年主要研究了两块东西:

维护一套公司内部使用的 ESLint 规则

引入强类型语言 TypeScript 来解决现有 JavaScript 在大型项目中所呈现的弊端

令人欣慰的是两件事都已经迈出了第一步,ESLint 已经覆盖了我们组绝大多数的项目。而 TypeScript 由一些示例 + 实际项目参考 + 两次组内分享已经让大家了解了这是一个什么东西,并且有小伙伴开始在项目中进行实践。
现在觉得代码的可读性比性能还要重要,抛弃了之前特别喜欢的 越短越好 的理念,而是不惜二倍三倍之前的代码量,去写一段可读性更高的代码
在进入 Q4 的时候,开始带人做一些业务。带人就意味着你所做的不再是自己的事情了,我要去对其他人所做的事情负责,需要承担更多的责任。同时在开发之外,我需要做更多的事情:code review、项目开发分配以及更多的沟通,因为时间是固定的,也就是说这会减少我的写代码时间,同时可能会让我失去了一些尝试新工具、新语法、新语言的机会。
最终带人对我来说是好是坏。。现在还不得而知,就目前来说个人觉得:完成公司工作的同时提升自己才是最重要的 现在对我来说这个事情是痛苦的,我没有办法分辨出这是因为所谓的走出舒适区,还是这件事我不认可、觉得不值得,抑或是两者掺杂在一起
业余相关的
在工作之外,今年的收获还算是比较大的。
今年开始发力写博客,分享我所认为有意义的技术,在一些平台上也收获了正向的反馈。比如公众号前端大全的转载、掘金的推送、思否的 Banner,很感谢小伙伴们的认可与支持。
还记得去年年终总结里边写到了 GitHub 关注突破了 100,今年是翻了两倍,达到了 300+,很高兴能有这样的结果。希望 19 年能够继续坚持做总结、参与开源,分享好玩的东西。
今年断断续续的使用 Keep 超过 200 天,虽说腹肌依然没有,但是感觉精神比之前要好一些了(健康最重要,去年体检是亚健康、中度疲劳,今年都没有了)。以及拖了数年的减肥终于初见成果,目前是 182cm、体重基本稳定在 64KG(年中的一波放肆导致体脂率上涨至 19%,这是明年要解决的了)。
在十一月份报名了驾校,选择了口碑比较好的「东方时尚」假日班(这也是为什么从十一月份以后就没再写博客 - -)。从考科一开始算的话,到拿到驾照,周期为 42 天,六周,其中第一周为考完科一以后约车的等待期,剩余五周为学车。个人感觉体验非常好,教练人非常 nice,实名感谢 8045 车的两位教练 李玉军 和 李兵。同时预祝和我同车的小姐姐早日拿到驾照,附赠科目二考试的笔记:有道云笔记传送门。考驾照期间可以说是我全年之中作息最规律的一段时间:4:30 起床 9:00 睡觉。(因为周末需要赶班车要早起,所以干脆那段时间每天都早起,为了避免周末的不适应)
明年的目标
首要目标:脱单,嗯,是的(希望 IMF 安排一下,这段信息在 5 秒钟后自行销毁,????)。其次是把拖了两年进度缓慢的 GO 彻底啃掉,被各种事儿耽误的一直都没有完整的学一遍,可预期的明年前端可能依然会碰得比较少,逐渐变为一个个人爱好。在这之后要尝试补一补计算机基础的知识了,书买的越来越多,看书的时间却慢慢变少 - – 健身与学习都是终身的事情,一定不能断,新的一年要保持现有体重,降低体脂率则是新的指标。最后写博客做记录的这个习惯也要继续保持下去,这样一年结束的时候,也能回顾一下看今年都做了什么。
最后想说的
这一年发生了很多事情,发生了很多当时觉得很重大的事件,但是到年底了再去回顾却发现,也不过如此。
下半年开始的所谓的「互联网寒冬」,网上各种裁员,各种优化。确实觉得比前几年要猛烈一些,这更让我觉得提升自己的能力才是最重要的,囤好过冬的粮食。
今年也是有幸认识了很多新的小伙伴,在与一些小伙伴们的沟通过程中,了解了他们公司在做什么,准备做什么。我觉得这样的信息交换非常的有意义,可以检测你现在所做的是不是大家都在做的、还能够借鉴他人的经验来少走弯路。
同时还从另一个角度重新认识了一些人,确实没少和其他人起冲突。现在觉得,人和人之间确实是不一样的,没必要把自己认为对的强行让他人接受。每个人有每个人的活法,我所认为的正向的事情他可能并不认同。安心做好自己的事情就行了,没必要去管别人。
有天组内开会,扫了一圈发现二十人里边按照时间排序我竟然已经能排到了第三位,从没有想过会在一家公司待这么长时间,而长时间在一个环境,会不自觉的变懒、让自己以更舒适的方式去工作,因为你知道更多的套路,了解很多人,新人也会因为你是老员工而对你更客气一些。我觉得这并不是一个好事,担心这会让人变得懒惰、安于现状、不思进取,让你无法看清事物的本质,活在一个舒适的环境中。我每天都会想,如果我不在这家公司了,我还有什么、我能做什么,我所掌握的技能是否足以让我再找到一份称心的工作,希望自己还能保持着危机感,晴天买伞总是没错的。
今年玩《Civilization VI》多一些,一个回合制的策略类游戏。感觉这个游戏和人生很像,你不能预测下一回合会发生什么。然而人生不像游戏,对手等你的回合结束、抑或可以重新读档,这是一场不可暂停、不可逆的游戏,每一步都很关键。
如何用好每一回合(时间)才是最重要的。
今年对自己的整体评价:不满意,觉得这一年并没有什么成长,一直在吃前几年攒下的余粮。
2019、22 岁了,希望自己能够做得更好,活出自己想要的样子
Born To Be Yours

正文完
 0