架构

互联网公司的面试官是如何360°无死角考察候选人的?[z]

落爺英雄遲暮 提交于 2020-03-16 08:15:27
[z]https://juejin.im/post/5c0e47ebf265da614e2be9a7 一、写在前面 最近收到不少读者反馈,说自己在应聘一些中大型互联网公司的Java工程师岗位时遇到了不少困惑。 这些同学说自己其实也做了精心准备,网上搜集了不少Java面试题,然而实际去互联网公司面试才发现,人家问的,和你准备的东西,对不上号,这就很尴尬了。。。 因此,从这篇文章开始,笔者准备写一个长期连载的系列: 《Java进阶面试系列》 。主要跟大家聊聊中大型互联网公司Java面试中的一些热门、高频的技术问题。 希望这个系列的文章,能在年后金三银四的跳槽季中,助各位小伙伴一臂之力。 二、先来体验一个真实的面试连环炮 好,闲话不多说,我们进入正题! 本系列文章,我们将会从消息中间件、分布式缓存、分布式搜索、分布式架构、海量数据、NoSQL、高并发、高可用、高性能、数据库、JVM虚拟机等各个方面来聊一下面试中的高频技术问题。 现在一些中大型互联网公司的面试官,很多都是技术水平非常不错的兄弟。在面试候选人的时候,一般都会采取连环炮的策略来深挖一个候选人的技术水平。 举个例子,比如说看你简历上写了 熟悉消息中间件(MQ技术) 。那么可能我们就会有一个类似下面这样的连环炮式发问: 说说你们公司线上生产环境用的是什么消息中间件? 那你们线上系统是有哪些技术挑战

如何从开发岗转型做架构师?

陌路散爱 提交于 2020-03-16 07:36:57
在继续“四维架构设计方法论”这个话题之前,我们先来回顾一下前两篇文章的内容,以便我们更好地理解本篇: 如何建立架构师的立体化思维 :阐述了架构设计会涉及业务、技术、系统和时间等几个维度,也建议从技术维度将应用分成七个层次。 如何设计分层架构和交互接口 :介绍了分层架构的设计流程,以及接口设计方法等内容,还谈了领域、资源和数据三种模型的差别等。 接下来,我们来看看接口的分类方法和模块的设计方法: 接口类型的分类方法 如何确定图形用户接口( GUI )和应用编程接口( API )的分工呢?在收集业务需求的过程中,我们可以标识出发起这个需求的角色是人还是程序。如果发起需求的是人,那就需要通过 GUI 来满足,而如果发起需求的是程序,那就要通过 API 来满足。 图 8 接口类型的分类方法 模块的设计方法 架构设计流程第三步,按照功能相近的原则将接口划归到不同的模块当中。划分模块就会涉及到业务拆分。跟分层第一刀位置一样,我们选择业务层和领域层的交界处来做业务拆分。业务拆分需要跟业务专家一起来完成,通过这个过程可以确定出 Y 轴包含哪些业务系统,而这些业务系统的公用模块或系统将会被划分到业务层 X2 、领域层 X4 当中。 在做完第一轮业务拆分之后,我们就可以进入设计阶段,确定业务的交互流程,进一步明确业务层 X2 、领域层 X4 。然后并行启动交互设计和建模,其中交互设计是为了确定交互层

项目经理和架构师的岗位职责

假装没事ソ 提交于 2020-03-16 01:46:30
项目经理和架构师这两个职位虽然在工作内容和职责上不同,但是在国内的企业中这两个职位的职责经常会放在一个人身上,在中小型公司中更是如此,一个人既是项目经理又是系统结构的设计者。在比较正式的企业中,也会存在同一个在这两个职位间相互转化的情况,例如从架构师转为项目经理。自己对这两块比较感兴趣,希望能够在这两个职位间自如切换。因而在“猎聘网”找了对这两个职位的说明,摘录如下,作为自己学习和提高的目标。 项目经理 1. 负责项目进度管理、质量控制、人员管理、风险管理,领导项目团队准时、优质实现项目目标; 2. 负责协调用户业务需求,制定具体的项目功能细节,负责软件系统需求的调研和分析,即时反馈阶段性成果;与客户保持联系,并按照客户的合理需求改进; 3. 按照项目要求对业务进行整理和流程设计,按照软件功能要求进行详细设计; 4. 制定项目开发计划文档,量化并分配任务;跟踪项目进度,协调组员合作; 5. 监督项目进展各阶段的文档,如《项目章程》、《项目立项报告》、《需求确认》、《实施计划》、《验收报告》等项目文档的编写,确保文档完整规范; 6. 判断客户需求变更的合理性,同时与组员及客户沟通协调;确认变更时,产生需求变更文档,更改开发计划; 7. 向上级汇报项目的进展情况、需求变更等项目信息; 8. 总结已完成项目,产生项目总结文档; 9. 传递知识,提升团队能力。 架构师 1. 熟悉分布式

在家办公2周,准备离职了...

六月ゝ 毕业季﹏ 提交于 2020-03-14 00:55:25
以前,特别羡慕在家办公一族,感觉好爽。 没有烦人的闹钟,没有忙碌的早晨,没有拥挤的地铁,没有强制的打卡。 9点上班,8点55醒也不怕迟到。 床在桌边,饭在桌上,家里的一切都那么安逸。 即使做同样的事情,心情肯定是愉悦的 我可以撸上一整天的代码! 想想就兴奋,可是... 如今,因为疫情的原因,很多人已经体验到了在家办公的滋味。 这滋味,好像没有想象的那样甜。 以前在公司撸码,下班回家了,只要不遇到紧急事情,一般不会有人再打扰你,回家就等于下班。 在家办公后,没有了固定上下班概念,24小时微信、钉钉待命,群回复慢了又被批,领导会要求员工每天进行工作总结,事无巨细全盘列出进行审核。 可以说,以前公司996,现在在家007。 在家办公后,不但没有了自己的时间安排,反而被压榨更多。 每天的日报、日报、日报... 这个时候,如果可以选择,我选择回到过去。 整理好当天的日报,想了很多,去年5%的涨薪(听说行业平均涨薪也有8%),委屈了一年多,长时间的CRUD,技术能力也得不到提升。 也许,是时候为下一份工作准备准备了。 幸好,远程办公有一个好处,虽然需要更长时间的on call,但是时间分配相对来说更加的自由一点,所以抓紧这些时间空隙充电学习。 前段时间搜集的对标阿里、京东等大厂Java岗的技术点,把相应的学习文档以及视频整理了出来,趁这个机会好好学习一番,金三银四一展身手 微服务 “微服务

网站架构的高可用性总结

和自甴很熟 提交于 2020-03-13 05:41:54
一、产品发布与测试: 1、产品的发布测试:自测---公测--预发布测试---典型逻辑案例测试---正式发布(灰度发布); 2、互联网产品一周发布一次,机制:每周四发布(前三天产品研发,周四发布,如有问题,周五解决问题;); 3、灰度发布测试,采取部分服务器先发布,没有任何问题,产品在所有服务器上部署;(AB版本测试); 4、自动化测试(目前研发团队实力无法做大,期待更完善的研发团队) 二、产品发布要求: 1、没有监控功能的产品或者功能模块,不允许发布; 监控:用户行为监控(客户端:百度统计等,服务端)、服务器性能监控(工具:Ganglia)、运行数据报告; 三、代码控制: 1、代码版本控制工具:SVN、GIT; 主要采取:主干发布,分支开发; 四、产品架构的高可用性: 1、网站可用性的度量和考核; 可用性度量:2个9是基本可用,网站年度不可用时间不超过88小时;3个9是较高可用,网站年度不可用时间不超过9小时,4个9是具有自动恢复能力的的高可用,网站年度 不可用时间不超过53分钟(QQ是4个9);5个9是极高可用性,网站年度不可用时间不超过5分钟。 可用性考核:对外是服务承诺,对内是考核指标;(互联网公司,网站可用性与工程师、架构师的绩效关联); 高可用的应用:负载均衡 + 集群;集群中的用户上下文:单独的Session(也可以是redis)管理,利用redis解决用户上下文问题

如何建立架构师所需的立体化思维?【1】

醉酒当歌 提交于 2020-03-13 05:11:27
从程序员往架构师转型的路上,蔡学镛老师总结的“四维架构设计方法论”对我颇有帮助,让我对架构设计有了更立体化、系统化的认知,现将学习心得分享出来供需要的小伙伴参考。 这套方法论通过空间( X 、 Y 、 Z )三个维度及时间 T 维度将问题域解构成可以轻松应对的小方块,分而治之。同时,空间( X 、 Y 、 Z )三个维度联动,专门为单个维度解决不了的问题提供解决方案。时间 T 维度将问题分解到一个时间范围内,分步骤按节奏逐一解决。多维度、立体化、分层次、动态演进,这是我对这套方法论特点的总结。 接下来,让我们进入这个四维的架构时空一探究竟! 图 1 四维座标系统 前后端维度( X1 … X7 ) 前后端维度被分解为交互、业务、领域、资源四大层,其中业务可以细分为应用 X2 、框架 X3 ,领域可以细分为服务 X4 、核心 X5 ,资源也可以细分为代理 X6 、数据 X7 ,共分为七个层次。服务 X4 可以实现 API ,如果公开,就是开放接口,调用服务层的接口,通常需要授权。代理 X6 可以实现 SPI ,隔离耦合,避免核心 X5 依赖特定的外部系统或数据库。每个层次做到高内聚,层与层之间做到低耦合。 图 2 X 轴分层结构 在系统实现过程中,可以综合考虑现状, X2 应用和 X3 框架可以不分拆, X4 服务和 X5 核心可以不分拆,待后续时机成熟可以再重构分层

Django学习笔记〇六——MCV和MTV框架介绍

大兔子大兔子 提交于 2020-03-12 12:00:03
MVC,全名是Model View Controller,是Web服务开发的最著名的模式( 架构模式 ),是软件工程的一种软甲架构模式,他把软件系统分成了三个基本部分:模型(Model),视图(View)以及控制器(Controller),具有耦合性低,复用性高,生命周期成本高等优点。MCV架构可以用下面的图来表示 可以从这个图看出来,最上面的一层应该是视图层(从网上截的这个图可能有些问题,视图层是直接面向使用对象的),视图层提供了用户的操作界面,是程序的外壳。 最底层是操作数据的模型层Model 中间的一层是控制层Controller,负责根据用户从视图层输入的指令,通过模型层获取数据后进行相应的操作,最终产生结果返回给视图层。 这三层是紧密联系在一起但又互相独立,每一层的变化都不影响到其他层,每一层都对外提供借接口供其他层调用。这样一来,软件就可以实现模块化,修改外观或数据都不用修改其他层,方便了维护和升级。 ------------恢复内容开始------------ 通过前面做的那个用户管理的Web服务,我们可以大致的了解一下Django是如何实现功能的,今天就结合前面的知识我们来聊一聊Web开发最经典的MVC架构模式和Django的架构模式。 MVC架构模式 MVC,全名是Model View Controller,是Web服务开发的最著名的模式( 架构模式 )

大型架构服务器要几台

独自空忆成欢 提交于 2020-03-12 06:42:45
大型架构服务器要几台? http://www.docin.com/p-744136849.html http://cache.baiducontent.com/c?m=9d78d513d9d430db4f99e469 7c62c015194381132ba7d402 09d5843990732d43506793ac 51220777a0d27d1716d9484b 9cf22173471456b78cb8f85d dccb85595e9f543e671df656 64d60edcc15154c037e15dfe ae69f0caf725e2a8c5d2af43 23cf44710d9781fc4d7417dd 6e800340e7b1ed4d025e60ad 9c30728b5b636edf7d4fec01 bfa2256f749ceb981909d42a a7374cc6f469a73e65e44efb 02593344d649b70e522734ea 492ce8444a5ed4b403&p=8e3ec54ad5c34ae413be9b7c 5605a5&newp=8b2a975689840eb405bd9b7d 0d1dcf231610db2151d4db01 298ffe0cc4241a1a1a3aecbf 20221305d1c77e600bac4d5c

第一章 SpringCloud简介

戏子无情 提交于 2020-03-12 04:43:10
一、架构的演变过程 我们最先接触的单体架构,整个系统就只有一个工程,打包往往是打成了war包,然后部署到单一tomcat上面,这种就是单体架构。 假如系统按照功能划分了,商品模块,购物车模块,订单模块,物流模块等等模块。那么所有模块都会在一个工程里面,这就是单体架构。 1、单体架构的优缺点 优点: 1)结构简单,部署简单。 2)所需的硬件资源少。 3)节省成本。 缺点: 1)版本迭代慢,往往改动一个代码会影响全局。 2)不能满足一定并发的访问。 3)代码维护困难,所有代码在一个工程里面,存在被其他人修改的风险。 随着业务的拓展,公司的发展,单体架构慢慢的不能满足我们的需求,我们需要对架构进行变动,我们能够想到的最简单的办法就是加机器,对应用横向扩展。 如图: 这种架构貌似暂时解决了我们的问题,但是用户量慢慢增加后,我们只能通过横向加机器来解决,还是会存在版本迭代慢,代码维护困难的问题。而且用户请求往往是读多写少的情况,所以可能真正需要扩容的只是商品模块而已,而现在是整个工程都扩容了,这无形中是一种资源的浪费,因为其他模块可能根本不需要扩容就可以满足需求。所以我们有必要对整个工程按照模块进行拆分,拆分后的架构图如下: 模块拆分后,模块和模块之间是需要通过接口调用的方式进行通信,模块和模块之间通过分流软件进行负载均衡。这个架构解决前面的资源浪费问题和代码管理问题,因为我们是对系统拆分了

web集群搭建笔记

不羁岁月 提交于 2020-03-12 03:46:12
目前的项目很少会采用单机架构了,一是因为单机性能有限,二是因为单机服务一旦故障整个系统就无法继续提供服务了。所以目前集群和分布式的架构使用得很广泛,主要就是为了解决上述两个问题,一个性能问题,一个故障问题, 通过分布式架构解决性能(高并发)问题,通过集群架构解决故障服务(高可用)问题。 技术简介 Lombok通过简单注释来精简代码来达到消除冗长代码的目的 优点:提高编程效率、简洁代码、消除冗长代码、避免修改字段名忘记修改方法名 增加jar 下载idea的lombok插件 Pojo中的get/set就可以用注解替换 Maven隔离 不同环境配置进行分离清除打包mvn clean package -Dmaven.test.skip=true -Pdev实际项目环境,环境之间的各种差异,maven环境隔离的配置,设置默认环境,验证-重新打包测试 Tomcat集群 能带来什么:1.提高性能、高可用,2.项目横向扩展能力(纵向扩展指提升服务器的性能)实现原理:通过Nginx负载均衡进行请求转发架构对比: 新问题:1.Session登录信息存储与读取,2.服务器定时任务并发解决方案:1.nginx ip hash policy 可以不改变现有技术架构,横向扩展(省事),但负载不平均,ip变化下无法服务。Tomcat单机部署多应用/多机部署多应用