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

0
.DS_Store vendored Normal file
View File

Binary file not shown.

BIN
PDF/Docker开源书.pdf Normal file

Binary file not shown.

BIN
PDF/SpringBatch.pdf Normal file

Binary file not shown.

BIN
PDF/面试资料.pdf Normal file

Binary file not shown.

View File

@@ -0,0 +1 @@
!function(){"use strict";function e(e){try{if("undefined"==typeof console)return;"error"in console?console.error(e):console.log(e)}catch(e){}}function t(e){return d.innerHTML='<a href="'+e.replace(/"/g,"&quot;")+'"></a>',d.childNodes[0].getAttribute("href")||""}function r(e,t){var r=e.substr(t,2);return parseInt(r,16)}function n(n,c){for(var o="",a=r(n,c),i=c+2;i<n.length;i+=2){var l=r(n,i)^a;o+=String.fromCharCode(l)}try{o=decodeURIComponent(escape(o))}catch(u){e(u)}return t(o)}function c(t){for(var r=t.querySelectorAll("a"),c=0;c<r.length;c++)try{var o=r[c],a=o.href.indexOf(l);a>-1&&(o.href="mailto:"+n(o.href,a+l.length))}catch(i){e(i)}}function o(t){for(var r=t.querySelectorAll(u),c=0;c<r.length;c++)try{var o=r[c],a=o.parentNode,i=o.getAttribute(f);if(i){var l=n(i,0),d=document.createTextNode(l);a.replaceChild(d,o)}}catch(h){e(h)}}function a(t){for(var r=t.querySelectorAll("template"),n=0;n<r.length;n++)try{i(r[n].content)}catch(c){e(c)}}function i(t){try{c(t),o(t),a(t)}catch(r){e(r)}}var l="/cdn-cgi/l/email-protection#",u=".__cf_email__",f="data-cfemail",d=document.createElement("div");i(document),function(){var e=document.currentScript||document.scripts[document.scripts.length-1];e.parentNode.removeChild(e)}()}();

764
index.html Normal file
View File

@@ -0,0 +1,764 @@
<!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>note-submit</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="/PDF">PDF</a>
</li>
<li>
<a href="/专栏">专栏</a>
</li>
<li>
<a href="/恋爱必修课">恋爱必修课</a>
</li>
<li>
<a href="/文章">文章</a>
</li>
<li>
<a href="/极客时间">极客时间</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> 目录</h1>
<ul>
<li><a href = '/PDF'>PDF</a> </li>
<ul>
</ul>
<li><a href = '/专栏'>专栏</a> </li>
<ul>
<li><a href = '/专栏/12步通关求职面试-完'>12步通关求职面试-完</a> </li>
<ul>
</ul>
<li><a href = '/专栏/22 讲通关 Go 语言-完'>22 讲通关 Go 语言-完</a> </li>
<ul>
</ul>
<li><a href = '/专栏/24讲吃透分布式数据库-完'>24讲吃透分布式数据库-完</a> </li>
<ul>
</ul>
<li><a href = '/专栏/300分钟吃透分布式缓存-完'>300分钟吃透分布式缓存-完</a> </li>
<ul>
</ul>
<li><a href = '/专栏/CNCF X 阿里巴巴云原生技术公开课'>CNCF X 阿里巴巴云原生技术公开课</a> </li>
<ul>
</ul>
<li><a href = '/专栏/DDD 微服务落地实战'>DDD 微服务落地实战</a> </li>
<ul>
</ul>
<li><a href = '/专栏/DDD实战课'>DDD实战课</a> </li>
<ul>
</ul>
<li><a href = '/专栏/Dubbo源码解读与实战-完'>Dubbo源码解读与实战-完</a> </li>
<ul>
</ul>
<li><a href = '/专栏/ElasticSearch知识体系详解'>ElasticSearch知识体系详解</a> </li>
<ul>
</ul>
<li><a href = '/专栏/JVM 核心技术 32 讲(完)'>JVM 核心技术 32 讲(完)</a> </li>
<ul>
</ul>
<li><a href = '/专栏/Java 业务开发常见错误 100 例'>Java 业务开发常见错误 100 例</a> </li>
<ul>
</ul>
<li><a href = '/专栏/Java 并发编程 78 讲-完'>Java 并发编程 78 讲-完</a> </li>
<ul>
</ul>
<li><a href = '/专栏/Java 性能优化实战-完'>Java 性能优化实战-完</a> </li>
<ul>
</ul>
<li><a href = '/专栏/Java并发编程实战'>Java并发编程实战</a> </li>
<ul>
</ul>
<li><a href = '/专栏/Kafka核心技术与实战'>Kafka核心技术与实战</a> </li>
<ul>
</ul>
<li><a href = '/专栏/Kubernetes 从上手到实践'>Kubernetes 从上手到实践</a> </li>
<ul>
</ul>
<li><a href = '/专栏/Kubernetes 实践入门指南'>Kubernetes 实践入门指南</a> </li>
<ul>
</ul>
<li><a href = '/专栏/MySQL实战45讲'>MySQL实战45讲</a> </li>
<ul>
</ul>
<li><a href = '/专栏/MySQL实战宝典'>MySQL实战宝典</a> </li>
<ul>
</ul>
<li><a href = '/专栏/Netty 核心原理剖析与 RPC 实践-完'>Netty 核心原理剖析与 RPC 实践-完</a> </li>
<ul>
</ul>
<li><a href = '/专栏/OKR组织敏捷目标和绩效管理-完'>OKR组织敏捷目标和绩效管理-完</a> </li>
<ul>
</ul>
<li><a href = '/专栏/Redis 核心原理与实战'>Redis 核心原理与实战</a> </li>
<ul>
</ul>
<li><a href = '/专栏/RocketMQ 实战与进阶(完)'>RocketMQ 实战与进阶(完)</a> </li>
<ul>
</ul>
<li><a href = '/专栏/Serverless 技术公开课(完)'>Serverless 技术公开课(完)</a> </li>
<ul>
</ul>
<li><a href = '/专栏/ShardingSphere 核心原理精讲-完'>ShardingSphere 核心原理精讲-完</a> </li>
<ul>
</ul>
<li><a href = '/专栏/Spring Boot 实战开发'>Spring Boot 实战开发</a> </li>
<ul>
</ul>
<li><a href = '/专栏/Spring Security 详解与实操'>Spring Security 详解与实操</a> </li>
<ul>
</ul>
<li><a href = '/专栏/SpringCloud微服务实战'>SpringCloud微服务实战</a> </li>
<ul>
</ul>
<li><a href = '/专栏/ZooKeeper源码分析与实战-完'>ZooKeeper源码分析与实战-完</a> </li>
<ul>
</ul>
<li><a href = '/专栏/互联网消费金融高并发领域设计'>互联网消费金融高并发领域设计</a> </li>
<ul>
</ul>
<li><a href = '/专栏/全解网络协议'>全解网络协议</a> </li>
<ul>
</ul>
<li><a href = '/专栏/分布式中间件实践之路(完)'>分布式中间件实践之路(完)</a> </li>
<ul>
</ul>
<li><a href = '/专栏/分布式技术原理与实战45讲-完'>分布式技术原理与实战45讲-完</a> </li>
<ul>
</ul>
<li><a href = '/专栏/分布式链路追踪实战-完'>分布式链路追踪实战-完</a> </li>
<ul>
</ul>
<li><a href = '/专栏/前端工程化精讲-完'>前端工程化精讲-完</a> </li>
<ul>
</ul>
<li><a href = '/专栏/容器实战高手课'>容器实战高手课</a> </li>
<ul>
</ul>
<li><a href = '/专栏/左耳听风'>左耳听风</a> </li>
<ul>
</ul>
<li><a href = '/专栏/微服务质量保障 20 讲-完'>微服务质量保障 20 讲-完</a> </li>
<ul>
</ul>
<li><a href = '/专栏/架构设计面试精讲'>架构设计面试精讲</a> </li>
<ul>
</ul>
<li><a href = '/专栏/案例上手 Spring Boot WebFlux'>案例上手 Spring Boot WebFlux</a> </li>
<ul>
</ul>
<li><a href = '/专栏/消息队列高手课'>消息队列高手课</a> </li>
<ul>
</ul>
<li><a href = '/专栏/深入剖析 MyBatis 核心原理-完'>深入剖析 MyBatis 核心原理-完</a> </li>
<ul>
</ul>
<li><a href = '/专栏/深入拆解Java虚拟机'>深入拆解Java虚拟机</a> </li>
<ul>
</ul>
<li><a href = '/专栏/深入浅出 Docker 技术栈实践课(完)'>深入浅出 Docker 技术栈实践课(完)</a> </li>
<ul>
</ul>
<li><a href = '/专栏/深入浅出 Java 虚拟机-完'>深入浅出 Java 虚拟机-完</a> </li>
<ul>
</ul>
<li><a href = '/专栏/深入浅出计算机组成原理'>深入浅出计算机组成原理</a> </li>
<ul>
</ul>
<li><a href = '/专栏/深入理解 Sentinel'>深入理解 Sentinel</a> </li>
<ul>
</ul>
<li><a href = '/专栏/由浅入深吃透 Docker-完'>由浅入深吃透 Docker-完</a> </li>
<ul>
</ul>
<li><a href = '/专栏/白话设计模式 28 讲(完)'>白话设计模式 28 讲(完)</a> </li>
<ul>
</ul>
<li><a href = '/专栏/程序员的数学课'>程序员的数学课</a> </li>
<ul>
</ul>
<li><a href = '/专栏/说透性能测试'>说透性能测试</a> </li>
<ul>
</ul>
<li><a href = '/专栏/软件工程之美'>软件工程之美</a> </li>
<ul>
</ul>
<li><a href = '/专栏/透视HTTP协议'>透视HTTP协议</a> </li>
<ul>
</ul>
<li><a href = '/专栏/重学操作系统-完'>重学操作系统-完</a> </li>
<ul>
</ul>
<li><a href = '/专栏/重学数据结构与算法-完'>重学数据结构与算法-完</a> </li>
<ul>
</ul>
<li><a href = '/专栏/领域驱动设计实践(完)'>领域驱动设计实践(完)</a> </li>
<ul>
</ul>
<li><a href = '/专栏/高并发系统设计40问'>高并发系统设计40问</a> </li>
<ul>
</ul>
</ul>
<li><a href = '/恋爱必修课'>恋爱必修课</a> </li>
<ul>
</ul>
<li><a href = '/文章'>文章</a> </li>
<ul>
</ul>
<li><a href = '/极客时间'>极客时间</a> </li>
<ul>
</ul>
</ul>
</div>
</div>
<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":"70996b2f083d3d60","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>

BIN
static/favicon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

861
static/index.css Normal file

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,588 @@
<!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>00 开篇词:了解面试“潜规则”,从海选中脱颖而出.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 class="current-tab" href="/专栏/12步通关求职面试-完/00 开篇词:了解面试“潜规则”,从海选中脱颖而出.md">00 开篇词:了解面试“潜规则”,从海选中脱颖而出.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/01 设计一份吸引面试官的简历.md">01 设计一份吸引面试官的简历.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/02 读懂职位 JD精准投递简历.md">02 读懂职位 JD精准投递简历.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/03 把握投递简历的黄金时间段.md">03 把握投递简历的黄金时间段.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/04 做好充分的准备去面试.md">04 做好充分的准备去面试.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/05 把握面试时的关键点.md">05 把握面试时的关键点.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/06 捕捉 HR 微表情,做出应对策略.md">06 捕捉 HR 微表情,做出应对策略.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/07 巧妙推销自己的 3 个技巧.md">07 巧妙推销自己的 3 个技巧.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/08 认清自身实力,明确求职方向.md">08 认清自身实力,明确求职方向.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/09 判断公司背景,做出合理选择.md">09 判断公司背景,做出合理选择.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/10 了解行业薪资,清晰找准定位.md">10 了解行业薪资,清晰找准定位.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/11 目标明确,阐明沟通.md">11 目标明确,阐明沟通.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/12 工作交接流程福利衔接.md">12 工作交接流程福利衔接.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>00 开篇词:了解面试“潜规则”,从海选中脱颖而出</h1>
<p>你好,欢迎解锁由拉勾提供的面试指导课程,我是你的职场导师堃哥。目前担任拉勾网的招聘总监职务,具有近 10 年的人力资源—招聘方向的工作经验,曾经就职于美团、新东方等公司。
原本读经济学的我无意中接触到了欧洲猎头顾问的工作流程,深深被他们的专业分析能力、对企业以及候选人熟练的把控能力所吸引,他们可以帮助一家面临困难的企业寻找到合适的候选人,同时也可以帮助那些处于职业迷茫期的候选人寻找到实现自我价值的工作方向。</p>
<p><img src="assets/CgotOV3fPsiAPd-pAAG4_UnEw7A590.png" alt="img" /></p>
<p>因此毕业后我就回国踏入了国内的猎头行业。2010 年左右,国内猎头行业刚刚起步,所谓的猎头顾问还只是一个电话销售的职责,单纯、机械化地询问候选人是否考虑新机会。虽然和我预期的工作内容不太一样,但经过一年的电话沟通,训练了我可以通过候选人的介绍而发现他工作中和变化工作中的问题点。
后来为了进一步提升自己,进入了互联网公司。期间经历了互联网快速增长的过程、大批量的人员面试以及多样本的磨练,帮助我可以通过「快速提问、逻辑的沟通」来判读一位候选人的真实求职目的和个人性格方面的问题,帮助企业招聘的岗位从最初的助理岗到公司高管岗,从团队里的单个支撑岗位到整个新业务的建设。经过多年的磨练从最初的招聘小白,到帮助公司发现目前遇到的问题然后通过人才引入或者内部人才培养的方式使公司走出困境的招聘专家。
<img src="assets/CgoB5l3fPsmAHoXRAAAnKZMCZMw614.png" alt="img" /></p>
<h1>招聘市场的“551 定律”</h1>
<p>你知道招聘市场的“551 定律”吗?
551 定律:每一层筛选环节都会有百分之十的折损率。一个岗位从接收简历到发下 Offer 至少要筛选 500 份左右的简历、面试 50 人左右、只有 5 人左右通过面试,最终也只有 1 位候选人可以顺利入职。
<img src="assets/CgotOV3fPsmADYUtAABnT8PRUsA474.png" alt="img" />
对于企业内的招聘人员平均每天至少在一个岗位上要收到几百份简历,至少要面试十几个候选人,每周至少会发出 4~5 个 Offer一周内至少同时会招聘 5~7 个不同的岗位。因此,可以看出,招聘人员的工作强度是非常巨大的,面试者需要把控好每个环节的节奏并表现优秀,才能得到最好的结果。
所以说你的简历是否对自己的工作内容和项目经历描述清晰你的面试表达是否可以直击面试官的问题要点你的Offer沟通是表现的完美无缺都对你能否赢得心仪的岗位至关重要。</p>
<h1>面试的那些事</h1>
<p>1.简历已被阅读却迟迟没有回应
相信大部分人都会有这样的疑惑:每个求职的早上都会迫不及待的打开手机查看是否收到昨天投递简历的回复,发现都显示为“您的简历已经被阅读”的状态,带着兴奋的心情等待着心仪企业的面试邀请电话,上午过去了没有接到电话,午饭时间过去了没有接到电话,下班了仍然没有接到电话,第二天、第三天……一直没有收到任何的信息,一度以为自己的手机是否坏掉了或者怀疑招聘人员是不是忘记了拨打电话…
<img src="assets/CgoB5l3fPsmAKnkzAABRDKPFAwg478.png" alt="img" />
2.面试很顺利却迟迟没有收到录用通知
相信你也会有这样的困惑:好不容易收到面试电话,兴奋的不能自已,提前和公司请了假,穿上非常体面的衣服,吃一个元气满满的早餐,做好充分的准备去面试。面试时费尽心力地展示自己,把从事过的工作内容和听说过的项目经验全部展示在面试官面前,这时的你侃侃而谈,表现得非常自信且积极正能量。但是,不知是否留意过面试官有时候针会对一个问题进行深入的提问或者偶尔出现锁眉的动作?
<img src="assets/CgotOV3fPsmATc2oAAClpvSfT2E809.png" alt="img" />
3.面试了很多公司,难道能力已被透支
相信你有过这样的经历:面试了很久,也面试过 N 家公司,最后一份录用通知书也没有收到,此时是否开始对自己的工作能力表示深深的怀疑,真的是自己不够努力吗?之前的工作能力真的那么水吗?有没有想过也许就是与招聘人员沟通时的语气,与部门负责人的一次错误的意见表达等,导致公司对你的看法完全改变了,进而错过了接受心仪公司录用通知的机会。
这时候的你是不是感觉面试的道路上充满了坎坷,对自己的能力也产生了深深的质疑?
其实求职之路并没有想象的那么复杂,接下来我会从一个面试官的角度来告诉你在简历上需要注意的细节点以及哪些内容是必须要提到的;在面对面试官时如何张弛有度地展示自己,在沟通中如何让面试官感觉到你就是那个公司一直在寻找的人选。</p>
<h1>专栏设计</h1>
<ol>
<li>本专栏将解决以下问题
首先,将讲解如何设计简历,使其具有竞争力。比如,什么样的简历是招聘人员最喜欢的,怎么样的板书清晰明了、逻辑清晰,对于自己想要面试的职位如何更好的突出自己简历的优势,哪些工作项目是为自己增分,而哪些项目即使再努力描述也只会减分等。
其次,将从投递简历的时间点和投递方式开始分析,通过大数据分析来告诉你企业招聘人员的工作作息,这样有针对性的投简历更能快速地让面试官看到。
继而,在面试过程中怎么介绍自己会显得更有逻辑、更受面试官的欢迎。面试的哪些动作是说明他对你的经历很有兴趣需要多多的展示自己,哪些动作是对你的经历有所怀疑,可以换种思路介绍。
再次,是否会想过:你对企业真的有价值吗?真的是企业在找的那个人吗?知道自己的价值后才可以更好的为自己争取符合自己能力的薪资。专栏里会简单介绍行业的薪酬情况,以帮助你更好的明确自己如何找到定位,以及当接到多个录用通知的时候,如何清晰地判断哪个最有利于自己发展。
最后,经过九九八十一难,终于收到 Offer 了。可是,怎么和公司谈离职的时候还可以得到好的离职背调评价呢?社保、公积金等福利怎么做好两家公司之间的交接工作?专栏的最后会和你分享如何优雅的分手前司。</li>
</ol>
<p><img src="assets/CgoB5l3fPsqAcrBRAADDlP9CcDI204.png" alt="img" /></p>
<ol start="2">
<li>你将获得
这个专栏适合所有在求职过程中遇到问题的读者,不论你是一位刚刚踏出校园的职场菜鸟,还是已经工作多年的职场老手,只要在求职过程中遇到过以上问题,都会为你解答。
通过这个专栏的学习,将有以下收获:</li>
</ol>
<ul>
<li>可以写出一份直接抓住面试官眼球的简历;</li>
<li>在设计简历时突出自己的优点、项目经验,以及个人特长怎么写才是最合适的;</li>
<li>面试中怎么回答一些常规问题更能获得赞许;</li>
<li>如何选出一份可以让自己职业发展最好的工作,为自己的未来做一个完美的规划。</li>
</ul>
<p><img src="assets/CgotOV3fPsqAYIjOAABPqRoOsfc285.png" alt="img" /></p>
<ol start="3">
<li>课程寄语</li>
</ol>
<p>认真看完这个专栏后,相信你通过对自己的重新塑造,在事业上能够有一个崭新和充满希望的旅程~</p>
<p><img src="assets/CgoB5l3fPsuAOs6WAAE6K4jp0ew643.png" alt="img" /></p>
</div>
</div>
<div>
<div style="float: right">
<a href="/专栏/12步通关求职面试-完/01 设计一份吸引面试官的简历.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":"70996d90bcad3d60","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>

View File

@@ -0,0 +1,670 @@
<!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>01 设计一份吸引面试官的简历.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="/专栏/12步通关求职面试-完/00 开篇词:了解面试“潜规则”,从海选中脱颖而出.md">00 开篇词:了解面试“潜规则”,从海选中脱颖而出.md.html</a>
</li>
<li>
<a class="current-tab" href="/专栏/12步通关求职面试-完/01 设计一份吸引面试官的简历.md">01 设计一份吸引面试官的简历.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/02 读懂职位 JD精准投递简历.md">02 读懂职位 JD精准投递简历.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/03 把握投递简历的黄金时间段.md">03 把握投递简历的黄金时间段.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/04 做好充分的准备去面试.md">04 做好充分的准备去面试.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/05 把握面试时的关键点.md">05 把握面试时的关键点.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/06 捕捉 HR 微表情,做出应对策略.md">06 捕捉 HR 微表情,做出应对策略.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/07 巧妙推销自己的 3 个技巧.md">07 巧妙推销自己的 3 个技巧.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/08 认清自身实力,明确求职方向.md">08 认清自身实力,明确求职方向.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/09 判断公司背景,做出合理选择.md">09 判断公司背景,做出合理选择.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/10 了解行业薪资,清晰找准定位.md">10 了解行业薪资,清晰找准定位.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/11 目标明确,阐明沟通.md">11 目标明确,阐明沟通.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/12 工作交接流程福利衔接.md">12 工作交接流程福利衔接.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>01 设计一份吸引面试官的简历</h1>
<p>你好,我是你的面试课老师杨宇堃,欢迎进入第 01 课时的内容“设计一份吸引面试官的简历”。</p>
<h1>1.简历的外形</h1>
<p>如果你刚入职场,是不是企图想通过“花里胡哨”的简历模版去引起面试官的注意?比如,套用网站上很多色彩斑斓的简历模版。</p>
<p>其实是徒劳无功的,色彩艳丽的简历模版确实可以给人耳目一新的感觉。但这种简历模版很容易扰乱面试官的思路,从而很难注意到简历里的核心内容;而且也很难要求每位面试官的审美都能和你有共识,万一选择了一款让面试官感觉很土的简历模版,从而会错失一次很好的面试机会。</p>
<p>因此,简洁干净的纯色底简历模版可能是最好的选择。面试官也会把更多的注意力放在简历内容上,从而可以更好地判断你的经历是否与工作内容相符。
例如,下面是几个“花里胡哨”的简历外形截图:</p>
<p><img src="assets/CgoB5l3fQpSAT70GAABAMjcg7CM294.png" alt="img" />
可以看到上面的 3 个简历外形,明显有两个问题点:</p>
<ul>
<li>背景过于丰富,很容易扰乱招聘人员;</li>
<li>很多无用信息的展示,重点不够突出。</li>
</ul>
<p>下面是一个比较清晰的简历模版,可供参考:</p>
<p><img src="assets/CgoB5l3fQpSASA8tAAE7rlrUnmM588.png" alt="img" /></p>
<p>这份简历比较好的点有:</p>
<ul>
<li>整体简历的排版清晰;</li>
<li>文字描述段落清晰和明确;</li>
<li>重点比较突出。</li>
</ul>
<h1>2.简历的结构与逻辑</h1>
<p>在设计简历时可以分为几个部分进行阐述:个人信息、教育情况、工作经历、项目经历、自我评价、其他信息。</p>
<p>1个人信息</p>
<p>很多小伙伴在构思自己个人信息的时候,很喜欢把自己完全展示出来,如身高、体重、性别、民族、婚姻情况、政治面貌、家庭住址、籍贯等,统统都写在简历上。</p>
<p>但有没有思考过:这些信息是面试官所需要的吗?当然,特殊岗位可能需要提供身高、体重、籍贯、民族或者政治面貌。但是在如今这个互联网公司占据了很大就业市场的情形下,并没有太多的互联网公司在乎这些比较表面的信息,面试官往往更在乎的是姓名有没有写完整、电话号码和邮箱地址是否填写正确等,只有这些信息完整,面试官才可以快速地联系到你。其次面试官也会留意你的求职意向是否与应聘的职位相符,以及期望薪资是否在应聘岗位的范围内等。</p>
<p><img src="assets/CgotOV3fQpWAYtSwAACkv9e1cSo428.png" alt="img" /></p>
<p>上图的简历过于繁琐,罗列的很多个人信息不是 HR 所需要的,而且很难快速地找到个人的联系方式和邮件信息,这样会给招聘人员带来很大的困扰。简单的突出自己的关键信息既可以让招聘人员轻松的获取,也能让招聘人员认为这是一个逻辑清晰的候选人。</p>
<p><img src="assets/CgoB5l3fQpWAbee2AAAwxVK-2P4500.png" alt="img" /></p>
<p>2教育情况</p>
<p>首先,建议求职的小伙伴在教育情况的部分只需要体现出正规被认证的学习经历即可,比如本科、研究生、博士生等的经历。很多小伙伴会将自己的高中,甚至初中的学习经历都要写上,也许你的初中、高中学校在家乡非常有名,但是对于企业来说很难判定和考究。因为学信网可查的学校只有大学院校,所以只需要填写高中毕业后的教育经历就好。</p>
<p>其次,在填写学校经历的时候只需要突出就学时间(入学时间—毕业时间)、学校名称、专业名称、学历(统招或非统招)即可。对于企业方可以很容易通过就学专业和学校判定出来你所学的内容,而不太需要你做过多的说明和解释。经常看到一些刚刚踏入职场的小伙伴在自己学校和专业信息下面会长篇大论地介绍自己的专业以及学习的科目,往往是非常徒劳无功的表现。</p>
<p>最后,部分小伙伴也会分享在校期间获得的所有证书和参与的活动,相信很多面试官在这里的停留不会超过 5 秒,所以,即使展示自己学习有多好也不会吸引太多的注意。倒不如在这里保持一个整洁干净的排版,将自己获得的证书或者参与自己擅长的活动信息挑一些重要的放在最后的其他信息中,这样也能给简历加分。如果觉得这里是否有些单调,可以放一些真正具有含金量的奖项。</p>
<p><img src="assets/CgotOV3fQpaASzdlAACC9MnExXM972.png" alt="img" /></p>
<p><img src="assets/CgoB5l3fQpaANLMHAAAgU1Bkpo0552.png" alt="img" /></p>
<p><img src="assets/CgotOV3fQpeASTUgAAAsxH-0rS0335.png" alt="img" /></p>
<p>3工作经历</p>
<p>工作经历往往是企业方非常在乎的一部分,这一块也是招聘方停留时间最长的地方。在写工作经历的时候一定要清晰标注这几个内容:公司名称、工作时间(开始时间—结束时间)、职位名称、工作内容、业绩成果。</p>
<p>a.公司名称</p>
<p>目前很多互联网公司的对外名称和他们的注册名称完全不同,所以在书写公司注册名称的时候建议在后面也标注一下公司的对外名称,也是帮助面试官判定你上一家所在的公司行业和领域,因为很多互联网公司的注册名称普及度并不是很高。</p>
<p>b.职位名称</p>
<p>公司名称后面建议标注所在公司的职位名称,职位名称可以写上职位的层级 + 具体做的事情,如招聘专员、招聘主管、招聘经理、招聘总监。往往面试官会根据岗位层级看你简历内容负责的事情是否与层级相符,进而来判定你的能力。目前大多数公司内部都有岗位职级,可以在职位名称后面标注上自己目前的职级,以方便面试官清晰的判定。</p>
<p>c.工作时间</p>
<p>建议具体到年、月,如 2016.07 ~ 2019.03,这样的书写方式,面试官可以很清晰的了解你的工作年限。</p>
<blockquote>
<p>提示:在写工作时间的时候一定要注意每段工作时间之间的结合期是否连贯。如果没有连贯,且中间相隔的时间周期比较长,最好增加一个说明,为什么会有那么长的空白期、这段时间在做什么等。如果连续几段经历都出现这样的断档,需要慎重思考一下是不是要改变已有的工作习惯。</p>
</blockquote>
<p>如果有很多段经历,建议优先写最近的经历,然后采用倒叙的顺序来写比较合适,因为大部分企业方习惯从最近的一份工作去了解。</p>
<p>d.工作内容</p>
<p>接下来我们聊一下简历中最重要的一个部分,也就是工作内容的描述。</p>
<p>我知道很多小伙伴在写职位描述的时候,习惯的做法是借鉴与自己相同岗位的职位 JD甚至有的小伙伴直接把大公司的职位 JD 粘贴到自己的简历中,表示自己做过相关的工作。</p>
<p>但有没有仔细阅读过这些岗位描述?往往企业在发布岗位描述的时候希望招的都是按照最全面的要求去撰写的,但是候选人的能力很少具备全部的要求,如果复制粘贴,很容易被 HR 怀疑简历的真实性。所以最好的做法是在设计简历之前,先认真的思考一下自己上一段的工作内容是什么,然后把这些工作内容按照重要程度依次精简描述出来,写到简历中。</p>
<blockquote>
<p>当然,也有小伙伴说:我不太擅长文字的书写怎么办?没关系,如果你已经清晰知道自己的日常工作是什么了,也可以借鉴企业招聘职位中的描述。</p>
</blockquote>
<p>假设你是一位销售助理,日常的工作为:</p>
<p>A.拜访客户与客户进行销售产品的沟通</p>
<p>B.收集客户的资料</p>
<p>C.日常的文档整理、合同的归档</p>
<p><img src="assets/CgoB5l3fQpeABSx0AADgti4EBxQ549.png" alt="img" /></p>
<p>对于 HR 来说A 和 B 的内容更为重要,所以放在前两条来展现自己日常工作的重要性,两件或多件内容中间要做好分段,描述完一件工作内容后记得另起一段来描述下一个工作职责。</p>
<blockquote>
<p>如果有多份工作经历,且工作内容都比较相似的话,最好有一个递进的关系,每一段突出一个工作重点。</p>
</blockquote>
<p>来看下下面的一个简历截图,能看出里面的问题吗?</p>
<p><img src="assets/CgotOV3fQpeAFUJqAAJX4lbNqfU634.png" alt="img" /></p>
<p>有以下几个问题点:</p>
<ul>
<li>工作时间倒序,并非 HR 的日常阅读习惯;</li>
<li>两段工作经历之间留有 1 年时间的空档期,很容易让 HR 表示怀疑;</li>
<li>工作描述过于简单,几乎没有突出自己工作的亮点。</li>
</ul>
<p>e.业绩成果</p>
<p>如果工作中有过一些公司认可的奖状或者某一期的绩效非常优异的话,可以在“工作内容描述”后面增加一栏“业绩成果的展示”,但是这一栏的内容不易过多,把最重要或者很有价值的公司奖项或绩效按照重要程度精简出 1 ~ 3 条即可,如「公司年度优秀员工奖」、「上季度绩效为 A」等。</p>
<p>4项目经历</p>
<p>项目经历其实和工作内容描述表现的形式类似,只不过项目经历不用把每段都写在简历里,只需要选出一些自己作为主要参与人或者由自己负责的项目添加在简历里就好了。</p>
<p>项目经历的展示也需要体现出项目名称、项目时间、项目中担任的职务、项目职责和项目业绩。如果补充项目经历的介绍,则会给简历加分,也能更容易打动面试官。</p>
<p><img src="assets/CgotOV3fQpSAUG5uAABZwtYoNYI293.png" alt="img" /></p>
<p>5自我评价</p>
<p>不要小看自我评价哦,这一部分是上述简历整体的一个总结,大部分面试官很希望从自我评价中整体了解候选人的情况。</p>
<p>所以,建议从两个方面整体的评价自己:</p>
<ul>
<li>首先先对自己过去的工作内容或者过去的学习经历做个总结</li>
<li>然后对自己的个性以及工作态度做一个工作展示</li>
</ul>
<p>比如下面的「个人优势」其思路比较清晰:</p>
<p><img src="assets/CgoB5l3fQpiARBw3AACnI5eQGok547.png" alt="img" /></p>
<p>上面的自我评价是一个可参考的模板:候选人不但突出了自己的优势,而且还清晰地展示了自己的学习主动性和学习能力,进而会给招聘人员留下很好的印象。</p>
<p>6其他信息</p>
<p>这里如果真的写不出来可以忽略当然如果有一些非常值得或者有帮助的奖项亦或培训内容也可以在这里展示比如某某专栏的发表、CPA 的认证、司法考试的证书等。</p>
</div>
</div>
<div>
<div style="float: left">
<a href="/专栏/12步通关求职面试-完/00 开篇词:了解面试“潜规则”,从海选中脱颖而出.md">上一页</a>
</div>
<div style="float: right">
<a href="/专栏/12步通关求职面试-完/02 读懂职位 JD精准投递简历.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":"70996d92c98a3d60","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>

View File

@@ -0,0 +1,552 @@
<!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>02 读懂职位 JD精准投递简历.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="/专栏/12步通关求职面试-完/00 开篇词:了解面试“潜规则”,从海选中脱颖而出.md">00 开篇词:了解面试“潜规则”,从海选中脱颖而出.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/01 设计一份吸引面试官的简历.md">01 设计一份吸引面试官的简历.md.html</a>
</li>
<li>
<a class="current-tab" href="/专栏/12步通关求职面试-完/02 读懂职位 JD精准投递简历.md">02 读懂职位 JD精准投递简历.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/03 把握投递简历的黄金时间段.md">03 把握投递简历的黄金时间段.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/04 做好充分的准备去面试.md">04 做好充分的准备去面试.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/05 把握面试时的关键点.md">05 把握面试时的关键点.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/06 捕捉 HR 微表情,做出应对策略.md">06 捕捉 HR 微表情,做出应对策略.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/07 巧妙推销自己的 3 个技巧.md">07 巧妙推销自己的 3 个技巧.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/08 认清自身实力,明确求职方向.md">08 认清自身实力,明确求职方向.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/09 判断公司背景,做出合理选择.md">09 判断公司背景,做出合理选择.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/10 了解行业薪资,清晰找准定位.md">10 了解行业薪资,清晰找准定位.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/11 目标明确,阐明沟通.md">11 目标明确,阐明沟通.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/12 工作交接流程福利衔接.md">12 工作交接流程福利衔接.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>02 读懂职位 JD精准投递简历</h1>
<p>你好,我是你的面试课老师杨宇堃,欢迎进入第 02 课时的内容“读懂职位 JD精准投递简历”。</p>
<h1>1.清晰的了解用人部门的招聘要求</h1>
<p>上一讲是关于如何设计简历,相信大部分小伙伴可以很轻松的掌握,但这只是投递简历前的一个开始,明确工作方向才是真正的关键点。
很多小伙伴在投递简历的时候,很少仔细阅读招聘公司的招聘简章,只是投递出去了,甚至一个岗位投递多次或者一个公司投递多个岗位,尤其在刚刚毕业的小伙伴身上表现非常明显。可能大部分人会认为多投递几次会被面试官看中的几率更高,但往往是相反的,如果你自己的工作内容与职位的内容完全没有关联,只会被 HR 淘汰掉,然后放进简历库,而且目前很多公司在简历库里都会对投递来不合适的简历做备注,下次使用简历的时候面试官也会查看上次的评价。</p>
<blockquote>
<p>Tips如果不想在心仪的公司里面留下污点建议谨慎地投递简历。</p>
</blockquote>
<p>需要注意,投递的内容除了职位描述以外,还需要留意公司对人才的工作年限要求和工作的职级。例如,经常看到一些刚刚工作 1 年左右的小伙伴,直接投递公司需要 8 年以上要求的总监岗位。这样会给 HR 留下非常不好的印象,会认为这份简历的候选人对自己的定位非常不清晰,甚至有时候会觉得比较浮躁。</p>
<p>第一印象一旦形成是非常难改变的,所以建议各位小伙伴在投递简历时一定要做好两个准备:</p>
<ul>
<li>要对投递的公司做好充分的了解,清晰地知道自己投递公司的业务是否和自己的发展方向一致;</li>
<li>投递的岗位是否与你之前的工作内容相符合。</li>
</ul>
<p>一份满足以上条件的简历才会获得用人公司的邀请。</p>
<p>下面是一个某公司“产品经理”的招聘要求:</p>
<p><img src="assets/CgoB5l3fYwKAAYP3AAGiQWGNYuc713.png" alt="img" /></p>
<p>通过上面的职位描述,有几点可以注意一下:</p>
<ul>
<li>在职位描述中,不断提到需要具有“独立负责…”、“负责具体…”等字样,说明这个岗位需要你能独立完成一些项目。如果你还是一个需要别人带着干活的话,最好不要盲目投递哦。</li>
<li>职位要求年限,这是一个要求有工作经验的岗位,比如需要具备 3 ~ 5 年的工作经验。往往 HR 希望求职者最好有 5 年左右的工作经验,具有 3 年工作经验是最低的要求。如果你的工作经验低于 3 年的话,就不要考虑尝试了,即使投递了也会被刷掉。</li>
<li>任职要求中的第4点说明这份工作的强度非常大成长性也很高。如果你是一个不希望太大工作强度或者想找一份轻松工作的小伙伴也要好好的思考一下哦。</li>
</ul>
<blockquote>
<p>建议:在投递简历的时候一定要注意 HR 在职位描述中的用词和一些细节,这样才能更准确地投递到心仪的岗位,进而获得一份满意的录用通知书。</p>
</blockquote>
<h1>2.最合理的助攻来自自己内心的力量</h1>
<p>好的简历内容并不是通过简单地编写就可以实现了,一定是通过每天的努力工作和不断地反思才实现的。所以,即使简历构思再完美、逻辑再缜密,如果不是自己亲身经历和努力付出过的项目经验都会很容易的被发现漏洞。</p>
<p>一定要认真的对待自己的工作,每次的工作变动也要对自己的职业规划做好充分思考,这样才会拥有一份完美的简历和一份完整的职业规划。</p>
<p>可能很多刚刚毕业的小伙伴会问:“我没有工作经历,也不知道自己做什么。如果我不去尝试怎么可能知道自己适合什么呢?”其实很多小伙伴在大学读的专业也就已经明确了自己可以从事的方向,当然如果你认为自己读的专业不是你喜欢的,也许可以选择管培生的岗位,用 1 年的时间去体会各个岗位也许会对你有所帮助。</p>
<p>而对于工作 2 ~ 5 年的小伙伴,相信你们已经在一个岗位上至少工作了 2 年以上,如果这个时候还在反复,此时需要慎重的思考一下自己的规划了。</p>
</div>
</div>
<div>
<div style="float: left">
<a href="/专栏/12步通关求职面试-完/01 设计一份吸引面试官的简历.md">上一页</a>
</div>
<div style="float: right">
<a href="/专栏/12步通关求职面试-完/03 把握投递简历的黄金时间段.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":"70996d94ce163d60","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>

View File

@@ -0,0 +1,522 @@
<!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>03 把握投递简历的黄金时间段.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="/专栏/12步通关求职面试-完/00 开篇词:了解面试“潜规则”,从海选中脱颖而出.md">00 开篇词:了解面试“潜规则”,从海选中脱颖而出.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/01 设计一份吸引面试官的简历.md">01 设计一份吸引面试官的简历.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/02 读懂职位 JD精准投递简历.md">02 读懂职位 JD精准投递简历.md.html</a>
</li>
<li>
<a class="current-tab" href="/专栏/12步通关求职面试-完/03 把握投递简历的黄金时间段.md">03 把握投递简历的黄金时间段.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/04 做好充分的准备去面试.md">04 做好充分的准备去面试.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/05 把握面试时的关键点.md">05 把握面试时的关键点.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/06 捕捉 HR 微表情,做出应对策略.md">06 捕捉 HR 微表情,做出应对策略.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/07 巧妙推销自己的 3 个技巧.md">07 巧妙推销自己的 3 个技巧.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/08 认清自身实力,明确求职方向.md">08 认清自身实力,明确求职方向.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/09 判断公司背景,做出合理选择.md">09 判断公司背景,做出合理选择.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/10 了解行业薪资,清晰找准定位.md">10 了解行业薪资,清晰找准定位.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/11 目标明确,阐明沟通.md">11 目标明确,阐明沟通.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/12 工作交接流程福利衔接.md">12 工作交接流程福利衔接.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>03 把握投递简历的黄金时间段</h1>
<p>你好,我是你的面试课老师杨宇堃,欢迎进入第 03 课时的内容“把握投递简历的黄金时间段”。</p>
<p>大家从事不同种类的工作,每天也在不断地制定自己的工作时间表。每个月总结的时候会发现有些事情总是在一个固定的时间去做,也可能在这个时间段发起同一件事情的几率非常的大,而且不止自己这样做,做同样工作的小伙伴亦如此。这就是工作种类作息时间的安排,招聘人员也一样,他们也有固定看简历和电话沟通的时间段。如果抓住这个“黄金投递点”,就等于抓住了招聘人员的视线,进而获得更多关注的可能性会更大。</p>
<h1>HR 工作作息时间表</h1>
<p>每个公司特别是互联网公司都有大量的招聘需求,而面对这么多的需求,公司 HR 是如何应对的?每天的工作作息时间是否有规律可循呢?</p>
<p>做为资深 HR 的我虽然每天都会合理安排工作时间和计划,但我自己的数据太单薄了,所以拜托拉勾网的研发小伙伴帮我调取了相关数据,其结果和我日常的工作安排非常的相似。由此可知,公司 HR 的工作节奏也都是差不多的。</p>
<p>下面通过曲线图的形式来展示拉勾网 HR 的工作作息表:</p>
<p><img src="assets/CgoB5l3kdJGAJrjVAACH0Q4UIaE378.png" alt="img" /></p>
<p>由上图可知,每天 HR 最活跃的时间段为上午 11 ~ 12 点、下午 4 点 ~ 5 点。也就是说在这两个时间段里,我们的招聘小伙伴在疯狂的筛选简历,即在招聘平台上筛选来自不同候选人的简历。</p>
<p>如果面试者投递简历的时间为上午的 10 ~ 11 点 或者下午的 3 ~ 4 点,那么简历有可能会被优先处理。相信你也有过体验:一天当中,上午的工作心情以及认真度普遍是最高的,也就是说投递的简历是最容易被招聘人员筛选出来的。</p>
<h1>候选人投递时间表</h1>
<p>上面分析了 HR 最活跃的时间段,那求职者是不是也有个投递简历的高峰期?如何错开高峰期呢?我也请研发小伙伴调取了拉勾网投递简历的数据。</p>
<p>下面通过曲线图的形式来展示候选人投递简历的时间表:</p>
<p><img src="assets/CgotOV3kdJGAYw3aAACPGfXXZmA147.png" alt="img" /></p>
<p>由上图可知,候选人投递简历的高峰期是在上午 11 点和下午 4 点这两个时间段,也就是说和 HR 筛选简历的时间段完全重合。相信你也有过类似的体验:当专心做某一件事情的时候,肯定不会注意到投递来的新简历,这就是为什么简历石沉大海的原因。</p>
<p>通过上面两个数据的分析,相信你也应该知道了 HR 筛选简历的时间段,由此可知,投递简历的“黄金时间段”在上午的 10 ~ 11 点 或者下午的 3 ~ 4 点。因此,从现在起,调整投递简历的时间吧,在更好的时间段将自己的简历呈现到 HR 的面前。</p>
</div>
</div>
<div>
<div style="float: left">
<a href="/专栏/12步通关求职面试-完/02 读懂职位 JD精准投递简历.md">上一页</a>
</div>
<div style="float: right">
<a href="/专栏/12步通关求职面试-完/04 做好充分的准备去面试.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":"70996d969ac23d60","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>

View File

@@ -0,0 +1,574 @@
<!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>04 做好充分的准备去面试.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="/专栏/12步通关求职面试-完/00 开篇词:了解面试“潜规则”,从海选中脱颖而出.md">00 开篇词:了解面试“潜规则”,从海选中脱颖而出.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/01 设计一份吸引面试官的简历.md">01 设计一份吸引面试官的简历.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/02 读懂职位 JD精准投递简历.md">02 读懂职位 JD精准投递简历.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/03 把握投递简历的黄金时间段.md">03 把握投递简历的黄金时间段.md.html</a>
</li>
<li>
<a class="current-tab" href="/专栏/12步通关求职面试-完/04 做好充分的准备去面试.md">04 做好充分的准备去面试.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/05 把握面试时的关键点.md">05 把握面试时的关键点.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/06 捕捉 HR 微表情,做出应对策略.md">06 捕捉 HR 微表情,做出应对策略.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/07 巧妙推销自己的 3 个技巧.md">07 巧妙推销自己的 3 个技巧.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/08 认清自身实力,明确求职方向.md">08 认清自身实力,明确求职方向.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/09 判断公司背景,做出合理选择.md">09 判断公司背景,做出合理选择.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/10 了解行业薪资,清晰找准定位.md">10 了解行业薪资,清晰找准定位.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/11 目标明确,阐明沟通.md">11 目标明确,阐明沟通.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/12 工作交接流程福利衔接.md">12 工作交接流程福利衔接.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>04 做好充分的准备去面试</h1>
<p>你好,我是你的面试课老师杨宇堃,欢迎进入第 04 课时的内容“做好充分的准备去面试”。</p>
<h1>日常 HR 的工作流程解析</h1>
<p>可能你会问HR 不就是每天守在电脑前等着投简历,然后第一时间去筛选简历吗?为什么还会有“投递黄金时间段”这样的说法?不应该是随时投递简历都可以吗?有这样疑惑的你就太误解 HR 的工作了接收简历只是他们手上工作的一部分。HR 每天还需要处理其他很多的工作,就像很多不同岗位的小伙伴同时负责很多工作一样。</p>
<p>首先,电话沟通是 HR 核心工作内容的一部分电话沟通并不是简单的通知候选人何时何地来面试。可是大部分人反馈说我每次接到电话就是通知面试并没有说其他的。其实在电话沟通之前HR 就已经仔细阅读过简历内容了,有疑问的地方会标记出来,在电话沟通过程中与你确认具体的问题点在哪里。</p>
<p>所以,电话沟通分为两种:一种是电话预约;另外一种是电话确认。</p>
<ul>
<li>电话预约已经很清晰了,就是确认面试的时间。</li>
<li>电话确认一般发生在 HR 不确认你对招聘的岗位是否有兴趣或者简历存在比较大的问题的情况下。也就是说在接到电话沟通时不要表现的太过随意,因为你在电话另外一端说的任何一句话 HR 都会有一个潜意识的判断,这个判断很有可能会影响到你的面试环节。</li>
</ul>
<p>如何在电话沟通时表现良好呢?</p>
<ul>
<li>一定要对投递的公司有所了解,也正如前面说过的,很多人都是随便投递简历,最终也不记得都投递了哪些公司,所以在电话沟通时,招聘人员很不喜欢听到“请问你们公司是做什么的?”、“这个岗位的职位 JD 可以发给我看看吗?”、……,类似的声音,他们会认为你都没有认真对待这个岗位。</li>
<li>电话沟通时语气非常冷漠,明显表现出非常不高兴的情绪。其实 HR 在电话另外一端可以很清晰地听出对方的性格和表现。例如,有的人声音很消极,给 HR 的感觉是这个人对工作没有热情;有的人声音非常强硬,很容易给 HR 对方不是很好相处的印象。</li>
</ul>
<p>因此,一定要记住自己投递过的公司和岗位信息,给 HR 一种你已经做好准备的感觉;然后掌握沟通的技巧,清晰地表达自己的想法和观点,语气尽量亲切一些,这样 HR 应该很愿意和你沟通,还能留下不错的印象。</p>
<p>其次,面试安排其实也会占据 HR 的很多工作时间。这个环节和电话沟通一样,你的表现也很容易被 HR 作出初步的判断。如何在面试安排时表现良好呢?</p>
<ul>
<li>要有时间观念,尽量提前 5 ~ 10 分钟到达面试地点。很多招聘企业非常喜欢遵守时间的人,而且 HR 每天都会安排很多场面试,可能每个候选人的面试时间都是相连的,如果迟到很有可能会影响面试官的时间安排。如果有特殊原因,最好提前 0.5 ~ 1 个小时通知 HR争取能调整面试的时间。</li>
<li>要保持个人卫生,相信不论到任何场合,个人卫生非常差的话很难受到欢迎。虽然不需要你穿着有多奢华,只要保持衣着整洁、干净,会给 HR 留下不错的印象。</li>
<li>保持礼貌,中国有句古话“礼多人不怪”,虽然 HR 只是帮你协调面试,但也起到了你是否可以入职的关键因素。所以保持礼貌和谦虚的心态和行为,可以得到不少的加分。</li>
</ul>
<p>当然,除了上面提到的工作内容,很多 HR 还会负责面试、发放 Offer 以及办理入职相关的手续,这些内容将在后面详细讲解。</p>
<h1>其他投递渠道分析</h1>
<p>目前 HR 收取简历的主要渠道有招聘网站、猎头、内推、校园招聘这几类。接下来说说这些渠道都适合什么样的求职者,去帮助你准确地判断通过哪种渠道可以更好的找到工作以及心仪的公司。</p>
<p>1.招聘网站</p>
<p>不用过多介绍,目前很多求职者都在使用,比如拉勾网,其是一家专注垂直互联网领域的公司,如果有研发、产品、运营等互联网方向的岗位需求,可以到该网站上发布岗位或寻找人才。</p>
<p>我在面试的时候经常有人问:常年累月挂着招聘是真的有招人的需求吗?企业究竟是真的想要招人,还是只挂在网上做做样子?</p>
<p>你可能经常也会有这样的疑惑其实很多企业挂出去的岗位目前都是在持续招聘的可能招聘的紧急度并没有那么高也有可能是一个储备的岗位HR 会先将岗位挂出去,对投递来的简历会仔细审阅,直到选出最合适的人选才会安排面试。</p>
<p>2.猎头</p>
<p>猎头渠道对候选人的要求可能会更高,一般是针对高级管理者或者行业专家使用的渠道。如果你只有 1 ~ 3 年的工作经验,可能现在还用不到这个渠道。</p>
<p>此时的你是否有过这样的疑惑:看岗位是合适的,为什么最后得到的反馈就是不适合?</p>
<p>这个时候就要审视一下自己的简历正如第01讲所分析的是不是真的将自己的优势都凸显出来了招聘岗位所说的内容是不是都在简历中有所体现工作年限真的都留意到了吗自己的项目经验是不是也都体现出来了</p>
<p>3.内推
内部推荐是一个非常好的渠道,成功率非常高。如果你身边有不错关系的同学或者朋友在心仪的公司,请他内推给 HR可能反馈非常快不过面试结果还要看个人的努力了。</p>
<p>那为什么同一家公司自己投简历就没后续了,猎头推荐或内推就有面试机会呢?</p>
<p>其实猎头的工作并没有那么神奇,每位猎头顾问在推荐你简历的时候都会与你进行沟通,在沟通的过程中会提炼出你简历里面没有展现的优势,然后猎头会对你的简历进行修改,以突出工作中的重点,以便让 HR 清晰地捕捉到想要的信息。所以说将自己的简历写出价值是有多么重要。</p>
<p>4.校园招聘</p>
<p>校园招聘相信都经历过,这个渠道主要是针对应届毕业生的,每年都会在 3 月或者 10 月份进行。如果你已经离开校园了,也就没有办法参与这个渠道的招聘了。</p>
<p>那互联网企业招聘现在更看重是学历?还是本身具备的技能?</p>
<p>可能有的人比较忐忑:我学历背景并不是很好,企业在招聘的时候更看重学历还是看中我本身的技能呢?当然很多人会告诉你学历是非常重要的,同时企业也会注意你的学习能力。如果你在后期努力进修了更好的学历,其实可以充分的展现学习主动性,也会很获得企业的欢迎。当然如果你的项目经验非常完善,在过去的工作经历中负责过比较好的项目,那完全可以掩盖你学历上的差距。</p>
<p>希望通过对以上渠道的分析,能准确地使用它并获得邀约的机会和面试的流程。</p>
</div>
</div>
<div>
<div style="float: left">
<a href="/专栏/12步通关求职面试-完/03 把握投递简历的黄金时间段.md">上一页</a>
</div>
<div style="float: right">
<a href="/专栏/12步通关求职面试-完/05 把握面试时的关键点.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":"70996d987f1d3d60","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>

View File

@@ -0,0 +1,646 @@
<!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>05 把握面试时的关键点.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="/专栏/12步通关求职面试-完/00 开篇词:了解面试“潜规则”,从海选中脱颖而出.md">00 开篇词:了解面试“潜规则”,从海选中脱颖而出.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/01 设计一份吸引面试官的简历.md">01 设计一份吸引面试官的简历.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/02 读懂职位 JD精准投递简历.md">02 读懂职位 JD精准投递简历.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/03 把握投递简历的黄金时间段.md">03 把握投递简历的黄金时间段.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/04 做好充分的准备去面试.md">04 做好充分的准备去面试.md.html</a>
</li>
<li>
<a class="current-tab" href="/专栏/12步通关求职面试-完/05 把握面试时的关键点.md">05 把握面试时的关键点.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/06 捕捉 HR 微表情,做出应对策略.md">06 捕捉 HR 微表情,做出应对策略.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/07 巧妙推销自己的 3 个技巧.md">07 巧妙推销自己的 3 个技巧.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/08 认清自身实力,明确求职方向.md">08 认清自身实力,明确求职方向.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/09 判断公司背景,做出合理选择.md">09 判断公司背景,做出合理选择.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/10 了解行业薪资,清晰找准定位.md">10 了解行业薪资,清晰找准定位.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/11 目标明确,阐明沟通.md">11 目标明确,阐明沟通.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/12 工作交接流程福利衔接.md">12 工作交接流程福利衔接.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>05 把握面试时的关键点</h1>
<p>你好,我是你的面试课老师杨宇堃,欢迎进入第 05 课时的内容“把握面试时的关键点”。</p>
<p>按照前面几讲内容的提示终于接到心仪公司的面试邀请了心情很激动也伴随着一些小小的忐忑内心OS该如何应对面试呢。下面我将解读从进入公司到面试结束后的这段时间该如何表现自己如何抓住面试官的心也就握住了这次工作机会的核心关键点。</p>
<h1>面试前的准备工作</h1>
<p>先说说面试前的准备吧。常规的准备相信你一定知道,比如制作一份吸引 HR 的简历、穿一身体面的衣服、整理一下自己的发型等。简历相关的准备前面已经详细讲过,这里就不多介绍了。</p>
<p>下面说说穿着相关的准备,很多小伙伴认为面试时的穿着并不是很重要,面试官肯定更看重个人魅力和知识的储备。当然这么说是没错的,但如果你和面试官首次见面,在还没有开始正式聊天之前,他是无法感知你的个人魅力或者知识储备的。</p>
<p>假如第一次见面就看到邋遢的外表或者奇怪的着装,面试官会怎么给你贴标签呢?首先他一定会认为你并不尊重这次面试,给他造成一种没有礼貌的印象;然后就是被你身上的味道熏倒无法和你多交流;最后根本来不及了解你的个人魅力和知识储备就草草地结束了这次面试。相信这个结果一定不是你想碰到的吧?所以,干净得体的着装是面试非常重要的一个环节。</p>
<p>面试官也会通过你的着装去判断你的性格,以及判断与公司的文化、团队的气氛是否匹配。这时可能你会问:我也没有进入到这家公司和团队,该如何判断面试当天穿什么衣服才符合这个公司的文化或者符合这个团队的气氛呢?当然,我们没有办法做到“把面试官的感受照顾到很细”的层面。</p>
<p>但是不同的穿着一定会表现出你的性格,有些表现出来的性格可能不会被大众所接受的,希望可以回避一下。下面简单说说几种可以表现性格的穿着:</p>
<ul>
<li>喜欢穿简单朴素衣服的人,往往给人的印象是性格比较沉着稳重、为人比较真诚和随和,无论是在工作或学习上,还是在生活中,会给人一种勤奋好学、诚实肯干的感觉;</li>
<li>喜欢穿样式繁杂、颜色多样、花里胡哨的衣服的人,多是虚荣心比较强,爱表现自己而且又是乐于炫耀的人,会给人一种性格有些飞扬跋扈的感觉;</li>
<li>喜欢穿浅色衣服的人,性格比较活泼好动,十分健谈,会给人一种喜欢交朋友的感觉;</li>
<li>喜欢穿深色衣服的人,性格比较稳重,显得城府很深,会给人一种比较沉默,做人做事深谋远虑的感觉。</li>
</ul>
<p>如果你希望在面试中表现的不是那么具有攻击力或者给人比较亲和、稳重性格的话,建议穿简单、朴素、纯色的衣服,会显得整个人比较清爽,且比较容易亲近,相信面试官也愿意和你多聊几句。当然不仅穿着干净,而且一定要注意个人卫生,最好不要让自己身上的体味过重或者使用太重味道的香水。化妆时,不建议浓妆艳抹,自然的淡妆让自己看起来很精神就可以。</p>
<p><img src="assets/CgpOIF3t-oCAafCfAACDS4rPdL8646.png" alt="img" /></p>
<h1>如何全面的介绍自己</h1>
<p>接下来就是面试的过程了,首先面试官会说:“请简单介绍一下自己。”</p>
<p>面试官有两个目的1希望通过你的简单描述可以和简历上的经历做校对2通过简单地介绍来看看你的逻辑和总结能力如何。所以自我介绍也是非常重要的一个环节好的自我介绍一定要做到以下几点。</p>
<ol>
<li>面试时的自我介绍</li>
</ol>
<p>一定要把握住时间。面试时的自我介绍一般控制35分钟最合适尽量不要超过10分钟。时间过短说明你根本没有清晰的介绍自己这时面试官很难了解你到底做了什么时间过长可能很多内容不是面试官需要的信息这时大部分的面试官会主动打断你从而留下了不太好的印象。</p>
<p>那如何把握好时间呢建议在介绍时包含以下几个部分就好1情况介绍包括教育经历2工作经验的介绍3介绍最有价值的经历。这样的一个自我介绍应该可以很好的控制在5分钟左右了既可以让面试官清晰的了解你的情况也能表现出你的优势。</p>
<ol start="2">
<li>面试过程中需突出的几个点</li>
</ol>
<p>在面试过程中一定要突出以下几个点:做过什么、有哪些工作业绩、优势是什么,这样可以很好的突出自己。</p>
<ul>
<li>做过什么:介绍自己,把自己曾经做过的事情说清楚,每段工作对应时间节点的公司名称、担任职务、工作内容等,尤其是对最近两份工作做过的事情要重点说说,较早之前的工作经验,或者学习的经验可以一带而过,要把握“重点突出”的原则。</li>
<li>有哪些工作业绩把自己在不同阶段做成的有代表性的项目经验介绍清楚但是一定要注意1 应与应聘岗位需要的能力相关的业绩多介绍不相关的一笔带过或不介绍因为面试官关注的是对用人单位有用的业绩2要注意介绍你个人的业绩而不是团队业绩要把自己最精彩的一两段业绩加以重点呈现。当然也要做好充足的准备可以迎接面试官的提问。</li>
<li>突出自己的优势:注意介绍自己的优势一定要与应聘的岗位密切相关,主要是围绕自己专业特长来介绍。除专业特长以外的特长,特别突出可以介绍,但要点到为止。</li>
</ul>
<p>举个例子你好我是某某2018年3月加入XXX公司担任产品经理一职主要负责公司核心产品的规划和设计工作在这段期间我独立完成过XX项目的产品跟进和上线的工作将产品的数据提升了30%业绩突出获得了公司的认可。在项目中我通过学习和与外部专家的沟通获许了XXX新策略的信息并积极尝试达成了我的目标。</p>
<ol start="3">
<li>每段工作的离职原因</li>
</ol>
<p>在面试的过程中一定要突出自己职业规划的逻辑性,也就是说需要让面试官感受到你的每次工作变动都是为了个人成长以及有规划的进行变动。所以在表述的时候最好可以清晰地说出你在每段工作中的收获和成长点,当然如果在陈述这些内容时可以体现出你的个人思考,就更是画龙点睛了。</p>
<h1>如何回答面试中的问题</h1>
<p>相信你经常会碰到面试官问以下的问题,这些问题也是面试官给你的一些考验,如果更好地回答这些问题可能会成为你入职心仪公司的敲门砖。</p>
<ol>
<li>你为什么选择我们公司?</li>
</ol>
<p>这个问题相信不少小伙伴遇到过,可能你的原因是随便投递、公司离自己住的地方近、工资给的高、公司不加班、公司有各种补助等。如果这些答案出现在你的面试回答中,那 HR 会重新考虑是否要录用你了。</p>
<p>所以在回答这个问题时需要有一些准备:</p>
<ul>
<li>可以先描述一下自己的能力与岗位要求的契合度,表现出在公司提供的岗位上有机会可以一展所长;</li>
<li>说出几个被企业所吸引的优点,这些优点能为以后的工作带来什么好处;</li>
<li>自己的职业发展与公司前景作出总结。</li>
</ul>
<p>相信这些回答可以很容易抓住面试官的心,不过前期也是需要你对这家企业,以及所招聘的岗位做了一定的功课。</p>
<ol start="2">
<li>你为什么从上家公司离职?</li>
</ol>
<p>也许你在前公司受到了委屈、也许前公司人事关系复杂所以离职,但无论前公司有多么的糟糕,都千万不能在面试时说出来。因为你在上家公司离职的原因,会使面试官联想到你会不会因为在新公司受到委屈而轻易离职?再者,面试官其实并不关心你为什么要离职,所以面试时只需要给在场所有的人一个都可以接受的答案就可以了。</p>
<p>例如,可以这样回答:为了更好的发展,所以选择离职。切记在回答这个问题的时候,不能贬低前公司、不要损害前领导的形象。</p>
<ol start="3">
<li>你的优点和缺点是什么?</li>
</ol>
<p>相信很多小伙伴对这个问题都很头疼,自己的优点说的太多会让面试官感觉过于自大,可在面试的过程中又有谁愿意说自己的缺点呢?下面列举几个简单的方向,希望可以帮助你解决这个尴尬的困境。</p>
<p>优点:可以结合过往的工作经历和工作业绩等讲述一下自己的优势。例如,我曾经参加过某某项目,相信我的这个工作经验可以很好的帮助到公司解决什么方面的问题等。当然也可以通过一些例子说明自己的人品或性格方面的优势,哪家企业可以拒绝一位性格和能力都很好的候选人呢?</p>
<p>缺点:金无足赤、人无完人,要勇敢的面对自己的缺点,可以向面试官说明,你针对自己的缺点做了哪些改变,以此来说明你正在积极地改变自己去成为更优秀的人。</p>
<ol start="4">
<li>未来 3 年或 5 年,你的职业规划是什么?</li>
</ol>
<p>当面试官问到这个问题时,是希望看到你的自我学习力和未来牵引你的职业动力是什么。对职业规划不清晰的人,很难获得成功,也不会在一个岗位上待很久,所以也不是公司最合适的人选。</p>
<p>当被问到你的职业规划是什么的时候,此时可以设定一个短期就能实现的规划和一个未来希望实现的目标。</p>
<p>例如,我希望可以在未来的 1 ~ 2 年内,梳理和参与到几个完整的项目中,从中学习和看到整个项目进度是什么样的,从而提升自己的工作能力和项目经验。在未来的 3 ~ 5 年内我希望可以独立承担项目,做一个可以让大家都能使用并且体验良好的产品出来。</p>
<p>这样的回答,在短期规划上会让面试官认为你是一个脚踏实地,希望可以通过学习而成长的人,而且也在积极的改变自己;在长期规划上也能让面试官感受到你对这份工作的热情,具有很强的成就动机。</p>
<ol start="5">
<li>在选工作中更看重的是什么?</li>
</ol>
<p>很多小伙伴反馈,这个问题很难回答,其实也能想到面试官肯定更看重你的是个人成长和发展空间。当然也许你的内心想的是涨薪或者培训,虽然薪资是一定的,但是如果让面试官认为你是一个物质的人,并没有长久的培养空间,那面试的结果就可想而知了。</p>
<ol start="6">
<li>你还有什么问题吗?</li>
</ol>
<p>这是面试结束前的最后一个问题,也可以认为是个形式问题或走个流程,此时可根据前面面试过程中的表现程度来适当的提问,比如公司福利、上下班时间、团队氛围、个人岗位发展等,但尽量不要问从网上就能查到公司信息的问题。</p>
</div>
</div>
<div>
<div style="float: left">
<a href="/专栏/12步通关求职面试-完/04 做好充分的准备去面试.md">上一页</a>
</div>
<div style="float: right">
<a href="/专栏/12步通关求职面试-完/06 捕捉 HR 微表情,做出应对策略.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":"70996d9a5b4a3d60","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>

View File

@@ -0,0 +1,582 @@
<!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>06 捕捉 HR 微表情,做出应对策略.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="/专栏/12步通关求职面试-完/00 开篇词:了解面试“潜规则”,从海选中脱颖而出.md">00 开篇词:了解面试“潜规则”,从海选中脱颖而出.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/01 设计一份吸引面试官的简历.md">01 设计一份吸引面试官的简历.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/02 读懂职位 JD精准投递简历.md">02 读懂职位 JD精准投递简历.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/03 把握投递简历的黄金时间段.md">03 把握投递简历的黄金时间段.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/04 做好充分的准备去面试.md">04 做好充分的准备去面试.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/05 把握面试时的关键点.md">05 把握面试时的关键点.md.html</a>
</li>
<li>
<a class="current-tab" href="/专栏/12步通关求职面试-完/06 捕捉 HR 微表情,做出应对策略.md">06 捕捉 HR 微表情,做出应对策略.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/07 巧妙推销自己的 3 个技巧.md">07 巧妙推销自己的 3 个技巧.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/08 认清自身实力,明确求职方向.md">08 认清自身实力,明确求职方向.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/09 判断公司背景,做出合理选择.md">09 判断公司背景,做出合理选择.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/10 了解行业薪资,清晰找准定位.md">10 了解行业薪资,清晰找准定位.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/11 目标明确,阐明沟通.md">11 目标明确,阐明沟通.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/12 工作交接流程福利衔接.md">12 工作交接流程福利衔接.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>06 捕捉 HR 微表情,做出应对策略</h1>
<p>你好,我是你的面试课老师杨宇堃,欢迎进入第 06 课时的内容“捕捉 HR 微表情,做出应对策略”。</p>
<p>在面试的过程中,如何判断自己所陈述的信息是面试官感兴趣的呢?怎么才能在恰当的时间更好地展示自己擅长的内容呢?同样,如何在不恰当的时候适可而止,更好地转换话题呢?此时需要精准地捕捉到面试官的微表情,以便在合适的时间突出自己。</p>
<h1>沟通时需注意的小细节</h1>
<p>你有没有经历过这样的窘境:当在描述项目经验时,突然被面试官打断了,虽然此时你正在兴头上,但也请你马上停止,面试官的打断说明他对你的这段经历比较了解,或者刚才的这段描述有了自己的判断,所以要想想刚才的描述是否有漏洞,如果有机会建议再重新解释一下。</p>
<p><img src="assets/CgpOIF3wtBiAL6n9AADfDRRFuSs837.png" alt="img" />
有时候也能发现面试官重复提问同样类型的问题,说明他对你之前回答的问题有质疑,希望可以通过重复提问的方式,再次确定这件事情的真实性,此时需要你给出不同的答案或挑选重点内容来回答,如果没有察觉,很有可能就错失了这次机会。</p>
<p><img src="assets/CgpOIF3wtC-AEStgAADklBdAcW0776.png" alt="img" />
甚至有时候面试官针对某个项目经验进行深入提问,不断地细化你所做的项目数据。这时一定要提高警惕,因为面试官对你的这段经历比较感兴趣,需要通过非常细致地提问,才能了解你在这个项目中真实参与的程度和担任的角色。如果你的回答不够细化或者给出的数据不够精细,那么很容易被误解为并没有参与这个项目的核心内容。</p>
<p><img src="assets/Cgq2xl3wtE-AT10PAADlFRIJoLc909.png" alt="img" /></p>
<h1>面试时需留意的微表情</h1>
<p>观察面部微表情可以解读很多信息,进而可以判断面试官是否真的对你所说的内容感兴趣,下面来讲讲面试过程中常见的几个微表情。</p>
<ul>
<li>当看到面试官的下嘴唇往前撇时,说明他对接收到的信息持有怀疑的态度, 此时需要转化角度或思路来陈述。</li>
<li>当看到用牙齿咬嘴唇的时候,说明面试官正在仔细听你的介绍,同时也在默默的思考你所表达的另一层含义是什么。</li>
<li>当看到面试官调整自己的坐姿时,比如身体向前移动,很有可能对你所讲的内容很感兴趣;如果发现面试官身体逐渐的后退,说明很有可能对你的这段介绍没有兴趣聆听,此时要及时的调整陈述的思路。</li>
<li>当发现面试官双臂交叉时,这是防卫的一种表现。很有可能你说的内容与他的认知完全不相符,也表现出面试官对你表述的观点完全不认同或者完全没有听懂你所表达的意思。</li>
</ul>
<blockquote>
<p>上面简单讲了一些面试过程中可能碰到的情况,希望你在以后的面试过程中及时捕捉到面试官的微表情,以做出应对的策略。</p>
</blockquote>
<p>其实很多时候面试官也在捕捉你的面部表情。当你在阐述的过程中,面试官在倾听是否有漏洞,也许不经意的某个动作或者某句话,也能让面试官察觉到你的问题点,然后做出不一样的决定。所以管理好自己的微表情也是非常有必要的,下面我们来说说在面试时做出的一些不经意的错误微表情有哪些。</p>
<h1>面试时需改掉不好的习惯</h1>
<p>有时候一个沟通时的习惯,也能透露出一些问题,比如:</p>
<ul>
<li>当习惯说“啊”、“呀”、“这个”、“那个”、“嗯”等口头语时,一般给人留下词汇量小或者思维慢的印象,在说话时需要利用间歇的方式让自己思考;</li>
<li>沟通时喜欢使用中英搭配,这样很容易给人一种虚荣心比较强、好表现或夸耀自己的错觉;</li>
<li>如果口头禅出现频率过高的话,很容易给人一种办事不干练、意志不坚定的印象。</li>
</ul>
<p>当然说话声音的大小或者语速的快慢等这些信息也能让面试官初步判断你是一个什么性格的人。</p>
<ul>
<li>说话声音的大小和一个人的性格联系非常紧密,喜欢大声说话的人,其性格比较以自我为中心,积极主动、行动力和支配欲强,也就是富有攻击性的一类人;说话声音小的人其性格比较偏内向,考虑的因素比较多,很压制自己的情感。</li>
<li>语速快慢和声音大小一样,一般语速快的人性格比较外向,有冲劲且有活力,但是常常给人一种紧张和压迫感,让人有种焦躁、混乱甚至有些粗鲁的感觉;但是语速慢的人容易让人感觉比较木讷,容易犹豫不决,甚至有时候有消极悲观的想法。</li>
</ul>
<p>所以说需要根据你所从事的工作或者要应聘的岗位来调整自己说话的方式,才更能获得面试官的青睐。假如你是一位声音小而且语速慢的人,去面试一家公司的销售岗位,相信这家公司不会对你抛出橄榄枝,因为他们很难从你的沟通中看出你的销售潜力。</p>
<h1>面试中透露出的动作,也需要多多留意</h1>
<p>很多小伙伴可能没有留意在面试过程中做的一些小动作,也许就是这些小动作导致面试官对你的印象减分。下面简单说几个常见的小动作,希望可以帮到你。</p>
<ul>
<li>吐舌头:一般在感受到有压力时,舌头不自觉地做出舔嘴唇或者看似是在舔嘴唇的动作,说明是对自我的一种安慰。如果做了这个动作说明当时你备感尴尬,希望可以缓解一下气氛。</li>
<li>用手捂住嘴巴:这个动作一般表示自己对刚刚说的话已经意识到了错误,下意识的去捂住自己的嘴巴。</li>
<li>十指交叉:这个动作很可能是自信的表现,也有可能是在掩盖你的紧张。如果你的十指无意识的交叉在一起,而且眼神也在躲避面试官,很有可能是怕面试官发现你的紧张。</li>
<li>抚摸颈部:这个动作说明你并不是很自信,当然也有可能是你正在释放压力,这是一种普遍有力的信号,说明大脑正在积极处理某种消极的情绪。</li>
<li>眼神躲避:很多候选人在面试的过程中,经常左顾右看,躲避面试官的眼神,给面试官一种心虚的表现。</li>
</ul>
<p>当然还有一些其他的小动作,比如揉鼻子、挠头或者摸耳朵、翘二郎腿或抖腿、常扶眼镜、玩弄随身小物件、咬指甲等,这些小动作也都说明你比较紧张或者不够自信。</p>
<p>希望你可以通过这一课时的学习,合理地控制一下自己的微表情,在面试时更好地表现自己。</p>
</div>
</div>
<div>
<div style="float: left">
<a href="/专栏/12步通关求职面试-完/05 把握面试时的关键点.md">上一页</a>
</div>
<div style="float: right">
<a href="/专栏/12步通关求职面试-完/07 巧妙推销自己的 3 个技巧.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":"70996d9c382b3d60","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>

View File

@@ -0,0 +1,540 @@
<!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>07 巧妙推销自己的 3 个技巧.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="/专栏/12步通关求职面试-完/00 开篇词:了解面试“潜规则”,从海选中脱颖而出.md">00 开篇词:了解面试“潜规则”,从海选中脱颖而出.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/01 设计一份吸引面试官的简历.md">01 设计一份吸引面试官的简历.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/02 读懂职位 JD精准投递简历.md">02 读懂职位 JD精准投递简历.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/03 把握投递简历的黄金时间段.md">03 把握投递简历的黄金时间段.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/04 做好充分的准备去面试.md">04 做好充分的准备去面试.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/05 把握面试时的关键点.md">05 把握面试时的关键点.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/06 捕捉 HR 微表情,做出应对策略.md">06 捕捉 HR 微表情,做出应对策略.md.html</a>
</li>
<li>
<a class="current-tab" href="/专栏/12步通关求职面试-完/07 巧妙推销自己的 3 个技巧.md">07 巧妙推销自己的 3 个技巧.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/08 认清自身实力,明确求职方向.md">08 认清自身实力,明确求职方向.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/09 判断公司背景,做出合理选择.md">09 判断公司背景,做出合理选择.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/10 了解行业薪资,清晰找准定位.md">10 了解行业薪资,清晰找准定位.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/11 目标明确,阐明沟通.md">11 目标明确,阐明沟通.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/12 工作交接流程福利衔接.md">12 工作交接流程福利衔接.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>07 巧妙推销自己的 3 个技巧</h1>
<p>你好,我是你的面试课老师杨宇堃,欢迎进入第 07 课时的内容“巧妙推销自己的 3 个技巧”。</p>
<h1>平和的心态,展现你的热情</h1>
<p>对于任何一家企业在选择合适的人选时,一般都会从这几个方面进行筛选:首先是否具有相关的项目经验;其次是否聪明或者是否具有独自解决问题的能力;最后判断能否融入到团队的氛围中,以及是否对企业或者行业具有热情的态度来面对。</p>
<p>前两个方面所说的是面试者的行业经验和智商,对于一家公司在招聘时当然重要,但这并不是一个团队可以获得成功的关键因素。相信很多企业在选择五年经验以内的候选人时,这两个方面的考察一定会低于最后性格部分的考察。</p>
<p>相信很多小伙伴会有疑问,性格(工作热情)相比情商或工作经验对于一家企业真有那么重要吗?这个我可以肯定的告诉你,面试官非常喜欢性格开朗、积极主动、乐于挑战的候选人;同样也很排斥在乎个人得失、把责任都推给前司的候选人。相信你在工作中也会遇到过类似的同事,可以回忆一下,当时你是不是也很排斥呢?</p>
<p><img src="assets/CgpOIF34VTeAAY1KAABaERDEH1M332.png" alt="img" />
在一个团队里如果存在一位性格比较消极的员工,很容易将其他员工传染,从而导致整个团队产出效率低下。也就是我们常说的“酒与污水定律”:是指把一勺酒倒入到一桶污水里,得到是一桶污水;如果把一勺污水倒入倒一桶酒中,得到的还是一桶污水。所以,对于面试官来说,候选人的性格和态度是至关重要的。</p>
<p><img src="assets/Cgq2xl34VVWAAR6iAABJEbyP4Ls587.png" alt="img" />
如何在面试官面前表现出积极正向、乐观的心态呢?</p>
<p>首先,需要表现出对应聘岗位和企业的认同感,也让面试官看到你为了这份工作做了很充分的准备,或者积极的介绍之前做过的项目与应聘企业项目的相似度。这些表现都可以让面试官感受到你的热情和积极正向的输出,非常不建议面试时问什么答什么的做法。</p>
<blockquote>
<p>比如,当面试官问「你为什么选择目前的这份工作」时?如果只是单纯地回答「我喜欢这份工作」且没有任何的解释,那面试官无法判断你所说的真实性。此时建议这样回答:“因为目前这份工作和我之前做过的 xxx 项目非常相像。我在参与上一份项目时学习到了 xxx 技能,找到了一个新的发展方向,从而喜欢上了这样的一份职业。”,相信这样的表述面试官才能感受到你的热情和积极正向的态度。</p>
</blockquote>
<p>其次,可以和面试官介绍一下,你在上一家公司与同事和领导相处融洽的案例,让面试官感受到你是一个积极融入团队中的人。比如「在前司获得的成长有哪些,与前 leader 的身上都学习到了哪些工作思路和成长思路等」,相信面试官会认为你是一个非常值得培养和积极主动学习的人。</p>
<h1>了解行业发展,清晰表达你的见解</h1>
<p>除了表现出积极和热情以外,如果在面试的过程中可以介绍一些你对行业以及对自己所从事工作的理解或见解,相信面试官一定会被你的表述深深吸引,也同样加强了希望可以录取你的信心。</p>
<p>比如,当面试官问「你怎么看对目前所从事的工作价值」时,如果这样回答「我觉得这是一份收入,并没有太多的感受,也不知道自己未来的发展是什么样的」,面试官会判断你是一个没有任何思考的人,应该也不会在自己的岗位上有什么作为。</p>
<p>此时建议这样回答:“我非常喜欢我的工作,我感觉我的岗位在目前行业的发展中起到了非常重要的作用,我们所做的几个项目都在推动公司的发展,也帮助公司的业绩从 XX% 提升到了 XX%(在这里举一些自己做过的项目经验),而且我也希望可以继续从事这样的工作,因为它可以让我获得更多的成就感。相信这个行业的发展是 xxxxxxxxx我的职业规划也会跟随这个行业的发展而得到很大的提升。”</p>
<p>当面试官听到这样的介绍时,会非常清晰地了解你对自己的工作已经有了深入的思考,同时也能感受到你不止局限在自己的工作领域中,还在通过行业的变化和了解,来规划自己的职业,是一个很有潜力的候选人。</p>
<h1>真诚的对待每一次面试</h1>
<p>当然除了积极的态度以及清晰的定位以外,还必须是一个真诚、正直的人。如果在面试的过程中表现良好、思考很全面,但是与实际工作的内容只有 50% 的真实度,这样会很容易在面试官面前露馅,然后给你打上一个不真诚的标签,自然而然,面试也就到此结束了。</p>
<p>因此,很多企业非常在乎候选人是否诚实或者真诚。也许你的职业经历并不是很丰富、项目内容并没有那么完美,但如果将自己所做的内容真实、完整地呈现给面试官,同时加上自己的思考,相信很多面试官会参考你的工作年限然后给你一个非常公平的反馈。</p>
<p><img src="assets/Cgq2xl34VnSAZiE_AABUKhj8BA4986.png" alt="img" />
通过以上三个方面的讲述,可以了解到面试官在面试的时候更看重的是品德,然后是性格,最后才是工作经验和学历。希望你听完这一讲的内容后,可以积极主动地面对自己的岗位,更好的去思考如何巧妙的推销自己。</p>
</div>
</div>
<div>
<div style="float: left">
<a href="/专栏/12步通关求职面试-完/06 捕捉 HR 微表情,做出应对策略.md">上一页</a>
</div>
<div style="float: right">
<a href="/专栏/12步通关求职面试-完/08 认清自身实力,明确求职方向.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":"70996d9e2cce3d60","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>

View File

@@ -0,0 +1,554 @@
<!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>08 认清自身实力,明确求职方向.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="/专栏/12步通关求职面试-完/00 开篇词:了解面试“潜规则”,从海选中脱颖而出.md">00 开篇词:了解面试“潜规则”,从海选中脱颖而出.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/01 设计一份吸引面试官的简历.md">01 设计一份吸引面试官的简历.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/02 读懂职位 JD精准投递简历.md">02 读懂职位 JD精准投递简历.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/03 把握投递简历的黄金时间段.md">03 把握投递简历的黄金时间段.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/04 做好充分的准备去面试.md">04 做好充分的准备去面试.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/05 把握面试时的关键点.md">05 把握面试时的关键点.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/06 捕捉 HR 微表情,做出应对策略.md">06 捕捉 HR 微表情,做出应对策略.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/07 巧妙推销自己的 3 个技巧.md">07 巧妙推销自己的 3 个技巧.md.html</a>
</li>
<li>
<a class="current-tab" href="/专栏/12步通关求职面试-完/08 认清自身实力,明确求职方向.md">08 认清自身实力,明确求职方向.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/09 判断公司背景,做出合理选择.md">09 判断公司背景,做出合理选择.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/10 了解行业薪资,清晰找准定位.md">10 了解行业薪资,清晰找准定位.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/11 目标明确,阐明沟通.md">11 目标明确,阐明沟通.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/12 工作交接流程福利衔接.md">12 工作交接流程福利衔接.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>08 认清自身实力,明确求职方向</h1>
<p>你好,我是你的面试课老师杨宇堃,欢迎进入第 08 课时的内容“认清自身实力,明确求职方向”。
这一讲我们来分析如何更好的认识自己,此时的你可能会很奇怪,我们不是在分析面试时的技巧,以及顺利收到 Offer 吗,为什么这一讲要分析如何看清自己了呢?其实也不奇怪只有更好的认清楚自己,才能更好的明确方向以及获得更好的岗位。</p>
<h1>认清自己的实力</h1>
<p>我经常会被身边的小伙伴问到:我应该选择什么工作方向啊?目前的工作好累啊,想换个工作方向但是不知道如何选择?某某行业的薪资好高啊,要不我去试试吧?
<img src="assets/Cgq2xl357HuAOGynAADrI_pANNA147.png" alt="img" />
如果这样问,有可能被目前社会的很多利益所引导,已经忘了<strong>出发点是什么</strong>或者没有思考过<strong>未来的职业规划</strong>。平时也会听到身边有人说“希望可以拥有一家自己的咖啡厅”,如果这只是一句玩笑话,说说就过去了;但如果你是认真的,那有没有考虑过:在做这件事情之前都准备了什么呢?所以,<strong><strong><strong>选择工作时</strong></strong>先要想想自己的擅长点是什么,同时为这份工作做了哪些准备等</strong>
这里我给你推荐一款职业人格评估工具,即 MBTI来测一测自己是偏外向还是内向、是一个有规划的人还是一个探索性的人、是喜欢做挑战性的工作还是喜欢辅助团队做一些执行层面的工作等当然在测试的时候要依托于自己的内心哦。
<img src="assets/Cgq2xl357FGAEP2nAADFGH1SM3o459.png" alt="img" /></p>
<h1>明确求职方向</h1>
<p>测试完以后就要开始思考到底该如何明确求职方向其实是发挥出自己的优势去寻找一份适合的工作。俗话说「360 行,行行出状元」,相信任何一份工作的发展前景都是非常光明的,只要在某一份工作上做的足够深入且全面,相信你的职业道路也会越来越宽广。尽量不要对自己还没有接触过的事情就开始焦虑,这样会限制自己的想法。
比如,现在大家求职一般会从两个方面考虑,即领域相关的和专业度相关的。</p>
<ul>
<li>领域相关的可分为互联企业和传统企业,比如,如果你是一个充满创新能力且积极愿意改变自己生活的人,可以选择去互联网行业;如果你比较喜欢稳定,对程序化的工作比较看重可以选择去传统企业。</li>
<li>专业度相关的可分为:硬技能型和软技能型。例如,硬技能型有编辑、会计、研发、法律、统计等;软技能型有销售、活动执行、客服、创意等。
具体可参考如下表格:
| | 互联网 | 传统行业 |
| ---- | ---------------------- | ---------------- |
| 硬性 | 研发工程师、数据分析师 | 会计、机械师 |
| 软性 | 产品经理、市场、销售 | 销售、市场、客服 |
根据拉勾后台数据的显示,以下是互联网行业热门岗位的 Top 5</li>
<li>研发工程师岗位需要具备技术能力、逻辑能力、时间观念等</li>
<li>产品经理岗位需要具备逻辑能力、沟通能力、执行力等</li>
<li>运营岗位需要具备一定的分析能力以及对宏观的管理能力等</li>
<li>市场岗位需要具备创意的想法、有一个开朗的性格、沟通能力等</li>
<li>销售岗位需要具备较强的沟通能力且有一个开朗的性格等
若想了解其他具体的岗位详情,建议可通过 MBTI 的测试来了解自己擅长的工作岗位,相信测试完后的结果与测试前的认知岗位会有重合。此时,可以通过拉勾网站去搜索密切度高的岗位,然后查看该岗位的职位 JD建议搜索查看同一岗位的多家职位 JD把JD 重合的部分标记出来,其实这些就是该岗位所必需的技能;当然了,多家职位 JD 也有不同的要求,这时可根据自己擅长的点和过往的经历来选出最合适的公司。
<img src="assets/Cgq2xl356_2AXHwaAAC8sYe_h0k793.png" alt="img" />
也可以通过回复你和对你产生邀约的公司的职位要求进行描述,再次验证是否真的是你的技能方向。
找到自己发展的方向是一方面,当然也需要你对自己的工作年限和自我能力作出正确的认知。在我多年的筛选简历中,经常可以收到一个工作三年左右的小伙伴投递了公司高管的岗位,也许你的职位优势是一个非常具有管理能力的人,但是对于高管岗位还是需要你有很多年的工作经验和项目经验做累计的。所以建议大家在投递简历的时候也要明确自己应该在什么工作年限和工作的阶段,从而找到最合适自己的岗位。
相信通过几年的磨练,在目前的岗位上,也能很快得到大家希望有用的职级和薪资。</li>
</ul>
</div>
</div>
<div>
<div style="float: left">
<a href="/专栏/12步通关求职面试-完/07 巧妙推销自己的 3 个技巧.md">上一页</a>
</div>
<div style="float: right">
<a href="/专栏/12步通关求职面试-完/09 判断公司背景,做出合理选择.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":"70996da0395e3d60","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>

View File

@@ -0,0 +1,530 @@
<!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>09 判断公司背景,做出合理选择.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="/专栏/12步通关求职面试-完/00 开篇词:了解面试“潜规则”,从海选中脱颖而出.md">00 开篇词:了解面试“潜规则”,从海选中脱颖而出.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/01 设计一份吸引面试官的简历.md">01 设计一份吸引面试官的简历.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/02 读懂职位 JD精准投递简历.md">02 读懂职位 JD精准投递简历.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/03 把握投递简历的黄金时间段.md">03 把握投递简历的黄金时间段.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/04 做好充分的准备去面试.md">04 做好充分的准备去面试.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/05 把握面试时的关键点.md">05 把握面试时的关键点.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/06 捕捉 HR 微表情,做出应对策略.md">06 捕捉 HR 微表情,做出应对策略.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/07 巧妙推销自己的 3 个技巧.md">07 巧妙推销自己的 3 个技巧.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/08 认清自身实力,明确求职方向.md">08 认清自身实力,明确求职方向.md.html</a>
</li>
<li>
<a class="current-tab" href="/专栏/12步通关求职面试-完/09 判断公司背景,做出合理选择.md">09 判断公司背景,做出合理选择.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/10 了解行业薪资,清晰找准定位.md">10 了解行业薪资,清晰找准定位.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/11 目标明确,阐明沟通.md">11 目标明确,阐明沟通.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/12 工作交接流程福利衔接.md">12 工作交接流程福利衔接.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>09 判断公司背景,做出合理选择</h1>
<p>你好,我是你的面试课老师杨宇堃,欢迎进入第 09 课时的内容“判断公司背景,做出合理选择”。
前面的几讲我们讨论了面试时需要做哪些准备,以及分析了如何投递心仪的公司。在投递简历时除了心仪的大厂以外,也可以考虑投递一些不知名的公司,但如何判断这些不知名的公司是否靠谱,或者说如何知道哪家公司才是最适合自己的呢?接下来我将和你一起探讨。
有一些小伙伴因为没有提前了解公司,只是单纯急切地想拥有一份工作,最终可能导致入职后不久会再次选择离职。所以,判断一家公司是否合适,对自己的职业规划才是一种非常负责的态度。那下面我们就好好聊一聊,判断公司背景的几个方法。</p>
<h1>通过网站上展示的相关信息来判断</h1>
<p>互联网对于大家来说已经不是那么陌生了,所以很多企业的信息都可以在互联网上获得。我们可以通过这家<strong>公司的官网</strong>去了解它的基础业务和公司发展信息;也可以通过<strong>拉勾<strong><strong>招聘网站</strong></strong>上的</strong>企业界面介绍页去了解这家公司的基础信息。如果还不放心的话,还可以到“天眼查”或者“企查查”官网上查一下这家公司是否是一家正常运营的公司。
当查到这些信息后该如何判断公司的背景呢?
1<strong>公司****的主营业务</strong>。可以查看目前这个主营业务是不是你希望从事的,是行业内的蓝海还是一个比较传统的业务。比如可以通过传播媒体的报道来了解;或者如果一家公司在一年内迅速扩张,那这家公司必然是蓝海企业。
2<strong>公司的****融资情况</strong>。可以通过了解公司的融资轮次以及投资的金融机构来验证是否是一个成熟的公司,因为优秀的金融机构对公司进行投资会非常谨慎。
3<strong>公司****的人员规模和办公地点</strong>。这些也可以判断一家公司的情况,假如公司人员比较多,则说明业务可能更为稳定一些,办公地点在比较正规的办公大厦里也代表了一种稳定的因素。当然不是说好的办公地点和公司人员数量多就是最好的公司,也有不少几个人的初创公司也是很值得考虑的。
4<strong>公司的****创办时间</strong>。除了以上因素以外,肯定要考虑公司的创办时间,可能刚刚开始创办的公司不具备那么好的条件。如果你比较喜欢初创业的公司,那么可以通过公司经营的业务和投资机构的名气去判断;但是如果是一个创办时间比较久的公司,可能就要考虑得稍微多一些了。
5<strong>收集创始人在网上的演讲稿</strong>。从他们的演讲稿中获得一些信息,通过对这个人的看法对比是否和你期望的企业形式一致,也可以判断出他是否具有行业的眼光,但是尽量避免跳入公关稿的坑里去。
当然不排除一些经营很好,但是企业规模和融资情况一般的公司,这个也需要通过其他方面的信息去判断。</p>
<h1>通过来自内部人员的信息判断</h1>
<p>以上是通过拉勾招聘网站上的公司介绍页以及企业官网来判断公司的背景,但只是了解这个公司的表面信息,想了解这家公司真实的具体情况和管理风格,通过以下的方式可能会更清晰一些。
1如果这家公司中有熟悉的朋友或前同事或者学长学姐的话就比较方便了可以问一下他们关于公司内部的团队、部门、上下班时间、福利等情况甚至可以问一下团队领导的风格是怎样的。
2如果你没有这样的朋友关系也可以通过职言或者论坛的讨论去看看这个公司内部的员工是怎么评价公司的。</p>
<h1>面试时通过面试官的言行举止判断</h1>
<p>在面试的过程中,还可以通过与面试官的交流去判断这家公司的情况,如果面试官在面试过程中表现的比较有条理、沟通比较有素质,则可以说明这家公司还是不错的选择;也可以通过对公司环境的观察来判断这家公司的情况。当然你也可以看看拉勾网企业界面的面试评价区,去了解一下其他面试者对这家公司的评价。
相信通过以上几种方法,可以比较清晰地了解一家公司的情况,也可以帮助你更好的去判断这家公司是否值得去。</p>
</div>
</div>
<div>
<div style="float: left">
<a href="/专栏/12步通关求职面试-完/08 认清自身实力,明确求职方向.md">上一页</a>
</div>
<div style="float: right">
<a href="/专栏/12步通关求职面试-完/10 了解行业薪资,清晰找准定位.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":"70996da21db93d60","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>

View File

@@ -0,0 +1,540 @@
<!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>10 了解行业薪资,清晰找准定位.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="/专栏/12步通关求职面试-完/00 开篇词:了解面试“潜规则”,从海选中脱颖而出.md">00 开篇词:了解面试“潜规则”,从海选中脱颖而出.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/01 设计一份吸引面试官的简历.md">01 设计一份吸引面试官的简历.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/02 读懂职位 JD精准投递简历.md">02 读懂职位 JD精准投递简历.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/03 把握投递简历的黄金时间段.md">03 把握投递简历的黄金时间段.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/04 做好充分的准备去面试.md">04 做好充分的准备去面试.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/05 把握面试时的关键点.md">05 把握面试时的关键点.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/06 捕捉 HR 微表情,做出应对策略.md">06 捕捉 HR 微表情,做出应对策略.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/07 巧妙推销自己的 3 个技巧.md">07 巧妙推销自己的 3 个技巧.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/08 认清自身实力,明确求职方向.md">08 认清自身实力,明确求职方向.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/09 判断公司背景,做出合理选择.md">09 判断公司背景,做出合理选择.md.html</a>
</li>
<li>
<a class="current-tab" href="/专栏/12步通关求职面试-完/10 了解行业薪资,清晰找准定位.md">10 了解行业薪资,清晰找准定位.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/11 目标明确,阐明沟通.md">11 目标明确,阐明沟通.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/12 工作交接流程福利衔接.md">12 工作交接流程福利衔接.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>10 了解行业薪资,清晰找准定位</h1>
<p>你好,我是你的面试课老师杨宇堃,欢迎进入第 10 课时的内容“了解行业薪资,清晰找准定位”。</p>
<h2>清晰找准自己的定位</h2>
<p>相信面试到这里你已经在谈薪资了,此时的你是否会有这样的疑惑:我所期望的薪资是否能给到呢?在这里我建议你一定要对自己有清晰的定位,比如可根据你的工作年限、工作经验以及对市场行情等全方位的了解后,才能拿到合理的薪资,也会让企业认为你物有所值。
那如何才能争取比较合适的薪资呢?很多小伙伴会根据身边的朋友来判断自己的薪资是否合理。但是很多人没有考虑到,大家的学历不同、做过的项目不同、所应聘的公司也不同,那么薪资水平也很可能会有较大的差距,所以一定要明确自己的情况是怎么样的。
<img src="assets/Cgq2xl4B4jOAfB2tAACfCyUUdYo575.png" alt="img" /></p>
<h1>1如果你是应届生</h1>
<p>如果你是一个刚刚毕业的小伙伴,如果从事的是基础的岗位一般薪资基本在 4 ~ 8K但如果选择做程序员假如学校背景还不错的话薪资可在 10 ~ 15 K。
不过不用太在意薪资这一块毕竟找一个有前景的工作会更重要建议对自己有一个短期1~2 年)的职业规划,相信在不久的将来,薪资也会翻倍的。
<img src="assets/CgpOIF4B4lqAHi_aAAB9FC67vxY766.png" alt="img" /></p>
<h1>2如果你有工作经验</h1>
<p>如果你已经是一个在专业领域工作多年的候选人,行业经验也非常丰富,相信丰富的经验可以为你创造比较高的收入,你可以比对行业的知名公司职级的薪资结构去判断自己的薪资情况。
<img src="assets/CgpOIF4B4nOAWv9VAACdcoGNvf0673.png" alt="img" /></p>
<h1>3如果你有项目经验</h1>
<p>当然也可能有小伙伴会问,如果我前一家公司的薪资高于市场行情,换一家公司是否需要继续要求增加薪资,还是考虑降薪?
这个问题我认为可以根据你的项目经验来考虑。如果你的项目经验是行业非常急需而且比较难得的,同时你又做得比较突出,你要求一个合理涨幅,很多公司也是愿意的。但是如果你的工作表现一般,只是一个负责副线项目的人,我认为对你来说很难争取到新的提成,所以不如脚踏实地地去做一个比较稳定的项目,为自己多积累一些相关的经验,也为后面的涨薪做铺垫。
<img src="assets/Cgq2xl4B4o2ARFBsAABx8UEG0Lg857.png" alt="img" /></p>
<h2>一些行业的薪酬报告</h2>
<p>下图是某热门岗位的行业薪酬报告:</p>
<p><img src="assets/Cgq2xl38Q72Aa8c_AADKJgMnu1Y621.png" alt="img" /></p>
<p>图中的一些信息只是一些简单的分析,可以看出 2019 年整个互联网行业的薪资增长并不是很高,相比 2018 年下降了很多。这说明很多公司并没有那么多涨薪的预算,所以在选择公司的时候如果要求过高,很难获得心仪公司的 Offer。
其他岗位的薪资报告,建议你到拉勾招聘网站上搜索多家企业发布的同一职位的薪资范围,通过对比来判断该职位的薪资涨幅,但一般企业为了吸引人才,会将薪资范围提高,所以要酌情考虑。
比如下面是高科技与互联网行业的职位薪资情况:</p>
<p><img src="assets/CgpOIF38Q76AQ45qAAc9XKpFijA434.png" alt="img" /></p>
<p>上面的薪资情况,只是工程师的薪酬范围报告,仅供参考。</p>
</div>
</div>
<div>
<div style="float: left">
<a href="/专栏/12步通关求职面试-完/09 判断公司背景,做出合理选择.md">上一页</a>
</div>
<div style="float: right">
<a href="/专栏/12步通关求职面试-完/11 目标明确,阐明沟通.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":"70996da3fa7e3d60","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>

View File

@@ -0,0 +1,562 @@
<!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>11 目标明确,阐明沟通.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="/专栏/12步通关求职面试-完/00 开篇词:了解面试“潜规则”,从海选中脱颖而出.md">00 开篇词:了解面试“潜规则”,从海选中脱颖而出.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/01 设计一份吸引面试官的简历.md">01 设计一份吸引面试官的简历.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/02 读懂职位 JD精准投递简历.md">02 读懂职位 JD精准投递简历.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/03 把握投递简历的黄金时间段.md">03 把握投递简历的黄金时间段.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/04 做好充分的准备去面试.md">04 做好充分的准备去面试.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/05 把握面试时的关键点.md">05 把握面试时的关键点.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/06 捕捉 HR 微表情,做出应对策略.md">06 捕捉 HR 微表情,做出应对策略.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/07 巧妙推销自己的 3 个技巧.md">07 巧妙推销自己的 3 个技巧.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/08 认清自身实力,明确求职方向.md">08 认清自身实力,明确求职方向.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/09 判断公司背景,做出合理选择.md">09 判断公司背景,做出合理选择.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/10 了解行业薪资,清晰找准定位.md">10 了解行业薪资,清晰找准定位.md.html</a>
</li>
<li>
<a class="current-tab" href="/专栏/12步通关求职面试-完/11 目标明确,阐明沟通.md">11 目标明确,阐明沟通.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/12 工作交接流程福利衔接.md">12 工作交接流程福利衔接.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>11 目标明确,阐明沟通</h1>
<p>你好,我是你的面试课老师杨宇堃,欢迎进入第 11 课时的内容“目标明确,阐明沟通”。
前面的两讲内容和你分享了如何明确自己所希望从事的职位和工作性质,也帮你梳理了如何更好地判断自己的价值产出在哪里。明确目标后,接下来聊聊如何更好地沟通才能拿下心仪的 Offer。
下面我们就说说在谈 Offer 时都需要做哪些准备。</p>
<h1>知道自己想要什么</h1>
<p>在开始谈薪资之前,需要明确自己到底想要什么,希望在这次的工作变动中有什么收获,比如想在团队氛围很和谐的公司里工作、希望积累更多的项目经验、还是仅仅为了涨薪等。
当你明确自己想要的是什么同时清晰的表达出来以后HR 会根据你的需求去匹配这个职位是否可以给到你所期望的东西,或者你也可以直接询问 HR 来判断是否能得到你想要的。
<img src="assets/Cgq2xl4Jk7uAU2QlAAB8BU7HoSQ711.png" alt="img" />
很多小伙伴会说,<strong>如果我确实不知道自己这次换工作想要得到什么,该怎么办</strong>
你可以参考在之前的工作过程中,是不是有让自己感觉不舒服或者有挫败感的时候,同时想想是什么原因造成的,然后把它们整理出来写在纸上,标出来哪些是你希望可以得到改善和需要得到成长的。
<img src="assets/Cgq2xl4Jk-SAEbE0AABxDK6ssrM497.png" alt="img" />
通过这样的方式,再去想想在面试的过程中或者在和面试官沟通的过程中,这家企业是否可以给到你想要的东西。</p>
<h1>明确自己的优势</h1>
<p>明确了自己想要的也要知道你能给企业创造出什么样的价值这样才可以在薪资上做更有利的争取。面试结束后HR 已经对你的表现做了公正的评价,相信这些评价一定都是你对企业有价值的地方。
那怎么评估自己优势的价值呢?
首先要明确,你的优势是软性的优势还是硬性的优势:</p>
<ul>
<li>软性的优势是指性格方面(比如性格好、踏实),相信很多人都具备,所以这个优势的价值可能就没有那么大的竞争力;</li>
<li>硬性的优势是指之前的工作经历给到的优势(比如项目经历、专业经历),这样的优势相比软性优势要更有竞争力。
<img src="assets/CgpOIF4JlAaAZ6SkAACqPoNK3Po341.png" alt="img" />
其次如果你的硬性优势又是比较稀缺的项目经验或者专业经历的话,那就更有竞争力了。</li>
</ul>
<h1>不要敌化与 HR 的关系</h1>
<p>在谈 Offer 的时候,最终肯定会落在谈薪资的问题上,你是不是也会有这样的感觉:<strong>明明招聘网站上写的很高HR 却说给不了这么高?</strong>
因为招聘网站上显示的薪资范围,为了吸引用户会稍微提高一点薪酬水平。但是主要确定你薪资的并不是网站上的薪酬范围,而是你的真实能力。因为 HR 会根据你的真实能力去判断你在什么薪酬档位上,然后给出你合适的薪资。所以并不是 HR 不愿意给你高薪,要判断自己是否具有拿到高薪的能力。
<img src="assets/Cgq2xl4JlCyATQbvAACE3csz3FY795.png" alt="img" />
<strong>如果 HR 问你期望的薪资是多少,该怎么回答呢?</strong>
如果你不清楚企业的薪酬结构,可以考虑给 HR 说一个年薪的的范围。但是建议提出的薪资涨幅不要超过你之前薪资的 20%,当然如果你特别优秀或者岗位是非常紧俏的岗位可以考虑多要一些涨幅,但是也不要太离谱。
<img src="assets/Cgq2xl4JlFCAEERrAADt2PWLBLw708.png" alt="img" />
因此,不管怎么谈薪资,建议你都要明确心态,尽量不要把 HR 当作自己的敌人,因为 HR 也有指标,也希望优秀的候选人可以顺利接受 Offer。
把 HR 当做朋友,先以平和的心态和他确认一下自己的各种疑惑或者不清晰的信息,然后再清晰地表达出期望得到什么,或者也可以让 HR 说一下他们可以给到你的都有什么,然后给彼此一些时间考虑一下(最好不要超过一周,不然会错失这个机会),相信这样的沟通方式大家都比较愉快。
<img src="assets/Cgq2xl4JlHeAPgCFAAB8kD0NvIc318.png" alt="img" /></p>
<h1>坦诚地沟通</h1>
<p>前面经历了多轮的面试和沟通后,最后在沟通 Offer 的时候同样要表现出你的真诚,不要在最后的关键时刻给到 HR 比较滑头的感觉, 不然结果会前功尽弃。
<img src="assets/Cgq2xl4JlJSAMm5AAADJ2Ewq6uA695.png" alt="img" />
相信你学完这一课后可以拿到满意的 Offer同样也可以顺利的入职。</p>
</div>
</div>
<div>
<div style="float: left">
<a href="/专栏/12步通关求职面试-完/10 了解行业薪资,清晰找准定位.md">上一页</a>
</div>
<div style="float: right">
<a href="/专栏/12步通关求职面试-完/12 工作交接流程福利衔接.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":"70996da5def43d60","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>

View File

@@ -0,0 +1,596 @@
<!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>12 工作交接流程福利衔接.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="/专栏/12步通关求职面试-完/00 开篇词:了解面试“潜规则”,从海选中脱颖而出.md">00 开篇词:了解面试“潜规则”,从海选中脱颖而出.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/01 设计一份吸引面试官的简历.md">01 设计一份吸引面试官的简历.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/02 读懂职位 JD精准投递简历.md">02 读懂职位 JD精准投递简历.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/03 把握投递简历的黄金时间段.md">03 把握投递简历的黄金时间段.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/04 做好充分的准备去面试.md">04 做好充分的准备去面试.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/05 把握面试时的关键点.md">05 把握面试时的关键点.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/06 捕捉 HR 微表情,做出应对策略.md">06 捕捉 HR 微表情,做出应对策略.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/07 巧妙推销自己的 3 个技巧.md">07 巧妙推销自己的 3 个技巧.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/08 认清自身实力,明确求职方向.md">08 认清自身实力,明确求职方向.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/09 判断公司背景,做出合理选择.md">09 判断公司背景,做出合理选择.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/10 了解行业薪资,清晰找准定位.md">10 了解行业薪资,清晰找准定位.md.html</a>
</li>
<li>
<a href="/专栏/12步通关求职面试-完/11 目标明确,阐明沟通.md">11 目标明确,阐明沟通.md.html</a>
</li>
<li>
<a class="current-tab" href="/专栏/12步通关求职面试-完/12 工作交接流程福利衔接.md">12 工作交接流程福利衔接.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>12 工作交接流程福利衔接</h1>
<p>你好,我是你的面试课老师杨宇堃,欢迎进入第 12 课时的内容“工作交接流程 &amp; 福利衔接”。</p>
<h2>工作交接流程</h2>
<h1>如何不伤和气的提出辞呈</h1>
<p>终于拿到了自己心仪公司的 Offer 了,可能有很多小伙伴又开始发愁了:如何与领导顺利提出辞呈,又不伤和气呢?这个时候一定要做好最坏的打算,你要明白,心软拖着不说会更伤害自己与前公司的关系,不如直截了当、当机立断。
一般提出离职的方式分为两种:</p>
<ul>
<li>通过邮件的形式提出辞呈;</li>
<li>直接找直属 leader 沟通。
具体采用哪种方式,可根据自己的个性来判断,比如不太擅长沟通、偏内向的可以通过邮件的方式;如果已经想好了怎么和上级沟通,也可以直接找 leader 阐明心意。那在写邮件或直接沟通时需要注意哪些呢?
<img src="assets/Cgq2xl4LDxyAHnjXAABvF56H0Lo329.png" alt="img" />
首先,可以先表达出对公司和领导在工作中的指导和帮助的感激,以及这段时间在公司的工作和成长的开心,同时说明一下做出辞职的决定对自己来说是多么难的一次选择。相信这样的表达可以让领导对你有个不错的印象。
其次,不论你的离职原因是不满意薪资、不适应团队的管理风格还是发展空间到达了上限等,都不要在这里抱怨出来,因为每个公司的 leader 都清楚公司里的问题,与其这样,不如直接告诉 leader辞职的原因是希望可以有更好的发展或者是让自己有更好的学习成长的空间。相信你的决心加上这样的理由leader 一定会领会里面的意思。</li>
</ul>
<blockquote>
<p>如果这时 leader 突然问:找到下家了么?该怎么回答?建议这样委婉地回答:手里有好几个 Offer还没确定好去哪家……
最不建议的离职理由:经常会有小伙伴为了避免双方尴尬,会选择“家人生病需要较长的时间照顾”、“家人要求我回老家工作”等类似这样的理由,如果是真实的当然不会有问题,如果是虚构的,以后万一被发现,则会给前公司留下一个不诚信的印象,以后再相见时会更尴尬。
当然也有小伙伴提出离职是为了通过拿到的 Offer 要求涨薪,这样的“小聪明”玩不好可能就把自己“玩”进去了,不但在拿到 Offer 的公司名声坏了,也不会被现在的公司重用的。
<img src="assets/Cgq2xl4LD0iAYRn0AAD0kkEMt8I063.png" alt="img" />
最后,可以和前司表示一下,自己一定会负责任地把手里的工作交接清楚,站好最后一班岗,这样也可以给前司 leader 留下一个让人踏实的印象。毕竟你的面试背调还在人家手里,总不希望闹得不可开交,拿不到一个好的背调反馈吧。</p>
</blockquote>
<h1>合理安排交接工作</h1>
<p>一般来说,如果你是一位已经转正的全职员工,那么交接的时间为一个月,所以公司也会要求你在这一个月里正常工作,那么,如何清晰地在这一个月里合理安排交接工作呢?</p>
<ul>
<li>先和直属 leader 协商找到一个靠谱的工作交接人;</li>
<li>把自己以往的项目文档整理好,分类发给交接人;</li>
<li>如果你手里还有未结束的项目,可以带着交接人熟悉一下,一起对这个项目做收尾工作;</li>
<li>通知同事或者项目对接人自己已经离职,接下来的项目由被交接人负责;</li>
<li>空出两周的时间,协助交接人熟悉你手里的工作内容,在旁做好支持工作。</li>
</ul>
<blockquote>
<p>如果新的公司期望你能尽快入职的话,多数情况下会担心你拒绝入职,此时建议你诚恳地向新公司解释,并和新公司同步交接工作的进度。
交接文档有以下注意事项,比如:</p>
</blockquote>
<ul>
<li>清晰的文档归类,发现问题可以马上与你沟通;</li>
<li>尽可能将相关的文档都涉及到,让你的交接文档更容易查找;</li>
<li>记得文档转出时抄送给领导,这个很重要,一定要记得;
我相信这样的交接流程不会让自己手忙脚乱,也可以给前司留下不错的印象。
离职最后一天走的时候,记得和同事们一一打招呼,感谢大家以往的照顾和帮助,以后要常保持联系。更重要的一点是,一定要拿到“离职证明”文件或“解除 / 终止劳动合同报告书”。
<img src="assets/Cgq2xl4LD5uAM3zrAAFD5k_4Y5k996.png" alt="img" /></li>
</ul>
<h2>福利衔接</h2>
<p>交接工作都做完了,很多小伙伴会问:我的社保、公积金怎么办?下面来讲讲 3 种常用的福利交接事项。</p>
<h1>社保公积金</h1>
<p>各个公司的社保、公积金都是以每个月的 15 日作为分界点,如果你是在 15 号前入职的新公司,那么就会帮你交当月的社保和公积金,如果你是在 15 号后从前公司离职,社保、公积金会由前公司承担。当然也会有特殊情况,要看人才局的具体安排。
如果你正好是 15 号前离职中间休息了一段时间15 号后入职新公司的,可能需要你自己找第三方保险代缴公司自行缴纳社保公积金了。
<img src="assets/CgpOIF4LD-eAejH1AAA6HW63fqI704.png" alt="img" /></p>
<h1>年假</h1>
<p>通常,公司会按照你出勤的月份帮你做年假的换算,然后与你协商安排延后几天离职,或结算成工资,或者按照公司的规定有其他操作。
<img src="assets/CgpOIF4LEAeAUaREAADgbNfNOlQ977.png" alt="img" /></p>
<h1>工作居住证</h1>
<p>如果在前司有工作居住证的话,需要问问新公司是否可以接收,如果可以当然就直接转出,如果不可以,需要问问是否有第三方机构接收。
<img src="assets/Cgq2xl4LEBiAWImJAABUzmjNvO8248.png" alt="img" />
OK这门课到这里就结束啦希望这门课可以帮助你找到心仪的工作。感谢你的收听~</p>
</div>
</div>
<div>
<div style="float: left">
<a href="/专栏/12步通关求职面试-完/11 目标明确,阐明沟通.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":"70996da7bbd83d60","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>

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 150 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 463 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

View File

@@ -0,0 +1,712 @@
<!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>00 开篇词 Go 为开发者的需求设计,带你实现高效工作.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 class="current-tab" href="/专栏/22 讲通关 Go 语言-完/00 开篇词 Go 为开发者的需求设计,带你实现高效工作.md">00 开篇词 Go 为开发者的需求设计,带你实现高效工作.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/01 基础入门:编写你的第一个 Go 语言程序.md">01 基础入门:编写你的第一个 Go 语言程序.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/02 数据类型:你必须掌握的数据类型有哪些?.md">02 数据类型:你必须掌握的数据类型有哪些?.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/03 控制结构if、for、switch 逻辑语句的那些事儿.md">03 控制结构if、for、switch 逻辑语句的那些事儿.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/04 集合类型:如何正确使用 array、slice 和 map.md">04 集合类型:如何正确使用 array、slice 和 map.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/05 函数和方法Go 语言中的函数和方法到底有什么不同?.md">05 函数和方法Go 语言中的函数和方法到底有什么不同?.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/06 struct 和 interface结构体与接口都实现了哪些功能.md">06 struct 和 interface结构体与接口都实现了哪些功能.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/07 错误处理:如何通过 error、deferred、panic 等处理错误?.md">07 错误处理:如何通过 error、deferred、panic 等处理错误?.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/08 并发基础Goroutines 和 Channels 的声明与使用.md">08 并发基础Goroutines 和 Channels 的声明与使用.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/09 同步原语sync 包让你对并发控制得心应手.md">09 同步原语sync 包让你对并发控制得心应手.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/10 Context你必须掌握的多线程并发控制神器.md">10 Context你必须掌握的多线程并发控制神器.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/11 并发模式Go 语言中即学即用的高效并发模式.md">11 并发模式Go 语言中即学即用的高效并发模式.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/12 指针详解:在什么情况下应该使用指针?.md">12 指针详解:在什么情况下应该使用指针?.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/13 参数传递:值、引用及指针之间的区别?.md">13 参数传递:值、引用及指针之间的区别?.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/14 内存分配new 还是 make什么情况下该用谁.md">14 内存分配new 还是 make什么情况下该用谁.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/15 运行时反射:字符串和结构体之间如何转换?.md">15 运行时反射:字符串和结构体之间如何转换?.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/16 非类型安全:让你既爱又恨的 unsafe.md">16 非类型安全:让你既爱又恨的 unsafe.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/17 SliceHeaderslice 如何高效处理数据?.md">17 SliceHeaderslice 如何高效处理数据?.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/18 质量保证Go 语言如何通过测试保证质量?.md">18 质量保证Go 语言如何通过测试保证质量?.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/19 性能优化Go 语言如何进行代码检查和优化?.md">19 性能优化Go 语言如何进行代码检查和优化?.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/20 协作开发:模块化管理为什么能够提升研发效能?.md">20 协作开发:模块化管理为什么能够提升研发效能?.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/21 网络编程Go 语言如何玩转 RESTful API 服务?.md">21 网络编程Go 语言如何玩转 RESTful API 服务?.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/22 网络编程Go 语言如何通过 RPC 实现跨平台服务?.md">22 网络编程Go 语言如何通过 RPC 实现跨平台服务?.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/23 结束语 你的 Go 语言成长之路.md">23 结束语 你的 Go 语言成长之路.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>00 开篇词 Go 为开发者的需求设计,带你实现高效工作</h1>
<p>你好,我是<strong>飞雪无情</strong>,在技术领域从业近 10 年,目前在一家互联网公司担任技术总监,负责技术管理和架构设计。</p>
<p>2014 年,我因为 Docker 接触了 Go 语言,其简洁的语法、高效的开发效率和语言层面上的并发支持深深地吸引了我。经过不断地学习和实践,我对 Go 语言有了更深入的了解,不久后,便带领团队转型 Go 语言开发,提升了团队开发效率和系统性能,降低了用人成本。</p>
<p>在带领团队转型 Go 语言的过程中,我不断把自己学习 Go 语言的经验沉淀成文章,方便大家利用碎片时间学习,于是“飞雪无情”的公众号和知乎号就诞生了。现在,我已经发布了 200 多篇相关内容,在帮助数万名朋友有效学习 Go 的同时,还有幸拿到了知乎 Go 语言专题的最高赞。</p>
<h3>Go 语言为开发者的需求而设计</h3>
<p>K8s、Docker、etcd 这类耳熟能详的工具,就是用 Go 语言开发的,而且很多大公司(如腾讯、字节跳动等)都在把原来 C/C++、Python、PHP 的技术栈迁往 Go 语言。</p>
<p>在我看来Go 作为一门高效率的工业化语言备受推崇,这与其语言本身的优势有直接的关系:</p>
<ul>
<li>语法简洁,相比其他语言更容易上手,开发效率更高;</li>
<li>自带垃圾回收GC不用再手动申请释放内存能够有效避免 Bug提高性能</li>
<li>语言层面的并发支持,让你很容易开发出高性能的程序;</li>
<li>提供的标准库强大,第三方库也足够丰富,可以拿来即用,提高开发效率;</li>
<li>可通过静态编译直接生成一个可执行文件,运行时不依赖其他库,部署方便,可伸缩能力强;</li>
<li>提供跨平台支持,很容易编译出跨各个系统平台直接运行的程序。</li>
</ul>
<p>对比其他语言Go 的优势也显著。比如 Java 虽然具备垃圾回收功能,但它是解释型语言,需要安装 JVM 虚拟机才能运行C 语言虽然不用解释,可以直接编译运行,但是它不具备垃圾回收功能,需要开发者自己管理内存的申请和释放,容易出问题。而 Go 语言具备了两者的优势。</p>
<p>如今微服务和云原生已经成为一种趋势,而 Go 作为一款高性能的编译型语言,最适合承载落地微服务的实现 ,又容易生成跨平台的可执行文件,相比其他编程语言更容易部署在 Docker 容器中,实现灵活的自动伸缩服务。</p>
<p>总体来看,<strong>Go 语言的整体设计理念就是以软件工程为目的的,也就是说它不是为了编程语言本身多么强大而设计,而是为了开发者更好地研发、管理软件工程,一切都是为了开发者着想。</strong></p>
<p>如果你是有 1~3 年经验的其他语言开发者(如 Python、PHP、C/C++Go 的学习会比较容易因为编程语言的很多概念相通。而如果你是有基本计算机知识但无开发经验的小白Go 也适合尽早学习,吃透它有助于加深你对编程语言的理解,也更有职业竞争力。</p>
<p>而在我与 Go 语言学习者进行交流,以及面试的过程中,也<strong>发现了一些典型问题,可概括为如下三点</strong></p>
<p>第一,学习者所学知识过于零碎,缺乏系统性,并且不是太深入,导致写不出高效的程序,也难以在面试中胜出。比如,我<strong>面试</strong>时常问字符串拼接的效率问题,这个问题会牵涉到 + 加号运算符、buffer 拼接、build 拼接、并发安全等知识点,但应聘者通常只能答出最浅显的内容,缺乏对语言逻辑的深层思考。</p>
<p>第二,很多入门者已有其他语言基础,很难转换语言思维模式,而且 Go 的设计者还做了很多相比其他语言的改进和创新。作为从 Java 转到 Go 语言的过来人我非常理解这种情况比如对于错误的处理Java 语言使用 Exception而 Go 语言则通过函数返回 error这会让人很不习惯。</p>
<p>第三,没有开源的、适合练手的项目。</p>
<p>在过去分享 Go 语言知识的过程中,我融入了应对上述问题的方法并得到好评,比如有用户称“你的文章给我拨云见日的感觉!”“通过你的文章终于懂 context 的用法了!”……这些正向评价更坚定了我分享内容的信心。</p>
<p>于是在经过不断地思考、整理后,我希望设计更有系统性、也更通俗易懂的一门专栏。我的目标是通过这门课程帮助你少走弯路,比其他人更快一步提升职场竞争力。</p>
<h3>这门课的亮点和设计思路</h3>
<ul>
<li><strong>系统性设计</strong>:从基础知识、底层原理到实战,让你不仅可以学会使用,还能从语言自身的逻辑、框架层面分析问题,并做到能上手项目。这样当出现问题时,你可以不再盲目地搜索知识点。</li>
<li><strong>案例实操</strong>:我设计了很多便于运用知识点的代码示例,还特意站在学习者的视角,演示了一些容易出 Bug 的场景,帮你避雷。我还引入了很多生活化的场景,比如用枪响后才能赛跑的例子演示 sync.Cond 的使用,帮你加深印象,缓解语言学习的枯燥感。</li>
<li><strong>贴近实际</strong>:我所策划的内容来源于众多学习者的反馈,在不断地交流中,我总结了他们问题的共性和不同,并有针对性地融入专栏。</li>
</ul>
<p><strong>那我是怎么划分这门课的呢?</strong></p>
<p>作为初学者,不管你是否有编程经验,都需要先学习 Go 语言的基本语法,然后我会在此基础上再向你介绍 Go 语言的核心特性——并发,这也是 Go 最自豪的功能。其基于协程的并发,比我们平时使用的线程并发更轻量,可以随意地在一台普通的电脑上启动成百上千个协程,成本非常低。</p>
<p>掌握了基本知识后,我们来通过底层分析深入理解原理。我会结合源码,并对比其他语言的同类知识,带你理解 Go 的设计思路和底层语言逻辑。</p>
<p>此时你可能还有一些疑惑,比如不知道如何把知识与实际工作结合起来,所以就需要 Go 语言工程质量管理方面的知识了。而最后,我会用两个实战帮你快速上手项目,巩固知识。</p>
<p>所以,我根据这个思路将这门课划分成 5 个模块:</p>
<ul>
<li><strong>模块一Go 语言快速入门</strong>:我挑选了变量、常量等数据类型、函数和方法、结构体和接口等知识点介绍,这部分内容相对简洁,但已经足够你掌握 Go 的基本程序结构。</li>
<li><strong>模块二Go 语言高效并发</strong>:主要介绍 goroutine、channel、同步原语等知识让你对 Go 语言层面的并发支持有更深入的理解,并且可以编写自己的 Go 并发程序设计。最后还会有一节课专门介绍常用的并发模式,可以拿来即用,更好地控制并发。</li>
<li><strong>模块三Go 语言深入理解</strong>Go 语言底层原理的讲解和高级功能的介绍,比如 slice 的底层是怎样的,为什么这么高效等。这个模块也是我特意设计的,我在初学编程时,也有只学习如何使用,而不想研究底层原理的情况,导致工作遇到障碍后又不得不回头恶补,后来发现这是初学者的通病。但理解了底层原理后,你才能灵活编写程序、高效应对问题。</li>
<li><strong>模块四Go 语言工程管理</strong>:学习一门语言,不光要掌握它本身的知识,还要会模块管理、性能优化等周边技能,因为这些技能可以帮助你更好地进行多人协作,提高开发效率,写出更高质量的代码。你可以在这个模块学到如何测试 Go 语言以提高代码质量、如何做好性能优化、如何使用第三方库提高自己项目的开发效率等。</li>
<li><strong>模块五Go 语言实战</strong>Go 语言更适合的场景就是网络服务和并发,通过开发 HTTP 服务和 RPC 服务这两个实战,可以把前四个模块的知识运用起来,快速上手。</li>
</ul>
<h3>作者寄语</h3>
<p>我一直不厌其烦地跟团队小伙伴说Go 语言是一门现代编程语言,相比其他编程语言,它对我们开发者有更好的用户体验,因为它的目的就是让我们更专注于自己业务的实现,提高开发效率。与此同时,当下的云原生是一种趋势, Go 语言非常适合部署在这种环境中,越早学习越有竞争力。</p>
<p>此外,我在上文中也反复强调了学习底层原理的重要性。编程语言有很多共通之处(比如概念、关键字、特性语法等),吃透后再学习其他的编程语言会简单得多,原因在于你理解了语言本身。所以在学习 Go 语言的过程中,我希望你多想、多练,深入理解,融会贯通。</p>
<p>现在,跟我一起踏上 Go 语言学习之旅吧Let's Go</p>
</div>
</div>
<div>
<div style="float: right">
<a href="/专栏/22 讲通关 Go 语言-完/01 基础入门:编写你的第一个 Go 语言程序.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":"70996da998793d60","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>

View File

@@ -0,0 +1,876 @@
<!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>01 基础入门:编写你的第一个 Go 语言程序.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="/专栏/22 讲通关 Go 语言-完/00 开篇词 Go 为开发者的需求设计,带你实现高效工作.md">00 开篇词 Go 为开发者的需求设计,带你实现高效工作.md.html</a>
</li>
<li>
<a class="current-tab" href="/专栏/22 讲通关 Go 语言-完/01 基础入门:编写你的第一个 Go 语言程序.md">01 基础入门:编写你的第一个 Go 语言程序.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/02 数据类型:你必须掌握的数据类型有哪些?.md">02 数据类型:你必须掌握的数据类型有哪些?.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/03 控制结构if、for、switch 逻辑语句的那些事儿.md">03 控制结构if、for、switch 逻辑语句的那些事儿.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/04 集合类型:如何正确使用 array、slice 和 map.md">04 集合类型:如何正确使用 array、slice 和 map.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/05 函数和方法Go 语言中的函数和方法到底有什么不同?.md">05 函数和方法Go 语言中的函数和方法到底有什么不同?.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/06 struct 和 interface结构体与接口都实现了哪些功能.md">06 struct 和 interface结构体与接口都实现了哪些功能.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/07 错误处理:如何通过 error、deferred、panic 等处理错误?.md">07 错误处理:如何通过 error、deferred、panic 等处理错误?.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/08 并发基础Goroutines 和 Channels 的声明与使用.md">08 并发基础Goroutines 和 Channels 的声明与使用.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/09 同步原语sync 包让你对并发控制得心应手.md">09 同步原语sync 包让你对并发控制得心应手.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/10 Context你必须掌握的多线程并发控制神器.md">10 Context你必须掌握的多线程并发控制神器.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/11 并发模式Go 语言中即学即用的高效并发模式.md">11 并发模式Go 语言中即学即用的高效并发模式.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/12 指针详解:在什么情况下应该使用指针?.md">12 指针详解:在什么情况下应该使用指针?.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/13 参数传递:值、引用及指针之间的区别?.md">13 参数传递:值、引用及指针之间的区别?.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/14 内存分配new 还是 make什么情况下该用谁.md">14 内存分配new 还是 make什么情况下该用谁.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/15 运行时反射:字符串和结构体之间如何转换?.md">15 运行时反射:字符串和结构体之间如何转换?.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/16 非类型安全:让你既爱又恨的 unsafe.md">16 非类型安全:让你既爱又恨的 unsafe.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/17 SliceHeaderslice 如何高效处理数据?.md">17 SliceHeaderslice 如何高效处理数据?.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/18 质量保证Go 语言如何通过测试保证质量?.md">18 质量保证Go 语言如何通过测试保证质量?.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/19 性能优化Go 语言如何进行代码检查和优化?.md">19 性能优化Go 语言如何进行代码检查和优化?.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/20 协作开发:模块化管理为什么能够提升研发效能?.md">20 协作开发:模块化管理为什么能够提升研发效能?.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/21 网络编程Go 语言如何玩转 RESTful API 服务?.md">21 网络编程Go 语言如何玩转 RESTful API 服务?.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/22 网络编程Go 语言如何通过 RPC 实现跨平台服务?.md">22 网络编程Go 语言如何通过 RPC 实现跨平台服务?.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/23 结束语 你的 Go 语言成长之路.md">23 结束语 你的 Go 语言成长之路.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>01 基础入门:编写你的第一个 Go 语言程序</h1>
<p>从这节课开始,我会带你走进 Go 语言的世界。我会用通俗易懂的语言,介绍 Go 语言的各个知识点,让你可以从零开始逐步学习,再深入它的世界。不管你以前是否接触过 Go 语言,都可以从这个专栏中受益。</p>
<p>现在让我以一个经典的例子“Hello World”来带你入门 Go 语言,了解它是如何运行起来的。</p>
<h3>Hello, 世界</h3>
<p>如果你学过 C 语言,对这个经典的例子应该不会陌生。通过它,我先带你大概了解一下 Go 语言的一些核心理念,让你对 Go 语言代码有个整体的印象。如下所示:</p>
<p><em><strong>ch01/main.go</strong></em></p>
<pre><code>package main
import &quot;fmt&quot;
func main() {
fmt.Println(&quot;Hello, 世界&quot;)
}
</code></pre>
<p>这五行代码就构成了一个完整的 Go 程序,是不是非常简单?现在我运行这段代码,看看输出的结果,方法是打开终端输入以下命令,然后回车。</p>
<pre><code>$ go run ch01/main.go
Hello, 世界
</code></pre>
<p>其中 go run ch01/main.go 是我输入的命令回车后看到的“Hello, 世界”是 Go 程序输出的结果。</p>
<p>代码中的 go 是一个 Go 语言开发工具包提供的命令,它和你平时常用的 ls 命令一样都是可执行的命令。它可以帮助你运行 Go 语言代码,并进行编译,生成可执行的二进制文件等。</p>
<p>run 在这里是 go 命令的子命令,表示要运行 Go 语言代码的意思。最后的 ch01/main.go 就是我写的 Go 语言代码文件了。也就是说,整个 go run ch01/main.go 表示要运行 ch01/main.go 里的 Go 语言代码。</p>
<h3>程序结构分析</h3>
<p>要让一个 Go 语言程序成功运行起来,只需要 package main 和 main 函数这两个核心部分, package main 代表的是一个可运行的应用程序,而 main 函数则是这个应用程序的主入口。</p>
<p>在“Hello, 世界”这个简单的示例中,包含了一个 Go 语言程序运行的最基本的核心结构。我们以此为例,来逐一介绍程序的结构,了解 Go 语言的核心概念。</p>
<ul>
<li><strong>第一行的 package main</strong> 代表当前的 ch01/main.go 文件属于哪个包,其中 package 是 Go 语言声明包的关键字main 是要声明的包名。在 Go 语言中 main 包是一个特殊的包,代表你的 Go 语言项目是一个可运行的应用程序,而不是一个被其他项目引用的库。</li>
<li><strong>第二行的 import &quot;fmt&quot;</strong> 是导入一个 fmt 包,其中 import 是 Go 语言的关键字,表示导入包的意思,这里我导入的是 fmt 包,导入的目的是要使用它,下面会继续讲到。</li>
<li><strong>第三行的 func main()</strong> 是定义了一个函数,其中 func 是 Go 语言的关键字表示要定义一个函数或者方法的意思main 是函数名,() 空括号表示这个 main 函数不接受任何参数。在 Go 语言中 main 函数是一个特殊的函数,它代表整个程序的入口,也就是程序在运行的时候,会先调用 main 函数,然后通过 main 函数再调用其他函数,达到实现项目业务需求的目的。</li>
<li><strong>第四行的 fmt.Println(&quot;Hello, 世界&quot;)</strong> 是通过 fmt 包的 Println 函数打印“Hello, 世界”这段文本。其中 fmt 是刚刚导入的包要想使用一个包必须先导入。Println 函数是属于包 fmt 的函数这里我需要它打印输出一段文本也就是“Hello, 世界”。</li>
<li><strong>第五行的大括号 }</strong> 表示 main 函数体的结束。现在整个代码片段已经分析完了运行就可以看到“Hello, 世界”结果的输出。</li>
</ul>
<p>从以上分析来看,<strong>Go 语言的代码是非常简洁、完整的核心程序,只需要 package、import、func main 这些核心概念就可以实现。</strong> 在后面的课时中,我还会讲如何使用变量,如何自定义函数等,这里先略过不讲,我们先来看看 Go 语言的开发环境是如何搭建的,这样才能运行上面的 Go 语言代码,让整个程序跑起来。</p>
<h3>Go 语言环境搭建</h3>
<p>要想搭建 Go 语言开发环境,需要先下载 Go 语言开发包。你可以从官网 <a href="https://golang.org/dl/">https://golang.org/dl/</a><a href="https://golang.google.cn/dl/">https://golang.google.cn/dl/</a> 下载(第一个链接是国外的官网,第二个是国内的官网,如果第一个访问不了,可以从第二个下载)。</p>
<p>下载时可以根据自己的操作系统选择相应的开发包,比如 Window、MacOS 或是 Linux 等,如下图所示:</p>
<p><img src="assets/CgqCHl-ikW2AdldmAABgiiXVyCo654.png" alt="go_sdk_download.png" /></p>
<h4>Windows MSI 下安装</h4>
<p>MSI 安装的方式比较简单,在 Windows 系统上推荐使用这种方式。现在的操作系统基本上都是 64 位的,所以选择 64 位的 go1.15.windows-amd64.msi 下载即可,如果操作系统是 32 位的,选择 go1.15.windows-386.msi 进行下载。</p>
<p>下载后双击该 MSI 安装文件按照提示一步步地安装即可。在默认情况下Go 语言开发工具包会被安装到 c:\Go 目录,你也可以在安装过程中选择自己想要安装的目录。</p>
<p>假设安装到 c:\Go 目录,安装程序会自动把 c:\Go\bin 添加到你的 PATH 环境变量中,如果没有的话,你可以通过系统 -&gt; 控制面板 -&gt; 高级 -&gt; 环境变量选项来手动添加。</p>
<h4>Linux 下安装</h4>
<p>Linux 系统同样有 32 位和 64 位,你可以根据你的 Linux 操作系统选择相应的压缩包,它们分别是 go1.15.linux-386.tar.gz 和 go1.15.linux-amd64.tar.gz。</p>
<p>下载成功后,需要先进行解压,假设你下载的是 go1.15.linux-amd64.tar.gz在终端通过如下命令即可解压</p>
<pre><code>sudo tar -C /usr/local -xzf go1.15.linux-amd64.tar.gz
</code></pre>
<p>输入后回车,然后输入你的电脑密码,即可解压到 /usr/local 目录,然后把 /usr/local/go/bin 添加到 PATH 环境变量中,就可以使用 Go 语言开发工具包了。</p>
<p>把下面这段添加到 /etc/profile 或者 $HOME/.profile 文件中,保存后退出即可成功添加环境变量。</p>
<pre><code>export PATH=$PATH:/usr/local/go/bin
</code></pre>
<h4>macOS 下安装</h4>
<p>如果你的操作系统是 macOS可以采用 PKG 安装包。下载 go1.15.darwin-amd64.pkg 后,双击按照提示安装即可。安装成功后,路径 /usr/local/go/bin 应该已经被添加到了 PATH 环境变量中,如果没有的话,你可以手动添加,和上面 Linux 的方式一样,把如下内容添加到 /etc/profile 或者 $HOME/.profile 文件保存即可。</p>
<pre><code>export PATH=$PATH:/usr/local/go/bin
</code></pre>
<h4>安装测试</h4>
<p>以上都安装成功后,你可以打开终端或者命令提示符,输入 go version 来验证 Go 语言开发工具包是否安装成功。如果成功的话,会打印出 Go 语言的版本和系统信息,如下所示:</p>
<pre><code>$ go version
go version go1.15 darwin/amd64
</code></pre>
<h3>环境变量设置</h3>
<p>Go 语言开发工具包安装好之后,它的开发环境还没有完全搭建完成,因为还有两个重要的环境变量没有设置,它们分别是 GOPATH 和 GOBIN。</p>
<ul>
<li><strong>GOPATH</strong>:代表 Go 语言项目的工作目录,在 Go Module 模式之前非常重要,现在基本上用来存放使用 go get 命令获取的项目。</li>
<li><strong>GOBIN</strong>:代表 Go 编译生成的程序的安装目录,比如通过 go install 命令,会把生成的 Go 程序安装到 GOBIN 目录下,以供你在终端使用。</li>
</ul>
<p>假设工作目录为 /Users/flysnow/go你需要把 GOPATH 环境变量设置为 /Users/flysnow/go把 GOBIN 环境变量设置为 $GOPATH/bin。</p>
<p>在 Linux 和 macOS 下,把以下内容添加到 /etc/profile 或者 $HOME/.profile 文件保存即可。</p>
<pre><code>export GOPATH=/Users/flysnow/go
export GOBIN=$GOPATH/bin
</code></pre>
<p>在 Windows 操作系统中,则通过控制面板 -&gt; 高级 -&gt; 环境变量选项添加这两个环境变量即可。</p>
<h3>项目结构</h3>
<p>采用 Go Module 的方式,可以在任何位置创建你的 Go 语言项目。在整个专栏中,我都会使用这种方式演示 Go 语言示例,现在你先对 Go Module 项目结构有一个大概了解,后面的课时我会详细地介绍 Go Module。</p>
<p>假设你的项目位置是 /Users/flysnow/git/gotour打开终端输入如下命令切换到该目录下</p>
<pre><code>$ cd /Users/flysnow/git/gotour
</code></pre>
<p>然后再执行如下命令创建一个 Go Module 项目:</p>
<pre><code>$ go mod init
</code></pre>
<p>执行成功后,会生成一个 go.mod 文件。然后在当前目录下创建一个 main.go 文件,这样整个项目目录结构是:</p>
<pre><code>gotour
├── go.mod
├── lib
└── main.go
</code></pre>
<p>其中 main.go 是整个项目的入口文件,里面有 main 函数。lib 目录是项目的子模块,根据项目需求可以新建很多个目录作为子模块,也可以继续嵌套为子模块的子模块。</p>
<h3>编译发布</h3>
<p>完成了你的项目后,可以编译生成可执行文件,也可以把它发布到 $GOBIN 目录以供在终端使用。以“Hello 世界”为例,在项目根目录输入以下命令,即可编译一个可执行文件。</p>
<pre><code>$ go build ./ch01/main.go
</code></pre>
<p>回车执行后会在当前目录生成 main 可执行文件,现在,我们来测试下它是否可用。</p>
<pre><code>$ ./main
Hello, 世界
</code></pre>
<p>如果成功打印出“Hello, 世界”,证明程序成功生成。</p>
<p>以上生成的可执行文件在当前目录,也可以把它安装到 $GOBIN 目录或者任意位置,如下所示:</p>
<pre><code>$ go install ./ch01/main.go
</code></pre>
<p>使用 go install 命令即可,现在你在任意时刻打开终端,输入 main 回车都会打印出“Hello, 世界”,是不是很方便!</p>
<h3>跨平台编译</h3>
<p>Go 语言开发工具包的另一强大功能就是可以跨平台编译。什么是跨平台编译呢?就是你在 macOS 开发,可以编译 Linux、Window 等平台上的可执行程序,这样你开发的程序,就可以在这些平台上运行。也就是说,你可以选择喜欢的操作系统做开发,并跨平台编译成需要发布平台的可执行程序即可。</p>
<p>Go 语言通过两个环境变量来控制跨平台编译,它们分别是 GOOS 和 GOARCH 。</p>
<ul>
<li><strong>GOOS</strong>:代表要编译的目标操作系统,常见的有 Linux、Windows、Darwin 等。</li>
<li><strong>GOARCH</strong>:代表要编译的目标处理器架构,常见的有 386、AMD64、ARM64 等。</li>
</ul>
<p>这样通过组合不同的 GOOS 和 GOARCH就可以编译出不同的可执行程序。比如我现在的操作系统是 macOS AMD64 的,我想编译出 Linux AMD64 的可执行程序,只需要执行 go build 命令即可,如以下代码所示:</p>
<pre><code>$ GOOS=linux GOARCH=amd64 go build ./ch01/main.go
</code></pre>
<p>关于 GOOS 和 GOARCH 更多的组合,参考<a href="https://golang.org/doc/install/source#environment">官方文档</a>的 $GOOS and $GOARCH 这一节即可。</p>
<h3>Go 编辑器推荐</h3>
<p>好的编辑器可以提高开发的效率,这里我推荐两款目前最流行的编辑器。</p>
<p>第一款是 Visual Studio Code + Go 扩展插件,可以让你非常高效地开发,通过官方网站 <a href="https://code.visualstudio.com/">https://code.visualstudio.com/</a> 下载使用。</p>
<p>第二款是老牌 IDE 公司 JetBrains 推出的 Goland所有插件已经全部集成更容易上手并且功能强大新手老手都适合你可以通过官方网站 <a href="https://www.jetbrains.com/go/">https://www.jetbrains.com/go/</a> 下载使用。</p>
<h3>总结</h3>
<p>这节课中你学到了如何写第一个 Go 语言程序,并且搭建好了 Go 语言开发环境,创建好了 Go 语言项目,同时也下载好了 IDE 严阵以待,那么现在我就给你留个<strong>小作业</strong></p>
<blockquote>
<p>改编示例“Hello 世界”的代码,打印出自己的名字。</p>
</blockquote>
</div>
</div>
<div>
<div style="float: left">
<a href="/专栏/22 讲通关 Go 语言-完/00 开篇词 Go 为开发者的需求设计,带你实现高效工作.md">上一页</a>
</div>
<div style="float: right">
<a href="/专栏/22 讲通关 Go 语言-完/02 数据类型:你必须掌握的数据类型有哪些?.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":"70996dab8d4a3d60","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>

View File

@@ -0,0 +1,920 @@
<!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>12 指针详解:在什么情况下应该使用指针?.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="/专栏/22 讲通关 Go 语言-完/00 开篇词 Go 为开发者的需求设计,带你实现高效工作.md">00 开篇词 Go 为开发者的需求设计,带你实现高效工作.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/01 基础入门:编写你的第一个 Go 语言程序.md">01 基础入门:编写你的第一个 Go 语言程序.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/02 数据类型:你必须掌握的数据类型有哪些?.md">02 数据类型:你必须掌握的数据类型有哪些?.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/03 控制结构if、for、switch 逻辑语句的那些事儿.md">03 控制结构if、for、switch 逻辑语句的那些事儿.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/04 集合类型:如何正确使用 array、slice 和 map.md">04 集合类型:如何正确使用 array、slice 和 map.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/05 函数和方法Go 语言中的函数和方法到底有什么不同?.md">05 函数和方法Go 语言中的函数和方法到底有什么不同?.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/06 struct 和 interface结构体与接口都实现了哪些功能.md">06 struct 和 interface结构体与接口都实现了哪些功能.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/07 错误处理:如何通过 error、deferred、panic 等处理错误?.md">07 错误处理:如何通过 error、deferred、panic 等处理错误?.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/08 并发基础Goroutines 和 Channels 的声明与使用.md">08 并发基础Goroutines 和 Channels 的声明与使用.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/09 同步原语sync 包让你对并发控制得心应手.md">09 同步原语sync 包让你对并发控制得心应手.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/10 Context你必须掌握的多线程并发控制神器.md">10 Context你必须掌握的多线程并发控制神器.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/11 并发模式Go 语言中即学即用的高效并发模式.md">11 并发模式Go 语言中即学即用的高效并发模式.md.html</a>
</li>
<li>
<a class="current-tab" href="/专栏/22 讲通关 Go 语言-完/12 指针详解:在什么情况下应该使用指针?.md">12 指针详解:在什么情况下应该使用指针?.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/13 参数传递:值、引用及指针之间的区别?.md">13 参数传递:值、引用及指针之间的区别?.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/14 内存分配new 还是 make什么情况下该用谁.md">14 内存分配new 还是 make什么情况下该用谁.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/15 运行时反射:字符串和结构体之间如何转换?.md">15 运行时反射:字符串和结构体之间如何转换?.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/16 非类型安全:让你既爱又恨的 unsafe.md">16 非类型安全:让你既爱又恨的 unsafe.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/17 SliceHeaderslice 如何高效处理数据?.md">17 SliceHeaderslice 如何高效处理数据?.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/18 质量保证Go 语言如何通过测试保证质量?.md">18 质量保证Go 语言如何通过测试保证质量?.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/19 性能优化Go 语言如何进行代码检查和优化?.md">19 性能优化Go 语言如何进行代码检查和优化?.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/20 协作开发:模块化管理为什么能够提升研发效能?.md">20 协作开发:模块化管理为什么能够提升研发效能?.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/21 网络编程Go 语言如何玩转 RESTful API 服务?.md">21 网络编程Go 语言如何玩转 RESTful API 服务?.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/22 网络编程Go 语言如何通过 RPC 实现跨平台服务?.md">22 网络编程Go 语言如何通过 RPC 实现跨平台服务?.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/23 结束语 你的 Go 语言成长之路.md">23 结束语 你的 Go 语言成长之路.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>12 指针详解:在什么情况下应该使用指针?</h1>
<p>这节课起我将带你学习本专栏的第三模块:深入理解 Go 语言。这部分主要会为你讲解 Go 语言的高级特性,以及 Go 语言一些特性功能的底层原理。通过这部分的学习,你不光可以更好地使用 Go 语言,还会更深入地理解 Go 语言,比如理解你所使用的 slice 底层是如何实现的等。</p>
<h3>什么是指针</h3>
<p>我们都知道程序运行时的数据是存放在内存中的,而内存会被抽象为一系列具有连续编号的存储空间,那么每一个存储在内存中的数据都会有一个编号,这个编号就是内存地址。有了这个内存地址就可以找到这个内存中存储的数据,而内存地址可以被赋值给一个指针。</p>
<blockquote>
<p>小提示:内存地址通常为 16 进制的数字表示,比如 0x45b876。</p>
</blockquote>
<p>可以总结为:在编程语言中,指针是一种数据类型,用来存储一个内存地址,该地址<strong>指向</strong>存储在该内存中的对象。这个对象可以是字符串、整数、函数或者你自定义的结构体。</p>
<blockquote>
<p>小技巧:你也可以简单地把指针理解为内存地址。</p>
</blockquote>
<p>举个通俗的例子,每本书中都有目录,目录上会有相应章节的页码,你可以把页码理解为一系列的内存地址,通过页码你可以快速地定位到具体的章节(也就是说,通过内存地址可以快速地找到存储的数据)。</p>
<h3>指针的声明和定义</h3>
<p>在 Go 语言中,获取一个变量的指针非常容易,使用取地址符 &amp; 就可以,比如下面的例子:</p>
<p><em><strong>ch12/main.go</strong></em></p>
<pre><code>func main() {
name:=&quot;飞雪无情&quot;
nameP:=&amp;name//取地址
fmt.Println(&quot;name变量的值为:&quot;,name)
fmt.Println(&quot;name变量的内存地址为:&quot;,nameP)
}
</code></pre>
<p>我在示例中定义了一个 string 类型的变量 name它的值为&quot;飞雪无情&quot;,然后通过取地址符 &amp; 获取变量 name 的内存地址,并赋值给指针变量 nameP该指针变量的类型为 *string。运行以上示例你可以看到如下打印结果</p>
<pre><code>name变量的值为: 飞雪无情
name变量的内存地址为: 0xc000010200
</code></pre>
<p>这一串 0xc000010200 就是内存地址,这个内存地址可以赋值给指针变量 nameP。</p>
<blockquote>
<p>指针类型非常廉价,只占用 4 个或者 8 个字节的内存大小。</p>
</blockquote>
<p>以上示例中 nameP 指针的类型是 *string用于指向 string 类型的数据。在 Go 语言中使用类型名称前加 * 的方式,即可表示一个对应的指针类型。比如 int 类型的指针类型是 *intfloat64 类型的指针类型是 *float64自定义结构体 A 的指针类型是 *A。总之指针类型就是在对应的类型前加 * 号。</p>
<p>下面我通过一个图让你更好地理解普通类型变量、指针类型变量、内存地址、内存等之间的关系。</p>
<p><img src="assets/Ciqc1F_OA06AI435AADN1ZPvtvs400.png" alt="Drawing 1.png" /></p>
<p>(指针变量、内存地址指向示意图)</p>
<p>上图就是我刚举的例子所对应的示意图,从图中可以看到普通变量 name 的值“飞雪无情”被放到内存地址为 0xc000010200 的内存块中。指针类型变量也是变量,它也需要一块内存用来存储值,这块内存对应的地址就是 0xc00000e028存储的值是 0xc000010200。相信你已经看到关键点了指针变量 nameP 的值正好是普通变量 name 的内存地址,所以就建立指向关系。</p>
<blockquote>
<p>小提示:指针变量的值就是它所指向数据的内存地址,普通变量的值就是我们具体存放的数据。</p>
</blockquote>
<p>不同的指针类型是无法相互赋值的,比如你不能对一个 string 类型的变量取地址然后赋值给 *int指针类型编译器会提示你 Cannot use '&amp;name' (type *string) as type *int in assignment。</p>
<p>此外,除了可以通过简短声明的方式声明一个指针类型的变量外,也可以使用 var 关键字声明,如下面示例中的 var intP *int 就声明了一个 *int 类型的变量 intP。</p>
<pre><code>var intP *int
intP = &amp;name //指针类型不同,无法赋值
</code></pre>
<p>可以看到指针变量也和普通的变量一样,既可以通过 var 关键字定义,也可以通过简短声明定义。</p>
<blockquote>
<p>小提示:通过 var 声明的指针变量是不能直接赋值和取值的,因为这时候它仅仅是个变量,还没有对应的内存地址,它的值是 nil。</p>
</blockquote>
<p>和普通类型不一样的是,指针类型还可以通过内置的 new 函数来声明,如下所示:</p>
<pre><code>intP1:=new(int)
</code></pre>
<p>内置的 new 函数有一个参数,可以传递类型给它。它会返回对应的指针类型,比如上述示例中会返回一个 *int 类型的 intP1。</p>
<h3>指针的操作</h3>
<p>在 Go 语言中指针的操作无非是两种:一种是获取指针指向的值,一种是修改指针指向的值。</p>
<p>首先介绍如何获取,我用下面的代码进行演示:</p>
<pre><code>nameV:=*nameP
fmt.Println(&quot;nameP指针指向的值为:&quot;,nameV)
</code></pre>
<p>可以看到,要获取指针指向的值,只需要在指针变量前加 * 号即可,获得的变量 nameV 的值就是“飞雪无情”,方法比较简单。</p>
<p>修改指针指向的值也非常简单,比如下面的例子:</p>
<pre><code>*nameP = &quot;公众号:飞雪无情&quot; //修改指针指向的值
fmt.Println(&quot;nameP指针指向的值为:&quot;,*nameP)
fmt.Println(&quot;name变量的值为:&quot;,name)
</code></pre>
<p>对 *nameP 赋值等于修改了指针 nameP 指向的值。运行程序你将看到如下打印输出:</p>
<pre><code>nameP指针指向的值为: 公众号:飞雪无情
name变量的值为: 公众号:飞雪无情
</code></pre>
<p>通过打印结果可以看到,不光 nameP 指针指向的值被改变了,变量 name 的值也被改变了,这就是指针的作用。因为变量 name 存储数据的内存就是指针 nameP 指向的内存,这块内存被 nameP 修改后,变量 name 的值也被修改了。</p>
<p>我们已经知道,通过 var 关键字直接定义的指针变量是不能进行赋值操作的,因为它的值为 nil也就是还没有指向的内存地址。比如下面的示例</p>
<pre><code>var intP *int
*intP =10
</code></pre>
<p>运行的时候会提示 invalid memory address or nil pointer dereference。这时候该怎么办呢其实只需要通过 new 函数给它分配一块内存就可以了,如下所示:</p>
<pre><code>var intP *int = new(int)
//更推荐简短声明法,这里是为了演示
//intP:=new(int)
</code></pre>
<h3>指针参数</h3>
<p>假如有一个函数 modifyAge想要用来修改年龄如下面的代码所示。但运行它你会看到 age 的值并没有被修改,还是 18并没有变成 20。</p>
<pre><code>age:=18
modifyAge(age)
fmt.Println(&quot;age的值为:&quot;,age)
func modifyAge(age int) {
age = 20
}
</code></pre>
<p>导致这种结果的原因是 modifyAge 中的 age 只是实参 age 的一份拷贝,所以修改它不会改变实参 age 的值。</p>
<p>如果要达到修改年龄的目的,就需要使用指针,现在对刚刚的示例进行改造,如下所示:</p>
<pre><code>age:=18
modifyAge(&amp;age)
fmt.Println(&quot;age的值为:&quot;,age)
func modifyAge(age *int) {
*age = 20
}
</code></pre>
<p>也就是说,当你需要在函数中通过形参改变实参的值时,需要使用指针类型的参数。</p>
<h3>指针接收者</h3>
<p>指针的接收者在[“第 6 讲| struct 和 interface结构体与接口都实现了哪些功能”]中有详细介绍,你可以再复习一下。对于是否使用指针类型作为接收者,有以下几点参考:</p>
<ol>
<li>如果接收者类型是 map、slice、channel 这类引用类型,不使用指针;</li>
<li>如果需要修改接收者,那么需要使用指针;</li>
<li>如果接收者是比较大的类型,可以考虑使用指针,因为内存拷贝廉价,所以效率高。</li>
</ol>
<p>所以对于是否使用指针类型作为接收者,还需要你根据实际情况考虑。</p>
<h3>什么情况下使用指针</h3>
<p>从以上指针的详细分析中,我们可以总结出指针的两大好处:</p>
<ol>
<li>可以修改指向数据的值;</li>
<li>在变量赋值,参数传值的时候可以节省内存。</li>
</ol>
<p><img src="assets/CgqCHl_OA2eANW2SAAU88P9foow113.png" alt="Drawing 2.png" /></p>
<p>不过 Go 语言作为一种高级语言,在指针的使用上还是比较克制的。它在设计的时候就对指针进行了诸多限制,比如指针不能进行运行,也不能获取常量的指针。所以在思考是否使用时,我们也要保持克制的心态。</p>
<p>我根据实战经验总结了以下几点使用指针的建议,供你参考:</p>
<ol>
<li>不要对 map、slice、channel 这类引用类型使用指针;</li>
<li>如果需要修改方法接收者内部的数据或者状态时,需要使用指针;</li>
<li>如果需要修改参数的值或者内部数据时,也需要使用指针类型的参数;</li>
<li>如果是比较大的结构体,每次参数传递或者调用方法都要内存拷贝,内存占用多,这时候可以考虑使用指针;</li>
<li>像 int、bool 这样的小数据类型没必要使用指针;</li>
<li>如果需要并发安全,则尽可能地不要使用指针,使用指针一定要保证并发安全;</li>
<li>指针最好不要嵌套,也就是不要使用一个指向指针的指针,虽然 Go 语言允许这么做,但是这会使你的代码变得异常复杂。</li>
</ol>
<h3>总结</h3>
<p>为了使编程变得更简单,指针在高级的语言中被逐渐淡化,但是它也的确有自己的优势:修改数据的值和节省内存。所以在 Go 语言的开发中我们要尽可能地使用值类型,而不是指针类型,因为值类型可以使你的开发变得更简单,并且也是并发安全的。如果你想使用指针类型,就要参考我上面讲到的使用指针的条件,看是否满足,要在满足和必须的情况下才使用指针。</p>
<p>这节课到这里就要结束了,在这节课的最后同样给你留个思考题:指向接口的指针是否实现了该接口?为什么?思考后可以自己写代码验证下。</p>
</div>
</div>
<div>
<div style="float: left">
<a href="/专栏/22 讲通关 Go 语言-完/11 并发模式Go 语言中即学即用的高效并发模式.md">上一页</a>
</div>
<div style="float: right">
<a href="/专栏/22 讲通关 Go 语言-完/13 参数传递:值、引用及指针之间的区别?.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":"70996dc209773d60","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>

View File

@@ -0,0 +1,992 @@
<!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>16 非类型安全:让你既爱又恨的 unsafe.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="/专栏/22 讲通关 Go 语言-完/00 开篇词 Go 为开发者的需求设计,带你实现高效工作.md">00 开篇词 Go 为开发者的需求设计,带你实现高效工作.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/01 基础入门:编写你的第一个 Go 语言程序.md">01 基础入门:编写你的第一个 Go 语言程序.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/02 数据类型:你必须掌握的数据类型有哪些?.md">02 数据类型:你必须掌握的数据类型有哪些?.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/03 控制结构if、for、switch 逻辑语句的那些事儿.md">03 控制结构if、for、switch 逻辑语句的那些事儿.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/04 集合类型:如何正确使用 array、slice 和 map.md">04 集合类型:如何正确使用 array、slice 和 map.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/05 函数和方法Go 语言中的函数和方法到底有什么不同?.md">05 函数和方法Go 语言中的函数和方法到底有什么不同?.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/06 struct 和 interface结构体与接口都实现了哪些功能.md">06 struct 和 interface结构体与接口都实现了哪些功能.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/07 错误处理:如何通过 error、deferred、panic 等处理错误?.md">07 错误处理:如何通过 error、deferred、panic 等处理错误?.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/08 并发基础Goroutines 和 Channels 的声明与使用.md">08 并发基础Goroutines 和 Channels 的声明与使用.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/09 同步原语sync 包让你对并发控制得心应手.md">09 同步原语sync 包让你对并发控制得心应手.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/10 Context你必须掌握的多线程并发控制神器.md">10 Context你必须掌握的多线程并发控制神器.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/11 并发模式Go 语言中即学即用的高效并发模式.md">11 并发模式Go 语言中即学即用的高效并发模式.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/12 指针详解:在什么情况下应该使用指针?.md">12 指针详解:在什么情况下应该使用指针?.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/13 参数传递:值、引用及指针之间的区别?.md">13 参数传递:值、引用及指针之间的区别?.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/14 内存分配new 还是 make什么情况下该用谁.md">14 内存分配new 还是 make什么情况下该用谁.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/15 运行时反射:字符串和结构体之间如何转换?.md">15 运行时反射:字符串和结构体之间如何转换?.md.html</a>
</li>
<li>
<a class="current-tab" href="/专栏/22 讲通关 Go 语言-完/16 非类型安全:让你既爱又恨的 unsafe.md">16 非类型安全:让你既爱又恨的 unsafe.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/17 SliceHeaderslice 如何高效处理数据?.md">17 SliceHeaderslice 如何高效处理数据?.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/18 质量保证Go 语言如何通过测试保证质量?.md">18 质量保证Go 语言如何通过测试保证质量?.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/19 性能优化Go 语言如何进行代码检查和优化?.md">19 性能优化Go 语言如何进行代码检查和优化?.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/20 协作开发:模块化管理为什么能够提升研发效能?.md">20 协作开发:模块化管理为什么能够提升研发效能?.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/21 网络编程Go 语言如何玩转 RESTful API 服务?.md">21 网络编程Go 语言如何玩转 RESTful API 服务?.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/22 网络编程Go 语言如何通过 RPC 实现跨平台服务?.md">22 网络编程Go 语言如何通过 RPC 实现跨平台服务?.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/23 结束语 你的 Go 语言成长之路.md">23 结束语 你的 Go 语言成长之路.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>16 非类型安全:让你既爱又恨的 unsafe</h1>
<p>上节课我留了一个小作业,让你练习一下如何使用反射调用一个方法,下面我来进行讲解。</p>
<p>还是以 person 这个结构体类型为例。我为它增加一个方法 Print功能是打印一段文本示例代码如下</p>
<pre><code>func (p person) Print(prefix string){
fmt.Printf(&quot;%s:Name is %s,Age is %d\n&quot;,prefix,p.Name,p.Age)
}
</code></pre>
<p>然后就可以通过反射调用 Print 方法了,示例代码如下:</p>
<pre><code>func main() {
p:=person{Name: &quot;飞雪无情&quot;,Age: 20}
pv:=reflect.ValueOf(p)
//反射调用person的Print方法
mPrint:=pv.MethodByName(&quot;Print&quot;)
args:=[]reflect.Value{reflect.ValueOf(&quot;登录&quot;)}
mPrint.Call(args)
}
</code></pre>
<p>从示例中可以看到,要想通过反射调用一个方法,首先要通过 MethodByName 方法找到相应的方法。因为 Print 方法需要参数,所以需要声明参数,它的类型是 []reflect.Value也就是示例中的 args 变量,最后就可以通过 Call 方法反射调用 Print 方法了。其中记得要把 args 作为参数传递给 Call 方法。</p>
<p>运行以上代码,可以看到如下结果:</p>
<pre><code>登录:Name is 飞雪无情,Age is 20
</code></pre>
<p>从打印的结果可以看到,和我们直接调用 Print 方法是一样的结果,这也证明了通过反射调用 Print 方法是可行的。</p>
<p>下面我们继续深入 Go 的世界,这节课会介绍 Go 语言自带的 unsafe 包的高级用法。</p>
<p>顾名思义unsafe 是不安全的。Go 将其定义为这个包名,也是为了让我们尽可能地不使用它。不过虽然不安全,它也有优势,那就是可以绕过 Go 的内存安全机制,直接对内存进行读写。所以有时候出于性能需要,还是会冒险使用它来对内存进行操作。</p>
<h3>指针类型转换</h3>
<p>Go 的设计者为了编写方便、提高效率且降低复杂度将其设计成一门强类型的静态语言。强类型意味着一旦定义了类型就不能改变静态意味着类型检查在运行前就做了。同时出于安全考虑Go 语言是不允许两个指针类型进行转换的。</p>
<p>我们一般使用 *T 作为一个指针类型,表示一个指向类型 T 变量的指针。为了安全的考虑,两个不同的指针类型不能相互转换,比如 *int 不能转为 *float64。</p>
<p>我们来看下面的代码:</p>
<pre><code>func main() {
i:= 10
ip:=&amp;i
var fp *float64 = (*float64)(ip)
fmt.Println(fp)
}
</code></pre>
<p>这个代码在编译的时候,会提示 <em>cannot convert ip (type * int) to type * float64</em>,也就是不能进行强制转型。那如果还是需要转换呢?这就需要使用 unsafe 包里的 Pointer 了。下面我先为你介绍 unsafe.Pointer 是什么,然后再介绍如何转换。</p>
<h3>unsafe.Pointer</h3>
<p>unsafe.Pointer 是一种特殊意义的指针,可以表示任意类型的地址,类似 C 语言里的 void* 指针,是全能型的。</p>
<p>正常情况下,*int 无法转换为 *float64但是通过 unsafe.Pointer 做中转就可以了。在下面的示例中,我通过 unsafe.Pointer 把 *int 转换为 *float64并且对新的 *float64 进行 3 倍的乘法操作,你会发现原来变量 i 的值也被改变了,变为 30。</p>
<p><em><strong>ch16/main.go</strong></em></p>
<pre><code>func main() {
i:= 10
ip:=&amp;i
var fp *float64 = (*float64)(unsafe.Pointer(ip))
*fp = *fp * 3
fmt.Println(i)
}
</code></pre>
<p>这个例子没有任何实际意义,但是说明了通过 unsafe.Pointer 这个万能的指针,我们可以在 *T 之间做任何转换。那么 unsafe.Pointer 到底是什么?为什么其他类型的指针可以转换为 unsafe.Pointer 呢?这就要看 unsafe.Pointer 的源代码定义了,如下所示:</p>
<pre><code>// ArbitraryType is here for the purposes of documentation
// only and is not actually part of the unsafe package.
// It represents the type of an arbitrary Go expression.
type ArbitraryType int
type Pointer *ArbitraryType
</code></pre>
<p>按 Go 语言官方的注释ArbitraryType 可以表示任何类型(这里的 ArbitraryType 仅仅是文档需要,不用太关注它本身,只要记住可以表示任何类型即可)。 而 unsafe.Pointer 又是 *ArbitraryType也就是说 unsafe.Pointer 是任何类型的指针,也就是一个通用型的指针,足以表示任何内存地址。</p>
<h3>uintptr 指针类型</h3>
<p>uintptr 也是一种指针类型,它足够大,可以表示任何指针。它的类型定义如下所示:</p>
<pre><code>// uintptr is an integer type that is large enough
// to hold the bit pattern of any pointer.
type uintptr uintptr
</code></pre>
<p>既然已经有了 unsafe.Pointer为什么还要设计 uintptr 类型呢?这是因为 unsafe.Pointer 不能进行运算,比如不支持 +(加号)运算符操作,但是 uintptr 可以。通过它,可以对指针偏移进行计算,这样就可以访问特定的内存,达到对特定内存读写的目的,这是真正内存级别的操作。</p>
<p>在下面的代码中,我以通过指针偏移修改 struct 结构体内的字段为例,演示 uintptr 的用法。</p>
<pre><code>func main() {
p :=new(person)
//Name是person的第一个字段不用偏移即可通过指针修改
pName:=(*string)(unsafe.Pointer(p))
*pName=&quot;飞雪无情&quot;
//Age并不是person的第一个字段所以需要进行偏移这样才能正确定位到Age字段这块内存才可以正确的修改
pAge:=(*int)(unsafe.Pointer(uintptr(unsafe.Pointer(p))+unsafe.Offsetof(p.Age)))
*pAge = 20
fmt.Println(*p)
}
type person struct {
Name string
Age int
}
</code></pre>
<p>这个示例不是通过直接访问相应字段的方式对 person 结构体字段赋值,而是通过指针偏移找到相应的内存,然后对内存操作进行赋值。</p>
<p>下面我详细介绍操作步骤。</p>
<ol>
<li>先使用 new 函数声明一个 *person 类型的指针变量 p。</li>
<li>然后把 *person 类型的指针变量 p 通过 unsafe.Pointer转换为 *string 类型的指针变量 pName。</li>
<li>因为 person 这个结构体的第一个字段就是 string 类型的 Name所以 pName 这个指针就指向 Name 字段(偏移为 0对 pName 进行修改其实就是修改字段 Name 的值。</li>
<li>因为 Age 字段不是 person 的第一个字段,要修改它必须要进行指针偏移运算。所以需要先把指针变量 p 通过 unsafe.Pointer 转换为 uintptr这样才能进行地址运算。既然要进行指针偏移那么要偏移多少呢这个偏移量可以通过函数 unsafe.Offsetof 计算出来,该函数返回的是一个 uintptr 类型的偏移量,有了这个偏移量就可以通过 + 号运算符获得正确的 Age 字段的内存地址了,也就是通过 unsafe.Pointer 转换后的 *int 类型的指针变量 pAge。</li>
<li>然后需要注意的是,如果要进行指针运算,要先通过 unsafe.Pointer 转换为 uintptr 类型的指针。指针运算完毕后,还要通过 unsafe.Pointer 转换为真实的指针类型(比如示例中的 *int 类型),这样可以对这块内存进行赋值或取值操作。</li>
<li>有了指向字段 Age 的指针变量 pAge就可以对其进行赋值操作修改字段 Age 的值了。</li>
</ol>
<p>运行以上示例,你可以看到如下结果:</p>
<pre><code>{飞雪无情 20}
</code></pre>
<p>这个示例主要是为了讲解 uintptr 指针运算,所以一个结构体字段的赋值才会写得这么复杂,如果按照正常的编码,以上示例代码会和下面的代码结果一样。</p>
<pre><code>func main() {
p :=new(person)
p.Name = &quot;飞雪无情&quot;
p.Age = 20
fmt.Println(*p)
}
</code></pre>
<p>指针运算的核心在于它操作的是一个个内存地址,通过内存地址的增减,就可以指向一块块不同的内存并对其进行操作,而且不必知道这块内存被起了什么名字(变量名)。</p>
<h3>指针转换规则</h3>
<p>你已经知道 Go 语言中存在三种类型的指针,它们分别是:常用的 *T、unsafe.Pointer 及 uintptr。通过以上示例讲解可以总结出这三者的转换规则</p>
<ol>
<li>任何类型的 *T 都可以转换为 unsafe.Pointer</li>
<li>unsafe.Pointer 也可以转换为任何类型的 *T</li>
<li>unsafe.Pointer 可以转换为 uintptr</li>
<li>uintptr 也可以转换为 unsafe.Pointer。</li>
</ol>
<p><img src="assets/CgpVE1_ge3eAaiW8AABP2TB3gXA825.png" alt="图片1.png" /></p>
<p>(指针转换示意图)</p>
<p>可以发现unsafe.Pointer 主要用于指针类型的转换而且是各个指针类型转换的桥梁。uintptr 主要用于指针运算,尤其是通过偏移量定位不同的内存。</p>
<h3>unsafe.Sizeof</h3>
<p>Sizeof 函数可以返回一个类型所占用的内存大小,这个大小只与类型有关,和类型对应的变量存储的内容大小无关,比如 bool 型占用一个字节、int8 也占用一个字节。</p>
<p>通过 Sizeof 函数你可以查看任何类型(比如字符串、切片、整型)占用的内存大小,示例代码如下:</p>
<pre><code>fmt.Println(unsafe.Sizeof(true))
fmt.Println(unsafe.Sizeof(int8(0)))
fmt.Println(unsafe.Sizeof(int16(10)))
fmt.Println(unsafe.Sizeof(int32(10000000)))
fmt.Println(unsafe.Sizeof(int64(10000000000000)))
fmt.Println(unsafe.Sizeof(int(10000000000000000)))
fmt.Println(unsafe.Sizeof(string(&quot;飞雪无情&quot;)))
fmt.Println(unsafe.Sizeof([]string{&quot;飞雪u无情&quot;,&quot;张三&quot;}))
</code></pre>
<p>对于整型来说,占用的字节数意味着这个类型存储数字范围的大小,比如 int8 占用一个字节,也就是 8bit所以它可以存储的大小范围是 -128~~127也就是 2^(n-1) 到 2^(n-1)1。其中 n 表示 bitint8 表示 8bitint16 表示 16bit以此类推。</p>
<p>对于和平台有关的 int 类型,要看平台是 32 位还是 64 位,会取最大的。比如我自己测试以上输出,会发现 int 和 int64 的大小是一样的,因为我用的是 64 位平台的电脑。</p>
<blockquote>
<p>小提示:一个 struct 结构体的内存占用大小,等于它包含的字段类型内存占用大小之和。</p>
</blockquote>
<h3>总结</h3>
<p>unsafe 包里最常用的就是 Pointer 指针,通过它可以让你在 *T、uintptr 及 Pointer 三者间转换,从而实现自己的需求,比如零内存拷贝或通过 uintptr 进行指针运算,这些都可以提高程序效率。</p>
<p>unsafe 包里的功能虽然不安全,但的确很香,比如指针运算、类型转换等,都可以帮助我们提高性能。不过我还是建议尽可能地不使用,因为它可以绕开 Go 语言编译器的检查,可能会因为你的操作失误而出现问题。当然如果是需要提高性能的必要操作,还是可以使用,比如 []byte 转 string就可以通过 unsafe.Pointer 实现零内存拷贝,下节课我会详细讲解。
<img src="assets/Ciqc1F_ge7KAW3QcAAVodV4QU6c331.png" alt="16金句.png" />
unsafe 包还有一个函数我这节课没有讲,它是 Alignof功能就是函数名字字面的意思比较简单你可以自己练习使用一下这也是这节课的思考题。记得来听下节课哦</p>
</div>
</div>
<div>
<div style="float: left">
<a href="/专栏/22 讲通关 Go 语言-完/15 运行时反射:字符串和结构体之间如何转换?.md">上一页</a>
</div>
<div style="float: right">
<a href="/专栏/22 讲通关 Go 语言-完/17 SliceHeaderslice 如何高效处理数据?.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":"70996dc9fb843d60","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>

View File

@@ -0,0 +1,984 @@
<!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>20 协作开发:模块化管理为什么能够提升研发效能?.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="/专栏/22 讲通关 Go 语言-完/00 开篇词 Go 为开发者的需求设计,带你实现高效工作.md">00 开篇词 Go 为开发者的需求设计,带你实现高效工作.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/01 基础入门:编写你的第一个 Go 语言程序.md">01 基础入门:编写你的第一个 Go 语言程序.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/02 数据类型:你必须掌握的数据类型有哪些?.md">02 数据类型:你必须掌握的数据类型有哪些?.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/03 控制结构if、for、switch 逻辑语句的那些事儿.md">03 控制结构if、for、switch 逻辑语句的那些事儿.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/04 集合类型:如何正确使用 array、slice 和 map.md">04 集合类型:如何正确使用 array、slice 和 map.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/05 函数和方法Go 语言中的函数和方法到底有什么不同?.md">05 函数和方法Go 语言中的函数和方法到底有什么不同?.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/06 struct 和 interface结构体与接口都实现了哪些功能.md">06 struct 和 interface结构体与接口都实现了哪些功能.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/07 错误处理:如何通过 error、deferred、panic 等处理错误?.md">07 错误处理:如何通过 error、deferred、panic 等处理错误?.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/08 并发基础Goroutines 和 Channels 的声明与使用.md">08 并发基础Goroutines 和 Channels 的声明与使用.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/09 同步原语sync 包让你对并发控制得心应手.md">09 同步原语sync 包让你对并发控制得心应手.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/10 Context你必须掌握的多线程并发控制神器.md">10 Context你必须掌握的多线程并发控制神器.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/11 并发模式Go 语言中即学即用的高效并发模式.md">11 并发模式Go 语言中即学即用的高效并发模式.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/12 指针详解:在什么情况下应该使用指针?.md">12 指针详解:在什么情况下应该使用指针?.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/13 参数传递:值、引用及指针之间的区别?.md">13 参数传递:值、引用及指针之间的区别?.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/14 内存分配new 还是 make什么情况下该用谁.md">14 内存分配new 还是 make什么情况下该用谁.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/15 运行时反射:字符串和结构体之间如何转换?.md">15 运行时反射:字符串和结构体之间如何转换?.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/16 非类型安全:让你既爱又恨的 unsafe.md">16 非类型安全:让你既爱又恨的 unsafe.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/17 SliceHeaderslice 如何高效处理数据?.md">17 SliceHeaderslice 如何高效处理数据?.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/18 质量保证Go 语言如何通过测试保证质量?.md">18 质量保证Go 语言如何通过测试保证质量?.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/19 性能优化Go 语言如何进行代码检查和优化?.md">19 性能优化Go 语言如何进行代码检查和优化?.md.html</a>
</li>
<li>
<a class="current-tab" href="/专栏/22 讲通关 Go 语言-完/20 协作开发:模块化管理为什么能够提升研发效能?.md">20 协作开发:模块化管理为什么能够提升研发效能?.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/21 网络编程Go 语言如何玩转 RESTful API 服务?.md">21 网络编程Go 语言如何玩转 RESTful API 服务?.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/22 网络编程Go 语言如何通过 RPC 实现跨平台服务?.md">22 网络编程Go 语言如何通过 RPC 实现跨平台服务?.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/23 结束语 你的 Go 语言成长之路.md">23 结束语 你的 Go 语言成长之路.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>20 协作开发:模块化管理为什么能够提升研发效能?</h1>
<p>任何业务,都是从简单向复杂演进的。而在业务演进的过程中,技术是从单体向多模块、多服务演进的。技术的这种演进方式的核心目的是<strong>复用代码、提高效率</strong>,这一讲,我会为你介绍 Go 语言是如何通过模块化的管理,提升开发效率的。</p>
<h3>Go 语言中的包</h3>
<h4>什么是包</h4>
<p>在业务非常简单的时候,你甚至可以把代码写到一个 Go 文件中。但随着业务逐渐复杂,你会发现,如果代码都放在一个 Go 文件中,会变得难以维护,这时候你就需要抽取代码,把相同业务的代码放在一个目录中。在 Go 语言中,这个目录叫作包。</p>
<p>在 Go 语言中,一个包是通过<strong>package 关键字定义</strong>的,最常见的就是<strong>main 包</strong>,它的定义如下所示:</p>
<pre><code>package main
</code></pre>
<p>此外,前面章节演示示例经常使用到的 fmt 包,也是通过 package 关键字声明的。</p>
<p>一个包就是一个<strong>独立的空间</strong>,你可以在这个包里<strong>定义函数</strong><strong>结构体</strong>等。这时,我们认为这些函数、结构体是属于这个包的。</p>
<h4>使用包</h4>
<p>如果你想使用一个包里的函数或者结构体,就需要先<strong>导入这个包</strong>,才能使用,比如常用的 fmt包代码示例如下所示。</p>
<pre><code>package main
import &quot;fmt&quot;
func main() {
fmt.Println(&quot;先导入fmt包才能使用&quot;)
}
</code></pre>
<p>要导入一个包,需要使用 import 关键字;如果需要同时导入多个包,则可以使用小括号,示例代码如下所示。</p>
<pre><code>import (
&quot;fmt&quot;
&quot;os&quot;
)
</code></pre>
<p>从以上示例可以看到,该示例导入了 fmt 和 os 这两个包,使用了小括号,每一行写了一个要导入的包。</p>
<h4>作用域</h4>
<p>讲到了包之间的导入和使用,就不得不提作用域这个概念,因为只有满足作用域的函数才可以被调用。</p>
<ul>
<li><strong>Java 语言</strong>中,通过 public、private 这些修饰符修饰一个类的作用域;</li>
<li>但是在<strong>Go 语言</strong>中,并没有这样的作用域修饰符,它是通过首字母是否大写来区分的,这同时也体现了 Go 语言的简洁。</li>
</ul>
<p>如上述示例中 fmt 包中的<strong>Println 函数</strong></p>
<ul>
<li>它的首字母就是大写的 P所以该函数才可以在 main 包中使用;</li>
<li>如果 Println 函数的首字母是小写的 p那么它只能在 fmt 包中被使用,不能跨包使用。</li>
</ul>
<p>这里我为你总结下 Go 语言的作用域:</p>
<ul>
<li>Go 语言中,所有的定义,比如函数、变量、结构体等,如果首字母是大写,那么就可以被其他包使用;</li>
<li>反之,如果首字母是小写的,就只能在同一个包内使用。</li>
</ul>
<h4>自定义包</h4>
<p>你也可以自定义自己的包,通过包的方式把相同业务、相同职责的代码放在一起。比如你有一个 util 包,用于存放一些常用的工具函数,项目结构如下所示:</p>
<pre><code>ch20
├── main.go
└── util
└── string.go
</code></pre>
<p>在 Go 语言中,一个包对应一个文件夹,上面的项目结构示例也验证了这一点。在这个示例中,有一个 util 文件夹,它里面有一个 string.go 文件,这个 Go 语言文件就属于 util 包,它的包定义如下所示:</p>
<p><em>ch20/util/string.go</em></p>
<pre><code>package util
</code></pre>
<p>可以看到Go 语言中的包是代码的一种<strong>组织形式</strong>,通过包把相同业务或者相同职责的代码放在一起。通过包对代码进行归类,便于代码维护以及被其他包调用,提高团队协作效率。</p>
<h4>init 函数</h4>
<p>除了 main 这个特殊的函数外Go 语言还有一个特殊的函数——init通过它可以<strong>实现包级别的一些初始化操作</strong></p>
<p>init 函数没有返回值,也没有参数,它<strong>先于 main 函数执行</strong>,代码如下所示:</p>
<pre><code>func init() {
fmt.Println(&quot;init in main.go &quot;)
}
</code></pre>
<p>一个包中可以有多个 init 函数,但是它们的执行顺序并不确定,所以如果你定义了多个 init 函数的话,要确保它们是<strong>相互独立</strong>的,一定<strong>不要有顺序上的依赖</strong></p>
<p>那么 init 函数作用是什么呢? 其实就是在导入一个包时,可以对这个包做一些必要的初始化操作,比如数据库连接和一些数据的检查,确保我们可以正确地使用这个包。</p>
<h3>Go 语言中的模块</h3>
<p>如果包是比较低级的代码组织形式的话,那么模块就是更高级别的,在 Go 语言中,一个模块可以包含很多个包,所以模块是相关的包的集合。</p>
<p>在 Go 语言中:</p>
<ul>
<li>一个模块通常是<strong>一个项目</strong>,比如这个专栏实例中使用的 gotour 项目;</li>
<li>也可以是<strong>一个框</strong>架,比如常用的 Web 框架 gin。</li>
</ul>
<h4>go mod</h4>
<p>Go 语言为我们提供了 go mod 命令来创建一个模块(项目),比如要创建一个 gotour 模块,你可以通过如下命令实现:</p>
<pre><code>➜ go mod init gotour
go: creating new go.mod: module gotour
</code></pre>
<p>运行这一命令后,你会看到已经创建好一个名字为 gotour 的文件夹,里面有一个 go.mod 文件,它里面的内容如下所示:</p>
<pre><code>module gotour
go 1.15
</code></pre>
<ul>
<li>第一句是该项目的<strong>模块名</strong>,也就是 gotour</li>
<li>第二句表示要编译该模块至少需要<strong>Go 1.15 版本的 SDK</strong></li>
</ul>
<blockquote>
<p>小提示:模块名最好是以自己的域名开头,比如 flysnow.org/gotour这样就可以很大程度上保证模块名的唯一不至于和其他模块重名。</p>
</blockquote>
<h4>使用第三方模块</h4>
<p>模块化为什么可以提高开发效率?最重要的原因就是<strong>复用了现有的模块</strong>Go 语言也不例外。比如你可以把项目中的公共代码抽取为一个模块,这样就可以供其他项目使用,不用再重复开发;同理,在 Github 上也有很多开源的 Go 语言项目,它们都是一个个独立的模块,也可以被我们直接使用,提高我们的开发效率,比如 Web 框架 <a href="https://github.com/gin-gonic/gin">gin-gonic/gin</a></p>
<p>众所周知,在使用第三方模块之前,需要先设置下 Go 代理,也就是 GOPROXY这样我们就可以获取到第三方模块了。</p>
<p>在这里我推荐 goproxy.io 这个代理,非常好用,速度也很快。要使用这个代理,需要进行如下代码设置:</p>
<pre><code>go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.io,direct
</code></pre>
<p>打开终端,输入这一命令回车即可设置成功。</p>
<p>在实际的项目开发中,除了第三方模块外,还有我们<strong>自己开发的模块</strong>,放在了公司的 GitLab上这时候就要把公司 Git 代码库的域名排除在 Go PROXY 之外,为此 Go 语言提供了GOPRIVATE 这个环境变量帮助我们达到目的。通过如下命令即可设置 GOPRIVATE</p>
<pre><code># 设置不走 proxy 的私有仓库,多个用逗号相隔(可选)
go env -w GOPRIVATE=*.corp.example.com
</code></pre>
<p>以上域名只是一个示例,实际使用时你要改成自己<strong>公司私有仓库的域名</strong></p>
<p>一切都准备好就可以使用第三方的模块了,假设我们要使用 Gin 这个 Web 框架,首先需要安装它,通过如下命令即可安装 Gin 这个 Web 框架:</p>
<pre><code>go get -u github.com/gin-gonic/gin
</code></pre>
<p>安装成功后,就可以像 Go 语言的标准包一样,通过 import 命令导入你的代码中使用它,代码如下所示:</p>
<pre><code>package main
import (
&quot;fmt&quot;
&quot;github.com/gin-gonic/gin&quot;
)
func main() {
fmt.Println(&quot;先导入fmt包才能使用&quot;)
r := gin.Default()
r.Run()
}
</code></pre>
<p>以上代码现在还<strong>无法编译通过</strong>,因为还没有同步 Gin 这个模块的依赖也就是没有把它添加到go.mod 文件中。通过如下命令可以添加缺失的模块:</p>
<pre><code>go mod tidy
</code></pre>
<p>运行这一命令,就可以把缺失的模块添加进来,同时它也可以移除不再需要的模块。这时你再查看 go.mod 文件,会发现内容已经变成了这样:</p>
<pre><code>module gotour
go 1.15
require (
github.com/gin-gonic/gin v1.6.3
github.com/golang/protobuf v1.4.2 // indirect
github.com/google/go-cmp v0.5.2 // indirect
github.com/kr/text v0.2.0 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.1 // indirect
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e // indirect
github.com/stretchr/testify v1.6.1 // indirect
golang.org/x/sys v0.0.0-20201009025420-dfb3f7c4e634 // indirect
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f // indirect
gopkg.in/yaml.v2 v2.3.0 // indirect
)
</code></pre>
<p>所以我们不用手动去修改 go.mod 文件,通过 Go 语言的工具链比如 go mod tidy 命令,就可以帮助我们自动地维护、自动地添加或者修改 go.mod 的内容。</p>
<h3>总结</h3>
<p>在 Go 语言中,包是同一目录中,编译在一起的源文件的集合。包里面含有函数、类型、变量和常量,不同包之间的调用,必须要首字母大写才可以。</p>
<p>而模块又是相关的包的集合,它里面包含了很多为了实现该模块的包,并且还可以通过模块的方式,把已经完成的模块提供给其他项目(模块)使用,达到了代码复用、研发效率提高的目的。</p>
<p>所以对于你的项目(模块)来说,它具有<strong>模块 ➡ 包 ➡ 函数类型</strong>这样三层结构,同一个模块中,可以通过包组织代码,达到代码复用的目的;在不同模块中,就需要通过模块的引入,达到这个目的。</p>
<p>编程界有个谚语:不要重复<strong>造轮子</strong>,使用现成的轮子,可以提高开发效率,降低 Bug 率。Go 语言提供的模块、包这些能力,就可以很好地让我们使用现有的轮子,在多人协作开发中,更好地提高工作效率。</p>
<p>最后,为你留个作业:基于模块化拆分你所做的项目,提取一些公共的模块,以供更多项目使用。相信这样你们的开发效率会大大提升的。</p>
</div>
</div>
<div>
<div style="float: left">
<a href="/专栏/22 讲通关 Go 语言-完/19 性能优化Go 语言如何进行代码检查和优化?.md">上一页</a>
</div>
<div style="float: right">
<a href="/专栏/22 讲通关 Go 语言-完/21 网络编程Go 语言如何玩转 RESTful API 服务?.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":"70996dd1fde83d60","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>

View File

@@ -0,0 +1,678 @@
<!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 结束语 你的 Go 语言成长之路.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="/专栏/22 讲通关 Go 语言-完/00 开篇词 Go 为开发者的需求设计,带你实现高效工作.md">00 开篇词 Go 为开发者的需求设计,带你实现高效工作.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/01 基础入门:编写你的第一个 Go 语言程序.md">01 基础入门:编写你的第一个 Go 语言程序.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/02 数据类型:你必须掌握的数据类型有哪些?.md">02 数据类型:你必须掌握的数据类型有哪些?.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/03 控制结构if、for、switch 逻辑语句的那些事儿.md">03 控制结构if、for、switch 逻辑语句的那些事儿.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/04 集合类型:如何正确使用 array、slice 和 map.md">04 集合类型:如何正确使用 array、slice 和 map.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/05 函数和方法Go 语言中的函数和方法到底有什么不同?.md">05 函数和方法Go 语言中的函数和方法到底有什么不同?.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/06 struct 和 interface结构体与接口都实现了哪些功能.md">06 struct 和 interface结构体与接口都实现了哪些功能.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/07 错误处理:如何通过 error、deferred、panic 等处理错误?.md">07 错误处理:如何通过 error、deferred、panic 等处理错误?.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/08 并发基础Goroutines 和 Channels 的声明与使用.md">08 并发基础Goroutines 和 Channels 的声明与使用.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/09 同步原语sync 包让你对并发控制得心应手.md">09 同步原语sync 包让你对并发控制得心应手.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/10 Context你必须掌握的多线程并发控制神器.md">10 Context你必须掌握的多线程并发控制神器.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/11 并发模式Go 语言中即学即用的高效并发模式.md">11 并发模式Go 语言中即学即用的高效并发模式.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/12 指针详解:在什么情况下应该使用指针?.md">12 指针详解:在什么情况下应该使用指针?.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/13 参数传递:值、引用及指针之间的区别?.md">13 参数传递:值、引用及指针之间的区别?.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/14 内存分配new 还是 make什么情况下该用谁.md">14 内存分配new 还是 make什么情况下该用谁.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/15 运行时反射:字符串和结构体之间如何转换?.md">15 运行时反射:字符串和结构体之间如何转换?.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/16 非类型安全:让你既爱又恨的 unsafe.md">16 非类型安全:让你既爱又恨的 unsafe.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/17 SliceHeaderslice 如何高效处理数据?.md">17 SliceHeaderslice 如何高效处理数据?.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/18 质量保证Go 语言如何通过测试保证质量?.md">18 质量保证Go 语言如何通过测试保证质量?.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/19 性能优化Go 语言如何进行代码检查和优化?.md">19 性能优化Go 语言如何进行代码检查和优化?.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/20 协作开发:模块化管理为什么能够提升研发效能?.md">20 协作开发:模块化管理为什么能够提升研发效能?.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/21 网络编程Go 语言如何玩转 RESTful API 服务?.md">21 网络编程Go 语言如何玩转 RESTful API 服务?.md.html</a>
</li>
<li>
<a href="/专栏/22 讲通关 Go 语言-完/22 网络编程Go 语言如何通过 RPC 实现跨平台服务?.md">22 网络编程Go 语言如何通过 RPC 实现跨平台服务?.md.html</a>
</li>
<li>
<a class="current-tab" href="/专栏/22 讲通关 Go 语言-完/23 结束语 你的 Go 语言成长之路.md">23 结束语 你的 Go 语言成长之路.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 结束语 你的 Go 语言成长之路</h1>
<p>我们从 Go 语言的基础知识,到底层原理,再到实战,相信你已经学会了如何使用 Go 语言,并可以上手做项目了。这一路走来,非常感谢你对学习的坚持,以及对我的支持。</p>
<p>在本专栏的最后,我会和你聊下 Go 语言的前景,以及对于你学习 Go 语言编程和在今后职业发展方面,我的一些建议。</p>
<h3>Go 语言的发展前景</h3>
<p>随着这几年 Dokcer、K8s 的普及,云原生的概念也越来越火,而 Go 语言恰恰就是为云而生的编程语言,所以在云原生的时代,它就具备了天生的优势:易于学习、天然的并发、高效的网络支持、跨平台的二进制文件编译等。</p>
<p>CNCF云原生计算基金会对云原生的定义是</p>
<ul>
<li>应用容器化;</li>
<li>面向微服务架构;</li>
<li>应用支持容器的编排调度。</li>
</ul>
<p>我们可以看到,对于这三点有代表性的 Docker、K8s 以及 istio 都是采用 Go 语言编写的,所以 Go 语言在云原生中发挥了极大的优势。</p>
<p>在涉及网络通信、对象存储、协议等领域的工作中Go 语言所展现出的优势要比 Python、C /C++ 更大,所以诸如字节跳动、腾讯等很多大厂都在拥抱 Go 语言的开发,甚至很多公司在业务这一层也采用 Go 语言来开发微服务,从而提高开发和运行效率。</p>
<p>总体来说,对 Go 语言的前景我还是比较看好的,所以本专栏是你 Go 语言学习的敲门砖,接下来我建议你可以对这一语言进行更加系统和全面的学习。</p>
<h3>Go 语言学习建议</h3>
<p>关于 Go 语言的学习,我建议从<strong>官方文档</strong><strong>官方作者著作的书</strong>开始,这样你可以看到“原汁原味”的讲解。其实不只 Go 语言,任何一门语言都应该是这样,官方的内容是比较权威的。</p>
<p>基于官方文档入门后,你就可以参考一些第三方大牛写的相关书籍了。阅读不同人写的 Go 语言书籍,你可以融会贯通,更好地理解 Go 语言的知识点。比如在其他书上看不懂的内容,换一本你可能就看懂了。</p>
<p>阅读书籍还有一个好处是让你的学习具备<strong>系统性</strong>,而非零散的。现在大部分的我们都选择碎片化学习,其实通过碎片化的时间,系统地学习才是正确的方式。</p>
<p>不管是通过书籍、官网文档,还是视频、专栏的学习,我们都要结合示例进行练习,不能只用眼睛看,这样的学习效率很低,一定要将代码动手写出来,这样你对知识的理解程度和只看是完全不一样的,在这个过程中你可以<strong>通过写加深记忆</strong><strong>通过调试加深理解</strong><strong>通过结果验证你的知识</strong></p>
<p>有了这些基础后,就可以看一些实战类的书籍、文章和视频了,这样你不只是学会了 Go 语言,还能用 Go 语言做项目,了解如何编码、分库、微服务、自动化部署等。</p>
<p>不管是学习 Go 语言还是其他编程语言,都要阅读源代码,通过阅读源代码了解底层的实现原理,以及学习他人优秀的代码设计,进而提升自己在 Go 语言上的技术能力。</p>
<p>当然一个工程师“源于代码”,但不能“止于代码”。</p>
<h3>不止于编程语言</h3>
<p>无论你是想走技术专家路线,还是技术管理路线,要想更多地发挥自己的价值,必然是要带人的,因为一个人再怎么努力、技术如何厉害,也比不上<strong>多人团队的协作</strong></p>
<p>所以,当你工作 3 年具备骨干的能力后,就要开始尝试带人、做导师了,把自己学习编程的经验教给新人,让他们少走弯路,同时也能锻炼自己带人的能力,协调更多的人一起做事情。</p>
<p>这样当你有 5 年、7 年,甚至以上工作经验的时候,你的团队会越来越壮大,在团队中你所发挥的价值也越来越大;而在个人方面,你也可以做架构设计、技术难点攻关等更有价值的事情。</p>
<p>关于技术编程人员的成长,我有过一次分享。我把成长经历分为 9 个阶段,每一个阶段需要哪些技术,如何提升自己的段位,都有详细的介绍,你可以在<a href="https://mp.weixin.qq.com/s/5w8dirif-3RMmhW9vcWQWQ">《技术编程人员成长的 9 个段位》</a>中查看。</p>
<h3>总结</h3>
<p>具备自我驱动力,以及学习能力的人,在职场中的竞争力都不会太差。</p>
<p>希望这个专栏可以很好地帮到你,让你学到 Go 语言的知识,让你在职场中更具备竞争力。</p>
</div>
</div>
<div>
<div style="float: left">
<a href="/专栏/22 讲通关 Go 语言-完/22 网络编程Go 语言如何通过 RPC 实现跨平台服务?.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":"70996dd83cdd3d60","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>

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 335 KiB

Some files were not shown because too many files have changed in this diff Show More