每月IT摘录201811

技术

1.打牢基础,从会使用-了解原理-了解思想一步一步来,最怕基础很弱但却以什么都用过为荣的人,这样的人我招进来也只是初级而已,工作年限再多也没有用。少林里面,有功和拳之分,如蛇拳猴拳是拳,马步功石锁功是功,你觉得你练会了蛇拳就能打人?同样,编码之路,分清什么是功什么是拳,一开始80%事件花在练功上,而不是练拳。练武不练功,到老一场空。

2.《深入理解计算机系统》比较适合一直从事Java Web开发和APP后端开发工作的人群。《tcp/ip详解 卷一、二、三》比较适合做网络编程的人群,比如你使用netty去开发的话,那么就要对TCP/IP有更深入的了解。而《数据结构与算法》这本书,则比较适合做计算研究工作的人,比如刚才提到的分布式计算。
另外,这里所说的适合,并不是其它两本对你就没有用。比如你做Java Web和APP后端开发,《tcp/ip详解 卷一、二、三》这本书对你的作用也是很大的。这里只是分出个主次关系而已,你要是时间足够的话,能把三本都精读那当然最好不过了。但如果时间有限的话,那么就先挑对你帮助最大的书去读。
理论上来讲,这一年你能把这三本其中一本精读下来,就已经非常厉害了。有了基础,有了前面的工作经验,你就可以去开拓属于你的领域了。

4.学框架必须理解原理。面试时,如果会用dubbo他们就问你计算机网络,网络编程,rpc,netty,会用zookeeper他们就问你分布式原理,怎么保证一致性balalala。

5.reactor设计模式,是一种基于事件驱动的设计模式。nio中采用了reactor设计模式。
在事件驱动的应用中,将一个或多个客户的服务请求分离(demultiplex)和调度(dispatch)给应用程序。在事件驱动的应用中,同步地、有序地处理同时接收的多个服务请求。
6.PHP 、 Python,都适合快速开发不太复杂的 Web系统。但是大型复杂的商业系统开发还是用 Java合适。

7.一个RPC框架大致需要动态代理、序列化、网络请求、网络请求接受(netty实现)、动态加载、反射这些知识点。
现在开源及各公司自己造的RPC框架层出不穷,唯有掌握原理是一劳永逸的。
8.掌握原理最好的方法除了阅读源码,自己动手写是最快的。

9.使用Hystrix进行熔断和降级。

比如,积分服务挂了可以来个降级:每次调用积分服务,你就在数据库里记录一条消息,说给某某用户增加了多少积分,因为积分服务挂了,导致没增加成功!这样等积分服务恢复了,你可以根据这些记录手工加一下积分。这个过程,就是所谓的降级。

 10.一般微服务架构中都必然会设计一个网关在里面,像android、ios、pc前端、微信小程序、H5等等,不用去关心后端有几百个服务,就知道有一个网关,所有请求都往网关走,网关会根据请求中的一些特征,将请求转发给后端的各个服务。而且有一个网关之后,还有很多好处,比如可以做统一的降级、限流、认证授权、安全,等等
 11.微服务架构中,发起请求是通过Hystrix的线程池来走的,不同的服务走不同的线程池,实现了不同服务调用的隔离,避免了服务雪崩的问题。
 12.redis哨兵的作用是监控主从,主从切换的。可以是一主多从,不过数据都是冗余存储的,每个主从节点存储的数据都是一样的。
而集群是将数据分片存储,每个节点存储一部分数据,从而达到分布式集群的目的。
 13.通过2018年的面试题来看,可以看出目前大型互联网公司面试考点为:
  • 性能调优、算法数据机构
  • 高并发下数据安全、接口冪等性、原子性等
  • 分布式下协同、已经锁的处理
  • 数据库的分库分表、项目之间的垂直拆分

出现频率高的技术点有:HashMap、JVM、Dubbo、Mybatis、Zookeeper、http tcp/ip
14.数据结构和计算机基础>Java基础>其他开源框架。

少看点乱七八糟的开源框架吧。工作上要用时再学来得及的。老老实实每天学点经典源码我觉得进步速度就贼快了。
15.互联网公司面试经常会考察的点:HashMap、JVM、Dubbo、Mybatis、Zookeeper、http tcp/ip
16.如果是长远的后端开发,那就要全面深入的发展,首先是语言,没有哪种语言,是和后端或者 web 开发划等号的,Java 要想深入,不要过多的搞设计模式。语言知识你要掌握的知识的一部分,以下多个方面你都要掌握,记住,当你有能力掌握这么多知识的时候,你的学习能力有具备了,具备了学习能力,什么具体的 java 技术、后端技术,都不是什么问题,哪怕下一次技术更新,你还能依靠你的学习能力,继续保持技术先进性。
  • 1. JVM 深入了解,Tomcat 深入了解,多看 Java 库的源码
  • 2. 计算机网络深入理解,物理层、数据链路层,可以不用深究,但是网际层、会话层、应用层的概念要熟悉,IP 协议、HTTP 协议要熟悉,基于 IP 协议的子网划分,要熟知
  • 3.

    操作系统,这是无论哪方便开发都要熟悉的,不论是前端、移动端、后端、数据库、运维,只要是搞计算机的,都要有扎实的计算机操作系统的功底,操作系统的体系结构、运行机制,Linux
    内核、账户管理、安全,多用户多进程模式、内存管理、进程管理、进程间通讯等等,《深入理解计算机原理》,《 Linux
    入门到精通》等等,要多学多练习,可以使用 Java 去调用操作系统的底层 API,试试,如果想不明白的,可以使用 C 多去研究一下

  • 4.
    数据库方面,SQL 与 NoSQL,SQL 要注意 SQL 语言的范式模型,从逻辑上理解究竟什么是 SQL,SQL
    语句为什么能标识数据查询,SQL 能做到什么,不能做到什么,然后就是 SQL
    数据的实现,mysql、oracle、postgresql,深入理解数据引擎,游标这些东西
  • 5. 有了上述基础,再去学习一些理论知识,比方说马丁大叔提出的 IOC 理论、Roy Thomas Fielding 提出的 Rest 理论,SOA 的提出和发展、微服务的提出和发展,充实对现代分布式计算架构的理解
  • 6. 尝试自己实现一套 IOC、SOA、微服务框架,锻炼自己通过理论去进行实践的能力,当然这点不是要求你造*,只是为了能够让你到达,能够通过理论,造*的程度

17.Nginx是Web服务器(Http Server)。可以进行负载均衡、反向代理。
Tomcat是应用服务器(Application Server),是一个可以运行Servlet/Jsp应用的容器。

18.SpringMVC 它的思想是全部请求统一用一个 Servlet 去做请求转发与控制,这个 Servlet 叫 DispatcherServlet。
19.大家每周完成一个 ARTS:每周至少做一个 leetcode 的算法题、阅读并点评至少一篇英文技术文章、学习至少一个技术技巧、分享一篇有观点和思考的技术文章。
(也就是 Algorithm、Review、Tip、Share 简称 ARTS)需要坚持至少一年。

20.RPC(Remote Procedure Call)--远程过程调用。

一个RPC框架大致需要动态代理、序列化、网络请求、网络请求接受(netty实现)、动态加载、反射这些知识点。

21.整个码农界有10%做底层、中间件就不错了。剩余90%都是业务开发,目标是商业的变现,取决于你对业务的深刻理解,对市场、产品、运营等知识的了解。也并没有那么多人做高尖端技术产品,即使这些人,可能也就精通自己的领域知识,搞人工智能的不需要懂JVM,搞JVM可能也不懂数据库,搞数据库的可能也没去看jdk源码。

22.zookeeper分布式锁。
客户端想要加锁,都是先在zookeeper中一个锁节点下创建一个接一个的临时顺序节点。
如果自己不是第一个节点,就对自己上一个节点加监听器。
只要上一个节点释放锁,自己就排到前面了并取得锁,相当于是一个排队机制。
而且用临时顺序节点的另外一个用意就是,如果某个客户端创建临时顺序节点之后,不小心自己宕机了也没关系,zk感知到那个客户端宕机,会自动删除对应的临时顺序节点,相当于自动释放锁,或者是自动取消自己的排队。
23.所谓的"没有银弹"是指没有任何一项技术或方法可使软件工程的生产力在十年内提高十倍。(1987年提出)

在软件开发过程里是没有万能的终杀性武器的,只有各种方法综合运用,才是解决之道。

24:TDD:Test Driven Develop  测试驱动开发

DDD:Domain Driven Develop  领域驱动开发

25.分布式session共享,有多种方案解决。可以选择使用Redis存储session。用nginx负载均衡,然后tomcat集群从redis中获取session。

工作

1.保证充足的睡眠并保持健康。如果你疲倦了或者生病了,就更难保持专注,更易分心走神。

2.在工作和生活中,如果记性不好,就慢慢想;
如果问题不好解决,就慢慢解决;
如果一次不成,就做两次;
既然跑不快,那就不如慢点跑,好好看看风景。

3.跳出圈子,多接触别的圈子,最好是比你层次高的圈子,那最好不过了,你的思维与认知会在不知不觉中发生变化。
如果你是程序员,没事多跟公司的产品经理、设计师们聊聊,多接触下外面更多、更牛的圈子,那你就很容易跳出这种思维的定式,你所看到的,你所想到的,可能都会大不一样。

4.做得越多,出的故障越多。除非你啥也不做,但是出的故障越多,你的成长才会越大。所以我还是跟大家说,趁着年轻,多犯错误。因为你现在犯的错误都还好,只有人犯过错误了,你才会有那种深刻的理解,对这个东西,你会有更深的理解,不犯错误的人你是不会成长的。

5.IT行业的人最好定期更新简历,然后面试一圈,一则看是否有更好的机会,二则了解市场行情与技术动向,也作为自己下一年努力的方向。

6.写代码是一项实践性的工作,不进入生产环境,很多东西自己是搞不懂也不会接触到的。希望各位自学编程的人,都能早日找到工作,快速学习和成长,不断进化和突破,最终超越自己。

学习

1.学习要一步一步来,不要急。

2.与其凭空焦虑,我们还是脚踏实地地学习吧!

 3.贪多嚼不烂,欲速则不达。
4. 看Demo中的代码,先看懂了,然后再盲敲,按照自己的理解琢磨着敲。在自己敲不动的时候,思路卡顿的时候,再去翻书或者看视频,看他们是怎么写的?这样你就会记忆深刻,你同时也得思考,我为什么会在这里卡住?是不是我对这个知识点没有理解透?然后再熟悉一下,继续自己敲。直到自己完整的敲出来。周而复始,一点一点的锻炼,你的能力就敲出来了。
5.我始终把这些学习网站提供的或免费或付费的视频当作快速了解的渠道,通过视频的方式确实比较节省时间,因为讲的是别人总结完的,挑出来的那一部分,讲的过程中有时也会想对的解释一些额外的背景知识,但也相对的,这样的知识始终觉得不够体系,一般我喜欢通过视频快速了解一个知识点后,有必要深入在结合其他书籍文档等材料深入学习。所以我觉得知识付费是可取的,但不能一昧,花的钱对的起你节省的时间就行
6.比如我推荐大家读英文刊物,他们读着会有点痛苦,但是慢慢读,咬着牙读上一段时间,他们会觉得那些英文文章都还是让他们比较开脑洞。因为英文文章里面会有英文的关健词,你读英文关健词的的时候,你就会,这个关健词什么?一方面学英文,另外一方面你会用这个关健词去搜索,你会得到更多的知识源,你就不需要听那个二手货,或者三手,四手的,类似这样。
7.用你所掌握的技术做一个个人的小项目,设计一些简单的功能并且实现他们。毫无疑问,你会遇到很多的绊脚石,当遇到它们的时候,在*或者Google上面搜索之,解决之。你已经踏上一条成为某一领域专家的旅程,遇到的困难挫折越多,你会变得越睿智。有句老话说得好,“专家是犯错最多的人”,这意味着他们尝试了很多疯狂的事情来探索这门技术的极限,最后,对于这门技术是如何运作的就可以知根知底。

互联网

1.双十一不买东西的原因:

  • 讨厌被营销,产生焦虑感。
  • 不愿囤货,拒绝鸡肋。
  • 商家噱头太多,诚意不足。
  • 商品不一定是最低价

社会

1.中美两国本科生近十年的毕业率数据发现,美国大学本科毕业率约为50%,不同类型、不同竞争力的大学,乃至相同类型、相同竞争力的大学本科毕业率都存在明显差异;中国大学本科毕业率则超过90%,不同类型、不同竞争力的大学本科毕业率无明显差异。他认为,这种反差,反映了高等教育在人才培养上是“严进宽出”还是“宽进严出”的选择问题。

高校的教师评价机制,更多看发表了多少论文、做出了多少学术成果,而教学尤其是本科教学质量,权重极小,这样的“指挥棒”下,很多老师对教学没有积极性,敷衍了事。老师讲课质量不高,除了部分自学能力强的学生,大多数学生自然也无法学好。而高校出于追求毕业率等目标,对毕业的要求一般比较宽。
2.迂腐狭隘的人,不需要知道电子竞技是什么,他们只需要一个背锅侠,一个可以掩盖家庭教育失败、学校教育失败、社会教育失败的东西。现在他叫游戏,十五年前它是早恋,二十年前它是偶像,三十年前它是香港电影,三十五年前它是武侠小说。

生活

1.当你的身体不舒服,总是得去医院的时候,什么月薪2万,3万都是浮云。。好好爱惜自己的身体吧。
2.不仅是“生育*”,我们还需要“恋爱*”、“婚姻*”、“产检*”、“坐月子*”、“喂奶*”、“教育*”、“二胎*”、“节育*”!

上一篇:常用聚类算法(一) DBSCAN算法


下一篇:Java内存泄露分析和解决方案及Windows自带查看工具