js如何获取从今天起五天内日期的js将字符串转为日期

7.2K329 条评论分享收藏感谢收起imgcache.qq.com/qcloud/la/demo-source/qcloud-applet-album.zip下载,也可以从腾讯云团队的 Github 仓库拉取。我推荐从 Github 仓库拉取,这样可以及时获取最新的代码。git clone 最终,我们会得到类似这样的文件目录。简单解释下目录结构:applet(或app): 「小相册」应用包代码,可直接在微信开发者工具中作为项目打开。server: 搭建的Node服务端代码,作为服务器和app通信,提供 CGI 接口示例,用于拉取图片资源、上传图片、删除图片。assets:「小相册」的演示截图。源码下载完成之后,我们打开微信 web 开发者工具,新建项目「小相册」,选择目录applet(或app)。「小相册」源码分析在进行部署之前,我们来简单分析一下「小相册」的具体代码。毕竟只看效果不是我们的目的,我们的目的是以「小相册」为例,了解如何开发小程序并与服务端进行交互。「小相册」包含一个描述整体程序的 app 和多个描述各自页面的 page。主程序 app 主要由三个文件组成,分别是 app.js(小程序逻辑)、app.json(小程序公共设置)和 app.wxss(小程序公共样式表),其中前两个为必备文件。config.js 文件中包含了一些部署域名的设置,现在不用管。在 pages 目录下,有两个 page 页面,分别是 index 和 album。页面结构算是比较简单的,其中 index 是小程序启动时默认进入的页面。每个页面下,至少要有 .js(页面逻辑)和 .wxml(页面结构)两个文件,.wxss(页面样式表)和 .json(页面配置)文件为选填。你可能注意到了,这些文件的文件名与父目录的名称相同。这是微信官方的规定,目的是减少配置项,方便开发者。接下来我们以 index 页面为例做简单的解释。index.wxml 是这个页面的表现层文件,其中的代码非常简单,可以分为上下两大部分。&view&
&view class="page-top"&
&text class="username"&恭喜你&/text&
&text class="text-info"&成功地搭建了一个微信小程序&/text&
&view class="page-btn-wrap"&
&button class="page-btn" bindtap="gotoAlbum"&进入相册&/button&
&view class="page-bottom"&
&text class="qr-txt"&分享二维码邀请好友结伴一起写小程序!&/text&
&image src="../../images/qr.png" class="qr-img"&&/image&
&image src="../../images/logo.png" class="page-logo"&&/image&
页面的演示效果如下: (二维码自动识别)我们看到,页面上有一个“进入相册”的按钮。正常理解,点击后该按钮后我们就可以进入相册了(这不废话嘛)。那小程序背后是怎样实现该操作的呢?在 index.wxml 中,我们发现对应的 button 标签上定义了一个 bindtap 属性,绑定了一个叫做gotoAlbum 的方法。而这个方法可以在 index.js 文件中找到。事实上,文件中也只定义了这一个方法,执行的具体动作就是跳转到 album 页面。Page({
// 前往相册页
gotoAlbum() {
wx.navigateTo({ url: '../album/album' });
album.js 页面中编写了程序的主要逻辑,包括选择或拍摄图片、图片预览、图片下载和图片删除;album.wxml 中三种视图容器 view、scroll-view、swiper均有使用,还提供了消息提示框 toast。具体方法和视图的实现请查看。所有的这些功能都写在 Page 类中。lib 目录下提供了小程序会用的一些辅助函数,包括异步访问和对象存储 COS 的 API。总的来说,和微信官方宣传的一样,在开发者工具下进行小程序的开发,效率确实提高了很多,而且有很多微信提高的组件和 API。所以,在开发速度这点上的体验还是非常爽的。另外,由于「小相册」需要使用诸多云端能力,如图片的上传和下载,我们还需要进行服务器端的部署和设置。具体请看接下来的步骤。第三步:云端部署 server 代码虽然服务端的开发不是本文的重点,但是为了全面地体验「小相册」的整个开发部署流程,我们还是有必要了解服务端的部署,这里我们使用的是腾讯云。如果你想更爽一点,那么可以选择腾讯云官方提供的小程序云端镜像。「小相册」的服务器运行代码和配置已经打包成腾讯云 CVM 镜像,可以。可谓是一键部署好云端。如果你以前没有使用过腾讯云,可以选择免费试用(我已经领取了 8 天的个人版服务器),或者以优惠的价格购买所需的服务。你也可以选择将「小相册」源码中的server文件夹上传到自己的服务器。第四步:准备域名和配置证书如果你已经有腾讯云的服务器和域名,并配置好了 https,那么可以跳过第 4-6 步。在微信小程序中,所有的网络请求受到严格限制,不满足条件的域名和协议无法请求。简单来说,就是你的域名必须走 https 协议。所以你还需要为你的域名。如果没有域名,。由于我们没有收到内测,也就暂时不用登录微信公众平台配置通信域名了。第五步:Nginx 配置 https微信小程序云端示例镜像中,已经部署好了 Nginx,但是还需要在 /etc/nginx/conf.d 下修改配置中的域名、证书、私钥。请将红框部分换成自己的域名和证书,并且将 proxy_pass 设置为 Node.js 监听的端口,我的是 9993。配置完成后,重新加载配置文件并且重启 Nginx。sudo service nginx reload
sudo service nginx restart
第六步:域名解析我们还需要添加域名记录,将域名解析到我们的云服务器上,这样才可以使用域名进行 https 服务。在腾讯云注册的域名,可以直接使用来添加主机记录,直接选择上面购买的 CVM。解析生效后,我们的域名就支持 https 访问了。第七步:开通和配置 COS由于我们希望实现动静分离的架构,所以选择把「小相册」的图片资源是存储在 COS 上的。要使用 COS 服务,需要登录 ,然后在其中完成以下操作。点击创建 Bucket。会要求选择所属项目,填写相应名称。这里,我们只需要填上自己喜欢的 Bucket 名称即可。然后在 Bucket 列表中,点击刚刚创建的 Bucket。然后在新页面点击“获取API密钥”。 弹出的页面中包括了我们所需要的三个信息:唯一的 APP ID,一对SecretID和SecretKey(用于调用 COS API)。保管好这些信息,我们在稍后会用到。最后,在新的 Bucket 容器中创建文件夹,命名为photos。这点后面我们也会提到。第八步:启动「小相册」的服务端在官方提供的镜像中,小相册示例的 Node 服务代码已部署在目录 /data/release/qcloud-applet-album下。进入该目录,如果是你自己的服务器,请进入相应的文件夹。cd /data/release/qcloud-applet-album
在该目录下,有一个名为 config.js 的配置文件(如下所示),按注释修改对应的 COS 配置:module.exports = {
// Node 监听的端口号
port: '9993',
ROUTE_BASE_PATH: '/applet',
cosAppId: '填写开通 COS 时分配的 APP ID',
cosSecretId: '填写密钥 SecretID',
cosSecretKey: '填写密钥 SecretKey',
cosFileBucket: '填写创建的公有读私有写的bucket名称',
另外,cd ./routes/album/handlers,修改 list.js,将 const listPath 的值修改为你的Bucket 下的图片存储路径。如果是根目录,则修改为 '/'。当前服务端的代码中将该值设置为了 '/photos' ,如果你在第七步中没有创建该目录,则无法调试成功。小相册示例使用 pm2 管理 Node 进程,执行以下命令启动 node 服务:pm2 start process.json
第九步:配置「小相册」通信域名接下来,在微信 web 开发者工具打开「小相册」项目,并把源文件config.js中的通讯域名 host 修改成你自己申请的域名。将蓝色框内的内容修改为自己的域名然后点击调试,即可打开小相册Demo开始体验。最后提示一点,截止目前为止,微信小程序提供的上传和下载 API 无法在调试工具中正常工作,需要用手机微信扫码预览体验。但是由于没有内测资格,我们暂时是没办法体验了。嗯,就这点不够爽,没有内测邀请。我的同事还写了另外3个demo的「」,大家也可以看看。 (二维码自动识别)赞同 1.6K165 条评论分享收藏感谢收起认真负责的告诉你,不管是什么快递,平邮也好包邮也好,只要有丢失破损之类的,不要跟快递扯皮,就一句话,说出你的合理要求,问他们答不答应,只要不答应,有个网站叫中国邮政管理局,百度一下,然后如实填个投诉,然后坐等就行了,有时候比较慢,要等十几天,有时候三五天就OK,相信我,你会看到快递公司的脸从无赖一秒变跪舔。&br&&br&本宫撕各家快递和淘宝卖家从未落败过,都有人建议我搞一个维权中介了。&br&&br&————————————————&br&昨晚随手写了这个答案,刚才上来一看赞了5K多,私信也爆了,着实有点慌张……&br&&br&有同学来问可以转载不,本宫表示:随便转,转的越多越好。&br&因为,真的有好多好多人不知道有这个网站的存在,多到什么程度呢?就我前两天投诉中国邮政平邮丢包裹,拿到了一千块钱赔偿以后,那个邮政工作人员嬉皮笑脸的问我,是通过什么渠道投诉的?往哪里投诉的?&br&原来领导只告诉他们务必解决马上解决,然而他们不知道为什么领导这么在意这个投诉,我说了之后,他还问我中国邮政管理局是负责什么的……&br&也就是说,连中国邮政的工作人员都不知道这个网站。&br&恩,还有我一个同事大姐,目睹我把百世汇通撕到赔偿我全部损失并且向总部缴纳几千块钱罚单后告诉我,如果是她,就认栽了,因为她从不知道有中国邮政管理局这么个存在……&br&所以,大家转吧,权当安利这个网站了。&br&&br&————————————————&br&至于撕淘宝店家,矛盾点无非就是你要退货他不给退,或者他给你退但是不给你邮费么,你就点击申请退款,然后坐等店家点拒绝,然后你点击申请淘宝介入,然后照片截图什么的举证,就坐等卖家打电话求情咯,反正我这么做木有失手过……&br&总之,撕快递找中国邮政管理局,撕淘宝店主找淘宝店小二介入,就对了 ( o??o? ) get!&br&吃土少女们,奋起反抗吧!\(◎o◎)/!&br&&br&至于有同学说的以为退货卖家本来就不给邮费,分什么情况,如果是商品质量问题,或者与标注尺寸不符,卖家就应该给邮费,如果是你自己的问题,比如不喜欢跟想象的不一样什么的,就别跟人家要运费啦,这种人家不跟你要运费就不错了是吧……&br&&br&另外,快递赔偿什么的,拿回损失就够了,不要狮子大开口,咱们得讲理,是吧……&br&&br&我还是附上网址吧……&br&&a href=&//link.zhihu.com/?target=http%3A//sswz.spb.gov.cn& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&申诉网站&/a&&br&:一直留言想看撕哔实录的同学们移步专栏&a href=&http://zhuanlan.zhihu.com/nawuxika/& class=&internal&&&span class=&invisible&&http://&/span&&span class=&visible&&zhuanlan.zhihu.com/nawu&/span&&span class=&invisible&&xika/&/span&&span class=&ellipsis&&&/span&&/a&
认真负责的告诉你,不管是什么快递,平邮也好包邮也好,只要有丢失破损之类的,不要跟快递扯皮,就一句话,说出你的合理要求,问他们答不答应,只要不答应,有个网站叫中国邮政管理局,百度一下,然后如实填个投诉,然后坐等就行了,有时候比较慢,要等十几…
&p&&b&一、经济层面:&/b&&/p&&p&&b&“信息化”的这一刀,晃悠半天,最终只能砍在资本家自己身上:&/b&&/p&&p&一边是“信息化大幅提高企业经营效率,产品大量涌入市场”,产品价格大幅降低;&/p&&p&另一边是“信息化大量挤占就业岗位,失业人口增加”,社会整体消费能力大幅降低;&/p&&p&&b&两边一“共振”,结果是什么?&/b&&/p&&p&&br&&/p&&p&&b&“只有活人,才能为我的产品买单”——这是每个资本家都必须面对的现实。&/b&&/p&&p&&br&&/p&&hr&&p&&b&二、“小概率事件”不具有普遍意义:&/b&&/p&&p&“低端会计被淘汰”的论调,最主要的一个论据是“大企业如何如何”。&br&&br&然而,姑且不论“是否所有企业都是大企业”、“大企业是否仍然是今后的主流”,就谈一点:&br&&b&讨论贫富问题,不能只盯着几个超级富豪;讨论财务问题,不能只围绕几个超级企业——当多数人为一套房奋斗时,你跟我说“家里已经有9个菲佣了,考虑家庭信息化后,裁掉两个”?&/b&&br&&br&事实上,很多企业都没按照会计准则做账,核算问题都没解决好——地基都一塌糊涂。&br&&br&换个角度讲,&b&对于随便哪个大企业,如果有心缩编,缩个20%乃至30%完全没问题——本来水分就多,“信息化”也就是个由头&/b&。&/p&&p&&br&&/p&&hr&&p&&b&三、口号的“可爱之处”在于:它人畜无害,不能当真——毕竟,“历史的洪流”在没有“洪”出来之前,谁都不知道是怎样:&/b&&/p&&p&&br&&/p&&p&一度,“克隆”、“转基因”都是“历史洪流”——很多情况下,你以为打开的是一个普普通通的小快递包裹,其实它是个炸弹,还有可能含有炭疽。&/p&&p&&br&&/p&&p&再看历代官员人口比例:&/p&&figure&&img src=&https://pic2.zhimg.com/v2-c6aa6a999d6ebdbc6c39_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&527& data-rawheight=&349& class=&origin_image zh-lightbox-thumb& width=&527& data-original=&https://pic2.zhimg.com/v2-c6aa6a999d6ebdbc6c39_r.jpg&&&/figure&&p&(图片来自互联网)&/p&&p&现代的“官民比”比清朝更大——请你告诉我:&b&真正的“历史的洪流”是什么?&/b&&/p&&p&你再回答我:&b&信息化越来越发达,为什么结果却是反过来——而且从古至今,从来就没有“稍稍扭转”过?&/b& &/p&&p&&br&&/p&&p&&br&&/p&&hr&&p&&b&四、被取代的究竟是什么?&/b&&/p&&p&&br&&/p&&p&&b&1、被取代的是“职业”吗?&/b&&/p&&p&&br&&/p&&p&&b&试问:&/b&&/p&&p&&b&哪个秘书被Word淘汰了?&/b&&/p&&p&&b&哪个销售人员被CRM淘汰了?&/b&&/p&&p&&b&哪个管理班子被ERP淘汰了?&/b&&/p&&p&&br&&/p&&p&&b&人类历史上,是否存在这样一种“工具取代职位”的先例?&/b&&/p&&p&&b&开马车是一个人,开火车是一个人,开飞机居然要两个人……就算是高达,不也还得有一个驾驶员?&/b&&/p&&p&&b&即使是“低端的工作”,请问:有哪些保安被“监控摄像头”淘汰了?&/b&&/p&&p&&b&一座大门一个门卫&/b&&/p&&p&&b&一片区域一个保安&/b&&/p&&p&&b&——即使有了监控摄像头,也只不过是换个场地“监视”而已。&/b&&/p&&h2&&b&宵小之徒们害怕摄像头,可不是怕摄像头本身,而是怕摄像头背后的安保队伍——这些安保队伍可都是由一个个鲜活的人构成,你去淘汰谁?除非哪天你能雇佣到变形金刚......&/b&&/h2&&p&好,你说“一列火车能淘汰2000辆马车、2000个马车夫”,我要说的是:马车夫是自雇人士,一列火车可不止是一个司机,还有一堆后勤人员,火车背后的公司还有不知道多少管理人员、打杂人员。&br&&br&在交通业的大框架下,只是“转移了阵地”,“直接”和“间接”的区别而已,&b&只是对某种职责的重新定义而已&/b&——&b&而且,不要忘了,这仅仅只是体力劳动的情况。&/b&&/p&&p&&b&脑力劳动彼此间的界限不像大家想象的那么“泾渭分明”,很多地方都是共通的——到最后,我们会发现“应变能力才是最重要的”。&/b&&/p&&p&&b&从这种角度讲,“职业规划”也算是彻头彻尾的伪命题——谁能保证一辈子干同一件事,谁愿意一辈子干同一件事?所以,大方向定好之后,细的分支方面,就别去费那个心思规划来规划去了,人算不如天算。&/b&&/p&&h2&&b&“职业间的区别越来越不明显”,这才是真正的趋势——但这不属于“取代”。&/b&&/h2&&p&&br&&/p&&p&思考:&/p&&p&世界杯已经用上了VAR技术,那么:&/p&&p&现在请你数一数:一场足球赛共有几个执法裁判?&/p&&p&然后判断:&/p&&p&第一、较之以往,裁判总数是增多还是减少?&/p&&p&第二、VAR究竟是用来“杀气腾腾地取代主裁、边裁”,还是用来提高“判罚准确性”?&/p&&p&&br&&/p&&p&&br&&/p&&p&&br&&/p&&p&&br&&/p&&p&&b&2、被取代的是“庸人”吗?&/b&&/p&&p&&b&“人性的弱点”足以保证庸人的“生生不息、绵延不绝”——“良币赶跑劣币”并不常见,“劣币驱逐良币”反而比比皆是。&/b&&/p&&p&&br&&/p&&p&&br&&/p&&p&&br&&/p&&p&&br&&/p&&p&&b&3、“效率”的本质是什么?&/b&&/p&&p&&b&是让更多的人有更多的时间偷懒。&/b&&/p&&p&&br&&/p&&p&然而:&/p&&p&不管效率怎么高,至少最前端的“信息录入”少不了; &/p&&p&不管效率怎么高,仍然必须有人懂会计——就像“不管医疗设备多么先进,仍然必须有高水平的医生”。&/p&&p&&b&“信息化”只是“人类思维片段”的外在表现形式——它并非“人类本身”。&/b&&/p&&p&&br&&/p&&p&&br&&/p&&p&再来看看我们现在搞的“信息化”:&/p&&p&&b&减少了财务人员、减少了其他部门的人员---&增加了运维人员。&/b& &/p&&p&&br&&/p&&p&而且:&/p&&p&A:&/p&&p&If 系统不ok Then 增加运维人员,增加“衔接运维和财务”的人员,增加“衔接运维和销售”的人员,甚至增加一整个部门来辅助对账......&br&&/p&&p&Goto A&/p&&p&Else &/p&&p&减少运维人员,减少所有当初为了“打开新局面”而新增的人员——狡兔死,走狗烹&/p&&p&EndIf&/p&&p&&br&&/p&&p&在高度集权的垄断型央企,你或许可以强推,但是,尚且还有“因领导水平不够而最终失败”的可能——更不用说&b&你去“诸侯林立”的中小企业,谁会为了你的“信息化”去赔上自己的饭碗?&/b& &b&也难怪多数企业的“信息化”步履蹒跚。&/b&&/p&&p&&br&&/p&&h2&&b&“让一帮人取代另一帮人”,这不是“效率”,这是“以效率为幌子的争权夺利”——古往今来,多少打着“效率”幌子的“改革”,最终都沦为了“饕餮们的盛宴”。&/b&&/h2&&p&&br&&/p&&p&&br&&/p&&p&&br&&/p&&p&&b&4、“高端取代低端”看似顺理成章,其实“孰高孰低”尚未可知:&/b&&/p&&p&&br&&/p&&p&何谓“低端”?&/p&&p&一曰“基础工作含金量低”:&/p&&p&“狱事莫重于大辟,大辟莫重于初情,初情莫重于检验”——这个“检验”是最烧脑的,当然也是最“低端”的,但&b&“检验”二字恰恰就是“司法公正”的根基&/b&。&br&&br&&b&一个公司,琢磨基础工作的人必须在90%以上&/b&——否则,人人都想“高瞻远瞩”、“运筹帷幄”,个个都想当“方面大员”,你就等着瞧好戏吧。&br&&br&你的公司老爱出状况,&br&不是因为你招的“总”们不行——实际上他们在“高屋建瓴”方面完全能够胜任;&br&&br&&b&一切的根本,恰恰在于:多数人并不关心基础工作。&/b&&br&&br&为什么不关心基础工作?&br&&br&明面的理由是:认为基础工作“低端”、“不值钱”;&br&真正的原因恐怕是:&br&&b&要把基础工作做好,那真是太难了,而自己对基础工作了解不深、钻研不透,完全就是不知所谓——“嘚啵嘚啵”既能忽悠住老板,还能展现自己的“目光远大”,更不用花多少成本,所需要的只是“道听途说”和“人云亦云”。靠“嘚啵嘚啵”,就能轻易赢得高薪高位,如此“高性价比”,岂不美哉?&/b& &b&“高瞻远瞩”是最容易的——人人都知道要“超越自我”、“追求卓越”。&/b& &b&可仅仅凭着“高瞻远瞩、目光远大”,没有一环紧扣一环的、扎扎实实的“细节运作”,是没可能有所作为的——尤其是当你“初始资源=0”的时候。&/b&&br&&br&(详细论述,请见 &a href=&https://www.zhihu.com/question//answer/?group_id=141888& class=&internal&&怎么规划自己的会计/财务道路?&/a&)&br&&/p&&h2&&b&“狱事莫重于大辟,大辟莫重于初情,初情莫重于检验”——这句话同样适用于会计以及其他任何职业,与诸君共勉。&/b&&/h2&&p&&br&&/p&&p&&br&&/p&&p&&br&&/p&&p&二曰“职业含金量低”:&/p&&p&&br&&/p&&p&哪个行当是绝对景气的?很多行当,其兴也勃焉、亡也忽焉,会计还是比较“长盛不衰”的。&br&&br&一个职位能做到什么程度,取决于如下:&br&&br&a&b&、职位本身的权责设定&/b&&br&&br&炊事兵和装甲兵,确实不可相提并论,但即使如此,&b&也只是在“具体作战”层面上讲&/b&;&b&而到了“士兵日常生活”这个层面&/b&,坦克、火箭筒就是不能当饭吃,一队好的炊事兵,能让士兵的总体幸福指数爆棚——更重要地,什么叫“士兵的幸福指数”,那就是“&b&士气&/b&”:&/p&&p&“士气”意味着什么,大家肯定比我更清楚;&/p&&p&一个企业,人事、财务、销售、采购、技术,基本上是一样权重的,硬要分高低,也就是0.8和0.9的差异——&b&你觉得,“吏礼户工刑兵”哪个更重要?&/b&&br&&br&有些老板,特喜欢分“&b&前、后勤&/b&”,然而:&br&区分“前勤”、“后勤”的目的:&br&&b&是为了让你更好地根据人员特点安排分工,以便他们在不同的“层面”发挥作用&/b&&br&&br&而不是:&br&“因为&b&自己的管理水平有限,硬是把一群原本能创造附加值的人打入冷宫&/b&,爹不亲娘不爱”;&br&更不是让你&b&以此划分“远近亲疏”&/b&。&br&&br&之所以很多企业只重视销售,是因为&b&很多老板只会“搞人际关系”、“再来一瓶”这套,而“深耕细作”完全不会&/b&——遗憾的是,&b&真正能拖累一个企业发展的往往不是销售,而是这些老板口中的“后勤人员”。&/b&&br&&br&&br&君不见:&br&&br&不懂人事的,以为招个“打杂的”就能对付过去的——届时,&b&员工工资算不准、社保漏交&/b&,你就准备好一打红包等着给劳动局送礼吧;&br&&br&不懂行政的,以为行政就是端茶送水、复印扫描——届时,&b&员工请购一个圆珠笔,都得等十天半月&/b&,背后骂的可不是“行政”,是你这个老板;&br&&br&不懂财务的,认为财务就是“开票、收钱、付钱”——到时候&b&一堆烂账,一个经营数据,没好几天根本拿不下来&/b&;&br&因为“不懂”,所以请的人素质低,往往怕被老板责难,&b&会为了凑一个“让老板看上去舒服”的数据而各种倒挤、拼凑,却不会从改善流程上着手&/b&;&br&还是因为“不懂”,&b&老板非要另搞一套系统来获得数据,却忘了财务本该是“数据的大本营”&/b&——到时候光&b&一个销售数据,就有两三个部门出,两三个版本&/b&,然后月底了,拼了老命“核对”。&br&&br&而且你还会发现一个有意思的现象:&b&那些不被重视的部门,往往人越招越多&/b&,为啥?老板觉得“打杂的很便宜”。&br&&br&可你不要忘了:&br&&b&10*2远大于3*4:&/b& &b&混日子的人永远“没时间做正事”,却永远“有时间搞关系”&/b&——到时候关系网盘根错节,到处“抱团害人”,你想清理都清理不下去......&b&蛆多了就要吃活人啊&/b&;&br&&br&&b&你的钱,最后没有花在你“重视”的部门上,却都花在了你“不重视”或者“不懂”的部门上——这是不是一种讽刺?&/b& &/p&&p&&br&&/p&&p&&b&b、职位执行人本身的才干&/b&——这个就不说了,李景隆和朱棣,都是元帅级别的,前者攒了两回50万,还是一败涂地。&br&&br&c&b&、为这个职位授权的人的见识、才干&/b&——同样是“主公”,刘备和刘璋是两个档次,曹操又比刘备高一个档次&br&&br&d&b&、职位所处企业的整体环境和企业主的野心&/b&&br&土地主只需要看门狗,但是,即使是看门狗,也仍然是有“优、劣”的;&br&&br&当然,在一般情况下,“优秀”和“低劣”,从表面上看,确实也是看不出大的区别的——&b&所谓的“人才”,往往是“危难之际,方显英雄本色”,平时是看不出的&/b&(呱唧呱唧对喷口水的面试,那基本就是儿戏性质的);&br&&br&所以:&br&&br&一者,企业主若是只想做一只“井底之蛙”,他就非但不喜欢“优秀”,反而非常忌讳“优秀”——&b&高个儿来了,自己就显得矮小了&/b&;&br&&br&二者,有些企业主总是“不见棺材不落泪”,非等出了“大事”了,才想起“优秀”的“好处”:&br&&br&这里面,&br&一个是老板们的投机心理;&br&另一个就是:优秀者的“优秀”往往体现在“解决问题”上,而不是给予感情关怀、私人关怀,所以用起来很不舒心——对于很多老板来说,反而会很硌手,为什么?&b&刀剑能用来杀敌建功,拿来挠痒痒、擦屁股就要出事了&/b&。&br&&br&e、&b&职位绩效的可衡量程度&/b&——保洁员的劳动成果最好衡量,算是够低端够cheap了吧?可现在让一些人招个保洁员,也有看走眼的,更不要提里面的“乌烟瘴气”了。&br&&b&如果这个职位是完完全全的脑力劳动,再详细的绩效指标,也是难以衡量的。不可衡量,就意味着容易走入“说你行你就行”的陷阱。&/b&&br&&br&综合起来讲,&br&现在我们国家的状况就是:多数人目标只是“&b&原地踏步&/b&”就好,“原地踏步”的话,短跑运动员、长跑运动员全都不能胜任,也根本看不出他们的水平高低——&b&你是不是刘翔,又有什么关系呢?&/b&但你不能说“跑步运动员整体不行”。&/p&&p&&br&&/p&&p&&br&&/p&&p&三曰“门槛低”:&br&&br&a、先谈一个“&b&职位影响力&/b&的上下限”的问题——&br&假设标准值为50,也就是“安守本分”:&br&&br&有的职位,依据职位执行人的水平高低,可以是:20~80;&br&有的职位是:30~70&br&有的职位:40~60&br&&br&差别仅此而已——&b&如果老板的管理水平还在50以下的话,它就会无意识中把超过50的部分强制摁下去,这时候,上下限幅度越宽的职位,综合评价就会变得越低,实际上是老板不懂管理的结果。&/b&&br&&br&“门槛低”指的是:职位影响力幅度很宽,完全因人而异。&br&&br&b、所谓的“门槛低”,很多时候还是指:自己对于这个职业的&b&“认知门槛低”&/b&:&br&&br&自己只是想当然地觉得“足够了解某个职业”了,然后以“&b&自己偏狭的认知”&/b&来代替“职业真正的内涵”,最后简单粗暴地得出了“某职业门槛低”的结论——那么,按此逻辑:&b&事实上,世上“门槛最低”的职业,恐怕就是“老板”了&/b&,不是吗?&br&&br&我国目前任何职位都是还处于“成型”阶段,而且&b&一个企业越不重视某类职位,最终阻碍它更上一层楼的恰恰就是这类职位。&/b&&br&&br&从逻辑上讲,经营者就不能说这类职位“本来就不重要”——恰恰是经营者的故意不重视或者无知,导致其&b&难以发挥真正的作用&/b&,所以罪魁祸首还是经营者自己,而不是这个职业。&br&&br&&b&c、请问,您要“门槛”干什么?准备收银子吗?&/b& &b&我们是吃五谷杂粮的,不是吃“门槛”的——你买一样东西,不买它的功效,难道专门买它的“门槛”?&/b&&/p&&p&&br&&/p&&p&&br&&/p&&p&&br&&/p&&p&&br&&/p&&p&&b&5、被取代的究竟是什么?&/b&&/p&&p&&br&&/p&&p&以“半路猝死”的“ERP取代会计”为例:&/p&&p&记得好多年前,office刚兴起的时候,就有人喊着“office取代秘书”——可现在,秘书减少了吗?&br&&b&那些老总、老板们,可不会因为有个好用的办公软件,就“纡尊降贵”自己亲自来做文案、写演讲稿、安排会议,哪怕“亲自做”只占用很少的时间&/b&——最终,&b&Office只是让秘书要学的东西变得更多、要关注的东西变得更多了&/b&,仅此而已。&br&&br&若干年前,OA出现的时候,有人喊着“OA提高办公效率,降低企业内部行政成本”;&br&然后,ERP来了,几乎同样的一拨人又高喊“ERP提高管理效率,降低用人成本”——现实究竟如何,想必大家也清楚:&b&管理本就混乱的,并不会因为简单上了ERP就变得高效起来&/b&。&br&&br&&b&上ERP,实质上,反而就是提高成本的&/b&,因为:&br&&br&1、你要雇佣一大拨运维人员管理这套庞大的系统;&br&2、本来财务和其他部门是直接沟通的,现在白白增加了一整套的IT节点,等于增大了企业内部的沟通成本,具体表现在:&br&
a 本来只要给销售人员和老板普及财务知识,现在还要给IT人员“普法”,痛苦程度翻个倍不止;&br&
b 有些IT部门,往往特别善于“争权夺利”,然而权力到手后,就变成了“卡脖子”的资本,有时候往往为了解决一个小的技术问题,就要从上到下反复走流程申请——&b&直接造成“走流程”的时间比“小修小改”还要多得多&/b&......&br&c 有的IT人员既不了解销售,又不了解财务,更不懂公司管理——&b&到时候不管大事小事,全都拉着大家一起“开会讨论”,可讨论完,该呵呵的还是呵呵&/b&;&br&3、本来花小钱雇人的,现在用erp了,各个部门,你至少都得雇几个素质略高、略懂IT的人吧?工资你得开高点。&br&&br&所以,如果经营者只是简单认为“ERP能提高办公效率,降低成本”,可能要失望。&br&&br&其实,&b&所有软件,根本上讲,解决的都是“人性本偷懒”的问题&/b&:&br&人可以通过不断“偷懒”,&br&第一、要么让自己挑战更有价值的课题;&br&第二、要么让别人挑战更有价值的课题;&br&第三、要么就空闲下来。&br&&b&但绝对不会让任务总量减少,只是换个平台做而已。&/b& &b&软件,也更不可能提高人员本身素质——事业成功要靠人,单单依靠“马奇诺防线”,并不能阻止德国的入侵,更何况“马奇诺防线”本身如果用人不当,也会变成“豆腐渣”。&/b&&br&&br&&br&&/p&&h2&&b&至于说,信息化淘汰会计,恐怕真正淘汰的是“冗余的信息录入环节”&/b&(原来可能是“销售端录入一次、财务录入一次”,现在只要“销售端录入”就搞定了,保证信息源头单一,避免“反复核对”)&b&——它既没有淘汰“凭证录入”这项工作,更不可能淘汰“会计”这个职业;它是解放会计人员双手的,而“解放双手”的目的是:把会计做得更专精、更有内涵!&/b&&/h2&&p&(如果你硬要把“凭证录入员”、“开票员”叫做“会计”,然后说“低端会计要被淘汰”,那么,只能认为你是在玩文字游戏。)&/p&&p&&br&&/p&&p&&br&&/p&&p&&b&真正能被淘汰的,不是“某个职位”,不是“某个行当”,更不是“某类人”——而是“某个工作环节”、“某种工作方式”。&/b&&/p&&h2&&b&这种“淘汰某个工作环节、工作方式”的事情,我们称之为“流程优化”——这是每个有心做事的人从古至今都正在努力的。&/b&&/h2&&h2&&b&“流程优化”是“流程优化”,跟“行当衰退”、“低端人群退散”完全是两码事,别再偷换概念了。&/b&&/h2&&h2&&b&我以前在木桶里泡澡,现在换“按摩浴缸”了,或者改成“淋浴”了——但我洗澡的时间并没有缩短,“洗澡”这个动作也并没有被淘汰。&/b&&/h2&&p&再比如,现在的快递公司的运作,和几百年前的驿站,没什么两样——&b&被淘汰的只是“不合时宜的环节”、“不合时宜的方式方法”。&/b&&/p&&p&&b&你可以换个交通工具运货,但你不能不运货——只是“人扛马拉”变成了“火车飞机”&/b&。&/p&&p&&br&&/p&&hr&&p&&b&四、如果哪天吃个药丸就能扛一个礼拜,期间完全不饿——要你舍弃美食,你愿意?&/b&&/p&&p&&br&&/p&&hr&&p&&b&五、政治层面:&/b&&/p&&p&&u&&b&假设真的出现了“信息化全面取代人工”,那么倒霉的将不仅仅是“会计”这一个行当,80%的普通人都得回家——请问,这些人怎么办?难道是逼着他们往晾衣杆上绑布条吗?!&/b&&/u&&/p&&p&&b&特别是那种政府控股的大型企业,必须顾及民生,不能只考虑效益——如果“效益”的结果只是成全了“少数人的暴政”,这种“效益”是违反天道的,必然不可能持久。&/b&&/p&
一、经济层面:“信息化”的这一刀,晃悠半天,最终只能砍在资本家自己身上:一边是“信息化大幅提高企业经营效率,产品大量涌入市场”,产品价格大幅降低;另一边是“信息化大量挤占就业岗位,失业人口增加”,社会整体消费能力大幅降低;两边一“共振”,…
1.insanity健身操,上图。简单粗暴,每天30分钟,花样自虐。出来混模样太重要啦,让你的灵魂和肉体握手言和。自己是自己最骄傲的作品,自己是自己最有趣的游戏。&br&2个月成果。&figure&&img src=&https://pic4.zhimg.com/50/3f2b52d93dfd996d9dc85_b.jpg& data-rawheight=&540& data-rawwidth=&720& class=&origin_image zh-lightbox-thumb& width=&720& data-original=&https://pic4.zhimg.com/50/3f2b52d93dfd996d9dc85_r.jpg&&&/figure&&br&insanity健身操有系统的课表,完成打勾,已经第二轮啦(这个是MAX OUT) 新手搜 Insanity 63课表就OK~&br&&figure&&img src=&https://pic2.zhimg.com/50/95c4b468a2221ebbec0e9e3ea4e6f6c2_b.jpg& data-rawheight=&654& data-rawwidth=&519& class=&origin_image zh-lightbox-thumb& width=&519& data-original=&https://pic2.zhimg.com/50/95c4b468a2221ebbec0e9e3ea4e6f6c2_r.jpg&&&/figure&&br&2.每天练字两张,最爱行书,写不好,硬着头皮往下写,一开始是这样,不忍直视&br&&figure&&img src=&https://pic1.zhimg.com/50/4e82ca019f9ba3d475af979cff2bb1c0_b.jpg& data-rawheight=&1280& data-rawwidth=&960& class=&origin_image zh-lightbox-thumb& width=&960& data-original=&https://pic1.zhimg.com/50/4e82ca019f9ba3d475af979cff2bb1c0_r.jpg&&&/figure&五个月后,就是这样啦,每次日期写到背面,对比有进步就很开心呢&br&&figure&&img src=&https://pic3.zhimg.com/50/fcbbfee1d8ae_b.jpg& data-rawwidth=&470& data-rawheight=&638& class=&origin_image zh-lightbox-thumb& width=&470& data-original=&https://pic3.zhimg.com/50/fcbbfee1d8ae_r.jpg&&&/figure&今年3月的两张&br&&figure&&img src=&https://pic2.zhimg.com/50/34a1bfefa82eb_b.jpg& data-rawwidth=&1280& data-rawheight=&960& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic2.zhimg.com/50/34a1bfefa82eb_r.jpg&&&/figure&&figure&&img src=&https://pic2.zhimg.com/50/3c0fcd639e0_b.jpg& data-rawwidth=&1280& data-rawheight=&960& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic2.zhimg.com/50/3c0fcd639e0_r.jpg&&&/figure&&br&对篆刻也有好奇心,于是开动,原谅我的恶趣味。。。。。&figure&&img src=&https://pic1.zhimg.com/50/c409e0ddb482fca953c8344_b.jpg& data-rawheight=&644& data-rawwidth=&434& class=&origin_image zh-lightbox-thumb& width=&434& data-original=&https://pic1.zhimg.com/50/c409e0ddb482fca953c8344_r.jpg&&&/figure&刚练习时候线条是这样的&br&&figure&&img src=&https://pic2.zhimg.com/50/db7fb1_b.jpg& data-rawheight=&646& data-rawwidth=&431& class=&origin_image zh-lightbox-thumb& width=&431& data-original=&https://pic2.zhimg.com/50/db7fb1_r.jpg&&&/figure&现在是这样哒,第一个章是&b&方寸江湖&/b&&br&&figure&&img src=&https://pic4.zhimg.com/50/befdfb67dd97bec169bd20d6_b.jpg& data-rawheight=&646& data-rawwidth=&575& class=&origin_image zh-lightbox-thumb& width=&575& data-original=&https://pic4.zhimg.com/50/befdfb67dd97bec169bd20d6_r.jpg&&&/figure& 这个章是 &b&一切唯心造&/b&&br&&figure&&img src=&https://pic2.zhimg.com/50/95c76acd9cfd0eb986ddb0a9e705065e_b.jpg& data-rawheight=&636& data-rawwidth=&402& class=&content_image& width=&402&&&/figure&&br&①有同学问书法怎么入门,不敢贸然给出答案,只推荐一本《启功给你讲书法》,朴实可爱的老先生让人豁然开朗~&br&②坚持心法: 买毛笔让老板刻上对自己有意义的人名,可以是男神、女神、暗恋对象、隔壁老王。。。我刻的是霹雳布袋戏里的心头大爱,剑雪、少艾、苍。&br&如图啦&br&&figure&&img src=&https://pic4.zhimg.com/50/58c0e9ea0a7e6f174afeb965fe962053_b.jpg& data-rawheight=&649& data-rawwidth=&490& class=&origin_image zh-lightbox-thumb& width=&490& data-original=&https://pic4.zhimg.com/50/58c0e9ea0a7e6f174afeb965fe962053_r.jpg&&&/figure&想把十二个月的别称、李白、苏轼诗全刻了呀,就怕老板再也不肯卖笔给我。。。。。,嗯,所以,慢慢来吧,奸笑一个~~&br&下图笔杆上是 春、夏、秋、冬&br&&figure&&img src=&https://pic4.zhimg.com/50/38da8d49cd_b.jpg& data-rawheight=&657& data-rawwidth=&493& class=&origin_image zh-lightbox-thumb& width=&493& data-original=&https://pic4.zhimg.com/50/38da8d49cd_r.jpg&&&/figure&&br&3.&b&倒计时工作法&/b&:下一个计时APP,例如设定好时间10分钟,给自己紧迫感。开始工作,立刻行动,不要思考,反正只有10分钟嘛&br&&br&4.&b&每读完一本书就往玻璃瓶里扔一枚硬币&/b&,会催促自己早日填满瓶子,很有趣的游戏不是吗?&br&上半年的成果。&br&&figure&&img src=&https://pic4.zhimg.com/50/64ef8edad22ef_b.jpg& data-rawheight=&536& data-rawwidth=&622& class=&origin_image zh-lightbox-thumb& width=&622& data-original=&https://pic4.zhimg.com/50/64ef8edad22ef_r.jpg&&&/figure&&br&&b&5.早起打坐10分钟&/b&,呼~吸~呼~吸,一定要离开你的床去做!屁股下垫一本书,保持平衡,不管多么困意深沉的一天都会变得清醒可爱,人生必备技能啊!《当和尚遇上钻石》里有具体方法噢&br&&br&6..一天出门在路上对自己说:我真幸运!我真幸福!我真富有!世无难事,事在人为!&br&这条街姐最美!!瞬间走路如风·~~~&br&一天都会心情很好的开始啦。&br&&br&&b&7.随身带一本书&/b&,读书让人变得眉目清朗,面庞舒展,会变美哒 , 比如杨绛先生啊.&br&不是只有青春年华才好看,人生还很长,要一直好看,需要多读书啊!&br&&br&如果计划一周读一本书,每天要读的页数就是这本书的页码除以七,如果是210页的书,每天只要读30页就可以了啊,一个人应该像一支队伍,为自己的头脑和心灵招兵买马啊&br&&br&8.过一天开心了就赚一天,心情很重要。快递盒不要扔留着做手工,于是我有了这么多储物盒&figure&&img src=&https://pic4.zhimg.com/50/9abff7191cae3f064f32209ce3effbe5_b.jpg& data-rawheight=&810& data-rawwidth=&1080& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&https://pic4.zhimg.com/50/9abff7191cae3f064f32209ce3effbe5_r.jpg&&&/figure&&br&心情不好就动手,于是有了这样的手工&figure&&img src=&https://pic3.zhimg.com/50/90d101a623dfcbd92bcd1_b.jpg& data-rawheight=&720& data-rawwidth=&540& class=&origin_image zh-lightbox-thumb& width=&540& data-original=&https://pic3.zhimg.com/50/90d101a623dfcbd92bcd1_r.jpg&&&/figure&还有了这样的御弟哥哥&figure&&img src=&https://pic2.zhimg.com/50/fdb10d038d_b.jpg& data-rawheight=&810& data-rawwidth=&1080& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&https://pic2.zhimg.com/50/fdb10d038d_r.jpg&&&/figure&&br&&b&9..制作自己的文字图片加油站&/b&,建个文件夹收藏的全是微笑、温馨、美好家庭、完美身材的图片,你会发现你会不由自主开心起来~~控制情绪就是控制人生啊。&br&&br&10.花不会侍弄,绿植是极好的。比如我家已成这样……&figure&&img src=&https://pic4.zhimg.com/50/1eadbfeb9aaaa48b426e0c3_b.jpg& data-rawheight=&540& data-rawwidth=&720& class=&origin_image zh-lightbox-thumb& width=&720& data-original=&https://pic4.zhimg.com/50/1eadbfeb9aaaa48b426e0c3_r.jpg&&&/figure&&br&为了美化环境,我甚至还种过这玩意儿。。。。。。&br&&figure&&img src=&https://pic4.zhimg.com/50/1fd9a558b00e961c655ec46ab3bb0aad_b.jpg& data-rawheight=&640& data-rawwidth=&854& class=&origin_image zh-lightbox-thumb& width=&854& data-original=&https://pic4.zhimg.com/50/1fd9a558b00e961c655ec46ab3bb0aad_r.jpg&&&/figure&&br&&b&11.去旅游留着票据专门贴到本上&/b&,记上日期,会让你充满探索未知世界的野心。以后等我老了,一定指着本子翻给我孙子看:“想当年你奶奶我风华正茂,踏遍祖国万里河山。。。。”咩哈哈哈,想起来就好开心啊~&br&如图啦&br&&figure&&img src=&https://pic1.zhimg.com/50/1a07796fccc41d5863b8_b.jpg& data-rawheight=&649& data-rawwidth=&864& class=&origin_image zh-lightbox-thumb& width=&864& data-original=&https://pic1.zhimg.com/50/1a07796fccc41d5863b8_r.jpg&&&/figure&&br&12.读完书要&b&做思维导图&/b&啊,想想你拿着十几、几十块钱就买了一个人一生的经验,不是赚翻了么? 所以赶紧记下来啊!&br&举个例子:克里斯蒂安 . 格吕宁的《超级快速阅读》&figure&&img src=&https://pic4.zhimg.com/50/f64b51e8cb8_b.jpg& data-rawheight=&651& data-rawwidth=&876& class=&origin_image zh-lightbox-thumb& width=&876& data-original=&https://pic4.zhimg.com/50/f64b51e8cb8_r.jpg&&&/figure&&br&于是一年的时间,就有这么多属于我自己的思维导图啦。&br&&br&&figure&&img src=&https://pic4.zhimg.com/50/9cfc2bdd0d94_b.jpg& data-rawheight=&656& data-rawwidth=&489& class=&origin_image zh-lightbox-thumb& width=&489& data-original=&https://pic4.zhimg.com/50/9cfc2bdd0d94_r.jpg&&&/figure&&br&13.&b&背书&/b&,我这辈子只有一个脑子,我得好好的利用它啊。&br&成果是 一个半月背诵完成81章的《道德经》, 之后心里经常莫名跑出老子的话,比如想多吃的时候就会出现:“圣人为腹不为目”。。。。&br&&br&有空背给你们听哈~~~&br&&br&14.&b&去尝试!!!&/b&现在看来,所有的后悔药都来自于可以尝试的没有尝试,可以改变的没有去改变。想了没做的全是白想,知友说,种一棵树最好的时间是十年前,其次就是现在。&br&&br&&b&冒险 ?投&/b&&b&入&/b&&b&?成功 ?收获&br&冒险 ?投入 ?不成功 ?乐趣和智慧&br&&/b&&br&比如我又染指尤克里里啦, 从小都是乐盲,本着这辈子一定要学一门乐器的决心,咬牙败了心爱的小U,从0开始,每天哪怕有半个小时,都会抱一会,现在可以弹很简单的曲子,比如天空之城、《心愿》啦。&br&&br&HOHO,现在可以随心所欲的弹健哥的《贝加尔湖畔》啦&br&&br&我知道离很优秀还有很远,而时间是我最大的盟友。&br&&figure&&img src=&https://pic1.zhimg.com/50/e94d9a85ea152cd249da_b.jpg& data-rawheight=&647& data-rawwidth=&492& class=&origin_image zh-lightbox-thumb& width=&492& data-original=&https://pic1.zhimg.com/50/e94d9a85ea152cd249da_r.jpg&&&/figure&&br&&br&15.时间管理每天使用&b&效率笔记&/b&,提前列好每天必做的事项,按优先级排序,&br&如下:&br&A1 insanity 2健身操 ( )&br&B1 尤克里里练习1个小时 ( ) 完成后打勾&br&&br&时间从来都是一片田地,田地的特点是种瓜得瓜,种豆得豆,不种得毛。它无法储存,要么用于消费,要么用于投资,所有漫长的人生都是由每一个小时里的每一件事汇聚而成的。每一个小时的使用,都可以折射出一个人的生活态度和价值观。&br&&br&价值观的意思是:&b&在同样有限的生命里,你,觉得什么对你是最重要的?&/b&价值观决定了生活与做事的优先级,每一个人都选择了他们自己今天的样子。(From王潇_潇洒姐)&br&&br&&b&我们怎么过一天,就怎么过一生。&/b&&br&&br&那些问我哪来这么多时间的朋友,我却想反问一句:你怎么会没有时间呢?&br&&br&16.&b&给自己提好的问题&/b&,我把我的这&b&六个问题&/b&贴在写字桌前,临睡前回答自己,这样一天才算圆满啊&br&1.今天我有什么样的付出?用什么方式?&br&&br&2.今天我学到了什么?&br&&br&3.对于未来,今天我做了何种投资?&br&&br&4.在今天当中哪些事可以更进步?&br&&br&5.今天我享受到了生命中的哪些过程?&br&&br&6.如果今天重来,我会希望重新过吗?&br&&br&&figure&&img src=&https://pic4.zhimg.com/50/183dc641ded_b.jpg& data-rawwidth=&527& data-rawheight=&546& class=&origin_image zh-lightbox-thumb& width=&527& data-original=&https://pic4.zhimg.com/50/183dc641ded_r.jpg&&&/figure&&br&&br&&b&很少人做得好,&br&&br&大多数人根本不做;&br&&br&你开始的越早越好。&/b&
1.insanity健身操,上图。简单粗暴,每天30分钟,花样自虐。出来混模样太重要啦,让你的灵魂和肉体握手言和。自己是自己最骄傲的作品,自己是自己最有趣的游戏。 2个月成果。 insanity健身操有系统的课表,完成打勾,已经第二轮啦(这个是MAX OUT) 新手搜 I…
&figure&&img src=&https://pic1.zhimg.com/13fadcedc9c2f22d8c2de_b.jpg& data-rawwidth=&1730& data-rawheight=&344& class=&origin_image zh-lightbox-thumb& width=&1730& data-original=&https://pic1.zhimg.com/13fadcedc9c2f22d8c2de_r.jpg&&&/figure&&h2&TCP和UDP协议都存在一个叫做端口的东西,但端口却不是IP协议的一部分。&br&&/h2&&p&端口被设计出来主要是为了给协议栈和应用对应:&/p&&ul&&li&协议栈用端口号将数据分配给不同的应用层程序&/li&&li&应用层程序用端口号去区分不同的连接,参见之前提到过的“四元组”&/li&&/ul&&p&TCP和UDP协议都使用了端口号(Port number)的概念来标识发送方和接收方的应用层。 对每个TCP连接的一端都有一个相关的16位的无符号端口号分配给它们。 即使是UDP这种没有连接的协议,依旧有一个16位的无符号端口号。 可能的、被正式承认的端口号有 2^16 -1 = 65535 个。&/p&&h3&三类端口&/h3&&p&端口被分为三类:著名端口、监听端口和动态端口。&/p&&ul&&li&&p&著名端口是由因特网赋号管理局(IANA)来分配的,并且通常被用于系统进程。 IANA对于端口号的分配见这里 &a href=&http://link.zhihu.com/?target=http%3A//www.iana.org/assignments/port-numbers& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Service Name and Transport Protocol Port Number Registry&/a& 。 系统的/etc/services也有相应端口和服务名的对应,主要是用来给netstat、nmap 等系统命令做端口名反解用。&/p&&p&著名的应用程序作为服务器程序来运行,并侦听经常使用这些端口的连接。 这些端口的一个显著特征就是限定在0~1023,并且在Linux、UNIX平台均需要 Root权限才能监听这些端口。&/p&&p&在UNIX刚刚兴起的年代,服务器资源是十分稀缺的, 通常一台服务器上会有很多的用户,同时这台服务器往往还兼任一个学院、公司的邮件、 网站等服务。为了保证这些服务的端口不被普通用户占用, 当时UNIX的设计者就把使用这些端口的权限限制在系统管理员(Root)手里。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&常见的`著名端口`有:FTP:21、SSH:22、SMTP:25、HTTP:80、HTTPS:443等。
&/code&&/pre&&/div&&/li&&li&&p&监听端口通常被用来运行各种用户自己写的服务,服务监听在这些端口下不需要特别的权限。&/p&&ul&&li&BSD使用的监听端口范围是。&/li&&li&IANA建议4作为“监听端口”。&/li&&li&许多Linux内核使用3范围。 配置文件 /proc/sys/net/ipv4/ip_local_port_range 有当前系统设定。&/li&&/ul&&/li&&br&&li&&p&动态端口通常被用来在主动发起连接时随机分配使用,在任何特定的TCP连接外不具有任何意义。 这是由于TCP等协议是通过四元组来区分不同的网络连接。 当本机主动发起TCP连接的时候如果目的IP、目的端口、本地IP都是一样的, 只能通过占用不同的本地端口来区分不同的连接。&/p&&p&0~65535除去上述著名端口、监听端口两种端口号,剩下的端口都是备用的动态端口。 所以在某些特殊用途的需要主动发起大量连接的服务器上(例如:爬虫、代理), 需要调整 /proc/sys/net/ipv4/ip_local_port_range 的数值,来保留更多的 动态端口以供使用。&/p&&/li&&/ul&&h3&0号端口&/h3&&p&端口号里有一个极为特殊的端口,各种文档书籍中都鲜有记载,就是0号端口。&/p&&p&在IANA官方的标准里0号端口是保留端口。&/p&&figure&&img src=&https://pic1.zhimg.com/9d89ec4b744_b.png& data-rawwidth=&1012& data-rawheight=&154& class=&origin_image zh-lightbox-thumb& width=&1012& data-original=&https://pic1.zhimg.com/9d89ec4b744_r.jpg&&&/figure&&p&也就是说无论是TCP还是UDP网络通信,0号端口都是不能使用的。&/p&&p&然而,标准归标准,在UNIX/Linux网络编程中0号端口被赋予了特殊的涵义:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&如果在bind绑定的时候指定端口0,意味着由系统随机选择一个可用端口来绑定。
&/code&&/pre&&/div&&p&用Python实现一个获取可用监听端口的示例:&/p&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&k&&def&/span& &span class=&nf&&findFreePort&/span&&span class=&p&&():&/span&
&span class=&sd&&&&&&/span&
&span class=&sd&&
函数返回值是当前可用来监听的一个随机端口。&/span&
&span class=&sd&&
&&&&/span&
&span class=&kn&&import&/span& &span class=&nn&&socket&/span&
&span class=&n&&s&/span& &span class=&o&&=&/span& &span class=&n&&socket&/span&&span class=&o&&.&/span&&span class=&n&&socket&/span&&span class=&p&&(&/span&&span class=&n&&socket&/span&&span class=&o&&.&/span&&span class=&n&&AF_INET&/span&&span class=&p&&,&/span& &span class=&n&&socket&/span&&span class=&o&&.&/span&&span class=&n&&SOCK_STREAM&/span&&span class=&p&&)&/span&
&span class=&n&&s&/span&&span class=&o&&.&/span&&span class=&n&&bind&/span&&span class=&p&&((&/span&&span class=&s1&&'localhost'&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&))&/span&
&span class=&c1&&# 用getsockname来获取我们实际绑定的端口号&/span&
&span class=&n&&addr&/span&&span class=&p&&,&/span& &span class=&n&&port&/span& &span class=&o&&=&/span& &span class=&n&&s&/span&&span class=&o&&.&/span&&span class=&n&&getsockname&/span&&span class=&p&&()&/span&
&span class=&c1&&# 释放端口&/span&
&span class=&n&&s&/span&&span class=&o&&.&/span&&span class=&n&&close&/span&&span class=&p&&()&/span&
&span class=&k&&return&/span& &span class=&n&&port&/span&
&/code&&/pre&&/div&&h3&网络地址转换NAT&/h3&&p&既然说到了端口,不得不提一下NAT。&/p&&p&NAT是&Network Address Translation&的缩写,直译就是网络地址转换。 1990年代中期,为了应对IPv4地址短缺,NAT技术流行起来。&/p&&p&WikiPedia的解释为:&/p&&blockquote&&p&在一个典型的配置中,一个本地网络使用一个专有网络的指定子网 (比如192.168.x.x或10.x.x.x)和连在这个网络上的一个路由器。 这个路由器占有这个网络地址空间的一个专有地址(比如192.168.0.1), 同时它还通过一个或多个因特网服务提供商提供的公有的IP地址(叫做“过载”NAT) 连接到因特网上。当信息由本地网络向因特网传递时,源地址被立即从专有地址转换为公用地址。 由路由器跟踪每个连接上的基本数据,主要是目的地址和端口。当有回复返回路由器时, 它通过输出阶段记录的连接跟踪数据来决定该转发给内部网的哪个主机; 如果有多个公用地址可用,当数据包返回时,TCP或UDP客户机的端口号可以用来分解数据包。 对于因特网上的一个系统,路由器本身充当通信的源和目的地址。&/p&&/blockquote&&p&这个技术能够被广泛使用还要感谢当时端口号的记录字段是2Bytes而不是1Byte。&/p&&p&NAT技术的广泛应用也给很多应用带来了极大的麻烦: 处于NAT网络环境内的服务器很难被外部的网络程序主动连接,受这一点伤害最大的莫过于: 点对点视频、语音、文件传输类的程序。&/p&&p&当然我们聪明的工程师经过长时间的努力,发明了“NAT打洞”技术,一定程度上解决了此类问题。&/p&&p&如果没有他们的努力,我们现在各种QQ视频、微信实时语音、网络电话都是需要用户连接到 服务商的服务器上进行数据传输。这样对服务商的网络消耗将是十分巨大的, 服务质量也是很难以提高的,具体的技术实现,我们以后再表。&/p&&h3&多进程端口监听&/h3&&p&我们都有一个计算机网络的常识:不同的进程不能使用同一端口。&/p&&p&如果一个端口正在被使用,无论是TIME_WAIT、CLOSE_WAIT、还是ESTABLISHED状态。 这个端口都不能被复用,这里面自然也是包括不能被用来LISTEN(监听)。&/p&&p&但这件事也不是绝对的,之前跟大家讲进程的创建过程提到过一件事: 当进程调用fork(2)系统调用的时候,会发生一系列资源的复制,其中就包括句柄。 所以,在调用fork(2)之前,打开任何文件,监听端口产生的句柄也将会被复制。&/p&&p&通过这种方式,我们就可以达成&多进程端口监听&。&/p&&p&但,这又有什么用呢?&/p&&p&我们大名鼎鼎的Nginx就是通过这种手法让多个进程同时监听在HTTP的服务端口上的, 这么做的好处就在于,当外部请求到达,Linux内核会保证多个进程只会有一个accept(2) 成功,这种情况下此端口的服务可用性就和单个进程存在与否无关。 Nginx正是利用这一点达成“不停服务reload、restart”的。&/p&&h3&SO_REUSEADDR&/h3&&p&要说SO_REUSEADDR,我们需要先需要说一段历史: 记得大学的时候面试我们学校的“星辰工作室”,有一个问题就是&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&为什么有时候重启Apache会失败,报“Address already in use”?
&/code&&/pre&&/div&&p&当时答得不太好,不太明白这个问题的关键点在哪里,后来逐渐明白了。&/p&&p&TCP的原理会导致这样的一个结果:&/p&&p&主动close socket的一方会进入TIME_WAIT,这个状况持续的时间取决于三件事:&/p&&ul&&li&TCP关闭连接的五次挥手包什么时候到达&/li&&li&SO_LINGER的设置&/li&&li&/proc/sys/net/ipv4/tcp_tw_recycle 和 /proc/sys/net/ipv4/tcp_tw_reuse 的设置&/li&&/ul&&p&总之默认情况下,处于TIME_WAIT状态的端口是不能用来LISTEN的。 这就导致,Apache重启时产生80端口TIME_WAIT,进而导致Apache再次尝试LISTEN失败。&/p&&p&在很多开源代码里我们会看到如下代码:&/p&&div class=&highlight&&&pre&&code class=&language-c&&&span&&/span&&span class=&kt&&int&/span& &span class=&n&&reuseaddr&/span& &span class=&o&&=&/span& &span class=&mi&&1&/span&&span class=&p&&;&/span&
&span class=&n&&setsockopt&/span&&span class=&p&&(&/span&&span class=&n&&sockfd&/span&&span class=&p&&,&/span& &span class=&n&&SOL_SOCKET&/span&&span class=&p&&,&/span& &span class=&n&&SO_REUSEADDR&/span&&span class=&p&&,&/span& &span class=&o&&&&/span&&span class=&n&&reuseaddr&/span&&span class=&p&&,&/span& &span class=&k&&sizeof&/span&&span class=&p&&(&/span&&span class=&kt&&int&/span&&span class=&p&&));&/span&
&/code&&/pre&&/div&&p&有了上面这段神奇的代码,就不会出现上面的惨剧。但SO_REUSEADDR的作用不仅限于上述&/p&&p&Linux 的 SO_REUSEADDR 设置为 1 有四种效果:&/p&&ol&&li&&p&当端口处在TIME_WAIT时候,可以复用监听。&/p&&/li&&li&&p&可以允许多个进程监听同一端口,但是必须不同IP。&/p&&blockquote&&p&&strong&这里说的比较隐晦,如果进程A监听0.0.0.0:80,B进程可以成功监听127.0.0.1:80, 顺序反过来也是可以的。&/strong&&/p&&/blockquote&&/li&&li&&p&允许单个进程绑定相同的端口到多个socket上,但每个socket绑定的IP地址不同。&/p&&/li&&li&&p&使用UDP时候,可以允许多个实例或者单进程同时监听同个端口同个IP。&/p&&/li&&/ol&&br&&br&&p&服务端网络编程交流群:&b&&/b&&br&&/p&&p&&b&公众号:&/b&&/p&&figure&&img src=&https://pic3.zhimg.com/9adb3fb80d79dba4beb3de_b.jpg& data-rawwidth=&344& data-rawheight=&344& class=&content_image& width=&344&&&/figure&&br&&p&&u&# 得到书面授权之前,拒绝任何形式的转载&/u&&/p&
TCP和UDP协议都存在一个叫做端口的东西,但端口却不是IP协议的一部分。 端口被设计出来主要是为了给协议栈和应用对应:协议栈用端口号将数据分配给不同的应用层程序应用层程序用端口号去区分不同的连接,参见之前提到过的“四元组”TCP和UDP协议都使用了端…
&figure&&img src=&https://pic4.zhimg.com/v2-fb5146afe1336dbceb76ae_b.jpg& data-rawwidth=&489& data-rawheight=&456& class=&origin_image zh-lightbox-thumb& width=&489& data-original=&https://pic4.zhimg.com/v2-fb5146afe1336dbceb76ae_r.jpg&&&/figure&&blockquote&&p&本文作者为&a href=&http://link.zhihu.com/?target=https%3A//www.jisuanke.com& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&计蒜客&/a&教学研究团队成员。&/p&&p&这是计蒜客《咸鱼翻身——编程自学指南》的第一篇。《咸鱼翻身——编程自学指南》是一个旨在帮助有志于提高编程水平和从事开发工作,但是缺乏学习资源和指导的学习者。&/p&&p&更多内容,敬请关注专栏 &a href=&https://zhuanlan.zhihu.com/jisuanke& class=&internal&&代码视界&/a&&/p&&/blockquote&&p&以下是正文&/p&&p&你是否符合以下情况?&br&&/p&&ul&&li&大学计算机相关专业,对本校提供的教学资源不满意,或者大学其他专业学生,想要从事开发相关工作的本科生&/li&&li&有较为充足的时间,但是缺乏学习资源(这里指的“资源”并不是书本或其他学习资料,而是真正意义上的“教学资源”:学校提供的上机环境、合格的老师和助教,乃至于上进心和姿势水平都足够高的同学等)&/li&&/ul&&p&如果符合,那么这篇文章将会对你有很大的帮助&/p&&p&我将首先给出一些基本的指导思想,然后介绍一个具体的学习方法路线图。本文将最大限度地保证这些方法具有尽可能强的可操作性。&br&&/p&&h3&&b&两种不同的学习路线&/b&&/h3&&p&通过自学成为开发行业从业者,有“正向”和“反向”两种路线:&/p&&ul&&li&&b&反向路线&/b&——指的是绕过一系列基础知识,直接从上层应用方向,以工程为导向开始学习和实践,直接参与开发工作,然后根据实际需要逐渐补充计算机科学知识;&br&&/li&&li&&b&正向路线&/b&——指的是从基础开始,按照计算机专业培养计划,系统地依次学习。&br&&/li&&/ul&&br&&p&一般而言,&b&正向路线比起反向路线,相对来说更加“安全”&/b&,&b&更加不容易出现计算机科学基础知识的短板&/b&——但是缺点也是很明显的:&b&入门难度更大,门槛更高,时间容忍度也更低&/b&。&/p&&p&在实践中,两种路线各有千秋,既不能互相取代,也绝非互不相容——&b&这篇文章将以正向路线为主进行详细的说明&/b&,本专栏后续的文章将会邀请一些现役工程师来介绍反向路线的相关思想方法。&/p&&h3&&b&正向路线的三个基本法&/b&&/h3&&p&关于“如何自学编程”类似的话题,在很多社区都已经有了不止一次的讨论——为什么同一个问题会有不止一次的讨论呢?这当然是因为,当读者们按照前辈们给出的书单开始读书上课,之后没多久就会受到这样那样的打击,最后信心耗尽而彻底放弃。大多数前辈自身的姿势水平高,人生经验丰富,因此不可避免地会犯下这样一个错误——过高估计了读者们的学习能力和信心。&/p&&p&不光是写 Guideline 的前辈,读者自身也要注意——永远不要高估自己的学习能力和信心(或者说,学习热情)。只有能完成的课程,能看完的书才有意义——负载过大,无法完成的课程,就算再怎么优秀也是弊大于利的。因此,在路线和方法的选择上,一定要以以下的三个基本法为基本的指导原则:&/p&&p&&b&1、永远不要假设自己有足够的热情(信心保护)&/b&&/p&&p&前面说过,正向路线的缺点,在于入门难度更大,门槛更高——毕竟,同样是输出“Hello World”,一个漂亮的网页页面,总比黑乎乎的命令行更好看,也更让人有成就感。&/p&&p&在知乎和其他的一些跟编程学习相关的社区,总能看到有各式各样的大神,给新手们传递着这样那样的人生经验:&/p&&ul&&li&“编程入门一定要从 gcc+Vim 开始”、&/li&&li&“萌新学习 C++ 请认准《C++ Primer》”、&/li&&li&“&a href=&https://www.zhihu.com/question/& class=&internal&&大一学生要写一个 500-1000 行的课程作业,让我们先从一个小目标开始——比如实现一个编译器&/a&” :&/li&&/ul&&p&诸如此类言论,不胜枚举——通常还会附加“连这点东西都学不会,以后就别想着学 CS 了”之类的论断。&/p&&p&不得不说,大神们的出发点确实是好的,这些建议也确实是有一定的合理性——但是,这些做法有一个重要的前提,那就是“大力出奇迹”,假设读者都拥有无限的学习能力和无限的热情……然而,理想很丰满,现实却很骨感——大神们初中学习编程,高中就能写出一个成型的编译器,然而现实中的大部分人学生都不具备这样的能力……&/p&&p&一个人的命运,当然要靠自我的奋斗,但也要考虑到历史的行程——对于名校 CS 专业的学生来说,他们就算自身的才能并不出众,至少也有“安全网”在保护他们:老师在上课的时候会重点地强调需要注意的问题,助教在上机的时候会手把手地教他们正确的做法,甚至身边才能出众的同学,也可以让他们“抱大腿”……然而,对于本文的读者来说,这一切都不存在。&/p&&p&孤独而脆弱,是本文读者普遍具有的特点——任何一个看起来微不足道的小挫折,都可能挫伤他们的信心和热情,当这两者降到 0 的时候,他们的学习道路便到此为止了,以后想要再一次出发将会变得非常困难,甚至完全不可能。&/p&&p&因此,对于本文的读者,在路线的选择上,一定要做到循序渐进,从小到大,在初学阶段尽可能地挑选不容易踩坑的路线,从第一个 Hello World 开始,通过不断地获得正向反馈来提高自己的能力和信心——在后续的内容中,我们将会应用这一原则,向大家推荐合适的路线。&/p&&p&&b&2、确保你学到的东西都是性价比最高的内容(高性价比学习)&/b&&/p&&p&这里的“性价比”包括两个概念,其一是知识的可迁移性,其二是知识的可使用性。&/p&&p&所谓“可迁移性”,指的就是软件开发领域,那些共通的,放之四海皆准的内容——C 家族语言的语法,编程的熟练度、思想和方法,以及计算机科学专业知识,都是具有可迁移性的内容,而具体的某某框架的 API 用法则不是。&/p&&p&而“可使用性”则是另一个概念——它的含义是,这部分知识能不能立竿见影地帮助你增加代码量。很多大神都提到过,一个好的程序员必须有 XX 万的代码量——这确实是对的,但是反过来却不一定成立:如果这个世界有数万种编程语言,那么你用每一种语言都写一遍 Hello World,那么你的代码量也能达到大神说的数字——但是这代表你就有对应的编程能力吗?答案显然是否定的。&/p&&p&所谓“好的程序员必须有 XX 万的代码量”,更进一步地说,好的程序员必须要写数量和种类都足够多的程序。而就像上文中贴出的那个链接一样,大一学生刚学完 C 语言,如果想要写一个 500-1000 行代码的大作业,最后真的能完成的也只有“图书馆信息管理系统”这样的,看起来很“low”的程序——因为只使用基本的 C 语言语法和标准库,你是很难写出非常复杂的程序的。这个时候,就需要你学习更多的计算机科学知识,来拓展你可以编写的程序的广度与深度了……&/p&&p&你必须明白,学习的目的是为了提高自己的开发能力,让自己能够写出更大更好的程序。因此,对于走正向路线的读者来说,在没有项目牵引的前提下,对于流行技术和框架的学习应该有所节制,切忌贪多嚼不烂,千万不要陷入到“用更多的语言/框架写 HelloWorld”的陷阱中。&/p&&p&关于这条原则的应用,将与下一条原则一起进行说明。&/p&&p&&b&3、循序渐进地学习新知识,选择新目标(最低耦合)&/b&&/p&&p&@姚冬 前辈在&a href=&https://www.zhihu.com/question//answer/& class=&internal&&这个答案 &/a&中说过:&/p&&blockquote&千万别把编程看作知识,计算机科学是知识,但是编程是手艺。&br&既然是手艺就要用学手艺的思路去学习。&br&&br&以动手练习为主,看书学习为辅,甚至极端点,初学的时候除了看必要的文档都可以不看书,等有了一定编程基础后再去看书,看完书立刻动手编程去验证书上的理论知识。&br&练习一定要循序渐进,把手艺分解成几个简单的动作,反复练习直到熟练,然后再把基本动作组合起来练习直到熟练。拿C语言举例,比如从认真写好一个Hello world开始,然后去熟悉 if
for while 等基本关键字,然后熟悉字符串操作,内存操作,练习查找 排序 二叉树等基本算法数据结构,然后学习一个小型Framework。。。。&br&&br&作者:姚冬&br&链接:&a href=&https://www.zhihu.com/question//answer/& class=&internal&&&span class=&invisible&&https://www.&/span&&span class=&visible&&zhihu.com/question/2757&/span&&span class=&invisible&&4436/answer/&/span&&span class=&ellipsis&&&/span&&/a&&br&来源:知乎&br&著作权归作者所有,转载请联系作者获得授权。&/blockquote&&p&事实上,这个“循序渐进”的过程,对于计算机科学知识的学习也是一样的。&/p&&blockquote&玩过《使命召唤:现代战争 2》的读者,应该记得雪山潜入战役中的操作——玩家控制人物,鼠标左右键分别对应人物左右手手持的冰镐,而爬山的正确操作显然是轮换点击左右键,左冰镐插在山体内,拔出右冰镐向上勾,右冰镐插进去之后再拔出左冰镐,这样周而复始,一步一步地就能爬到山顶。而如果左右冰镐都松开的话,结局显然就是掉下山崖——同样,学习路线的选择也是一样的。&/blockquote&&p&不管是计算机科学知识还是某个领域的技能,都有其所前置依赖的知识或者技能。一个好的学习路线应该做到,&strong&每一次前进都只迈出一步——即每一次新学习的内容都不依赖你所没有掌握的知识、每一次新的编程练习需要掌握的新知识都尽可能少&/strong&。&/p&&p&举个简单的例子——很多大神都在强调,初学者学习《数据结构与算法》这门课程的重要性,但是实际上,对于读者来说,学习数据结构与算法的意义,其实并不是因为它的重要性,而是因为它同时满足了高性价比学习和最低耦合这两条原则——在计算机科学领域,你很难再找到另一块“完美”的课程了:&/p&&ul&&li&抽象数据类型的实现,并不依赖于具体的语言——换句话说这门课程的可迁移性极高,在任何语言中都可以使用&/li&&li&学习这门课程之后,你就可以去各大 OJ 平台刷题了——只要有这一门课程的知识,就可以在短时间内大幅提高你的代码量,可使用性极高&/li&&li&这门课程实际需要的前置知识和技能,只有基本的编程基础——会离散数学更好,但它并不是必须的&/li&&/ul&&p&接下来,我将结合这三个基本法,介绍一条实际可行的,正向学习路线:&/p&&h3&&b&一条可行的正向路线&/b&&/h3&&p&先给大家讲一个笑话:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&女生学编程为什么难?是思维方式不对还是学习方式不对?
编译器:「你有个错误。」
女生:「不可能!」
编译器:「你听我解释。」
女生:「我不听我不听我不听!」
编译器:「……」
女生:「你是不是不爱我了?你肯定和别的程序员好上了!」
&/code&&/pre&&/div&&p&这虽然是一则笑话,但却反映了一个现实的问题——&b&相当一部分人,无论男女,都缺乏解决问题的思维方式。&/b&&/p&&p&&b&# 程序员应该具备的基本能力&/b&&/p&&p&开发工作本质上是通过编程来解决问题,所以在开始之前,你首先要确保,你拥有最低限度的,解决问题的 Power User 的思维方式——具体地说,你要拥有以下三个方面的能力:&/p&&ul&&li&&b&最起码的分析能力&/b&——你不能像个文盲一样,连显示屏上明显的文字提示(很多提示原本就是中文的)都视而不见,而只会盲目地问些“我的程序运行不了怎么办”之类的毫无意义的问题——这跟上文的笑话中,女生说的“你不是不爱我了?”一样毫无意义。一名 Power User 问出的问题,应该是“我的程序运行报错,编译器提示 error XX”这样有信息量、有价值的问题。&/li&&li&&b&最基本的英语阅读能力&/b&——在计算机科学的世界里,很多内容都是英文的,你至少要能够借助翻译工具读懂这些英文材料……事实上,计算机科学中使用的英文并不难,除了少数专有名词之外,其他的内容还是很浅显易懂的,这一点大家无需害怕。&/li&&li&&b&起码的信息检索能力&/b&——在现代社会,即使是你不打算从事计算机科学相关工作,如果你连使用搜索引擎检索关键字的能力都没有的话,那么你迟早会被这个社会所淘汰。&/li&&/ul&&p&举个实际一点的例子:在开始编程之前,你至少应该会使用 U 盘,给一台 PC 安装操作系统——因为“如何安装 Windows”这样的问题,并不依赖于计算机专业知识,而且其解决方案在互联网上满坑满谷到处都是,就算用百度都可以很容易地搜索到正确的方案。如果连这一点都做不到的话,那么你可能确实缺乏学习编程的能力……&/p&&p&&b&# 第一行代码:选择语言与环境&/b&&/p&&p&「学编程应该学哪门语言?」这经常是初学者问的第一个问题——这里首先直接给出答案:使用一种较为现代的,面向对象的 C 家族语言来入门:具体来说就是选择 JAVA 或者 C++ 的一部分主要内容。&/p&&p&为什么这里我们没有选择流行的,更容易入门的 Python 呢?这是因为在实际的开发中,C 家族语言,包括 C、C++、JAVA 和 C#,几乎占据了编程语言的半壁江山——并且,这几种语言,在语法上一脉相传,你学会了其中一个,就自动学会了另外几个的大部分内容。相比之下,Python 作为入门的第一种语言,在学习的性价比方面无疑是有劣势的——相反,当你通过 C 家族语言建立了足够强的编程基础的时候,回过头来再去熟悉 Python 就容易多了。&/p&&p&而另一方面,如果你没有应试的需求的话,那就不要先学 C 语言——因为纯粹的 C 语言太过于古老简陋,不够现代化,会给初学者带来太多不必要的麻烦和困扰,并且应用范围极其狭窄。根据信心保护和高性价比学习这两条原则,如果没有应试的需求的话,实在没有必要在初学阶段接触纯粹的 C 语言。相比之下,JAVA 明显要现代化和友好得多——而 C++ 借助一系列标准库,在现代化程度上相比纯粹的 C 语言也有着巨大的优势,至于它的语法复杂的问题,初学阶段也可以通过只接触 C++ 的一个常用的子集来规避。必须明确一点——C++ 并不难学,因为复杂的语法是为了简单地解决复杂的问题,而不是正相反,把简单问题故弄玄虚地复杂化。&/p&&p&以下将会以 C++ 为例,提供一个可以参考的路线(JAVA 的路线与之类似):&/p&&blockquote&&p&0、
不要看《C++ Primer》作为入门书——它的定位是“程序员的第一本 C++ 教材”,而不是“初学者的编程入门书”,用《C++ Primer》作为入门书,违反了信心保护原则——你可以等到具有一定的编程能力之后再回过头来看它。&/p&&p&1、
完成&a href=&http://link.zhihu.com/?target=http%3A//www.xuetangx.com/courses/course-v1%3ATsinghuaX%2B15_T2%2Bsp/about& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&《C++ 语言程序设计基础》&/a&&/p&&p&这门课程没有前置知识需求,较为详细地讲解了 C++ 的基本语法、流程控制、包括面向对象在内的一系列编程思想等内容——课程难度适中,对初学者非常友好。从头学完一遍,把所有的作业题都做过一轮,这个时候你就有了最基本的编程能力——如果你连课程中的实验课内容也看过一遍并动手做过一遍,那么你同样也就有了基本的、对程序进行调试的思想和能力。&/p&&p&2、
完成&a href=&http://link.zhihu.com/?target=http%3A//mooc.study.163.com/course/BUPT-%23/info& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&《C++ 程序设计入门》&/a&(上/下)&/p&&p&凭心而论,我个人认为这门课程的质量要比 1 中提到的要好——但是这门课程有一个严重的缺点:它要求学生已经学过 C 语言,并不适合作为第一个入门的课程。在已经完成《C++ 语言程序设计基础》的前提下,通过这门课程,你可以更多地学习到面向对象编程思想与方法,C++ 的内存模型,以及异常处理等 C++ 特有的内容。到这一步,语言的学习部分已经几乎完成了——如果有兴趣的话,你可以自己去搜索一下,关于 C 语言的一些函数(例如scanf的用法)——现在你已经可以理解它的相关内容(比如为什么scanf括号后面的变量名要加 & 符号)了。&/p&&p&3、
在做本地练习的时候,如果读者已经有自己喜欢的编辑器 / IDE 的话,那按照自己喜欢的去配置环境就行。如果读者对此没什么概念,那么 Windows 用户请直接根据这个答案,&a href=&https://www.zhihu.com/question//answer/& class=&internal&&配置使用 Visual Studio 作为开发环境&/a&, 或者使用《C++ 程序设计入门》中介绍的 Dev-Cpp 作为开发环境,macOS 用户请直接去应用商店下载 Xcode,配置方法可以参照 Visual Studio。&strong&本文不讨论任何关于编辑器 / IDE 圣战的相关内容&/strong&。&/p&&p&4、
刷题&br&到这一步,你已经具备了最为基本的编程能力——但是这能力还很脆弱,需要进一步地巩固。一定要意识到,计算机科学的专业内容是知识,而编程本身则是一种技能,或者说一门手艺——它必须要通过大量的,反复的练习来提高。而最好的练习方式,就是刷题。&/p&&p&这里要推荐&a href=&http://www.zhihu.com/people/26ad33fc8a2501ddb13ce7e1517dfdd6& data-hash=&26ad33fc8a2501ddb13ce7e1517dfdd6& class=&member_mention& data-hovercard=&p$b$26ad33fc8a2501ddb13ce7e1517dfdd6&&@陈越姥姥&/a& 的 PAT &a href=&http://link.zhihu.com/?target=https%3A//www.patest.cn/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://www.&/span&&span class=&visible&&patest.cn/&/span&&span class=&invisible&&&/span&&/a&——直接去 &a href=&http://link.zhihu.com/?target=https%3A//www.patest.cn/contests/pat-b-practise& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&PAT 乙级的题库&/a&。&/p&&p&乙级的大部分题,都适合刚刚学会编程的读者们来做——完成这些“水题”可以有效增强自信,并实际地快速提高你的代码量,进而提高编程技能。需要注意的是,PAT 乙级的一部分题需要基本的数据结构和算法知识,现在你可以先不做——进入题库之后可以选择按通过率排序来依次完成。如果你遇到了困难,可以直接通过搜索引擎搜索 PAT + 题号,通常都能找到解法——你可以先看一遍解法,理解其思想,然后自己亲手写一遍。这里你会发现,虽然 PAT 支持 Python,但是几乎所有能找到的解题代码都是由 C/C++ 写成的——这也是我们推荐你通过 C 家族语言入门的原因。&/p&&p&5、
可选:&a href=&http://link.zhihu.com/?target=http%3A//www.xuetangx.com/courses/course-v1%3ATsinghuaX%2BBsp/about& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&面向对象程序设计(C++)&/a&&/p&&p&这门课程不用上完,只要看第一章就可以了——关键是理解编译和连接的过程,如何在命令行下编译,以及如何写 makefile ——这也是很多前辈推荐初学者从 Linux 入门的原因。然而事实上,根据最低耦合原则,这些内容本身并不是学习编程所必须了解的内容,而这些内容的学习本身也并不需要把时间浪费在学习 Linux 相关知识上——对于缺乏助教支持的读者来说,&strong&你完全可以等学会编程之后再去学习怎么使用 Linux&/strong&。&/p&&p&Windows 用户可以直接使用 MinGW、Cygwin 或者 Windows 10 提供的 Linux Subsystem,macOS 用户可以直接使用自带的终端——实际动手做一遍,用 cpp 文件编译一个可执行文件出来,建立这样一个最初的印象就可以了——接下来的学习可以仍然围绕着你原来使用的开发环境来展开。&/p&&/blockquote&&p&&b&# 更上一层楼:数据结构与算法的学习&/b&&/p&&p&语言关解决了,最基本的编程能力建好了,接下来你就可以进行数据结构与算法课程的学习了——正如我们前文所说的那样,这部分知识的性价比极高,在这一部分进行扎实地学习和充分的练习,可以让自己的编程能力拥有一个质的飞跃——可以说,对于真正想要从事开发工作的读者来说,这一步是绝对必不可少的。&/p&&p&需要特别注意的是,《数据结构》跟《算法设计与分析》本质上是两门不同的课程——其层次不同,侧重点也不同。所以入门的时候最好不要选择名字里把“算法”两个字放在前面的课程——例如 MIT《算法导论》公开课。相信我,如果你用它入门的话,那你一定会学得一头雾水的……&/p&&p&&b&1、完成&a href=&http://link.zhihu.com/?target=http%3A//mooc.study.163.com/course/ZJU-%23/info& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&《数据结构》&/a&&/b&&/p&&p&继续给陈越姥姥打广告……这门课程每半年开一次,分别在网易云课堂和中国大学 MOOC 上——作为入门课来说,这门课程是非常出色的,当你完成第一阶段的学习之后,你已经有了完成这门课程的能力。一边学习,一边练习——这门课程本身提供了一个单独的训练平台,里面的题最好全都做完——如果没时间的话,那就至少把课程中强调“一定要做”的题做完。&/p&&p&&b&2、继续刷题&/b&&/p&&p&我们还是以 PAT 为主——因为其他 OJ 平台通常都是面向 ACM 的,作为初学者来说接触它们仍然为时尚早。在学完栈和队列等线性数据结构之后,乙级剩下的题也都可以做了——乙级完成之后,可以直接开始进入甲级。等你把 PAT 刷完,你可以试试挑战别的 OJ 了——比如著名的 &a href=&http://link.zhihu.com/?target=http%3A//poj.org/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&POJ &/a&&/p&&p&&b&3、完成&a href=&http://link.zhihu.com/?target=http%3A//www.xuetangx.com/courses/course-v1%3ATsinghuaX%2BBsp/about& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&《数据结构(C++)》&/a&&/b&&/p&&p&清华邓俊辉老师的数据结构,有兴趣的可以学一遍——和前面那门课程相比,这门课程难度更大,含金量也更高,但是入门门槛显然也更高,并且线上版课程砍掉了一部分关于图论的内容,这一点需要注意。这门课程一共有 4 组共 12 道编程题,普遍有着巨大的难度(相对于之前做过的题),请大家量力而行。&/p&&p&&b&# 可选:学习C#和WinForm开发&/b&&/p&&p&C# 作为 JAVA 和 C++ 的发展,是一种现代、先进而优雅的编程语言——现在你已经学习了 C++ 和/或 JAVA,如果你有 Windows 环境的话,那你可以试着学习一下 C# 和 WinForm 开发。C# 也是 C 家族语言的典型成员,通过学习 C#,你可以 &strong&实际地演练一下如何进行知识迁移,真切地感受目前自己已经拥有的能力&/strong&——这个步骤,可以极大地增强你的经验和信心。&/p&&blockquote&&p&1、完成&a href=&http://link.zhihu.com/?target=http%3A//mooc.study.163.com/course/PKU-%23/info& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&《C# 程序设计》&/a&&br&&/p&&p&这门课程介绍了 C# 的基本语法、WinForm 基本入门、委托(Delegate)和事件(Event)等一系列 C# 特有的特性——作为入门课程来说是合格的。&/p&&p&这里需要给大家介绍一个小技巧——对于网易云课堂的课程,建议大家在电脑上安装一个安卓模拟器,然后使用客户端来观看课程视频——包括这门课程在内的很多老师的语速似乎都很慢,而云课堂网页版的播放器并不支持变速播放……&/p&&p&2、学习&a href=&http://link.zhihu.com/?target=http%3A//mooc.study.163.com/course/BIT-%23/info& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&《面向对象软件开发实践之基本技能训练》&/a&第一第二章&/p&&p&@金旭亮 老师出品的课程,非常出色——把所有课程视频看完,照着写一遍所有示例,现在你已经可以写出小的桌面程序了。&/p&&p&这个阶段看起来并不是必要的——但是这个阶段的学习,有以下三个方面的重要作用:&/p&&ul&&li&&p&&b&实际体会一下如何进行知识迁移&/b&——这个时候你会发现,你虽然是第一次接触 C#,但是写起代码来却一气呵成,全然没有你想象得那么困难。如果你以后打算从事 Android 开发相关工作的话,那么你就会发现,你在这个阶段学习的很多内容都可以几乎无缝地迁移到 Android 领域。&/p&&/li&&li&&p&&b&增强自己的信心&/b&——之前你的所有编程练习都是在黑乎乎的命令行下完成的,现在你终于可以开发桌面 GUI 程序了!这一步可以提供巨大的正向反馈,极大地增强你的信心。而 WinForm 虽然已经落后,但是在初学阶段这反而是它的优势——你只要学会最基本的 C# 语法、面向对象编程思想,并理解事件驱动机制就可以进行开发了,几乎不需要学习任何“没有用”的,无法迁移的知识。&/p&&/li&&li&&p&&b&可以以很低的代价,快速开发出较为庞大复杂的程序&/b&——这个时候,你就会发现你最初写的代码已经很难维护了。这可以让你切身了解到软件工程、设计模式等等的重要性——并且以低廉的成本,给你一个可以演练它们的舞台。&/p&&/li&&/ul&&/blockquote&&p&&b&# 学习一种脚本语言&/b&&/p&&p&当你已经学会了至少一种 C 家族语言时,你的核心编程能力已经初步构建完成——为了你的全面发展,有条件的话推荐你掌握至少一种脚本语言。&b&我们建议选择 Python&/b&,当然你也可以选择 JavaScript 或者其他任何一种你喜欢的脚本语言。&/p&&p&这里以 Python 为例进行说明:&/p&&blockquote&&p&1、完成 &a href=&http://link.zhihu.com/?target=http%3A//www.xuetangx.com/courses/course-v1%3AMITx%2B6_00_1x%2Bsp/about& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&MIT 6.00.1x(麻省理工:计算机科学和 Python 编程导论)&/a&。&/p&&p&这门课程已经被很多人安利过了——现在你已经不是一个纯粹的菜鸟了,所以有些编程思想相关的内容可以跳过(但如果你对这些内容掌握不扎实的话可以复习一下)。重点应该放在以下内容上:&/p&&ul&&li&Python 的基础语法&/li&&li&Python 内置数据结构的使用方式&/li&&li&Python 中的函数定义,如何使用Python进行面向对象编程&/li&&/ul&&/blockquote&&p&如果你的 JAVA 或者 C++ 基础在之前的步骤中打得足够扎实的话,那么不管是 Python 还是 C#,你都可以做到只用几天甚至几小时的时间,就完成语言部分主要内容的学习——这对于初学者来说是完全不可想象的。知识迁移的威力,由此可见一斑。&/p&&p&&b&# 思想和方法:软件工程,设计模式和进一步的专业知识&/b&&/p&&p&如果你之前用 C# 写过足够大的 WinForm 程序的话,那现在你手头多半已经有一个你亲}

我要回帖

更多关于 js替换字符串 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信