每月IT摘录201903

技术

1.在开发高并发系统时,有很多手段来保护系统,如缓存、降级、限流等。缓存可以提升系统的访问速度,降级可以暂时屏蔽掉非核心业务,使得核心业务不受影响。限流的目的是通过对并发访问进行限速,一旦达到一定的速率就可以拒绝服务(定向到错误页或告知资源没有了)、排队等待(如秒杀、评论、下单等)、降级(直接返回兜底数据,如商品库存默认有货)。
目前主要有以下几种限流方式:
信号量;计数器;滑动窗口;漏桶算法;令牌桶算法;分布式限流。
2.Tomcat其实是一个Servlet容器。当前执行线程有可能阻塞,所以Tomcat准备了一个非常大的线程池,里面有好多线程。每过来一个请求,就给一个线程,自己玩去吧,随便“折腾”。
3.HTTP-over-QUIC 实验性协议将被重命名为 HTTP/3,并有望成为 HTTP 协议的第三个正式版本。
QUIC (Quick UDP Internet Connections)是 Google 推出的一个项目,旨在降低基于 TCP 通讯的 Web 延迟。QUIC 非常类似 TCP+TLS+SPDY ,但是基于 UDP 实现的。
HTTP/3使用UDP代替了TCP,UDP是一个非连接的协议,传输数据之前源端和终端不建立连接。 UDP信息包的标题很短,对系统资源的要求比TCP要低。并且UDP是使用最大努力交付,即不保证可靠交付。
4.CI、DI。
持续集成(CONTINUOUS INTEGRATION),持续交付(CONTINUOUS DELIVERY),持续部署(CONTINUOUS DEPLOYMENT)。
Jenkins就是现在很流行的集成工具。
5.一般来说,常用的负载均衡方式有nginx和lvs两种,分别是7层和4层的负载均衡,一个基于域名进行负载均衡,一个基于端口号做负载均衡。了解它们的实现原理,会让你更好地理解这部分内容。
6.典型的工作流包括以下几个步骤 开发、 提交、编译、测试、发布。
有了Jenkins的帮助,在这5步中,除了第1步,后续的4步都是自动化完成的,具体的,当你完成了提交,Jenkins会自动运行你的编译脚本,编译成功后,再运行你的测试脚本,这一步成功后,接着它会帮你把新程序发布出去,特别的,在最后一步,你可以选择手动发布,或自动发布,毕竟发布这件事情,还是需要人为的确认一下比较好。
简而言之 > Jenkins可以帮你在写完代码后,一键完成开发过程中的一系列工作 使用Jenkins的好处显而易见,它减少了你的重复劳动。
更重要的是,一个团队的开发流程一开始是不一致的,不一致往往会带来各种各样的问题,最终体现在软件的质量或开发效率不够高,而Jenkins会帮你规范大家的行为,从而避免一系列的问题。
7.Oauth2:开放授权是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源,而无需将用户名和密码提供给第三方应用。 OAuth允许用户提供一个令牌,而不是用户名和密码来访问他们存放在特定服务提供者的数据。每一个令牌授权一个特定的网站在特定的时段内访问特定的资源。
8.即使你天天敲代码,你的进步也如此之慢,因为你平时就缺乏架构设计、代码设计的锻炼,日积月累,你也只是搬砖的速度比之前更快一点而已。
9.微服务技术生态又发生了巨大变化,容器,PaaS,Cloud Native,gRPC,ServiceMesh,Serverless等新技术新理念你方唱罢我登场,不知不觉我们又来到了微服务2.0时代。
10.微服务的安全方案:
使用支持OAuth 2.0和OpenID Connect标准协议的授权服务器(个人建议定制自研);
使用API网关作为单一访问入口,统一实现安全治理;
客户在访问微服务之前,先通过授权服务器登录获取access token,然后将access token和请求一起发送到网关;
网关获取access token,通过授权服务器校验token,同时做token转换获取JWT token。
网关将JWT Token和请求一起转发到后台微服务;
JWT中可以存储用户会话信息,该信息可以传递给后台的微服务,也可以在微服务之间传递,用作认证授权等用途;
每个微服务包含JWT客户端,能够解密JWT并获取其中的用户会话信息。
整个方案中,access token是一种by reference token,不包含用户信息可以直接暴露在公网上;JWT token是一种by value token,可以包含用户信息但不暴露在公网上。
11.控制器不应该执行业务逻辑,而是依赖委托;控制器应该处理应用程序的HTTP层,这不应该传递给服务。
12.Consul的服务注册与发现与Eureka对比:
Consul当然是可以作为服务注册中心的了,可以用做微服务架构的服务注册和发现。
同时这里可以先给大家说一下,Consul的服务注册机制选择的是基于Daft协议的强一致,没有像Eureka那样使用最终一致的效果。
13.分布式计算(computation)与分布式存储(storage)。计算与存储是相辅相成的,计算需要数据,要么来自实时数据(流数据),要么来自存储的数据;而计算的结果也是需要存储的。在操作系统中,对计算与存储有非常详尽的讨论,分布式系统只不过将这些理论推广到多个节点罢了。
那么分布式系统怎么将任务分发到这些计算机节点呢,很简单的思想,分而治之,即分片(partition)。对于计算,那么就是对计算任务进行切换,每个节点算一些,最终汇总就行了,这就是MapReduce的思想;对于存储,更好理解一下,每个节点存一部分数据就行了。当数据规模变大的时候,Partition是唯一的选择,同时也会带来一些好处:
(1)提升性能和并发,操作被分发到不同的分片,相互独立。
(2)提升系统的可用性,即使部分分片不能用,其他分片不会受到影响。
理想的情况下,有分片就行了,但事实的情况却不大理想。
原因在于,分布式系统中有大量的节点,且通过网络通信。单个节点的故障(进程crash、断电、磁盘损坏)是个小概率事件,但整个系统的故障率会随节点的增加而指数级增加,网络通信也可能出现断网、高延迟的情况。在这种一定会出现的“异常”情况下,分布式系统还是需要继续稳定的对外提供服务,即需要较强的容错性。最简单的办法,就是冗余或者复制集(Replication),即多个节点负责同一个任务,最为常见的就是分布式存储中,多个节点复杂存储同一份数据,以此增强可用性与可靠性。同时,Replication也会带来性能的提升
14.Partition和Replication是解决分布式系统问题的一记组合拳,很多具体的问题都可以用这个思路去解决。但这并不是银弹,往往是为了解决一个问题,会引入更多的问题,比如为了可用性与可靠性保证,引用了冗余(复制集)。有了冗余,各个副本间的一致性问题就变得很头疼,一致性在系统的角度和用户的角度又有不同的等级划分。如果要保证强一致性,那么会影响可用性与性能,在一些应用(比如电商、搜索)是难以接受的。如果是最终一致性,那么就需要处理数据冲突的情况。CAP、FLP这些理论告诉我们,在分布式系统中,没有最佳的选择,都是需要权衡,做出最合适的选择。
15.迭代(iterate),指的是按照某种顺序逐个访问列表中的每一项。比如,for语句。迭代只能对应集合,列表,数组等。
遍历(traversal),指的是按照一定的规则访问树形结构中的每个节点,而且每个节点都只访问一次。
递归(recursion),指的是一个函数不断调用自身的行为。比如斐波纳契数列。

工作

1.平时除了钻研技术,还要多思考行业、公司、产品、业务等。作为开发者,要有自己的理解。
2.工作选择上,可能涉及的因素有:(1) 行业/公司前景、(2) 薪酬福利、(3) 工作环境、(4) 工作内容、(5) 老板/同事关系、(6) 是否是核心部门、(7) 是否是在大城市、(8) 离家远近
个人比较看重薪酬、行业、技术。
3.行业背景非常重要;工作3年后必须确定自己的行业背景,比如一直从事电信行业,一直从事银行项目,一直从事ERP行业等等。
一个程序员不可能是一直写代码的,就是写代码也要知道业务逻辑,满足什么需求;俗话说隔行如隔山,每个行业的业务都不一样,甚至差别很大,比如你一直从事流媒体的研究,让你跳槽到一家银行项目,完了,一切从头学吧,以前的行业经验都用不上了;而且,一个公司公司招人,就是希望找到那些很容易上手,不需要培训业务很久的程序员;频繁跳槽的朋友,一定要注意这点;
一直在一个行业呆久了,就可以成为这个行业的专家;我们可以经常看到,一个项目组的某个leader,代码写的一般,但是却可以跟客户流畅的沟通,控制着新需求的提出,bug的修正等等;而客户也很愿意跟他打交道,因为那些老的项目只有他能维护,他甚至熟悉系统的每一张表结构——-可想在这个行业呆的时间有多久啦。
4.没去过大公司的 一定要去。学一下流程 正规做事的方式,体量大起来之后的套路,合作的模式。
如果有大公司背景,以后换公司很有优势。小公司随时都有倒闭裁员的风险,而且做的东西太杂。
5.苦干加巧干,才是成长期的正道。越是压力大的时候,越是应该停下来总结一下自己学习的知识 ,纠正自己犯过的错误,多与同时沟通了解项目情况 ,多向项目经理请教开发时我们遇到的问题。
苦干是为了积累,巧干是为了更快的提高。
作为程序员,在刚进入公司,没有得到公司认可的情况下,能否能用数字把自己的成绩说清楚,是成功与否的关键。这很大程度上决定了,我们用多久能竖立自己在公司、在项目中的地位。
隔一段就总结自己的收获,写了多少行代码,记录下来随时备查,即为了给领导说明问题,更重要的是能让我们自己感受到成长的快乐。
6.工作明显没有前两年好找,特别是移动端开发,前几年移动端开发吃香的时候,工资比后端的还高,这两年随着前端技术的发展,纯安卓和iOS工程师的岗位越来越少,身边的移动端朋友只好转前端去了。

程成以前在一线互联网公司拿着高薪资,写着熟悉的代码,工作安稳舒适,未曾考虑过跳槽的事。
可经历过寒冬,程成似乎变得理智与麻木:没有一家公司是稳定的,没有一份工作是稳定的,只有每个月到手的工资是真实的。
7.大公司的两个问题:
权限问题,做这事没有权限,做那事也没有权限。
另外就是,一个流程走一个月,甚至一个通了一个月的方案会随时被叫停,可能因为已经错过热点。
8.因为好的企业我不认为愚蠢到用工作时间来先限定一个人。更推崇如今的OKR制度:以结果为导向,过程没那么重要。
9.对一名程序员来说,职业生涯有3个关键点:一个是刚毕业入行时,一个是30岁的时候,另一个是35岁的时候。每个点都有自己的关键所在。30岁则是技术的转折点,要么“会当凌绝顶”,要么泯然于众生。(个人并不是很认同,只要想学,任何时候都不晚的。)
10.有的人在简历上写一些rpc治理框架,比如dubbo,spring cloud这些!
面试官一看到这些,可能会下意识的去翻有没有事务处理。因为一旦采用了微服务架构,必然会牵涉到事务。他会看有没有体现出Tcc(补偿机制),XA(柔性事务),MQ(消息队列)等常见的事务解决方案技术!如果没有出现,百分百是demo,妥妥的是包装简历!
11.Leader的管理方式和处事原则对团队影响很大。无论是技术,眼界,还是人品。
12.努力成为团队中的技术Leader,多和他人交流讨论,帮别人解决问题,对自己的成长很有帮助。
13.工作肯定会碰到很多问题,需要不断去问别人。但是自己脸皮薄,生怕别人问烦了。后来就开始琢磨,怎么才能让别人不被自己问烦,总结下来,大致这样,首先先过滤白痴问题,比如基本语法、函数使用这类基本上网一查就知道的问题;其次,每个问题先自己想至少两种方案,然后把问题和自己想到的方案拿过去去让别人帮我看,是不是合适。
14.偶尔没有达成目标也不要气馁,因为人不是机器,都是会懈怠的。你只需要知道,你需要战胜的是昨天的自己,过去的自己,而不是其他任何人。
职场就是长跑,跑慢点无所谓,但不代表我们中途可以停下来。
15.聪明点的程序员还是会封装的,自己就会把一些常用的工具类,一些方法,一些控件进行封装,留着以后备用。在公司开发完 A 项目,然后开发 B 项目的时候,就会很简单,把自己封装的东西拿过来直接用
16.如何快速熟悉新项目?
*页面访问路径——前端项目——后台服务——数据库地址
前端页面分别调用了哪些后台接口?
*项目部署都需要用到jenkins,只要查看jenkins配置的命令,就可以把部署环境一一整理出来。
*了解项目间的关系。
哪些是底层服务?哪些是聚合层?哪些是服务提供者,哪些服务消费者?
*整理数据库表,整理Controller层的所有接口。
*找核心项目,筛选核心数据表,判断哪些是核心表,找出表之间的关系。
*运行项目,认真看日志。
*把握重点,先不用关注具体的琐碎代码实现。
*项目的模块太多,要结合业务去理解快一点,只看代码很晕的。
重点是关注你要写的模块,其他模块你了解就行了。
*小需求,改 BUG,解决客服或者客户问题等等。
*先问清楚需求,然后再开干。
17.德雷福斯模型将人对技能的掌握水平分为 5 个层级:
新手、高级新手、胜任者、精通者、专家
对某一项技能来讲,大部分的人都处于新手或高级新手这个层级,合计比例占到65~70% 。有大约 15% 的人是胜任者,大约10%的人是精通者,2~5%的人是专家。
18.程序员很容易被各种层出不穷的新平台、新语言、新工具、新类库吓倒。你很容易产生一种恐惧心理,感觉自己已经落后——那些程序员谈论的技术我怎么从来没有听说过?当你发现一种新技术看起来很有用或很有趣时,做个笔记,几周或几月后在回来看看它,如果人们还在谈论它,那么,你就应该进一步研究它。事实上很多热门新技术都是昙花一现,你完全可以忽略它,不要让它们浪费了你的大脑。
19.通常被打断后重回工作状态至少要15分钟。
20.程序员一定不要,视野狭窄,只关注自己的一亩三分地,囿于角色。
这种情况其实在职场中多见不仅是初级程序员,甚至工作五年以上的程序员也有类似的问题,不是自己的事情不闻不问,而且危害更大。
公司项目往往大而全,如果仅仅专注自己的那个角落,那么永远都是只见树木,不见森林。
我相信没有老板会介意下面的程序员多承担一些责任,多做一些事情,最后给项目组多一些产出。
既然老板不介意,那么就应该大胆的跳出自己的职责范围,多看看公司的其他项目,丰富自己的行业知识。
职责外的事情,帮的上的不要躲避,,努力承担更多的东西。帮助别人就是提高自己,教学相长就是这个意思。况且你这次帮了别人,下次你的项目紧或者遇到技术难题了,受助之人肯定投桃报李,这样就形成了良性互助氛围,整个项目组的产出也同步提升了。

学习

1.对终生学习的理解,不应该是让自己陷入终生的痛苦之中,而是将学习平衡于生活之中,从学习中找寻到乐趣,反过来丰富自己的生活。只有如此的学习,才能持续,才有可能终生。
如果你学习着,并痛苦着,请你先停下来,仔细的思考一番,是不是哪些方面出现了问题。譬如,自己所学不是自己喜欢的东西?譬如,自己投入学习的时间过多,失衡了生活? 再譬如,自己好高骛远,学习了超出自身理解力的知识? 等等。靠毅力,可以坚持,但终究不能持久,需要找寻到学习痛苦的根源,将其调整过来。

行业

1.金融行业安全的核心,就是风控。
2.2018年以来,P2P频现爆雷潮,光上海地区P2P违约规模已超2000亿,行业一片惨淡。
(注:p2p:peer to peer,是一种将小额资金聚集起来借贷给有资金需求人群的一种民间小额借贷模式,常见于互联网金融公司。)
3.2018年游戏行业版本号变少开放,导致行业惨淡。2019年版号重启审批,行业在回升中。
4.在短短五个月内,同款机型就发生了两起空难。中国民航局于3月11日上午发布通知称,鉴于两起空难均为新交付不久的波音737-8飞机,且均发生在起飞阶段,具有一定的相似性,为确保中国民航飞行安全,要求国内航司于3月11日18时前暂停波音737-8飞机的商业运行。
5.2018年Q4,拼多多经营亏损为26.409亿元人民币;
很多互联网公司在发展时,都是先疯狂烧钱打开市场。
6.AIOT,也就是AI加上IOT。IOT,就是物联网。
在人工智能领域,智能语音和智能机器人战线均不示弱,但在智能语音领域,苹果和微软最终的产品形态都沦为鸡肋,却让后来者亚马逊利用智能音箱弯道超车,直赶而上。
百箱大战由此开打。谷歌、苹果、京东、阿里、科大讯飞、腾讯、小米等互联网公司纷纷发布智能音箱,宣布进军 IOT。
而人工智能的背后则是强大的计算处理平台和庞大的数据库,两者的紧密支撑为人工智能带来动能。

理财

1.相反那些希望不亏的投资者,往往具有如下的良好习惯:
一是喜欢蹲坑。在股市低点时,动用最多的资金买入,将购买成本降到最低。即便后来追加资金,也喜欢在下跌或者涨幅小的上面下注。这无疑为后期的上涨积累了筹码,也避免了买在阶段性的高点。
二是喜欢趴窝。最稳健的是趴窝在绩优股上,虽然牛市涨的慢,但是风险小(例如“熊指”组合,今年盈利25.22%)。依靠日积月累,盈利不在小数。最激进的是趴窝在高弹性的指数或个股上(例如“牛指”组合,今年盈利40.92%),坚持持有到目标价才起身离席。
2.牛市孕育期市场特征是轮涨普涨、波动回撤大。可能引起市场波动的内外因素包括,国内基本面数据、金融监管、全球经济放缓、美股下跌拖累。

海通策略认为,牛市不同阶段特征不同,投资收益也不同。牛市第一阶段孕育准备期市场上涨主要靠估值修复,缺乏基本面支撑,而且投资者刚刚从熊市走出来,投资信心尚未完全恢复,会有一定的恐高情绪,因此市场往往会进二退一,上涨后出现较大回撤,这一阶段重要的是保住收益,控制回撤,历史看第一阶段基金普遍难以战胜指数。而牛市的第二阶段是全面爆发期,此时基本面拐点出现,企业盈利触底回升,配合估值上行形成戴维斯双击,牛市全面爆发,这一阶段涨幅最大,而且会出现主导产业,主导产业涨幅显著大于其他产业,因为他们的业绩更好,估值提升会更明显,戴维斯双击的乘数效应很强,这期间基金差异拉开,抓住主导产业更为重要。
着眼未来,现在需要为牛市第二阶段及全面爆发期做好准备,重点是找到主导产业。现在我国进入后工业化时代,步入信息化时代,重点发展的产业是科技类行业,而为科技类行业提供融资服务的是券商,所以未来进入牛市全面爆发期,这次的主导产业是科技+券商。
3.中证红利指数简称“中证红利”,选择上海、深圳交易所中现金股息率高、分红比较稳定、具有一定规模及流动性的100只股票作为样本,以反映A股市场高红利股票的整体状况和走势。
4.分析的时候,我们会分析企业的成,也分析企业的败,会分析商业模式,也会分析企业领导人。当一次分析不懂的时候,会多次反复分析,只要这个企业是值得我们关注的。所以我们最终手里拿着一堆还可以的企业,只要机会到来,就有机会买入,而不用思考很多。

人生

1.楼下一个男人病得要死,那间壁的一家唱着留声机;对面是弄孩子。楼上有两人狂笑;还有打牌声。河中的船上有女人哭着她死去的母亲。人类的悲欢并不相通,我只觉得他们吵闹。
2.在社交媒体时代,几乎每个人都在向世界展示“更好的自己”(夸大的自我),人们知道自己的展示有浮夸的成分,但是大多数时候却会认为别人晒出的幸福是真实的、值得羡慕、甚至嫉妒的。朋友圈只有“点赞”的功能,但是有多少人在礼节性地点赞的同时,心里却有连自己都没有觉察到的恨意呢。
3.巨婴的意思是,一个个体,在身体上已经发育为成年人,而在精神上还保留着婴儿般的思想、情绪和行为。巨婴国则指,今日的中国国民有一大部分人的心理发展水平仍处于巨婴阶段。

其他

1.印度总理莫迪2019年面临竞选连任的大考。
莫迪在第一个任期内有两大主要改革,一项是有点瞎折腾的货币改革,在限定时间内换钞,希望打击现金为主的地下经济,另一项则是商品服务税(GST)改革,希望打破各个州之间的税收壁垒,把印度变成一个真正的统一市场。
印度缴纳所得税的人凤毛菱角,相反以现金交易的地下经济却大为盛行,甚至买卖二手车也愿意通过中间人现金交易,为的就是逃避政府征税。这也是为什么莫迪要在2016年底使出雷霆手段进行币制改革的原因。

原文地址:https://www.cnblogs.com/expiator/p/10425632.html