回家的旅程

回家的旅程一波三折。

早上匆忙小区到地铁站后发现忘带身份征了,考虑了一下时间成本又跑了回去拿,后来坐上地铁半个钟头才恢复过来;

本以为坐上高铁就能平安到家了,结果到了又差一点坐过中转高铁站(抢到的是中转车票),幸好有个人买了我正在坐的座位,跟他交谈了几句我意识到再不下车就要坐过站了,随即迅速拿着行李下车,果然出来后没多久车门就“咔”的一声关闭了。

整个回家旅程因为这两个事件折腾的很疲惫,我今年一年也不会忘记这次匆忙的经历。

MySQL 的字符集与排序规则

#MySQL

通俗讲字符集就是字符码的集合,在 MySQL 中字符集的选择影响字符码的存储,字符集选择不好不仅影响存储展示还会有问题,例如乱码。

在业务中常用的字符集是 UTF-8 字符集,mysql 有两种这样的字符集:utf8、utf8mb4,它们的区别如下:

  • utf8: 支持最长 3 Byte 的字符编码,但一部分 UTF-8的 4 Byte 编码不支持,例如 emoji。
  • utf8mb4:支持最长 4 Byte 的字符编码。这是业务中使用最多的字符集,从 MySQL 8.0 开始成为默认字符集。

字符的排序规则(collate):字符在比较、排序时以及大小写敏感的规则。涉及字符比较的操作均与其相关,例如:排序、分组、索引、比较(=、>、<等)。MySQL 中有些字符排序规则是忽略大小写的,例如 utf8mb4_general_ci 排序规则,这种带有 ci 后缀的是大小写不敏感的标志(ci 即 case insensitive 的缩写)。

» 阅读全文 · MySQL 的字符集与排序规则

Java 中使用枚举的正确姿势

#Java

在项目开发中我们经常用到枚举定义常量,例如定义系统中用户的身份类型(ADMIN、USER…)、定义项目启动环境的类型(DEV,PROD…)、某个字段的值的枚举等。往往我们发现在项目里定义枚举类时只是有枚举成员,像下面这样:

public enum Type {
  T1,T2,T3
}

不能说这样不好,只是这样差不多又回到了我们使用类定义静态常量常量。Java 中除了有类(class)这种类型,又实现了枚举(enum)这种类型,说明肯定它独特的用处,不妨我们先回忆下使用类成员定义静态常量和枚举定义常量的区别。

  • 使用类的静态成员定义常量,常量只能有一个固定的值,通常是一个简单的字符串或一个数值。
  • 使用枚举定义常量,实例化枚举后不可变,枚举可以携带多个值,这为常量提供了更多信息。(补充,虽说枚举实例化后不可变,但它的成员变量如果不用 final 修饰,是可变的!)
  • 如果你熟悉枚举的原理,你可以通过类(class)模拟出一个枚举(enum),但通常你需要两个类来完成这个工作,一个类来定义枚举和其成员,另一类完成初始化。而枚举(enum)通过编译消除了这些复杂性,可以轻松实例化对象和定义方法。

通过它们之间的区别,可以看出枚举能为我们的常量提供更多的信息和更加便捷的定义、实例化。那么如何利用好枚举这些特性,如何定义好用(便捷)的枚举呢?

» 阅读全文 · Java 中使用枚举的正确姿势

2022 年总结:积极生活每一天

#年终总结

不平凡的一年过去了,生活是个五味调料罐,喜怒哀里交加,平凡中偶尔跳出惊喜,我相信无论处在什么样的境遇,生活中主动些、积极性会变得更好些。

今年年底终于看到疫结束的希望了,距离 2019 年年底发现新冠整整三年了,“大学有几年,疫情占三年”,我印象最深刻的是大学的网课,老师们猝不及防地适应直播教学,学生们不再去教室上课了,还有各个地方的管控,以至于过年、假期回不来家,后来入职后开始了一个多月的线上办公。疫情期间这段记忆太深刻了,以至于听到放开的消息,心情激动就像工作日给放了个假似的,以后可以大胆和朋友聚餐,愉快地出去转一转了。

这一年有两个重要时间节点,毕业、入职工作;这一年终于有空在北京附近的景点转一转;这一年和老同学重新联系聚餐,也和同届的同伴在北京聚了餐。平安喜乐,充实的 2022 过去了。

» 阅读全文 · 2022 年总结:积极生活每一天

《如何讲好一堂课》笔记

这是在网盘里无意间发现的课程,碰巧近期也打算提高下个人综合能力,于是花了一天多学习了下,总体还不错(挺受益),虽然讲的是“如何讲好一堂课”,但对于日常沟通表达也是适用的,单从信息传达效率的角度讲,“讲课”这种形式更加科学、高效。课程不错,收获颇丰,但我学完后还没来得及实践,只匆匆记下了些要点,留作日后复习回顾。

(题外话)通过学习这个课程我真切地体会到一个优秀老师(具备丰富教学经验 & 专业知识 & Passion )能够对学生产生的影响,他们除了“传道、授业”还能以恰当的方式“解惑”,他们行胜于言,有热情,能够在细节之处打动学生。回顾我的学生时代,有几位令我印象深刻的老师,他们是:倪海武老师、侯春芳老师、牛兴丽老师、李学勇老师。

» 阅读全文 · 《如何讲好一堂课》笔记

“最近发展区” 理论

最近发展区理论 是教育学上的一个概念,它把人理解事物的等级做了区分,使教育者可以使用这个理论评估学生和教学内容,以达到最优的教学效率。最近发展区理论具备一定的普适性,也可以用在日常沟通、会议、汇报、分享等场景中,作为评估用户的方法。

根据 “最近发展区” 理论,可以人把当前具备的知识划分为三个级别:知识舒适区、最近发展区、知识困难区。

  • 知识舒适区:人已有的知识,理解应用这些知识自然且没有压力
  • 最近发展区:人可以根据已有的知识可能达到的知识,通常需要借助外力达到;
  • 知识困难区:知识超过了人能理解的范围,理解应用这些知识困难

如果把我们日常场景分成两类:沟通交流(会议、汇报)、分享教学(分享、讲课),那么:

  • 在沟通交流的活动中,应该尽量在双方的知识舒适区进行交谈、讨论,避免出现知识困难区的词汇、概念;

  • 在分享教学活动中,最应该关注的是受众群体的最近发展区,最近发展区的知识能有利地让受众成长和受到启发。知识的掌握是一个循序渐进的过程,知识的准备需要遵循这样的逻辑与原理,在准备时首先要找到受众群体的上限和下限(受众群体存在差异时要找重叠区),在组织材料时通常由下限逐渐延伸至上限。

数据优先级

今天上午和前端同学开周会,我捕获到了一个字眼 —— “数据优先级”,这让我想到了我工作中处理任务的优先级,如果把程序想象成一个具备独立思维的个体,它想更好的处理业务也是需要考虑这些的。

在工作中,同时处理多个工作有时让人头大,从一件事转向另一件事,脑海里必然要切换事情的上下文,有时话费的时间甚至比做这件事还多,这种情况对应到程序中自然是操作系统调度线程切换上下文的开销,我们不能忽略,程序也是。还有数据竞争、锁机制等,都能找到和生活中对应的,如果把我们现实中的最佳实践应用在程序肯定会提升程序设计能力。

《用工程师思维解决问题》分享笔记

一、架构需要考虑人性

这是我在程序设计中没有考虑过这一点。最终,架构是给人用的,过度设计、复杂等会导致过多开发负担。

二、架构约束

  • 资源和人力是有限的
  • 技术受限
  • 指标相互约束

选择合适的方案,适时借力

» 阅读全文 · 《用工程师思维解决问题》分享笔记

让居家办公更加专注的心得

居家办公有许多外界干扰因素,室友活动、外界噪声、宠物等,最主要还是一个人少了工作些氛围感。

让自己专注的第一步就是心态上做好准备,首先是洗漱好,最好也整理头好头发什么的,就像正常上班一样(在这个准备的过程中心态也会渐渐的摆正 ha ~),再就是穿舒适的衣服;办公桌椅是战场,也要收拾一下,干净利索、舒适是比较好的,这样依赖码字什么干扰因素能达到最少,另外办公桌的光线是需要注意的一个点,太暗会让人昏昏欲睡,太亮容易引起视疲劳,博主最近尝试了一个护眼台灯还不错,效率提升了一个 Level;开始工作时先想清楚要做的工作,如果方便可以记个便签,提醒自己聚焦;无论是线下还是线上办公,长时间集中精力是难的,这时可以吃点东西或者活动一下,让脑袋放松一下然后再开始工作;其他因素,睡眠质量不好肯定影响白天的效率(多数熬夜导致的 emm ~~),一些比较好的实践是洗漱后就不用电子设备了,适当早睡,有人肯定说习惯了晚睡,早睡睡不着,有一个东西叫“冥想”,可以尝试把脑袋放空,然后调整呼吸,过一会可能就睡着了(^_^)。

方法不一定适用所有人,相信科学的方法会有效果地。

用 Java 实现生成 Markdown 文本的工具

#Markdown

公司的 IM 每天有许多机器人推送的消息,我也在使用,这个功能是好的,但是当我们想去发送一些格式优美的消息时,却要费许多功夫,主要来源于字符串拼接,如果要拼接出 Markdown 格式的那就更费力了,另外由拼接带来的是混乱的代码,为了解决这个痛点,我写了一个 Java 代码生成 Markdown 文本的工具,还给它起了一个酷酷的名字 MdKiller。

MdKiller —— Markdown 杀手。

MdKiller 可以格式化生成 Markdown 文本的工具,支持常用 Markdown 格式生成,例如引用块、代码块、有无序列表、表格等,内容上支持字体样式(style)和内容的嵌套,适用于 IM 消息 Markdown 排版。

» 阅读全文 · 用 Java 实现生成 Markdown 文本的工具