当前位置: 首页 > 编程日记 > 正文

为什么你的工作经验不值钱

前言

  每年的三月到六月,都是招聘高峰,除了大量的应届毕业生涌入社会之外,还有一些工作了一两年尚未找到稳定归属感的人,也会开始投递简历,是的,基本都是在拿了年终奖之后。作为前端技术主管,有幸,或者说是不幸,我需要在这些投递过来简历的人中,耗费大量精力来筛选符合公司要求、团队发展、技术基础三方面条件的人选来,这不是一个容易的活儿。

  我不是一个擅长技巧的面试官,尽管公司HR也给我们培训过招聘的原则、技巧,但是真正的体验和感受,却是在做了大量面试之后自然而然悟出来的。常见的招聘要求中,基本都有“工作经验”的要求,而且都是以年作为单位,HR似乎比较迷恋这个数字,但是实际情况却告诉我,工作经验往往不是以年衡量的,甚至有些时候,跟时间没有关系。

  今天想要分享的一点,是关于“为什么你的工作经验不值钱”,或者“怎么样才能让工作经验值钱”,庸俗,却能让每个人提起精神。

  [注] 以下经验分享,仅仅适用于码农相关职位,其他职位可借鉴其思想,不可照搬。

开始

从一个小小的面试题目入手:

编写一个javscript函数 fn,该函数有一个参数 n(数字类型),其返回值是一个数组,该数组内是 n 个随机且不重复的整数,且整数取值范围是 [2, 32]。

如果愿意,请先暂停阅读文章,自己动手写一下这个函数,是的,老简单了。我可以等你五分钟。

~~~~~~~~~~~~~~~ 华丽的五分钟过去了~~~~~~~~~~~~~~~

现在假设你的工作时间为 y 年,经验系数默认为 1,即工作经验是:Y = 1 * y。从现在开始,以下的错误,你要是遇到了,请自行调整经验系数。

1、可用。

作为一段需要满足需求的代码来说,它最核心的、最低的要求就是:可用。

如果你没有产出一个函数( fn ),或者产生了语法错误,那就请设置 经验系数为 0,然后去面壁思过;

请将代码在控制台运行,并执行 fn(3),看看是否输出一个数组,数组中包含了三个随机且不同且在[2,32]的整数,如果不是,请将 经验系数 * 0;

一个参考的半伪代码是:

function fn(n){
//准备一个容器保存结果
var arr = [];
//循环
for(var i=0; i<n; i++){
//创建一个随机数
var rnd = getRand(2, 32);
     //检查是否重复
if( checkInArr(arr, rnd) ){i--;}else{arr.push(rnd);}}return arr; }

其中 getRand 、checkInArr 还另有讲究,后面会提到。当然思路和方法不止一个,后面也会提到。

有相当多的面试者,包括不少工作时间为2年以内的同学,都会在这一步犯错,非常遗憾。

2、健壮。

代码是否老道,过了“可用”这一关后,就开始见分晓了。所谓“健壮”,即最基本的兼容性处理、边界处理,异常处理、用户输入校验。很多时候,需求方不会明确告诉你这些逻辑怎么处理(在实际开发中,似乎也比较常见),但并不意味着你不需要处理。健壮的程序,一定会将这些兼容性、边界、异常、输入做处理,以保证核心功能的正确输出。当然,如果你的代码没有任何输入并不考虑兼容性(可能吗?)或者仅仅是内部函数,那这一步要求可以降低,并不意味着你可以完全不做。

好,回过头看代码:
如果你没有对 n 的取值范围做校验(n必须是 1 到 31 之间的整数),请将 经验系数 * 0.3;
如果你没有对 n 是否为数字做校验,请将 经验系数 * 0.5;
如果你没有对 n 是否存在做校验,请将 经验系数 * 0.7;
如果上述校验都做了,但是没有校验对,请将 经验系数 * 0.9;你需要多练习,仔细认真的。

一个参考的半伪代码是:

function fn(n){//健壮性校验if(!isThere(n)) return;if(!typeOK(n)) return;if(!rangeOK(n, 2, 32)) return;//核心功能同上,此略
  ...
}

有了这些健壮性校验后,妈妈就不用担心 fn 函数死循环、语法错误以及错误的API调用了。伪代码中,校验是分为三步的,但实际代码中,完全可以合并处理,但是逻辑不能少。

3、可靠。

大多数面试者都止步于前两关,鲜有进入第三关的:可靠。javascript没有强数据类型,函数的返回值也无法强制返回的数据格式。但是作为“可靠”的要求,尽可能在任何情况下,都返回一个可靠的结果,哪怕是异常情况下。是的,这一步很简单,几乎不耗费几个字节的代码,但是会让 fn 的返回值变得可靠:

function fn(n){//健壮性校验if(!isThere(n)) return [];if(!typeOK(n)) return [];if(!rangeOK(n, 2, 32)) return [];//核心功能同上,此略
  ...
}

如果你留意到并处理可靠返回值的问题,那请将 经验系数 * 1.2;

另外,一个牵涉的话题就是:异常情况下,是否要抛出 Error,或 console.error ?关于这个话题,似乎没有定论,需要自己衡量。我的观点是:如果异常情况下不会造成太大影响的话(包括定位错误),就不用抛错或提示。但同样的,这个衡量仍然是经验性的。此处不再展开讨论。

4、宽容。

如果在你的日常开发中注意“可用”、“健壮”、“可靠”原则的话,你的工作经验就会大于你的工作时间,也就会更容易受到重视,自己所挖的坑就会少。而我近期面试的人中,甚至包括5、6年工作时间的,几乎都止步于此。

如果你要想成为一个受欢迎的技术人员,“宽容”是第一步:对需求宽容、对用户宽容、对调用者宽容、对维护者宽容

回到代码,
如果 n 是一个字符串数字,是否可以允许进入处理流程? 如果是,请将经验系数 * 1.1;
如果 n 是一个含有小数的数字,比如 3.000001,是否允许进入处理流程?如果是,请将经验系数 * 1.1;
你的代码中,是否有足够多且清晰的注释? 如果是,请将经验系数 * 1.2;
如果需求调整了 [2, 32] 的范围,你的代码是否可以快速调整,甚至不用调整? 如果是,请将经验系数 * 1.2;

一个参考的半伪代码是:

/*** 获取指定个数的随机整数,整数范围[2,32]* @param  {number}   n 需要的整数个数* @return {array}  返回包含n个整数的数组,如果n非法,则返回空数组*/
function fn(n){//将整数取值范围作为变量提取出来var min = 2, max = 32;//参数校验if(!isThere(n)) return [];if(!typeOK(n) && !isOKStr(n)) return [];n = formatInitNum(n);if(!rangeOK(n, min, max)) return [];//准备一个容器保存结果var arr = [];//循环for(var i=0; i<n; i++){//创建一个随机数var rnd = getRand(min, max);//检查是否重复if( checkInArr(arr, rnd) ){i--;}else{arr.push(rnd);}}return arr;
}

5、精益求精。

恭喜你完成了前四关,如果你在实际开发中,时时刻刻留意这些原则,这足够让你的工作经验扩大化,并给你带来更多的认可,这些认可来自于需求方(或许是那个曾经非常蛮横的产品狗)、用户以及你的同事。但,不因该包括你自己,你还需要更进一步。

宽容是宽以待人,精益求精是严以律己。内外兼修才是高手。

上文做了一点伏笔,现在讨论 getRand 、 checkInArr 到底有哪些讲究:

getRand:

如果你不知道 Math.random() 返回 [0, 1) 的小数,请自行翻阅js手册;
如果你不知道怎么将 [0, 1) 等比放大到任意区间 [min, max),请慎重考虑是否合适做一个码农;

代码是类似这样的: Math.random() * ( max - min + 1 ) + min。[*] 请留意 max-min+1 做了一个向上的扩展,即[min, max+1)
现在的问题是:如果要取整数,是向上取整,还是向下取整?

如果你不假思索,就回答:“都行”,那你需要去面壁思过;
如果你略作停顿,回答: “取整方法会影响边界设置”,那恭喜你有一些进步;
如果你认真思考后,回答:“只能向下取整”,那你已经走在了高手的路上。

是的,只能向下取整,这涉及“随机”概率的分布问题,请为边界值仔细考虑一下。这里不再细述。

checkInArr:

Array.prototype.indexOf 是优先方案,除非你考虑IE6(当然也可以用垫片函数给IE6加上这个indexOf);
用 map 来作为key查询代理,这个方法简单高效,兼容性也非常好;
最不济,自己for循环。

好了,
这些方案有性能差异吗?
差异的分水岭在循环多少次的情况下出现?
不同浏览器表现如何?
能否写一个性能测试脚本,把不同方案跑上 10000 次看看?
创建一个包含 2... 32的数组,然后乱序排序( Array.prototype.sort )后,直接取前 n 个整数,是不是更高效?

还有,
返回的数组要不要控制一下排序?
当 n 大于 31 时,是要返回空数组,还是全部31个数字?
当 n 为 30 的时候,遍历30次(或更多),是不是不如直接随机去掉一个更简单、更高效?

这些,就交给你了。

当你将这五个原则(可用、健壮、可靠、宽容、精益求精)变成你自己的开发习惯,你的工作经验就跟你的工作时间没有关系了。

6、one more thing.

乐于分享,也是一个好同学的必要素质。觉得本文还不错的,请点赞、转载,让更多人受益。
原文在这里:http://www.cnblogs.com/zjcn/p/5358059.html

转载于:https://www.cnblogs.com/zjcn/p/5358059.html

相关文章:

http://bbs.phome.net/showthread-13-45519-0.html

适用于想使用EmpireCMS建站的用户&#xff1b;EmpireCMS零基础的用户&#xff1b;会使用Dreamweaver设计简单表格式模板的用户。教程在线观看&#xff1a; 安装实例教程&#xff1a; http://www.phome.net/doc/ecmsedu/rm/install.htm入门实例教程&#xff1a; http://www.phom…

计算机32位操作系统最大识别到内存,win7 32位系统可以支持多大的内存_win7 的32位系统最大支持多少g的内存...

大家都知道win7系统有32位和64位之分&#xff0c;而两者的安装配置是不一样的&#xff0c;一般4G内存的我们安装64位的系统&#xff0c;但是很多用户不知道win7 32位系统可以支持多大的内存&#xff0c;这就给大家分享一下win7 的32位系统最大支持多少g的内存吧。一、内存和操作…

33个2017年必须了解的iOS开源库

原文 本文翻译自Medium&#xff0c;原作者为 Paweł Białecki 照片版权&#xff1a;&#xff08;Unsplash/Markus Pe&#xff09; 你好&#xff0c;iOS 开发者们&#xff01;我的名字叫 Paweł&#xff0c;我是一个独立 iOS 开发者&#xff0c;并且是 Enter Universe 的作者。…

codeforces 610D D. Vika and Segments(离散化+线段树+扫描线算法)

题目链接&#xff1a; D. Vika and Segments time limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputVika has an infinite sheet of squared paper. Initially all squares are white. She introduced a two-dimensional c…

ubuntu下安装redis

安装reids服务器 apt-get install redis-server 测试是否安装成功 redis-cli 安装phpredis扩展 #wgethttps://github.com/nicolasff/phpredis/downloads #tar -zxvf nicolasff-phpredis-2.1.3-124-gd4ad907.tar.gz # mv nicolasff-phpredis-d4ad907 php-5.3.8/ext/phpredis/ # …

往往存储与计算机硬盘或其他,硬盘是计算机系统中信息资源最重要的存储设备其所存放信息-Read.DOC...

硬盘是计算机系统中信息资源最重要的存储设备其所存放信息-ReadPAGEPAGE 2摘要关键字&#xff1a;磁盘、硬盘、中断13、扩展中断13、分区表、MBR、DBR、DPT、Boot、CMOS、FAT、柱面、磁道、磁头、扇区随着科学技术的不断发展和社会信息化程度的不断提高&#xff0c;电脑已逐渐深…

【Ghost Blog】如何给Ghost Blog添加背景音乐

昨天闲着无聊&#xff0c;就给自己的电脑装了一个Ghost的博客&#xff0c;打开博客的第一眼就被震撼到了&#xff0c;我们可以发现界面十分的简介。。。。上面的都是废话 我们来看一看我我选择的音乐播放器——网易云音乐&#xff0c;这个播放器就是在一个歌曲上点开之后有一个…

AE 动画直接变原生代码:Airbnb 发布开源动画库 Lottie

原文 Airbnb 发布的 Lottie 是一个面向 iOS、Android 和 React Native 的开源动画库。 简单来说&#xff0c;就是可以直接利用 AE 导出的 JSON 动画文件&#xff0c;将其解析为原生代码&#xff0c;并跨平台运行在设备上。 根据身边朋友的试用&#xff0c;通过 Canvas 绘制动画…

纹理贴图的模式设置

1 要对纹理进行任何的操作&#xff0c;必须先使该纹理问当前的active纹理 glGenTextures( 1, &reflectionTexObj );glBindTexture( GL_TEXTURE_2D, reflectionTexObj );glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT );glTexParameteri( GL_TEXTURE_2D, G…

人社局计算机考试报名时间,内蒙古人社局:2016年下半年计算机软件水平考试报名时间通知...

关于做好2016年度下半年计算机技术与软件专业技术资格、翻译专业资格(水平)考试笔译考试报名工作的通知各旗县区人力资源和社会保障局、市直有关单位&#xff1a;根据内蒙古自治区人事考试中心《关于做好2016年度下半年计算机技术与软件专业技术资格(水平)考试报名工作的通知》…

即时通讯下数据粘包、断包处理实例(基于CocoaAsyncSocket)

来源&#xff1a;涂耀辉 www.jianshu.com/p/2e16572c9ddc 如有好文章投稿&#xff0c;请点击 → 这里了解详情 前言 本文旨以实例的方式&#xff0c;使用CocoaAsyncSocket这个框架进行数据封包和拆包。来解决频繁的数据发送下&#xff0c;导致的数据粘包、以及较大数据&#x…

linux下 为自己编写的程序 添加tab自动补全 功能

linux下 为自己编写的程序 添加tab自动补全功能 入门 complete 在我的tmp下随便写了一个a.sh, 为他补全edit /etc/bash_completion.d/foo_foo() {local cur prev optsCOMPREPLY()cur"${COMP_WORDS[COMP_CWORD]}"prev"${COMP_WORDS[COMP_CWORD-1]}"opts&quo…

笔记本电脑(Windows7)实现无线AP

使用环境&#xff1a;出差两个同事住一个房间、网线不够用、没有路由器 1、在windows命令窗口中运行以下命令 netsh wlan set hostednetwork modeallow netsh wlan set hostednetwork ssidOPEN key1234567890 netsh wlan start hostednetwork 命令解释&#xff1a;在笔记本插有…

华北电力大学计算机图形学实验报告,华北电力大学计算机图形学实验报告分析.doc...

华北电力大学计算机图形学实验报告分析科 技 学 院课程设计(综合实验)报告( 2013 -- 2014 年度第 2 学期)实验名称 OpenGL基本图元绘制实验课程名称 计算机图形学||专业班级&#xff1a;计算机11K1 学生姓名&#xff1a;曲强学 号&#xff1a;111909010118 成 绩&#xff1a;指…

Fastlane 入门实战教程从打包到上传iTunes connect

有关神器 Fastlane 持续集成\部署的文章网上挺多,本文定位是入门教程,针对 iOS 应用的持续部署,只需一条命令就可实现从 Xcode 项目到 编译\打包\构建\提交审核 文章稍微有点长,涵盖内容为:fastlane 简介\安装\配置 Snapshot 截图 XCTest 一键上传App Store 说明:本文将 App…

double int char 数据类型

贴心的limits... 测试代码&#xff1a; #include <iostream> #include <stdio.h> #include <limits> #include <math.h> using namespace std;int main() {//double 有效数字16位double test3 1.2345678912345678e17;printf("%.17lf\n", te…

开发工具Drawscript

在Mac App Store上有一款iOS开发工具PaintCode(MAC App Store地址)。它可以通过矢量绘图来绘出你想要生成的用户控件界面&#xff0c;然后由PaintCode来动态生成iOS & OSX绘制代码。这样&#xff0c;你在drawRect函数中就只要粘贴拷贝就能生成自己想要的图案了。奈何&#…

悉尼大学计算机研究生学制,悉尼大学研究生学制

澳大利亚悉尼大学具有丰富的研究生专业课程&#xff0c;学制安排一般在1-2年时间。悉尼大学硕士申请要求要求非211大学申请者&#xff0c;暂不需清华认证 (毕业证、学位证、成绩单)入学要求&#xff1a;工程类专业(Engineering,IT)Master of Professional Engineering985/211学…

2016.04.09 使用Powerdesigner进行创建数据库的概念模型并转为物理模型

2016.04.09 使用Powerdesigner进行创建数据库的概念模型并转为物理模型 2016-04-09 21:10:24 本文原创受版权保护&#xff0c;严禁转载。 请大家不要用于商业用途,支持正版,大家都是做软件的,知道开发一套软件实属不易啊&#xff01; 今天看到了一个很有趣并且很有用的辅助…

ESTabBarController

为什么要使用? 在开发工作中&#xff0c;我们可能会遇到需要自定义UITabBar的情况。例如&#xff1a;改变文字样式、添加一些动画效果、设置一个比默认更大的样式等等&#xff0c;以上需求如果只通过UITabBarItem往往很难实现。 有了ESTabBarController&#xff0c;你可以轻松…

iPhone App开发导航条(Navigation Bar)素材PSD下载

不管是iPhone还是Android的应用App界面基本上最上方都会有个导航条&#xff08;Navigation Bar&#xff09;。于是我决定创建此页面整理收集所有好看的适合在iPhone App应用开发中使用的导航条素材PSD文件&#xff0c;并附有下载链接供需要在自己的iPhone App应用开发中需要使用…

点歌服务器工作原理,KTV点歌系统方案概述

《KTV点歌系统方案概述》由会员分享&#xff0c;可在线阅读&#xff0c;更多相关《KTV点歌系统方案概述(7页珍藏版)》请在人人文库网上搜索。1、一)目前点歌系统的主流方式目前&#xff0c;可以实现的KTV系统的点歌方式很多&#xff0c;但是可以主要归类为以下两大方式&#xf…

Xcode快捷键及代码块

2017-02-16 吴白 CocoaChina手指在键盘上飞速跳跃,终端上的代码也随着飞舞,是的这确实很酷。优秀的程序员总是这么一群人&#xff0c;他们不拘于现状&#xff0c;不固步自封&#xff0c;他们喜欢新奇的事&#xff0c;他们把自己发挥到极致。 指法攻略 放下您钟爱的鼠标吧&#…

使用logrotate管理nginx日志文件

本文转载自&#xff1a;http://linux008.blog.51cto.com/2837805/555829 描述&#xff1a;linux日志文件如果不定期清理&#xff0c;会填满整个磁盘。这样会很危险&#xff0c;因此日志管理是系统管理员日常工作之一。我们可以使用"logrotate"来管理linux日志文件&am…

c 异步中断服务器连接,异步连接和断开与epoll(Linux)

我有一个“完整”的答案在这里以防别人正在寻找这样的&#xff1a;#include #include ........int retVal -1;socklen_t retValLen sizeof (retVal);int status connect(socketFD, ...);if (status 0){// OK -- socket is ready for IO}else if (errno EINPROGRESS){struc…

java获取真实ip

在JSP里&#xff0c;获取客户端的IP地址的方法是&#xff1a;request.getRemoteAddr&#xff08;&#xff09;&#xff0c;这种方法在大部分情况下都是有效的。但是在通过了Apache&#xff0c;Squid等反向代理软件就不能获取到客户端的真实IP地址了。 如果使用了反向代理软…

卡片式设计的最佳实践分享

2017-02-17 三达不留点gpj CocoaChina卡片本质上是一个简单的信息容器&#xff0c;信息量有限&#xff0c;但设计干净整洁。现如今&#xff0c;在保证界面具有优秀可用性的同时&#xff0c;卡片式的设计甚至成为了平衡界面美学的默认做法。作为最初由Pinterest和Facebook这样的…

Arduino 各种模块篇 光敏感应器 简易光敏

这一款是非常简单的光敏感应器 简单到&#xff0c;只对一定光强度有信号感应&#xff0c;输出TTL电平。 此款也是用电位器来调节的。 都是这么简单。 过段时间我为大家奉上数字版的光敏传感器。 ————————————————————————分割线———————————…

vb打开服务器excel文件路径,咨询下VB如何打开EXCEL文件并将内容显示在listbox中

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 Adodc DataGrid 控件直接连接 Excel 表格&#xff0c; 把 Excel 表格当成数据库。 在窗体中画出 Adodc1 和 DataGrid1 两个控件&#xff0c; 不做任何属性设置&#xff0c;只管大小和位置。 ------------------------------…

iOS动画进阶 - 手摸手教你写ShineButton动画

移动端访问不佳&#xff0c;请访问我的个人博客 前段时间在github上看见一个非常nice的动画效果&#xff0c;可惜是安卓的&#xff0c;想着用Swift写一个iOS版的&#xff0c;下下来源代码研究了一下&#xff0c;下面是我写代码的心路历程 先上图和demo的地址 分析动画过程 刚开…