• 每月IT摘录201810


    技术

    1.Redis。对于单机实例,我们采用原生主从(Master-Slave)模式实现高可用,常规模式下对外仅暴露 Master 节点。由于使用原生 Redis,所以单机实例支持所有 Redis 指令。
    对于单机实例,我们使用Redis 自带的哨兵(Sentinel)集群对实例进行状态监控与 Failover。Sentinel 是 Redis 自带的高可用组件,将 Redis 注册到由多个 Sentinel 组成的 Sentinel 集群后,Sentinel 会对 Redis 实例进行健康检查,当 Redis 发生故障后,Sentinel 会通过 Gossip 协议进行故障检测,确认宕机后会通过一个简化的 Raft 协议来提升 Slave 成为新的 Master。
    通过向Sentinel 集群注册 Master 节点实现实例的高可用,当提交 Master 实例的连接信息后,Sentinel 会主动探测所有的 Slave 实例并建立连接,定期检查健康状态。客户端通过多种资源发现策略如简单的 DNS 发现 Master 节点,将来有计划迁移到如 Consul 或 etcd 等资源发现组件 。
     当Master 节点发生宕机时,Sentinel 集群会提升 Slave 节点为新的 Master,同时在自身的 pubsub channel +switch-master 广播切换的消息
    2.初级阶段之后,你能够用tomcat和ssm框架弄一个简单的项目出来了, 这时候 你可以注意一下编码规范,变量命名用英文,状态变量用枚举 常量等 新人写的代码往往和狗啃的一样……不要在controller写逻辑 只接收检验数据 调用service和返回信息 不要把request传进service里 那样会破坏依赖分离的初衷,dao基本没啥说的 就是查数据 我见过无数新人写代码都是 service和dao就一个干巴巴的方法 逻辑全写在controller里……这种的不用看 都是菜鸟。
    你会框架的CRUD之后 你可以看一下nginx 可以尝试做一个负载均衡玩一下,这个不需要你写代码 只需要配置下 但是能有效的提高简历质量,你还可以学习下MQ 就从activeMQ开始 尝试怎么用对接把任务异步出去, 你还可以试试redis 做个简单的数据缓存或者会话缓存,这时候你再去找工作就立马不一样了,学这三个可能也就用两三周不到,但是你的简历会体现出一个中级程序员的水平。
    那说到中级技术水平 个人觉得应该掌握的技术有 负载均衡 apache http 或者nginx均可, 队列 ActiveMQ 就行(这个是java语言写的比较贴近java ),缓存 redis就行 memcache用的越来越少了感觉,还有精力的话,可以看一下mogoDB 做个简单的demo存个json进去玩一玩。 然后你的简历又丰富起来了………你工作里肯定用不到那么多,但是你就往你简历里写,糅合进你的项目里去,反正你知道什么场景用这些就行,问不出来的。
    初级和中级界限很模糊的,只是一些中间件的使用而已。如果你已经学到这个地步,那你要是再说找不到工作, 我是不信的 这时候你找工作 如果在北上广深 应该有机会破万了,至于具体拿多少,看你的表达忽悠能力了。
    接下来就是比较高级的部分了,这个阶段 你大概又陷入苦学的阶段了………因为你不能只会用,你要知道原理,不至于让你自己实现一个出来,但是基本原理要知道。到了这个阶段,你要懂得jvm基本结构,要知道垃圾回收机制,常用垃圾回收算法,jvm简单调优参数, 数据库也是个重头戏,你要知道mysql事务隔离机制的实现,怎么优化sql , 要知道springmvc流程 spring的原理 事务传播机制,mybatis流程原理, 乐观锁悲观锁什么情况用,你要学会考虑系统瓶颈,系统容灾,单点故障, 你要懂得一致性是怎么回事,cap理论 paxos算法 以及zookeeper干嘛用的,能解决什么问题? 你要懂得soa架构,dubbo , 微服务 spring boot spring cloud 这些高级框架 尝试用一用,谷歌,开源社区 将要取代百度成为你解决问题的主要动力和前进的方向, 你会有种一览众山小的感觉,你会觉得弄个百万并发的系统其实并不难,难的是后续问题,日志处理 运维问题, 关于运维我给不了太多建议,可以了解下 zabbix 之类的 可以去学习下 docker 微服务加docker将是未来的趋势。
    3.微博的信息流后端架构经历了单体应用 -> 微服务架构 -> 容器化应用 -> DevOps 的发展历程。

    2017 年初,微博刚刚改造完微博架构,对原有的单体应用架构进行改造,把功能相对独立的模块拆分出去,部署为微服务,分别交给专门的更小的团队来维护。再到后来又引入了 Docker 容器化,以及 Service Mesh 等技术,为了更好地适应微博业务的高速发展。
    然后,号称支持八位明星并发出轨的微博,遭遇两位明星结婚居然崩溃。
    4.DevOps。DevOps就是开发(Development)和运维(Operations)这两个领域的合并。运维人员和开发人员早点合作,不要等到上线后再排错。
    5.如何学习分布式、微服务?
    先简单学一下springBoot,看看怎么使用,很简单。
    然后再看springCloud, 推荐程序猿DD的博客。15天,就能入门(能了解是什么东西,概念上至少清楚)
    再docker,3天,就能搞定。dubbo,zookeeper,稍微了解一下,跟着做个demo,1天。redis嘛,1天。
    别慌,其实都没有什么,先简单了解一下,用的时候再慢慢深入,理解原理。事不宜迟,今天就开始干吧。
    6. jdk提供了三种排序方法。并行排序,快速排序,归并排序
    7.面试官:你了解集合吗?
    lz:了解呀!
    面试官:说说HashMap、HashTable有什么不同?
    lz:首先最大的不同就是HashMap线程不安全,效率高、HashTable线程安全,效率低,还有HashMap允许k、v为null,HashTable不允许
    面试官:HashTable为什么是线程安全的?
    lz:因为HashTable内部为所有的操作都加了同步锁(synchronized)
    面试官:为什么加了synchronized锁会导致效率降低?
    lz:因为加了同步锁(synchronized)其他线程再想访问的话,必须等到前一个线程释放了锁才能使用。比如十个线程,只能一个一个排队等候执行,所以效率会降低。面试官:我们公司有些大数据量等需要用到HashTable,但又想保证执行效率,怎么办?还有其他可用的集合吗?
    lz:有啊ConcurrentHashMap。
    面试官:ConcurrentHashMap是如何保证线程安全的?
    lz:因为使用了分段锁segment。jdk1.8采用cas+synchronized
    面试官:为什么分段锁比同步锁效率高?
    lz:分段锁就是把Map分成了多个segment去处理,进行put操作时,根据hashcode找到相应的锁,彼此之间不受影响,所以效率高。而同步锁--锁住的是整个HashTable,因此效率会低。
    面试官:知道HashMap的实现原理吗?了解hash碰撞吗?
    lz:HashMap是一个数组+链表的数据结构。采用hashing原理,在进行put 操作时根据Key计算出它的hashcode,根据hashcode找到相应的桶的位置。在进行get 时也是根据hashcode 找到相应位置的数据的。当发生hash碰撞时,即hashcode相同。那么会在相应的桶中形成一个链表结构进行存储。
    8.工作两三年后,你需要做的是深入了解Java底层和Java类库(比如并发那本书就是Java并发包java.concurrent的内容),也就是JVM和JDK的相关内容。而且还要更深入的去了解你所使用的框架,方式比较推荐看源码或者看官方文档。
    另外,还有一种学习的方式,在2年这个阶段,也应该启用了,那就是造轮子。不要听信那套“不要重复造轮子”的论调,那是公司为了节省时间成本编造出来的。重复造轮子或许对别人没有价值,因为你造的轮子可能早就有了,而且一般情况下你造出来的轮子还没有现存的好。但是对别人没有价值,不代表对你自己没有价值。一个造轮子的过程,是一个从无到有的过程。这个过程可以对你进行系统的锻炼,它不仅考察你的编码能力,还考察你的框架设计能力,你需要让你的轮子拥有足够好的扩展性、健壮性。而且在造轮子的过程中,你会遇到各种各样的难题,这些难题往往又是你学习的契机。当你把轮子造好的时候,你一定会发现,其实你自己收获了很多。所以,这个阶段,除了上面提到的了解JVM、JDK和框架源码以外,也请你根据别人优秀的源码,去造一个任何你能够想象出来的轮子
    9.工作前3年的过程中,你肯定或多或少接触过一些其它的技术,比如大数据、分布式缓存、分布式消息服务、分布式计算、软负载均衡等等。这些技术,你能精通任何一项,都将是你未来面试时巨大的优势,因此如果你对某一项技术感兴趣的话,这个时候可以深入去研究一下。
    这项技术不一定是你工作所用到的,但一定是相关的。
    而且在研究一门新技术时,切忌朝三暮四。有的同学今天去整整大数据,搞搞Hadoop、hbase一类的东西。过不了一段时间,就觉得没意思,又去研究分布式缓存,比如redis。然后又过不了一段时间,又去研究分布式计算,比如整整Mapreduce或者storm。结果到最后,搞得自己好像什么都会一样,在简历上大言不惭的写上大数据、分布式缓存、分布式计算都了解,其实任何一个都只是浮于表面。到时候面试官随便一问,就把你给识破了。
    一定要记住,作为一个程序猿,平日里所接触的技术可能会很多,但是想要让一门技术成为你的优势,那么一定是你对这门技术的了解强过绝大多数人才行。
    所谓优秀,即能别人所不能。而你前三年所学习的内容,是很多做过几年的Java开发都能够掌握的。那么为了让自己有差异性,你就需要另辟蹊径,找一个方向深入研究下去,以期在将来,你能够成为这个领域的专家,比如分布式计算领域的专家,大数据领域的专家,并发领域的专家等等。
    10.由面到点的学习方法。比如,可以先了解Spring Cloud里有哪些组件,比如Ribbon可以用来负载均衡,Hystrix可以用来容错等,先把Spring Cloud里诸多组件先了解个大概,能用它们搭建成一个微服务体系后,再深入了解其中每个组件的细节,比如Spring Cloud Stream里Kafka配置细节。
    11.一个P6真正要掌握的本领,就是有个关键词,然后就能自己看外文文档,然后就能搭建出一个看上去很像样的工程化产品。
    比如主程今天说,docker了解一样。然后明天让我搭dokcer自动化部署流程了。今天说git flow了解一下,明天就要严格执行git工作流了。

    工作

    1.到了面试阶段,【聊一聊的你们的项目】,【你在项目中做了哪些东西】,【你在项目中遇到的最难的问题是什么,你是怎么解决的】这三个问题一定是问的频率最多的,也是对于面试官考察一个人最重要的。其实大部分人在项目中都是写的业务代码,所以在准备的时候要有侧重点。
    • 【聊一聊的你们的项目】:侧重业务流程,用简练清楚的语言描述项目做了一个什么事情。然后可以简单介绍一下项目使用的架构和技术栈。这个其实整理一下,一定有东西可以说的,切记业务不要介绍的过于复杂,很多复杂的东西一概而过,面试官有兴趣的话他会自己问,每个系统都有很多细节,讲不完的,这里讲太多会显得很啰嗦。
    • 【你在项目中做了哪些东西】:侧重你所做的东西在业务流程中承担的作用和重要程度。然后交代清楚这一块的复杂度,体现一定的技术难度。我知道大部分人都在写业务代码的。大部分时候项目需要大数据和大并发的场景比较少。这个时候你可以侧重从系统设计去聊,比如“面对复杂的业务逻辑如何解藕?”。
    • 【你在项目中遇到的最难的问题是什么,你是怎么解决的】:侧重有难度的问题,对于后台,侧重于并发,大量数据,和分布式问题。尽量不要说业务流程,或者一些低级的问题。面试官肯定希望了解你解决了多难的技术问题。那么没有大数据,高并发方面的问题解决经历怎么办?我的经验可以侧重解决分布式问题。因为不管你的用户量有多少,只要项目是分布式系统,那一定会有分布式问题。比如“幂等如何做的?”。

    2.这个世界的变化是非常快的,尤其做技术的,更得要时刻紧跟趋势,趋势一旦已经确定,那些守旧的人面临的竞争压力会非常大,甚至会被淘汰,那么趋势怎么判断呢?就是靠那些顶级科技公司的动作、看各行业大神们的动作来判断的,当然这些巨头与大神们也有看错的时候,但是我相信总比以自己的喜好来判断趋势更靠谱的多,我宁愿相信他们。

    3."互联网发展迅猛,众多互联网公司冒起来也就是这几年的事情,可能一开始还小的时候就是想着先把产品打出去,活下来再说,所以采用了PHP、Python、Rails此类的快速开发语言或框架。但是一旦做大了,当然其中有些还是在既有技术栈上下功夫,有些则面对着换技术栈、引进新技术栈的问题。"

     4.外包公司对程序员能力增长没有好处。压根没时间去研究代码架构和规范编码规范,这对你的职业生涯是致命的起点缺陷,一开始就不严格要求和约束自己的代码习惯和能力,将是后患无穷。这还不是致命的,期间你做一个功能,基本全是搜索、 复制、粘贴,要么是网络上的,要么是之前公司早已经写好千百遍的代码块,你想自己写一写东西都没机会,因为老大会告诉你 不 需 要!快点赶工期啊

    5.一个项目成功可不仅仅是写代码这么简单。你也做过很多项目效益分析,你自己想想,有几个项目是真的死于技术不行的。如果老板期望过高呢?如果给的资源不够呢?如果其他部门不配合你呢?你做精准营销,人家一线销售根本不鸟你,你怎么精准?


    互联网

    1.腾讯"内部赛马"机制 :
    如果内部竞争打出了结果,腾讯会让赢家掌握所有资源、全力对外;如果打不出结果,那么内部斗争就会在公开市场继续进行下去。
     “内部赛马”机制,用好听的话说,是“联邦制”:发挥所有团队的主观积极性,以竞争方式决定胜负;用难听的话说,是“山头林立”:协同效应无法发挥,大量资源被消耗在内部竞争中。腾讯不太可能错过重要潮流,因为所有员工都有机会参与决策,其中任何人的胜利都是腾讯的胜利;但是,如果潮流来得太快,腾讯很难高效地整合资源、一致对外。
    对于“内部赛马”带来的成功和失败,腾讯管理层当然心知肚明。如何在激发内部创新能力的同时,尽可能缩减内耗,是腾讯面临的最大挑战之一。
     

    学习

    1.笛卡尔在《方法论》一书中告诉了我们研究复杂问题的方法和步骤:

    • 尽量将其分解为多个比较简单的小问题,一个一个地分开解决
    • 将小问题从简单到复杂排列,先从容易解决的问题着手
    • 子问题被解决后,进行联调测试,看是否能协同运行

    生活

     1.『她们脸上没有怨气,对这个世界有热爱与好奇,不会开口闭口都是老公孩子家长里短,她们哪怕已经儿女成双,依然没有失去少女感和做为女人的魅力。』  关键不在于是否结婚,在于自我和家庭的边界在哪里。

    社会

    1.“如果说烟瘾是‘1’的话,性瘾大概是‘20’,酒瘾估计是‘100’,毒瘾应该在‘3000’左右。你想想自己戒烟时的决心,乘以3000倍,就是戒毒的难度……”

     2.太多太多人生了病之后,因为没钱治疗而不得不回家等死。就像《我不是药神》里的一句话,这个世界上只有一种病,穷病。
  • 相关阅读:
    opencv imdecode和imencode用法
    caffe网络中屏蔽某一层的输出Silence层
    Opencv画图操作
    linux读取Windows的txt文件问题
    yolo检测系列
    c提取文件路径、文件名和后缀名
    draknet网络配置参数
    darknet源码解析
    Web_Toy
    Heart thing
  • 原文地址:https://www.cnblogs.com/expiator/p/9764567.html
Copyright © 2020-2023  润新知