This commit is contained in:
周伟
2022-05-11 18:46:27 +08:00
commit 387f48277a
8634 changed files with 2579564 additions and 0 deletions

View File

@@ -0,0 +1,642 @@
<!DOCTYPE html>
<!-- saved from url=(0046)https://kaiiiz.github.io/hexo-theme-book-demo/ -->
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.0, user-scalable=no">
<link rel="icon" href="/static/favicon.png">
<title>23 结束语 会使用只能默默“搬砖”,懂原理才能快速晋升.md</title>
<!-- Spectre.css framework -->
<link rel="stylesheet" href="/static/index.css">
<!-- theme css & js -->
<meta name="generator" content="Hexo 4.2.0">
</head>
<body>
<div class="book-container">
<div class="book-sidebar">
<div class="book-brand">
<a href="/">
<img src="/static/favicon.png">
<span>技术文章摘抄</span>
</a>
</div>
<div class="book-menu uncollapsible">
<ul class="uncollapsible">
<li><a href="/" class="current-tab">首页</a></li>
</ul>
<ul class="uncollapsible">
<li><a href="../">上一级</a></li>
</ul>
<ul class="uncollapsible">
<li>
<a href="/专栏/深入剖析 MyBatis 核心原理-完/00 开篇词 领略 MyBatis 设计思维,突破持久化技术瓶颈.md">00 开篇词 领略 MyBatis 设计思维,突破持久化技术瓶颈.md.html</a>
</li>
<li>
<a href="/专栏/深入剖析 MyBatis 核心原理-完/01 常见持久层框架赏析,到底是什么让你选择 MyBatis.md">01 常见持久层框架赏析,到底是什么让你选择 MyBatis.md.html</a>
</li>
<li>
<a href="/专栏/深入剖析 MyBatis 核心原理-完/02 订单系统持久层示例分析20 分钟带你快速上手 MyBatis.md">02 订单系统持久层示例分析20 分钟带你快速上手 MyBatis.md.html</a>
</li>
<li>
<a href="/专栏/深入剖析 MyBatis 核心原理-完/03 MyBatis 源码环境搭建及整体架构解析.md">03 MyBatis 源码环境搭建及整体架构解析.md.html</a>
</li>
<li>
<a href="/专栏/深入剖析 MyBatis 核心原理-完/04 MyBatis 反射工具箱:带你领略不一样的反射设计思路.md">04 MyBatis 反射工具箱:带你领略不一样的反射设计思路.md.html</a>
</li>
<li>
<a href="/专栏/深入剖析 MyBatis 核心原理-完/05 数据库类型体系与 Java 类型体系之间的“爱恨情仇”.md">05 数据库类型体系与 Java 类型体系之间的“爱恨情仇”.md.html</a>
</li>
<li>
<a href="/专栏/深入剖析 MyBatis 核心原理-完/06 日志框架千千万MyBatis 都能兼容的秘密是什么?.md">06 日志框架千千万MyBatis 都能兼容的秘密是什么?.md.html</a>
</li>
<li>
<a href="/专栏/深入剖析 MyBatis 核心原理-完/07 深入数据源和事务,把握持久化框架的两个关键命脉.md">07 深入数据源和事务,把握持久化框架的两个关键命脉.md.html</a>
</li>
<li>
<a href="/专栏/深入剖析 MyBatis 核心原理-完/08 Mapper 文件与 Java 接口的优雅映射之道.md">08 Mapper 文件与 Java 接口的优雅映射之道.md.html</a>
</li>
<li>
<a href="/专栏/深入剖析 MyBatis 核心原理-完/09 基于 MyBatis 缓存分析装饰器模式的最佳实践.md">09 基于 MyBatis 缓存分析装饰器模式的最佳实践.md.html</a>
</li>
<li>
<a href="/专栏/深入剖析 MyBatis 核心原理-完/10 鸟瞰 MyBatis 初始化,把握 MyBatis 启动流程脉络(上).md">10 鸟瞰 MyBatis 初始化,把握 MyBatis 启动流程脉络(上).md.html</a>
</li>
<li>
<a href="/专栏/深入剖析 MyBatis 核心原理-完/11 鸟瞰 MyBatis 初始化,把握 MyBatis 启动流程脉络(下).md">11 鸟瞰 MyBatis 初始化,把握 MyBatis 启动流程脉络(下).md.html</a>
</li>
<li>
<a href="/专栏/深入剖析 MyBatis 核心原理-完/12 深入分析动态 SQL 语句解析全流程(上).md">12 深入分析动态 SQL 语句解析全流程(上).md.html</a>
</li>
<li>
<a href="/专栏/深入剖析 MyBatis 核心原理-完/13 深入分析动态 SQL 语句解析全流程(下).md">13 深入分析动态 SQL 语句解析全流程(下).md.html</a>
</li>
<li>
<a href="/专栏/深入剖析 MyBatis 核心原理-完/14 探究 MyBatis 结果集映射机制背后的秘密(上).md">14 探究 MyBatis 结果集映射机制背后的秘密(上).md.html</a>
</li>
<li>
<a href="/专栏/深入剖析 MyBatis 核心原理-完/15 探究 MyBatis 结果集映射机制背后的秘密(下).md">15 探究 MyBatis 结果集映射机制背后的秘密(下).md.html</a>
</li>
<li>
<a href="/专栏/深入剖析 MyBatis 核心原理-完/16 StatementHandler参数绑定、SQL 执行和结果映射的奠基者.md">16 StatementHandler参数绑定、SQL 执行和结果映射的奠基者.md.html</a>
</li>
<li>
<a href="/专栏/深入剖析 MyBatis 核心原理-完/17 Executor 才是执行 SQL 语句的幕后推手(上).md">17 Executor 才是执行 SQL 语句的幕后推手(上).md.html</a>
</li>
<li>
<a href="/专栏/深入剖析 MyBatis 核心原理-完/18 Executor 才是执行 SQL 语句的幕后推手(下).md">18 Executor 才是执行 SQL 语句的幕后推手(下).md.html</a>
</li>
<li>
<a href="/专栏/深入剖析 MyBatis 核心原理-完/19 深入 MyBatis 内核与业务逻辑的桥梁——接口层.md">19 深入 MyBatis 内核与业务逻辑的桥梁——接口层.md.html</a>
</li>
<li>
<a href="/专栏/深入剖析 MyBatis 核心原理-完/20 插件体系让 MyBatis 世界更加精彩.md">20 插件体系让 MyBatis 世界更加精彩.md.html</a>
</li>
<li>
<a href="/专栏/深入剖析 MyBatis 核心原理-完/21 深挖 MyBatis 与 Spring 集成底层原理.md">21 深挖 MyBatis 与 Spring 集成底层原理.md.html</a>
</li>
<li>
<a href="/专栏/深入剖析 MyBatis 核心原理-完/22 基于 MyBatis 的衍生框架一览.md">22 基于 MyBatis 的衍生框架一览.md.html</a>
</li>
<li>
<a class="current-tab" href="/专栏/深入剖析 MyBatis 核心原理-完/23 结束语 会使用只能默默“搬砖”,懂原理才能快速晋升.md">23 结束语 会使用只能默默“搬砖”,懂原理才能快速晋升.md.html</a>
</li>
</ul>
</div>
</div>
<div class="sidebar-toggle" onclick="sidebar_toggle()" onmouseover="add_inner()" onmouseleave="remove_inner()">
<div class="sidebar-toggle-inner"></div>
</div>
<script>
function add_inner() {
let inner = document.querySelector('.sidebar-toggle-inner')
inner.classList.add('show')
}
function remove_inner() {
let inner = document.querySelector('.sidebar-toggle-inner')
inner.classList.remove('show')
}
function sidebar_toggle() {
let sidebar_toggle = document.querySelector('.sidebar-toggle')
let sidebar = document.querySelector('.book-sidebar')
let content = document.querySelector('.off-canvas-content')
if (sidebar_toggle.classList.contains('extend')) { // show
sidebar_toggle.classList.remove('extend')
sidebar.classList.remove('hide')
content.classList.remove('extend')
} else { // hide
sidebar_toggle.classList.add('extend')
sidebar.classList.add('hide')
content.classList.add('extend')
}
}
function open_sidebar() {
let sidebar = document.querySelector('.book-sidebar')
let overlay = document.querySelector('.off-canvas-overlay')
sidebar.classList.add('show')
overlay.classList.add('show')
}
function hide_canvas() {
let sidebar = document.querySelector('.book-sidebar')
let overlay = document.querySelector('.off-canvas-overlay')
sidebar.classList.remove('show')
overlay.classList.remove('show')
}
</script>
<div class="off-canvas-content">
<div class="columns">
<div class="column col-12 col-lg-12">
<div class="book-navbar">
<!-- For Responsive Layout -->
<header class="navbar">
<section class="navbar-section">
<a onclick="open_sidebar()">
<i class="icon icon-menu"></i>
</a>
</section>
</header>
</div>
<div class="book-content" style="max-width: 960px; margin: 0 auto;
overflow-x: auto;
overflow-y: hidden;">
<div class="book-post">
<p id="tip" align="center"></p>
<div><h1>23 结束语 会使用只能默默“搬砖”,懂原理才能快速晋升</h1>
<p>你好,我是杨四正,到这里 MyBatis 的核心内容就介绍差不多了,你可能也需要一段时间来回顾和消化这些内容。在最后这结束语部分,我就不讲知识点了,咱们换个风格,从另一个角度来聊聊我们程序员这份工作。</p>
<p>不得不说,现在互联网是一个越来越内卷的圈子了。不仅员工的工作时长一延再延,对员工的要求也是一升再升,就目前国内互联网的环境来看,很少有人能够一直奋斗在一线进行开发(当然,也有一些“骨骼惊奇、天赋异禀”的大佬,那就另当别论)。作为一名普通程序员,我们在做好本职工作之后,就需要花些时间来考虑一下如何“破圈”了。</p>
<p>我个人觉得,要想“破圈”,需要有下面几个方面的操作。</p>
<p><strong>第一,选择一个上升期的行业或项目,也就是我们常说的“吃行业红利”</strong>。之所以把行业选择放在首位就是因为“选择大于努力”,在互联网这个大行业里面还有很多细分领域,例如,电商、在线教育、互联网医疗、短视频、各种游戏等,进入一个上升的行业或是上升的企业,拿到期权,等到公司上市是可以实现财富自由的。互联网的“造富”例子虽然减少了,但是依旧在不断发生,现在在风口上的“猪”依旧在飞。</p>
<p><strong>第二,选对 Leader也就是所谓的“抱对大腿”</strong>。Leader 的能力决定了我们当前工作的上限,不仅是互联网行业,其实各个行业都是一样的。在遇到超出我们权限的资源问题、协调问题的时候,我们是需要向 Leader 求助的,如果我们的 Leader 也解决不来,可想而知这项工作的阻力会有多么大,做起来有多么艰辛。而我们的工作大多是以结果为导向的,不出成绩的话,再苦再难也无法被别人认可,所以说,选择一个靠谱的 Leader 是很重要的。</p>
<p><strong>第三,让自己变得可靠</strong>。在职场中,上级和下级之间是一个双向选择的关系,每个 Leader 身边围绕的人数是有限的,就那么几个位置。当我们千辛万苦找到一个靠谱的 Leader 之后,如何让 Leader 选择我们呢?那就是让我们自己变得靠谱。</p>
<p>举个例子,我懂 MyBatis我邻桌同事也懂 MyBatis我带了没几天的应届生也知道如何用 MyBatis 写动态 SQL 代码了,看起来都只是个熟练工。假设碰到一个 MyBatis 的问题,应届生不懂,同事不懂,我也不懂,单就 MyBatis 这项技术来说,我们在 Leader 眼里是完全没有区别的扩展到其他技术也是一样的。但如果在别人解决不了问题的时候我能解决如此往复几次同事有什么技术难题都会请教我Leader 在决定技术方案的时候也会咨询我,这时我的影响力就会发生变化。</p>
<p>上面只是以 MyBatis 这种开源项目为例,其实面对公司内的项目也是一样,很多程序员会觉得自己公司项目代码写得非常垃圾,不愿意花时间读,这是非常错误的想法。其他同事都对“垃圾代码”嗤之以鼻,但是你能对“垃圾代码”了若指掌、如数家珍,这时 Leader 看到你这个人把一件大家不喜欢的事情都能做到八九十分,也会让 Leader 对你形成信任和依赖更别说你可以通过阅读这些“垃圾代码”解决工作中的疑难问题了。Leader 就只会觉得你靠谱,觉得有你在项目就没有问题,即使有问题你也能解决,你说方案哪里不合理那多半就是不合理了,也就让你成为一个 Leader 和同事眼中靠谱的人,这就是在“垃圾山”里淘到的“宝藏”。</p>
<p><strong>第四,珍惜自己的时间,尽量将更多时间花到充实自己上,养成学习的惯性</strong>。我一直认为“拉勾教育 App”与手机里面的各种短视频 App、5v5 推塔 App、第一角色枪战类 App 是竞对,为什么这么说呢?因为这些 App 都是在竞争用户的时间,毕竟世界上最公平的事情就是每个人一天只有 24 小时。就算你守得了高地,推得了水晶,拿得了 5 杀,又能怎样呢?就算你杀得出 G 港,干得翻机场,拿得下 H 港,又能如何呢?都不如打开“拉勾教育 App”去学习、去巩固技能、去完善自己来得安心所以需要养成学习的惯性。</p>
<p>数年之后,当你站到事业巅峰的时候,再回首,会感谢现在坚持学习的自己。</p>
<p>当然,如果你觉得我这门课程不错的话,也欢迎你推荐给身边的朋友。</p>
</div>
</div>
<div>
<div style="float: left">
<a href="/专栏/深入剖析 MyBatis 核心原理-完/22 基于 MyBatis 的衍生框架一览.md">上一页</a>
</div>
</div>
</div>
</div>
</div>
</div>
<a class="off-canvas-overlay" onclick="hide_canvas()"></a>
</div>
<script defer src="https://static.cloudflareinsights.com/beacon.min.js/v652eace1692a40cfa3763df669d7439c1639079717194" integrity="sha512-Gi7xpJR8tSkrpF7aordPZQlW2DLtzUlZcumS8dMQjwDHEnw9I7ZLyiOj/6tZStRBGtGgN6ceN6cMH8z7etPGlw==" data-cf-beacon='{"rayId":"709979d2ac573cfa","version":"2021.12.0","r":1,"token":"1f5d475227ce4f0089a7cff1ab17c0f5","si":100}' crossorigin="anonymous"></script>
</body>
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-NPSEEVD756"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() {
dataLayer.push(arguments);
}
gtag('js', new Date());
gtag('config', 'G-NPSEEVD756');
var path = window.location.pathname
var cookie = getCookie("lastPath");
console.log(path)
if (path.replace("/", "") === "") {
if (cookie.replace("/", "") !== "") {
console.log(cookie)
document.getElementById("tip").innerHTML = "<a href='" + cookie + "'>跳转到上次进度</a>"
}
} else {
setCookie("lastPath", path)
}
function setCookie(cname, cvalue) {
var d = new Date();
d.setTime(d.getTime() + (180 * 24 * 60 * 60 * 1000));
var expires = "expires=" + d.toGMTString();
document.cookie = cname + "=" + cvalue + "; " + expires + ";path = /";
}
function getCookie(cname) {
var name = cname + "=";
var ca = document.cookie.split(';');
for (var i = 0; i < ca.length; i++) {
var c = ca[i].trim();
if (c.indexOf(name) === 0) return c.substring(name.length, c.length);
}
return "";
}
</script>
</html>