技术
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进行熔断和降级。
比如,积分服务挂了可以来个降级:每次调用积分服务,你就在数据库里记录一条消息,说给某某用户增加了多少积分,因为积分服务挂了,导致没增加成功!这样等积分服务恢复了,你可以根据这些记录手工加一下积分。这个过程,就是所谓的降级。
- 性能调优、算法数据机构
- 高并发下数据安全、接口冪等性、原子性等
- 分布式下协同、已经锁的处理
- 数据库的分库分表、项目之间的垂直拆分
出现频率高的技术点有:HashMap、JVM、Dubbo、Mybatis、Zookeeper、http tcp/ip
14.数据结构和计算机基础>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应用的容器。
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.与其凭空焦虑,我们还是脚踏实地地学习吧!
互联网
1.双十一不买东西的原因:
- 讨厌被营销,产生焦虑感。
- 不愿囤货,拒绝鸡肋。
- 商家噱头太多,诚意不足。
- 商品不一定是最低价
社会
1.中美两国本科生近十年的毕业率数据发现,美国大学本科毕业率约为50%,不同类型、不同竞争力的大学,乃至相同类型、相同竞争力的大学本科毕业率都存在明显差异;中国大学本科毕业率则超过90%,不同类型、不同竞争力的大学本科毕业率无明显差异。他认为,这种反差,反映了高等教育在人才培养上是“严进宽出”还是“宽进严出”的选择问题。
生活
1.当你的身体不舒服,总是得去医院的时候,什么月薪2万,3万都是浮云。。好好爱惜自己的身体吧。
2.不仅是“生育*”,我们还需要“恋爱*”、“婚姻*”、“产检*”、“坐月子*”、“喂奶*”、“教育*”、“二胎*”、“节育*”!