岁月划过生命线(2016 年终总结 -季度之星)

2023-10-26

岁月划过生命线(2016 年终总结)

-季度之星

标签 : coder


年假结束, 明天就要回到杭州, 回到我fighting的战场. 回首过去的2016, 放纵了许多, 但也收获了很多: n个项目、n个框架、第一个季度之星、头像第一次登上CSDN以及第一个年度超越预期的KPI一位愿意懂你并能够真正懂你的人

回顾2016, 有两个人不得不感谢: 团队老大-康瑜@康康, 曾经的师兄-周盼@盼爷. 因为康康, 我最终选择了微店, 选择了杭州业务技术部一个温馨的团队, 同时在工作上给予我支持和我鼓励. 因为盼爷的信任和帮助, 可以让我放心、放手去干, 去胜任一份可以从中获取成就感的研发工作.

还好有时常总结的习惯, 2016年2~10月份的内容(如自身提高、项目、开源框架等部分内容)已经在岁月划过生命线(16.02 ~ 10)中提到, 在此就不再赘述.


I. 工作 - 代码

随着独立负责整个动态中心系统的时间愈久, 对项目开发/管理也愈有感觉, 处理线上/线下问题也越来越顺手, 但所做的事情也越来越复杂、越来越零碎.
以前一个业务过来, 总会有师兄将项目按模块划分然后分配下来, 我只需要做好我负责的模块并跟其他同学协调/联调好就可以了. 当师兄转岗和组内一个实习生离职, 整个动态中心系统由内到外, 由上到下全部的责任都压在了自己身上, 不再有人帮你划分模块, 不再有人在旁叮嘱提醒, 任何鸡毛蒜皮的小事(产品经理需要了解下实现原理、运营同学需要开通下权限)、任何线上问题(如线程池满、连接池满、Full GC频繁)都需要你一力承担, 24小时on call等待线上报警、客户投诉.


1. 项目

除了年底接了一个一元夺宝项目, 参与开发抽奖开奖等功能之外, 几乎没再接其他大型的项目. 反而是已经已经接手很长时间的动态中心: 需要不断的重构架构、优化实现才能满足不断增长的用户量、数据量以及新业务的接入. 这段时间遇到了很多比较有意思的问题: 缓存连接池满MQ消费速度过慢导致消息堆积MQ消费速度过快导致MySQL压力过大MySQL压力大/响应缓慢导致线程池满触发任务拒绝策略线程池满导致新请求无法及时响应单台Redis缓存由于数据量大导致响应缓慢必须切换为集群等问题. 由于这些问题只会在线上环境暴露, 因此解决起来非常棘手且紧急, 有时需要连续几天加班/周末不休息地去尝试新的解决方案. 在传统的解决方案解决不了的情况下很多激进的优化方案也会被放到线上测试.

很多优化方案由于公司保密原因在此无法展出, 但有很多的思想借鉴了Java并发编程实战深入理解Java虚拟机以及Java并发编程的艺术等几本书, 感兴趣的同学可以参考下.


2. 框架

除了曾在岁月划过生命线(16.02 ~ 10)一文中提到过的Cacher原cache-annotation)、TouchScriptEngine三个框架在16年的最后一个季度都有非常大的升级改动外, 还将常用的业务/功能组件抽取/集合成一个类Guava的通用类库组件jbox、基于JMX开发了一款VM监控工具-VMX, 不过由于后来在网上找到了Apache Sirona, 他能够提供功能更强大、界面更简洁、配置更简单的监控方案, 因此也就没有再继续推VMX.

  • Cacher(原cache-annotation)
    最新版的Cacher借鉴了spring-cache很多特性: 基于SpEL表达式的条件缓存、多缓存产品管理、常量key缓存、统一key前缀…, 同时3.1版本的cacher默认支持从in-heap-cache到off-heap-cache到off-process-cache到disk-cache一直到cluster-cache的九款缓存实现, 真正做到拆箱可用.

    上图ICache实现为微店内部版本, 开源版本可能会有部分出入.
    project: https://github.com/feiqing/Cacher

  • Touch
    最新版的Touch除了删除了基于web.xml的配置、开始支持基于classpath:touch.xmlhttp://www.vdian.net/touch.xsd的配置、支持属性映射修改等功能外, 没有其他大方面的功能性改进. 而是致力于在保持配置简洁、对原代码低侵入的同时提升Touch的性能以及降低对原系统应用的影响.

    project: https://github.com/feiqing/Touch

  • ScriptEngine
    最新版的ScriptEngine不再依赖一个统一的后台, 而是开发了一款Idea插件, 可以在IDE内书写JavaScript、Groovy、Java代码直接发送到线上执行并拿到返回结果, 由于没有了统一后台的权限校验, 因此在数据传输的过程中添加了加解密规则、使用Zookeeper提供服务自动注册/发现, 在提升易用性的同时提升安全性.

    project: https://github.com/feiqing/ScriptEngine

  • jbox
    定制的线程池(扩展ExecutersThreadPool接口)、性能监控工具(Trace、RT、QPS)、对象字节大小SizeOf, 反射工具(List转Map、List属性抽取)、flood AB简易测试框架、通用调用框架等.

    project: https://github.com/feiqing/jbox

最后公司年会又一次在三亚举办, high了几天…


II. 非工作 - Body-Building

由于工作的压力这段时间的读书和body-building时间被压榨殆尽, 但也利用周末和年假空闲读了几部经典, 并稍事锻炼.


1. 读书

  • JVM
    我一直主张每位开发同学都要了解一些系统底层知识, 如JVM 、计算机系统原理… 哪怕不像撒迦(莫枢)那样可以深入到HotSpot VM内部代码实现, 但如果能够了解其底层实现原理(如内存分配、GC原理、JMM对程并发的优化等), 则可以让我们写出对VM更加友好的代码(提供更高性能).
    这方面我推荐深入理解计算机系统(未读完(⊙﹏⊙))、深入理解Java虚拟机:JVM高级特性与最佳实践两部书以及并发编程网InfoQImportNew等网站的文章/视频, 以及自己亲手做实验验证、总结. 经过两个多月的努力, JVM方面终于得以入门, 结合线上Server的配置以及曾经遇到过的问题组织了团队内部的分享, 并总结出博客发表出来, 收到了不错的反馈. 详见我的博客JVM分类.

年会无聊时又发现一部VM相关书籍Java性能优化权威指南. 这部书将着眼点放了性能调优方面, 介绍了很多性能监控、分析、调优方法, 虽然也有JVM相关内容, 但行文方式与深入理解Java虚拟机有很大不同, 可以结合一起阅读.

  • Effective Java
    了解JVM可以写出对VM更友好的代码, 而了解与Java语言深度结合的实践经验则不光可以写出更高性能的代码, 还可以使其更易于阅读、易于扩展, 而Effective Java则将Java语言的最佳实践经验总结并展现在我们眼前(作者是Java Collections Framework作者, Google 首席Java架构师, 详见你应当知道的Java牛人 v2.0). 虽然以前断断续续读过其中部分章节, 但一直未能从头至尾的吸收其精华, 因此就利用闲暇时间和年假假期好好的精度了一遍. 其中大部分章节(如类和接口泛型通用程序设计异常等)讲解精彩绝伦, 但也有部分章节拖沓冗长、过于追求理论上的完美, 但瑕不掩瑜, 仍是非常值得一读.

不过本书的中文版翻译实在拙劣, 错字连篇, 让我误以为亚马逊开始卖盗版书, 甚至几位中文译者是不是存心毁了这本书? 但翻阅原著, 发现原文行文也确实有些蹩脚难懂.


2. 锻炼

由于天气渐冷、工作渐忙, 坚持了8个月的跑步没有再继续下去, 虽然也办了健身卡, 但也只去跑了几次步就没有坚持下去了. 不过每周陪室友去学游泳倒让放下许久的游泳又坚持了下来, 放松的同时也趁机也学会了自由泳. 年会在三亚一起游泳时也让同事惊讶于一年前还什么都不会的我最近一年来的进步(~ ̄▽ ̄)~.
另外我还竞选了团队“体育委员”一职, 虽然自己的羽毛球球技一直以来未曾进步, 但在工作的间隙组织团队与其他部门同学联谊打球, 推动团队body-building, 大家在一起抛开工作说说笑笑, 也让团队气氛更加融洽.

早晨起来称一下体重, 由于几个月来的辛(hao)苦(chi)工(lan)作(zuo), 已经从74kg涨到了79kg, 因此在新年目标中又增加了一项: 体重从79降到72.


III. 季度之星

微店每个季度会从不同的方向(技术、运营、产品、客服、行政….)评选出一批优秀员工予以奖励 -是为季度之星. 虽然是一名毕业不久的应届生, 但对这一隆重奖项也觊觎良久, 但也从想过这么快就能够得到. 当得知自己获奖的一刻, 意外 & 激动 溢于言表, 感谢团队成员和公司的肯定.


IV. 规划 - 未来(2017.01 ~ 2017.04)

其实我是来给书做广告的 ╮(╯_╰)╭ …
现在以及未来的5个月初步计划要完成下列内容的学习(1~3 必须完成, 4~6视情况而定):

1. Java基础

  • Effective Java
  • 深入理解Java虚拟机(复习)
  • Java多线程编程的艺术(Java并发编程实战)
  • Java性能优化权威指南(HotSpot实战)

2. 分布式 & NoSQL

  • Zookeeper: 从Paxos到ZooKeeper.
  • 大型网站系统与Java中间件实践.
  • 分布式消息队列MQ: RabbitMQ实战(RocketMQ的实践 & 设计理念).
  • Redis设计与实现

3. Spring实战 & 原理

  • Spring实战
  • Spring揭秘

附: 人文

  • 文明之光(第2册: 从牛顿到航天)
  • 彷徨之刃(当法律无力逞凶, 人们该去往何处?)

*4. 算法

  • 算法之道
  • 算法(第4版)
  • 算法设计与分析基础(第3版)

*5. 存储: MySQL & 分布式

  • MySQL技术内幕 - SQL编程
  • MySQL技术内幕 - InnoDB存储引擎(MySQL调优)
  • 大规模分布式存储系统:原理解析与架构实战(OB存储核心)

*6. 大数据

  • Hadoop(MR/HDFS): Hadoop基础教程(Hadoop权威指南)
  • HBase: HBase权威指南
  • Hive: Hive编程指南

*附. 其他

  • 原理: TCP/IP、操作系统、计算机系统
  • 搜索引擎、机器学习入门
  • 脚本语言: Node.js、Python、Groovy

给时光以生命, 而不是给生命以时光.


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

岁月划过生命线(2016 年终总结 -季度之星) 的相关文章

  • MFC窗口销毁过程

    MFC窗口销毁过程 考虑单窗口情况 假设自己通过new创建了一个窗口对象pWnd 然后pWnd gt Create 则销毁窗口的调用次序 1 手工调用pWnd gt DestroyWindow 2 DestroyWin
  • 一个人如何才能成功

    最近看了很多书 听了很多讲座 给我的感触很深 让我想了很多 联想的老总柳传志 GE的前任老总 还有松下幸之助他们为什么会成功 他们有什么不同常人的地方呢 听了华人讲师陈安之的讲座 触动了我得内心深处 他也是一个普通人 在他成功之前他也遇到很
  • 解析WINDOWS中的DLL文件---经典DLL解读

    在Windows世界中 有无数块活动的大陆 它们都有一个共同的名字 动态链接库 现在就走进这些神奇的活动大陆 找出它们隐藏已久的秘密吧 初窥门径 Windows的基石 随便打开一个系统目录 一眼望去就能看到很多扩展名DLL的文件 这些就是经
  • 什么是node,node怎么用?

    Node js 是一个基于Chrome V8 引擎的JavaScript运行环境 Node js使用了一个事件驱动 非阻塞式I O的模型 使其轻量又高效 事件驱动 任务执行 发布者 订阅者 事件驱动 on emit 非阻塞 执行某一个任务的
  • vue.js 开发环境搭建最简单攻略

    更新 本篇文章是我很之前写的 对于一些没有工作 或者js基础不太好的同学 建议不必大费周章去搭建环境 可以直接引用 vue js 就可以进行学习 练习 有些过程是水到渠成的 当初很多不懂的东西慢慢就懂了 官方指南假设你已有HTML CSS和
  • maven环境变量配置,总不成功,你就这样试试

    我下载了maven 解压后的目录为 配置了用户变量为下图 然后配置系统的path变量如下图 配置完后我也重启了系统 但是还是显示为下图 这是怎么回事 我进入 bin 下执行命令就没问题 说明程序好好的 但是这个怎么就是不成功呢 分享到 举报
  • [诗歌] 断章

    你站在桥上看风景 看风景的人在楼上看你 明月装饰了你的窗子 你装饰了别人的梦 转载至 http baike baidu com link url CryedmfRUvN f04J9seKNbNNojxFQ4FmvF2 P7scQmAQWGq
  • Rxjava初步理解

    本质就是通过回调实现 Observable被观察对像 成员变量onSubscribe Subscriber 观察对象 订阅 Observable subscribe先调用Subscriber onStart 然后调用onSubscribe中
  • 狂神说 MyBatis 笔记

    这里写目录标题 Mybatis 1 简介 1 1 什么是MyBaits 1 2 持久话 1 3 持久层 1 4 为什么需要Mybatis 2 第一个Mybatis程序 2 1 搭建环境 2 2 创建一个模块 2 3 编写代码 2 4 测试
  • 项目失败的思考

    1 鲁莽的追求新的开发框架 2 没有让组员提前学习必要的知识 3 低估项目难度 没有想到潜在的需求和技术难点 4 项目没有时间性的计划 5 任务没有很好的分割 1 项目争取阶段 做好demo 2 项目准备阶段 选择开发框架 让组员了解相关知
  • 在Maven中前端构建实践

    NodeJS为前端技术的发展带来了一次革新 层出不穷的前端库 框架以及打包工具让大家应接不暇 然而这使得前端技术越来越依赖于NodeJS 基于NodeJS编写的前后台项目可以使用同一编译或者打包工具进行管理从而做到无缝的前后端版本控制以及联
  • MyBatis快速入门(一) 搭建环境和单表映射

    MyBatis简介 一说起对象关系映射框架 大家第一时间想到的肯定是Hibernate Hibernate作为一个著名的框架 功能十分强大 我们只需要配置好实体类和数据表之间的关系 Hibernate就会自动帮我们完成生成并执行SQL语句
  • SpringMVC:从入门到精通,7篇系列篇带你全面掌握--五.JSR303和拦截器

    Welcome Huihui s Code World 接下来看看由辉辉所写的关于SpringMVC的相关操作吧 目录 Welcome Huihui s Code World 一 JSR303是什么 二 使用JSR303的优势 三 使用JS
  • 访谈:小学学历的程序员自主研发出框架级产品

    提到许松森 也许你并不知道他是谁 在Google中敲入这个名字 能找到的结果也寥寥无几 那么做为我们这一期采访的主角 他究竟是用什么在吸引着我们呢 打开许松森的blog 开篇就是 我的悲惨人生 读在字里行间 对他在逆境中的自我成长很是敬佩
  • mybatis之foreach用法

    在做mybatis的mapper xml文件的时候 我们时常用到这样的情况 动态生成sql语句的查询条件 这个时候我们就可以用mybatis的foreach了 foreach元素的属性主要有item index collection ope
  • 如何在spring框架中解决多数据源的问题

    在我们的项目中遇到这样一个问题 我们的项目需要连接多个数据库 而且不同的客户在每次访问中根据需要会去访问不同的数据库 我们以往在 spring 和 hibernate 框架中总是配置一个数据源 因而 sessionFactory 的 dat
  • 理解Spring的AOP和Ioc/DI就这么简单

    一 什么叫Ioc DI Ioc Inversion of Control 控制反转 DI Dependency Injection 依赖注入 其实这两个概念本质上是没有区别的 那我们先来看看什么叫做Ioc 假设这么一个场景 在A类中调用B类
  • 写需求分析必须牢记的5大要点

    需求验证的5大要点 要做好需求验证 必须在思想 方法 语言 人员 内容5个要点上做好相应的工作 否则就会产生很多负面的影响 1 思想 前面已经说过 由于Review被翻译成 评审 导致很多人将其与中国人常说的评审相混淆 其实它们之间是有区别
  • 多线程太可怕了

    今天发现了一个多线程引起的bug 然后进一步体会到 这东西太容易出问题了 首先要说明的是 出问题的代码可不是一般人写的 是由一个叫EPAM systems的世界知名外包公司的人写的 这些java程序员个个经验丰富 心高气傲 貌似base在乌
  • iOS自动布局——Masonry详解

    欢迎大家前往腾讯云 社区 获取更多腾讯海量技术实践干货哦 本文由鹅厂新鲜事儿发表于云 社区专栏 作者 oceanlong 腾讯 移动客户端开发工程师 前言 UI布局是整个前端体系里不可或缺的一环 代码的布局是设计语言与用户视觉感受沟通的桥梁

随机推荐

  • pcm vlc 文件_VLC播放pcm

    Applications VLC app Contents MacOS VLC demux rawaud rawaud channels 1 rawaud samplerate 48000 rawaud fourcc s8 Users lz
  • 白银价格波动因素是什么?

    在白银产品的投资中 人们要更加全面的对市场进行了解 其中涉及到的范围比较广阔 只有对整个市场的发展和影响因素进行细致的分析 才可以更好的参与到白银产品的投资中 为了更好的获得实际性的利益 重点要对白银的价格进行细致的了解 这样使人们在投资时
  • 特别篇:input小结

    input 我们日常中在使用Python时都会使用input 在控制台进行输出 但是不知道大家发现没有 因为Python是一种动态语言 所以不会像Java中的Scanner类 在代码中可以控制输入的类型 所以当我们输入数字时 底层也会把我们
  • 程序流程图画法复习-三种循环语句(for,while,do while)

    程序流程图画法复习 1 程序流程图的作用 程序流程图的作用程序流程图的作用程序流程图的作用 程序流程图是人们对解决问题的方法 思路或算法的一种描述 流程图的优点 a 采用简单规范的符号 画法简单 b 结构清晰 逻辑性强 c 便于描述 容易理
  • HTTP请求行详解

    目录 一 认识URL 二 认识方法 2 1 GET方法 2 2 POST方法 2 3 其他方法 请求行也就是HTTP请求的第一行 接下来将对第一行内容进行详细解释 一 认识URL 平时我们俗称的 网址 其实就是说的 URL Uniform
  • 从0开始学PyTorch(一):线性回归、Softmax与分类模型、多层感知机

    文章目录 线性回归 模型 数据集 损失函数 优化函数 随机梯度下降 Softmax与分类感知机 softmax的基本概念 多层感知机 多层感知机的基本知识 隐藏层 表达公式 激活函数 线性回归 线性回归的基本要素 模型 为了简单起见 这里我
  • java文件下载接口,含泪整理面经

    Java如何入门 1 建立好开发环境 首先建立好开发环境非常重要 工欲善其事 必先利其器 做任何开发 首先就是要把这个环境准备好 之后就可以去做各种尝试 尝试过程中就能逐渐建立信心 初学者往往在环境配置中被各种预想不到的问题弄得很沮丧 这里
  • Python工业项目实战 04:数仓维度层DWS层构建

    知识点01 课程回顾 ODS层与DWD层的功能与区别是什么 ODS 原始数据层 存储格式 AVRO 数据内容 基本与原始数据是一致的 DWD 明细数据层 存储格式 Orc 数据内容 基于与ODS层是一致的 ODS层的需求是什么 自动化建库建
  • php怎么判断密码是否达标,php中简单的密码强中弱判断,php密码验证规则

    密码种类 1 小写字母 2 大写字母 3 数字 4 特殊符号 弱 1 中 2 强 3 或 4 长度 6 16个字符 区分大小写 1 长度判断 pwd len strlen password if pwd len gt 16 pwd len
  • 【华为OD机试】仿 LISP 运算【2023 B卷

    华为OD机试 真题 点这里 华为OD机试 真题考点分类 点这里 题目描述 LISP 语言唯一的语法就是括号要配对 形如 OP P1 P2 括号内元素由单个空格分割 其中第一个元素 OP 为操作符 后续元素均为其参数 参数个数取决于操作符类型
  • 百度语音合成精简版

    我参照文档合成的源码下载 https download csdn net download qq 31939617 10388588 下载 文档 Android TTS SDK 集成进入helloworld 项目 一 简介 本文针对遇见集成
  • io流读写文件(文件内容修改)

    package cn sos psasps import java io BufferedReader import java io BufferedWriter import java io FileReader import java
  • Git第十三讲 Git重置和回滚更改

    在使用Git时 我们有时可能会犯错或者需要撤销之前的提交或更改 Git提供了一些强大的命令来重置和回滚更改 帮助我们管理项目的版本控制 本文将介绍如何使用Git进行重置和回滚操作 重置到指定提交 重置 Reset 命令允许我们将分支的指针移
  • tar 打包压缩命令

    tar 命令用于文件的打包或压缩 是最为常用的打包压缩命令 其语法格式如下 tar 选项 文件名 tar gz 源文件 tar czvf xxx tar gz source file tar czvf 包名 tar gz 源文件 以tar
  • 【以太坊系列-005】使用solc编译solidity智能合约,并生产web3deploy格式的代码

    说明 本文主要介绍 只通过solc来进行智能合约的部署 更简单的方式是通过remix直接生成 该场景是用于用户自己修改了solc编译器 remix无法使用的情况 1 代码结构 cat counter sol pragma solidity
  • SPP连接流程

    1 SDP服务注册 Server Channel即RFCOMM Server Channel 表示上层profile的rfcomm channel Central设备会使用SDP查询SPP的Server Channel 在后面使用RFCOM
  • C++ — 类型萃取

    类型萃取 在编程中我们可能时常会听到类型萃取这个高大上的 学术名词 我们今天来探究一下这个高大上的学术名词 到底是何方神圣 先看看官方的解释类型萃取使用模板技术来萃取类型 包含自定义类型和内置类型 的某些特 性 用以判断该类型是否含有某些特
  • Coinbase 研究:Web3 开发者堆栈指南

    原文标题 A simple guide to the web3 developer stack 撰文 Jonathan King Connor Dempsey Hoolie Tejwani 编译 胡韬 链捕手 尽管比特币和以太坊的兴起 以及
  • 电力识读图解(电力系统、电力网、电力系统电路图)

    一 电力系统和电力网 世界上大部分国家的动力资源和电力负荷中心分布是不一致的 如水力资源都是集中在江河流域水位落差较大的地方 燃料资源集中在煤 石油 天燃气的矿区 大电力负荷中心则多集中在工业区和大城市 因而发电厂和负荷中心往往相隔很远的距
  • 岁月划过生命线(2016 年终总结 -季度之星)

    岁月划过生命线 2016 年终总结 季度之星 标签 coder 年假结束 明天就要回到杭州 回到我fighting的战场 回首过去的2016 放纵了许多 但也收获了很多 n个项目 n个框架 第一个季度之星 头像第一次登上CSDN以及第一个年