来到哈希坊一个月,聊一聊我收获了什么

796 阅读6分钟

前言

2020.3.1~2020.4.1,哈希坊面试成功已经过去两个月了,入职也已经过去一个月了,写点东西和大家进行一下分享,本文会写到以下的内容:

  • 个人一路走来的经历
  • 未来的一些思考
  • 这个月学到了什么
  • 分享一些好用的工具

从校园出发,到达天津、云南、湖南

2020年毕业的我,在2019年1月开始,寻找人生中的第一份工作,当时的目标就是找到一份Java实习生的工作,每天都在投递简历,投了2个月。

200份简历发出,可能只有6个人会回复我,只有2个人愿意给我一次远程面试的机会。

我是幸运的,在投递了200次简历的时候,终于有人给了我机会,而我也把握住了机会,成功的去到了天津,我的第一家公司。

做了3个月,即将转正的时候被老板辞退了,告诉我公司要和北京XX公司合并,这次辞退不是我的问题。巴拉巴拉说了一堆。

当时心里挺难过的,感觉是老板在安慰我,反思了自己这三个月,感觉自己做的也不是很好。

接着开始找自己的第二份工作,没过两天,成功找到第二份工作:天津工业大学软件工程系企业指导老师 。当时就负责给那些马上毕业的学生指导毕业设计,一开始觉得自己挺菜的,但是我带的那20个大学生更菜。例如表名叫做 duliyinleren(译:独立音乐人);数据库字段长度统一255。

他们毕业之后,我也辞职了,因为自己都只是一个学生,去教别人,是在误人子弟。

第三份工作就是在昆明一家小公司,一直做了半年多的样子,因为老板一直画饼,也走了。也许是上进心作祟,又或者在网上看到同龄人各种斩获大厂的offer,这半年多,只有一个关键字 -- 学习。除了家人,几乎没有和同事出去玩过,八九成时间拿来学习了,很枯燥,一个人在外地也很寂寞。

一年之后,何去何从

之前加了几个技术微信群,看到很多技术朋友在兴高采烈地讨论各种源码,spring源码我彻底撸了一遍、最近深入学习了dubbo底层实现方式,当然曾经的我也是这样的,记得学习volatile的时候一直挖到了volatile在硬件层面上的实现方式,但是这真的说明技术能力强吗?从今天的思考去看这个问题,我认为这更多反应的是一个人的学习能力、钻研能力以及对技术的热情,除此之外再体现不出太多其他东西了。

钻研是好事,但是实际上大多时候的深入钻研并不在实际工作中有用,且研究得越深,忘得越快,因为研究得越深,那么这个技术点关联的技术点就越多,边边角角的忘了,核心的东西不容易串起来。那么什么是真正的技术能力,我画一张图概括一下:

这只是我自己的想法,解决问题的能力才是技术能力的真正体现,这也会是未来我要走的路。

这一个月的收获

  • Git

    我每天使用 Git ,但是很多命令记不住,下面是我整理的常用的 Git 命令清单。

// 以图表形式查看分支
git log — graph

// 修改commit 内容
git commit --amend

// 暂时将未提交的变化移除,稍后再移入
git stash

git stash pop

// 合并分支并录入合并信息
git merge —no—ff

// 创建并切换分支
git checkout -b

// 显示分支一览表
git branch

// 查看本次提交与上次直接的区别
git diff head

// 显示指定位置的日志
git log 目录或文件

// 查看当前仓库的操作日志
git reflog

// 添加远程仓库
git remote add origin 仓库地址

// git 基本提交流程
git clone

git checkout -b

git push -u origin

git add

git commit

git push

  • PHP

  • Nginx

// 通过 HomeBrow 安装
nginx 目录 /usr/etc/nginx/

// 测试Nginx配置文件是否正确
nginx -t

// 快速停止nginx
nginx -s stop

// 完整有序的停止nginx
nginx -s quit

// 修改配置后重新加载生效
nginx -s reload

// 启动nginx
start nginx
  • MySQL 900W + 数据,从17s到300ms 优化原理:减少回表操作

优化前 SQL

SELECT 各种字段
From `table_name`
WHERE 各种条件
Limit 0,10;
优化后 SQL
SELECT 各种字段
FROM `table_name` main_table
RIGHT JOIN
(
SELECT 子查询只查主键
FROM `table_name`
WHERE 各种条件
LIMIT 0,10
) temp_table on temp_table.主键 = main_table.主键

优化前的 SQL 查询过程 例如执行 SELECT * FROM table_name where XXX = 1 LIMIT 300000, 5;

  • 查询到索引叶子节点数据 🍃
  • 根据叶子节点上的主键值去聚簇索引上查询需要的全部字段值 🍃

像上面这样,需要查询 300005 索引节点,查询 300005 次聚簇索引的数据,最后再将结果过滤掉前 300000 条,取出最后 5 条。MySQL 耗费了大量随机 I\0 在查询聚簇索引的数据上,而有 300000 次随机 I/0 查询到的数据是不会出现在结果集当中的。 此时抛出一个问题:既然一开始是利用索引的,为什么不先沿着索引叶子节点查询到最后需要的 5 个节点,然后再去聚簇索引中查询实际数据。这样只需要 5 次随机I\O。

总结 如果我们遇到性能瓶颈的时候可以考虑通过连接查询或者子查询来先查出目标数据的主键然后再查出对应的其他字段。

  • Laravel 7

  • 代码整洁

    命名做到名副其实,一旦发现有更好的名称,就换掉旧的。 名称应该答复你所有的大问题。它应该告诉你,它为什么会存在,它做了什么事,应该怎么用。

  • 设计模式

    • 单一职责原则

    单一职责原则提出了一个编写程序的标准,用“职责”或“变化原因”来衡量接口或类设计得是否优良,但是“职责”和“变化原因”都是不可度量的,因项目而异,因环境而异。 接口一定要做到单一职责,类的设计尽量做到只有一个原因引起变化。 类变化指的是一个类只做自己的事,例如 User 类,那么它只做 User 的操作🍺

    • 里氏替换原则
  • 算法相关

    时间复杂度与空间复杂度的理解

  • 答妹项目重构

分享一些的工具

这些工具都是我使用过的,比较好用才分享给你们的。

收藏夹工具:raindrop.io

MarkDown 排版工具:Markdown Nice

Git Commit 编写工具:Conventional Comits

你知道的越多,你不知道的越多。