已经很久都没有更新内容了,有点不太知道要写一些什么内容,非常多的书,都有写各种各样的知识和经验,但是实际发现,真的在工作中,注意基础的人非常少,非常多的人都是只关注完成工作,而不是在工作中成长。
在阅读公众号的时候,发现几个非常好的内容,我这边也简单的总结一些思路和我自己的经验之谈,哪里不好欢迎批评。
不要学习微服务框架,学习演进式架构(Evolutionary Architecture)。
不要学习新的编程语言,学习代码整洁之道、设计模式、领域驱动设计(DDD)。
不要学习 LeSS 和规模化敏捷框架(SAFe),学习精益生产原则(Lean manufacturing principles)。
不要学习 Hystrix,学习容错模式(Fault Tolerance Patterns)。
不要学习 Docker,学成持续交付。
不要学习 Angular、React 和 Vue,学习 Web、HTTP 和 REST。
这几个是在公众号看到的,觉得非常有道理,每个阶段的同事都很少去关注基础的东西,而是直接使用各种各样的工具来完成工作,一旦出现了任何瓶颈,一下就完蛋了。
做前端的同事,不懂http,只懂react、vue
做架构的同事,在网上抄了个架构,不根据现有情况进行架构改造
做容器的同事,只操作docker 不管ci/cd,只是把docker或者k8s当作一个应用来启动和关闭。
以下是我提供的一些小建议,希望看我文章的人,在看的时候,首先要 “质疑我”,再去想“这个人说的对不对”,之后去验证我说的内容,如果我说的是错的,特别特别欢迎你们来怼我,也帮助我改善现有的知识体系。
1、多花一些时间在基础上,包括软件和硬件
1.1、硬件是如何工作的,硬盘,磁盘,cpu,内存是如何配合的,在现今这个云服务器漫天飞的时代,很少有人去重视最基础的物理机了,也很少有人去关注计算机到底是如何工作的,其实非常多的时候,真的只是某些指标,或者某些特性不足以满足你的应用需求。不要加加加加配置,而是找问题具体在哪,比如高运算的机器要增加cpu,多缓存的内容考虑磁盘缓存或者内存缓存,频繁读写的考虑磁盘性能等等的问题。尽量是把系统的资源用到指定的高度,而不是买买买。
1.2、硬件系统是如何启动的。在系统启动的时候去了解bios或者uefi具体是如何引导的硬件(这个在物理机房才有价值,云真的是不用研究者玩意),计算机的每一个步骤,都可能给你带来一些不安的隐患,比如装系统引导的盘不对,误删重要数据,再比如使用uefi的u盘在legacy机器启动装不上系统。虽然只是个装系统的小事,但是现在太多的从业者都装不上系统,说难听点,我觉得挺好笑的。
说个真事,有段时间面试桌面运维,只要能装上系统就算过关,面了十几个人才不犹豫的装上了系统。别不信,这个是真的。
1.3、了解自己所使用的软件系统是如何工作的:
1.3.1、提高工作效率,系统出了问题第一时间解决。
1.3.2、了解系统机制,把自己干的活最大化(不管是编程,还是运维,还是画图),为什么小A干活就比小B快。
1.3.3、了解系统才能优化,同样的机器,为什么别人比你的好用,优化服务器,系统基础设置(环境变量,参数,常用快捷键、小技巧等)
1.3.4、了解系统机制,内核是做什么的,驱动是做什么的,为什么要有虚拟内存(交换分区),什么是文件系统,什么是内存地址、为什么要有内存回收,等等。
PS:乍一下想到的也就这些,一定没法概括全,只是提供一个思路供大家参考,还是上面说的,强烈推荐怀疑我,强烈的怀疑我。怀疑我的对错去验证我所说的内容。
2、多花一些时间在“别人的领域”,这个领域不具体描述了,只用小标题写一些内容仅供参考,学习别人的领域是很难的,需要下功夫。
举几个例子:
2.1、运维要去了解程序和“内存、cpu、磁盘”,如果程序的代码,一个小功能申请了非常多的内存,或者是cpu100%或者是磁盘iops占满,非常多的时候是不自知的,就可能需要运维去帮忙解决问题。比如内存回收不合理,比如open内容不close,比如每次都缓存非常多的数据而不释放等等。
2.2、学习http协议。在做web项目的时候,不应该是去如何配置nginx(或者其他的软件如httpd什么的),而是应该去学习http协议,200代表什么,404,403等等的含义,通过浏览器firebug这类的工具进行http拍错,能有效的解决非常多的问题。
当然了,不能知看客户端,还要看服务端。比如php程序没有权限写入,要看nginx(或者httpd)所使用的用户和本地文件夹权限还有php代码,都有可能导致403的问题。代码里面写错了也有可能会是这个报错。这个可能性太多了。仅供参考。
为什么说这么多关于http的,说白了。不管什么服务器,什么代理软件,最终都是围绕着http协议来工作的,如果知道每个东西的含义,拍错的时候就可以从根本出发,而不是从软件出发,不管现公司使用的什么软件,都可以很快的定义问题,之后根据这个软件找具体的问题了。
PS:举个例子,页面403,在代码没问题的情况下:
1. nginx+fastcgi方式运行php,可以把nginx、php、文件夹、给统一的主属权限,而不是给777,777在代码存在问题的情况下会有安全隐患。
2. httpd使用的方式是so扩展的形式,只需要考虑httpd和文件夹的权限就好了。
3. 如果是windows的iis,就要考虑iis服务的运行用户和文件夹的权限。
4. 再就是index页面是否存在。
一般来说,403的情况就是这样。如果再换一个工具,要考虑的,也无非是“权限+index”的配置是否正确,之后,针对权限去搜索问题,就快得多。在实际工作中,发现搜的答案都很有局限性,比如给777问题就解决,但是实际情况是没有index,学习基础,能更快的帮你解决这类的问题,这只是举例子。
2.3、学习一些运营的内容,从http访问日志,程序日志等等的内容,去分析流量,访问量,pv,独立ip等等的内容,就算公司暂时不需要,但是等有需要的时候,这个就是你的加分项。
2.4、流程管理,这个就说一句特别虚的话,上线流程是否可以更简单,是不是可以不需要运维干预。
2.5、学习技术以外的内容,如何聊天沟通,如何和程序聊程序,如何和测试聊测试等相关的内容。
3、做各种笔记,甘特图,使用git或者svn这类的东西做自己的学习轨迹 + 自我管理
3.1、成长轨迹:这个就比较简单了。就是自我的管理,去整理自己会的东西,形成自己的知识体系,通过git(svn)来记录自己的成长轨迹,年中看年出,看看自己是否有进步有成长,如果没有成长为什么。
3.2、自我管理:每天的工作内容整理规划,通过积累各种各样的内容,哪些是重复劳动,是否能优化掉,哪些工作内容能学到一些知识。整理就好。
4、一些惯性思维的弊端,非常多的时候都有,程序员思维,运维思维,产品思维,运营思维等等的思维方式,举一反三,通过合适的思考方式来,用最合适的方法解决手头的问题。
例子可能并不是非常合适,仅供参考:
4.1、程序员思维:这个功能没有,我们做一个吧。
4.2、运维思维:这个功能有没有现成的工具,我们找一个。
4.3、运营或产品思维:某些功能的开发。(这个觉得放在着不太合适,也不单放了,参考下)
解释下:
第一个,程序员有可能会造轮子。
第二个,可能只是个小功能,但是找了个大工具,如果会开发,可能只是2分钟就写了个小工具,不要把简单的工作复杂化。
第三个,比如用户系统的新增留存,可能在开发初期赶进度要求比较低,但是设计的时候程序需要预留某些字段,比如注册时间,消费时间;比如pv、uv,可以通过nginx+站长同级分析,比如按钮埋点来确定有效用户等等。有一些产品或者运营是没有技术能力的,这种时候就需要相互配合来解决问题了。
5、 持续学习。持续学习。持续学习。 重要的事说三遍。
大写的PS:其实想写的内容挺多,真的在写的时候就发现有点散,写完了也是有点散。对付看吧,这个文章可能也不会更新。
欢迎加好友,我会在空闲的时间回答你的各种问题。不管是技术类还是管理类。真诚的希望能给你们有效的建议。
我的联系方式:http://www.sa-log.com/about
- 本文固定链接: http://www.sa-log.com/389.html
- 转载请注明: 王, 帅 于 我的系统记录 发表